Print this page
3245 in.ndp daemon should not be session leader
Reviewed by: Sebastien Roy <sebastien.roy@delphix.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>

*** 906,917 **** } static void daemonize_ndpd(void) { - FILE *pidfp; - mode_t pidmode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* 0644 */ struct itimerval it; boolean_t timerval = _B_TRUE; /* * Need to get current timer settings so they can be restored --- 906,915 ----
*** 924,965 **** "daemonize_ndpd: failed to get itimerval\n"); timerval = _B_FALSE; } /* Daemonize. */ ! switch (fork()) { ! case 0: ! /* Child */ ! break; ! case -1: logperror("fork"); exit(1); - default: - /* Parent */ - _exit(0); } - /* Store our process id, blow away any existing file if it exists. */ - if ((pidfp = fopen(PATH_PID, "w")) == NULL) { - (void) fprintf(stderr, "%s: unable to open " PATH_PID ": %s\n", - argv0[0], strerror(errno)); - } else { - (void) fprintf(pidfp, "%ld\n", getpid()); - (void) fclose(pidfp); - (void) chmod(PATH_PID, pidmode); - } - - (void) close(0); - (void) close(1); - (void) close(2); - - (void) chdir("/"); - (void) open("/dev/null", O_RDWR); - (void) dup2(0, 1); - (void) dup2(0, 2); - (void) setsid(); - already_daemonized = _B_TRUE; /* * Restore timer values, if we were able to save them; if not, * check and set the right value by calling run_timeouts(). --- 922,936 ---- "daemonize_ndpd: failed to get itimerval\n"); timerval = _B_FALSE; } /* Daemonize. */ ! if (daemon(0, 0) == -1) { logperror("fork"); exit(1); } already_daemonized = _B_TRUE; /* * Restore timer values, if we were able to save them; if not, * check and set the right value by calling run_timeouts().
*** 1413,1423 **** */ closefrom(3); logmsg(LOG_ERR, "SIGHUP: restart and reread config file\n"); (void) execv(argv0[0], argv0); - (void) unlink(PATH_PID); _exit(0177); /* NOTREACHED */ case SIGUSR1: logmsg(LOG_DEBUG, "Printing configuration:\n"); phyint_print_all(); --- 1384,1393 ----
*** 1431,1441 **** check_to_advertise(pi, START_FINAL_ADV); phyint_delete(pi); } (void) unlink(NDPD_SNMP_SOCKET); - (void) unlink(PATH_PID); exit(0); /* NOTREACHED */ case 255: /* * Special "signal" from loopback_ra_enqueue. --- 1401,1410 ----