--- ./ddclient.orig 2011-07-25 19:41:39.000000000 -0700 +++ ./ddclient 2011-07-25 19:41:48.000000000 -0700 @@ -19,6 +18,7 @@ use Getopt::Long; use Sys::Hostname; use IO::Socket; +use POSIX 'setsid'; my ($VERSION) = q$Revision: 157 $ =~ /(\d+)/; @@ -29,9 +29,9 @@ $program =~ s/d$//; my $now = time; my $hostname = hostname(); -my $etc = ($program =~ /test/i) ? './' : '/etc/ddclient/'; -my $cachedir = ($program =~ /test/i) ? './' : '/var/cache/ddclient/'; -my $savedir = ($program =~ /test/i) ? 'URL/' : '/tmp/'; +my $etc = ($program =~ /test/i) ? './' : '%%ETCDIR%%/'; +my $cachedir = ($program =~ /test/i) ? './' : '/var/tmp/'; +my $savedir = ($program =~ /test/i) ? 'URL/' : '/var/tmp/'; my $msgs = ''; my $last_msgs = ''; @@ -39,7 +39,7 @@ local $file = ''; local $lineno = ''; -$ENV{'PATH'} = (exists($ENV{PATH}) ? "$ENV{PATH}:" : "") . "/sbin:/usr/sbin:/bin:/usr/bin:/etc:/usr/lib:"; +$ENV{'PATH'} = (exists($ENV{PATH}) ? "$ENV{PATH}:" : "") . "/sbin:/usr/sbin:/bin:"; sub T_ANY {'any'}; sub T_STRING {'string'}; @@ -678,6 +678,9 @@ ; } elsif (opt('daemon')) { $SIG{'CHLD'} = 'IGNORE'; + chdir '/'; + open(STDIN, "/dev/null"); my $pid = fork; if ($pid < 0) { print STDERR "${program}: can not fork ($!)\n"; @@ -685,10 +688,9 @@ } elsif ($pid) { exit 0; } + setsid; $SIG{'CHLD'} = 'DEFAULT'; - open(STDOUT, ">/dev/null"); - open(STDERR, ">/dev/null"); - open(STDIN, "new( PeerAddr => $peer, PeerPort => $port, + SSL_ca_file => '%%LOCALBASE%%/share/certs/ca-root-nss.crt', Proto => 'tcp', MultiHomed => 1, Timeout => opt('timeout'),