ports/109157: [maintainer update] comms/atslog: fix pidfile checking
Alexander Logvinov
ports at logvinov.com
Wed Feb 14 07:40:03 UTC 2007
>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:
More information about the freebsd-ports-bugs
mailing list