Mercurial > p > roundup > code
annotate roundup/scripts/roundup_server.py @ 4344:85b00a3820b3
Fix thread safety with stdin in roundup-server
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Tue, 02 Feb 2010 05:00:42 +0000 |
| parents | 236939e4137b |
| children | 207499c0a3ed |
| 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 |
|
3919
c9cdc4eb8ca5
lowercase tracker name during roundup-server's cgi handling
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3891
diff
changeset
|
20 $Id: roundup_server.py,v 1.94 2007-09-25 04:27:12 jpend 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 |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
24 import errno, cgi, getopt, os, socket, sys, traceback, urllib, time |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
25 import ConfigParser, BaseHTTPServer, SocketServer, StringIO |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
26 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
27 try: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
28 from OpenSSL import SSL |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
29 except ImportError: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
30 SSL = None |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
31 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
32 # python version check |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
33 from roundup import configuration, version_check |
|
2186
3f89c8ffe4f1
version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents:
2181
diff
changeset
|
34 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
|
35 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
36 # Roundup modules of use here |
|
992
6003d6fa02a5
new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents:
661
diff
changeset
|
37 from roundup.cgi import cgitb, client |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
38 from roundup.cgi.PageTemplates.PageTemplate import PageTemplate |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
39 import roundup.instance |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
40 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
|
41 |
|
2181
740102dfad1d
favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents:
2180
diff
changeset
|
42 # "default" favicon.ico |
|
740102dfad1d
favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents:
2180
diff
changeset
|
43 # 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
|
44 import zlib, base64 |
|
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
45 favico = zlib.decompress(base64.decodestring(''' |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
46 eJztjr1PmlEUh59XgVoshdYPWorFIhaRFq0t9pNq37b60lYSTRzcTFw6GAfj5gDYaF0dTB0MxMSE |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
47 gQQd3FzKJiEC0UCIUUN1M41pV2JCXySg/0ITn5tfzvmdc+85FwT56HSc81UJjXJsk1UsNcsSqCk1 |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
48 BS64lK+vr7OyssLJyQl2ux2j0cjU1BQajYZIJEIwGMRms+H3+zEYDExOTjI2Nsbm5iZWqxWv18vW |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
49 1hZDQ0Ok02kmJiY4Ojpienqa3d1dxsfHUSqVeDwe5ufnyeVyrK6u4nK5ODs7Y3FxEYfDwdzcHCaT |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
50 icPDQ5LJJIIgMDIyQj6fZ39/n+3tbdbW1pAkiYWFBWZmZtjb2yMejzM8PEwgEMDn85HNZonFYqjV |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
51 asLhMMvLy2QyGfR6PaOjowwODmKxWDg+PkalUhEKhSgUCiwtLWE2m9nZ2UGhULCxscHp6SmpVIpo |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
52 NMrs7CwHBwdotVoSiQRXXPG/IzY7RHtt922xjFRb01H1XhKfPBNbi/7my7rrLXJ88eppvxwEfV3f |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
53 NY3Y6exofVdsV3+2wnPFDdPjB83n7xuVpcFvygPbGwxF31LZIKrQDfR2Xvh7lmrX654L/7bvlnng |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
54 bn3Zuj8M9Hepux6VfZtW1yA6K7cfGqVu8TL325u+fHTb71QKbk+7TZQ+lTc6RcnpqW8qmVQBoj/g |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
55 23eo0sr/NIGvB37K+lOWXMvJ+uWFeKGU/03Cb7n3D4M3wxI= |
|
1611
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
56 '''.strip())) |
|
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
57 |
|
2637
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
58 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
|
59 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
60 # See what types of multiprocess server are available |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
61 # Note: the order is important. Preferred multiprocess type |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
62 # is the last element of this list. |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
63 # "debug" means "none" + no tracker/template cache |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
64 MULTIPROCESS_TYPES = ["debug", "none"] |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
65 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
66 import thread |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
67 except ImportError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
68 pass |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
69 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
70 MULTIPROCESS_TYPES.append("thread") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
71 if hasattr(os, 'fork'): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
72 MULTIPROCESS_TYPES.append("fork") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
73 DEFAULT_MULTIPROCESS = MULTIPROCESS_TYPES[-1] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
74 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
75 def auto_ssl(): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
76 print _('WARNING: generating temporary SSL certificate') |
|
4276
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
77 import OpenSSL, random |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
78 pkey = OpenSSL.crypto.PKey() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
79 pkey.generate_key(OpenSSL.crypto.TYPE_RSA, 768) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
80 cert = OpenSSL.crypto.X509() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
81 cert.set_serial_number(random.randint(0, sys.maxint)) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
82 cert.gmtime_adj_notBefore(0) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
83 cert.gmtime_adj_notAfter(60 * 60 * 24 * 365) # one year |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
84 cert.get_subject().CN = '*' |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
85 cert.get_subject().O = 'Roundup Dummy Certificate' |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
86 cert.get_issuer().CN = 'Roundup Dummy Certificate Authority' |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
87 cert.get_issuer().O = 'Self-Signed' |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
88 cert.set_pubkey(pkey) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
89 cert.sign(pkey, 'md5') |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
90 ctx = SSL.Context(SSL.SSLv23_METHOD) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
91 ctx.use_privatekey(pkey) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
92 ctx.use_certificate(cert) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
93 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
94 return ctx |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
95 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
96 class SecureHTTPServer(BaseHTTPServer.HTTPServer): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
97 def __init__(self, server_address, HandlerClass, ssl_pem=None): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
98 assert SSL, "pyopenssl not installed" |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
99 BaseHTTPServer.HTTPServer.__init__(self, server_address, HandlerClass) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
100 self.socket = socket.socket(self.address_family, self.socket_type) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
101 if ssl_pem: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
102 ctx = SSL.Context(SSL.SSLv23_METHOD) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
103 ctx.use_privatekey_file(ssl_pem) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
104 ctx.use_certificate_file(ssl_pem) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
105 else: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
106 ctx = auto_ssl() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
107 self.ssl_context = ctx |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
108 self.socket = SSL.Connection(ctx, self.socket) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
109 self.server_bind() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
110 self.server_activate() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
111 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
112 def get_request(self): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
113 (conn, info) = self.socket.accept() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
114 if self.ssl_context: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
115 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
116 class RetryingFile(object): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
117 """ SSL.Connection objects can return Want__Error |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
118 on recv/write, meaning "try again". We'll handle |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
119 the try looping here """ |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
120 def __init__(self, fileobj): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
121 self.__fileobj = fileobj |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
122 |
|
3891
410cae6ab7dd
need to pass arguments to wrapper readline for SSL servers
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3890
diff
changeset
|
123 def readline(self, *args): |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
124 """ SSL.Connection can return WantRead """ |
|
4273
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
125 while True: |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
126 try: |
|
4273
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
127 return self.__fileobj.readline(*args) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
128 except SSL.WantReadError: |
|
4276
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
129 time.sleep(.1) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
130 |
|
4258
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
131 def read(self, *args): |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
132 """ SSL.Connection can return WantRead """ |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
133 while True: |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
134 try: |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
135 return self.__fileobj.read(*args) |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
136 except SSL.WantReadError: |
|
4276
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
137 time.sleep(.1) |
|
4258
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
138 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
139 def __getattr__(self, attrib): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
140 return getattr(self.__fileobj, attrib) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
141 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
142 class ConnFixer(object): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
143 """ wraps an SSL socket so that it implements makefile |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
144 which the HTTP handlers require """ |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
145 def __init__(self, conn): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
146 self.__conn = conn |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
147 def makefile(self, mode, bufsize): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
148 fo = socket._fileobject(self.__conn, mode, bufsize) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
149 return RetryingFile(fo) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
150 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
151 def __getattr__(self, attrib): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
152 return getattr(self.__conn, attrib) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
153 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
154 conn = ConnFixer(conn) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
155 return (conn, info) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
156 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
157 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
|
158 TRACKER_HOMES = {} |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
159 TRACKERS = None |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
160 LOG_IPADDRESS = 1 |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
161 DEBUG_MODE = False |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
162 CONFIG = None |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
163 |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
164 def get_tracker(self, name): |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
165 """Return a tracker instance for given tracker name""" |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
166 # Note: try/except KeyError works faster that has_key() check |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
167 # if the key is usually found in the dictionary |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
168 # |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
169 # Return cached tracker instance if we have a tracker cache |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
170 if self.TRACKERS: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
171 try: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
172 return self.TRACKERS[name] |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
173 except KeyError: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
174 pass |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
175 # No cached tracker. Look for home path. |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
176 try: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
177 tracker_home = self.TRACKER_HOMES[name] |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
178 except KeyError: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
179 raise client.NotFound |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
180 # open the instance |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
181 tracker = roundup.instance.open(tracker_home) |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
182 # and cache it if we have a tracker cache |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
183 if self.TRACKERS: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
184 self.TRACKERS[name] = tracker |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
185 return tracker |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
186 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
187 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
|
188 """ 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
|
189 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
|
190 """ |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
191 try: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
192 self.inner_run_cgi() |
|
992
6003d6fa02a5
new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents:
661
diff
changeset
|
193 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
|
194 self.send_error(404, self.path) |
|
2273
c77483d2cda4
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2230
diff
changeset
|
195 except client.Unauthorised, message: |
|
c77483d2cda4
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2230
diff
changeset
|
196 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
|
197 except: |
|
1939
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
198 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
|
199 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
|
200 self.log_error('timeout') |
|
1939
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
201 else: |
|
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
202 # 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
|
203 # any effect... |
|
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
204 self.send_response(400) |
|
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
205 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
|
206 self.end_headers() |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
207 if self.DEBUG_MODE: |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
208 try: |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
209 reload(cgitb) |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
210 self.wfile.write(cgitb.breaker()) |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
211 self.wfile.write(cgitb.html()) |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
212 except: |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
213 s = StringIO.StringIO() |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
214 traceback.print_exc(None, s) |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
215 self.wfile.write("<pre>") |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
216 self.wfile.write(cgi.escape(s.getvalue())) |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
217 self.wfile.write("</pre>\n") |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
218 else: |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
219 # user feedback |
|
1939
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
220 self.wfile.write(cgitb.breaker()) |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
221 ts = time.ctime() |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
222 self.wfile.write('''<p>%s: An error occurred. Please check |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
223 the server log for more infomation.</p>'''%ts) |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
224 # out to the logfile |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
225 print 'EXCEPTION AT', ts |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
226 traceback.print_exc() |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
227 |
|
2592
5a8d9465827e
implement the HTTP HEAD command [SF#992544]
Richard Jones <richard@users.sourceforge.net>
parents:
2566
diff
changeset
|
228 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
|
229 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
230 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
|
231 ''' 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
|
232 ''' |
|
3205
dbd6ba721943
if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3112
diff
changeset
|
233 keys = self.TRACKER_HOMES.keys() |
|
dbd6ba721943
if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3112
diff
changeset
|
234 if len(keys) == 1: |
|
dbd6ba721943
if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3112
diff
changeset
|
235 self.send_response(302) |
|
dbd6ba721943
if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3112
diff
changeset
|
236 self.send_header('Location', urllib.quote(keys[0]) + '/index') |
|
3849
9d37a6779530
End headers when redirecting to tracker. Closes [SF#1706114].
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3787
diff
changeset
|
237 self.end_headers() |
|
3205
dbd6ba721943
if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3112
diff
changeset
|
238 else: |
|
dbd6ba721943
if there is only one tracker, redirect from trackers list to the tracker
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3112
diff
changeset
|
239 self.send_response(200) |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
240 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
241 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
|
242 self.end_headers() |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
243 w = self.wfile.write |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
244 |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
245 if self.CONFIG and self.CONFIG['TEMPLATE']: |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
246 template = open(self.CONFIG['TEMPLATE']).read() |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
247 pt = PageTemplate() |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
248 pt.write(template) |
|
3890
41948328f987
a couple more variables for tracker index templates per alex
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3884
diff
changeset
|
249 extra = { 'trackers': self.TRACKERS, |
|
41948328f987
a couple more variables for tracker index templates per alex
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3884
diff
changeset
|
250 'nothing' : None, |
|
41948328f987
a couple more variables for tracker index templates per alex
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3884
diff
changeset
|
251 'true' : 1, |
|
41948328f987
a couple more variables for tracker index templates per alex
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3884
diff
changeset
|
252 'false' : 0, |
|
41948328f987
a couple more variables for tracker index templates per alex
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3884
diff
changeset
|
253 } |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
254 w(pt.pt_render(extra_context=extra)) |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
255 else: |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
256 w(_('<html><head><title>Roundup trackers index</title></head>\n' |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
257 '<body><h1>Roundup trackers index</h1><ol>\n')) |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
258 keys.sort() |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
259 for tracker in keys: |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
260 w('<li><a href="%(tracker_url)s/index">%(tracker_name)s</a>\n'%{ |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
261 'tracker_url': urllib.quote(tracker), |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
262 'tracker_name': cgi.escape(tracker)}) |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
263 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
|
264 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
265 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
|
266 ''' 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
|
267 ''' |
|
1611
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
268 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
|
269 |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
270 # file-like object for the favicon.ico file information |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
271 favicon_fileobj = None |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
272 |
|
1611
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
273 if rest == '/favicon.ico': |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
274 # check to see if a custom favicon was specified, and set |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
275 # favicon_fileobj to the input file |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
276 if self.CONFIG is not None: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
277 favicon_filepath = os.path.abspath(self.CONFIG['FAVICON']) |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
278 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
279 if os.access(favicon_filepath, os.R_OK): |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
280 favicon_fileobj = open(favicon_filepath, 'rb') |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
281 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
282 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
283 if favicon_fileobj is None: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
284 favicon_fileobj = StringIO.StringIO(favico) |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
285 |
|
2176
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
286 self.send_response(200) |
|
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
287 self.send_header('Content-Type', 'image/x-icon') |
|
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
288 self.end_headers() |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
289 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
290 # this bufsize is completely arbitrary, I picked 4K because it sounded good. |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
291 # if someone knows of a better buffer size, feel free to plug it in. |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
292 bufsize = 4 * 1024 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
293 Processing = True |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
294 while Processing: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
295 data = favicon_fileobj.read(bufsize) |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
296 if len(data) > 0: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
297 self.wfile.write(data) |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
298 else: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
299 Processing = False |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
300 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
301 favicon_fileobj.close() |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
302 |
|
2176
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
303 return |
|
1611
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
304 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
305 i = rest.rfind('?') |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
306 if i >= 0: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
307 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
|
308 else: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
309 query = '' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
310 |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
311 # 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
|
312 if rest == '/': |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
313 self.index() |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
314 return |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
315 |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
316 # 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
|
317 l_path = rest.split('/') |
|
3919
c9cdc4eb8ca5
lowercase tracker name during roundup-server's cgi handling
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3891
diff
changeset
|
318 tracker_name = urllib.unquote(l_path[1]).lower() |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
319 |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
320 # handle missing trailing '/' |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
321 if len(l_path) == 2: |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
322 self.send_response(301) |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
323 # redirect - XXX https?? |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
324 protocol = 'http' |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
325 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
|
326 self.send_header('Location', url) |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
327 self.end_headers() |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
328 self.wfile.write('Moved Permanently') |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
329 return |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
330 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
331 # 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
|
332 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
|
333 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
|
334 else: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
335 rest = '/' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
336 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
337 # 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
|
338 env = {} |
|
1251
347657425a10
Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
339 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
|
340 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
|
341 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
|
342 if query: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
343 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
|
344 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
|
345 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
|
346 else: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
347 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
|
348 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
|
349 if length: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
350 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
|
351 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
|
352 if co: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
353 env['HTTP_COOKIE'] = ', '.join(co) |
|
1299
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1251
diff
changeset
|
354 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
|
355 env['SCRIPT_NAME'] = '' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
356 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
|
357 env['SERVER_PORT'] = str(self.server.server_port) |
|
4290
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4276
diff
changeset
|
358 try: |
|
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4276
diff
changeset
|
359 env['HTTP_HOST'] = self.headers ['host'] |
|
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4276
diff
changeset
|
360 except KeyError: |
|
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4276
diff
changeset
|
361 env['HTTP_HOST'] = '' |
|
2943
996e2bab8d8a
propagate CGI_SHOW_TIMING from os.environ to request environment
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2852
diff
changeset
|
362 if os.environ.has_key('CGI_SHOW_TIMING'): |
|
996e2bab8d8a
propagate CGI_SHOW_TIMING from os.environ to request environment
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2852
diff
changeset
|
363 env['CGI_SHOW_TIMING'] = os.environ['CGI_SHOW_TIMING'] |
|
3574
7bf2b4523b75
fix failure with browsers not sending "Accept-Language" header [SF#1435335]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3438
diff
changeset
|
364 env['HTTP_ACCEPT_LANGUAGE'] = self.headers.get('accept-language') |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
365 |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
366 # do the roundup thing |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
367 tracker = self.get_tracker(tracker_name) |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
368 tracker.Client(tracker, self, env).main() |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
369 |
|
1735
141d5a0869fa
roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents:
1632
diff
changeset
|
370 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
|
371 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
|
372 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
|
373 else: |
|
141d5a0869fa
roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents:
1632
diff
changeset
|
374 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
|
375 return socket.getfqdn(host) |
|
1632
eb4d04a9d647
added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents:
1611
diff
changeset
|
376 |
|
2021
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
377 def log_message(self, format, *args): |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
378 ''' Try to *safely* log to stderr. |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
379 ''' |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
380 try: |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
381 BaseHTTPServer.BaseHTTPRequestHandler.log_message(self, |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
382 format, *args) |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
383 except IOError: |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
384 # stderr is no longer viable |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
385 pass |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
386 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
387 def start_response(self, headers, response): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
388 self.send_response(response) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
389 for key, value in headers: |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
390 self.send_header(key, value) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
391 self.end_headers() |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
392 |
|
1871
db97431125a5
Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1868
diff
changeset
|
393 def error(): |
|
db97431125a5
Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1868
diff
changeset
|
394 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
|
395 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
|
396 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
397 def setgid(group): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
398 if group is None: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
399 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
400 if not hasattr(os, 'setgid'): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
401 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
402 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
403 # if root, setgid to the running user |
|
3279
6e7462bbafde
fix setgid typo [SF#1171346]
Richard Jones <richard@users.sourceforge.net>
parents:
3277
diff
changeset
|
404 if os.getuid(): |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
405 print _('WARNING: ignoring "-g" argument, not root') |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
406 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
407 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
408 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
409 import grp |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
410 except ImportError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
411 raise ValueError, _("Can't change groups - no grp module") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
412 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
413 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
414 gid = int(group) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
415 except ValueError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
416 gid = grp.getgrnam(group)[2] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
417 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
418 grp.getgrgid(gid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
419 except KeyError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
420 raise ValueError,_("Group %(group)s doesn't exist")%locals() |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
421 os.setgid(gid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
422 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
423 def setuid(user): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
424 if not hasattr(os, 'getuid'): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
425 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
426 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
427 # People can remove this check if they're really determined |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
428 if user is None: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
429 if os.getuid(): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
430 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
431 raise ValueError, _("Can't run as root!") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
432 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
433 if os.getuid(): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
434 print _('WARNING: ignoring "-u" argument, not root') |
|
3733
2addec69757a
fix: setuid called when run by non-root
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3609
diff
changeset
|
435 return |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
436 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
437 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
438 import pwd |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
439 except ImportError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
440 raise ValueError, _("Can't change users - no pwd module") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
441 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
442 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
443 uid = int(user) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
444 except ValueError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
445 uid = pwd.getpwnam(user)[2] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
446 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
447 pwd.getpwuid(uid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
448 except KeyError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
449 raise ValueError, _("User %(user)s doesn't exist")%locals() |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
450 os.setuid(uid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
451 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
452 class TrackerHomeOption(configuration.FilePathOption): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
453 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
454 # Tracker homes do not need any description strings |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
455 def format(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
456 return "%(name)s = %(value)s\n" % { |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
457 "name": self.setting, |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
458 "value": self.value2str(self._value), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
459 } |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
460 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
461 class ServerConfig(configuration.Config): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
462 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
463 SETTINGS = ( |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
464 ("main", ( |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
465 (configuration.Option, "host", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
466 "Host name of the Roundup web server instance.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
467 "If empty, listen on all network interfaces."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
468 (configuration.IntegerNumberOption, "port", DEFAULT_PORT, |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
469 "Port to listen on."), |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
470 (configuration.NullableFilePathOption, "favicon", "favicon.ico", |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
471 "Path to favicon.ico image file." |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
472 " If unset, built-in favicon.ico is used."), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
473 (configuration.NullableOption, "user", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
474 "User ID as which the server will answer requests.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
475 "In order to use this option, " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
476 "the server must be run initially as root.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
477 "Availability: Unix."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
478 (configuration.NullableOption, "group", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
479 "Group ID as which the server will answer requests.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
480 "In order to use this option, " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
481 "the server must be run initially as root.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
482 "Availability: Unix."), |
|
3787
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
483 (configuration.BooleanOption, "nodaemon", "no", |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
484 "don't fork (this overrides the pidfile mechanism)'"), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
485 (configuration.BooleanOption, "log_hostnames", "no", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
486 "Log client machine names instead of IP addresses " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
487 "(much slower)"), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
488 (configuration.NullableFilePathOption, "pidfile", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
489 "File to which the server records " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
490 "the process id of the daemon.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
491 "If this option is not set, " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
492 "the server will run in foreground\n"), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
493 (configuration.NullableFilePathOption, "logfile", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
494 "Log file path. If unset, log to stderr."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
495 (configuration.Option, "multiprocess", DEFAULT_MULTIPROCESS, |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
496 "Set processing of each request in separate subprocess.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
497 "Allowed values: %s." % ", ".join(MULTIPROCESS_TYPES)), |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
498 (configuration.NullableFilePathOption, "template", "", |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
499 "Tracker index template. If unset, built-in will be used."), |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
500 (configuration.BooleanOption, "ssl", "no", |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
501 "Enable SSL support (requires pyopenssl)"), |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
502 (configuration.NullableFilePathOption, "pem", "", |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
503 "PEM file used for SSL. A temporary self-signed certificate\n" |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
504 "will be used if left blank."), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
505 )), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
506 ("trackers", (), "Roundup trackers to serve.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
507 "Each option in this section defines single Roundup tracker.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
508 "Option name identifies the tracker and will appear in the URL.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
509 "Option value is tracker home directory path.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
510 "The path may be either absolute or relative\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
511 "to the directory containig this config file."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
512 ) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
513 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
514 # options recognized by config |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
515 OPTIONS = { |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
516 "host": "n:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
517 "port": "p:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
518 "group": "g:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
519 "user": "u:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
520 "logfile": "l:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
521 "pidfile": "d:", |
|
3784
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
522 "nodaemon": "D", |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
523 "log_hostnames": "N", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
524 "multiprocess": "t:", |
|
3884
1165f2204542
Ooops...not sure where those tabs came from. Making them spaces.
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3883
diff
changeset
|
525 "template": "i:", |
|
1165f2204542
Ooops...not sure where those tabs came from. Making them spaces.
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3883
diff
changeset
|
526 "ssl": "s", |
|
1165f2204542
Ooops...not sure where those tabs came from. Making them spaces.
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3883
diff
changeset
|
527 "pem": "e:", |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
528 } |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
529 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
530 def __init__(self, config_file=None): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
531 configuration.Config.__init__(self, config_file, self.SETTINGS) |
|
3022
9523de67ecad
merge from maint-0-8
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2943
diff
changeset
|
532 self.sections.append("trackers") |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
533 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
534 def _adjust_options(self, config): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
535 """Add options for tracker homes""" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
536 # return early if there are no tracker definitions. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
537 # trackers must be specified on the command line. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
538 if not config.has_section("trackers"): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
539 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
540 # config defaults appear in all sections. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
541 # filter them out. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
542 defaults = config.defaults().keys() |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
543 for name in config.options("trackers"): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
544 if name not in defaults: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
545 self.add_option(TrackerHomeOption(self, "trackers", name)) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
546 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
547 def getopt(self, args, short_options="", long_options=(), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
548 config_load_options=("C", "config"), **options |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
549 ): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
550 options.update(self.OPTIONS) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
551 return configuration.Config.getopt(self, args, |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
552 short_options, long_options, config_load_options, **options) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
553 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
554 def _get_name(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
555 return "Roundup server" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
556 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
557 def trackers(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
558 """Return tracker definitions as a list of (name, home) pairs""" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
559 trackers = [] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
560 for option in self._get_section_options("trackers"): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
561 trackers.append((option, os.path.abspath( |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
562 self["TRACKERS_" + option.upper()]))) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
563 return trackers |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
564 |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
565 def set_logging(self): |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
566 """Initialise logging to the configured file, if any.""" |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
567 # appending, unbuffered |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
568 sys.stdout = sys.stderr = open(self["LOGFILE"], 'a', 0) |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
569 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
570 def get_server(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
571 """Return HTTP server object to run""" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
572 # we don't want the cgi module interpreting the command-line args ;) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
573 sys.argv = sys.argv[:1] |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
574 |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
575 # preload all trackers unless we are in "debug" mode |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
576 tracker_homes = self.trackers() |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
577 if self["MULTIPROCESS"] == "debug": |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
578 trackers = None |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
579 else: |
|
2852
37e6ebd5ba29
when preloading trackers (not running in 'debug' mode)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2848
diff
changeset
|
580 trackers = dict([(name, roundup.instance.open(home, optimize=1)) |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
581 for (name, home) in tracker_homes]) |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
582 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
583 # build customized request handler class |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
584 class RequestHandler(RoundupRequestHandler): |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
585 LOG_IPADDRESS = not self["LOG_HOSTNAMES"] |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
586 TRACKER_HOMES = dict(tracker_homes) |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
587 TRACKERS = trackers |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
588 DEBUG_MODE = self["MULTIPROCESS"] == "debug" |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
589 CONFIG = self |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
590 |
|
4276
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
591 def setup(self): |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
592 if self.CONFIG["SSL"]: |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
593 # perform initial ssl handshake. This will set |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
594 # internal state correctly so that later closing SSL |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
595 # socket works (with SSL end-handshake started) |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
596 self.request.do_handshake() |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
597 RoundupRequestHandler.setup(self) |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
598 |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
599 def finish(self): |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
600 RoundupRequestHandler.finish(self) |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
601 if self.CONFIG["SSL"]: |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
602 self.request.shutdown() |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
603 self.request.close() |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
604 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
605 if self["SSL"]: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
606 base_server = SecureHTTPServer |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
607 else: |
|
4273
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
608 # time out after a minute if we can |
|
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
609 # This sets the socket to non-blocking. SSL needs a blocking |
|
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
610 # socket, so we do this only for non-SSL connections. |
|
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
611 if hasattr(socket, 'setdefaulttimeout'): |
|
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
612 socket.setdefaulttimeout(60) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
613 base_server = BaseHTTPServer.HTTPServer |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
614 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
615 # obtain request server class |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
616 if self["MULTIPROCESS"] not in MULTIPROCESS_TYPES: |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
617 print _("Multiprocess mode \"%s\" is not available, " |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
618 "switching to single-process") % self["MULTIPROCESS"] |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
619 self["MULTIPROCESS"] = "none" |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
620 server_class = base_server |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
621 elif self["MULTIPROCESS"] == "fork": |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
622 class ForkingServer(SocketServer.ForkingMixIn, |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
623 base_server): |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
624 pass |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
625 server_class = ForkingServer |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
626 elif self["MULTIPROCESS"] == "thread": |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
627 class ThreadingServer(SocketServer.ThreadingMixIn, |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
628 base_server): |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
629 pass |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
630 server_class = ThreadingServer |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
631 else: |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
632 server_class = base_server |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
633 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
634 # obtain server before changing user id - allows to |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
635 # use port < 1024 if started as root |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
636 try: |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
637 args = ((self["HOST"], self["PORT"]), RequestHandler) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
638 kwargs = {} |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
639 if self["SSL"]: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
640 kwargs['ssl_pem'] = self["PEM"] |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
641 httpd = server_class(*args, **kwargs) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
642 except socket.error, e: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
643 if e[0] == errno.EADDRINUSE: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
644 raise socket.error, \ |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
645 _("Unable to bind to port %s, port already in use.") \ |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
646 % self["PORT"] |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
647 raise |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
648 # change user and/or group |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
649 setgid(self["GROUP"]) |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
650 setuid(self["USER"]) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
651 # return the server |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
652 return httpd |
|
2230
ca2664e095be
disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents:
2200
diff
changeset
|
653 |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
654 try: |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
655 import win32serviceutil |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
656 except: |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
657 RoundupService = None |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
658 else: |
|
2230
ca2664e095be
disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents:
2200
diff
changeset
|
659 |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
660 # allow the win32 |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
661 import win32service |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
662 |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
663 class SvcShutdown(Exception): |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
664 pass |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
665 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
666 class RoundupService(win32serviceutil.ServiceFramework): |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
667 |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
668 _svc_name_ = "roundup" |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
669 _svc_display_name_ = "Roundup Bug Tracker" |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
670 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
671 running = 0 |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
672 server = None |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
673 |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
674 def SvcDoRun(self): |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
675 import servicemanager |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
676 self.ReportServiceStatus(win32service.SERVICE_START_PENDING) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
677 config = ServerConfig() |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
678 (optlist, args) = config.getopt(sys.argv[1:]) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
679 if not config["LOGFILE"]: |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
680 servicemanager.LogMsg(servicemanager.EVENTLOG_ERROR_TYPE, |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
681 servicemanager.PYS_SERVICE_STOPPED, |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
682 (self._svc_display_name_, "\r\nMissing logfile option")) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
683 self.ReportServiceStatus(win32service.SERVICE_STOPPED) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
684 return |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
685 config.set_logging() |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
686 self.server = config.get_server() |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
687 self.running = 1 |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
688 self.ReportServiceStatus(win32service.SERVICE_RUNNING) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
689 servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
690 servicemanager.PYS_SERVICE_STARTED, (self._svc_display_name_, |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
691 " at %s:%s" % (config["HOST"], config["PORT"]))) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
692 while self.running: |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
693 self.server.handle_request() |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
694 servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
695 servicemanager.PYS_SERVICE_STOPPED, |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
696 (self._svc_display_name_, "")) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
697 self.ReportServiceStatus(win32service.SERVICE_STOPPED) |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
698 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
699 def SvcStop(self): |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
700 self.running = 0 |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
701 # make dummy connection to self to terminate blocking accept() |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
702 addr = self.server.socket.getsockname() |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
703 if addr[0] == "0.0.0.0": |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
704 addr = ("127.0.0.1", addr[1]) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
705 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
706 sock.connect(addr) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
707 sock.close() |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
708 self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
709 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
710 def usage(message=''): |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
711 if RoundupService: |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
712 os_part = \ |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
713 ""''' -c <Command> Windows Service options. |
|
2521
8822780fa519
mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2483
diff
changeset
|
714 If you want to run the server as a Windows Service, you |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
715 must use configuration file to specify tracker homes. |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
716 Logfile option is required to run Roundup Tracker service. |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
717 Typing "roundup-server -c help" shows Windows Services |
|
2521
8822780fa519
mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2483
diff
changeset
|
718 specifics.''' |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
719 else: |
|
2521
8822780fa519
mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2483
diff
changeset
|
720 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
|
721 -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
|
722 -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
|
723 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
|
724 specified if -d is used.''' |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
725 if message: |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
726 message += '\n' |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
727 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
|
728 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
729 Options: |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
730 -v print the Roundup version number and exit |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
731 -h print this text and exit |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
732 -S create or update configuration file and exit |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
733 -C <fname> use configuration file <fname> |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
734 -n <name> set the host name of the Roundup web server instance |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
735 -p <port> set the port to listen on (default: %(port)s) |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
736 -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
|
737 -N log client machine names instead of IP addresses (much slower) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
738 -i <fname> set tracker index template |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
739 -s enable SSL |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
740 -e <fname> PEM file containing SSL key and certificate |
|
2843
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
741 -t <mode> multiprocess mode (default: %(mp_def)s). |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
742 Allowed values: %(mp_types)s. |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
743 %(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
|
744 |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
745 Long options: |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
746 --version print the Roundup version number and exit |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
747 --help print this text and exit |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
748 --save-config create or update configuration file and exit |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
749 --config <fname> use configuration file <fname> |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
750 All settings of the [main] section of the configuration file |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
751 also may be specified in form --<name>=<value> |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
752 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
753 Examples: |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
754 |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
755 roundup-server -S -C /opt/roundup/etc/roundup-server.ini \\ |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
756 -n localhost -p 8917 -l /var/log/roundup.log \\ |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
757 support=/var/spool/roundup-trackers/support |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
758 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
759 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
|
760 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
761 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
|
762 |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
763 roundup-server -d /var/run/roundup.pid -l /var/log/roundup.log \\ |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
764 support=/var/spool/roundup-trackers/support |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
765 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
766 Configuration file format: |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
767 Roundup Server configuration file has common .ini file format. |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
768 Configuration file created with 'roundup-server -S' contains |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
769 detailed explanations for each option. Please see that file |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
770 for option descriptions. |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
771 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
772 How to use "name=tracker home": |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
773 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
|
774 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
|
775 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
|
776 "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
|
777 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
|
778 any url-unsafe characters like spaces, as these confuse IE. |
|
2843
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
779 ''') % { |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
780 "message": message, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
781 "os_part": os_part, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
782 "port": DEFAULT_PORT, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
783 "mp_def": DEFAULT_MULTIPROCESS, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
784 "mp_types": ", ".join(MULTIPROCESS_TYPES), |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
785 } |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
786 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
787 |
|
3784
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
788 def writepidfile(pidfile): |
|
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
789 ''' Write a pidfile (only). Do not daemonize. ''' |
|
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
790 pid = os.getpid() |
|
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
791 if pid: |
|
3787
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
792 pidfile = open(pidfile, 'w') |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
793 pidfile.write(str(pid)) |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
794 pidfile.close() |
|
3784
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
795 |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
796 def daemonize(pidfile): |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
797 ''' Turn this process into a daemon. |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
798 - 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
|
799 - make our parent PID 1 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
800 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
801 Write our new PID to the pidfile. |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
802 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
803 From A.M. Kuuchling (possibly originally Greg Ward) with |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
804 modification from Oren Tirosh, and finally a small mod from me. |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
805 ''' |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
806 # Fork once |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
807 if os.fork() != 0: |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
808 os._exit(0) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
809 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
810 # Create new session |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
811 os.setsid() |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
812 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
813 # Second fork to force PPID=1 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
814 pid = os.fork() |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
815 if pid: |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
816 pidfile = open(pidfile, 'w') |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
817 pidfile.write(str(pid)) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
818 pidfile.close() |
|
2186
3f89c8ffe4f1
version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents:
2181
diff
changeset
|
819 os._exit(0) |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
820 |
|
2186
3f89c8ffe4f1
version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents:
2181
diff
changeset
|
821 os.chdir("/") |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
822 |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
823 # close off std(in|out|err), redirect to devnull so the file |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
824 # descriptors can't be used again |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
825 devnull = os.open('/dev/null', 0) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
826 os.dup2(devnull, 0) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
827 os.dup2(devnull, 1) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
828 os.dup2(devnull, 2) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
829 |
|
2637
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
830 undefined = [] |
|
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
831 def run(port=undefined, success_message=None): |
|
1249
6c24a86a12ae
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
832 ''' 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
|
833 ''' |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
834 config = ServerConfig() |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
835 # additional options |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
836 short_options = "hvS" |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
837 if RoundupService: |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
838 short_options += 'c' |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
839 try: |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
840 (optlist, args) = config.getopt(sys.argv[1:], |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
841 short_options, ("help", "version", "save-config",)) |
|
2773
6fb4b692c133
oops. forgot to reenable ConfigurationError handling, disabled for debugging.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2772
diff
changeset
|
842 except (getopt.GetoptError, configuration.ConfigurationError), e: |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
843 usage(str(e)) |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
844 return |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
845 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
846 # 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
|
847 if ("-c", "") in optlist: |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
848 # acquire command line options recognized by service |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
849 short_options = "cC:" |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
850 long_options = ["config"] |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
851 for (long_name, short_name) in config.OPTIONS.items(): |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
852 short_options += short_name |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
853 long_name = long_name.lower().replace("_", "-") |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
854 if short_name[-1] == ":": |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
855 long_name += "=" |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
856 long_options.append(long_name) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
857 optlist = getopt.getopt(sys.argv[1:], short_options, long_options)[0] |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
858 svc_args = [] |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
859 for (opt, arg) in optlist: |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
860 if opt in ("-C", "-l"): |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
861 # make sure file name is absolute |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
862 svc_args.extend((opt, os.path.abspath(arg))) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
863 elif opt in ("--config", "--logfile"): |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
864 # ditto, for long options |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
865 svc_args.append("=".join(opt, os.path.abspath(arg))) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
866 elif opt != "-c": |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
867 svc_args.extend(opt) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
868 RoundupService._exe_args_ = " ".join(svc_args) |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
869 # pass the control to serviceutil |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
870 win32serviceutil.HandleCommandLine(RoundupService, |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
871 argv=sys.argv[:1] + args) |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
872 return |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
873 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
874 # add tracker names from command line. |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
875 # 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
|
876 if args: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
877 for arg in args: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
878 try: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
879 name, home = arg.split('=') |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
880 except ValueError: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
881 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
|
882 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
|
883 config["TRACKERS_" + name.upper()] = home |
|
2308
e21c3a447a62
translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2287
diff
changeset
|
884 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
885 # handle remaining options |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
886 if optlist: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
887 for (opt, arg) in optlist: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
888 if opt in ("-h", "--help"): |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
889 usage() |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
890 elif opt in ("-v", "--version"): |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
891 print '%s (python %s)' % (roundup_version, |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
892 sys.version.split()[0]) |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
893 elif opt in ("-S", "--save-config"): |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
894 config.save() |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
895 print _("Configuration saved to %s") % config.filepath |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
896 # 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
|
897 return |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
898 |
|
2774
22c381f3f448
respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2773
diff
changeset
|
899 # 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
|
900 if port is not undefined: |
|
22c381f3f448
respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2773
diff
changeset
|
901 config.PORT = port |
|
22c381f3f448
respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2773
diff
changeset
|
902 |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
903 if config["LOGFILE"]: |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
904 config["LOGFILE"] = os.path.abspath(config["LOGFILE"]) |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
905 # switch logging from stderr/stdout to logfile |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
906 config.set_logging() |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
907 if config["PIDFILE"]: |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
908 config["PIDFILE"] = os.path.abspath(config["PIDFILE"]) |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
909 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
910 # fork the server from our parent if a pidfile is specified |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
911 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
|
912 if not hasattr(os, 'fork'): |
|
2308
e21c3a447a62
translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2287
diff
changeset
|
913 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
|
914 " 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
|
915 sys.exit(0) |
|
1632
eb4d04a9d647
added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents:
1611
diff
changeset
|
916 else: |
|
3787
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
917 if config['NODAEMON']: |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
918 writepidfile(config["PIDFILE"]) |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
919 else: |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
920 daemonize(config["PIDFILE"]) |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
921 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
922 # create the server |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
923 httpd = config.get_server() |
|
1047
1890c611de08
add daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
992
diff
changeset
|
924 |
|
1868
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
925 if success_message: |
|
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
926 print success_message |
|
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
927 else: |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
928 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
|
929 % config |
|
1868
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
930 |
|
1311
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
931 try: |
|
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
932 httpd.serve_forever() |
|
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
933 except KeyboardInterrupt: |
|
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
934 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
|
935 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
936 if __name__ == '__main__': |
|
593
2256f81293c1
Conversion to generated script stubs
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
592
diff
changeset
|
937 run() |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
938 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
939 # vim: sts=4 sw=4 et si |
