#include #include #include #include #include "hlswmaster.h" void daemonize(char *pw_name) { int fail = 0; pid_t pid; struct passwd *pwl; if ((pid = fork()) < 0) { log_print("daemonize(): fork()"); exit(-1); } else if (pid != 0) { exit(0); } else { /* Kindprozess weiterlaufen lassen */ if (setsid() == -1) { log_print("daemonize: setsid()"); exit(-1); } umask(0) ; if (pw_name != NULL) { if((pwl = getpwnam(pw_name)) == NULL) { log_print("mkdaemon(): getpwnam(\"%s\")", pw_name); exit(-1); } if (setgid(pwl->pw_gid) != 0) { log_print("mkdaemon(): setgid()"); fail = 1; } if (setuid(pwl->pw_uid) != 0) { log_print("mkdaemon(): setuid()"); fail = 1; } if (fail == 0) { log_print("user changed to: %s, pid: %d", pw_name, getpid()); } } } }