+$uid = (getpwnam($user))[2] if $user;
+$gid = (getpwnam($group))[3] if $group;
+
+sub daemonize {
+ if (fork()) {
+ exit 0;
+ }
+ setsid();
+
+ umask 027;
+ if (open STDOUT, ">>$logfile") {
+ open STDERR, ">>$logfile";
+ chown $uid, $gid, $logfile;
+ } else {
+ print "WARNING: Could not open logfile. You will get NO error output.\n";
+ open STDOUT, ">/dev/null";
+ open STDERR, ">/dev/null";
+ }
+ open STDIN, "/dev/null";
+
+ open PID, ">$pidfile" or warn "Could not write PID file\n";
+ print PID "$$\n";
+ close PID;
+ chown $uid, $gid, $pidfile;
+
+ chdir '/';
+ print "Daemon started at ",scalar gmtime(),"\n";
+}
+
+daemonize unless $nodaemon;
+
+setuid($uid) if $uid;
+setgid($uid) if $gid;
+