diff --git a/rhnsd.c b/rhnsd.c index 896b433..6190c0a 100644 --- a/rhnsd.c +++ b/rhnsd.c @@ -49,9 +49,6 @@ static int write_pid (const char *file); static void print_version (FILE *stream, struct argp_state *state); void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version; -/* Current rhn_check pid */ -pid_t rhn_check_pid; - /* Definitions of arguments for argp functions. */ static const struct argp_option options[] = { @@ -148,34 +145,16 @@ int main (int argc, char **argv) if (!foreground) { int i; - pid_t pid; - pid = fork(); - if (pid < 0) - exit (EXIT_FAILURE); - - if (pid > 0) - exit(EXIT_SUCCESS); - + if (fork ()) + exit (0); for (i = 0; i < getdtablesize(); i++) close (i); - /* read from /dev/null */ - int devnull = open("/dev/null", O_RDONLY); - if ((devnull >= 0) && (devnull != STDIN_FILENO)) { - dup2(devnull, STDIN_FILENO); - close(devnull); - } - - pid = fork(); - if (pid < 0) - exit (EXIT_FAILURE); - - if (pid > 0) - exit(EXIT_SUCCESS); + if (fork ()) + exit (0); - if (setsid() < 0) - exit(EXIT_FAILURE); + setsid(); chdir ("/"); @@ -273,13 +252,11 @@ Written by %s.\n\ static void termination_handler (int signum) { syslog(LOG_NOTICE, "Exiting"); - /* Send SIGTERM to current running rhn_check - * and wait for it to exit. */ - kill(rhn_check_pid, SIGTERM); - wait(NULL); + /* Clean up pid file. */ unlink (_PATH_RHNDPID); - exit(EXIT_SUCCESS); + + exit (EXIT_SUCCESS); } /* Returns 1 if the process in pid file FILE is running, 0 if not. */ @@ -417,11 +394,10 @@ static int rhn_do_action(void) openlog("rhnsd", LOG_CONS | LOG_ODELAY | LOG_PID, LOG_DAEMON); /* syslog for safekeeping */ - syslog(LOG_NOTICE, "running program %s with PID %d", RHN_CHECK, getpid()); + syslog(LOG_DEBUG, "running program %s", RHN_CHECK); unset_signal_handlers (); /* exec binary helper */ - rhn_check_pid = getpid(); args[0] = RHN_CHECK; execv(RHN_CHECK, args); @@ -431,7 +407,6 @@ static int rhn_do_action(void) strerror(errno)); exit(errno); } else if (child > 0) { - set_signal_handlers(); int ret = 1; char *buf, buffer[10]; int bufsize = 0; diff --git a/rhnsd.init b/rhnsd.init index dead8bf..ee3e811 100644 --- a/rhnsd.init +++ b/rhnsd.init @@ -53,7 +53,7 @@ start() { stop() { echo -n $"Stopping Spacewalk Daemon: " - killproc rhnsd -TERM + killproc rhnsd RETVAL=$? echo if [ $RETVAL -eq 0 ]; then diff --git a/rhnsd.spec b/rhnsd.spec index 42ad138..2a192f6 100644 --- a/rhnsd.spec +++ b/rhnsd.spec @@ -5,7 +5,7 @@ Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar. URL: https://fedorahosted.org/spacewalk Name: rhnsd Version: 5.0.13 -Release: 8%{?dist} +Release: 9%{?dist} BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: gettext @@ -138,6 +138,12 @@ rm -fr $RPM_BUILD_ROOT %doc LICENSE %changelog +* Mon Oct 09 2017 Tomas Kasparek 5.0.13-9 +- Related: #1499793 - revert previous reboot loop changes + (tkasparek@redhat.com) +- Resolves: #1499793 - Revert "1260527 RHEL7 rhnsd reload doesn't work" + (tkasparek@redhat.com) + * Wed Sep 20 2017 Tomas Kasparek 5.0.13-8 - Resolves: #1480306 - change permissions for rhnsd.pid (grinrag@gmail.com) - Resolves: #1489989 - umask(0) does not reset to default umask