*** ZopeHTTPServer.py.~1~ Mon Feb 22 17:10:49 1999 --- ZopeHTTPServer.py Wed Mar 24 16:34:58 1999 *************** *** 399,413 **** pass ! def try_to_become_nobody(): ! # from CGIHTTPServer try: import pwd except: return try: ! nobody = pwd.getpwnam('nobody')[2] except pwd.error: ! nobody = 1 + max(map(lambda x: x[2], pwd.getpwall())) ! try: os.setuid(nobody) except os.error: pass def set_published_module(file,klass,env=None): --- 399,413 ---- pass ! def try_to_become_somebody(uid='nobody'): ! # from CGIHTTPServer, modified to be more abstract try: import pwd except: return try: ! whoami = pwd.getpwnam(uid)[2] except pwd.error: ! whoami = 1 + max(map(lambda x: x[2], pwd.getpwall())) ! try: os.setuid(whoami) except os.error: pass def set_published_module(file,klass,env=None): *************** *** 432,438 **** __import__(name) # to catch problem modules right away print "Publishing module %s" % name ! def start(module_file, host='', port=8080, threading=None,env=None): set_published_module(module_file,BoboRequestHandler,env) server_address = (host, port) if threading: --- 432,438 ---- __import__(name) # to catch problem modules right away print "Publishing module %s" % name ! def start(module_file, host='', port=8080, threading=None,env=None,uid="nobody"): set_published_module(module_file,BoboRequestHandler,env) server_address = (host, port) if threading: *************** *** 448,454 **** httpd = NonThreadingHTTPServer(server_address, BoboRequestHandler) print "Serving HTTP on port", port, "..." ! try_to_become_nobody() try: httpd.serve_forever() except: --- 448,454 ---- httpd = NonThreadingHTTPServer(server_address, BoboRequestHandler) print "Serving HTTP on port", port, "..." ! try_to_become_somebody(uid) try: httpd.serve_forever() except: *************** *** 463,469 **** def main(args=None): args=args or sys.argv[1:] import getopt ! optlist, args=getopt.getopt(args,"tp:h:P:s:") if len(args) < 1: die() env={} --- 463,469 ---- def main(args=None): args=args or sys.argv[1:] import getopt ! optlist, args=getopt.getopt(args,"tp:h:P:s:u:") if len(args) < 1: die() env={} *************** *** 482,487 **** --- 482,488 ---- port=9673 threading=None host='' + uid='nobody' for k,v in optlist: if k=="-p": port=string.atoi(v) *************** *** 495,500 **** while v[:1]=='/': v=v[1:] while v[-1:]=='/': v=v[:-1] BoboRequestHandler.script="/%s/" % v ! start(module_file,host,port,threading,env) if __name__=="__main__": main() --- 496,503 ---- while v[:1]=='/': v=v[1:] while v[-1:]=='/': v=v[:-1] BoboRequestHandler.script="/%s/" % v ! elif k=='-u': ! uid=v ! start(module_file,host,port,threading,env,uid) if __name__=="__main__": main()