Changeset 1130 for pykota/trunk/pykota/storages/ldapstorage.py
- Timestamp:
- 10/02/03 22:23:18 (21 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
pykota/trunk/pykota/storages/ldapstorage.py
r1119 r1130 21 21 # 22 22 # $Log$ 23 # Revision 1.26 2003/10/02 20:23:18 jalet 24 # Storage caching mechanism added. 25 # 23 26 # Revision 1.25 2003/08/20 15:56:24 jalet 24 27 # Better user and group deletion … … 116 119 import md5 117 120 118 from pykota.storage import PyKotaStorageError 119 from pykota.storage import StorageObject,StorageUser,StorageGroup,StoragePrinter,StorageLastJob,StorageUserPQuota,StorageGroupPQuota 121 from pykota.storage import PyKotaStorageError,BaseStorage,StorageObject,StorageUser,StorageGroup,StoragePrinter,StorageLastJob,StorageUserPQuota,StorageGroupPQuota 120 122 121 123 try : … … 127 129 raise PyKotaStorageError, "This python version (%s) doesn't seem to have the python-ldap module installed correctly." % sys.version.split()[0] 128 130 129 class Storage :131 class Storage(BaseStorage) : 130 132 def __init__(self, pykotatool, host, dbname, user, passwd) : 131 133 """Opens the LDAP connection.""" 132 134 # raise PyKotaStorageError, "Sorry, the LDAP backend for PyKota is not yet implemented !" 133 self.closed = 1 134 self.tool = pykotatool 135 self.debug = pykotatool.config.getDebug() 135 BaseStorage.__init__(self, pykotatool) 136 136 self.info = pykotatool.config.getLDAPInfo() 137 137 try : … … 145 145 else : 146 146 self.closed = 0 147 if self.debug : 148 self.tool.logger.log_message("Database opened (host=%s, dbname=%s, user=%s)" % (host, dbname, user), "debug") 149 150 def __del__(self) : 151 """Ensures that the database connection is closed.""" 152 self.close() 153 147 self.tool.logdebug("Database opened (host=%s, dbname=%s, user=%s)" % (host, dbname, user)) 148 154 149 def close(self) : 155 150 """Closes the database connection.""" … … 157 152 del self.database 158 153 self.closed = 1 159 if self.debug : 160 self.tool.logger.log_message("Database closed.", "debug") 154 self.tool.logdebug("Database closed.") 161 155 162 156 def genUUID(self) : … … 169 163 def beginTransaction(self) : 170 164 """Starts a transaction.""" 171 if self.debug : 172 self.tool.logger.log_message("Transaction begins... WARNING : No transactions in LDAP !", "debug") 165 self.tool.logdebug("Transaction begins... WARNING : No transactions in LDAP !") 173 166 174 167 def commitTransaction(self) : 175 168 """Commits a transaction.""" 176 if self.debug : 177 self.tool.logger.log_message("Transaction committed. WARNING : No transactions in LDAP !", "debug") 169 self.tool.logdebug("Transaction committed. WARNING : No transactions in LDAP !") 178 170 179 171 def rollbackTransaction(self) : 180 172 """Rollbacks a transaction.""" 181 if self.debug : 182 self.tool.logger.log_message("Transaction aborted. WARNING : No transaction in LDAP !", "debug") 173 self.tool.logdebug("Transaction aborted. WARNING : No transaction in LDAP !") 183 174 184 175 def doSearch(self, key, fields=None, base="", scope=ldap.SCOPE_SUBTREE) : … … 186 177 try : 187 178 base = base or self.basedn 188 if self.debug : 189 self.tool.logger.log_message("QUERY : Filter : %s, BaseDN : %s, Scope : %s, Attributes : %s" % (key, base, scope, fields), "debug") 179 self.tool.logdebug("QUERY : Filter : %s, BaseDN : %s, Scope : %s, Attributes : %s" % (key, base, scope, fields)) 190 180 result = self.database.search_s(base or self.basedn, scope, key, fields) 191 181 except ldap.LDAPError : 192 182 raise PyKotaStorageError, _("Search for %s(%s) from %s(scope=%s) returned no answer.") % (key, fields, base, scope) 193 183 else : 194 if self.debug : 195 self.tool.logger.log_message("QUERY : Result : %s" % result, "debug") 184 self.tool.logdebug("QUERY : Result : %s" % result) 196 185 return result 197 186 … … 199 188 """Adds an entry in the LDAP directory.""" 200 189 try : 201 if self.debug : 202 self.tool.logger.log_message("QUERY : ADD(%s, %s)" % (dn, str(fields)), "debug") 190 self.tool.logdebug("QUERY : ADD(%s, %s)" % (dn, str(fields))) 203 191 self.database.add_s(dn, modlist.addModlist(fields)) 204 192 except ldap.LDAPError : … … 210 198 """Deletes an entry from the LDAP directory.""" 211 199 try : 212 if self.debug : 213 self.tool.logger.log_message("QUERY : Delete(%s)" % dn, "debug") 200 self.tool.logdebug("QUERY : Delete(%s)" % dn) 214 201 self.database.delete_s(dn) 215 202 except ldap.LDAPError : … … 220 207 try : 221 208 oldentry = self.doSearch("objectClass=*", base=dn, scope=ldap.SCOPE_BASE) 222 if self.debug : 223 self.tool.logger.log_message("QUERY : Modify(%s, %s ==> %s)" % (dn, oldentry[0][1], fields), "debug") 209 self.tool.logdebug("QUERY : Modify(%s, %s ==> %s)" % (dn, oldentry[0][1], fields)) 224 210 self.database.modify_s(dn, modlist.modifyModlist(oldentry[0][1], fields, ignore_oldexistent=ignoreold)) 225 211 except ldap.LDAPError : … … 228 214 return dn 229 215 230 def getUser (self, username) :216 def getUserFromBackend(self, username) : 231 217 """Extracts user information given its name.""" 232 218 user = StorageUser(self, username) … … 262 248 return user 263 249 264 def getGroup (self, groupname) :250 def getGroupFromBackend(self, groupname) : 265 251 """Extracts group information given its name.""" 266 252 group = StorageGroup(self, groupname) … … 282 268 return group 283 269 284 def getPrinter (self, printername) :270 def getPrinterFromBackend(self, printername) : 285 271 """Extracts printer information given its name.""" 286 272 printer = StoragePrinter(self, printername) … … 294 280 printer.Exists = 1 295 281 return printer 296 297 def getUserGroups(self, user) : 298 """Returns the user's groups list.""" 299 groups = [] 300 result = self.doSearch("(&(objectClass=pykotaGroup)(%s=%s))" % (self.info["groupmembers"], user.Name), [self.info["grouprdn"]], base=self.info["groupbase"]) 301 if result : 302 for (groupid, fields) in result : 303 groups.append(self.getGroup(fields.get(self.info["grouprdn"])[0])) 304 return groups 305 306 def getGroupMembers(self, group) : 307 """Returns the group's members list.""" 308 groupmembers = [] 309 result = self.doSearch("(&(objectClass=pykotaGroup)(|(pykotaGroupName=%s)(%s=%s)))" % (group.Name, self.info["grouprdn"], group.Name), [self.info["groupmembers"]], base=self.info["groupbase"]) 310 if result : 311 for username in result[0][1].get(self.info["groupmembers"], []) : 312 groupmembers.append(self.getUser(username)) 313 return groupmembers 314 315 def getUserPQuota(self, user, printer) : 282 283 def getUserPQuotaFromBackend(self, user, printer) : 316 284 """Extracts a user print quota.""" 317 285 userpquota = StorageUserPQuota(self, user, printer) … … 344 312 return userpquota 345 313 346 def getGroupPQuota (self, group, printer) :314 def getGroupPQuotaFromBackend(self, group, printer) : 347 315 """Extracts a group print quota.""" 348 316 grouppquota = StorageGroupPQuota(self, group, printer) … … 383 351 return grouppquota 384 352 385 def getPrinterLastJob (self, printer) :353 def getPrinterLastJobFromBackend(self, printer) : 386 354 """Extracts a printer's last job information.""" 387 355 lastjob = StorageLastJob(self, printer) … … 409 377 lastjob.Exists = 1 410 378 return lastjob 379 380 def getUserGroups(self, user) : 381 """Returns the user's groups list.""" 382 groups = [] 383 result = self.doSearch("(&(objectClass=pykotaGroup)(%s=%s))" % (self.info["groupmembers"], user.Name), [self.info["grouprdn"]], base=self.info["groupbase"]) 384 if result : 385 for (groupid, fields) in result : 386 groups.append(self.getGroup(fields.get(self.info["grouprdn"])[0])) 387 return groups 388 389 def getGroupMembers(self, group) : 390 """Returns the group's members list.""" 391 groupmembers = [] 392 result = self.doSearch("(&(objectClass=pykotaGroup)(|(pykotaGroupName=%s)(%s=%s)))" % (group.Name, self.info["grouprdn"], group.Name), [self.info["groupmembers"]], base=self.info["groupbase"]) 393 if result : 394 for username in result[0][1].get(self.info["groupmembers"], []) : 395 groupmembers.append(self.getUser(username)) 396 return groupmembers 411 397 412 398 def getMatchingPrinters(self, printerpattern) :