Mercurial > p > roundup > code
annotate roundup/scripts/roundup_server.py @ 8210:4ed886dc2558
fix(web): issue2551381 - roundup-server parses multiple '?" incorrectly.
Change 'rfind()' to 'find()' to locate the first unencoded/unescaped '?'
in a URL. End the path component of the url at that point.
This matches https://www.rfc-editor.org/rfc/rfc3986#section-3.4.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 15 Dec 2024 00:36:19 -0500 |
| parents | bf4a5bd5aa9f |
| children | 3a04ff6f1004 |
| 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 |
| 6972 | 23 import base64 # decode icon |
| 24 import errno | |
| 25 import getopt | |
| 26 import io | |
|
5323
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
27 import logging |
| 6972 | 28 import os |
|
8169
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
29 import re |
| 6972 | 30 import socket |
| 31 import sys # modify sys.path when running in source tree | |
| 32 import time | |
| 33 import traceback | |
| 34 import zlib # decompress icon | |
|
5410
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
35 |
|
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
36 try: |
|
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
37 # Python 3. |
|
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
38 import socketserver |
|
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
39 except ImportError: |
|
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
40 # Python 2. |
|
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
41 import SocketServer as socketserver |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
42 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
43 try: |
|
5405
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
44 # Python 2. |
|
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
45 reload |
|
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
46 except NameError: |
|
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
47 # Python 3. |
|
6322
ff6580ee3882
Remove import of reload from imp (deprecated module), use importlib
John Rouillard <rouilj@ieee.org>
parents:
6295
diff
changeset
|
48 from importlib import reload |
|
5405
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
49 |
|
56cc58d20add
Python 3 preparation: use imp.reload instead of reload as needed.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5403
diff
changeset
|
50 try: |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
51 from OpenSSL import SSL |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
52 except ImportError: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
53 SSL = None |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
54 |
| 6972 | 55 # --- patch sys.path to make sure 'import roundup' finds correct version |
| 56 import os.path as osp | |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5712
diff
changeset
|
57 |
| 6972 | 58 thisdir = osp.dirname(osp.abspath(__file__)) |
| 59 rootdir = osp.dirname(osp.dirname(thisdir)) | |
| 60 if (osp.exists(thisdir + '/__init__.py') and | |
| 61 osp.exists(rootdir + '/roundup/__init__.py')): | |
| 62 # the script is located inside roundup source code | |
| 63 sys.path.insert(0, rootdir) | |
| 64 # --/ | |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
65 |
| 6972 | 66 import roundup.instance # noqa: E402 |
| 67 | |
| 68 # python version_check raises exception if imported for wrong python version | |
| 69 from roundup import configuration, version_check # noqa: F401,E402 | |
| 70 from roundup import __version__ as roundup_version # noqa: E402 | |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
71 # Roundup modules of use here |
| 6972 | 72 from roundup.anypy import http_, urllib_ # noqa: E402 |
| 73 from roundup.anypy.html import html_escape # noqa: E402 | |
| 74 from roundup.anypy.strings import s2b, StringIO # noqa: E402 | |
| 75 from roundup.cgi import cgitb, client # noqa: E402 | |
| 76 from roundup.cgi.PageTemplates.PageTemplate import PageTemplate # noqa: E402 | |
| 77 from roundup.i18n import _ # noqa: E402 | |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
78 |
|
2181
740102dfad1d
favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents:
2180
diff
changeset
|
79 # "default" favicon.ico |
|
740102dfad1d
favicon generation stuff
Richard Jones <richard@users.sourceforge.net>
parents:
2180
diff
changeset
|
80 # generate by using "icotool" and tools/base64 |
|
6295
bc2b00afa980
Replace depricated base64.decodestring with base64.b64decode.
John Rouillard <rouilj@ieee.org>
parents:
6133
diff
changeset
|
81 favico = zlib.decompress(base64.b64decode(b''' |
|
2180
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
82 eJztjr1PmlEUh59XgVoshdYPWorFIhaRFq0t9pNq37b60lYSTRzcTFw6GAfj5gDYaF0dTB0MxMSE |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
83 gQQd3FzKJiEC0UCIUUN1M41pV2JCXySg/0ITn5tfzvmdc+85FwT56HSc81UJjXJsk1UsNcsSqCk1 |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
84 BS64lK+vr7OyssLJyQl2ux2j0cjU1BQajYZIJEIwGMRms+H3+zEYDExOTjI2Nsbm5iZWqxWv18vW |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
85 1hZDQ0Ok02kmJiY4Ojpienqa3d1dxsfHUSqVeDwe5ufnyeVyrK6u4nK5ODs7Y3FxEYfDwdzcHCaT |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
86 icPDQ5LJJIIgMDIyQj6fZ39/n+3tbdbW1pAkiYWFBWZmZtjb2yMejzM8PEwgEMDn85HNZonFYqjV |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
87 asLhMMvLy2QyGfR6PaOjowwODmKxWDg+PkalUhEKhSgUCiwtLWE2m9nZ2UGhULCxscHp6SmpVIpo |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
88 NMrs7CwHBwdotVoSiQRXXPG/IzY7RHtt922xjFRb01H1XhKfPBNbi/7my7rrLXJ88eppvxwEfV3f |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
89 NY3Y6exofVdsV3+2wnPFDdPjB83n7xuVpcFvygPbGwxF31LZIKrQDfR2Xvh7lmrX654L/7bvlnng |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
90 bn3Zuj8M9Hepux6VfZtW1yA6K7cfGqVu8TL325u+fHTb71QKbk+7TZQ+lTc6RcnpqW8qmVQBoj/g |
|
58b6d1747973
Web interface tweaks.
Richard Jones <richard@users.sourceforge.net>
parents:
2176
diff
changeset
|
91 23eo0sr/NIGvB37K+lOWXMvJ+uWFeKGU/03Cb7n3D4M3wxI= |
|
1611
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
92 '''.strip())) |
|
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
93 |
|
2637
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
94 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
|
95 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
96 # 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
|
97 # 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
|
98 # 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
|
99 # "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
|
100 MULTIPROCESS_TYPES = ["debug", "none"] |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
101 try: |
| 6972 | 102 import threading # noqa: F401 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
103 except ImportError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
104 pass |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
105 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
106 MULTIPROCESS_TYPES.append("thread") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
107 if hasattr(os, 'fork'): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
108 MULTIPROCESS_TYPES.append("fork") |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
109 DEFAULT_MULTIPROCESS = MULTIPROCESS_TYPES[-1] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
110 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
111 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
112 def auto_ssl(): |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
113 print(_('WARNING: generating temporary SSL certificate')) |
| 6972 | 114 import OpenSSL, random # noqa: E401 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
115 pkey = OpenSSL.crypto.PKey() |
|
6420
5d6b6e948e17
Upgrade SSL params for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6322
diff
changeset
|
116 pkey.generate_key(OpenSSL.crypto.TYPE_RSA, 2048) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
117 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
|
118 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
|
119 cert.gmtime_adj_notBefore(0) |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
120 cert.gmtime_adj_notAfter(60 * 60 * 24 * 365) # one year |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
121 cert.get_subject().CN = '*' |
| 6972 | 122 cert.get_subject().O = 'Roundup Dummy Certificate' # noqa: E741 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
123 cert.get_issuer().CN = 'Roundup Dummy Certificate Authority' |
| 6972 | 124 cert.get_issuer().O = 'Self-Signed' # noqa: E741 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
125 cert.set_pubkey(pkey) |
|
6420
5d6b6e948e17
Upgrade SSL params for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6322
diff
changeset
|
126 cert.sign(pkey, 'sha512') |
|
6502
7fb13dc67a41
roundup-server native SSL support only TLS 1.2.
John Rouillard <rouilj@ieee.org>
parents:
6436
diff
changeset
|
127 ctx = SSL.Context(OpenSSL.SSL.TLSv1_2_METHOD) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
128 ctx.use_privatekey(pkey) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
129 ctx.use_certificate(cert) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
130 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
131 return ctx |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
132 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
133 |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5405
diff
changeset
|
134 class SecureHTTPServer(http_.server.HTTPServer): |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
135 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
|
136 assert SSL, "pyopenssl not installed" |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5405
diff
changeset
|
137 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
|
138 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
|
139 if ssl_pem: |
|
6502
7fb13dc67a41
roundup-server native SSL support only TLS 1.2.
John Rouillard <rouilj@ieee.org>
parents:
6436
diff
changeset
|
140 ctx = SSL.Context(SSL.TLSv1_2_METHOD) |
|
8031
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
141 try: |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
142 ctx.use_privatekey_file(ssl_pem) |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
143 except SSL.Error: |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
144 print(_("Unable to find/use key from file: %(pemfile)s") % {"pemfile": ssl_pem}) |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
145 print(_("Does it have a private key surrounded by '-----BEGIN PRIVATE KEY-----' and\n '-----END PRIVATE KEY-----' markers?")) |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
146 exit() |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
147 try: |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
148 ctx.use_certificate_file(ssl_pem) |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
149 except SSL.Error: |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
150 print(_("Unable to find/use certificate from file: %(pemfile)s") % {"pemfile": ssl_pem}) |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
151 print(_("Does it have a certificate surrounded by '-----BEGIN CERTIFICATE-----' and\n '-----END CERTIFICATE-----' markers?")) |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
152 exit() |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
153 else: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
154 ctx = auto_ssl() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
155 self.ssl_context = ctx |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
156 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
|
157 self.server_bind() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
158 self.server_activate() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
159 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
160 def get_request(self): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
161 (conn, info) = self.socket.accept() |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
162 if self.ssl_context: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
163 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
164 class RetryingFile(object): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
165 """ 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
|
166 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
|
167 the try looping here """ |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
168 def __init__(self, fileobj): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
169 self.__fileobj = fileobj |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
170 |
|
3891
410cae6ab7dd
need to pass arguments to wrapper readline for SSL servers
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3890
diff
changeset
|
171 def readline(self, *args): |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
172 """ SSL.Connection can return WantRead """ |
|
4273
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
173 while True: |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
174 try: |
|
4273
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
175 return self.__fileobj.readline(*args) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
176 except SSL.WantReadError: |
|
4276
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
177 time.sleep(.1) |
|
6834
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
178 except SSL.ZeroReturnError: |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
179 # Raised here on every request. |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
180 # SSL connection has been closed. |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
181 # But maybe not the underlying socket. |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
182 # FIXME: Does this lead to a socket leak?? |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
183 # if so how to fix? |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
184 pass |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
185 |
|
4258
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
186 def read(self, *args): |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
187 """ SSL.Connection can return WantRead """ |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
188 while True: |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
189 try: |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
190 return self.__fileobj.read(*args) |
|
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
191 except SSL.WantReadError: |
|
4276
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
192 time.sleep(.1) |
|
6834
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
193 except SSL.ZeroReturnError: |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
194 # Put here to match readline() handling above. |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
195 # Even though this never was the source of the |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
196 # exception logged during use. |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
197 # SSL connection has been closed. |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
198 # But maybe not the underlying socket. |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
199 # FIXME: Does this lead to a socket leak?? |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
200 # if so how to fix? |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
201 pass |
|
4258
6432c9bfd385
Fix bug with SSL-connection and XMLRPC...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3919
diff
changeset
|
202 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
203 def __getattr__(self, attrib): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
204 return getattr(self.__fileobj, attrib) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
205 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
206 class ConnFixer(object): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
207 """ 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
|
208 which the HTTP handlers require """ |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
209 def __init__(self, conn): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
210 self.__conn = conn |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
211 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
212 def makefile(self, mode, bufsize): |
|
6834
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
213 fo = None |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
214 try: |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
215 # see below of url used for this |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
216 fo = socket.SocketIO(self.__conn, mode) |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
217 except AttributeError: |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
218 # python 2 in use |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
219 buffer = socket._fileobject(self.__conn, mode, bufsize) |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
220 |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
221 if fo: |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
222 # python3 set up buffering |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
223 # verify mode is rb and bufsize is -1 |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
224 # implement subset of socket::makefile |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
225 # https://bugs.launchpad.net/python-glanceclient/+bug/1812525 |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
226 if mode == 'rb' and bufsize == -1: |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
227 buffering = io.DEFAULT_BUFFER_SIZE |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
228 buffer = io.BufferedReader(fo, buffering) |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
229 else: |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
230 buffer = fo |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
231 |
|
5129fc03dc1f
issue2551137, 2551138 - roundup-server SSL issues.
John Rouillard <rouilj@ieee.org>
parents:
6743
diff
changeset
|
232 return RetryingFile(buffer) |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
233 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
234 def __getattr__(self, attrib): |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
235 return getattr(self.__conn, attrib) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
236 |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
237 conn = ConnFixer(conn) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
238 return (conn, info) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
239 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
240 |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5405
diff
changeset
|
241 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
|
242 TRACKER_HOMES = {} |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
243 TRACKERS = None |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
244 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
|
245 DEBUG_MODE = False |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
246 CONFIG = None |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
247 |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
248 def get_tracker(self, name): |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
249 """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
|
250 # 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
|
251 # 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
|
252 # |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
253 # 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
|
254 if self.TRACKERS: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
255 try: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
256 return self.TRACKERS[name] |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
257 except KeyError: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
258 pass |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
259 # 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
|
260 try: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
261 tracker_home = self.TRACKER_HOMES[name] |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
262 except KeyError: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
263 raise client.NotFound |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
264 # open the instance |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
265 tracker = roundup.instance.open(tracker_home) |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
266 # 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
|
267 if self.TRACKERS: |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
268 self.TRACKERS[name] = tracker |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
269 return tracker |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
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 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
|
272 """ 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
|
273 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
|
274 """ |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
275 try: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
276 self.inner_run_cgi() |
|
992
6003d6fa02a5
new CGI frontend support
Richard Jones <richard@users.sourceforge.net>
parents:
661
diff
changeset
|
277 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
|
278 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
|
279 except client.Unauthorised as message: |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
280 self.send_error(403, '%s (%s)' % (self.path, message)) |
| 6972 | 281 except Exception: |
|
1939
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
282 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
|
283 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
|
284 self.log_error('timeout') |
|
1939
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
285 else: |
|
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
286 self.send_response(400) |
|
1303c208419d
some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents:
1914
diff
changeset
|
287 self.send_header('Content-Type', 'text/html') |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
288 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
|
289 try: |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
290 reload(cgitb) |
|
7112
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
291 output = s2b(cgitb.breaker()) + s2b(cgitb.html()) |
| 6972 | 292 except Exception: |
|
5418
55f09ca366c4
Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5410
diff
changeset
|
293 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
|
294 traceback.print_exc(None, s) |
|
7112
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
295 output = b"<pre>%s</pre>" % s2b( |
|
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
296 html_escape(s.getvalue())) |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
297 else: |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
298 # user feedback |
|
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
299 ts = time.ctime() |
|
7112
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
300 output = ( |
|
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
301 s2b('''<body><p>%s: An error occurred. Please check |
|
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
302 the server log for more information.</p></body>''' % |
|
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
303 ts) |
|
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
304 ) |
|
3277
3084b07ec266
send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents:
3205
diff
changeset
|
305 # out to the logfile |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
306 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
|
307 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
|
308 |
|
7112
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
309 # complete output to user. |
|
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
310 self.send_header('Content-Length', len(output)) |
|
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
311 self.end_headers() |
|
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
312 self.wfile.write(output) |
|
c0d030bd472e
Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents:
6972
diff
changeset
|
313 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
314 do_GET = do_POST = do_HEAD = do_PUT = do_DELETE = \ |
| 6972 | 315 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
|
316 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
317 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
|
318 ''' 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
|
319 ''' |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5386
diff
changeset
|
320 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
|
321 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
|
322 self.send_response(302) |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5398
diff
changeset
|
323 self.send_header('Location', urllib_.quote(keys[0]) + '/index') |
|
8038
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
324 self.send_header('Content-Length', 0) |
|
3849
9d37a6779530
End headers when redirecting to tracker. Closes [SF#1706114].
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3787
diff
changeset
|
325 self.end_headers() |
|
8038
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
326 return |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
327 |
|
8038
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
328 self.send_response(200) |
|
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
329 self.send_header('Content-Type', 'text/html; charset=utf-8') |
|
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
330 output = [] |
|
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
331 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
332 w = self.wfile.write |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
333 |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
334 if self.CONFIG and self.CONFIG['TEMPLATE']: |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
335 template = open(self.CONFIG['TEMPLATE']).read() |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
336 pt = PageTemplate() |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
337 pt.write(template) |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
338 extra = {'trackers': self.TRACKERS, |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
339 'nothing': None, |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
340 'true': 1, |
| 6972 | 341 'false': 0} |
|
8038
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
342 output.append(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
|
343 else: |
|
8038
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
344 output.append(s2b(_( |
|
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
345 '<html><head><title>Roundup trackers index</title></head>\n' |
|
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
346 '<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
|
347 keys.sort() |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
348 for tracker in keys: |
|
8038
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
349 output.append(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
|
350 'tracker_url': urllib_.quote(tracker), |
|
5800
1a835db41674
Call cgi.escape only on python 2. Replace with html.escapeif it can be
John Rouillard <rouilj@ieee.org>
parents:
5712
diff
changeset
|
351 'tracker_name': html_escape(tracker)})) |
|
8038
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
352 output.append(b'</ol></body></html>\n') |
|
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
353 |
|
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
354 write_output = b"\n".join(output) |
|
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
355 self.send_header('Content-Length', len(write_output)) |
|
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
356 self.end_headers() |
|
5a122373641a
fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents:
8031
diff
changeset
|
357 w(write_output) |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
358 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
359 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
|
360 ''' 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
|
361 ''' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
362 |
|
4912
a0a7a6ca1586
roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents:
4911
diff
changeset
|
363 # 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
|
364 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
|
365 # 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
|
366 favicon_fileobj = None |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
367 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
368 # 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
|
369 # favicon_fileobj to the input file |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
370 if self.CONFIG is not None: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
371 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
|
372 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
373 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
|
374 favicon_fileobj = open(favicon_filepath, 'rb') |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
375 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
376 if favicon_fileobj is None: |
|
5418
55f09ca366c4
Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5410
diff
changeset
|
377 favicon_fileobj = io.BytesIO(favico) |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
378 |
|
2176
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
379 self.send_response(200) |
|
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
380 self.send_header('Content-Type', 'image/x-icon') |
|
6528
6cf050b43eaf
Send content-length for /favico.ico
John Rouillard <rouilj@ieee.org>
parents:
6514
diff
changeset
|
381 self.send_header('Content-Length', len(favico)) |
| 6529 | 382 self.send_header('Cache-Control', "public, max-age=86400") |
|
2176
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
383 self.end_headers() |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
384 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
385 # this bufsize is completely arbitrary, I picked 4K because |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
386 # it sounded good. if someone knows of a better buffer size, |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
387 # feel free to plug it in. |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
388 bufsize = 4 * 1024 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
389 Processing = True |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
390 while Processing: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
391 data = favicon_fileobj.read(bufsize) |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
392 if len(data) > 0: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
393 self.wfile.write(data) |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
394 else: |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
395 Processing = False |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
396 |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
397 favicon_fileobj.close() |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
398 |
|
2176
adaf2a92153c
added favicon
Richard Jones <richard@users.sourceforge.net>
parents:
2021
diff
changeset
|
399 return |
|
1611
db8545f10476
initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents:
1606
diff
changeset
|
400 |
|
8210
4ed886dc2558
fix(web): issue2551381 - roundup-server parses multiple '?" incorrectly.
John Rouillard <rouilj@ieee.org>
parents:
8170
diff
changeset
|
401 i = self.path.find('?') |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
402 if i >= 0: |
|
4912
a0a7a6ca1586
roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents:
4911
diff
changeset
|
403 # 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
|
404 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
|
405 else: |
|
4912
a0a7a6ca1586
roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents:
4911
diff
changeset
|
406 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
|
407 query = '' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
408 |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
409 # 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
|
410 if rest == '/': |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
411 self.index() |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
412 return |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
413 |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
414 # 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
|
415 l_path = rest.split('/') |
|
5402
88dbacd11cd1
Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5398
diff
changeset
|
416 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
|
417 |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
418 # handle missing trailing '/' |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
419 if len(l_path) == 2: |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
420 self.send_response(301) |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
421 # redirect - XXX https?? |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
422 protocol = 'http' |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
423 url = '%s://%s%s/' % (protocol, self.headers['host'], rest) |
|
4913
8f6cfe824c9f
roundup_server: Fix endless redirect on http://localhost:8917/demo?anything
anatoly techtonik <techtonik@gmail.com>
parents:
4912
diff
changeset
|
424 if query: |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
425 url += '?' + query |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
426 self.send_header('Location', url) |
|
8000
683af7c57ce5
fix: add content-length to 301 response
John Rouillard <rouilj@ieee.org>
parents:
7750
diff
changeset
|
427 self.send_header('Content-Length', 17) |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
428 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
|
429 self.wfile.write(b'Moved Permanently') |
|
1473
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
430 return |
|
21a80a8dfc6d
fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents:
1469
diff
changeset
|
431 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
432 # 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
|
433 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
|
434 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
|
435 else: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
436 rest = '/' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
437 |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
438 # 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
|
439 env = {} |
|
1251
347657425a10
Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents:
1249
diff
changeset
|
440 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
|
441 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
|
442 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
|
443 if query: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
444 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
|
445 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
|
446 # 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
|
447 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
|
448 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
|
449 # Python 2. |
|
5667
5ad31de777a8
Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents:
5624
diff
changeset
|
450 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
|
451 else: |
|
5432
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
452 # Python 2. |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
453 content_type = self.headers.typeheader |
|
5667
5ad31de777a8
Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents:
5624
diff
changeset
|
454 if content_type: |
|
5ad31de777a8
Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents:
5624
diff
changeset
|
455 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
|
456 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
|
457 if length: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
458 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
|
459 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
|
460 # Python 3. |
|
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
461 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
|
462 else: |
|
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
463 # Python 2. |
|
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
464 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
|
465 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
|
466 if co: |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
467 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
|
468 env['HTTP_AUTHORIZATION'] = self.headers.get('authorization') |
|
6436
1f2f7c0b8968
issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents:
6420
diff
changeset
|
469 # self.CONFIG['INCLUDE_HEADERS'] is a list. |
|
1f2f7c0b8968
issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents:
6420
diff
changeset
|
470 for h in self.CONFIG['INCLUDE_HEADERS']: |
|
1f2f7c0b8968
issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents:
6420
diff
changeset
|
471 env[h] = self.headers.get(h, None) |
|
1f2f7c0b8968
issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents:
6420
diff
changeset
|
472 # if header is MISSING |
|
1f2f7c0b8968
issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents:
6420
diff
changeset
|
473 if env[h] is None: |
|
7574
dba4b1b25528
flake8: add space between del and (
John Rouillard <rouilj@ieee.org>
parents:
7387
diff
changeset
|
474 del (env[h]) |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
475 env['SCRIPT_NAME'] = '' |
|
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
476 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
|
477 env['SERVER_PORT'] = str(self.server.server_port) |
|
4290
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4276
diff
changeset
|
478 try: |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
479 env['HTTP_HOST'] = self.headers['host'] |
|
4290
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4276
diff
changeset
|
480 except KeyError: |
|
236939e4137b
- small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4276
diff
changeset
|
481 env['HTTP_HOST'] = '' |
|
5303
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
482 # 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
|
483 # headers. |
|
5432
fec18298ae02
Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5431
diff
changeset
|
484 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
|
485 if xfh: |
|
5303
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
486 # 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
|
487 # 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
|
488 # 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
|
489 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
|
490 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
|
491 if xff: |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
492 # 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
|
493 # 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
|
494 # 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
|
495 # 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
|
496 # 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
|
497 # E.g. you may wish to disable recaptcha validation extension |
|
7701
5a35cfee727a
doc: use 'TEST-NET' IPv4 or IPv6 IP address ranges from RFC 6890
John Rouillard <rouilj@ieee.org>
parents:
7655
diff
changeset
|
498 # if the ip of the client matches 198.51.100.X |
|
5624
b3618882f906
issue2551023: Fix CSRF headers for use with wsgi and cgi. The
John Rouillard <rouilj@ieee.org>
parents:
5608
diff
changeset
|
499 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
|
500 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
|
501 if xfp: |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
502 # 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
|
503 # 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
|
504 # 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
|
505 # is possible so: |
|
5017c3422334
Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents:
5266
diff
changeset
|
506 # 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
|
507 # 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
|
508 # 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
|
509 # 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
|
510 # 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
|
511 # 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
|
512 # 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
|
513 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
|
514 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
|
515 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
|
516 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
|
517 referer = self.headers.get('Referer') |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
518 if referer: |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
519 env['HTTP_REFERER'] = referer |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
520 origin = self.headers.get('Origin') |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
521 if origin: |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
522 env['HTTP_ORIGIN'] = origin |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5102
diff
changeset
|
523 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
|
524 if xrw: |
|
5624
b3618882f906
issue2551023: Fix CSRF headers for use with wsgi and cgi. The
John Rouillard <rouilj@ieee.org>
parents:
5608
diff
changeset
|
525 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
|
526 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
|
527 if range: |
|
207499c0a3ed
Range support in roundup-server so large files can be served...
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents:
4344
diff
changeset
|
528 env['HTTP_RANGE'] = range |
|
6646
98a9df71e24c
If-Range doesn't work with roundup-server.
John Rouillard <rouilj@ieee.org>
parents:
6529
diff
changeset
|
529 if_range = self.headers.get('if-range') |
|
98a9df71e24c
If-Range doesn't work with roundup-server.
John Rouillard <rouilj@ieee.org>
parents:
6529
diff
changeset
|
530 if range: |
|
98a9df71e24c
If-Range doesn't work with roundup-server.
John Rouillard <rouilj@ieee.org>
parents:
6529
diff
changeset
|
531 env['HTTP_IF_RANGE'] = if_range |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
532 |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
533 # do the roundup thing |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
534 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
|
535 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
|
536 |
|
1735
141d5a0869fa
roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents:
1632
diff
changeset
|
537 def address_string(self): |
|
8169
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
538 """Get IP address of client from: |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
539 left most element of X-Forwarded-For header element if set |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
540 client ip address otherwise. |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
541 if returned string is from X-Forwarded-For append + to string. |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
542 """ |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
543 from_forwarded_header="" |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
544 forwarded_for = None |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
545 if 'X-FORWARDED-FOR' in self.headers: |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
546 forwarded_for = re.split(r'[,\s]', |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
547 self.headers['X-FORWARDED-FOR'], |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
548 maxsplit=1)[0] |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
549 from_forwarded_header="+" |
|
1735
141d5a0869fa
roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents:
1632
diff
changeset
|
550 if self.LOG_IPADDRESS: |
|
8169
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
551 return "%s%s" % (forwarded_for or self.client_address[0], |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
552 from_forwarded_header) |
|
1735
141d5a0869fa
roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents:
1632
diff
changeset
|
553 else: |
|
8169
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
554 if forwarded_for: |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
555 host = forwarded_for |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
556 else: |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
557 host, port = self.client_address |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
558 return "%s%s" % (socket.getfqdn(host), from_forwarded_header) |
|
1632
eb4d04a9d647
added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents:
1611
diff
changeset
|
559 |
|
2021
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
560 def log_message(self, format, *args): |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
561 ''' Try to *safely* log to stderr. |
|
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
562 ''' |
|
5323
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
563 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
|
564 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
|
565 |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
566 logger.info("%s - - [%s] %s" % |
|
8169
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
567 (self.address_string(), |
|
5323
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
568 self.log_date_time_string(), |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
569 format % args)) |
|
5323
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
570 else: |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
571 try: |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5405
diff
changeset
|
572 http_.server.BaseHTTPRequestHandler.log_message(self, |
| 6972 | 573 format, *args) |
|
5323
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
574 except IOError: |
|
762222535a0b
Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents:
5303
diff
changeset
|
575 # 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
|
576 pass |
|
2021
f4a16b186efc
proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents:
2020
diff
changeset
|
577 |
|
3736
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
578 def start_response(self, headers, response): |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
579 self.send_response(response) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
580 for key, value in headers: |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
581 self.send_header(key, value) |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
582 self.end_headers() |
|
a2d22d0de0bc
WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents:
3733
diff
changeset
|
583 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
584 |
|
1871
db97431125a5
Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1868
diff
changeset
|
585 def error(): |
|
db97431125a5
Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1868
diff
changeset
|
586 exc_type, exc_value = sys.exc_info()[:2] |
|
7750
216662fbaaee
fix(i18n): fix incorrect lookup of some translations
John Rouillard <rouilj@ieee.org>
parents:
7701
diff
changeset
|
587 return _('Error: %(type)s: %(value)s') % {'type': exc_type, |
|
216662fbaaee
fix(i18n): fix incorrect lookup of some translations
John Rouillard <rouilj@ieee.org>
parents:
7701
diff
changeset
|
588 'value': exc_value} |
|
1871
db97431125a5
Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1868
diff
changeset
|
589 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
590 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
591 def setgid(group): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
592 if group is None: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
593 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
594 if not hasattr(os, 'setgid'): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
595 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
596 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
597 # if root, setgid to the running user |
|
3279
6e7462bbafde
fix setgid typo [SF#1171346]
Richard Jones <richard@users.sourceforge.net>
parents:
3277
diff
changeset
|
598 if os.getuid(): |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
599 print(_('WARNING: ignoring "-g" argument, not root')) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
600 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
601 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
602 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
603 import grp |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
604 except ImportError: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
605 raise ValueError(_("Can't change groups - no grp module")) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
606 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
607 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
608 gid = int(group) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
609 except ValueError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
610 gid = grp.getgrnam(group)[2] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
611 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
612 grp.getgrgid(gid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
613 except KeyError: |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
614 raise ValueError(_("Group %(group)s doesn't exist") % locals()) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
615 os.setgid(gid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
616 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
617 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
618 def setuid(user): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
619 if not hasattr(os, 'getuid'): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
620 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
621 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
622 # People can remove this check if they're really determined |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
623 if user is None: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
624 if os.getuid(): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
625 return |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
626 raise ValueError(_("Can't run as root!")) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
627 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
628 if os.getuid(): |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
629 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
|
630 return |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
631 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
632 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
633 import pwd |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
634 except ImportError: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
635 raise ValueError(_("Can't change users - no pwd module")) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
636 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
637 try: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
638 uid = int(user) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
639 except ValueError: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
640 uid = pwd.getpwnam(user)[2] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
641 else: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
642 pwd.getpwuid(uid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
643 except KeyError: |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
644 raise ValueError(_("User %(user)s doesn't exist") % locals()) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
645 os.setuid(uid) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
646 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
647 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
648 class TrackerHomeOption(configuration.FilePathOption): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
649 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
650 # Tracker homes do not need any description strings |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
651 def format(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
652 return "%(name)s = %(value)s\n" % { |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
653 "name": self.setting, |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
654 "value": self.value2str(self._value), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
655 } |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
656 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
657 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
658 class ServerConfig(configuration.Config): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
659 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
660 SETTINGS = ( |
| 6972 | 661 ("main", ( |
|
4489
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
662 (configuration.Option, "host", "localhost", |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
663 "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
|
664 "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
|
665 "will be used.\n" |
|
47bd330e3d17
Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4475
diff
changeset
|
666 "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
|
667 "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
|
668 "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
|
669 "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
|
670 "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
|
671 "in a future release."), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
672 (configuration.IntegerNumberOption, "port", DEFAULT_PORT, |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
673 "Port to listen on."), |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
674 (configuration.NullableFilePathOption, "favicon", "favicon.ico", |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
675 "Path to favicon.ico image file." |
|
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
676 " If unset, built-in favicon.ico is used."), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
677 (configuration.NullableOption, "user", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
678 "User ID as which the server will answer requests.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
679 "In order to use this option, " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
680 "the server must be run initially as root.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
681 "Availability: Unix."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
682 (configuration.NullableOption, "group", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
683 "Group ID as which the server will answer requests.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
684 "In order to use this option, " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
685 "the server must be run initially as root.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
686 "Availability: Unix."), |
|
7387
46f92ac4e170
- issue2551275 - Allow configuring max_children in roundup-server.
John Rouillard <rouilj@ieee.org>
parents:
7112
diff
changeset
|
687 (configuration.IntegerNumberOption, "max_children", 40, |
|
46f92ac4e170
- issue2551275 - Allow configuring max_children in roundup-server.
John Rouillard <rouilj@ieee.org>
parents:
7112
diff
changeset
|
688 "Maximum number of children to spawn using fork " |
|
46f92ac4e170
- issue2551275 - Allow configuring max_children in roundup-server.
John Rouillard <rouilj@ieee.org>
parents:
7112
diff
changeset
|
689 "multiprocess mode."), |
|
3787
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
690 (configuration.BooleanOption, "nodaemon", "no", |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
691 "don't fork (this overrides the pidfile mechanism)'"), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
692 (configuration.BooleanOption, "log_hostnames", "no", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
693 "Log client machine names instead of IP addresses " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
694 "(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
|
695 (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
|
696 "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
|
697 "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
|
698 "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
|
699 "stderr or the file\nspecified using the -l/logfile option."), |
|
8169
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
700 (configuration.BooleanOption, "log_proxy_header", "no", |
|
8170
bf4a5bd5aa9f
fix formatting of config.ini help text for roundup-server.
John Rouillard <rouilj@ieee.org>
parents:
8169
diff
changeset
|
701 "Use first element of reverse proxy header X-Forwarded-For\n" |
|
bf4a5bd5aa9f
fix formatting of config.ini help text for roundup-server.
John Rouillard <rouilj@ieee.org>
parents:
8169
diff
changeset
|
702 "as client IP address. This appends a '+' sign to the logged\n" |
|
bf4a5bd5aa9f
fix formatting of config.ini help text for roundup-server.
John Rouillard <rouilj@ieee.org>
parents:
8169
diff
changeset
|
703 "host ip/name. Use only if server is accessible only via\n" |
|
8169
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
704 "trusted reverse proxy."), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
705 (configuration.NullableFilePathOption, "pidfile", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
706 "File to which the server records " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
707 "the process id of the daemon.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
708 "If this option is not set, " |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
709 "the server will run in foreground\n"), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
710 (configuration.NullableFilePathOption, "logfile", "", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
711 "Log file path. If unset, log to stderr."), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
712 (configuration.Option, "multiprocess", DEFAULT_MULTIPROCESS, |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
713 "Set processing of each request in separate subprocess.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
714 "Allowed values: %s." % ", ".join(MULTIPROCESS_TYPES)), |
|
3880
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
715 (configuration.NullableFilePathOption, "template", "", |
|
2359d6304a4f
Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3849
diff
changeset
|
716 "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
|
717 (configuration.BooleanOption, "ssl", "no", |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
718 "Enable SSL support (requires pyopenssl)"), |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
719 (configuration.NullableFilePathOption, "pem", "", |
|
8031
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
720 "PEM file used for SSL. The PEM file must include\n" |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
721 "both the private key and certificate with appropriate\n" |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
722 'headers (i.e. "-----BEGIN PRIVATE KEY-----",\n' |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
723 '"-----END PRIVATE KEY-----" and ' |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
724 '"-----BEGIN CERTIFICATE-----",\n' |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
725 '"-----END CERTIFICATE-----". A temporary self-signed\n' |
|
0f5d31be5418
issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents:
8000
diff
changeset
|
726 "certificate will be used if left blank."), |
|
6436
1f2f7c0b8968
issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents:
6420
diff
changeset
|
727 (configuration.WordListOption, "include_headers", "", |
|
1f2f7c0b8968
issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents:
6420
diff
changeset
|
728 "Comma separated list of extra headers that should\n" |
|
1f2f7c0b8968
issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents:
6420
diff
changeset
|
729 "be copied into the CGI environment.\n" |
|
6514
a036712c96f4
Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6502
diff
changeset
|
730 "E.G. if you want to access the REMOTE_USER and\n" |
|
6436
1f2f7c0b8968
issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents:
6420
diff
changeset
|
731 "X-Proxy-User headers in the back end,\n" |
|
1f2f7c0b8968
issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents:
6420
diff
changeset
|
732 "set to the value REMOTE_USER,X-Proxy-User."), |
|
6514
a036712c96f4
Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6502
diff
changeset
|
733 (configuration.HttpVersionOption, "http_version", "HTTP/1.1", |
|
a036712c96f4
Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6502
diff
changeset
|
734 "Change to HTTP/1.0 if needed. This disables keepalive."), |
|
a036712c96f4
Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6502
diff
changeset
|
735 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
736 )), |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
737 ("trackers", (), "Roundup trackers to serve.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
738 "Each option in this section defines single Roundup tracker.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
739 "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
|
740 "Option value is tracker home directory path.\n" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
741 "The path may be either absolute or relative\n" |
|
5102
96dc9f07340a
issue2161722: oudated docs
John Rouillard <rouilj@ieee.org>
parents:
4913
diff
changeset
|
742 "to the directory containing this config file."), |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
743 ) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
744 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
745 # options recognized by config |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
746 OPTIONS = { |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
747 "host": "n:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
748 "port": "p:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
749 "group": "g:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
750 "user": "u:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
751 "logfile": "l:", |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
752 "pidfile": "d:", |
|
3784
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
753 "nodaemon": "D", |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
754 "log_hostnames": "N", |
|
7387
46f92ac4e170
- issue2551275 - Allow configuring max_children in roundup-server.
John Rouillard <rouilj@ieee.org>
parents:
7112
diff
changeset
|
755 "max_children": "m:", |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
756 "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
|
757 "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
|
758 "loghttpvialogger": 'L', |
|
8169
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
759 "log_proxy_header": 'P', |
|
3884
1165f2204542
Ooops...not sure where those tabs came from. Making them spaces.
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3883
diff
changeset
|
760 "ssl": "s", |
|
1165f2204542
Ooops...not sure where those tabs came from. Making them spaces.
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3883
diff
changeset
|
761 "pem": "e:", |
|
6436
1f2f7c0b8968
issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents:
6420
diff
changeset
|
762 "include_headers": "I:", |
|
6514
a036712c96f4
Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6502
diff
changeset
|
763 "http_version": 'V:', |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
764 } |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
765 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
766 def __init__(self, config_file=None): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
767 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
|
768 self.sections.append("trackers") |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
769 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
770 def _adjust_options(self, config): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
771 """Add options for tracker homes""" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
772 # return early if there are no tracker definitions. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
773 # trackers must be specified on the command line. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
774 if not config.has_section("trackers"): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
775 return |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
776 # config defaults appear in all sections. |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
777 # filter them out. |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5386
diff
changeset
|
778 defaults = list(config.defaults().keys()) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
779 for name in config.options("trackers"): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
780 if name not in defaults: |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
781 self.add_option(TrackerHomeOption(self, "trackers", name)) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
782 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
783 def getopt(self, args, short_options="", long_options=(), |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
784 config_load_options=("C", "config"), **options): |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
785 options.update(self.OPTIONS) |
| 6972 | 786 return configuration.Config.getopt( |
| 787 self, args, short_options, long_options, | |
| 788 config_load_options, **options) | |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
789 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
790 def _get_name(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
791 return "Roundup server" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
792 |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
793 def trackers(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
794 """Return tracker definitions as a list of (name, home) pairs""" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
795 trackers = [] |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
796 for option in self._get_section_options("trackers"): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
797 trackers.append((option, os.path.abspath( |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
798 self["TRACKERS_" + option.upper()]))) |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
799 return trackers |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
800 |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
801 def set_logging(self): |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
802 """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
|
803 # 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
|
804 # text files) |
|
fb9abb842f36
Fix roundup-server logging for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5432
diff
changeset
|
805 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
|
806 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
807 def get_server(self): |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
808 """Return HTTP server object to run""" |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
809 # 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
|
810 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
|
811 |
|
2848
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
812 # 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
|
813 tracker_homes = self.trackers() |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
814 if self["MULTIPROCESS"] == "debug": |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
815 trackers = None |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
816 else: |
|
2852
37e6ebd5ba29
when preloading trackers (not running in 'debug' mode)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2848
diff
changeset
|
817 trackers = dict([(name, roundup.instance.open(home, optimize=1)) |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
818 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
|
819 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
820 # build customized request handler class |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
821 class RequestHandler(RoundupRequestHandler): |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
822 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
|
823 TRACKER_HOMES = dict(tracker_homes) |
|
e8cb25c30ac9
added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2843
diff
changeset
|
824 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
|
825 DEBUG_MODE = self["MULTIPROCESS"] == "debug" |
|
3438
4963c853d51b
added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3428
diff
changeset
|
826 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
|
827 |
|
4276
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
828 def setup(self): |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
829 if self.CONFIG["SSL"]: |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
830 # 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
|
831 # 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
|
832 # 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
|
833 self.request.do_handshake() |
|
6514
a036712c96f4
Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6502
diff
changeset
|
834 RoundupRequestHandler.protocol_version = \ |
| 6972 | 835 self.CONFIG["HTTP_VERSION"] |
|
4276
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
836 RoundupRequestHandler.setup(self) |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
837 |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
838 def finish(self): |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
839 RoundupRequestHandler.finish(self) |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
840 if self.CONFIG["SSL"]: |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
841 self.request.shutdown() |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
842 self.request.close() |
|
0c024cf74252
Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4273
diff
changeset
|
843 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
844 if self["SSL"]: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
845 base_server = SecureHTTPServer |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
846 else: |
|
4273
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
847 # time out after a minute if we can |
|
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
848 # 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
|
849 # socket, so we do this only for non-SSL connections. |
|
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
850 if hasattr(socket, 'setdefaulttimeout'): |
|
0a684518d609
More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
4258
diff
changeset
|
851 socket.setdefaulttimeout(60) |
|
5409
277e91bf7936
Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5405
diff
changeset
|
852 base_server = http_.server.HTTPServer |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
853 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
854 # obtain request server class |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
855 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
|
856 print(_("Multiprocess mode \"%s\" is not available, " |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
857 "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
|
858 self["MULTIPROCESS"] = "none" |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
859 server_class = base_server |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
860 elif self["MULTIPROCESS"] == "fork": |
|
5410
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
861 class ForkingServer(socketserver.ForkingMixIn, |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
862 base_server): |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
863 pass |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
864 server_class = ForkingServer |
|
7387
46f92ac4e170
- issue2551275 - Allow configuring max_children in roundup-server.
John Rouillard <rouilj@ieee.org>
parents:
7112
diff
changeset
|
865 server_class.max_children = self["MAX_CHILDREN"] |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
866 elif self["MULTIPROCESS"] == "thread": |
|
5410
d0816d50ee8f
Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5409
diff
changeset
|
867 class ThreadingServer(socketserver.ThreadingMixIn, |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
868 base_server): |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
869 pass |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
870 server_class = ThreadingServer |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
871 else: |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
872 server_class = base_server |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
873 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
874 # obtain server before changing user id - allows to |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
875 # use port < 1024 if started as root |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
876 try: |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
877 args = ((self["HOST"], self["PORT"]), RequestHandler) |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
878 kwargs = {} |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
879 if self["SSL"]: |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
880 kwargs['ssl_pem'] = self["PEM"] |
|
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
881 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
|
882 except socket.error as e: |
|
5712
320a1692a473
Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents:
5667
diff
changeset
|
883 if e.args[0] == errno.EADDRINUSE: |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
884 raise socket.error(_("Unable to bind to port %s, " |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
885 "port already in use.") % self["PORT"]) |
|
6743
d659cfa8439c
Make roundup-server EACCES errors clearer
John Rouillard <rouilj@ieee.org>
parents:
6718
diff
changeset
|
886 if e.args[0] == errno.EACCES: |
| 6972 | 887 raise socket.error(_( |
| 888 "Unable to bind to port %(port)s, " | |
| 889 "access not allowed, " | |
|
7750
216662fbaaee
fix(i18n): fix incorrect lookup of some translations
John Rouillard <rouilj@ieee.org>
parents:
7701
diff
changeset
|
890 "errno: %(errno)s %(msg)s") % { |
| 6972 | 891 "port": self["PORT"], |
| 892 "errno": e.args[0], | |
| 893 "msg": e.args[1]} | |
|
7750
216662fbaaee
fix(i18n): fix incorrect lookup of some translations
John Rouillard <rouilj@ieee.org>
parents:
7701
diff
changeset
|
894 ) |
| 6972 | 895 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
896 raise |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
897 # change user and/or group |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
898 setgid(self["GROUP"]) |
|
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
899 setuid(self["USER"]) |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
900 # return the server |
|
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
901 return httpd |
|
2230
ca2664e095be
disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents:
2200
diff
changeset
|
902 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
903 |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
904 try: |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
905 import win32serviceutil |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
906 except ImportError: |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
907 RoundupService = None |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
908 else: |
|
2230
ca2664e095be
disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents:
2200
diff
changeset
|
909 |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
910 # allow the win32 |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
911 import win32service |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
912 |
|
5266
e9158c0a6eba
Python 2 and 3 support. Convert Exception to BaseException scripts.
John Rouillard <rouilj@ieee.org>
parents:
5248
diff
changeset
|
913 class SvcShutdown(BaseException): |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
914 pass |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
915 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
916 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
|
917 |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
918 _svc_name_ = "roundup" |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
919 _svc_display_name_ = "Roundup Bug Tracker" |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
920 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
921 running = 0 |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
922 server = None |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
923 |
|
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
924 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
|
925 import servicemanager |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
926 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
|
927 config = ServerConfig() |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
928 (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
|
929 if not config["LOGFILE"]: |
| 6972 | 930 servicemanager.LogMsg( |
| 931 servicemanager.EVENTLOG_ERROR_TYPE, | |
| 932 servicemanager.PYS_SERVICE_STOPPED, | |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
933 (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
|
934 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
|
935 return |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
936 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
|
937 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
|
938 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
|
939 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
|
940 servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
941 servicemanager.PYS_SERVICE_STARTED, |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
942 (self._svc_display_name_, |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
943 " at %s:%s" % (config["HOST"], |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
944 config["PORT"]))) |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
945 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
|
946 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
|
947 servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
948 servicemanager.PYS_SERVICE_STOPPED, |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
949 (self._svc_display_name_, "")) |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
950 self.ReportServiceStatus(win32service.SERVICE_STOPPED) |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
951 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
952 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
|
953 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
|
954 # 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
|
955 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
|
956 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
|
957 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
|
958 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
|
959 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
|
960 sock.close() |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
961 self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
962 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
963 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
964 def usage(message=''): |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
965 if RoundupService: |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
966 os_part = \ |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
967 ""''' -c <Command> Windows Service options. |
|
2521
8822780fa519
mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2483
diff
changeset
|
968 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
|
969 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
|
970 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
|
971 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
|
972 specifics.''' |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
973 else: |
|
2521
8822780fa519
mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2483
diff
changeset
|
974 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
|
975 -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
|
976 -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
|
977 to the file indicated by PIDfile. The -l option *must* be |
|
8169
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
978 specified if -d is used. |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
979 -D run the server in the foreground even when -d is used.''' |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
980 if message: |
|
6514
a036712c96f4
Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6502
diff
changeset
|
981 message += '\n\n' |
|
a036712c96f4
Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6502
diff
changeset
|
982 print(_('''\n%(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
|
983 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
984 Options: |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
985 -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
|
986 -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
|
987 -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
|
988 -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
|
989 -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
|
990 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
|
991 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
|
992 to all network interfaces |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
993 -p <port> set the port to listen on (default: %(port)s) |
|
6436
1f2f7c0b8968
issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents:
6420
diff
changeset
|
994 -I <header1[,header2]*> list of headers to pass to the backend |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
995 -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
|
996 -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
|
997 -i <fname> set tracker index template |
|
7387
46f92ac4e170
- issue2551275 - Allow configuring max_children in roundup-server.
John Rouillard <rouilj@ieee.org>
parents:
7112
diff
changeset
|
998 -m <children> maximum number of children to spawn in fork multiprocess mode |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
999 -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
|
1000 -L http request logging uses python logging (roundup.http) |
|
8169
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
1001 -P log client address/name using reverse proxy X-Forwarded-For |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
1002 header and not the connection IP (which is the reverse proxy). |
|
627c5d6a0551
allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents:
8038
diff
changeset
|
1003 Appends a '+' sign to the logged address/name. |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
1004 -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
|
1005 -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
|
1006 Allowed values: %(mp_types)s. |
|
6514
a036712c96f4
Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6502
diff
changeset
|
1007 -V <version> set HTTP version (default: HTTP/1.1). |
|
a036712c96f4
Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6502
diff
changeset
|
1008 Allowed values: HTTP/1.0, HTTP/1.1. |
|
a036712c96f4
Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents:
6502
diff
changeset
|
1009 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
1010 %(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
|
1011 |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
1012 Long options: |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
1013 --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
|
1014 --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
|
1015 --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
|
1016 --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
|
1017 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
|
1018 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
|
1019 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
1020 Examples: |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
1021 |
|
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
1022 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
|
1023 -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
|
1024 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
|
1025 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
1026 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
|
1027 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
1028 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
|
1029 |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
1030 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
|
1031 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
|
1032 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
1033 Configuration file format: |
|
2842
98e2e7b57101
roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2840
diff
changeset
|
1034 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
|
1035 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
|
1036 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
|
1037 for option descriptions. |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
1038 |
|
2483
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
1039 How to use "name=tracker home": |
|
55b496fb7b5b
better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents:
2481
diff
changeset
|
1040 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
|
1041 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
|
1042 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
|
1043 "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
|
1044 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
|
1045 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
|
1046 ''') % { |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
1047 "message": message, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
1048 "os_part": os_part, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
1049 "port": DEFAULT_PORT, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
1050 "mp_def": DEFAULT_MULTIPROCESS, |
|
46ad912ddd2b
describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2842
diff
changeset
|
1051 "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
|
1052 }) |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
1053 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
1054 |
|
3784
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
1055 def writepidfile(pidfile): |
|
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
1056 ''' 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
|
1057 pid = os.getpid() |
|
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
1058 if pid: |
|
3787
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
1059 pidfile = open(pidfile, 'w') |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
1060 pidfile.write(str(pid)) |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
1061 pidfile.close() |
|
3784
93dfda74a763
allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents:
3736
diff
changeset
|
1062 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
1063 |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1064 def daemonize(pidfile): |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1065 ''' Turn this process into a daemon. |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1066 - 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
|
1067 - make our parent PID 1 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1068 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1069 Write our new PID to the pidfile. |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1070 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1071 From A.M. Kuuchling (possibly originally Greg Ward) with |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1072 modification from Oren Tirosh, and finally a small mod from me. |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1073 ''' |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1074 # Fork once |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1075 if os.fork() != 0: |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1076 os._exit(0) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1077 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1078 # Create new session |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1079 os.setsid() |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1080 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1081 # Second fork to force PPID=1 |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1082 pid = os.fork() |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1083 if pid: |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1084 pidfile = open(pidfile, 'w') |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1085 pidfile.write(str(pid)) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1086 pidfile.close() |
|
2186
3f89c8ffe4f1
version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents:
2181
diff
changeset
|
1087 os._exit(0) |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1088 |
|
2186
3f89c8ffe4f1
version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents:
2181
diff
changeset
|
1089 os.chdir("/") |
|
1072
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1090 |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1091 # 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
|
1092 # descriptors can't be used again |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1093 devnull = os.open('/dev/null', 0) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1094 os.dup2(devnull, 0) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1095 os.dup2(devnull, 1) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1096 os.dup2(devnull, 2) |
|
88ded00fa0e0
better daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
1047
diff
changeset
|
1097 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
1098 |
|
2637
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
1099 undefined = [] |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
1100 |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
1101 |
|
2637
11811b313459
The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents:
2633
diff
changeset
|
1102 def run(port=undefined, success_message=None): |
|
1249
6c24a86a12ae
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1183
diff
changeset
|
1103 ''' 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
|
1104 ''' |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1105 config = ServerConfig() |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
1106 # additional options |
|
5957
f822a91b3778
Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
1107 short_options = "hvSc" |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
1108 try: |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1109 (optlist, args) = config.getopt(sys.argv[1:], |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
1110 short_options, |
|
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
1111 ("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
|
1112 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
|
1113 usage(str(e)) |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1114 return |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
1115 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1116 # 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
|
1117 if ("-c", "") in optlist: |
|
5957
f822a91b3778
Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
1118 global RoundupService |
|
f822a91b3778
Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
1119 if not RoundupService: |
|
f822a91b3778
Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
1120 RoundupService = True # make sure usage displays -c help text |
|
f822a91b3778
Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
1121 error_m = """ |
|
f822a91b3778
Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
1122 ERROR: -c is not available because roundup couldn't import |
|
f822a91b3778
Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
1123 win32serviceutil from pywin32. See Installation docs |
|
f822a91b3778
Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
1124 for pywin32 details. |
|
f822a91b3778
Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
1125 """ |
|
f822a91b3778
Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
1126 usage(error_m) |
|
f822a91b3778
Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
1127 return |
|
f822a91b3778
Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
1128 |
|
2840
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
1129 # 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
|
1130 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
|
1131 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
|
1132 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
|
1133 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
|
1134 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
|
1135 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
|
1136 long_name += "=" |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
1137 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
|
1138 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
|
1139 svc_args = [] |
|
a212699c21f2
windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2838
diff
changeset
|
1140 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
|
1141 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
|
1142 # 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
|
1143 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
|
1144 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
|
1145 # 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
|
1146 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
|
1147 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
|
1148 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
|
1149 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
|
1150 # pass the control to serviceutil |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
1151 win32serviceutil.HandleCommandLine(RoundupService, |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
1152 argv=sys.argv[:1] + args) |
|
2838
91b2d50f0b1a
eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2835
diff
changeset
|
1153 return |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
1154 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1155 # add tracker names from command line. |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1156 # 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
|
1157 if args: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1158 for arg in args: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1159 try: |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1160 name, home = arg.split('=') |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1161 except ValueError: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5376
diff
changeset
|
1162 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
|
1163 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
|
1164 config["TRACKERS_" + name.upper()] = home |
|
2308
e21c3a447a62
translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2287
diff
changeset
|
1165 |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1166 # handle remaining options |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1167 if optlist: |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
1168 for (opt, _arg) in optlist: |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1169 if opt in ("-h", "--help"): |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1170 usage() |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1171 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
|
1172 print('%s (python %s)' % (roundup_version, |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
1173 sys.version.split()[0])) |
|
2771
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1174 elif opt in ("-S", "--save-config"): |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1175 config.save() |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1176 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
|
1177 # 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
|
1178 return |
|
d385f6c1d4ed
let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2676
diff
changeset
|
1179 |
|
2774
22c381f3f448
respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2773
diff
changeset
|
1180 # 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
|
1181 if port is not undefined: |
|
22c381f3f448
respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2773
diff
changeset
|
1182 config.PORT = port |
|
22c381f3f448
respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2773
diff
changeset
|
1183 |
|
3112
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1184 if config["LOGFILE"]: |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1185 config["LOGFILE"] = os.path.abspath(config["LOGFILE"]) |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1186 # switch logging from stderr/stdout to logfile |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1187 config.set_logging() |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1188 if config["PIDFILE"]: |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1189 config["PIDFILE"] = os.path.abspath(config["PIDFILE"]) |
|
a7657b3cd22a
merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents:
3022
diff
changeset
|
1190 |
|
2632
9c55f2bc5961
roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents:
2592
diff
changeset
|
1191 # 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
|
1192 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
|
1193 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
|
1194 print(_("Sorry, you can't run the server as a daemon" |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
1195 " 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
|
1196 sys.exit(0) |
|
1632
eb4d04a9d647
added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents:
1611
diff
changeset
|
1197 else: |
|
3787
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
1198 if config['NODAEMON']: |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
1199 writepidfile(config["PIDFILE"]) |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
1200 else: |
|
f623bdafe44b
expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
3784
diff
changeset
|
1201 daemonize(config["PIDFILE"]) |
|
1953
800b226bba58
fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents:
1939
diff
changeset
|
1202 |
|
2835
9a6b451b1ba6
implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2774
diff
changeset
|
1203 # create the server |
|
5712
320a1692a473
Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents:
5667
diff
changeset
|
1204 try: |
|
320a1692a473
Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents:
5667
diff
changeset
|
1205 httpd = config.get_server() |
|
320a1692a473
Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents:
5667
diff
changeset
|
1206 except Exception as e: |
|
320a1692a473
Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents:
5667
diff
changeset
|
1207 # capture all exceptions and pretty print them |
|
320a1692a473
Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents:
5667
diff
changeset
|
1208 print(e) |
|
320a1692a473
Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents:
5667
diff
changeset
|
1209 sys.exit(2) |
|
1047
1890c611de08
add daemonification
Richard Jones <richard@users.sourceforge.net>
parents:
992
diff
changeset
|
1210 |
|
1868
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
1211 if success_message: |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1212 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
|
1213 else: |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1214 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
|
1215 % config) |
|
1868
1545a36ae887
Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1867
diff
changeset
|
1216 |
|
1311
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
1217 try: |
|
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
1218 httpd.serve_forever() |
|
7c9fda4a6692
handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents:
1299
diff
changeset
|
1219 except KeyboardInterrupt: |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5356
diff
changeset
|
1220 print('Keyboard Interrupt: exiting') |
|
7655
91fad2d2c4b3
fix: exit quickly on keyboard interrupt
John Rouillard <rouilj@ieee.org>
parents:
7574
diff
changeset
|
1221 try: |
|
91fad2d2c4b3
fix: exit quickly on keyboard interrupt
John Rouillard <rouilj@ieee.org>
parents:
7574
diff
changeset
|
1222 httpd.socket.shutdown(socket.SHUT_RDWR) |
|
91fad2d2c4b3
fix: exit quickly on keyboard interrupt
John Rouillard <rouilj@ieee.org>
parents:
7574
diff
changeset
|
1223 except OSError: |
|
91fad2d2c4b3
fix: exit quickly on keyboard interrupt
John Rouillard <rouilj@ieee.org>
parents:
7574
diff
changeset
|
1224 # forced shutdown can throw an error. |
|
91fad2d2c4b3
fix: exit quickly on keyboard interrupt
John Rouillard <rouilj@ieee.org>
parents:
7574
diff
changeset
|
1225 # we don't care as we are going away. |
|
91fad2d2c4b3
fix: exit quickly on keyboard interrupt
John Rouillard <rouilj@ieee.org>
parents:
7574
diff
changeset
|
1226 pass |
|
6718
06d750efbc50
Fix ResourceWarning error due to unclosed socket on exit from roundup_server.
John Rouillard <rouilj@ieee.org>
parents:
6646
diff
changeset
|
1227 httpd.socket.close() |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
1228 |
|
6040
d5c51d1ef09c
flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents:
5957
diff
changeset
|
1229 |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
1230 if __name__ == '__main__': |
|
593
2256f81293c1
Conversion to generated script stubs
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
592
diff
changeset
|
1231 run() |
|
592
326388b8604a
Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff
changeset
|
1232 |
|
3883
679118b572d5
add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3880
diff
changeset
|
1233 # vim: sts=4 sw=4 et si |
