Package ldaptor :: Package protocols :: Package ldap :: Module ldapconnector
[hide private]
[frames] | no frames]

Source Code for Module ldaptor.protocols.ldap.ldapconnector

  1  from twisted.internet import protocol, defer 
  2  from ldaptor.protocols.ldap import distinguishedname 
  3   
  4  try: 
  5      from twisted.internet.utils import SRVConnector 
  6  except ImportError: 
  7      from twisted.names.srvconnect import SRVConnector 
  8   
9 -class LDAPConnector(SRVConnector):
10 - def __init__(self, reactor, dn, factory, 11 overrides=None):
12 if not isinstance(dn, distinguishedname.DistinguishedName): 13 dn = distinguishedname.DistinguishedName(stringValue=dn) 14 if overrides is None: 15 overrides={} 16 self.override = self._findOverRide(dn, overrides) 17 18 domain = dn.getDomainName() 19 SRVConnector.__init__(self, reactor, 20 'ldap', domain, factory)
21
22 - def __getstate__(self):
23 r={} 24 r.update(self.__dict__) 25 r['connector'] = None 26 return r
27
28 - def _findOverRide(self, dn, overrides):
29 while True: 30 if overrides.has_key(dn): 31 return overrides[dn] 32 if dn == '': 33 break 34 dn = dn.up() 35 return None
36
37 - def _isQueryNeeded(self):
38 """Is there both need to do an SRV query.""" 39 if self.override is None: 40 return True 41 42 assert not callable(self.override) 43 overriddenHost, overriddenPort = self.override 44 if overriddenHost is None: 45 return True 46 if overriddenPort is not None: 47 return False 48 return True
49
50 - def connect(self):
51 if callable(self.override): 52 self.override(self.factory) 53 elif not self._isQueryNeeded(): 54 self.factory.doStart() 55 self.factory.startedConnecting(self) 56 self._reallyConnect() 57 else: 58 SRVConnector.connect(self)
59
60 - def pickServer(self):
61 if self.override is None: 62 overriddenHost, overriddenPort = None, None 63 else: 64 overriddenHost, overriddenPort = self.override 65 66 if (overriddenHost is not None 67 and (overriddenPort is not None 68 or self.domain is None)): 69 host = overriddenHost 70 port = overriddenPort 71 else: 72 host, port = SRVConnector.pickServer(self) 73 if overriddenHost is not None: 74 host = overriddenHost 75 if overriddenPort is not None: 76 port = overriddenPort 77 78 try: 79 port = int(port) 80 except ValueError: 81 pass 82 83 assert host is not None 84 if port is None: 85 port = 389 86 return host, port
87
88 -class LDAPClientCreator(protocol.ClientCreator):
89 - def connect(self, dn, overrides=None):
90 """Connect to remote host, return Deferred of resulting protocol instance.""" 91 d = defer.Deferred() 92 f = protocol._InstanceFactory(self.reactor, self.protocolClass(*self.args, **self.kwargs), d) 93 c = LDAPConnector(self.reactor, dn, f, overrides=overrides) 94 c.connect() 95 return d
96
97 - def connectAnonymously(self, dn, overrides=None):
98 """Connect to remote host and bind anonymously, return Deferred of resulting protocol instance.""" 99 d = self.connect(dn, overrides=overrides) 100 101 def _bind(proto): 102 d=proto.bind() 103 d.addCallback(lambda _: proto) 104 return d
105 d.addCallback(_bind) 106 return d
107