~midokura/nova/network-refactoring

« back to all changes in this revision

Viewing changes to nova/auth/ldapdriver.py

  • Committer: Ryu Ishimoto
  • Date: 2011-06-30 03:39:04 UTC
  • mfrom: (1118.1.112 nova)
  • Revision ID: ryu@midokura.jp-20110630033904-7l6m3wzdyx95tq01
Merged trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
101
101
    return _wrapped
102
102
 
103
103
 
 
104
class LDAPWrapper(object):
 
105
    def __init__(self, ldap, url, user, password):
 
106
        self.ldap = ldap
 
107
        self.url = url
 
108
        self.user = user
 
109
        self.password = password
 
110
        self.conn = None
 
111
 
 
112
    def __wrap_reconnect(f):
 
113
        def inner(self, *args, **kwargs):
 
114
            if self.conn is None:
 
115
                self.connect()
 
116
                return f(self.conn)(*args, **kwargs)
 
117
            else:
 
118
                try:
 
119
                    return f(self.conn)(*args, **kwargs)
 
120
                except self.ldap.SERVER_DOWN:
 
121
                    self.connect()
 
122
                    return f(self.conn)(*args, **kwargs)
 
123
        return inner
 
124
 
 
125
    def connect(self):
 
126
        try:
 
127
            self.conn = self.ldap.initialize(self.url)
 
128
            self.conn.simple_bind_s(self.user, self.password)
 
129
        except self.ldap.SERVER_DOWN:
 
130
            self.conn = None
 
131
            raise
 
132
 
 
133
    search_s = __wrap_reconnect(lambda conn: conn.search_s)
 
134
    add_s = __wrap_reconnect(lambda conn: conn.add_s)
 
135
    delete_s = __wrap_reconnect(lambda conn: conn.delete_s)
 
136
    modify_s = __wrap_reconnect(lambda conn: conn.modify_s)
 
137
 
 
138
 
104
139
class LdapDriver(object):
105
140
    """Ldap Auth driver
106
141
 
124
159
            LdapDriver.project_objectclass = 'novaProject'
125
160
        self.__cache = None
126
161
        if LdapDriver.conn is None:
127
 
            LdapDriver.conn = self.ldap.initialize(FLAGS.ldap_url)
128
 
            LdapDriver.conn.simple_bind_s(FLAGS.ldap_user_dn,
 
162
            LdapDriver.conn = LDAPWrapper(self.ldap, FLAGS.ldap_url,
 
163
                                          FLAGS.ldap_user_dn,
129
164
                                          FLAGS.ldap_password)
130
165
        if LdapDriver.mc is None:
131
166
            LdapDriver.mc = memcache.Client(FLAGS.memcached_servers, debug=0)