annotate server.py @ 19:a5eb90ae8903

Fixed a bug in the filter wrong variable names in the error message. Recognised that the filter has an outstanding bug. Hrm. we need a bug tracker for this project :)
author Richard Jones <richard@users.sourceforge.net>
date Fri, 20 Jul 2001 08:20:24 +0000
parents cdb38951a7ab
children af157c0a36a3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 #!/usr/bin/python
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 """ HTTP Server that serves roundup.
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 Stolen from CGIHTTPServer
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5
11
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
6 $Id: server.py,v 1.4 2001-07-19 10:43:01 anthonybaxter Exp $
5
72a0ba086b3e Added CVS keywords $Id$ and $Log$ to all python files.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 0
diff changeset
7
0
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 """
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 import sys
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 if int(sys.version[0]) < 2:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 print "Content-Type: text/plain\n"
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 print "Roundup requires Python 2.0 or newer."
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14 __version__ = "0.1"
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 __all__ = ["CGIHTTPRequestHandler"]
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 import os, urllib, StringIO, traceback, cgi, binascii
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19 import BaseHTTPServer
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20 import SimpleHTTPServer
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21 import date, hyperdb, template, roundupdb, roundup_cgi
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 import cgitb
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24 class RoundupRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 def send_head(self):
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 """Version of send_head that support CGI scripts"""
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 return self.run_cgi()
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 def run_cgi(self):
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 """Execute a CGI script."""
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 rest = self.path
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 i = rest.rfind('?')
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 if i >= 0:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 rest, query = rest[:i], rest[i+1:]
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 else:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 query = ''
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 # Set up the CGI environment
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 env = {}
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 env['REQUEST_METHOD'] = self.command
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 env['PATH_INFO'] = urllib.unquote(rest)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 if query:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 env['QUERY_STRING'] = query
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 host = self.address_string()
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 if self.headers.typeheader is None:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 env['CONTENT_TYPE'] = self.headers.type
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 else:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 env['CONTENT_TYPE'] = self.headers.typeheader
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 length = self.headers.getheader('content-length')
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 if length:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 env['CONTENT_LENGTH'] = length
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 co = filter(None, self.headers.getheaders('cookie'))
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 if co:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 env['HTTP_COOKIE'] = ', '.join(co)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 env['SCRIPT_NAME'] = ''
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 env['SERVER_NAME'] = self.server.server_name
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 env['SERVER_PORT'] = str(self.server.server_port)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 decoded_query = query.replace('+', ' ')
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 # if root, setuid to nobody
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 if not os.getuid():
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 nobody = nobody_uid()
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 os.setuid(nobody)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 # TODO check for file timestamp changes
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 reload(date)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 reload(hyperdb)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 reload(roundupdb)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 reload(template)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 reload(roundup_cgi)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 # initialise the roundupdb, check for auth
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 db = roundupdb.openDB('db', 'admin')
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75 message = 'Unauthorised'
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 auth = self.headers.getheader('authorization')
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 if auth:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 l = binascii.a2b_base64(auth.split(' ')[1]).split(':')
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 user = l[0]
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 password = None
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 if len(l) > 1:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 password = l[1]
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 try:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 uid = db.user.lookup(user)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 except KeyError:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 auth = None
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 message = 'Username not recognised'
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 else:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 if password != db.user.get(uid, 'password'):
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 message = 'Incorrect password'
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 auth = None
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 db.close()
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 del db
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 if not auth:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 self.send_response(401)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 self.send_header('Content-Type', 'text/html')
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 self.send_header('WWW-Authenticate', 'basic realm="Roundup"')
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98 self.end_headers()
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 self.wfile.write(message)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 return
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 self.send_response(200, "Script output follows")
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 # do the roundup thang
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 save_stdin = sys.stdin
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 try:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 sys.stdin = self.rfile
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 client = roundup_cgi.Client(self.wfile, env, user)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 client.main()
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 except roundup_cgi.Unauthorised:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111 self.wfile.write('Content-Type: text/html\n')
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 self.wfile.write('Status: 403\n')
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113 self.wfile.write('Unauthorised')
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114 except:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 try:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116 reload(cgitb)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 self.wfile.write(cgitb.breaker())
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 self.wfile.write(cgitb.html())
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 except:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 self.wfile.write("Content-Type: text/html\n\n")
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 self.wfile.write("<pre>")
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 s = StringIO.StringIO()
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 traceback.print_exc(None, s)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 self.wfile.write(cgi.escape(s.getvalue()))
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125 self.wfile.write("</pre>\n")
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 sys.stdin = save_stdin
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 do_POST = run_cgi
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 nobody = None
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 def nobody_uid():
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 """Internal routine to get nobody's uid"""
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 global nobody
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
135 if nobody:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136 return nobody
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 try:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 import pwd
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 except ImportError:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 return -1
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 try:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 nobody = pwd.getpwnam('nobody')[2]
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 except KeyError:
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 nobody = 1 + max(map(lambda x: x[2], pwd.getpwall()))
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 return nobody
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146
11
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
147 def main():
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
148 from config import HTTP_HOST, HTTP_PORT
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
149 address = (HTTP_HOST, HTTP_PORT)
0
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
150 httpd = BaseHTTPServer.HTTPServer(address, RoundupRequestHandler)
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 print 'Roundup server started on', address
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 httpd.serve_forever()
5e92642cd1f8 Initial import of code
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153
11
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
154 if __name__ == '__main__':
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
155 main()
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
156
5
72a0ba086b3e Added CVS keywords $Id$ and $Log$ to all python files.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 0
diff changeset
157 #
72a0ba086b3e Added CVS keywords $Id$ and $Log$ to all python files.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 0
diff changeset
158 # $Log: not supported by cvs2svn $
11
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
159 # Revision 1.3 2001/07/19 06:27:07 anthonybaxter
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
160 # fixing (manually) the (dollarsign)Log(dollarsign) entries caused by
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
161 # my using the magic (dollarsign)Id(dollarsign) and (dollarsign)Log(dollarsign)
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
162 # strings in a commit message. I'm a twonk.
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
163 #
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
164 # Also broke the help string in two.
cdb38951a7ab HTTP_HOST and HTTP_PORT config options.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 9
diff changeset
165 #
9
3b0a72f54613 fixing (manually) the (dollarsign)Log(dollarsign)...
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 5
diff changeset
166 # Revision 1.2 2001/07/19 05:52:22 anthonybaxter
3b0a72f54613 fixing (manually) the (dollarsign)Log(dollarsign)...
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 5
diff changeset
167 # Added CVS keywords Id and Log to all python files.
3b0a72f54613 fixing (manually) the (dollarsign)Log(dollarsign)...
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 5
diff changeset
168 #
5
72a0ba086b3e Added CVS keywords $Id$ and $Log$ to all python files.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 0
diff changeset
169 #
72a0ba086b3e Added CVS keywords $Id$ and $Log$ to all python files.
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 0
diff changeset
170

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