Skip site navigation (1)Skip section navigation (2)
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>