X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fstatserv.c;h=b92aac408b0f4b4aba9b9833f589a4c3ad2bb823;hb=dc068db61c02117e4e7e4aa3136f055965ec063c;hp=5ac48f420c32c503480aac4b2e6f22b7a8ecd7f4;hpb=49566a6ea1cc01c896584427ce1d327f7cd2be7e;p=yaz-moved-to-github.git diff --git a/src/statserv.c b/src/statserv.c index 5ac48f4..b92aac4 100644 --- a/src/statserv.c +++ b/src/statserv.c @@ -5,7 +5,7 @@ * NT threaded server code by * Chas Woodfield, Fretwell Downing Informatics. * - * $Id: statserv.c,v 1.26 2005-03-08 11:07:50 adam Exp $ + * $Id: statserv.c,v 1.30 2005-05-08 07:13:57 adam Exp $ */ /** @@ -38,6 +38,7 @@ #if HAVE_XML2 #include #include +#include #endif #if YAZ_POSIX_THREADS @@ -63,6 +64,7 @@ static IOCHAN pListener = NULL; +static char gfs_root_dir[FILENAME_MAX+1]; static struct gfs_server *gfs_server_list = 0; static struct gfs_listen *gfs_listen_list = 0; static NMEM gfs_nmem = 0; @@ -233,6 +235,21 @@ static struct gfs_listen * gfs_listen_new(const char *id, return n; } +static void gfs_server_chdir(struct gfs_server *gfs) +{ + if (gfs_root_dir[0]) + { + if (chdir(gfs_root_dir)) + yaz_log(YLOG_WARN|YLOG_ERRNO, "chdir %s", gfs_root_dir); + } + if (gfs->directory) + { + if (chdir(gfs->directory)) + yaz_log(YLOG_WARN|YLOG_ERRNO, "chdir %s", + gfs->directory); + } +} + int control_association(association *assoc, const char *host, int force_open) { char vhost[128], *cp; @@ -264,21 +281,19 @@ int control_association(association *assoc, const char *host, int force_open) { statserv_setcontrol(assoc->last_control); if (assoc->backend && assoc->init) + { + gfs_server_chdir(gfs); (assoc->last_control->bend_close)(assoc->backend); + } assoc->backend = 0; xfree(assoc->init); assoc->init = 0; - if (gfs->directory) - { - if (chdir(gfs->directory)) - yaz_log(YLOG_WARN|YLOG_ERRNO, "chdir %s", - gfs->directory); - } } assoc->cql_transform = gfs->cql_transform; assoc->server_node_ptr = gfs->server_node_ptr; assoc->last_control = &gfs->cb; statserv_setcontrol(&gfs->cb); + gfs_server_chdir(gfs); yaz_log(YLOG_DEBUG, "server select: %s", gfs->cb.configname); return 1; } @@ -403,6 +418,11 @@ static void xml_config_read() static void xml_config_open() { + if (!getcwd(gfs_root_dir, FILENAME_MAX)) + { + yaz_log(YLOG_WARN|YLOG_ERRNO, "getcwd failed"); + gfs_root_dir[0] = '\0'; + } #ifdef WIN32 init_control_tls = 1; current_control_tls = TlsAlloc(); @@ -421,8 +441,18 @@ static void xml_config_open() xml_config_doc = xmlParseFile(control_block.xml_config); if (!xml_config_doc) { - yaz_log(YLOG_WARN, "Could not parse %s", control_block.xml_config); - return ; + yaz_log(YLOG_FATAL, "Could not parse %s", control_block.xml_config); + exit(1); + } + else + { + int noSubstitutions = xmlXIncludeProcess(xml_config_doc); + if (noSubstitutions == -1) + { + yaz_log(YLOG_WARN, "XInclude processing failed for config %s", + control_block.xml_config); + exit(1); + } } } xml_config_read(); @@ -472,7 +502,10 @@ static void xml_config_bend_start() gfs->cb.configname); statserv_setcontrol(&gfs->cb); if (control_block.bend_start) + { + gfs_server_chdir(gfs); (control_block.bend_start)(&gfs->cb); + } } } else @@ -482,7 +515,6 @@ static void xml_config_bend_start() if (control_block.bend_start) (*control_block.bend_start)(&control_block); } - } static void xml_config_bend_stop() @@ -1087,6 +1119,7 @@ statserv_options_block *statserv_getcontrol(void) void statserv_setcontrol(statserv_options_block *block) { + chdir(gfs_root_dir); #ifdef WIN32 if (init_control_tls) TlsSetValue(current_control_tls, block); @@ -1264,6 +1297,7 @@ int check_options(int argc, char **argv) control_block.loglevel = yaz_log_mask_str(STAT_DEFAULT_LOG_LEVEL); yaz_log_init_level(control_block.loglevel); + get_logbits(1); while ((ret = options("1a:iszSTl:v:u:c:w:t:k:d:A:p:DC:f:", argv, argc, &arg)) != -2) { @@ -1307,6 +1341,7 @@ int check_options(int argc, char **argv) control_block.loglevel = yaz_log_mask_str_x(arg,control_block.loglevel); yaz_log_init(control_block.loglevel, me, control_block.logfile); + get_logbits(1); break; case 'a': option_copy(control_block.apdufile, arg); @@ -1374,7 +1409,6 @@ int check_options(int argc, char **argv) return 1; } } - get_logbits(1); return 0; }