--- a/src/server/daemon/webserver.c Tue Jan 24 22:48:14 2017 +0100 +++ b/src/server/daemon/webserver.c Wed Jan 25 11:50:19 2017 +0100 @@ -59,13 +59,12 @@ #include "webserver.h" #include "log.h" #include "auth.h" +#include "srvctrl.h" extern struct FuncStruct webserver_funcs[]; static RestartCallback *atrestart; -static int srvctrl; - int webserver_init() { // init NSPR systhread_init("webserver"); @@ -198,51 +197,9 @@ // create srvctrl unix domain socket // this socket is used for stop, reconfigure and other operations - sstr_t uds_path = ucx_sprintf("%s/private/srvctrl.sock", cfg->tmp.ptr); - struct sockaddr_un addr; - if(uds_path.length > sizeof(addr.sun_path)-1) { - log_ereport( - LOG_CATASTROPHE, - "path '%s' too long for unix domain socket", - uds_path.ptr); + if(srvctrl_init(cfg)) { return -1; - } - - // make sure there is no old srvctrl socket file - // otherweise bind would fail - if(unlink(uds_path.ptr)) { - if(errno != ENOENT) { - log_ereport( - LOG_CATASTROPHE, - "cannot unlink old srvctrl socket '%s': %s", - uds_path.ptr, - strerror(errno)); - return -1; - } - } - - ZERO(&addr, sizeof(addr)); - addr.sun_family = AF_UNIX; - memcpy(addr.sun_path, uds_path.ptr, uds_path.length); - - srvctrl = socket(AF_UNIX, SOCK_STREAM, 0); - if(srvctrl == -1) { - log_ereport( - LOG_CATASTROPHE, - "Cannot create server control socket: %s", - strerror(errno)); - return -1; - } - if(bind(srvctrl, (struct sockaddr*)&addr, sizeof(addr))) { - log_ereport( - LOG_CATASTROPHE, - "srvctrl socket bind failed: %s", - strerror(errno)); - return -1; - } - - free(uds_path.ptr); - + } //endpwent(); // TODO: close or not? //free(pwbuf); // TODO: ? @@ -266,6 +223,8 @@ void webserver_shutdown() { log_ereport(LOG_INFORM, "webserver shutdown"); + srvctrl_shutdown(); + // execute restart callbacks RestartCallback *re = atrestart; while(re) { @@ -274,8 +233,14 @@ } } -int webserver_srvctrl_fd() { - return srvctrl; +int webserver_reconfig() { + if(cfgmgr_load_config(NULL) != 0) { + return -1; + } + // start newly created listeners + start_all_listener(); + + return 0; } void webserver_atrestart(void (*fn)(void *), void *data) {