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
10 - def __init__(self, reactor, dn, factory,
11 overrides=None):
21
23 r={}
24 r.update(self.__dict__)
25 r['connector'] = None
26 return r
27
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
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
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
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
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
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