annotate roundup/scripts/roundup_server.py @ 2467:76ead526113d

client instances may be used as translation engines. any backend translator may be passed as constructor argument or via setTranslator() method. by default, templating.translationService is used. use this engine to translate client messages.
author Alexander Smishlajev <a1s@users.sourceforge.net>
date Tue, 15 Jun 2004 09:19:49 +0000
parents b54ad9ed394a
children 8f2d1aabd940
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
2 # This module is free software, and you may redistribute it and/or modify
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
3 # under the same terms as Python, so long as this copyright message and
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
4 # disclaimer are retained in their original form.
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
5 #
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
6 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
7 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
8 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
9 # POSSIBILITY OF SUCH DAMAGE.
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
10 #
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
11 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
12 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
13 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
14 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
15 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
16 #
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
17
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
18 """Command-line script that runs a server over roundup.cgi.client.
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
19
2328
b54ad9ed394a join adjacent translatable strings
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2308
diff changeset
20 $Id: roundup_server.py,v 1.50 2004-05-18 19:25:24 a1s Exp $
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
21 """
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
22 __docformat__ = 'restructuredtext'
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
23
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
24 # python version check
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
25 from roundup import version_check
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
26 from roundup import __version__ as roundup_version
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
27
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
28 import sys, os, urllib, StringIO, traceback, cgi, binascii, getopt, imp
2191
f7f6b6981a13 sqlite backend uses the global lock again
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
29 import SocketServer, BaseHTTPServer, socket, errno
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
30
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
31 # Roundup modules of use here
992
6003d6fa02a5 new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents: 661
diff changeset
32 from roundup.cgi import cgitb, client
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
33 import roundup.instance
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
34 from roundup.i18n import _
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
35
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
36 try:
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
37 import signal
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
38 except:
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
39 signal = None
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
40
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
41 #
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
42 ## Configuration
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
43 #
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
44
1181
49aebf5a8691 some speedups, some fixes to the benchmarking
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
45 # This indicates where the Roundup trackers live. They're given as NAME ->
49aebf5a8691 some speedups, some fixes to the benchmarking
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
46 # TRACKER_HOME, where the NAME part is used in the URL to select the
49aebf5a8691 some speedups, some fixes to the benchmarking
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
47 # appropriate reacker.
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
48 # Make sure the NAME part doesn't include any url-unsafe characters like
1181
49aebf5a8691 some speedups, some fixes to the benchmarking
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
49 # spaces, as these confuse the cookie handling in browsers like IE.
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
50 TRACKER_HOMES = {
1782
d51cb5225d4a commented out example tracker homes
Richard Jones <richard@users.sourceforge.net>
parents: 1736
diff changeset
51 # 'example': '/path/to/example',
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
52 }
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
53
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
54 ROUNDUP_USER = None
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
55 ROUNDUP_GROUP = None
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
56 ROUNDUP_LOG_IP = 1
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
57 HOSTNAME = ''
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
58 PORT = 8080
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
59 PIDFILE = None
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
60 LOGFILE = None
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
61
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
62
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
63 #
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
64 ## end configuration
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
65 #
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
66
2181
740102dfad1d favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents: 2180
diff changeset
67 # "default" favicon.ico
740102dfad1d favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents: 2180
diff changeset
68 # generate by using "icotool" and tools/base64
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
69 import zlib, base64
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
70 favico = zlib.decompress(base64.decodestring('''
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
71 eJztjr1PmlEUh59XgVoshdYPWorFIhaRFq0t9pNq37b60lYSTRzcTFw6GAfj5gDYaF0dTB0MxMSE
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
72 gQQd3FzKJiEC0UCIUUN1M41pV2JCXySg/0ITn5tfzvmdc+85FwT56HSc81UJjXJsk1UsNcsSqCk1
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
73 BS64lK+vr7OyssLJyQl2ux2j0cjU1BQajYZIJEIwGMRms+H3+zEYDExOTjI2Nsbm5iZWqxWv18vW
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
74 1hZDQ0Ok02kmJiY4Ojpienqa3d1dxsfHUSqVeDwe5ufnyeVyrK6u4nK5ODs7Y3FxEYfDwdzcHCaT
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
75 icPDQ5LJJIIgMDIyQj6fZ39/n+3tbdbW1pAkiYWFBWZmZtjb2yMejzM8PEwgEMDn85HNZonFYqjV
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
76 asLhMMvLy2QyGfR6PaOjowwODmKxWDg+PkalUhEKhSgUCiwtLWE2m9nZ2UGhULCxscHp6SmpVIpo
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
77 NMrs7CwHBwdotVoSiQRXXPG/IzY7RHtt922xjFRb01H1XhKfPBNbi/7my7rrLXJ88eppvxwEfV3f
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
78 NY3Y6exofVdsV3+2wnPFDdPjB83n7xuVpcFvygPbGwxF31LZIKrQDfR2Xvh7lmrX654L/7bvlnng
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
79 bn3Zuj8M9Hepux6VfZtW1yA6K7cfGqVu8TL325u+fHTb71QKbk+7TZQ+lTc6RcnpqW8qmVQBoj/g
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
80 23eo0sr/NIGvB37K+lOWXMvJ+uWFeKGU/03Cb7n3D4M3wxI=
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
81 '''.strip()))
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
82
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
83 class RoundupRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
84 TRACKER_HOMES = TRACKER_HOMES
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
85 ROUNDUP_USER = ROUNDUP_USER
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
86
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
87 def run_cgi(self):
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
88 """ Execute the CGI command. Wrap an innner call in an error
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
89 handler so all errors can be caught.
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
90 """
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
91 save_stdin = sys.stdin
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
92 sys.stdin = self.rfile
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
93 try:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
94 self.inner_run_cgi()
992
6003d6fa02a5 new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents: 661
diff changeset
95 except client.NotFound:
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
96 self.send_error(404, self.path)
2273
c77483d2cda4 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2230
diff changeset
97 except client.Unauthorised, message:
c77483d2cda4 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2230
diff changeset
98 self.send_error(403, '%s (%s)'%(self.path, message))
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
99 except:
1939
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
100 exc, val, tb = sys.exc_info()
2191
f7f6b6981a13 sqlite backend uses the global lock again
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
101 if hasattr(socket, 'timeout') and isinstance(val, socket.timeout):
2200
25b95aa44d60 socket timeout error logging can fail
Richard Jones <richard@users.sourceforge.net>
parents: 2191
diff changeset
102 self.log_error('timeout')
1939
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
103 else:
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
104 # it'd be nice to be able to detect if these are going to have
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
105 # any effect...
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
106 self.send_response(400)
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
107 self.send_header('Content-Type', 'text/html')
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
108 self.end_headers()
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
109 try:
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
110 reload(cgitb)
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
111 self.wfile.write(cgitb.breaker())
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
112 self.wfile.write(cgitb.html())
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
113 except:
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
114 s = StringIO.StringIO()
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
115 traceback.print_exc(None, s)
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
116 self.wfile.write("<pre>")
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
117 self.wfile.write(cgi.escape(s.getvalue()))
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
118 self.wfile.write("</pre>\n")
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
119 sys.stdin = save_stdin
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
120
1554
693b915041e6 we don't support HEAD
Richard Jones <richard@users.sourceforge.net>
parents: 1473
diff changeset
121 do_GET = do_POST = run_cgi
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
122
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
123 def index(self):
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
124 ''' Print up an index of the available trackers
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
125 '''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
126 self.send_response(200)
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
127 self.send_header('Content-Type', 'text/html')
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
128 self.end_headers()
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
129 w = self.wfile.write
2328
b54ad9ed394a join adjacent translatable strings
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2308
diff changeset
130 w(_('<html><head><title>Roundup trackers index</title></head>\n'
b54ad9ed394a join adjacent translatable strings
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2308
diff changeset
131 '<body><h1>Roundup trackers index</h1><ol>\n'))
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
132 keys = self.TRACKER_HOMES.keys()
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
133 keys.sort()
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
134 for tracker in keys:
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
135 w(_('<li><a href="%(tracker_url)s/index">%(tracker_name)s</a>\n')%{
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
136 'tracker_url': urllib.quote(tracker),
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
137 'tracker_name': cgi.escape(tracker)})
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
138 w(_('</ol></body></html>'))
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
139
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
140 def inner_run_cgi(self):
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
141 ''' This is the inner part of the CGI handling
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
142 '''
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
143 rest = self.path
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
144
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
145 if rest == '/favicon.ico':
2176
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
146 self.send_response(200)
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
147 self.send_header('Content-Type', 'image/x-icon')
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
148 self.end_headers()
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
149 self.wfile.write(favico)
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
150 return
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
151
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
152 i = rest.rfind('?')
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
153 if i >= 0:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
154 rest, query = rest[:i], rest[i+1:]
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
155 else:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
156 query = ''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
157
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
158 # no tracker - spit out the index
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
159 if rest == '/':
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
160 return self.index()
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
161
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
162 # figure the tracker
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
163 l_path = rest.split('/')
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
164 tracker_name = urllib.unquote(l_path[1])
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
165
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
166 # handle missing trailing '/'
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
167 if len(l_path) == 2:
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
168 self.send_response(301)
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
169 # redirect - XXX https??
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
170 protocol = 'http'
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
171 url = '%s://%s%s/'%(protocol, self.headers['host'], self.path)
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
172 self.send_header('Location', url)
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
173 self.end_headers()
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
174 self.wfile.write('Moved Permanently')
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
175 return
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
176
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
177 if self.TRACKER_HOMES.has_key(tracker_name):
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
178 tracker_home = self.TRACKER_HOMES[tracker_name]
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
179 tracker = roundup.instance.open(tracker_home)
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
180 else:
992
6003d6fa02a5 new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents: 661
diff changeset
181 raise client.NotFound
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
182
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
183 # figure out what the rest of the path is
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
184 if len(l_path) > 2:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
185 rest = '/'.join(l_path[2:])
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
186 else:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
187 rest = '/'
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
188
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
189 # Set up the CGI environment
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
190 env = {}
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
191 env['TRACKER_NAME'] = tracker_name
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
192 env['REQUEST_METHOD'] = self.command
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
193 env['PATH_INFO'] = urllib.unquote(rest)
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
194 if query:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
195 env['QUERY_STRING'] = query
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
196 host = self.address_string()
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
197 if self.headers.typeheader is None:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
198 env['CONTENT_TYPE'] = self.headers.type
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
199 else:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
200 env['CONTENT_TYPE'] = self.headers.typeheader
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
201 length = self.headers.getheader('content-length')
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
202 if length:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
203 env['CONTENT_LENGTH'] = length
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
204 co = filter(None, self.headers.getheaders('cookie'))
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
205 if co:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
206 env['HTTP_COOKIE'] = ', '.join(co)
1299
b2d04ce03802 Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 1251
diff changeset
207 env['HTTP_AUTHORIZATION'] = self.headers.getheader('authorization')
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
208 env['SCRIPT_NAME'] = ''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
209 env['SERVER_NAME'] = self.server.server_name
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
210 env['SERVER_PORT'] = str(self.server.server_port)
636
3569dfce4bc5 The correct var is "HTTP_HOST"
Richard Jones <richard@users.sourceforge.net>
parents: 635
diff changeset
211 env['HTTP_HOST'] = self.headers['host']
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
212
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
213 decoded_query = query.replace('+', ' ')
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
214
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
215 # do the roundup thang
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
216 c = tracker.Client(tracker, self, env)
992
6003d6fa02a5 new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents: 661
diff changeset
217 c.main()
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
218
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
219 LOG_IPADDRESS = ROUNDUP_LOG_IP
1735
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
220 def address_string(self):
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
221 if self.LOG_IPADDRESS:
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
222 return self.client_address[0]
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
223 else:
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
224 host, port = self.client_address
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
225 return socket.getfqdn(host)
1632
eb4d04a9d647 added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents: 1611
diff changeset
226
2021
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
227 def log_message(self, format, *args):
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
228 ''' Try to *safely* log to stderr.
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
229 '''
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
230 try:
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
231 BaseHTTPServer.BaseHTTPRequestHandler.log_message(self,
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
232 format, *args)
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
233 except IOError:
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
234 # stderr is no longer viable
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
235 pass
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
236
1871
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
237 def error():
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
238 exc_type, exc_value = sys.exc_info()[:2]
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
239 return _('Error: %s: %s' % (exc_type, exc_value))
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
240
2230
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
241 # See whether we can use the forking server
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
242 if hasattr(os, 'fork'):
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
243 class server_class(SocketServer.ForkingMixIn, BaseHTTPServer.HTTPServer):
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
244 pass
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
245 else:
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
246 server_class = BaseHTTPServer.HTTPServer
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
247
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
248 try:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
249 import win32serviceutil
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
250 except:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
251 RoundupService = None
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
252 else:
2230
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
253
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
254 # allow the win32
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
255 import win32service
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
256 import win32event
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
257 from win32event import *
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
258 from win32file import *
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
259
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
260 SvcShutdown = "ServiceShutdown"
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
261
2021
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
262 class RoundupService(win32serviceutil.ServiceFramework,
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
263 BaseHTTPServer.HTTPServer):
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
264 ''' A Roundup standalone server for Win32 by Ewout Prangsma
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
265 '''
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
266 _svc_name_ = "Roundup Bug Tracker"
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
267 _svc_display_name_ = "Roundup Bug Tracker"
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
268 address = (HOSTNAME, PORT)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
269 def __init__(self, args):
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
270 # redirect stdout/stderr to our logfile
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
271 if LOGFILE:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
272 # appending, unbuffered
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
273 sys.stdout = sys.stderr = open(LOGFILE, 'a', 0)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
274 win32serviceutil.ServiceFramework.__init__(self, args)
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
275 BaseHTTPServer.HTTPServer.__init__(self, self.address,
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
276 RoundupRequestHandler)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
277
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
278 # Create the necessary NT Event synchronization objects...
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
279 # hevSvcStop is signaled when the SCM sends us a notification
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
280 # to shutdown the service.
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
281 self.hevSvcStop = win32event.CreateEvent(None, 0, 0, None)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
282
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
283 # hevConn is signaled when we have a new incomming connection.
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
284 self.hevConn = win32event.CreateEvent(None, 0, 0, None)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
285
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
286 # Hang onto this module for other people to use for logging
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
287 # purposes.
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
288 import servicemanager
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
289 self.servicemanager = servicemanager
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
290
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
291 def SvcStop(self):
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
292 # Before we do anything, tell the SCM we are starting the
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
293 # stop process.
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
294 self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
295 win32event.SetEvent(self.hevSvcStop)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
296
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
297 def SvcDoRun(self):
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
298 try:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
299 self.serve_forever()
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
300 except SvcShutdown:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
301 pass
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
302
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
303 def get_request(self):
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
304 # Call WSAEventSelect to enable self.socket to be waited on.
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
305 WSAEventSelect(self.socket, self.hevConn, FD_ACCEPT)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
306 while 1:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
307 try:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
308 rv = self.socket.accept()
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
309 except socket.error, why:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
310 if why[0] != WSAEWOULDBLOCK:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
311 raise
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
312 # Use WaitForMultipleObjects instead of select() because
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
313 # on NT select() is only good for sockets, and not general
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
314 # NT synchronization objects.
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
315 rc = WaitForMultipleObjects((self.hevSvcStop, self.hevConn),
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
316 0, INFINITE)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
317 if rc == WAIT_OBJECT_0:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
318 # self.hevSvcStop was signaled, this means:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
319 # Stop the service!
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
320 # So we throw the shutdown exception, which gets
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
321 # caught by self.SvcDoRun
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
322 raise SvcShutdown
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
323 # Otherwise, rc == WAIT_OBJECT_0 + 1 which means
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
324 # self.hevConn was signaled, which means when we call
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
325 # self.socket.accept(), we'll have our incoming connection
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
326 # socket!
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
327 # Loop back to the top, and let that accept do its thing...
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
328 else:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
329 # yay! we have a connection
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
330 # However... the new socket is non-blocking, we need to
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
331 # set it back into blocking mode. (The socket that accept()
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
332 # returns has the same properties as the listening sockets,
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
333 # this includes any properties set by WSAAsyncSelect, or
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
334 # WSAEventSelect, and whether its a blocking socket or not.)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
335 #
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
336 # So if you yank the following line, the setblocking() call
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
337 # will be useless. The socket will still be in non-blocking
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
338 # mode.
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
339 WSAEventSelect(rv[0], self.hevConn, 0)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
340 rv[0].setblocking(1)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
341 break
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
342 return rv
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
343
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
344 def usage(message=''):
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
345 if RoundupService:
2328
b54ad9ed394a join adjacent translatable strings
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2308
diff changeset
346 win = \
b54ad9ed394a join adjacent translatable strings
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2308
diff changeset
347 ""''' -c: Windows Service options. If you want to run the server as a Windows
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
348 Service, you must configure the rest of the options by changing the
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
349 constants of this program. You will at least configure one tracker
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
350 in the TRACKER_HOMES variable. This option is mutually exclusive
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
351 from the rest. Typing "roundup-server -c help" shows Windows
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
352 Services specifics.'''
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
353 else:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
354 win = ''
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
355 port=PORT
1871
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
356 print _('''%(message)s
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
357 Usage:
1735
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
358 roundup-server [options] [name=tracker home]*
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
359
1735
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
360 options:
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
361 -v: print version and exit
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
362 -n: sets the host name
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
363 -p: sets the port to listen on (default: %(port)s)
1843
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
364 -u: sets the uid to this user after listening on the port
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
365 -g: sets the gid to this group after listening on the port
2021
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
366 -l: sets a filename to log to (instead of stderr / stdout)
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
367 -d: run the server in the background and on UN*X write the server's PID
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
368 to the nominated file. The -l option *must* be specified if this
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
369 option is.
1735
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
370 -N: log client machine names in access log instead of IP addresses (much
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
371 slower)
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
372 %(win)s
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
373
1735
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
374 name=tracker home:
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
375 Sets the tracker home(s) to use. The name is how the tracker is
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
376 identified in the URL (it's the first part of the URL path). The
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
377 tracker home is the directory that was identified when you did
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
378 "roundup-admin init". You may specify any number of these name=home
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
379 pairs on the command-line. For convenience, you may edit the
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
380 TRACKER_HOMES variable in the roundup-server file instead.
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
381 Make sure the name part doesn't include any url-unsafe characters like
1181
49aebf5a8691 some speedups, some fixes to the benchmarking
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
382 spaces, as these confuse the cookie handling in browsers like IE.
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
383 ''')%locals()
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
384 sys.exit(0)
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
385
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
386 def daemonize(pidfile):
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
387 ''' Turn this process into a daemon.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
388 - make sure the sys.std(in|out|err) are completely cut off
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
389 - make our parent PID 1
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
390
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
391 Write our new PID to the pidfile.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
392
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
393 From A.M. Kuuchling (possibly originally Greg Ward) with
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
394 modification from Oren Tirosh, and finally a small mod from me.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
395 '''
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
396 # Fork once
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
397 if os.fork() != 0:
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
398 os._exit(0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
399
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
400 # Create new session
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
401 os.setsid()
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
402
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
403 # Second fork to force PPID=1
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
404 pid = os.fork()
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
405 if pid:
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
406 pidfile = open(pidfile, 'w')
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
407 pidfile.write(str(pid))
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
408 pidfile.close()
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
409 os._exit(0)
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
410
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
411 os.chdir("/")
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
412 os.umask(0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
413
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
414 # close off sys.std(in|out|err), redirect to devnull so the file
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
415 # descriptors can't be used again
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
416 devnull = os.open('/dev/null', 0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
417 os.dup2(devnull, 0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
418 os.dup2(devnull, 1)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
419 os.dup2(devnull, 2)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
420
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
421 def run(port=PORT, success_message=None):
1249
6c24a86a12ae Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
422 ''' Script entry point - handle args and figure out what to to.
6c24a86a12ae Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
423 '''
1606
8b0bd0b897e6 added socket timeout to attempt to prevent stuck processes [SF#665487]
Richard Jones <richard@users.sourceforge.net>
parents: 1554
diff changeset
424 # time out after a minute if we can
8b0bd0b897e6 added socket timeout to attempt to prevent stuck processes [SF#665487]
Richard Jones <richard@users.sourceforge.net>
parents: 1554
diff changeset
425 import socket
8b0bd0b897e6 added socket timeout to attempt to prevent stuck processes [SF#665487]
Richard Jones <richard@users.sourceforge.net>
parents: 1554
diff changeset
426 if hasattr(socket, 'setdefaulttimeout'):
8b0bd0b897e6 added socket timeout to attempt to prevent stuck processes [SF#665487]
Richard Jones <richard@users.sourceforge.net>
parents: 1554
diff changeset
427 socket.setdefaulttimeout(60)
8b0bd0b897e6 added socket timeout to attempt to prevent stuck processes [SF#665487]
Richard Jones <richard@users.sourceforge.net>
parents: 1554
diff changeset
428
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
429 hostname = HOSTNAME
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
430 pidfile = PIDFILE
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
431 logfile = LOGFILE
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
432 user = ROUNDUP_USER
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
433 group = ROUNDUP_GROUP
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
434 svc_args = None
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
435
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
436 try:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
437 # handle the command-line args
2287
49f69762c66a roundup-server -g option not recognised [SF#952310]
Richard Jones <richard@users.sourceforge.net>
parents: 2273
diff changeset
438 options = 'n:p:g:u:d:l:hNv'
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
439 if RoundupService:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
440 options += 'c'
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
441
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
442 try:
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
443 optlist, args = getopt.getopt(sys.argv[1:], options)
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
444 except getopt.GetoptError, e:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
445 usage(str(e))
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
446
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
447 user = ROUNDUP_USER
1843
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
448 group = None
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
449 for (opt, arg) in optlist:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
450 if opt == '-n': hostname = arg
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
451 elif opt == '-v':
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
452 print '%s (python %s)'%(roundup_version, sys.version.split()[0])
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
453 return
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
454 elif opt == '-p': port = int(arg)
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
455 elif opt == '-u': user = arg
1843
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
456 elif opt == '-g': group = arg
1867
9b100d7bcb80 Use abspath() from os.path, it's been there since 1.5.2.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1843
diff changeset
457 elif opt == '-d': pidfile = os.path.abspath(arg)
9b100d7bcb80 Use abspath() from os.path, it's been there since 1.5.2.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1843
diff changeset
458 elif opt == '-l': logfile = os.path.abspath(arg)
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
459 elif opt == '-h': usage()
1735
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
460 elif opt == '-N': RoundupRequestHandler.LOG_IPADDRESS = 0
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
461 elif opt == '-c': svc_args = [opt] + args; args = None
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
462
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
463 if svc_args is not None and len(optlist) > 1:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
464 raise ValueError, _("windows service option must be the only one")
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
465
1736
c376d6c2da1a logfile must be specified if pidfile is [SF#772820]
Richard Jones <richard@users.sourceforge.net>
parents: 1735
diff changeset
466 if pidfile and not logfile:
c376d6c2da1a logfile must be specified if pidfile is [SF#772820]
Richard Jones <richard@users.sourceforge.net>
parents: 1735
diff changeset
467 raise ValueError, _("logfile *must* be specified if pidfile is")
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
468
1843
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
469 # obtain server before changing user id - allows to use port <
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
470 # 1024 if started as root
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
471 address = (hostname, port)
2230
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
472
1871
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
473 try:
2230
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
474 httpd = server_class(address, RoundupRequestHandler)
1871
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
475 except socket.error, e:
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
476 if e[0] == errno.EADDRINUSE:
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
477 raise socket.error, \
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
478 _("Unable to bind to port %s, port already in use." % port)
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
479 raise
1843
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
480
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
481 if group is not None and hasattr(os, 'getgid'):
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
482 # if root, setgid to the running user
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
483 if not os.getgid() and user is not None:
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
484 try:
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
485 import pwd
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
486 except ImportError:
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
487 raise ValueError, _("Can't change groups - no pwd module")
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
488 try:
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
489 gid = pwd.getpwnam(user)[3]
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
490 except KeyError:
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
491 raise ValueError,_("Group %(group)s doesn't exist")%locals()
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
492 os.setgid(gid)
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
493 elif os.getgid() and user is not None:
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
494 print _('WARNING: ignoring "-g" argument, not root')
1736
c376d6c2da1a logfile must be specified if pidfile is [SF#772820]
Richard Jones <richard@users.sourceforge.net>
parents: 1735
diff changeset
495
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
496 if hasattr(os, 'getuid'):
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
497 # if root, setuid to the running user
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
498 if not os.getuid() and user is not None:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
499 try:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
500 import pwd
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
501 except ImportError:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
502 raise ValueError, _("Can't change users - no pwd module")
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
503 try:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
504 uid = pwd.getpwnam(user)[2]
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
505 except KeyError:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
506 raise ValueError, _("User %(user)s doesn't exist")%locals()
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
507 os.setuid(uid)
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
508 elif os.getuid() and user is not None:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
509 print _('WARNING: ignoring "-u" argument, not root')
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
510
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
511 # People can remove this check if they're really determined
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
512 if not os.getuid() and user is None:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
513 raise ValueError, _("Can't run as root!")
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
514
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
515 # handle tracker specs
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
516 if args:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
517 d = {}
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
518 for arg in args:
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
519 try:
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
520 name, home = arg.split('=')
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
521 except ValueError:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
522 raise ValueError, _("Instances must be name=home")
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
523 d[name] = os.path.abspath(home)
1096
fa7df238e2d4 More cleaning up of configuration, and the "instance" -> "tracker" renaming.
Richard Jones <richard@users.sourceforge.net>
parents: 1092
diff changeset
524 RoundupRequestHandler.TRACKER_HOMES = d
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
525 except SystemExit:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
526 raise
1871
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
527 except ValueError:
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
528 usage(error())
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
529 except:
1871
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
530 print error()
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
531 sys.exit(1)
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
532
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
533 # we don't want the cgi module interpreting the command-line args ;)
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
534 sys.argv = sys.argv[:1]
1047
1890c611de08 add daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 992
diff changeset
535
1890c611de08 add daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 992
diff changeset
536 if pidfile:
1843
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
537 if not hasattr(os, 'fork'):
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
538 print _("Sorry, you can't run the server as a daemon"
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
539 " on this Operating System")
1409
8dc60d87ab42 Fixed a backlog of bug reports, and worked on python 2.3 compatibility:
Richard Jones <richard@users.sourceforge.net>
parents: 1367
diff changeset
540 sys.exit(0)
1632
eb4d04a9d647 added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents: 1611
diff changeset
541 else:
eb4d04a9d647 added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents: 1611
diff changeset
542 daemonize(pidfile)
1047
1890c611de08 add daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 992
diff changeset
543
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
544 if svc_args is not None:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
545 # don't do any other stuff
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
546 return win32serviceutil.HandleCommandLine(RoundupService, argv=svc_args)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
547
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
548 # redirect stdout/stderr to our logfile
1047
1890c611de08 add daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 992
diff changeset
549 if logfile:
1367
b0d342a3548f open server logfile unbuffered
Richard Jones <richard@users.sourceforge.net>
parents: 1311
diff changeset
550 # appending, unbuffered
b0d342a3548f open server logfile unbuffered
Richard Jones <richard@users.sourceforge.net>
parents: 1311
diff changeset
551 sys.stdout = sys.stderr = open(logfile, 'a', 0)
1047
1890c611de08 add daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 992
diff changeset
552
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
553 if success_message:
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
554 print success_message
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
555 else:
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
556 print _('Roundup server started on %(address)s')%locals()
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
557
1311
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
558 try:
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
559 httpd.serve_forever()
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
560 except KeyboardInterrupt:
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
561 print 'Keyboard Interrupt: exiting'
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
562
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
563 if __name__ == '__main__':
593
2256f81293c1 Conversion to generated script stubs
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 592
diff changeset
564 run()
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
565
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
566 # vim: set filetype=python ts=4 sw=4 et si

Roundup Issue Tracker: http://roundup-tracker.org/