projects
/
yaz-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Version 5.9.0
[yaz-moved-to-github.git]
/
src
/
daemon.c
diff --git
a/src/daemon.c
b/src/daemon.c
index
3ece89c
..
27e97db
100644
(file)
--- a/
src/daemon.c
+++ b/
src/daemon.c
@@
-73,6
+73,13
@@
static void normal_stop_handler(int num)
}
}
}
}
+static void log_reopen_handler(int num)
+{
+ yaz_log_reopen();
+ if (child_pid)
+ kill(child_pid, num);
+}
+
static void sigusr2_handler(int num)
{
child_got_signal_from_us = 1;
static void sigusr2_handler(int num)
{
child_got_signal_from_us = 1;
@@
-88,7
+95,6
@@
static void keepalive(void (*work)(void *data), void *data)
int no_sigbus = 0;
int run = 1;
int cont = 1;
int no_sigbus = 0;
int run = 1;
int cont = 1;
- void (*old_sighup)(int);
void (*old_sigterm)(int);
void (*old_sigusr1)(int);
struct sigaction sa2, sa1;
void (*old_sigterm)(int);
void (*old_sigusr1)(int);
struct sigaction sa2, sa1;
@@
-97,7
+103,6
@@
static void keepalive(void (*work)(void *data), void *data)
/* keep signals in their original state and make sure that some signals
to parent process also gets sent to the child.. */
/* keep signals in their original state and make sure that some signals
to parent process also gets sent to the child.. */
- old_sighup = signal(SIGHUP, normal_stop_handler);
old_sigterm = signal(SIGTERM, normal_stop_handler);
old_sigusr1 = signal(SIGUSR1, normal_stop_handler);
old_sigterm = signal(SIGTERM, normal_stop_handler);
old_sigusr1 = signal(SIGUSR1, normal_stop_handler);
@@
-119,7
+124,6
@@
static void keepalive(void (*work)(void *data), void *data)
else if (p == 0)
{
/* child */
else if (p == 0)
{
/* child */
- signal(SIGHUP, old_sighup); /* restore */
signal(SIGTERM, old_sigterm);/* restore */
signal(SIGUSR1, old_sigusr1);/* restore */
sigaction(SIGUSR2, &sa1, NULL);
signal(SIGTERM, old_sigterm);/* restore */
signal(SIGUSR1, old_sigusr1);/* restore */
sigaction(SIGUSR2, &sa1, NULL);
@@
-257,6
+261,15
@@
int yaz_daemon(const char *progname,
yaz_log(YLOG_FATAL, "%s: Unknown user", uid);
exit(1);
}
yaz_log(YLOG_FATAL, "%s: Unknown user", uid);
exit(1);
}
+ if (flags & YAZ_DAEMON_LOG_REOPEN)
+ {
+ FILE *f = yaz_log_file();
+ if (f)
+ {
+ if (fchown(fileno(f), pw->pw_uid, -1))
+ yaz_log(YLOG_WARN|YLOG_ERRNO, "fchown logfile");
+ }
+ }
if (setuid(pw->pw_uid) < 0)
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "setuid");
if (setuid(pw->pw_uid) < 0)
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "setuid");
@@
-322,6
+335,10
@@
int yaz_daemon(const char *progname,
write_pidfile(pid_fd);
write_pidfile(pid_fd);
+ if (flags & YAZ_DAEMON_LOG_REOPEN)
+ {
+ signal(SIGHUP, log_reopen_handler);
+ }
if (flags & YAZ_DAEMON_KEEPALIVE)
{
keepalive(work, data);
if (flags & YAZ_DAEMON_KEEPALIVE)
{
keepalive(work, data);