106 lines
2.9 KiB
Python
106 lines
2.9 KiB
Python
#!/usr/bin/python
|
|
|
|
import os
|
|
import os.path
|
|
import sys
|
|
import getopt
|
|
import pyzor
|
|
import pyzor.server
|
|
import ConfigParser
|
|
|
|
_author__ = pyzor.__author__
|
|
__version__ = pyzor.__version__
|
|
__revision__ = "$Id: pyzord,v 1.23 2002-10-09 00:33:44 ftobin Exp $"
|
|
progname = 'pyzord'
|
|
|
|
default_anonymous_allows = map(pyzor.Opname, ['check', 'report', 'ping',
|
|
'info'])
|
|
|
|
|
|
def usage():
|
|
sys.stderr.write("usage: %s [-d] [--homedir dir]\n" % progname)
|
|
sys.exit(1)
|
|
|
|
|
|
def load_access_file(access_fn, server):
|
|
server.acl = pyzor.server.ACL()
|
|
if os.path.exists(access_fn):
|
|
pyzor.server.AccessFile(open(access_fn)).feed_into(server.acl)
|
|
else:
|
|
output.warn("%s does not exist; using default ACL: allowing anonymous to do %s"
|
|
% (access_fn, default_anonymous_allows))
|
|
for op in default_anonymous_allows:
|
|
server.acl.add_entry(pyzor.server.ACLEntry((pyzor.anonymous_user,
|
|
op,
|
|
True)))
|
|
|
|
|
|
def load_passwd_file(access_fn, server):
|
|
server.passwd = pyzor.server.Passwd()
|
|
if os.path.exists(passwd_fn):
|
|
for user, key in pyzor.server.PasswdFile(open(passwd_fn)):
|
|
server.passwd[user] = key
|
|
|
|
|
|
########################################################################
|
|
# functions above, run below
|
|
|
|
# set umask
|
|
os.umask(0077)
|
|
|
|
debug = 0
|
|
(options, args) = getopt.getopt(sys.argv[1:], 'dh:', ['homedir='])
|
|
if len(args) != 0:
|
|
usage()
|
|
|
|
specified_homedir = None
|
|
|
|
for (o, v) in options:
|
|
if o == '-d':
|
|
debug = 1
|
|
elif o == '-h':
|
|
usage()
|
|
elif o == '--homedir':
|
|
specified_homedir = v
|
|
|
|
homedir = pyzor.get_homedir(specified_homedir)
|
|
|
|
if not os.path.exists(homedir):
|
|
os.mkdir(homedir)
|
|
|
|
defaults = {'port': '24441',
|
|
'listenaddress': '0.0.0.0',
|
|
'digestdb': 'pyzord.db',
|
|
'passwdfile': 'pyzord.passwd',
|
|
'accessfile': 'pyzord.access',
|
|
'CleanupAge': "%d" % pyzor.server.DBHandle.max_age,
|
|
}
|
|
|
|
config = pyzor.Config(homedir)
|
|
config.add_section('server')
|
|
|
|
for k, v in defaults.items():
|
|
config.set('server', k, v)
|
|
|
|
config.read(os.path.join(homedir, 'config'))
|
|
|
|
port = config.getint('server', 'port')
|
|
listen_adr = config.get('server', 'ListenAddress')
|
|
|
|
dbfile = config.get_filename('server', 'DigestDB')
|
|
passwd_fn = config.get_filename('server', 'passwdfile')
|
|
access_fn = config.get_filename('server', 'accessfile')
|
|
pyzor.server.DBHandle.max_age = config.getint('server', 'CleanupAge')
|
|
|
|
output = pyzor.Output(debug=debug)
|
|
|
|
pyzor.server.DBHandle.initialize(dbfile, 'c')
|
|
server = pyzor.server.Server((listen_adr, port),
|
|
pyzor.server.Log(sys.stdout))
|
|
|
|
|
|
load_passwd_file(passwd_fn, server)
|
|
load_access_file(access_fn, server)
|
|
|
|
server.serve_forever()
|