>Number:         153362
>Category:       misc
>Synopsis:       patch to add -p flag to set pidfile for rtadvd
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Dec 22 02:00:23 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Joe Holden
>Release:        8.2-PRERELEASE
>Organization:
Pseudo Networks Limited
>Environment:
>Description:
I have attached a quick/dirty patch to add a -p flag that sets an alternative 
pidfile location as well as unlinking pidfile before exit... my programming 
skills are pretty much 0, so it will probably need to be rewritten.
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

diff -u -r rtadvd.orig/rtadvd.8 rtadvd/rtadvd.8
--- rtadvd.orig/rtadvd.8        2010-12-22 01:32:38.000000000 +0000
+++ rtadvd/rtadvd.8     2010-12-22 01:22:15.000000000 +0000
@@ -144,6 +144,8 @@
 .It Fl s
 Do not add or delete prefixes dynamically.
 Only statically configured prefixes, if any, will be advertised.
+.It Fl p
+Set an alternate pidfile location.
 .El
 .Pp
 Upon receipt of signal
diff -u -r rtadvd.orig/rtadvd.c rtadvd/rtadvd.c
--- rtadvd.orig/rtadvd.c        2010-12-22 01:32:38.000000000 +0000
+++ rtadvd/rtadvd.c     2010-12-22 01:16:54.000000000 +0000
@@ -81,6 +81,7 @@
 struct in6_addr in6a_site_allrouters;
 static char *dumpfilename = "/var/run/rtadvd.dump"; /* XXX: should be 
configurable */
 static char *pidfilename = "/var/run/rtadvd.pid"; /* should be configurable */
+char *pidfilecust;
 static char *mcastif;
 int sock;
 int rtsock = -1;
@@ -163,7 +164,7 @@
        pid_t pid;
 
        /* get command line options and arguments */
-       while ((ch = getopt(argc, argv, "c:dDfM:Rs")) != -1) {
+       while ((ch = getopt(argc, argv, "c:dDfMp:Rs")) != -1) {
                switch (ch) {
                case 'c':
                        conffile = optarg;
@@ -189,13 +190,16 @@
                case 's':
                        sflag = 1;
                        break;
+               case 'p':
+                       pidfilecust = optarg;
+                       break;
                }
        }
        argc -= optind;
        argv += optind;
        if (argc == 0) {
                fprintf(stderr,
-                       "usage: rtadvd [-dDfMRs] [-c conffile] "
+                       "usage: rtadvd [-dDfMRsp] [-c conffile] "
                        "interfaces...\n");
                exit(1);
        }
@@ -241,13 +245,24 @@
 
        /* record the current PID */
        pid = getpid();
-       if ((pidfp = fopen(pidfilename, "w")) == NULL) {
-               syslog(LOG_ERR,
-                   "<%s> failed to open the pid log file, run anyway.",
-                   __func__);
-       } else {
-               fprintf(pidfp, "%d\n", pid);
-               fclose(pidfp);
+       if (!pidfilecust) {
+               if ((pidfp = fopen(pidfilename, "w")) == NULL) {
+                       syslog(LOG_ERR,
+                       "<%s> failed to open the pid log file, run anyway.",
+                       __func__);
+               } else {
+                       fprintf(pidfp, "%d\n", pid);
+                       fclose(pidfp);
+               }
+       } else {                        
+               if ((pidfp = fopen(pidfilecust, "w")) == NULL) {
+                       syslog(LOG_ERR,
+                       "<%s> failed to open the pid log file, run anyway.",
+                       __func__);
+               } else {
+                       fprintf(pidfp, "%d\n", pid);
+                       fclose(pidfp);
+               }
        }
 
 #ifdef HAVE_POLL_H
@@ -297,6 +312,8 @@
                }
 
                if (do_die) {
+                       /* unlink() pid file before exiting... */
+                       if (!pidfilename)       {       unlink(pidfilecust); } 
else {   unlink(pidfilename); }
                        die();
                        /*NOTREACHED*/
                }


>Release-Note:
>Audit-Trail:
>Unformatted:
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"

Reply via email to