annotate roundup/scripts/roundup_server.py @ 2806:845e87d5e3ba

translator objects now have the following search path: - selected locale messages in the tracker locale dir - selected locale messages in the system locale dir - english messages in the tracker locale dir - english messages in the system locale dir automatically compile .mo files if needed (found .po file and .mo is missing or .po mtime is greater that .mo mtime) removed support for python < 2.0. gettext module is now required. get_translation: removed 'domain' argument, added 'tracker_home' argument
author Alexander Smishlajev <a1s@users.sourceforge.net>
date Sat, 23 Oct 2004 14:03:34 +0000
parents 22c381f3f448
children 9a6b451b1ba6
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
2774
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
20 $Id: roundup_server.py,v 1.66 2004-10-18 07:43:58 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
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
25 from roundup import configuration, 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
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
29 import SocketServer, BaseHTTPServer, socket, errno, ConfigParser
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
2181
740102dfad1d favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents: 2180
diff changeset
41 # "default" favicon.ico
740102dfad1d favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents: 2180
diff changeset
42 # 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
43 import zlib, base64
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
44 favico = zlib.decompress(base64.decodestring('''
2180
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
45 eJztjr1PmlEUh59XgVoshdYPWorFIhaRFq0t9pNq37b60lYSTRzcTFw6GAfj5gDYaF0dTB0MxMSE
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
46 gQQd3FzKJiEC0UCIUUN1M41pV2JCXySg/0ITn5tfzvmdc+85FwT56HSc81UJjXJsk1UsNcsSqCk1
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
47 BS64lK+vr7OyssLJyQl2ux2j0cjU1BQajYZIJEIwGMRms+H3+zEYDExOTjI2Nsbm5iZWqxWv18vW
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
48 1hZDQ0Ok02kmJiY4Ojpienqa3d1dxsfHUSqVeDwe5ufnyeVyrK6u4nK5ODs7Y3FxEYfDwdzcHCaT
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
49 icPDQ5LJJIIgMDIyQj6fZ39/n+3tbdbW1pAkiYWFBWZmZtjb2yMejzM8PEwgEMDn85HNZonFYqjV
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
50 asLhMMvLy2QyGfR6PaOjowwODmKxWDg+PkalUhEKhSgUCiwtLWE2m9nZ2UGhULCxscHp6SmpVIpo
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
51 NMrs7CwHBwdotVoSiQRXXPG/IzY7RHtt922xjFRb01H1XhKfPBNbi/7my7rrLXJ88eppvxwEfV3f
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
52 NY3Y6exofVdsV3+2wnPFDdPjB83n7xuVpcFvygPbGwxF31LZIKrQDfR2Xvh7lmrX654L/7bvlnng
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
53 bn3Zuj8M9Hepux6VfZtW1yA6K7cfGqVu8TL325u+fHTb71QKbk+7TZQ+lTc6RcnpqW8qmVQBoj/g
58b6d1747973 Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents: 2176
diff changeset
54 23eo0sr/NIGvB37K+lOWXMvJ+uWFeKGU/03Cb7n3D4M3wxI=
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
55 '''.strip()))
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
56
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
57 DEFAULT_PORT = 8080
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
58
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
59 class RoundupRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
60 TRACKER_HOMES = {}
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
61 LOG_IPADDRESS = 1
592
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 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
64 """ 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
65 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
66 """
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
67 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
68 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
69 try:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
70 self.inner_run_cgi()
992
6003d6fa02a5 new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents: 661
diff changeset
71 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
72 self.send_error(404, self.path)
2273
c77483d2cda4 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2230
diff changeset
73 except client.Unauthorised, message:
c77483d2cda4 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2230
diff changeset
74 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
75 except:
1939
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
76 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
77 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
78 self.log_error('timeout')
1939
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
79 else:
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
80 # 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
81 # any effect...
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
82 self.send_response(400)
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
83 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
84 self.end_headers()
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
85 try:
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
86 reload(cgitb)
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
87 self.wfile.write(cgitb.breaker())
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
88 self.wfile.write(cgitb.html())
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
89 except:
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
90 s = StringIO.StringIO()
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
91 traceback.print_exc(None, s)
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
92 self.wfile.write("<pre>")
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
93 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
94 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
95 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
96
2592
5a8d9465827e implement the HTTP HEAD command [SF#992544]
Richard Jones <richard@users.sourceforge.net>
parents: 2566
diff changeset
97 do_GET = do_POST = do_HEAD = run_cgi
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
98
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
99 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
100 ''' 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
101 '''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
102 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
103 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
104 self.end_headers()
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
105 w = self.wfile.write
2328
b54ad9ed394a join adjacent translatable strings
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2308
diff changeset
106 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
107 '<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
108 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
109 keys.sort()
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
110 for tracker in keys:
2566
dd2b9f5a104c don't translate strings that never need translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2543
diff changeset
111 w('<li><a href="%(tracker_url)s/index">%(tracker_name)s</a>\n'%{
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
112 '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
113 'tracker_name': cgi.escape(tracker)})
2566
dd2b9f5a104c don't translate strings that never need translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2543
diff changeset
114 w('</ol></body></html>')
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
115
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
116 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
117 ''' 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
118 '''
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
119 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
120
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
121 if rest == '/favicon.ico':
2176
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
122 self.send_response(200)
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
123 self.send_header('Content-Type', 'image/x-icon')
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
124 self.end_headers()
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
125 self.wfile.write(favico)
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
126 return
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
127
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
128 i = rest.rfind('?')
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
129 if i >= 0:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
130 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
131 else:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
132 query = ''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
133
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
134 # 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
135 if rest == '/':
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
136 return self.index()
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
137
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
138 # 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
139 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
140 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
141
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
142 # handle missing trailing '/'
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
143 if len(l_path) == 2:
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
144 self.send_response(301)
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
145 # redirect - XXX https??
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
146 protocol = 'http'
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
147 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
148 self.send_header('Location', url)
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
149 self.end_headers()
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
150 self.wfile.write('Moved Permanently')
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
151 return
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
152
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
153 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
154 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
155 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
156 else:
992
6003d6fa02a5 new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents: 661
diff changeset
157 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
158
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
159 # 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
160 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
161 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
162 else:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
163 rest = '/'
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
164
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
165 # 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
166 env = {}
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
167 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
168 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
169 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
170 if query:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
171 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
172 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
173 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
174 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
175 else:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
176 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
177 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
178 if length:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
179 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
180 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
181 if co:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
182 env['HTTP_COOKIE'] = ', '.join(co)
1299
b2d04ce03802 Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents: 1251
diff changeset
183 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
184 env['SCRIPT_NAME'] = ''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
185 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
186 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
187 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
188
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
189 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
190
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
191 # do the roundup thang
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2632
diff changeset
192 if hasattr(tracker, 'Client'):
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2632
diff changeset
193 c = tracker.Client(tracker, self, env)
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2632
diff changeset
194 else:
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2632
diff changeset
195 c = client.Client(tracker, self, env)
992
6003d6fa02a5 new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents: 661
diff changeset
196 c.main()
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
197
1735
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
198 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
199 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
200 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
201 else:
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
202 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
203 return socket.getfqdn(host)
1632
eb4d04a9d647 added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents: 1611
diff changeset
204
2021
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
205 def log_message(self, format, *args):
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
206 ''' Try to *safely* log to stderr.
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
207 '''
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
208 try:
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
209 BaseHTTPServer.BaseHTTPRequestHandler.log_message(self,
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
210 format, *args)
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
211 except IOError:
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
212 # stderr is no longer viable
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
213 pass
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
214
1871
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
215 def error():
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
216 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
217 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
218
2230
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
219 # 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
220 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
221 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
222 pass
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
223 else:
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
224 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
225
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
226 try:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
227 import win32serviceutil
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
228 except:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
229 RoundupService = None
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
230 else:
2230
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
231
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
232 # allow the win32
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
233 import win32service
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
234 import win32event
2674
18a23afb1f89 replace "from module import *" with "import module"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
235 import win32file
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
236
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
237 SvcShutdown = "ServiceShutdown"
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
238
2021
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
239 class RoundupService(win32serviceutil.ServiceFramework,
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
240 BaseHTTPServer.HTTPServer):
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
241 ''' A Roundup standalone server for Win32 by Ewout Prangsma
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
242 '''
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
243 _svc_name_ = "Roundup Bug Tracker"
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
244 _svc_display_name_ = "Roundup Bug Tracker"
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
245 def __init__(self, args):
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
246 # redirect stdout/stderr to our logfile
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
247 if LOGFILE:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
248 # appending, unbuffered
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
249 sys.stdout = sys.stderr = open(LOGFILE, 'a', 0)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
250 win32serviceutil.ServiceFramework.__init__(self, args)
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
251 BaseHTTPServer.HTTPServer.__init__(self, self.address,
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
252 RoundupRequestHandler)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
253
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
254 # Create the necessary NT Event synchronization objects...
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
255 # 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
256 # to shutdown the service.
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
257 self.hevSvcStop = win32event.CreateEvent(None, 0, 0, None)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
258
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
259 # 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
260 self.hevConn = win32event.CreateEvent(None, 0, 0, None)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
261
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
262 # 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
263 # purposes.
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
264 import servicemanager
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
265 self.servicemanager = servicemanager
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
266
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
267 def SvcStop(self):
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
268 # 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
269 # stop process.
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
270 self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
271 win32event.SetEvent(self.hevSvcStop)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
272
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
273 def SvcDoRun(self):
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
274 try:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
275 self.serve_forever()
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
276 except SvcShutdown:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
277 pass
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
278
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
279 def get_request(self):
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
280 # Call WSAEventSelect to enable self.socket to be waited on.
2674
18a23afb1f89 replace "from module import *" with "import module"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
281 win32file.WSAEventSelect(self.socket, self.hevConn,
18a23afb1f89 replace "from module import *" with "import module"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
282 win32file.FD_ACCEPT)
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
283 while 1:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
284 try:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
285 rv = self.socket.accept()
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
286 except socket.error, why:
2674
18a23afb1f89 replace "from module import *" with "import module"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
287 if why[0] != win32file.WSAEWOULDBLOCK:
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
288 raise
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
289 # Use WaitForMultipleObjects instead of select() because
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
290 # 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
291 # NT synchronization objects.
2674
18a23afb1f89 replace "from module import *" with "import module"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
292 rc = win32event.WaitForMultipleObjects(
18a23afb1f89 replace "from module import *" with "import module"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
293 (self.hevSvcStop, self.hevConn),
18a23afb1f89 replace "from module import *" with "import module"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
294 0, win32event.INFINITE)
18a23afb1f89 replace "from module import *" with "import module"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
295 if rc == win32event.WAIT_OBJECT_0:
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
296 # self.hevSvcStop was signaled, this means:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
297 # Stop the service!
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
298 # So we throw the shutdown exception, which gets
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
299 # caught by self.SvcDoRun
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
300 raise SvcShutdown
2674
18a23afb1f89 replace "from module import *" with "import module"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
301 # Otherwise, rc == win32event.WAIT_OBJECT_0 + 1 which means
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
302 # 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
303 # self.socket.accept(), we'll have our incoming connection
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
304 # socket!
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
305 # 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
306 else:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
307 # yay! we have a connection
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
308 # 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
309 # 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
310 # 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
311 # this includes any properties set by WSAAsyncSelect, or
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
312 # WSAEventSelect, and whether its a blocking socket or not.)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
313 #
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
314 # 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
315 # 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
316 # mode.
2674
18a23afb1f89 replace "from module import *" with "import module"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2637
diff changeset
317 win32file.WSAEventSelect(rv[0], self.hevConn, 0)
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
318 rv[0].setblocking(1)
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
319 break
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
320 return rv
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
321
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
322 def usage(message=''):
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
323 if RoundupService:
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
324 os_part = \
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
325 ""''' -c <Command> Windows Service options.
2521
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
326 If you want to run the server as a Windows Service, you
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
327 must configure the rest of the options by changing the
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
328 constants of this program. You will at least configure
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
329 one tracker in the TRACKER_HOMES variable. This option
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
330 is mutually exclusive from the rest. Typing
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
331 "roundup-server -c help" shows Windows Services
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
332 specifics.'''
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
333 else:
2521
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
334 os_part = ""''' -u <UID> runs the Roundup web server as this UID
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
335 -g <GID> runs the Roundup web server as this GID
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
336 -d <PIDfile> run the server in the background and write the server's PID
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
337 to the file indicated by PIDfile. The -l option *must* be
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
338 specified if -d is used.'''
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
339 port=DEFAULT_PORT
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
340 if message:
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
341 message += '\n'
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
342 print _('''%(message)sUsage: 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
343
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
344 Options:
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
345 -v prints the Roundup version number and exits
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
346 -C <fname> use configuration file
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
347 -n <name> sets the host name of the Roundup web server instance
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
348 -p <port> sets the port to listen on (default: %(port)s)
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
349 -l <fname> log to the file indicated by fname instead of stderr/stdout
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
350 -N log client machine names instead of IP addresses (much slower)
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
351 %(os_part)s
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
352
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
353 Examples:
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
354 roundup-server -C /opt/roundup/etc/roundup-server.ini
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
355
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
356 roundup-server support=/var/spool/roundup-trackers/support
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
357
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
358 roundup-server -d /var/run/roundup.pid -l /var/log/roundup.log \\
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
359 support=/var/spool/roundup-trackers/support
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
360
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
361 Configuration file format:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
362 See the "admin_guide" in the Roundup "doc" directory.
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
363
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
364 How to use "name=tracker home":
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
365 These arguments set the tracker home(s) to use. The name is how the
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
366 tracker is identified in the URL (it's the first part of the URL path).
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
367 The 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
368 "roundup-admin init". You may specify any number of these name=home
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
369 pairs on the command-line. Make sure the name part doesn't include
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
370 any url-unsafe characters like spaces, as these confuse IE.
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
371 ''')%locals()
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
372 #sys.exit(0)
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
373
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
374
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
375 def daemonize(pidfile):
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
376 ''' Turn this process into a daemon.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
377 - 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
378 - make our parent PID 1
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
379
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
380 Write our new PID to the pidfile.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
381
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
382 From A.M. Kuuchling (possibly originally Greg Ward) with
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
383 modification from Oren Tirosh, and finally a small mod from me.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
384 '''
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
385 # Fork once
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
386 if os.fork() != 0:
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
387 os._exit(0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
388
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
389 # Create new session
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
390 os.setsid()
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
391
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
392 # Second fork to force PPID=1
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
393 pid = os.fork()
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
394 if pid:
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
395 pidfile = open(pidfile, 'w')
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
396 pidfile.write(str(pid))
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
397 pidfile.close()
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
398 os._exit(0)
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
399
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
400 os.chdir("/")
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
401 os.umask(0)
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 # 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
404 # descriptors can't be used again
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
405 devnull = os.open('/dev/null', 0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
406 os.dup2(devnull, 0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
407 os.dup2(devnull, 1)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
408 os.dup2(devnull, 2)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
409
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
410 def setgid(group):
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
411 if group is None:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
412 return
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
413 if not hasattr(os, 'setgid'):
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
414 return
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
415
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
416 # if root, setgid to the running user
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
417 if not os.getuid():
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
418 print _('WARNING: ignoring "-g" argument, not root')
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
419 return
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
420
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
421 try:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
422 import grp
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
423 except ImportError:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
424 raise ValueError, _("Can't change groups - no grp module")
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
425 try:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
426 try:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
427 gid = int(group)
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
428 except ValueError:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
429 gid = grp.getgrnam(group)[2]
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
430 else:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
431 grp.getgrgid(gid)
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
432 except KeyError:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
433 raise ValueError,_("Group %(group)s doesn't exist")%locals()
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
434 os.setgid(gid)
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
435
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
436 def setuid(user):
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
437 if not hasattr(os, 'getuid'):
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
438 return
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
439
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
440 # People can remove this check if they're really determined
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
441 if user is None:
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
442 if os.getuid():
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
443 return
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
444 raise ValueError, _("Can't run as root!")
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
445
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
446 if os.getuid():
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
447 print _('WARNING: ignoring "-u" argument, not root')
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
448
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
449 try:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
450 import pwd
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
451 except ImportError:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
452 raise ValueError, _("Can't change users - no pwd module")
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
453 try:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
454 try:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
455 uid = int(user)
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
456 except ValueError:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
457 uid = pwd.getpwnam(user)[2]
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
458 else:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
459 pwd.getpwuid(uid)
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
460 except KeyError:
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
461 raise ValueError, _("User %(user)s doesn't exist")%locals()
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
462 os.setuid(uid)
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
463
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
464 class TrackerHomeOption(configuration.FilePathOption):
2772
52460ff89e10 fix: tracker definitions from the command line...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2771
diff changeset
465
52460ff89e10 fix: tracker definitions from the command line...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2771
diff changeset
466 # Tracker homes do not need any description strings
52460ff89e10 fix: tracker definitions from the command line...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2771
diff changeset
467 def format(self):
52460ff89e10 fix: tracker definitions from the command line...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2771
diff changeset
468 return "%(name)s = %(value)s\n" % {
52460ff89e10 fix: tracker definitions from the command line...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2771
diff changeset
469 "name": self.setting,
52460ff89e10 fix: tracker definitions from the command line...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2771
diff changeset
470 "value": self.value2str(self._value),
52460ff89e10 fix: tracker definitions from the command line...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2771
diff changeset
471 }
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
472
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
473 class ServerConfig(configuration.Config):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
474
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
475 SETTINGS = (
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
476 ("main", (
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
477 (configuration.Option, "host", "",
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
478 "Host name of the Roundup web server instance.\n"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
479 "If empty, listen on all network interfaces."),
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
480 (configuration.IntegerNumberOption, "port", DEFAULT_PORT,
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
481 "Port to listen on."),
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
482 (configuration.NullableOption, "user", "",
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
483 "User ID as which the server will answer requests.\n"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
484 "In order to use this option, "
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
485 "the server must be run initially as root.\n"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
486 "Availability: Unix."),
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
487 (configuration.NullableOption, "group", "",
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
488 "Group ID as which the server will answer requests.\n"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
489 "In order to use this option, "
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
490 "the server must be run initially as root.\n"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
491 "Availability: Unix."),
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
492 (configuration.BooleanOption, "log_hostnames", "no",
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
493 "Log client machine names instead of IP addresses "
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
494 "(much slower)"),
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
495 (configuration.NullableFilePathOption, "pidfile", "",
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
496 "File to which the server records "
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
497 "the process id of the daemon.\n"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
498 "If this option is not set, "
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
499 "the server will run in foreground\n"),
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
500 (configuration.NullableFilePathOption, "logfile", "",
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
501 "Log file path. If unset, log to stderr."),
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
502 )),
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
503 ("trackers", (), "Roundup trackers to serve.\n"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
504 "Each option in this section defines single Roundup tracker.\n"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
505 "Option name identifies the tracker and will appear in the URL.\n"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
506 "Option value is tracker home directory path.\n"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
507 "The path may be either absolute or relative\n"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
508 "to the directory containig this config file."),
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
509 )
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
510
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
511 def __init__(self, config_file=None):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
512 configuration.Config.__init__(self, config_file, self.SETTINGS)
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
513
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
514 def _adjust_options(self, config):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
515 """Add options for tracker homes"""
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
516 # return early if there are no tracker definitions.
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
517 # trackers must be specified on the command line.
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
518 if not config.has_section("trackers"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
519 return
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
520 # config defaults appear in all sections.
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
521 # filter them out.
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
522 defaults = config.defaults().keys()
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
523 for name in config.options("trackers"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
524 if name not in defaults:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
525 self.add_option(TrackerHomeOption(self, "trackers", name))
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
526
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
527 def _get_name(self):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
528 return "Roundup server"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
529
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
530 def trackers(self):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
531 """Return tracker definitions as a list of (name, home) pairs"""
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
532 trackers = []
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
533 for option in self._get_section_options("trackers"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
534 trackers.append((option, self["TRACKERS_" + option.upper()]))
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
535 return trackers
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
536
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
537 undefined = []
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
538 def run(port=undefined, success_message=None):
1249
6c24a86a12ae Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
539 ''' 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
540 '''
1606
8b0bd0b897e6 added socket timeout to attempt to prevent stuck processes [SF#665487]
Richard Jones <richard@users.sourceforge.net>
parents: 1554
diff changeset
541 # 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
542 import socket
8b0bd0b897e6 added socket timeout to attempt to prevent stuck processes [SF#665487]
Richard Jones <richard@users.sourceforge.net>
parents: 1554
diff changeset
543 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
544 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
545
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
546 config = ServerConfig()
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
547
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
548 options = "hvS"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
549 if RoundupService:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
550 options += 'c'
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
551 try:
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
552 (optlist, args) = config.getopt(sys.argv[1:],
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
553 options, ("help", "version", "save-config",),
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
554 host="n:", port="p:", group="g:", user="u:",
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
555 logfile="l:", pidfile="d:", log_hostnames="N")
2773
6fb4b692c133 oops. forgot to reenable ConfigurationError handling, disabled for debugging.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2772
diff changeset
556 except (getopt.GetoptError, configuration.ConfigurationError), e:
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
557 usage(str(e))
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
558 return
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
559
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
560 # if running in windows service mode, don't do any other stuff
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
561 if ("-c", "") in optlist:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
562 RoundupService.address = (config.HOST, config.PORT)
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
563 # XXX why the 1st argument to the service is "-c"
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
564 # instead of the script name???
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
565 return win32serviceutil.HandleCommandLine(RoundupService,
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
566 argv=["-c"] + args)
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
567
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
568 # add tracker names from command line.
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
569 # this is done early to let '--save-config' handle the trackers.
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
570 if args:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
571 for arg in args:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
572 try:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
573 name, home = arg.split('=')
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
574 except ValueError:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
575 raise ValueError, _("Instances must be name=home")
2772
52460ff89e10 fix: tracker definitions from the command line...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2771
diff changeset
576 config.add_option(TrackerHomeOption(config, "trackers", name))
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
577 config["TRACKERS_" + name.upper()] = home
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
578
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
579 # handle remaining options
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
580 if optlist:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
581 for (opt, arg) in optlist:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
582 if opt in ("-h", "--help"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
583 usage()
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
584 elif opt in ("-v", "--version"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
585 print '%s (python %s)' % (roundup_version,
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
586 sys.version.split()[0])
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
587 elif opt in ("-S", "--save-config"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
588 config.save()
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
589 print _("Configuration saved to %s") % config.filepath
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
590 # any of the above options prevent server from running
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
591 return
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
592
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
593 RoundupRequestHandler.LOG_IPADDRESS = not config.LOG_HOSTNAMES
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
594
2774
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
595 # port number in function arguments overrides config and command line
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
596 if port is not undefined:
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
597 config.PORT = port
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
598
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
599 # obtain server before changing user id - allows
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
600 # to use port < 1024 if started as root
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
601 try:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
602 httpd = server_class((config.HOST, config.PORT), RoundupRequestHandler)
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
603 except socket.error, e:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
604 if e[0] == errno.EADDRINUSE:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
605 raise socket.error, \
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
606 _("Unable to bind to port %s, port already in use.") \
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
607 % config.PORT
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
608 raise
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
609
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
610 # change user and/or group
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
611 setgid(config.GROUP)
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
612 setuid(config.USER)
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
613
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
614 # apply tracker specs
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
615 for (name, home) in config.trackers():
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
616 home = os.path.abspath(home)
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
617 RoundupRequestHandler.TRACKER_HOMES[name] = home
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
618
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
619 # 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
620 sys.argv = sys.argv[:1]
1047
1890c611de08 add daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 992
diff changeset
621
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
622 # fork the server from our parent if a pidfile is specified
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
623 if config.PIDFILE:
1843
d31a25046136 support setgid and running on port < 1024 (patch [SF#777528])
Richard Jones <richard@users.sourceforge.net>
parents: 1831
diff changeset
624 if not hasattr(os, 'fork'):
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
625 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
626 " 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
627 sys.exit(0)
1632
eb4d04a9d647 added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents: 1611
diff changeset
628 else:
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
629 daemonize(config.PIDFILE)
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
630
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
631 # redirect stdout/stderr to our logfile
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
632 if config.LOGFILE:
1367
b0d342a3548f open server logfile unbuffered
Richard Jones <richard@users.sourceforge.net>
parents: 1311
diff changeset
633 # appending, unbuffered
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
634 sys.stdout = sys.stderr = open(config.LOGFILE, 'a', 0)
1047
1890c611de08 add daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 992
diff changeset
635
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
636 if success_message:
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
637 print success_message
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
638 else:
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
639 print _('Roundup server started on %(HOST)s:%(PORT)s') \
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
640 % config
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
641
1311
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
642 try:
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
643 httpd.serve_forever()
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
644 except KeyboardInterrupt:
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
645 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
646
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
647 if __name__ == '__main__':
593
2256f81293c1 Conversion to generated script stubs
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 592
diff changeset
648 run()
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
649
2543
6eda7612676d allow ids in addition to names for -g and -u arguments;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2521
diff changeset
650 # vim: set filetype=python sts=4 sw=4 et si :

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