#! /usr/bin/env python import sys import Pyro.naming, Pyro.core, Pyro.util, Pyro.protocol, Pyro.constants from Pyro.errors import PyroError,NamingError from Pyro.protocol import getHostname ######## Custom connections validator. ######## This validator asks the user to accept or deny a new connection. ######## Note that the old validator is still called when the user accepts. class hostCheckingValidator(Pyro.protocol.DefaultConnValidator): def __init__(self): Pyro.protocol.DefaultConnValidator.__init__(self) def acceptHost(self,daemon,conn): (ip, port)=conn.addr try: hostname=getHostname(ip) except: hostname='' print '\nNew connection from',ip,hostname a=raw_input('Do you want to accept this? y/n: ') if a=='y': # user accepts, but pass it on to the default validator, # which will check the max. number of connections... return Pyro.protocol.DefaultConnValidator.acceptHost(self,daemon, conn) else: Pyro.util.Log.msg('ConnValidator','User denied connection from',ip,hostname) return (0,Pyro.constants.DENIED_HOSTBLOCKED) # not ok ##### test object class testobject(Pyro.core.ObjBase): def method(self,arg): print 'method was called with',arg return 42 ##### main program. # initialize the server and set the default namespace group Pyro.core.initServer() Pyro.config.PYRO_TRACELEVEL=3 Pyro.config.PYRO_NS_DEFAULTGROUP=':test' Pyro.config.PYRO_LOGFILE='server_log' print 'Check the logfile for messages: server_log' # Construct the Pyro Daemon with our own connection validator daemon = Pyro.core.Daemon() daemon.setNewConnectionValidator(hostCheckingValidator()) # <-- mind this!!! # locate the NS locator = Pyro.naming.NameServerLocator() print 'searching for Naming Service...' ns = locator.getNS() print 'Naming Service found at',ns.URI.address,'('+(Pyro.protocol.getHostname(ns.URI.address) or '??')+') port',ns.URI.port # make sure our namespace group exists try: ns.createGroup(':test') except NamingError: pass daemon.useNameServer(ns) # connect a new object implementation (first unregister previous one) try: ns.unregister('denyhosts') except NamingError: pass daemon.connect(testobject(),'denyhosts') # enter the service loop. print 'Server object "denyhosts" ready.' daemon.requestLoop()