Date: Wed, 14 Feb 2007 16:35:29 +0900 (YAKT) From: Alexander Logvinov <ports@logvinov.com> To: FreeBSD-gnats-submit@FreeBSD.org Cc: Alexander Logvinov <ports@logvinov.com> Subject: ports/109157: [maintainer update] comms/atslog: fix pidfile checking Message-ID: <200702140735.l1E7ZTUV090654@blg.akavia.ru> Resent-Message-ID: <200702140740.l1E7e25I097935@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 109157 >Category: ports >Synopsis: [maintainer update] comms/atslog: fix pidfile checking >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: maintainer-update >Submitter-Id: current-users >Arrival-Date: Wed Feb 14 07:40:02 GMT 2007 >Closed-Date: >Last-Modified: >Originator: Alexander Logvinov >Release: FreeBSD 6.2-RELEASE-p1 >Organization: >Environment: >Description: Fix pidfile checking Patches obtained from official svn >How-To-Repeat: >Fix: diff -ruN --exclude=CVS /usr/ports/comms/atslog/Makefile /home/projects/atslog/Makefile --- /usr/ports/comms/atslog/Makefile Sun Jan 28 23:53:49 2007 +++ /home/projects/atslog/Makefile Tue Feb 13 17:40:26 2007 @@ -7,6 +7,7 @@ PORTNAME= atslog PORTVERSION= 2.1.0 +PORTREVISION= 1 CATEGORIES= comms MASTER_SITES= BERLIOS diff -ruN --exclude=CVS /usr/ports/comms/atslog/files/patch-atslogd.c /home/projects/atslog/files/patch-atslogd.c --- /usr/ports/comms/atslog/files/patch-atslogd.c Thu Jan 1 09:00:00 1970 +++ /home/projects/atslog/files/patch-atslogd.c Wed Feb 14 16:22:28 2007 @@ -0,0 +1,109 @@ +--- atslogd/atslogd.c.orig Sun Jan 28 17:52:03 2007 ++++ atslogd/atslogd.c Wed Feb 14 16:22:23 2007 +@@ -143,16 +143,54 @@ + close(hCom); + } + +-static int +-daemonize(void) +-{ +- int rc; +- rc = fork(); +- if (rc == (-1)) +- return (-1); +- if (rc != 0) +- _exit(EX_OK); +- return rc; ++/* taken from the http://www.developerweb.net/forum/archive/index.php/t-3025.html */ ++void daemonize(void) { ++ int fd; ++ switch (fork()) { ++ case 0: ++ break; ++ case -1: ++ // Error ++ fprintf(stderr, "Error demonizing (fork)! %d - %s\n", errno, strerror(errno)); ++ exit(0); ++ break; ++ default: ++ _exit(0); ++ } ++ ++ if (setsid() < 0) { ++ fprintf(stderr, "Error demonizing (setsid)! %d - %s\n", errno, strerror(errno)); ++ exit(0); ++ } ++ switch (fork()) { ++ case 0: ++ break; ++ case -1: ++ // Error ++ fprintf(stderr, "Error demonizing (fork2)! %d - %s\n", errno, strerror(errno)); ++ exit(0); ++ break; ++ default: ++ _exit(0); ++ } ++ /* Are we really need this? */ ++ // chdir("/"); ++ ++ fd = open("/dev/null", O_RDONLY); ++ if (fd != 0) { ++ dup2(fd, 0); ++ close(fd); ++ } ++ fd = open("/dev/null", O_WRONLY); ++ if (fd != 1) { ++ dup2(fd, 1); ++ close(fd); ++ } ++ fd = open("/dev/null", O_WRONLY); ++ if (fd != 2) { ++ dup2(fd, 2); ++ close(fd); ++ } + } + + FILE * +@@ -755,6 +793,9 @@ + argc -= optind; + argv += optind; + ++ if (do_daemonize) ++ daemonize(); ++ + if (logfile) { + errout = fopen(logfile, "at"); + if (errout == NULL) { +@@ -772,28 +813,22 @@ + } + my_syslog("Starting"); + +- if (do_daemonize) +- daemonize(); + + pid = getpid(); +- + if (do_daemonize && pid == (-1)) { + my_syslog("Can't become daemon, exiting"); + my_exit(1); +- } ++ } + pfd = open_pid(); + if (pfd != NULL) { +- (void)fprintf(pfd, "%ld\n", (long)pid); ++ (void)fprintf(pfd, "%d\n", getpid()); + fclose(pfd); + } else { + my_syslog("Can't write to '%s' PID file, exiting", pid_file); + my_exit(1); + } + +- if (do_daemonize) +- pid = daemonize(); +- else +- pid = getpid(); ++ pid = getpid(); + + if (do_daemonize && pid == (-1)) { + my_syslog("Can't become daemon, exiting"); diff -ruN --exclude=CVS /usr/ports/comms/atslog/files/patch-atslogmaster.in /home/projects/atslog/files/patch-atslogmaster.in --- /usr/ports/comms/atslog/files/patch-atslogmaster.in Thu Jan 1 09:00:00 1970 +++ /home/projects/atslog/files/patch-atslogmaster.in Wed Feb 14 16:17:14 2007 @@ -0,0 +1,54 @@ +--- include/atslogmaster.in Sun Jan 28 17:52:01 2007 ++++ include/atslogmaster.in Wed Feb 14 16:16:05 2007 +@@ -6,6 +6,7 @@ + NOWDATE=`LANG=en_US;date` + BASENAME=`basename $0` + prefix=@prefix@ ++ATSLOGDpid="" + + # Readin config file + if [ -r @sysconfdir@/atslog.conf ]; then +@@ -26,10 +27,11 @@ + fi + + checkstatus(){ ++ ATSLOGDpid="" + if [ -f $pidfile ] ; then + PID=`cat $pidfile` + if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null ; then +- return $PID ++ ATSLOGDpid=$PID + fi + fi + return 0 +@@ -39,10 +41,6 @@ + PATH=$PATH:$bindir:$sharedir + + checkstatus +-ATSLOGDpid=$? +-if [ $ATSLOGDpid -eq 0 ]; then +- ATSLOGDpid="" +-fi + + case "$debug" in + [Yy][Ee][Ss]) +@@ -98,10 +96,6 @@ + echo "$msg8" + fi + checkstatus +- ATSLOGDpid=$? +- if [ $ATSLOGDpid -eq 0 ]; then +- ATSLOGDpid="" +- fi + startloging + if [ $? -eq 0 ] + then +@@ -159,7 +153,7 @@ + fi + sleep 1; + checkstatus +- if [ $? -eq 0 ];then ++ if [ -z ATSLOGDpid ];then + TORETURN=1; # atslogd not started + ERRORMESSAGE=$msg4 + echomess >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200702140735.l1E7ZTUV090654>