view roundup/scripts/roundup_xmlrpc_server.py @ 3916:57ad3e2c2545

handle bad cookies Roundup's cgi gets all cookies from all apps on the same server. some apps aren't as well behaved as roundup and generate cookies that do not follow the spec perfectly. This causes python's Cookie module to throw an exception when trying to parse them. In the spirit of being liberal in what we accept, we create a LiberalCookie class that can handle those out-of-spec cookies and allow roundup to continue onward. [SF#1691708] code from S. Woodside
author Justus Pendleton <jpend@users.sourceforge.net>
date Sat, 22 Sep 2007 21:20:57 +0000
parents cf6c45201980
children edf526c91412
line wrap: on
line source

#! /usr/bin/env python
#
# Copyright (C) 2007 Stefan Seefeld
# All rights reserved.
# For license terms see the file COPYING.txt.
#

import getopt, os, sys, socket
from roundup.xmlrpc import RoundupServer, RoundupRequestHandler
from roundup.instance import TrackerError
from SimpleXMLRPCServer import SimpleXMLRPCServer

def usage():
    print """

Options:
 -i instance home  -- specify the issue tracker "home directory" to administer
 -V                -- be verbose when importing
 -p, --port <port> -- port to listen on

"""

def run():

    try:
        opts, args = getopt.getopt(sys.argv[1:],
                                   'e:i:p:V', ['encoding=', 'port='])
    except getopt.GetoptError, e:
        usage()
        return 1

    verbose = False
    tracker = ''
    port = 8000
    encoding = None

    for opt, arg in opts:
        if opt == '-V':
            verbose = True
        elif opt == '-i':
            tracker = arg
        elif opt in ['-p', '--port']:
            port = int(arg)
        elif opt in ['-e', '--encoding']:
            encoding = encoding

        if sys.version_info[0:2] < (2,5):
            if encoding:
                print 'encodings not supported with python < 2.5'
                sys.exit(-1)
            server = SimpleXMLRPCServer(('', port), RoundupRequestHandler)
        else:
            server = SimpleXMLRPCServer(('', port), RoundupRequestHandler,
                                        allow_none=True, encoding=encoding)
    if not os.path.exists(tracker):
        print 'Instance home does not exist.'
        sys.exit(-1)
    try:
        object = RoundupServer(tracker, verbose)
    except TrackerError:
        print 'Instance home does not exist.'
        sys.exit(-1)

    server.register_instance(object)

    # Go into the main listener loop
    print 'Roundup XMLRPC server started on %s:%d' \
          % (socket.gethostname(), port)
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        print 'Keyboard Interrupt: exiting'

if __name__ == '__main__':
    run()

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