annotate roundup/scripts/roundup_server.py @ 8522:82fc69e6d9d7

refactor/bug: handle case where netrc returns None. pyrefly flagged this. Python 3.14 (and 2.7) says authenticators() returns None if there is no matching host. Also the original exceptions IOError and TypeError appear to not be valid in this context. Rewrite to scope FileNotFoundError if .netrc is missing to just the one method call. Handle rest of flow with if/else not exception jump.
author John Rouillard <rouilj@ieee.org>
date Thu, 19 Feb 2026 22:15:12 -0500
parents a2c376d0f110
children 5fbf6451a782
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
2 # This module is free software, and you may redistribute it and/or modify
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
3 # under the same terms as Python, so long as this copyright message and
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
4 # disclaimer are retained in their original form.
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
5 #
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
6 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
7 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
8 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
9 # POSSIBILITY OF SUCH DAMAGE.
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
10 #
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
11 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
12 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
13 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
14 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
15 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
16 #
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
17
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1953
diff changeset
18 """Command-line script that runs a server over roundup.cgi.client.
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
19 """
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
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
23 import base64 # decode icon
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
24 import errno
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
25 import getopt
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
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
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
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
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
30 import socket
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
31 import sys # modify sys.path when running in source tree
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
32 import time
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
33 import traceback
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
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
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
55 # --- patch sys.path to make sure 'import roundup' finds correct version
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
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
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
58 thisdir = osp.dirname(osp.abspath(__file__))
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
59 rootdir = osp.dirname(osp.dirname(thisdir))
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
60 if (osp.exists(thisdir + '/__init__.py') and
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
61 osp.exists(rootdir + '/roundup/__init__.py')):
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
62 # the script is located inside roundup source code
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
63 sys.path.insert(0, rootdir)
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
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
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
66 import roundup.instance # noqa: E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
67
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
68 # python version_check raises exception if imported for wrong python version
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
69 from roundup import configuration, version_check # noqa: F401,E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
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
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
72 from roundup.anypy import http_, urllib_ # noqa: E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
73 from roundup.anypy.html import html_escape # noqa: E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
74 from roundup.anypy.strings import s2b, StringIO # noqa: E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
75 from roundup.cgi import cgitb, client # noqa: E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
76 from roundup.cgi.PageTemplates.PageTemplate import PageTemplate # noqa: E402
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
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
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
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
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
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
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
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
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
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
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
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')
8269
341841a9edc5 Handle timeout exception in roundup-server better.
John Rouillard <rouilj@ieee.org>
parents: 8256
diff changeset
285 self.send_response(408)
341841a9edc5 Handle timeout exception in roundup-server better.
John Rouillard <rouilj@ieee.org>
parents: 8256
diff changeset
286 self.send_header('Content-Type', 'text/html')
341841a9edc5 Handle timeout exception in roundup-server better.
John Rouillard <rouilj@ieee.org>
parents: 8256
diff changeset
287
341841a9edc5 Handle timeout exception in roundup-server better.
John Rouillard <rouilj@ieee.org>
parents: 8256
diff changeset
288 output = s2b('''<body><p>Connection timed out</p></body>''')
341841a9edc5 Handle timeout exception in roundup-server better.
John Rouillard <rouilj@ieee.org>
parents: 8256
diff changeset
289 # Close connection
341841a9edc5 Handle timeout exception in roundup-server better.
John Rouillard <rouilj@ieee.org>
parents: 8256
diff changeset
290 self.send_header('Content-Length', len(output))
341841a9edc5 Handle timeout exception in roundup-server better.
John Rouillard <rouilj@ieee.org>
parents: 8256
diff changeset
291 self.end_headers()
341841a9edc5 Handle timeout exception in roundup-server better.
John Rouillard <rouilj@ieee.org>
parents: 8256
diff changeset
292 self.wfile.write(output)
341841a9edc5 Handle timeout exception in roundup-server better.
John Rouillard <rouilj@ieee.org>
parents: 8256
diff changeset
293 self.close_connection = True
1939
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
294 else:
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
295 self.send_response(400)
1303c208419d some updates that were sitting on disk
Richard Jones <richard@users.sourceforge.net>
parents: 1914
diff changeset
296 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
297 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
298 try:
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
299 reload(cgitb)
7112
c0d030bd472e Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents: 6972
diff changeset
300 output = s2b(cgitb.breaker()) + s2b(cgitb.html())
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
301 except Exception:
5418
55f09ca366c4 Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5410
diff changeset
302 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
303 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
304 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
305 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
306 else:
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
307 # user feedback
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
308 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
309 output = (
c0d030bd472e Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents: 6972
diff changeset
310 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
311 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
312 ts)
c0d030bd472e Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents: 6972
diff changeset
313 )
3277
3084b07ec266 send errors in the web interface to a logfile by default.
Richard Jones <richard@users.sourceforge.net>
parents: 3205
diff changeset
314 # out to the logfile
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
315 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
316 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
317
7112
c0d030bd472e Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents: 6972
diff changeset
318 # 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
319 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
320 self.end_headers()
c0d030bd472e Fix: Send Content-Length header to client from top Exception handler
John Rouillard <rouilj@ieee.org>
parents: 6972
diff changeset
321 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
322
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
323 do_GET = do_POST = do_HEAD = do_PUT = do_DELETE = \
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
324 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
325
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
326 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
327 ''' 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
328 '''
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5386
diff changeset
329 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
330 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
331 self.send_response(302)
5402
88dbacd11cd1 Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5398
diff changeset
332 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
333 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
334 self.end_headers()
8038
5a122373641a fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents: 8031
diff changeset
335 return
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
336
8038
5a122373641a fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents: 8031
diff changeset
337 self.send_response(200)
5a122373641a fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents: 8031
diff changeset
338 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
339 output = []
5a122373641a fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents: 8031
diff changeset
340
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
341 w = self.wfile.write
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
342
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
343 if self.CONFIG and self.CONFIG['TEMPLATE']:
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
344 template = open(self.CONFIG['TEMPLATE']).read()
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
345 pt = PageTemplate()
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
346 pt.write(template)
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
347 extra = {'trackers': self.TRACKERS,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
348 'nothing': None,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
349 'true': 1,
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
350 'false': 0}
8038
5a122373641a fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents: 8031
diff changeset
351 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
352 else:
8038
5a122373641a fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents: 8031
diff changeset
353 output.append(s2b(_(
5a122373641a fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents: 8031
diff changeset
354 '<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
355 '<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
356 keys.sort()
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
357 for tracker in keys:
8038
5a122373641a fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents: 8031
diff changeset
358 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
359 '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
360 'tracker_name': html_escape(tracker)}))
8038
5a122373641a fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents: 8031
diff changeset
361 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
362
5a122373641a fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents: 8031
diff changeset
363 write_output = b"\n".join(output)
5a122373641a fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents: 8031
diff changeset
364 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
365 self.end_headers()
5a122373641a fix: roundup-server Content-Length when generating index
John Rouillard <rouilj@ieee.org>
parents: 8031
diff changeset
366 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
367
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
368 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
369 ''' 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
370 '''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
371
4912
a0a7a6ca1586 roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents: 4911
diff changeset
372 # 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
373 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
374 # 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
375 favicon_fileobj = None
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
376
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
377 # 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
378 # favicon_fileobj to the input file
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
379 if self.CONFIG is not None:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
380 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
381
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
382 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
383 favicon_fileobj = open(favicon_filepath, 'rb')
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
384
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
385 if favicon_fileobj is None:
5418
55f09ca366c4 Python 3 preparation: StringIO.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5410
diff changeset
386 favicon_fileobj = io.BytesIO(favico)
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
387
2176
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
388 self.send_response(200)
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
389 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
390 self.send_header('Content-Length', len(favico))
6529
c3dfc4977ec6 Cache /favicon.ico
John Rouillard <rouilj@ieee.org>
parents: 6528
diff changeset
391 self.send_header('Cache-Control', "public, max-age=86400")
2176
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
392 self.end_headers()
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
393
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
394 # this bufsize is completely arbitrary, I picked 4K because
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
395 # 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
396 # 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
397 bufsize = 4 * 1024
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
398 Processing = True
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
399 while Processing:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
400 data = favicon_fileobj.read(bufsize)
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
401 if len(data) > 0:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
402 self.wfile.write(data)
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
403 else:
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
404 Processing = False
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
405
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
406 favicon_fileobj.close()
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
407
2176
adaf2a92153c added favicon
Richard Jones <richard@users.sourceforge.net>
parents: 2021
diff changeset
408 return
1611
db8545f10476 initial attempt at favicon support, complete failure
Richard Jones <richard@users.sourceforge.net>
parents: 1606
diff changeset
409
8210
4ed886dc2558 fix(web): issue2551381 - roundup-server parses multiple '?" incorrectly.
John Rouillard <rouilj@ieee.org>
parents: 8170
diff changeset
410 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
411 if i >= 0:
4912
a0a7a6ca1586 roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents: 4911
diff changeset
412 # 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
413 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
414 else:
4912
a0a7a6ca1586 roundup_server: Code untangle - init `rest` variable when necessary
anatoly techtonik <techtonik@gmail.com>
parents: 4911
diff changeset
415 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
416 query = ''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
417
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
418 # 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
419 if rest == '/':
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
420 self.index()
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
421 return
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
422
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
423 # 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
424 l_path = rest.split('/')
5402
88dbacd11cd1 Python 3 preparation: update urllib / urllib2 / urlparse imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5398
diff changeset
425 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
426
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
427 # handle missing trailing '/'
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
428 if len(l_path) == 2:
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
429 self.send_response(301)
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
430 # redirect - XXX https??
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
431 protocol = 'http'
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
432 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
433 if query:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
434 url += '?' + query
8322
a2c376d0f110 fix: fix possible HTTP Response Splitting in roundup-server
John Rouillard <rouilj@ieee.org>
parents: 8297
diff changeset
435
a2c376d0f110 fix: fix possible HTTP Response Splitting in roundup-server
John Rouillard <rouilj@ieee.org>
parents: 8297
diff changeset
436 # Do not allow literal \n or \r in URL to prevent
a2c376d0f110 fix: fix possible HTTP Response Splitting in roundup-server
John Rouillard <rouilj@ieee.org>
parents: 8297
diff changeset
437 # HTTP Response Splitting
a2c376d0f110 fix: fix possible HTTP Response Splitting in roundup-server
John Rouillard <rouilj@ieee.org>
parents: 8297
diff changeset
438 url = re.sub("[\r\n]", "", url)
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
439 self.send_header('Location', url)
8000
683af7c57ce5 fix: add content-length to 301 response
John Rouillard <rouilj@ieee.org>
parents: 7750
diff changeset
440 self.send_header('Content-Length', 17)
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
441 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
442 self.wfile.write(b'Moved Permanently')
1473
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
443 return
21a80a8dfc6d fix (again?) trailing / redirect [SF#692910]
Richard Jones <richard@users.sourceforge.net>
parents: 1469
diff changeset
444
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
445 # 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
446 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
447 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
448 else:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
449 rest = '/'
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
450
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
451 # 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
452 env = {}
1251
347657425a10 Nicer display of tracker list in roundup-server [SF#619769]
Richard Jones <richard@users.sourceforge.net>
parents: 1249
diff changeset
453 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
454 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
455 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
456 if query:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
457 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
458 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
459 # 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
460 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
461 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
462 # Python 2.
5667
5ad31de777a8 Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents: 5624
diff changeset
463 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
464 else:
5432
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
465 # Python 2.
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
466 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
467 if content_type:
5ad31de777a8 Prevent env['CONTENT_TYPE'] from being None. FieldStorage's content
John Rouillard <rouilj@ieee.org>
parents: 5624
diff changeset
468 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
469 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
470 if length:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
471 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
472 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
473 # Python 3.
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
474 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
475 else:
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
476 # Python 2.
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
477 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
478 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
479 if co:
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
480 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
481 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
482 # 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
483 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
484 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
485 # if header is MISSING
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
486 if env[h] is None:
7574
dba4b1b25528 flake8: add space between del and (
John Rouillard <rouilj@ieee.org>
parents: 7387
diff changeset
487 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
488 env['SCRIPT_NAME'] = ''
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
489 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
490 env['SERVER_PORT'] = str(self.server.server_port)
4290
236939e4137b - small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4276
diff changeset
491 try:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
492 env['HTTP_HOST'] = self.headers['host']
4290
236939e4137b - small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4276
diff changeset
493 except KeyError:
236939e4137b - small typo
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4276
diff changeset
494 env['HTTP_HOST'] = ''
5303
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
495 # 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
496 # headers.
5432
fec18298ae02 Python 3 preparation: HTTP headers handling in roundup_server.py.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5431
diff changeset
497 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
498 if xfh:
5303
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
499 # 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
500 # 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
501 # 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
502 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
503 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
504 if xff:
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
505 # 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
506 # 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
507 # 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
508 # 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
509 # 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
510 # 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
511 # 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
512 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
513 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
514 if xfp:
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
515 # 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
516 # 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
517 # 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
518 # is possible so:
5017c3422334 Pass X-Forwarded-For and X-Forwarded-Proto headers as
John Rouillard <rouilj@ieee.org>
parents: 5266
diff changeset
519 # 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
520 # 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
521 # 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
522 # 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
523 # 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
524 # 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
525 # 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
526 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
527 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
528 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
529 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
530 referer = self.headers.get('Referer')
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
531 if referer:
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
532 env['HTTP_REFERER'] = referer
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
533 origin = self.headers.get('Origin')
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
534 if origin:
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
535 env['HTTP_ORIGIN'] = origin
a9ace22e0a2f issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents: 5102
diff changeset
536 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
537 if xrw:
5624
b3618882f906 issue2551023: Fix CSRF headers for use with wsgi and cgi. The
John Rouillard <rouilj@ieee.org>
parents: 5608
diff changeset
538 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
539 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
540 if range:
207499c0a3ed Range support in roundup-server so large files can be served...
Bernhard Reiter <Bernhard.Reiter@intevation.de>
parents: 4344
diff changeset
541 env['HTTP_RANGE'] = range
6646
98a9df71e24c If-Range doesn't work with roundup-server.
John Rouillard <rouilj@ieee.org>
parents: 6529
diff changeset
542 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
543 if range:
98a9df71e24c If-Range doesn't work with roundup-server.
John Rouillard <rouilj@ieee.org>
parents: 6529
diff changeset
544 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
545
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
546 # do the roundup thing
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
547 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
548 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
549
1735
141d5a0869fa roundup-server now logs IP addresses by default [SF#778795]
Richard Jones <richard@users.sourceforge.net>
parents: 1632
diff changeset
550 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
551 """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
552 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
553 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
554 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
555 """
627c5d6a0551 allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents: 8038
diff changeset
556 from_forwarded_header=""
627c5d6a0551 allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents: 8038
diff changeset
557 forwarded_for = None
8256
3a04ff6f1004 fix: crash when logging ip if roundup-server times out
John Rouillard <rouilj@ieee.org>
parents: 8210
diff changeset
558
3a04ff6f1004 fix: crash when logging ip if roundup-server times out
John Rouillard <rouilj@ieee.org>
parents: 8210
diff changeset
559 # if connection timed out, there is no headers property
3a04ff6f1004 fix: crash when logging ip if roundup-server times out
John Rouillard <rouilj@ieee.org>
parents: 8210
diff changeset
560 if hasattr(self, 'headers') and ('X-FORWARDED-FOR' in self.headers):
8169
627c5d6a0551 allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents: 8038
diff changeset
561 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
562 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
563 maxsplit=1)[0]
627c5d6a0551 allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents: 8038
diff changeset
564 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
565 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
566 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
567 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
568 else:
8169
627c5d6a0551 allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents: 8038
diff changeset
569 if forwarded_for:
627c5d6a0551 allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents: 8038
diff changeset
570 host = forwarded_for
627c5d6a0551 allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents: 8038
diff changeset
571 else:
627c5d6a0551 allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents: 8038
diff changeset
572 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
573 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
574
2021
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
575 def log_message(self, format, *args):
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
576 ''' Try to *safely* log to stderr.
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
577 '''
5323
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
578 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
579 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
580
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
581 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
582 (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
583 self.log_date_time_string(),
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
584 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
585 else:
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
586 try:
5409
277e91bf7936 Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5405
diff changeset
587 http_.server.BaseHTTPRequestHandler.log_message(self,
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
588 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
589 except IOError:
762222535a0b Allow http request logs to be logged using the python logging module
John Rouillard <rouilj@ieee.org>
parents: 5303
diff changeset
590 # 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
591 pass
2021
f4a16b186efc proper fix this time
Richard Jones <richard@users.sourceforge.net>
parents: 2020
diff changeset
592
3736
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
593 def start_response(self, headers, response):
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
594 self.send_response(response)
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
595 for key, value in headers:
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
596 self.send_header(key, value)
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
597 self.end_headers()
a2d22d0de0bc WSGI support via roundup.cgi.wsgi_handler
Richard Jones <richard@users.sourceforge.net>
parents: 3733
diff changeset
598
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
599
1871
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
600 def error():
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
601 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
602 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
603 'value': exc_value}
1871
db97431125a5 Print a nicer error message (without usage)...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1868
diff changeset
604
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
605
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
606 def setgid(group):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
607 if group is None:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
608 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
609 if not hasattr(os, 'setgid'):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
610 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
611
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
612 # if root, setgid to the running user
3279
6e7462bbafde fix setgid typo [SF#1171346]
Richard Jones <richard@users.sourceforge.net>
parents: 3277
diff changeset
613 if os.getuid():
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
614 print(_('WARNING: ignoring "-g" argument, not root'))
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
615 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
616
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
617 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
618 import grp
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
619 except ImportError:
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
620 raise ValueError(_("Can't change groups - no grp module"))
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
621 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
622 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
623 gid = int(group)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
624 except ValueError:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
625 gid = grp.getgrnam(group)[2]
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
626 else:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
627 grp.getgrgid(gid)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
628 except KeyError:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
629 raise ValueError(_("Group %(group)s doesn't exist") % locals())
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
630 os.setgid(gid)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
631
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
632
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
633 def setuid(user):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
634 if not hasattr(os, 'getuid'):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
635 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
636
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
637 # People can remove this check if they're really determined
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
638 if user is None:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
639 if os.getuid():
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
640 return
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
641 raise ValueError(_("Can't run as root!"))
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
642
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
643 if os.getuid():
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
644 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
645 return
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
646
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
647 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
648 import pwd
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
649 except ImportError:
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
650 raise ValueError(_("Can't change users - no pwd module"))
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
651 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
652 try:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
653 uid = int(user)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
654 except ValueError:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
655 uid = pwd.getpwnam(user)[2]
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
656 else:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
657 pwd.getpwuid(uid)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
658 except KeyError:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
659 raise ValueError(_("User %(user)s doesn't exist") % locals())
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
660 os.setuid(uid)
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
661
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
662
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
663 class TrackerHomeOption(configuration.FilePathOption):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
664
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
665 # Tracker homes do not need any description strings
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
666 def format(self):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
667 return "%(name)s = %(value)s\n" % {
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
668 "name": self.setting,
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
669 "value": self.value2str(self._value),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
670 }
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
671
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
672
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
673 class ServerConfig(configuration.Config):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
674
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
675 SETTINGS = (
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
676 ("main", (
4489
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
677 (configuration.Option, "host", "localhost",
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
678 "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
679 "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
680 "will be used.\n"
47bd330e3d17 Fix documentation for roundup-server about the 'host' parameter...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4475
diff changeset
681 "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
682 "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
683 "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
684 "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
685 "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
686 "in a future release."),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
687 (configuration.IntegerNumberOption, "port", DEFAULT_PORT,
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
688 "Port to listen on."),
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
689 (configuration.NullableFilePathOption, "favicon", "favicon.ico",
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
690 "Path to favicon.ico image file."
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
691 " If unset, built-in favicon.ico is used."),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
692 (configuration.NullableOption, "user", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
693 "User ID as which the server will answer requests.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
694 "In order to use this option, "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
695 "the server must be run initially as root.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
696 "Availability: Unix."),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
697 (configuration.NullableOption, "group", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
698 "Group ID as which the server will answer requests.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
699 "In order to use this option, "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
700 "the server must be run initially as root.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
701 "Availability: Unix."),
7387
46f92ac4e170 - issue2551275 - Allow configuring max_children in roundup-server.
John Rouillard <rouilj@ieee.org>
parents: 7112
diff changeset
702 (configuration.IntegerNumberOption, "max_children", 40,
46f92ac4e170 - issue2551275 - Allow configuring max_children in roundup-server.
John Rouillard <rouilj@ieee.org>
parents: 7112
diff changeset
703 "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
704 "multiprocess mode."),
3787
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
705 (configuration.BooleanOption, "nodaemon", "no",
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
706 "don't fork (this overrides the pidfile mechanism)'"),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
707 (configuration.BooleanOption, "log_hostnames", "no",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
708 "Log client machine names instead of IP addresses "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
709 "(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
710 (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
711 "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
712 "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
713 "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
714 "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
715 (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
716 "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
717 "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
718 "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
719 "trusted reverse proxy."),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
720 (configuration.NullableFilePathOption, "pidfile", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
721 "File to which the server records "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
722 "the process id of the daemon.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
723 "If this option is not set, "
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
724 "the server will run in foreground\n"),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
725 (configuration.NullableFilePathOption, "logfile", "",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
726 "Log file path. If unset, log to stderr."),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
727 (configuration.Option, "multiprocess", DEFAULT_MULTIPROCESS,
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
728 "Set processing of each request in separate subprocess.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
729 "Allowed values: %s." % ", ".join(MULTIPROCESS_TYPES)),
3880
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
730 (configuration.NullableFilePathOption, "template", "",
2359d6304a4f Allow template for tracker index page
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3849
diff changeset
731 "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
732 (configuration.BooleanOption, "ssl", "no",
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
733 "Enable SSL support (requires pyopenssl)"),
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
734 (configuration.NullableFilePathOption, "pem", "",
8031
0f5d31be5418 issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents: 8000
diff changeset
735 "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
736 "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
737 '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
738 '"-----END PRIVATE KEY-----" and '
0f5d31be5418 issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents: 8000
diff changeset
739 '"-----BEGIN CERTIFICATE-----",\n'
0f5d31be5418 issue2551219 - use of PEM file with roundup-server
John Rouillard <rouilj@ieee.org>
parents: 8000
diff changeset
740 '"-----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
741 "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
742 (configuration.WordListOption, "include_headers", "",
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
743 "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
744 "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
745 "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
746 "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
747 "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
748 (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
749 "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
750
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
751 )),
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
752 ("trackers", (), "Roundup trackers to serve.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
753 "Each option in this section defines single Roundup tracker.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
754 "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
755 "Option value is tracker home directory path.\n"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
756 "The path may be either absolute or relative\n"
5102
96dc9f07340a issue2161722: oudated docs
John Rouillard <rouilj@ieee.org>
parents: 4913
diff changeset
757 "to the directory containing this config file."),
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
758 )
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
759
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
760 # options recognized by config
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
761 OPTIONS = {
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
762 "host": "n:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
763 "port": "p:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
764 "group": "g:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
765 "user": "u:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
766 "logfile": "l:",
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
767 "pidfile": "d:",
3784
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
768 "nodaemon": "D",
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
769 "log_hostnames": "N",
7387
46f92ac4e170 - issue2551275 - Allow configuring max_children in roundup-server.
John Rouillard <rouilj@ieee.org>
parents: 7112
diff changeset
770 "max_children": "m:",
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
771 "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
772 "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
773 "loghttpvialogger": 'L',
8169
627c5d6a0551 allow roundup-server to log real client IP behind reverse proxy
John Rouillard <rouilj@ieee.org>
parents: 8038
diff changeset
774 "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
775 "ssl": "s",
1165f2204542 Ooops...not sure where those tabs came from. Making them spaces.
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3883
diff changeset
776 "pem": "e:",
6436
1f2f7c0b8968 issue2550837 - New option for web auth (also http header passing)
John Rouillard <rouilj@ieee.org>
parents: 6420
diff changeset
777 "include_headers": "I:",
6514
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
778 "http_version": 'V:',
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
779 }
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
780
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
781 def __init__(self, config_file=None):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
782 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
783 self.sections.append("trackers")
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
784
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
785 def _adjust_options(self, config):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
786 """Add options for tracker homes"""
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
787 # return early if there are no tracker definitions.
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
788 # trackers must be specified on the command line.
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
789 if not config.has_section("trackers"):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
790 return
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
791 # config defaults appear in all sections.
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
792 # filter them out.
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5386
diff changeset
793 defaults = list(config.defaults().keys())
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
794 for name in config.options("trackers"):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
795 if name not in defaults:
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
796 self.add_option(TrackerHomeOption(self, "trackers", name))
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
797
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
798 def getopt(self, args, short_options="", long_options=(),
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
799 config_load_options=("C", "config"), **options):
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
800 options.update(self.OPTIONS)
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
801 return configuration.Config.getopt(
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
802 self, args, short_options, long_options,
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
803 config_load_options, **options)
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
804
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
805 def _get_name(self):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
806 return "Roundup server"
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
807
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
808 def trackers(self):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
809 """Return tracker definitions as a list of (name, home) pairs"""
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
810 trackers = []
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
811 for option in self._get_section_options("trackers"):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
812 trackers.append((option, os.path.abspath(
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
813 self["TRACKERS_" + option.upper()])))
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
814 return trackers
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
815
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
816 def set_logging(self):
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
817 """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
818 # 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
819 # text files)
fb9abb842f36 Fix roundup-server logging for Python 3.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5432
diff changeset
820 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
821
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
822 def get_server(self):
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
823 """Return HTTP server object to run"""
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
824 # 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
825 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
826
2848
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
827 # 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
828 tracker_homes = self.trackers()
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
829 if self["MULTIPROCESS"] == "debug":
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
830 trackers = None
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
831 else:
2852
37e6ebd5ba29 when preloading trackers (not running in 'debug' mode)...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2848
diff changeset
832 trackers = dict([(name, roundup.instance.open(home, optimize=1))
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
833 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
834
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
835 # build customized request handler class
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
836 class RequestHandler(RoundupRequestHandler):
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
837 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
838 TRACKER_HOMES = dict(tracker_homes)
e8cb25c30ac9 added multiprocess mode "debug" - run single process...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2843
diff changeset
839 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
840 DEBUG_MODE = self["MULTIPROCESS"] == "debug"
3438
4963c853d51b added favicon config option (patch [SF#1355661])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3428
diff changeset
841 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
842
4276
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
843 def setup(self):
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
844 if self.CONFIG["SSL"]:
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
845 # 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
846 # 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
847 # 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
848 self.request.do_handshake()
6514
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
849 RoundupRequestHandler.protocol_version = \
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
850 self.CONFIG["HTTP_VERSION"]
4276
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
851 RoundupRequestHandler.setup(self)
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
852
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
853 def finish(self):
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
854 RoundupRequestHandler.finish(self)
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
855 if self.CONFIG["SSL"]:
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
856 self.request.shutdown()
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
857 self.request.close()
0c024cf74252 Correct initial- and end-handshakes for SSL
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4273
diff changeset
858
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
859 if self["SSL"]:
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
860 base_server = SecureHTTPServer
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
861 else:
4273
0a684518d609 More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4258
diff changeset
862 # time out after a minute if we can
0a684518d609 More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4258
diff changeset
863 # 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
864 # socket, so we do this only for non-SSL connections.
0a684518d609 More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4258
diff changeset
865 if hasattr(socket, 'setdefaulttimeout'):
0a684518d609 More SSL fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4258
diff changeset
866 socket.setdefaulttimeout(60)
5409
277e91bf7936 Python 3 preparation: update BaseHTTPServer imports.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5405
diff changeset
867 base_server = http_.server.HTTPServer
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
868
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
869 # obtain request server class
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
870 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
871 print(_("Multiprocess mode \"%s\" is not available, "
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
872 "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
873 self["MULTIPROCESS"] = "none"
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
874 server_class = base_server
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
875 elif self["MULTIPROCESS"] == "fork":
5410
d0816d50ee8f Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5409
diff changeset
876 class ForkingServer(socketserver.ForkingMixIn,
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
877 base_server):
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
878 pass
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
879 server_class = ForkingServer
7387
46f92ac4e170 - issue2551275 - Allow configuring max_children in roundup-server.
John Rouillard <rouilj@ieee.org>
parents: 7112
diff changeset
880 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
881 elif self["MULTIPROCESS"] == "thread":
5410
d0816d50ee8f Python 3 preparation: update SocketServer import.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5409
diff changeset
882 class ThreadingServer(socketserver.ThreadingMixIn,
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
883 base_server):
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
884 pass
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
885 server_class = ThreadingServer
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
886 else:
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
887 server_class = base_server
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
888
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
889 # obtain server before changing user id - allows to
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
890 # use port < 1024 if started as root
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
891 try:
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
892 args = ((self["HOST"], self["PORT"]), RequestHandler)
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
893 kwargs = {}
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
894 if self["SSL"]:
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
895 kwargs['ssl_pem'] = self["PEM"]
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
896 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
897 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
898 if e.args[0] == errno.EADDRINUSE:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
899 raise socket.error(_("Unable to bind to port %s, "
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
900 "port already in use.") % self["PORT"])
6743
d659cfa8439c Make roundup-server EACCES errors clearer
John Rouillard <rouilj@ieee.org>
parents: 6718
diff changeset
901 if e.args[0] == errno.EACCES:
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
902 raise socket.error(_(
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
903 "Unable to bind to port %(port)s, "
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
904 "access not allowed, "
7750
216662fbaaee fix(i18n): fix incorrect lookup of some translations
John Rouillard <rouilj@ieee.org>
parents: 7701
diff changeset
905 "errno: %(errno)s %(msg)s") % {
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
906 "port": self["PORT"],
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
907 "errno": e.args[0],
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
908 "msg": e.args[1]}
7750
216662fbaaee fix(i18n): fix incorrect lookup of some translations
John Rouillard <rouilj@ieee.org>
parents: 7701
diff changeset
909 )
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
910
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
911 raise
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
912 # change user and/or group
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
913 setgid(self["GROUP"])
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
914 setuid(self["USER"])
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
915 # return the server
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
916 return httpd
2230
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
917
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
918
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
919 try:
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
920 import win32serviceutil
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
921 except ImportError:
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
922 RoundupService = None
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
923 else:
2230
ca2664e095be disable forking server when os.fork() not available [SF#938586]
Richard Jones <richard@users.sourceforge.net>
parents: 2200
diff changeset
924
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
925 # allow the win32
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
926 import win32service
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
927
5266
e9158c0a6eba Python 2 and 3 support. Convert Exception to BaseException scripts.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
928 class SvcShutdown(BaseException):
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
929 pass
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
930
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
931 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
932
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
933 _svc_name_ = "roundup"
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
934 _svc_display_name_ = "Roundup Bug Tracker"
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
935
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
936 running = 0
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
937 server = None
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
938
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
939 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
940 import servicemanager
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
941 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
942 config = ServerConfig()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
943 (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
944 if not config["LOGFILE"]:
6972
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
945 servicemanager.LogMsg(
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
946 servicemanager.EVENTLOG_ERROR_TYPE,
8e4028669d2a flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6834
diff changeset
947 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
948 (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
949 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
950 return
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
951 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
952 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
953 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
954 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
955 servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
956 servicemanager.PYS_SERVICE_STARTED,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
957 (self._svc_display_name_,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
958 " at %s:%s" % (config["HOST"],
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
959 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
960 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
961 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
962 servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
963 servicemanager.PYS_SERVICE_STOPPED,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
964 (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
965 self.ReportServiceStatus(win32service.SERVICE_STOPPED)
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
966
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
967 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
968 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
969 # 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
970 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
971 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
972 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
973 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
974 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
975 sock.close()
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
976 self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
977
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
978
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
979 def usage(message=''):
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
980 if RoundupService:
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
981 os_part = \
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
982 ""''' -c <Command> Windows Service options.
2521
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
983 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
984 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
985 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
986 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
987 specifics.'''
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
988 else:
2521
8822780fa519 mark non-windows usage part for translation;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2483
diff changeset
989 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
990 -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
991 -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
992 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
993 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
994 -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
995 if message:
6514
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
996 message += '\n\n'
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
997 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
998
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
999 Options:
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
1000 -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
1001 -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
1002 -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
1003 -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
1004 -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
1005 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
1006 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
1007 to all network interfaces
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
1008 -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
1009 -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
1010 -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
1011 -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
1012 -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
1013 -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
1014 -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
1015 -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
1016 -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
1017 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
1018 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
1019 -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
1020 -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
1021 Allowed values: %(mp_types)s.
6514
a036712c96f4 Enable HTTP/1.1 support for roundup-server
John Rouillard <rouilj@ieee.org>
parents: 6502
diff changeset
1022 -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
1023 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
1024
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
1025 %(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
1026
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
1027 Long options:
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
1028 --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
1029 --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
1030 --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
1031 --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
1032 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
1033 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
1034
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
1035 Examples:
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
1036
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
1037 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
1038 -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
1039 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
1040
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
1041 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
1042
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
1043 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
1044
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
1045 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
1046 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
1047
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
1048 Configuration file format:
2842
98e2e7b57101 roundup service name changed to single word "roundup"...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2840
diff changeset
1049 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
1050 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
1051 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
1052 for option descriptions.
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
1053
2483
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
1054 How to use "name=tracker home":
55b496fb7b5b better roundup-server usage string [SF#973352]
Richard Jones <richard@users.sourceforge.net>
parents: 2481
diff changeset
1055 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
1056 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
1057 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
1058 "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
1059 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
1060 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
1061 ''') % {
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
1062 "message": message,
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
1063 "os_part": os_part,
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
1064 "port": DEFAULT_PORT,
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
1065 "mp_def": DEFAULT_MULTIPROCESS,
46ad912ddd2b describe -t option in help; remove unused win32 imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2842
diff changeset
1066 "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
1067 })
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1068
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
1069
3784
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
1070 def writepidfile(pidfile):
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
1071 ''' 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
1072 pid = os.getpid()
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
1073 if pid:
3787
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1074 pidfile = open(pidfile, 'w')
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1075 pidfile.write(str(pid))
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1076 pidfile.close()
3784
93dfda74a763 allow use of roundup-server pidfile without forking [SF#1614753]
Richard Jones <richard@users.sourceforge.net>
parents: 3736
diff changeset
1077
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1078
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1079 def daemonize(pidfile):
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1080 ''' Turn this process into a daemon.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1081 - 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
1082 - make our parent PID 1
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1083
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1084 Write our new PID to the pidfile.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1085
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1086 From A.M. Kuuchling (possibly originally Greg Ward) with
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1087 modification from Oren Tirosh, and finally a small mod from me.
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1088 '''
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1089 # Fork once
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1090 if os.fork() != 0:
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1091 os._exit(0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1092
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1093 # Create new session
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1094 os.setsid()
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1095
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1096 # Second fork to force PPID=1
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1097 pid = os.fork()
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1098 if pid:
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1099 pidfile = open(pidfile, 'w')
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1100 pidfile.write(str(pid))
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1101 pidfile.close()
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
1102 os._exit(0)
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1103
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2181
diff changeset
1104 os.chdir("/")
1072
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1105
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1106 # 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
1107 # descriptors can't be used again
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1108 devnull = os.open('/dev/null', 0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1109 os.dup2(devnull, 0)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1110 os.dup2(devnull, 1)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1111 os.dup2(devnull, 2)
88ded00fa0e0 better daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 1047
diff changeset
1112
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1113
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1114 undefined = []
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1115
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1116
2637
11811b313459 The demo.py script works again using the new configuration system.
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1117 def run(port=undefined, success_message=None):
1249
6c24a86a12ae Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents: 1183
diff changeset
1118 ''' 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
1119 '''
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1120 config = ServerConfig()
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
1121 # additional options
5957
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1122 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
1123 try:
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1124 (optlist, args) = config.getopt(sys.argv[1:],
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1125 short_options,
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1126 ("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
1127 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
1128 usage(str(e))
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1129 return
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1130
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1131 # 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
1132 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
1133 global RoundupService
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1134 if not RoundupService:
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1135 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
1136 error_m = """
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1137 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
1138 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
1139 for pywin32 details.
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1140 """
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1141 usage(error_m)
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1142 return
f822a91b3778 Better error message running with -c and pywin32 is not importable.
John Rouillard <rouilj@ieee.org>
parents: 5837
diff changeset
1143
2840
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1144 # 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
1145 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
1146 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
1147 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
1148 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
1149 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
1150 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
1151 long_name += "="
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1152 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
1153 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
1154 svc_args = []
a212699c21f2 windows service part rewritten to take in account command line options;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2838
diff changeset
1155 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
1156 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
1157 # 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
1158 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
1159 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
1160 # 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
1161 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
1162 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
1163 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
1164 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
1165 # pass the control to serviceutil
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
1166 win32serviceutil.HandleCommandLine(RoundupService,
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1167 argv=sys.argv[:1] + args)
2838
91b2d50f0b1a eliminate as many pychecker warnings as possible:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2835
diff changeset
1168 return
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
1169
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1170 # add tracker names from command line.
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1171 # 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
1172 if args:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1173 for arg in args:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1174 try:
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1175 name, home = arg.split('=')
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1176 except ValueError:
5378
35ea9b1efc14 Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
1177 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
1178 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
1179 config["TRACKERS_" + name.upper()] = home
2308
e21c3a447a62 translate "cannot fork" error message
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2287
diff changeset
1180
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1181 # handle remaining options
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1182 if optlist:
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1183 for (opt, _arg) in optlist:
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1184 if opt in ("-h", "--help"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1185 usage()
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1186 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
1187 print('%s (python %s)' % (roundup_version,
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1188 sys.version.split()[0]))
2771
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1189 elif opt in ("-S", "--save-config"):
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1190 config.save()
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
1191 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
1192 # 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
1193 return
d385f6c1d4ed let config handle command line options.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2676
diff changeset
1194
2774
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
1195 # 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
1196 if port is not undefined:
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
1197 config.PORT = port
22c381f3f448 respect function argument 'port' in run()
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2773
diff changeset
1198
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1199 if config["LOGFILE"]:
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1200 config["LOGFILE"] = os.path.abspath(config["LOGFILE"])
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1201 # switch logging from stderr/stdout to logfile
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1202 config.set_logging()
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1203 if config["PIDFILE"]:
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1204 config["PIDFILE"] = os.path.abspath(config["PIDFILE"])
8297
03513f5066f3 fix: issue2551238 - roundup-server should exit with error ...
John Rouillard <rouilj@ieee.org>
parents: 8269
diff changeset
1205 if not (config["LOGFILE"] or config["LOGHTTPVIALOGGER"]):
03513f5066f3 fix: issue2551238 - roundup-server should exit with error ...
John Rouillard <rouilj@ieee.org>
parents: 8269
diff changeset
1206 print(_("If you specify a PID file you must use -l or -L."))
03513f5066f3 fix: issue2551238 - roundup-server should exit with error ...
John Rouillard <rouilj@ieee.org>
parents: 8269
diff changeset
1207 sys.exit(1)
3112
a7657b3cd22a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3022
diff changeset
1208
2632
9c55f2bc5961 roundup-server now has a configuration file (-C option)
Richard Jones <richard@users.sourceforge.net>
parents: 2592
diff changeset
1209 # 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
1210 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
1211 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
1212 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
1213 " 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
1214 sys.exit(0)
1632
eb4d04a9d647 added Windows Service mode for roundup-server...
Richard Jones <richard@users.sourceforge.net>
parents: 1611
diff changeset
1215 else:
3787
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1216 if config['NODAEMON']:
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1217 writepidfile(config["PIDFILE"])
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1218 else:
f623bdafe44b expand tabs
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3784
diff changeset
1219 daemonize(config["PIDFILE"])
1953
800b226bba58 fix roundup win service
Richard Jones <richard@users.sourceforge.net>
parents: 1939
diff changeset
1220
2835
9a6b451b1ba6 implement threading server;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2774
diff changeset
1221 # 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
1222 try:
320a1692a473 Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents: 5667
diff changeset
1223 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
1224 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
1225 # 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
1226 print(e)
320a1692a473 Fix exception handling code for case where port already in use.
John Rouillard <rouilj@ieee.org>
parents: 5667
diff changeset
1227 sys.exit(2)
1047
1890c611de08 add daemonification
Richard Jones <richard@users.sourceforge.net>
parents: 992
diff changeset
1228
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
1229 if success_message:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
1230 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
1231 else:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
1232 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
1233 % config)
1868
1545a36ae887 Use roundup_server script in demo.py to reduce duplication
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1867
diff changeset
1234
1311
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
1235 try:
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
1236 httpd.serve_forever()
7c9fda4a6692 handle KeyboardInterrupt nicely
Richard Jones <richard@users.sourceforge.net>
parents: 1299
diff changeset
1237 except KeyboardInterrupt:
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5356
diff changeset
1238 print('Keyboard Interrupt: exiting')
7655
91fad2d2c4b3 fix: exit quickly on keyboard interrupt
John Rouillard <rouilj@ieee.org>
parents: 7574
diff changeset
1239 try:
91fad2d2c4b3 fix: exit quickly on keyboard interrupt
John Rouillard <rouilj@ieee.org>
parents: 7574
diff changeset
1240 httpd.socket.shutdown(socket.SHUT_RDWR)
91fad2d2c4b3 fix: exit quickly on keyboard interrupt
John Rouillard <rouilj@ieee.org>
parents: 7574
diff changeset
1241 except OSError:
91fad2d2c4b3 fix: exit quickly on keyboard interrupt
John Rouillard <rouilj@ieee.org>
parents: 7574
diff changeset
1242 # forced shutdown can throw an error.
91fad2d2c4b3 fix: exit quickly on keyboard interrupt
John Rouillard <rouilj@ieee.org>
parents: 7574
diff changeset
1243 # 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
1244 pass
6718
06d750efbc50 Fix ResourceWarning error due to unclosed socket on exit from roundup_server.
John Rouillard <rouilj@ieee.org>
parents: 6646
diff changeset
1245 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
1246
6040
d5c51d1ef09c flake8 whitespace format fixes.
John Rouillard <rouilj@ieee.org>
parents: 5957
diff changeset
1247
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1248 if __name__ == '__main__':
593
2256f81293c1 Conversion to generated script stubs
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 592
diff changeset
1249 run()
592
326388b8604a Moved scripts from top-level dir to roundup.scripts subpackage
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
diff changeset
1250
3883
679118b572d5 add SSL to roundup-server via pyopenssl
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3880
diff changeset
1251 # vim: sts=4 sw=4 et si

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