Mercurial > p > roundup > code
annotate roundup/scripts/roundup_server.py @ 5667:5ad31de777a8
Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
header parser can handle empty string or missing value but can't
handle None.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 23 Mar 2019 00:02:03 -0400 |
| parents | b3618882f906 |
| children | 320a1692a473 |
| 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 """ |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
20 from __future__ import print_function |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1953
diff
changeset
|
21 __docformat__ = 'restructuredtext' |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
22 |
|
4766
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
23 |
|
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
24 # --- patch sys.path to make sure 'import roundup' finds correct version |
|
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
25 import sys |
|
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
26 import os.path as osp |
|
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
27 |
|
5323
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
28 import logging |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
29 |
|
4766
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
30 thisdir = osp.dirname(osp.abspath(__file__)) |
|
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
31 rootdir = osp.dirname(osp.dirname(thisdir)) |
|
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
32 if (osp.exists(thisdir + '/__init__.py') and |
|
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
33 osp.exists(rootdir + '/roundup/__init__.py')): |
|
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
34 # the script is located inside roundup source code |
|
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
35 sys.path.insert(0, rootdir) |
|
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
36 # --/ |
|
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
37 |
|
86ef4ab17dc5
Run scripts (roundup_admin.py, ...) directly from checkout.
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
38 |
|
5418
55f09ca366c4
Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5410
diff
changeset
|
39 import errno, cgi, getopt, io, os, socket, sys, traceback, time |
|
5410
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
40 |
|
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
41 try: |
|
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
42 # Python 3. |
|
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
43 import socketserver |
|
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
44 except ImportError: |
|
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
45 # Python 2. |
|
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
46 import SocketServer as socketserver |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
47 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
48 try: |
|
5405
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
49 # Python 2. |
|
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
50 reload |
|
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
51 except NameError: |
|
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
52 # Python 3. |
|
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
53 from imp import reload |
|
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
54 |
|
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
55 try: |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
56 from OpenSSL import SSL |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
57 except ImportError: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
58 SSL = None |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
59 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
60 # python version check |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
61 from roundup import configuration, version_check |
|
2186
3f89c8ffe4f1
version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents:
2181
diff
changeset
|
62 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
|
63 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
64 # Roundup modules of use here |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5405
diff
changeset
|
65 from roundup.anypy import http_, urllib_ |
|
5431
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
66 from roundup.anypy.strings import s2b, StringIO |
|
992
6003d6fa02a5
new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents:
661
diff
changeset
|
67 from roundup.cgi import cgitb, client |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
68 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
|
69 import roundup.instance |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
70 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
|
71 |
|
2181
740102dfad1d
favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents:
2180
diff
changeset
|
72 # "default" favicon.ico |
|
740102dfad1d
favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents:
2180
diff
changeset
|
73 # 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
|
74 import zlib, base64 |
|
5426
5dc27422f3ec
Python 3 preparation: use byte-string argument to base64.decodestring for favicon.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5418
diff
changeset
|
75 favico = zlib.decompress(base64.decodestring(b''' |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
76 eJztjr1PmlEUh59XgVoshdYPWorFIhaRFq0t9pNq37b60lYSTRzcTFw6GAfj5gDYaF0dTB0MxMSE |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
77 gQQd3FzKJiEC0UCIUUN1M41pV2JCXySg/0ITn5tfzvmdc+85FwT56HSc81UJjXJsk1UsNcsSqCk1 |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
78 BS64lK+vr7OyssLJyQl2ux2j0cjU1BQajYZIJEIwGMRms+H3+zEYDExOTjI2Nsbm5iZWqxWv18vW |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
79 1hZDQ0Ok02kmJiY4Ojpienqa3d1dxsfHUSqVeDwe5ufnyeVyrK6u4nK5ODs7Y3FxEYfDwdzcHCaT |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
80 icPDQ5LJJIIgMDIyQj6fZ39/n+3tbdbW1pAkiYWFBWZmZtjb2yMejzM8PEwgEMDn85HNZonFYqjV |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
81 asLhMMvLy2QyGfR6PaOjowwODmKxWDg+PkalUhEKhSgUCiwtLWE2m9nZ2UGhULCxscHp6SmpVIpo |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
82 NMrs7CwHBwdotVoSiQRXXPG/IzY7RHtt922xjFRb01H1XhKfPBNbi/7my7rrLXJ88eppvxwEfV3f |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
83 NY3Y6exofVdsV3+2wnPFDdPjB83n7xuVpcFvygPbGwxF31LZIKrQDfR2Xvh7lmrX654L/7bvlnng |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
84 bn3Zuj8M9Hepux6VfZtW1yA6K7cfGqVu8TL325u+fHTb71QKbk+7TZQ+lTc6RcnpqW8qmVQBoj/g |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
85 23eo0sr/NIGvB37K+lOWXMvJ+uWFeKGU/03Cb7n3D4M3wxI= |
|
1611
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
86 '''.strip())) |
|
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
87 |
|
2637
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
88 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
|
89 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
90 # 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
|
91 # 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
|
92 # 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
|
93 # "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
|
94 MULTIPROCESS_TYPES = ["debug", "none"] |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
95 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
96 import thread |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
97 except ImportError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
98 pass |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
99 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
100 MULTIPROCESS_TYPES.append("thread") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
101 if hasattr(os, 'fork'): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
102 MULTIPROCESS_TYPES.append("fork") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
103 DEFAULT_MULTIPROCESS = MULTIPROCESS_TYPES[-1] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
104 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
105 def auto_ssl(): |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
106 print(_('WARNING: generating temporary SSL certificate')) |
|
5356
91954be46a66
A real fix for the problem where:
John Rouillard <rouilj@ieee.org>
parents:
5350
diff
changeset
|
107 import OpenSSL, random |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
108 pkey = OpenSSL.crypto.PKey() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
109 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
|
110 cert = OpenSSL.crypto.X509() |
|
5386
fc97f1f4a7e3
Python 3 preparation: use sys.maxsize instead of sys.maxint.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
111 cert.set_serial_number(random.randint(0, sys.maxsize)) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
112 cert.gmtime_adj_notBefore(0) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
113 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
|
114 cert.get_subject().CN = '*' |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
115 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
|
116 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
|
117 cert.get_issuer().O = 'Self-Signed' |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
118 cert.set_pubkey(pkey) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
119 cert.sign(pkey, 'md5') |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
120 ctx = SSL.Context(SSL.SSLv23_METHOD) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
121 ctx.use_privatekey(pkey) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
122 ctx.use_certificate(cert) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
123 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
124 return ctx |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
125 |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5405
diff
changeset
|
126 class SecureHTTPServer(http_.server.HTTPServer): |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
127 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
|
128 assert SSL, "pyopenssl not installed" |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5405
diff
changeset
|
129 http_.server.HTTPServer.__init__(self, server_address, HandlerClass) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
130 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
|
131 if ssl_pem: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
132 ctx = SSL.Context(SSL.SSLv23_METHOD) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
133 ctx.use_privatekey_file(ssl_pem) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
134 ctx.use_certificate_file(ssl_pem) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
135 else: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
136 ctx = auto_ssl() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
137 self.ssl_context = ctx |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
138 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
|
139 self.server_bind() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
140 self.server_activate() |
|
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 def get_request(self): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
143 (conn, info) = self.socket.accept() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
144 if self.ssl_context: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
145 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
146 class RetryingFile(object): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
147 """ 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
|
148 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
|
149 the try looping here """ |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
150 def __init__(self, fileobj): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
151 self.__fileobj = fileobj |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
152 |
|
3891
410cae6ab7dd
need to pass arguments to wrapper readline for SSL servers
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3890
diff
changeset
|
153 def readline(self, *args): |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
154 """ SSL.Connection can return WantRead """ |
|
4273
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
155 while True: |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
156 try: |
|
4273
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
157 return self.__fileobj.readline(*args) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
158 except SSL.WantReadError: |
|
4276
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
159 time.sleep(.1) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
160 |
|
4258
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
161 def read(self, *args): |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
162 """ SSL.Connection can return WantRead """ |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
163 while True: |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
164 try: |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
165 return self.__fileobj.read(*args) |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
166 except SSL.WantReadError: |
|
4276
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
167 time.sleep(.1) |
|
4258
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
168 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
169 def __getattr__(self, attrib): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
170 return getattr(self.__fileobj, attrib) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
171 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
172 class ConnFixer(object): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
173 """ 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
|
174 which the HTTP handlers require """ |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
175 def __init__(self, conn): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
176 self.__conn = conn |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
177 def makefile(self, mode, bufsize): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
178 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
|
179 return RetryingFile(fo) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
180 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
181 def __getattr__(self, attrib): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
182 return getattr(self.__conn, attrib) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
183 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
184 conn = ConnFixer(conn) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
185 return (conn, info) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
186 |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5405
diff
changeset
|
187 class RoundupRequestHandler(http_.server.BaseHTTPRequestHandler): |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
188 TRACKER_HOMES = {} |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
189 TRACKERS = None |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
190 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
|
191 DEBUG_MODE = False |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
192 CONFIG = None |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
193 |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
194 def get_tracker(self, name): |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
195 """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
|
196 # 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
|
197 # 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
|
198 # |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
199 # 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
|
200 if self.TRACKERS: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
201 try: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
202 return self.TRACKERS[name] |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
203 except KeyError: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
204 pass |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
205 # 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
|
206 try: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
207 tracker_home = self.TRACKER_HOMES[name] |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
208 except KeyError: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
209 raise client.NotFound |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
210 # open the instance |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
211 tracker = roundup.instance.open(tracker_home) |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
212 # 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
|
213 if self.TRACKERS: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
214 self.TRACKERS[name] = tracker |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
215 return tracker |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
216 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
217 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
|
218 """ 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
|
219 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
|
220 """ |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
221 try: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
222 self.inner_run_cgi() |
|
992
6003d6fa02a5
new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents:
661
diff
changeset
|
223 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
|
224 self.send_error(404, self.path) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5201
diff
changeset
|
225 except client.Unauthorised as message: |
|
2273
c77483d2cda4
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2230
diff
changeset
|
226 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
|
227 except: |
|
1939
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
228 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
|
229 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
|
230 self.log_error('timeout') |
|
1939
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
231 else: |
|
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
232 # 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
|
233 # any effect... |
|
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
234 self.send_response(400) |
|
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
235 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
|
236 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
|
237 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
|
238 try: |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
239 reload(cgitb) |
|
5431
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
240 self.wfile.write(s2b(cgitb.breaker())) |
|
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
241 self.wfile.write(s2b(cgitb.html())) |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
242 except: |
|
5418
55f09ca366c4
Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5410
diff
changeset
|
243 s = StringIO() |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
244 traceback.print_exc(None, s) |
|
5431
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
245 self.wfile.write(b"<pre>") |
|
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
246 self.wfile.write(s2b(cgi.escape(s.getvalue()))) |
|
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
247 self.wfile.write(b"</pre>\n") |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
248 else: |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
249 # user feedback |
|
5431
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
250 self.wfile.write(s2b(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
|
251 ts = time.ctime() |
|
5431
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
252 self.wfile.write(s2b('''<p>%s: An error occurred. Please check |
|
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
253 the server log for more information.</p>'''%ts)) |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
254 # out to the logfile |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
255 print('EXCEPTION AT', ts) |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
256 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
|
257 |
|
5608
5df309febe49
Path to support OPTIONS verb when using rest interface via
John Rouillard <rouilj@ieee.org>
parents:
5559
diff
changeset
|
258 do_GET = do_POST = do_HEAD = do_PUT = do_DELETE = do_PATCH = do_OPTIONS = run_cgi |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
259 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
260 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
|
261 ''' 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
|
262 ''' |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5386
diff
changeset
|
263 keys = list(self.TRACKER_HOMES.keys()) |
|
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
|
264 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
|
265 self.send_response(302) |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5398
diff
changeset
|
266 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
|
267 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
|
268 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
|
269 self.send_response(200) |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
270 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
271 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
|
272 self.end_headers() |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
273 w = self.wfile.write |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
274 |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
275 if self.CONFIG and self.CONFIG['TEMPLATE']: |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
276 template = open(self.CONFIG['TEMPLATE']).read() |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
277 pt = PageTemplate() |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
278 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
|
279 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
|
280 'nothing' : None, |
|
41948328f987
a couple more variables for tracker index templates per alex
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3884
diff
changeset
|
281 'true' : 1, |
|
41948328f987
a couple more variables for tracker index templates per alex
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3884
diff
changeset
|
282 'false' : 0, |
|
41948328f987
a couple more variables for tracker index templates per alex
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3884
diff
changeset
|
283 } |
|
5431
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
284 w(s2b(pt.pt_render(extra_context=extra))) |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
285 else: |
|
5431
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
286 w(s2b(_('<html><head><title>Roundup trackers index</title></head>\n' |
|
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
287 '<body><h1>Roundup trackers index</h1><ol>\n'))) |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
288 keys.sort() |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
289 for tracker in keys: |
|
5431
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
290 w(s2b('<li><a href="%(tracker_url)s/index">%(tracker_name)s</a>\n'%{ |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5398
diff
changeset
|
291 'tracker_url': urllib_.quote(tracker), |
|
5431
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
292 'tracker_name': cgi.escape(tracker)})) |
|
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
293 w(b'</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
|
294 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
295 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
|
296 ''' 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
|
297 ''' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
298 |
|
4912
a0a7a6ca1586
roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents:
4911
diff
changeset
|
299 # self.path is /some/path?with&all=stuff |
|
a0a7a6ca1586
roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents:
4911
diff
changeset
|
300 if self.path == '/favicon.ico': |
|
4911
0997d4d8e76c
roundup_server: Code cleanup - move favicon object into its section
anatoly techtonik <techtonik@gmail.com>
parents:
4769
diff
changeset
|
301 # file-like object for the favicon.ico file information |
|
0997d4d8e76c
roundup_server: Code cleanup - move favicon object into its section
anatoly techtonik <techtonik@gmail.com>
parents:
4769
diff
changeset
|
302 favicon_fileobj = None |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
303 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
304 # 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
|
305 # favicon_fileobj to the input file |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
306 if self.CONFIG is not None: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
307 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
|
308 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
309 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
|
310 favicon_fileobj = open(favicon_filepath, 'rb') |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
311 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
312 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
313 if favicon_fileobj is None: |
|
5418
55f09ca366c4
Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5410
diff
changeset
|
314 favicon_fileobj = io.BytesIO(favico) |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
315 |
|
2176
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
316 self.send_response(200) |
|
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
317 self.send_header('Content-Type', 'image/x-icon') |
|
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
318 self.end_headers() |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
319 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
320 # 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
|
321 # 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
|
322 bufsize = 4 * 1024 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
323 Processing = True |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
324 while Processing: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
325 data = favicon_fileobj.read(bufsize) |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
326 if len(data) > 0: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
327 self.wfile.write(data) |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
328 else: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
329 Processing = False |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
330 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
331 favicon_fileobj.close() |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
332 |
|
2176
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
333 return |
|
1611
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
334 |
|
4912
a0a7a6ca1586
roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents:
4911
diff
changeset
|
335 i = self.path.rfind('?') |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
336 if i >= 0: |
|
4912
a0a7a6ca1586
roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents:
4911
diff
changeset
|
337 # rest starts with /, query is without ? |
|
a0a7a6ca1586
roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents:
4911
diff
changeset
|
338 rest, query = self.path[:i], self.path[i+1:] |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
339 else: |
|
4912
a0a7a6ca1586
roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents:
4911
diff
changeset
|
340 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
|
341 query = '' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
342 |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
343 # 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
|
344 if rest == '/': |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
345 self.index() |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
346 return |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
347 |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
348 # 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
|
349 l_path = rest.split('/') |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5398
diff
changeset
|
350 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
|
351 |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
352 # handle missing trailing '/' |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
353 if len(l_path) == 2: |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
354 self.send_response(301) |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
355 # redirect - XXX https?? |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
356 protocol = 'http' |
|
4913
8f6cfe824c9f
roundup_server: Fix endless redirect on http://localhost:8917/demo?anything
anatoly techtonik <techtonik@gmail.com>
parents:
4912
diff
changeset
|
357 url = '%s://%s%s/'%(protocol, self.headers['host'], rest) |
|
8f6cfe824c9f
roundup_server: Fix endless redirect on http://localhost:8917/demo?anything
anatoly techtonik <techtonik@gmail.com>
parents:
4912
diff
changeset
|
358 if query: |
|
8f6cfe824c9f
roundup_server: Fix endless redirect on http://localhost:8917/demo?anything
anatoly techtonik <techtonik@gmail.com>
parents:
4912
diff
changeset
|
359 url += '?' + query |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
360 self.send_header('Location', url) |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
361 self.end_headers() |
|
5431
4c724ad7b849
Python 3 preparation: write bytes to socket in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5426
diff
changeset
|
362 self.wfile.write(b'Moved Permanently') |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
363 return |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
364 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
365 # 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
|
366 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
|
367 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
|
368 else: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
369 rest = '/' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
370 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
371 # 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
|
372 env = {} |
|
1251
347657425a10
Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
373 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
|
374 env['REQUEST_METHOD'] = self.command |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5398
diff
changeset
|
375 env['PATH_INFO'] = urllib_.unquote(rest) |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
376 if query: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
377 env['QUERY_STRING'] = query |
|
5432
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
378 if hasattr(self.headers, 'get_content_type'): |
|
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
379 # Python 3. We need the raw header contents. |
|
5667
5ad31de777a8
Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents:
5624
diff
changeset
|
380 content_type = self.headers.get('content-type') |
|
5432
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
381 elif self.headers.typeheader is None: |
|
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
382 # Python 2. |
|
5667
5ad31de777a8
Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents:
5624
diff
changeset
|
383 content_type = self.headers.type |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
384 else: |
|
5432
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
385 # Python 2. |
|
5667
5ad31de777a8
Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents:
5624
diff
changeset
|
386 content_type = self.headers.typeheader |
|
5ad31de777a8
Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents:
5624
diff
changeset
|
387 if content_type: |
|
5ad31de777a8
Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents:
5624
diff
changeset
|
388 env['CONTENT_TYPE'] = content_type |
|
5432
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
389 length = self.headers.get('content-length') |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
390 if length: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
391 env['CONTENT_LENGTH'] = length |
|
5432
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
392 if hasattr(self.headers, 'get_all'): |
|
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
393 # Python 3. |
|
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
394 ch = self.headers.get_all('cookie', []) |
|
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
395 else: |
|
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
396 # Python 2. |
|
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
397 ch = self.headers.getheaders('cookie') |
|
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
398 co = list(filter(None, ch)) |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
399 if co: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
400 env['HTTP_COOKIE'] = ', '.join(co) |
|
5432
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
401 env['HTTP_AUTHORIZATION'] = self.headers.get('authorization') |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
402 env['SCRIPT_NAME'] = '' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
403 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
|
404 env['SERVER_PORT'] = str(self.server.server_port) |
|
4290
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4276
diff
changeset
|
405 try: |
|
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4276
diff
changeset
|
406 env['HTTP_HOST'] = self.headers ['host'] |
|
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4276
diff
changeset
|
407 except KeyError: |
|
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4276
diff
changeset
|
408 env['HTTP_HOST'] = '' |
|
5303
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
409 # https://tools.ietf.org/html/draft-ietf-appsawg-http-forwarded-10 |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
410 # headers. |
|
5432
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
411 xfh = self.headers.get('X-Forwarded-Host', None) |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
412 if xfh: |
|
5303
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
413 # If behind a proxy, this is the hostname supplied |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
414 # via the Host header to the proxy. Used by core code. |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
415 # Controlled by the CSRF settings. |
|
5624
b3618882f906
issue2551023: Fix CSRF headers for use with wsgi and cgi. The
John Rouillard <rouilj@ieee.org>
parents:
5608
diff
changeset
|
416 env['HTTP_X_FORWARDED_HOST'] = xfh |
|
5432
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
417 xff = self.headers.get('X-Forwarded-For', None) |
|
5303
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
418 if xff: |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
419 # xff is a list of ip addresses for original client/proxies: |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
420 # X-Forwarded-For: clientIP, proxy1IP, proxy2IP |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
421 # May not be trustworthy. Do not use in core without |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
422 # config option to control its use. |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
423 # Made available for extensions if the user trusts it. |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
424 # E.g. you may wish to disable recaptcha validation extension |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
425 # if the ip of the client matches 172.16.0.0. |
|
5624
b3618882f906
issue2551023: Fix CSRF headers for use with wsgi and cgi. The
John Rouillard <rouilj@ieee.org>
parents:
5608
diff
changeset
|
426 env['HTTP_X_FORWARDED_FOR'] = xff |
|
5432
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
427 xfp = self.headers.get('X-Forwarded-Proto', None) |
|
5303
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
428 if xfp: |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
429 # xfp is the protocol (http/https) seen by proxies in the |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
430 # path of the request. I am not sure if there is only |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
431 # one value or multiple, but I suspect multiple |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
432 # is possible so: |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
433 # X-Forwarded-Proto: https, http |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
434 # is expected if the path is: |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
435 # client -> proxy1 -> proxy2 -> back end server |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
436 # an proxy1 is an SSL terminator. |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
437 # May not be trustworthy. Do not use in core without |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
438 # config option to control its use. |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
439 # Made available for extensions if the user trusts it. |
|
5624
b3618882f906
issue2551023: Fix CSRF headers for use with wsgi and cgi. The
John Rouillard <rouilj@ieee.org>
parents:
5608
diff
changeset
|
440 env['HTTP_X_FORWARDED_PROTO'] = xfp |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
441 if 'CGI_SHOW_TIMING' in os.environ: |
|
2943
996e2bab8d8a
propagate CGI_SHOW_TIMING from os.environ to request environment
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2852
diff
changeset
|
442 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
|
443 env['HTTP_ACCEPT_LANGUAGE'] = self.headers.get('accept-language') |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
444 referer = self.headers.get('Referer') |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
445 if referer: |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
446 env['HTTP_REFERER'] = referer |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
447 origin = self.headers.get('Origin') |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
448 if origin: |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
449 env['HTTP_ORIGIN'] = origin |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
450 xrw = self.headers.get('x-requested-with') |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
451 if xrw: |
|
5624
b3618882f906
issue2551023: Fix CSRF headers for use with wsgi and cgi. The
John Rouillard <rouilj@ieee.org>
parents:
5608
diff
changeset
|
452 env['HTTP_X_REQUESTED_WITH'] = xrw |
|
5432
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
453 range = self.headers.get('range') |
|
4475
207499c0a3ed
Range support in roundup-server so large files can be served...
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents:
4344
diff
changeset
|
454 if range: |
|
207499c0a3ed
Range support in roundup-server so large files can be served...
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents:
4344
diff
changeset
|
455 env['HTTP_RANGE'] = range |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
456 |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
457 # do the roundup thing |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
458 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
|
459 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
|
460 |
|
1735
141d5a0869fa
roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents:
1632
diff
changeset
|
461 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
|
462 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
|
463 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
|
464 else: |
|
141d5a0869fa
roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents:
1632
diff
changeset
|
465 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
|
466 return socket.getfqdn(host) |
|
1632
eb4d04a9d647
added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents:
1611
diff
changeset
|
467 |
|
2021
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
468 def log_message(self, format, *args): |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
469 ''' Try to *safely* log to stderr. |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
470 ''' |
|
5323
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
471 if self.CONFIG['LOGHTTPVIALOGGER']: |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
472 logger = logging.getLogger('roundup.http') |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
473 |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
474 logger.info("%s - - [%s] %s" % |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
475 (self.client_address[0], |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
476 self.log_date_time_string(), |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
477 format%args)) |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
478 else: |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
479 try: |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5405
diff
changeset
|
480 http_.server.BaseHTTPRequestHandler.log_message(self, |
|
5323
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
481 format, *args) |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
482 except IOError: |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
483 # stderr is no longer viable |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
484 pass |
|
2021
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
485 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
486 def start_response(self, headers, response): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
487 self.send_response(response) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
488 for key, value in headers: |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
489 self.send_header(key, value) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
490 self.end_headers() |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
491 |
|
1871
db97431125a5
Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1868
diff
changeset
|
492 def error(): |
|
db97431125a5
Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1868
diff
changeset
|
493 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
|
494 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
|
495 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
496 def setgid(group): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
497 if group is None: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
498 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
499 if not hasattr(os, 'setgid'): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
500 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
501 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
502 # if root, setgid to the running user |
|
3279
6e7462bbafde
fix setgid typo [SF#1171346]
Richard Jones <richard@users.sourceforge.net>
parents:
3277
diff
changeset
|
503 if os.getuid(): |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
504 print(_('WARNING: ignoring "-g" argument, not root')) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
505 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
506 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
507 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
508 import grp |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
509 except ImportError: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
510 raise ValueError(_("Can't change groups - no grp module")) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
511 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
512 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
513 gid = int(group) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
514 except ValueError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
515 gid = grp.getgrnam(group)[2] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
516 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
517 grp.getgrgid(gid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
518 except KeyError: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
519 raise ValueError(_("Group %(group)s doesn't exist")%locals()) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
520 os.setgid(gid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
521 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
522 def setuid(user): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
523 if not hasattr(os, 'getuid'): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
524 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
525 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
526 # People can remove this check if they're really determined |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
527 if user is None: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
528 if os.getuid(): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
529 return |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
530 raise ValueError(_("Can't run as root!")) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
531 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
532 if os.getuid(): |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
533 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
|
534 return |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
535 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
536 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
537 import pwd |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
538 except ImportError: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
539 raise ValueError(_("Can't change users - no pwd module")) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
540 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
541 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
542 uid = int(user) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
543 except ValueError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
544 uid = pwd.getpwnam(user)[2] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
545 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
546 pwd.getpwuid(uid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
547 except KeyError: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
548 raise ValueError(_("User %(user)s doesn't exist")%locals()) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
549 os.setuid(uid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
550 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
551 class TrackerHomeOption(configuration.FilePathOption): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
552 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
553 # Tracker homes do not need any description strings |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
554 def format(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
555 return "%(name)s = %(value)s\n" % { |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
556 "name": self.setting, |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
557 "value": self.value2str(self._value), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
558 } |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
559 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
560 class ServerConfig(configuration.Config): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
561 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
562 SETTINGS = ( |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
563 ("main", ( |
|
4489
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
564 (configuration.Option, "host", "localhost", |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
565 "Host name of the Roundup web server instance.\n" |
|
4489
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
566 "If left unconfigured (no 'host' setting) the default\n" |
|
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
567 "will be used.\n" |
|
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
568 "If empty, listen on all network interfaces.\n" |
|
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
569 "If you want to explicitly listen on all\n" |
|
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
570 "network interfaces, the address 0.0.0.0 is a more\n" |
|
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
571 "explicit way to achieve this, the use of an empty\n" |
|
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
572 "string for this purpose is deprecated and will go away\n" |
|
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
573 "in a future release."), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
574 (configuration.IntegerNumberOption, "port", DEFAULT_PORT, |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
575 "Port to listen on."), |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
576 (configuration.NullableFilePathOption, "favicon", "favicon.ico", |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
577 "Path to favicon.ico image file." |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
578 " If unset, built-in favicon.ico is used."), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
579 (configuration.NullableOption, "user", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
580 "User ID as which the server will answer requests.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
581 "In order to use this option, " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
582 "the server must be run initially as root.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
583 "Availability: Unix."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
584 (configuration.NullableOption, "group", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
585 "Group ID as which the server will answer requests.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
586 "In order to use this option, " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
587 "the server must be run initially as root.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
588 "Availability: Unix."), |
|
3787
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
589 (configuration.BooleanOption, "nodaemon", "no", |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
590 "don't fork (this overrides the pidfile mechanism)'"), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
591 (configuration.BooleanOption, "log_hostnames", "no", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
592 "Log client machine names instead of IP addresses " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
593 "(much slower)"), |
|
5323
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
594 (configuration.BooleanOption, "loghttpvialogger", "no", |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
595 "Have http(s) request logging done via python logger module.\n" |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
596 "If set to yes the python logging module is used with " |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
597 "qualname\n'roundup.http'. Otherwise logging is done to " |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
598 "stderr or the file\nspecified using the -l/logfile option."), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
599 (configuration.NullableFilePathOption, "pidfile", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
600 "File to which the server records " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
601 "the process id of the daemon.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
602 "If this option is not set, " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
603 "the server will run in foreground\n"), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
604 (configuration.NullableFilePathOption, "logfile", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
605 "Log file path. If unset, log to stderr."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
606 (configuration.Option, "multiprocess", DEFAULT_MULTIPROCESS, |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
607 "Set processing of each request in separate subprocess.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
608 "Allowed values: %s." % ", ".join(MULTIPROCESS_TYPES)), |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
609 (configuration.NullableFilePathOption, "template", "", |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
610 "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
|
611 (configuration.BooleanOption, "ssl", "no", |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
612 "Enable SSL support (requires pyopenssl)"), |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
613 (configuration.NullableFilePathOption, "pem", "", |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
614 "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
|
615 "will be used if left blank."), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
616 )), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
617 ("trackers", (), "Roundup trackers to serve.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
618 "Each option in this section defines single Roundup tracker.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
619 "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
|
620 "Option value is tracker home directory path.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
621 "The path may be either absolute or relative\n" |
|
5102
96dc9f07340a
issue2161722: oudated docs
John Rouillard <rouilj@ieee.org>
parents:
4913
diff
changeset
|
622 "to the directory containing this config file."), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
623 ) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
624 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
625 # options recognized by config |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
626 OPTIONS = { |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
627 "host": "n:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
628 "port": "p:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
629 "group": "g:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
630 "user": "u:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
631 "logfile": "l:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
632 "pidfile": "d:", |
|
3784
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
633 "nodaemon": "D", |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
634 "log_hostnames": "N", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
635 "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
|
636 "template": "i:", |
|
5323
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
637 "loghttpvialogger": 'L', |
|
3884
1165f2204542
Ooops...not sure where those tabs came from. Making them spaces.
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3883
diff
changeset
|
638 "ssl": "s", |
|
1165f2204542
Ooops...not sure where those tabs came from. Making them spaces.
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3883
diff
changeset
|
639 "pem": "e:", |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
640 } |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
641 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
642 def __init__(self, config_file=None): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
643 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
|
644 self.sections.append("trackers") |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
645 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
646 def _adjust_options(self, config): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
647 """Add options for tracker homes""" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
648 # return early if there are no tracker definitions. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
649 # trackers must be specified on the command line. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
650 if not config.has_section("trackers"): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
651 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
652 # config defaults appear in all sections. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
653 # filter them out. |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5386
diff
changeset
|
654 defaults = list(config.defaults().keys()) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
655 for name in config.options("trackers"): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
656 if name not in defaults: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
657 self.add_option(TrackerHomeOption(self, "trackers", name)) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
658 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
659 def getopt(self, args, short_options="", long_options=(), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
660 config_load_options=("C", "config"), **options |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
661 ): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
662 options.update(self.OPTIONS) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
663 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
|
664 short_options, long_options, config_load_options, **options) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
665 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
666 def _get_name(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
667 return "Roundup server" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
668 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
669 def trackers(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
670 """Return tracker definitions as a list of (name, home) pairs""" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
671 trackers = [] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
672 for option in self._get_section_options("trackers"): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
673 trackers.append((option, os.path.abspath( |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
674 self["TRACKERS_" + option.upper()]))) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
675 return trackers |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
676 |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
677 def set_logging(self): |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
678 """Initialise logging to the configured file, if any.""" |
|
5523
fb9abb842f36
Fix roundup-server logging for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5432
diff
changeset
|
679 # appending, line-buffered (Python 3 does not allow unbuffered |
|
fb9abb842f36
Fix roundup-server logging for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5432
diff
changeset
|
680 # text files) |
|
fb9abb842f36
Fix roundup-server logging for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5432
diff
changeset
|
681 sys.stdout = sys.stderr = open(self["LOGFILE"], 'a', 1) |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
682 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
683 def get_server(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
684 """Return HTTP server object to run""" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
685 # 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
|
686 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
|
687 |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
688 # 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
|
689 tracker_homes = self.trackers() |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
690 if self["MULTIPROCESS"] == "debug": |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
691 trackers = None |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
692 else: |
|
2852
37e6ebd5ba29
when preloading trackers (not running in 'debug' mode)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2848
diff
changeset
|
693 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
|
694 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
|
695 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
696 # build customized request handler class |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
697 class RequestHandler(RoundupRequestHandler): |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
698 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
|
699 TRACKER_HOMES = dict(tracker_homes) |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
700 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
|
701 DEBUG_MODE = self["MULTIPROCESS"] == "debug" |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
702 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
|
703 |
|
4276
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
704 def setup(self): |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
705 if self.CONFIG["SSL"]: |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
706 # 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
|
707 # 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
|
708 # 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
|
709 self.request.do_handshake() |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
710 RoundupRequestHandler.setup(self) |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
711 |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
712 def finish(self): |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
713 RoundupRequestHandler.finish(self) |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
714 if self.CONFIG["SSL"]: |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
715 self.request.shutdown() |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
716 self.request.close() |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
717 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
718 if self["SSL"]: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
719 base_server = SecureHTTPServer |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
720 else: |
|
4273
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
721 # time out after a minute if we can |
|
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
722 # 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
|
723 # socket, so we do this only for non-SSL connections. |
|
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
724 if hasattr(socket, 'setdefaulttimeout'): |
|
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
725 socket.setdefaulttimeout(60) |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5405
diff
changeset
|
726 base_server = http_.server.HTTPServer |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
727 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
728 # obtain request server class |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
729 if self["MULTIPROCESS"] not in MULTIPROCESS_TYPES: |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
730 print(_("Multiprocess mode \"%s\" is not available, " |
|
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
731 "switching to single-process") % self["MULTIPROCESS"]) |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
732 self["MULTIPROCESS"] = "none" |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
733 server_class = base_server |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
734 elif self["MULTIPROCESS"] == "fork": |
|
5410
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
735 class ForkingServer(socketserver.ForkingMixIn, |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
736 base_server): |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
737 pass |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
738 server_class = ForkingServer |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
739 elif self["MULTIPROCESS"] == "thread": |
|
5410
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
740 class ThreadingServer(socketserver.ThreadingMixIn, |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
741 base_server): |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
742 pass |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
743 server_class = ThreadingServer |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
744 else: |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
745 server_class = base_server |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
746 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
747 # obtain server before changing user id - allows to |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
748 # use port < 1024 if started as root |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
749 try: |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
750 args = ((self["HOST"], self["PORT"]), RequestHandler) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
751 kwargs = {} |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
752 if self["SSL"]: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
753 kwargs['ssl_pem'] = self["PEM"] |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
754 httpd = server_class(*args, **kwargs) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5201
diff
changeset
|
755 except socket.error as e: |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
756 if e[0] == errno.EADDRINUSE: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
757 raise socket.error(_("Unable to bind to port %s, port already in use.") \ |
|
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
758 % self["PORT"]) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
759 raise |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
760 # change user and/or group |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
761 setgid(self["GROUP"]) |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
762 setuid(self["USER"]) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
763 # return the server |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
764 return httpd |
|
2230
ca2664e095be
disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents:
2200
diff
changeset
|
765 |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
766 try: |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
767 import win32serviceutil |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
768 except: |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
769 RoundupService = None |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
770 else: |
|
2230
ca2664e095be
disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents:
2200
diff
changeset
|
771 |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
772 # allow the win32 |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
773 import win32service |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
774 |
|
5266
e9158c0a6eba
Python 2 and 3 support. Convert Exception to BaseException scripts.
John Rouillard <rouilj@ieee.org>
parents:
5248
diff
changeset
|
775 class SvcShutdown(BaseException): |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
776 pass |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
777 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
778 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
|
779 |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
780 _svc_name_ = "roundup" |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
781 _svc_display_name_ = "Roundup Bug Tracker" |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
782 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
783 running = 0 |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
784 server = None |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
785 |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
786 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
|
787 import servicemanager |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
788 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
|
789 config = ServerConfig() |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
790 (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
|
791 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
|
792 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
|
793 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
|
794 (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
|
795 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
|
796 return |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
797 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
|
798 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
|
799 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
|
800 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
|
801 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
|
802 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
|
803 " 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
|
804 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
|
805 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
|
806 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
|
807 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
|
808 (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
|
809 self.ReportServiceStatus(win32service.SERVICE_STOPPED) |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
810 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
811 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
|
812 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
|
813 # 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
|
814 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
|
815 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
|
816 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
|
817 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
|
818 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
|
819 sock.close() |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
820 self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
821 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
822 def usage(message=''): |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
823 if RoundupService: |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
824 os_part = \ |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
825 ""''' -c <Command> Windows Service options. |
|
2521
8822780fa519
mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2483
diff
changeset
|
826 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
|
827 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
|
828 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
|
829 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
|
830 specifics.''' |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
831 else: |
|
2521
8822780fa519
mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2483
diff
changeset
|
832 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
|
833 -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
|
834 -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
|
835 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
|
836 specified if -d is used.''' |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
837 if message: |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
838 message += '\n' |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
839 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
|
840 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
841 Options: |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
842 -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
|
843 -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
|
844 -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
|
845 -C <fname> use configuration file <fname> |
|
4489
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
846 -n <name> set the host name of the Roundup web server instance, |
|
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
847 specifies on which network interfaces to listen for |
|
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
848 connections, defaults to localhost, use 0.0.0.0 to bind |
|
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
849 to all network interfaces |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
850 -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
|
851 -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
|
852 -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
|
853 -i <fname> set tracker index template |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
854 -s enable SSL |
|
5323
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
855 -L http request logging uses python logging (roundup.http) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
856 -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
|
857 -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
|
858 Allowed values: %(mp_types)s. |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
859 %(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
|
860 |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
861 Long options: |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
862 --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
|
863 --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
|
864 --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
|
865 --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
|
866 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
|
867 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
|
868 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
869 Examples: |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
870 |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
871 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
|
872 -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
|
873 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
|
874 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
875 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
|
876 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
877 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
|
878 |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
879 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
|
880 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
|
881 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
882 Configuration file format: |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
883 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
|
884 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
|
885 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
|
886 for option descriptions. |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
887 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
888 How to use "name=tracker home": |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
889 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
|
890 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
|
891 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
|
892 "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
|
893 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
|
894 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
|
895 ''') % { |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
896 "message": message, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
897 "os_part": os_part, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
898 "port": DEFAULT_PORT, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
899 "mp_def": DEFAULT_MULTIPROCESS, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
900 "mp_types": ", ".join(MULTIPROCESS_TYPES), |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
901 }) |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
902 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
903 |
|
3784
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
904 def writepidfile(pidfile): |
|
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
905 ''' 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
|
906 pid = os.getpid() |
|
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
907 if pid: |
|
3787
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
908 pidfile = open(pidfile, 'w') |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
909 pidfile.write(str(pid)) |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
910 pidfile.close() |
|
3784
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
911 |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
912 def daemonize(pidfile): |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
913 ''' Turn this process into a daemon. |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
914 - 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
|
915 - make our parent PID 1 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
916 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
917 Write our new PID to the pidfile. |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
918 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
919 From A.M. Kuuchling (possibly originally Greg Ward) with |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
920 modification from Oren Tirosh, and finally a small mod from me. |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
921 ''' |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
922 # Fork once |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
923 if os.fork() != 0: |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
924 os._exit(0) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
925 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
926 # Create new session |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
927 os.setsid() |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
928 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
929 # Second fork to force PPID=1 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
930 pid = os.fork() |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
931 if pid: |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
932 pidfile = open(pidfile, 'w') |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
933 pidfile.write(str(pid)) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
934 pidfile.close() |
|
2186
3f89c8ffe4f1
version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents:
2181
diff
changeset
|
935 os._exit(0) |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
936 |
|
2186
3f89c8ffe4f1
version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents:
2181
diff
changeset
|
937 os.chdir("/") |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
938 |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
939 # 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
|
940 # descriptors can't be used again |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
941 devnull = os.open('/dev/null', 0) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
942 os.dup2(devnull, 0) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
943 os.dup2(devnull, 1) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
944 os.dup2(devnull, 2) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
945 |
|
2637
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
946 undefined = [] |
|
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
947 def run(port=undefined, success_message=None): |
|
1249
6c24a86a12ae
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
948 ''' 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
|
949 ''' |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
950 config = ServerConfig() |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
951 # additional options |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
952 short_options = "hvS" |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
953 if RoundupService: |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
954 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
|
955 try: |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
956 (optlist, args) = config.getopt(sys.argv[1:], |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
957 short_options, ("help", "version", "save-config",)) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5201
diff
changeset
|
958 except (getopt.GetoptError, configuration.ConfigurationError) as e: |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
959 usage(str(e)) |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
960 return |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
961 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
962 # 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
|
963 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
|
964 # 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
|
965 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
|
966 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
|
967 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
|
968 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
|
969 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
|
970 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
|
971 long_name += "=" |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
972 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
|
973 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
|
974 svc_args = [] |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
975 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
|
976 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
|
977 # 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
|
978 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
|
979 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
|
980 # 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
|
981 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
|
982 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
|
983 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
|
984 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
|
985 # pass the control to serviceutil |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
986 win32serviceutil.HandleCommandLine(RoundupService, |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
987 argv=sys.argv[:1] + args) |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
988 return |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
989 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
990 # add tracker names from command line. |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
991 # 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
|
992 if args: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
993 for arg in args: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
994 try: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
995 name, home = arg.split('=') |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
996 except ValueError: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
997 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
|
998 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
|
999 config["TRACKERS_" + name.upper()] = home |
|
2308
e21c3a447a62
translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2287
diff
changeset
|
1000 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1001 # handle remaining options |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1002 if optlist: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1003 for (opt, arg) in optlist: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1004 if opt in ("-h", "--help"): |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1005 usage() |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1006 elif opt in ("-v", "--version"): |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1007 print('%s (python %s)' % (roundup_version, |
|
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1008 sys.version.split()[0])) |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1009 elif opt in ("-S", "--save-config"): |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1010 config.save() |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1011 print(_("Configuration saved to %s") % config.filepath) |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1012 # 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
|
1013 return |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1014 |
|
2774
22c381f3f448
respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2773
diff
changeset
|
1015 # 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
|
1016 if port is not undefined: |
|
22c381f3f448
respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2773
diff
changeset
|
1017 config.PORT = port |
|
22c381f3f448
respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2773
diff
changeset
|
1018 |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1019 if config["LOGFILE"]: |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1020 config["LOGFILE"] = os.path.abspath(config["LOGFILE"]) |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1021 # switch logging from stderr/stdout to logfile |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1022 config.set_logging() |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1023 if config["PIDFILE"]: |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1024 config["PIDFILE"] = os.path.abspath(config["PIDFILE"]) |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1025 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
1026 # 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
|
1027 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
|
1028 if not hasattr(os, 'fork'): |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1029 print(_("Sorry, you can't run the server as a daemon" |
|
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1030 " 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
|
1031 sys.exit(0) |
|
1632
eb4d04a9d647
added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents:
1611
diff
changeset
|
1032 else: |
|
3787
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
1033 if config['NODAEMON']: |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
1034 writepidfile(config["PIDFILE"]) |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
1035 else: |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
1036 daemonize(config["PIDFILE"]) |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
1037 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
1038 # create the server |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
1039 httpd = config.get_server() |
|
1047
1890c611de08
add daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
992
diff
changeset
|
1040 |
|
1868
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
1041 if success_message: |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1042 print(success_message) |
|
1868
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
1043 else: |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1044 print(_('Roundup server started on %(HOST)s:%(PORT)s') |
|
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1045 % config) |
|
1868
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
1046 |
|
1311
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
1047 try: |
|
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
1048 httpd.serve_forever() |
|
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
1049 except KeyboardInterrupt: |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1050 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
|
1051 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
1052 if __name__ == '__main__': |
|
593
2256f81293c1
Conversion to generated script stubs
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
592
diff
changeset
|
1053 run() |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
1054 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
1055 # vim: sts=4 sw=4 et si |
