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, bindAddress=None):
22
24 r={}
25 r.update(self.__dict__)
26 r['connector'] = None
27 return r
28
30 while True:
31 if overrides.has_key(dn):
32 return overrides[dn]
33 if dn == '':
34 break
35 dn = dn.up()
36 return None
37
39 """Is there both need to do an SRV query."""
40 if self.override is None:
41 return True
42
43 assert not callable(self.override)
44 overriddenHost, overriddenPort = self.override
45 if overriddenHost is None:
46 return True
47 if overriddenPort is not None:
48 return False
49 return True
50
52 if callable(self.override):
53 self.override(self.factory)
54 elif not self._isQueryNeeded():
55 self.factory.doStart()
56 self.factory.startedConnecting(self)
57 self._reallyConnect()
58 else:
59 SRVConnector.connect(self)
60
62 if self.override is None:
63 overriddenHost, overriddenPort = None, None
64 else:
65 overriddenHost, overriddenPort = self.override
66
67 if (overriddenHost is not None
68 and (overriddenPort is not None
69 or self.domain is None)):
70 host = overriddenHost
71 port = overriddenPort
72 else:
73 host, port = SRVConnector.pickServer(self)
74 if overriddenHost is not None:
75 host = overriddenHost
76 if overriddenPort is not None:
77 port = overriddenPort
78
79 try:
80 port = int(port)
81 except ValueError:
82 pass
83
84 assert host is not None
85 if port is None:
86 port = 389
87 return host, port
88
90 - def connect(self, dn, overrides=None, bindAddress=None):
91 """Connect to remote host, return Deferred of resulting protocol instance."""
92 d = defer.Deferred()
93 f = protocol._InstanceFactory(self.reactor, self.protocolClass(*self.args, **self.kwargs), d)
94 c = LDAPConnector(self.reactor, dn, f, overrides=overrides,
95 bindAddress=bindAddress)
96 c.connect()
97 return d
98
100 """Connect to remote host and bind anonymously, return Deferred of resulting protocol instance."""
101 d = self.connect(dn, overrides=overrides)
102
103 def _bind(proto):
104 d=proto.bind()
105 d.addCallback(lambda _: proto)
106 return d
107 d.addCallback(_bind)
108 return d
109