X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fsysdep.c;h=5d81fe3d248b581420affe4fb8a5ad826f39c084;hb=fb6f6fa4ec4e3277e30d84326d48e6850822d318;hp=47487177eb229a369e57f9b1d2a2b396c6d74ee5;hpb=f0fba6ec25482b9922e4c627cbffae08f54a6d31;p=citadel.git diff --git a/webcit/sysdep.c b/webcit/sysdep.c index 47487177e..5d81fe3d2 100644 --- a/webcit/sysdep.c +++ b/webcit/sysdep.c @@ -1,21 +1,15 @@ /* * WebCit "system dependent" code. * - * Copyright (c) 1996-2011 by the citadel.org team + * Copyright (c) 1996-2012 by the citadel.org team * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. + * This program is open source software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "sysdep.h" @@ -79,10 +73,10 @@ pthread_key_t MyConKey; /* TSD key for MyContext() */ pthread_key_t MyReq; /* TSD key for MyReq() */ int msock; /* master listening socket */ int time_to_die = 0; /* Nonzero if server is shutting down */ -int verbosity = 9; /* Logging level */ extern void *context_loop(ParsedHttpHdrs *Hdr); extern void *housekeeping_loop(void); +extern void do_housekeeping(void); char ctdl_key_dir[PATH_MAX]=SSL_DIR; char file_crpt_file_key[PATH_MAX]=""; @@ -100,6 +94,8 @@ char *static_dirs[]={ /* needs same sort order as the web mapping */ (char*)static_icon_dir /* our icons... */ }; +int ExitPipe[2]; + void InitialiseSemaphores(void) { int i; @@ -108,6 +104,15 @@ void InitialiseSemaphores(void) for (i=0; i 0) close (ssock); - lprintf(2, "in between."); + syslog(2, "in between."); pthread_exit(NULL); } else { /* Got it? do some real work! */ @@ -229,11 +242,11 @@ void worker_entry(void) int fdflags; fdflags = fcntl(ssock, F_GETFL); if (fdflags < 0) - lprintf(1, "unable to get server socket flags! %s \n", + syslog(1, "unable to get server socket flags! %s \n", strerror(errno)); fdflags = fdflags | O_NONBLOCK; if (fcntl(ssock, F_SETFL, fdflags) < 0) - lprintf(1, "unable to set server socket nonblocking flags! %s \n", + syslog(1, "unable to set server socket nonblocking flags! %s \n", strerror(errno)); } @@ -263,30 +276,10 @@ void worker_entry(void) } while (!time_to_die); http_destroy_modules(&Hdr); - lprintf (1, "Thread exiting.\n"); + syslog(1, "Thread exiting.\n"); pthread_exit(NULL); } -/* - * print log messages - * logs to stderr if loglevel is lower than the verbosity set at startup - * - * loglevel level of the message - * format the printf like format string - * ... the strings to put into format - */ -int lprintf(int loglevel, const char *format, ...) -{ - va_list ap; - - if (loglevel <= verbosity) { - va_start(ap, format); - vfprintf(stderr, format, ap); - va_end(ap); - fflush(stderr); - } - return 1; -} /* * Shut us down the regular way. @@ -294,7 +287,8 @@ int lprintf(int loglevel, const char *format, ...) */ pid_t current_child; void graceful_shutdown_watcher(int signum) { - lprintf (1, "Watcher thread exiting.\n"); + syslog(1, "Watcher thread exiting.\n"); + write(ExitPipe[0], HKEY(" ")); kill(current_child, signum); if (signum != SIGHUP) exit(0); @@ -310,7 +304,7 @@ void graceful_shutdown(int signum) { FILE *FD; int fd; - lprintf (1, "WebCit is being shut down on signal %d.\n", signum); + syslog(1, "WebCit is being shut down on signal %d.\n", signum); fd = msock; msock = -1; time_to_die = 1; @@ -318,6 +312,7 @@ void graceful_shutdown(int signum) { fflush (FD); fclose (FD); close(fd); + write(ExitPipe[0], HKEY(" ")); } @@ -330,8 +325,6 @@ void start_daemon(char *pid_file) pid_t child = 0; FILE *fp; int do_restart = 0; - int rv; - FILE *rvfp = NULL; current_child = 0; @@ -339,7 +332,7 @@ void start_daemon(char *pid_file) * We don't just call close() because we don't want these fd's * to be reused for other files. */ - rv = chdir("/"); + chdir("/"); signal(SIGHUP, SIG_IGN); signal(SIGINT, SIG_IGN); @@ -352,9 +345,9 @@ void start_daemon(char *pid_file) setsid(); umask(0); - rvfp = freopen("/dev/null", "r", stdin); - rvfp = freopen("/dev/null", "w", stdout); - rvfp = freopen("/dev/null", "w", stderr); + freopen("/dev/null", "r", stdin); + freopen("/dev/null", "w", stdout); + freopen("/dev/null", "w", stderr); signal(SIGTERM, graceful_shutdown_watcher); signal(SIGHUP, graceful_shutdown_watcher); @@ -441,13 +434,13 @@ void spawn_another_worker_thread() * otherwise the MIME parser crashes on FreeBSD. */ if ((ret = pthread_attr_setstacksize(&attr, 1024 * 1024))) { - lprintf(1, "pthread_attr_setstacksize: %s\n", strerror(ret)); + syslog(1, "pthread_attr_setstacksize: %s\n", strerror(ret)); pthread_attr_destroy(&attr); } /* now create the thread */ if (pthread_create(&SessThread, &attr, (void *(*)(void *)) worker_entry, NULL) != 0) { - lprintf(1, "Can't create thread: %s\n", strerror(errno)); + syslog(1, "Can't create thread: %s\n", strerror(errno)); } /* free up the attributes */ @@ -497,7 +490,7 @@ webcit_calc_dirs_n_files(int relh, const char *basedir, int home, char *webcitdi ctdl_key_dir); /* we should go somewhere we can leave our coredump, if enabled... */ - lprintf(9, "Changing directory to %s\n", socket_dir); + syslog(9, "Changing directory to %s\n", socket_dir); if (chdir(webcitdir) != 0) { perror("chdir"); } @@ -516,15 +509,15 @@ void drop_root(uid_t UID) #ifdef HAVE_GETPWUID_R #ifdef SOLARIS_GETPWUID pwp = getpwuid_r(UID, &pw, pwbuf, sizeof(pwbuf)); -#else // SOLARIS_GETPWUID +#else /* SOLARIS_GETPWUID */ getpwuid_r(UID, &pw, pwbuf, sizeof(pwbuf), &pwp); -#endif // SOLARIS_GETPWUID -#else // HAVE_GETPWUID_R +#endif /* SOLARIS_GETPWUID */ +#else /* HAVE_GETPWUID_R */ pwp = NULL; -#endif // HAVE_GETPWUID_R +#endif /* HAVE_GETPWUID_R */ if (pwp == NULL) - syslog(LOG_CRIT, "WARNING: getpwuid(%ld): %s\n" + syslog(LOG_CRIT, "WARNING: getpwuid(%d): %s\n" "Group IDs will be incorrect.\n", UID, strerror(errno)); else { @@ -559,9 +552,9 @@ void wc_backtrace(void) strings = backtrace_symbols(stack_frames, size); for (i = 0; i < size; i++) { if (strings != NULL) - lprintf(1, "%s\n", strings[i]); + syslog(1, "%s\n", strings[i]); else - lprintf(1, "%p\n", stack_frames[i]); + syslog(1, "%p\n", stack_frames[i]); } free(strings); #endif