X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=server%2Fstatserv.c;h=876328e3696b5c60f648061b45d364c515ee1c3d;hb=a7b235097c10590dde6dfa1859590d4c4e930366;hp=ccd95f1363361af52458e965b3366f482fff474a;hpb=99268f722648e84bf5c54eb685a1434e100f38a1;p=yaz-moved-to-github.git diff --git a/server/statserv.c b/server/statserv.c index ccd95f1..876328e 100644 --- a/server/statserv.c +++ b/server/statserv.c @@ -4,7 +4,22 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: statserv.c,v $ - * Revision 1.18 1995-05-16 08:51:09 quinn + * Revision 1.23 1995-06-15 12:30:48 quinn + * Setuid-facility. + * + * Revision 1.22 1995/06/15 07:45:17 quinn + * Moving to v3. + * + * Revision 1.21 1995/06/06 08:15:40 quinn + * Cosmetic. + * + * Revision 1.20 1995/05/29 08:12:09 quinn + * Moved oid to util + * + * Revision 1.19 1995/05/16 09:37:27 quinn + * Fixed bug + * + * Revision 1.18 1995/05/16 08:51:09 quinn * License, documentation, and memory fixes * * Revision 1.17 1995/05/15 11:56:42 quinn @@ -73,6 +88,8 @@ #include #include #include +#include +#include #include #include @@ -96,11 +113,12 @@ static statserv_options_block control_block = { LOG_DEFAULT_LEVEL, /* log level */ "", /* no PDUs */ "", /* diagnostic output to stderr */ - "tcp:localhost:9999", /* default listener port */ + "tcp:@:9999", /* default listener port */ PROTO_Z3950, /* application protocol */ 60, /* idle timeout (minutes) */ 1024*1024*4, /* maximum PDU size (approx.) to allow */ - "default-config" /* configuration name to pass to backend */ + "default-config", /* configuration name to pass to backend */ + "" /* set user id */ }; #define DEFAULT_LISTENER "tcp:localhost:9999" @@ -294,7 +312,8 @@ static void add_listener(char *where, int what) static void catchchld(int num) { - while (waitpid(-1, 0, WNOHANG) > 0); + while (waitpid(-1, 0, WNOHANG) > 0) + ; signal(SIGCHLD, catchchld); } @@ -318,21 +337,19 @@ int statserv_main(int argc, char **argv) int protocol = control_block.default_proto; me = argv[0]; - while ((ret = options("a:szSl:v:", argv, argc, &arg)) != -2) + while ((ret = options("a:szSl:v:u:", argv, argc, &arg)) != -2) { - if (!arg) - arg = ""; switch (ret) { case 0: add_listener(arg, protocol); listeners++; break; - case 'z': protocol = CS_Z3950; break; - case 's': protocol = CS_SR; break; + case 'z': protocol = PROTO_Z3950; break; + case 's': protocol = PROTO_SR; break; case 'S': control_block.dynamic = 0; break; case 'l': - strcpy(control_block.logfile, arg); + strcpy(control_block.logfile, arg ? arg : ""); log_init(control_block.loglevel, me, control_block.logfile); break; case 'v': @@ -340,9 +357,11 @@ int statserv_main(int argc, char **argv) log_init(control_block.loglevel, me, control_block.logfile); break; case 'a': - strcpy(control_block.apdufile, arg); break; + strcpy(control_block.apdufile, arg ? arg : ""); break; + case 'u': + strcpy(control_block.setuid, arg ? arg : ""); break; default: - fprintf(stderr, "Usage: %s [ -a -v -l -zsS ... ]\n", me); + fprintf(stderr, "Usage: %s [ -a -v -l -u -zsS ... ]\n", me); exit(1); } } @@ -350,6 +369,21 @@ int statserv_main(int argc, char **argv) signal(SIGCHLD, catchchld); if (!listeners && *control_block.default_listen) add_listener(control_block.default_listen, protocol); + if (*control_block.setuid) + { + struct passwd *pw; + + if (!(pw = getpwnam(control_block.setuid))) + { + logf(LOG_FATAL|LOG_ERRNO, "%s", control_block.setuid); + exit(1); + } + if (setuid(pw->pw_uid) < 0) + { + logf(LOG_FATAL|LOG_ERRNO, "setuid"); + exit(1); + } + } logf(LOG_LOG, "Entering event loop."); return event_loop();