VERSION = 0.1
+
def daemon():
"""Daemonize the current process."""
- if os.fork() != 0: os._exit(0)
+ if os.fork() != 0:
+ os._exit(0)
os.setsid()
- if os.fork() != 0: os._exit(0)
+ if os.fork() != 0:
+ os._exit(0)
os.umask(0)
devnull = os.open(os.devnull, os.O_RDWR)
os.dup2(devnull, 0)
- # xxx fixme - this is just to make sure that nothing gets stupidly lost - should use devnull
+ # xxx fixme - this is just to make sure that nothing gets stupidly lost -
+ # should use devnull
crashlog = os.open('/var/log/sfa_flashpolicy.log', os.O_RDWR | os.O_APPEND | os.O_CREAT, 0644)
os.dup2(crashlog, 1)
os.dup2(crashlog, 2)
+
class policy_server(object):
+
def __init__(self, port, path):
self.port = port
self.path = path
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind(('', port))
self.sock.listen(5)
+
def read_policy(self, path):
- with file(path, 'rb') as f:
+ with open(path, 'rb') as f:
policy = f.read(10001)
if len(policy) > 10000:
raise exceptions.RuntimeError('File probably too large to be a policy file',
raise exceptions.RuntimeError('Not a valid policy file',
path)
return policy
+
def run(self):
try:
while True:
thread.start_new_thread(self.handle, self.sock.accept())
except socket.error as e:
- self.log('Error accepting connection: %s' % (e[1],))
+ self.log('Error accepting connection: %s' % e[1])
+
def handle(self, conn, addr):
- addrstr = '%s:%s' % (addr[0],addr[1])
+ addrstr = '%s:%s' % (addr[0], addr[1])
try:
- self.log('Connection from %s' % (addrstr,))
+ self.log('Connection from %s' % addrstr)
with contextlib.closing(conn):
# It's possible that we won't get the entire request in
# a single recv, but very unlikely.
request = conn.recv(1024).strip()
- #if request != '<policy-file-request/>\0':
+ # if request != '<policy-file-request/>\0':
# self.log('Unrecognized request from %s: %s' % (addrstr, request))
# return
- self.log('Valid request received from %s' % (addrstr,))
+ self.log('Valid request received from %s' % addrstr)
conn.sendall(self.policy)
- self.log('Sent policy file to %s' % (addrstr,))
+ self.log('Sent policy file to %s' % addrstr)
except socket.error as e:
self.log('Error handling connection from %s: %s' % (addrstr, e[1]))
except Exception as e:
self.log('Error handling connection from %s: %s' % (addrstr, e[1]))
+
def log(self, str):
print >>sys.stderr, str
+
def main():
- parser = optparse.OptionParser(usage = '%prog [--port=PORT] --file=FILE',
+ parser = optparse.OptionParser(usage='%prog [--port=PORT] --file=FILE',
version='%prog ' + str(VERSION))
parser.add_option('-p', '--port', dest='port', type=int, default=843,
help='listen on port PORT', metavar='PORT')
parser.add_option('-f', '--file', dest='path',
help='server policy file FILE', metavar='FILE')
parser.add_option("-d", "--daemon", dest="daemon", action="store_true",
- help="Run as daemon.", default=False)
+ help="Run as daemon.", default=False)
opts, args = parser.parse_args()
if args:
parser.error('No arguments are needed. See help.')