From 9b804ac9bebd9f5fa0d376033dc9a6d72ef71a41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B0=D0=BC=D0=BE=D1=83=D0=BA=D0=B8=D0=BD=20=D0=90?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Fri, 21 May 2010 13:50:59 +0400 Subject: [PATCH] Bugfix --- pym/cl_fill.py | 5 ++--- pym/cl_ldap.py | 27 ++++++++++++++++----------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/pym/cl_fill.py b/pym/cl_fill.py index 75809f6..dea8318 100644 --- a/pym/cl_fill.py +++ b/pym/cl_fill.py @@ -19,10 +19,9 @@ import os import types import filecmp import pwd, grp -import cl_datavars import cl_overriding from cl_ldap import ldapUser - +from cl_datavars import glob_attr class clLocale: lang = { @@ -211,7 +210,7 @@ def getdirlist(s_path): dir_list=fdir.common_dirs return dir_list -class fillVars(cl_datavars.glob_attr): +class fillVars(glob_attr): # Объект данных из LDAP _ldapUserObject = False diff --git a/pym/cl_ldap.py b/pym/cl_ldap.py index b8512a6..03d9b0b 100644 --- a/pym/cl_ldap.py +++ b/pym/cl_ldap.py @@ -65,17 +65,21 @@ class ldapUser(_error): # Подключение к LDAP conLdap = False - def getServerDataUser(self, bindData=False): + def getDataInLdapConf(self, bindData=False, cache=True): """Получение данных из /etc/ldap.conf""" - fileName = "/etc/ldap.conf" - getStrList = lambda x: reduce(lambda x,y: [x,y.upper()],([x]*2)) data = [("host",'host'), ("usersDN",'nss_base_passwd'), ("groupsDN",'nss_base_group')] if bindData: data += [("bindDn",'binddn'), ("bindPw",'bindpw')] - workData = map(lambda x: (x[0],getStrList(x[1]),len(x[1])), data) namesData = map(lambda x: x[0], data) + # Данные из кеша, если он есть + if cache and self._dictData and\ + set(self._dictData.keys())<=set(namesData): + return self._dictData + fileName = "/etc/ldap.conf" + getStrList = lambda x: reduce(lambda x,y: [x,y.upper()],([x]*2)) + workData = map(lambda x: (x[0],getStrList(x[1]),len(x[1])), data) dictData = {} splList = (" ", "\t") try: @@ -98,19 +102,20 @@ class ldapUser(_error): self.setError(_("Can not open %s")%fileName) return False if set(dictData.keys()) == set(namesData): + # Кеширование данных + if cache: + self._dictData.clear() + self._dictData.update(dictData) return dictData else: return {} def getUserLdapInfo(self, userName): """Выдаем информацию о пользователе из LDAP""" - if not "bindDn" in self._dictData: - # Получаем информацию из /etc/ldap.conf - retData = self.getServerDataUser(bindData=True) - if retData: - self._dictData = retData - else: - return {} + # Получаем информацию из /etc/ldap.conf + retData = self.getDataInLdapConf(bindData=True, cache=True) + if not retData: + return {} bindDn = self._dictData["bindDn"][0] bindPw = self._dictData["bindPw"][0] host = self._dictData["host"][0]