I've prepared a patch that adds an option to tmda-ofmipd '-D, --daemon' 
that puts the program into the background. With this option, you don't 
need to use an '&' at the end of a command string to background 
tmda-ofmipd. The impetus for this patch was that I was having problems 
starting tmda-ofmipd from an init script on my Mandrake 8.2 box. There 
is a thread on the tmda-users mailing list that describes the problems I 
was having more fully.

So, here is the patch. I hope people find it useful enough to be 
incorporated into the distribution. Comments are welcome, but if you 
post to tell me what I did wrong, you have to tell me why it's wrong and 
how to do it right.

Andrew
? tmda.diff
Index: bin/ChangeLog
===================================================================
RCS file: /cvsroot/tmda/tmda/bin/ChangeLog,v
retrieving revision 1.233
diff -u -r1.233 ChangeLog
--- bin/ChangeLog       21 Sep 2002 00:27:44 -0000      1.233
+++ bin/ChangeLog       3 Oct 2002 03:58:08 -0000
@@ -1,3 +1,9 @@
+2002-10-02  Andrew St. Jean  <[EMAIL PROTECTED]>
+
+       * tmda-ofmipd: Add a new option '-D, --daemon' to force the
+       program to run in the background. The PID of the daemonized
+       process is printed to standard out.
+
 2002-09-20  Jason R. Mastaler  <[EMAIL PROTECTED]>
 
        * tmda-pending (main): Run the headers through an RFC 2047 decoder
Index: bin/tmda-ofmipd
===================================================================
RCS file: /cvsroot/tmda/tmda/bin/tmda-ofmipd,v
retrieving revision 1.17
diff -u -r1.17 tmda-ofmipd
--- bin/tmda-ofmipd     11 Sep 2002 22:35:59 -0000      1.17
+++ bin/tmda-ofmipd     3 Oct 2002 03:58:11 -0000
@@ -42,6 +42,10 @@
     --debug
        Turn on debugging prints.
 
+    -D
+    --daemon
+        Run tmda-ofmipd as a background process.
+
     -u <username>
     --username <username>
        The username that this program should run under.  The default
@@ -132,6 +136,7 @@
 program = sys.argv[0]
 configdir = None
 authprog = None
+daemon = 0
 remoteauth = { 'proto': None,
                'host':  'localhost',
                'port':  None,
@@ -191,7 +196,7 @@
 
 try:
     opts, args = getopt.getopt(sys.argv[1:],
-                               'p:u:R:A:a:c:C:dVh', ['proxyport=',
+                               'p:u:R:A:a:c:C:dDVh', ['proxyport=',
                                                      'username=',
                                                      'authfile=',
                                                      'remoteauth=',
@@ -199,6 +204,7 @@
                                                      'configdir=',
                                                      'connections=',
                                                      'debug',
+                                                    'daemon',
                                                      'version',
                                                      'help'])
 except getopt.error, msg:
@@ -215,6 +221,8 @@
         sys.exit()
     elif opt in ('-d', '--debug'):
         DEBUGSTREAM = sys.stderr
+    elif opt in ('-D', '--daemon'):
+        daemon = 1
     elif opt in ('-p', '--proxyport'):
        proxyport = arg
     elif opt in ('-u', '--username'):
@@ -1033,4 +1041,28 @@
 
 # This is the end my friend.
 if __name__ == '__main__':
+    if daemon:
+        try:
+           pid = os.fork()
+           if pid > 0:
+               sys.exit(0)
+       except OSError:
+           value = sys.exc_info()[1]
+           print 'Failed to daemonize process: %s' % value
+           sys.exit(1)
+
+       os.chdir('/')
+       os.setsid()
+       os.umask(0)
+
+       try:
+           pid = os.fork()
+           if pid > 0:
+               print pid
+               sys.exit(0)
+       except OSError:
+           value = sys.exc_info()[1]
+           print 'Failed to daemonize process: %s' % value
+           sys.exit(1)
+
     main()

Reply via email to