1 |
unnilennium |
1.1 |
diff -r -u mailman-2.1.5.orig/bin/mailmanctl mailman-2.1.5/bin/mailmanctl |
2 |
|
|
--- mailman-2.1.5.orig/bin/mailmanctl 2004-02-03 17:26:08.000000000 -0500 |
3 |
|
|
+++ mailman-2.1.5/bin/mailmanctl 2004-09-10 18:23:34.000000000 -0400 |
4 |
|
|
@@ -35,7 +35,7 @@ |
5 |
|
|
pid directly. The `start', `stop', `restart', and `reopen' commands handle |
6 |
|
|
everything for you. |
7 |
|
|
|
8 |
|
|
-Usage: %(PROGRAM)s [options] [ start | stop | restart | reopen ] |
9 |
|
|
+Usage: %(PROGRAM)s [options] [ start | stop | restart | reopen | status ] |
10 |
|
|
|
11 |
|
|
Options: |
12 |
|
|
|
13 |
|
|
@@ -89,6 +89,9 @@ |
14 |
|
|
|
15 |
|
|
reopen - This will close all log files, causing them to be re-opened the |
16 |
|
|
next time a message is written to them |
17 |
|
|
+ |
18 |
|
|
+ status - This returns a string indicating the status of the master |
19 |
|
|
+ qrunner |
20 |
|
|
""" |
21 |
|
|
|
22 |
|
|
import sys |
23 |
|
|
@@ -189,6 +192,52 @@ |
24 |
|
|
return 0 |
25 |
|
|
return 1 |
26 |
|
|
|
27 |
|
|
+def mailman_status(): |
28 |
|
|
+ # return status, pid |
29 |
|
|
+ # |
30 |
|
|
+ # These status values match the /etc/init.d status values |
31 |
|
|
+ # (at least on Red Hat), try to return equivalent status if possible |
32 |
|
|
+ # status is 0 if running, |
33 |
|
|
+ # status is 1 if dead but pid file exists |
34 |
|
|
+ # status is 2 if dead but subsys locked |
35 |
|
|
+ # status is 3 if stopped (pid returned will be 0) |
36 |
|
|
+ # |
37 |
|
|
+ # |
38 |
|
|
+ # We want any user to be able to query the status and this presents |
39 |
|
|
+ # few interesting permission problems and is why we don't use |
40 |
|
|
+ # qrunner_state(). The pidfile is only readable by the mailman owner |
41 |
|
|
+ # and group, however the lockfile is world readable. So we will |
42 |
|
|
+ # get the master pid from the lockfile. We try to determine if the |
43 |
|
|
+ # master process exists by sending it a signal. If we don't have |
44 |
|
|
+ # permission to signal the process, but the process exists we'll |
45 |
|
|
+ # get a EPERM error, if the process does not exist then we'll get |
46 |
|
|
+ # a ESRCH error. |
47 |
|
|
+ |
48 |
|
|
+ try: |
49 |
|
|
+ hostname, pid, tempfile = get_lock_data() |
50 |
|
|
+ except IOError, e: |
51 |
|
|
+ if e.errno == errno.ENOENT: |
52 |
|
|
+ # Lock file didn't exist, can't be running |
53 |
|
|
+ return 3, 0 |
54 |
|
|
+ else: |
55 |
|
|
+ raise |
56 |
|
|
+ if hostname <> socket.gethostname(): |
57 |
|
|
+ # not running on this host |
58 |
|
|
+ return 3, 0 |
59 |
|
|
+ # Find out if the process exists by calling kill with a signal 0. |
60 |
|
|
+ try: |
61 |
|
|
+ os.kill(pid, 0) |
62 |
|
|
+ except OSError, e: |
63 |
|
|
+ if e.errno == errno.ESRCH: |
64 |
|
|
+ # process does not exist |
65 |
|
|
+ return 1, pid |
66 |
|
|
+ elif e.errno == errno.EPERM: |
67 |
|
|
+ # we don't have permission signal the process but it exists |
68 |
|
|
+ return 0, pid |
69 |
|
|
+ else: |
70 |
|
|
+ raise |
71 |
|
|
+ return 0, pid |
72 |
|
|
+ |
73 |
|
|
|
74 |
|
|
def acquire_lock_1(force): |
75 |
|
|
# Be sure we can acquire the master qrunner lock. If not, it means some |
76 |
|
|
@@ -336,13 +385,15 @@ |
77 |
|
|
command = COMMASPACE.join(args) |
78 |
|
|
usage(1, _('Bad command: %(command)s')) |
79 |
|
|
|
80 |
|
|
+ command = args[0].lower() |
81 |
|
|
+ |
82 |
|
|
if checkprivs: |
83 |
|
|
check_privs() |
84 |
|
|
else: |
85 |
|
|
- print _('Warning! You may encounter permission problems.') |
86 |
|
|
+ if command != 'status': |
87 |
|
|
+ print _('Warning! You may encounter permission problems.') |
88 |
|
|
|
89 |
|
|
# Handle the commands |
90 |
|
|
- command = args[0].lower() |
91 |
|
|
if command == 'stop': |
92 |
|
|
# Sent the master qrunner process a SIGINT, which is equivalent to |
93 |
|
|
# giving cron/qrunner a ctrl-c or KeyboardInterrupt. This will |
94 |
|
|
@@ -361,6 +412,14 @@ |
95 |
|
|
if not quiet: |
96 |
|
|
print _('Re-opening all log files') |
97 |
|
|
kill_watcher(signal.SIGHUP) |
98 |
|
|
+ elif command == 'status': |
99 |
|
|
+ status, pid = mailman_status() |
100 |
|
|
+ if not quiet: |
101 |
|
|
+ if status == 0: |
102 |
|
|
+ print _("mailman (pid %(pid)d) is running...") |
103 |
|
|
+ else: |
104 |
|
|
+ print _("mailman is stopped") |
105 |
|
|
+ sys.exit(status) |
106 |
|
|
elif command == 'start': |
107 |
|
|
# First, complain loudly if there's no site list. |
108 |
|
|
check_for_site_list() |
109 |
|
|
diff -u -r mailman-2.1.5.orig/misc/mailman.in mailman-2.1.5/misc/mailman.in |
110 |
|
|
--- mailman-2.1.5.orig/misc/mailman.in 2003-09-25 18:13:26.000000000 -0400 |
111 |
|
|
+++ mailman-2.1.5/misc/mailman.in 2005-02-15 10:48:26.445983000 -0500 |
112 |
|
|
@@ -36,19 +36,70 @@ |
113 |
|
|
MAILMANHOME=@prefix@ |
114 |
|
|
MAILMANCTL=$MAILMANHOME/bin/mailmanctl |
115 |
|
|
|
116 |
|
|
+# Source function library. |
117 |
|
|
+. /etc/rc.d/init.d/functions |
118 |
|
|
+ |
119 |
|
|
+RETVAL=0 |
120 |
|
|
+prog="mailman" |
121 |
|
|
+ |
122 |
|
|
+function start() |
123 |
|
|
+{ |
124 |
|
|
+ echo -n $"Starting $prog: " |
125 |
|
|
+ daemon $PYTHON $MAILMANCTL -s -q start |
126 |
|
|
+ RETVAL=$? |
127 |
|
|
+ [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog |
128 |
|
|
+ echo |
129 |
|
|
+ return $RETVAL |
130 |
|
|
+} |
131 |
|
|
+ |
132 |
|
|
+function stop() |
133 |
|
|
+{ |
134 |
|
|
+ echo -n $"Shutting down $prog: " |
135 |
|
|
+ daemon $PYTHON $MAILMANCTL -q stop |
136 |
|
|
+ RETVAL=$? |
137 |
|
|
+ [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog |
138 |
|
|
+ echo |
139 |
|
|
+ return $RETVAL |
140 |
|
|
+} |
141 |
|
|
+ |
142 |
|
|
+function restart() |
143 |
|
|
+{ |
144 |
|
|
+ stop |
145 |
|
|
+ start |
146 |
|
|
+ RETVAL=$? |
147 |
|
|
+ return $RETVAL |
148 |
|
|
+} |
149 |
|
|
+ |
150 |
|
|
case "$1" in |
151 |
|
|
'start') |
152 |
|
|
- #rm -f $MAILMANHOME/locks/* |
153 |
|
|
- $PYTHON $MAILMANCTL -s -q start |
154 |
|
|
+ start |
155 |
|
|
+ RETVAL=$? |
156 |
|
|
;; |
157 |
|
|
|
158 |
|
|
'stop') |
159 |
|
|
- $PYTHON $MAILMANCTL -q stop |
160 |
|
|
+ stop |
161 |
|
|
+ RETVAL=$? |
162 |
|
|
;; |
163 |
|
|
|
164 |
|
|
'restart') |
165 |
|
|
- $PYTHON $MAILMANCTL -q restart |
166 |
|
|
+ restart |
167 |
|
|
+ RETVAL=$? |
168 |
|
|
+ ;; |
169 |
|
|
+ |
170 |
|
|
+'condrestart') |
171 |
|
|
+ $PYTHON $MAILMANCTL -q -u status |
172 |
|
|
+ retval=$? |
173 |
|
|
+ if [ $retval -eq 0 ] |
174 |
|
|
+ then |
175 |
|
|
+ restart |
176 |
|
|
+ RETVAL=$? |
177 |
|
|
+ fi |
178 |
|
|
+ ;; |
179 |
|
|
+ |
180 |
|
|
+'status') |
181 |
|
|
+ $PYTHON $MAILMANCTL -u status |
182 |
|
|
+ RETVAL=$? |
183 |
|
|
;; |
184 |
|
|
|
185 |
|
|
esac |
186 |
|
|
-exit 0 |
187 |
|
|
+exit $RETVAL |