Modified api methods.

legacy27
Самоукин Алексей 14 years ago
parent b3c53ff6b6
commit 994d290752

@ -34,3 +34,29 @@ class fillVars(glob_attr):
def get_ld_temp_hash(self): def get_ld_temp_hash(self):
"""hash пароля временного root""" """hash пароля временного root"""
return getHash(self.Get('ld_temp_pw'), self.Get('ld_encrypt')) return getHash(self.Get('ld_temp_pw'), self.Get('ld_encrypt'))
def get_ld_ldap_access_pw_conf(self):
"""строки доступа к аттрибуту userPassword в slapd.conf"""
return ' by dn="%s" write' %self.Get("ld_admin_dn")
def get_ld_ldap_access_dn_conf(self):
"""строки доступа к LDAP DN сервиса в slapd.conf"""
templStart = 'access to dn.regex=".*%(repl_dn)s$"\n'\
' by dn="%(admin_dn)s" write\n'\
' by dn="%(repl_dn)s" write\n'\
' by dn="%(bind_dn)s" read\n'
templMail = ' by dn="%(mail_dn)s" read\n'
templEnd = ' by * none'
templ = ""
if self.Get("ld_repl_set")=="on" and self.Get("ld_repl_id")!="":
templ += templStart
templDict = {'admin_dn':self.Get("ld_admin_dn"),
'repl_dn':self.Get("ld_repl_dn"),
'bind_dn':self.Get("ld_bind_dn")}
mailDn = self.clGetVar("calculate-mail", "cl_mail_dn")
if mailDn:
templDict.update({'mail_dn':mailDn})
templ += templMail
templ += templEnd
return templ%templDict
return ""

@ -18,22 +18,36 @@ import os, sys, re
from cl_print import color_print from cl_print import color_print
from cl_datavars import DataVars from cl_datavars import DataVars
from server.utils import execProg from server.utils import execProg
from cl_template import template
from cl_lang import lang from cl_lang import lang
lang().setLanguage(sys.modules[__name__]) lang().setLanguage(sys.modules[__name__])
from cl_abstract import abs_api from cl_abstract import abs_api_service
class DataVarsLdap(DataVars): class DataVarsLdap(DataVars):
"""Хранение переменных""" """Хранение переменных"""
# Имя секции в calculate2.env # Имя секции в calculate2.env
envSection = "ldap" envSection = "ldap"
def importLdap(self, **args): def importLdap(self, **args):
'''Импорт переменных для calculate-ldap''' '''Импорт переменных для calculate-ldap'''
# Импорт переменных # Импорт переменных
self.importData(self.envSection, ('cl_vars_ldap','cl_fill_ldap')) self.importData(self.envSection, ('cl_vars_ldap','cl_fill_ldap'))
class Template:
"""Templates methods"""
def applyTemplates(self):
"""Apply templates"""
clTempl = template(self.clVars)
dirsFiles = clTempl.applyTemplates()
if clTempl.getError():
self.printERROR(clTempl.getError().strip())
return False
else:
return dirsFiles
class shareVars: class shareVars:
"""share methods template vars""" """share methods template vars"""
# template variables # template variables
@ -49,9 +63,9 @@ class shareVars:
clVars.flIniFile() clVars.flIniFile()
# Устанавливаем у объекта атрибут объект переменных # Устанавливаем у объекта атрибут объект переменных
self.clVars = clVars self.clVars = clVars
return True return self.clVars
class serviceAPI(color_print, shareVars, abs_api): class serviceAPI(abs_api_service, shareVars, Template):
'''Methods ldap service''' '''Methods ldap service'''
prioritet = 25 prioritet = 25
nameService = "ldap" nameService = "ldap"
@ -70,11 +84,20 @@ class serviceAPI(color_print, shareVars, abs_api):
cmdAddRunlevel = 'rc-update add %(name)s default' %_templDict cmdAddRunlevel = 'rc-update add %(name)s default' %_templDict
cmdDelRunlevel = 'rc-update del %(name)s default' %_templDict cmdDelRunlevel = 'rc-update del %(name)s default' %_templDict
def getServiceName(self): def get_service_name(self):
'''Get name service''' '''Get name service'''
return self.nameService return self.nameService
def isSetup(self): def get_pkg_name(self):
'''Get name service'''
from cl_ldap_service import __app__
return __app__
def get_vars(self):
'''Get Service vars'''
return self.createClVars(self.clVars)
def is_setup(self):
'''Is setup service (True/False)''' '''Is setup service (True/False)'''
self.createClVars(self.clVars) self.createClVars(self.clVars)
return self.clVars.Get('sr_ldap_set') == "on" return self.clVars.Get('sr_ldap_set') == "on"
@ -94,7 +117,7 @@ class serviceAPI(color_print, shareVars, abs_api):
daemons.append(daemon) daemons.append(daemon)
return daemons return daemons
def isStart(self): def is_start(self):
'''Run ldap server (True/False)''' '''Run ldap server (True/False)'''
if os.access(self.pidFile, os.R_OK): if os.access(self.pidFile, os.R_OK):
pid = open(self.pidFile).read().strip() pid = open(self.pidFile).read().strip()
@ -105,33 +128,35 @@ class serviceAPI(color_print, shareVars, abs_api):
return False return False
def start(self): def start(self):
'''Запускает LDAP сервер''' '''Start LDAP server'''
if execProg(self.cmdStart) is False: if not self.is_start():
self.printERROR(_("Can't execute '%s'") %self.cmdStart) if execProg(self.cmdStart) is False:
self.printNotOK(_("Starting LDAP") + " ...") self.printERROR(_("Can't execute '%s'") %self.cmdStart)
return False self.printNotOK(_("Starting LDAP") + " ...")
else: return False
return True return True
def restart(self): def restart(self):
'''Перезапускает LDAP сервер''' '''Restart LDAP server'''
if execProg(self.cmdReStart) is False: if self.is_start():
self.printERROR(_("Can't execute '%s'") %self.cmdReStart) if execProg(self.cmdReStart) is False:
self.printNotOK(_("Restarting LDAP")+ " ...") self.printERROR(_("Can't execute '%s'") %self.cmdReStart)
return False self.printNotOK(_("Restarting LDAP")+ " ...")
return False
else: else:
return True return self.start()
return True
def stop(self): def stop(self):
'''Останавливает LDAP сервер''' '''Stop LDAP server'''
if execProg(self.cmdStop) is False: if self.is_start():
self.printERROR(_("Can't execute '%s'") %self.cmdStop) if execProg(self.cmdStop) is False:
self.printNotOK(_("Stopping LDAP")+ " ...") self.printERROR(_("Can't execute '%s'") %self.cmdStop)
return False self.printNotOK(_("Stopping LDAP")+ " ...")
else: return False
return True return True
def isRunlevel(self): def is_runlevel(self):
'''Находится ли LDAP в автозагрузке''' '''Находится ли LDAP в автозагрузке'''
daemons = self._getRunlevelDaemons() daemons = self._getRunlevelDaemons()
if daemons is False: if daemons is False:
@ -141,9 +166,9 @@ class serviceAPI(color_print, shareVars, abs_api):
else: else:
return False return False
def addRunlevel(self): def add_runlevel(self):
'''Add daemon to runlevel''' '''Add daemon to runlevel'''
if not self.isRunlevel(): if not self.is_runlevel():
if execProg(self.cmdAddRunlevel) is False: if execProg(self.cmdAddRunlevel) is False:
self.printERROR(_("Can't execute '%s'") %self.cmdAddRunlevel) self.printERROR(_("Can't execute '%s'") %self.cmdAddRunlevel)
self.printNotOK(_("service %(name)s added to runlevel")\ self.printNotOK(_("service %(name)s added to runlevel")\
@ -151,9 +176,9 @@ class serviceAPI(color_print, shareVars, abs_api):
return False return False
return True return True
def delRunlevel(self): def del_runlevel(self):
'''Delete daemon from runlevel''' '''Delete daemon from runlevel'''
if self.isRunlevel(): if self.is_runlevel():
if execProg(self.cmdDelRunlevel) is False: if execProg(self.cmdDelRunlevel) is False:
self.printERROR(_("Can't execute '%s'") %self.cmdDelRunlevel) self.printERROR(_("Can't execute '%s'") %self.cmdDelRunlevel)
self.printNotOK(_("service %(name)s removed from runlevel")\ self.printNotOK(_("service %(name)s removed from runlevel")\
@ -161,13 +186,12 @@ class serviceAPI(color_print, shareVars, abs_api):
return False return False
return True return True
def getRunPrioritet(self): def get_prioritet(self):
'''Get run daemon prioritet''' '''Get run daemon prioritet'''
return self.prioritet return self.prioritet
def delVarsFromEnv(self): def del_vars_from_env(self):
'''Delete template vars in env files '''Delete template vars in env files'''
'''
self.createClVars(self.clVars) self.createClVars(self.clVars)
deleteVariables = ("sr_ldap_set",) deleteVariables = ("sr_ldap_set",)
locations = map(lambda x: x[0], self.clVars.Get("cl_env_data")) locations = map(lambda x: x[0], self.clVars.Get("cl_env_data"))
@ -182,3 +206,36 @@ class serviceAPI(color_print, shareVars, abs_api):
'file':fileName}) 'file':fileName})
return False return False
return True return True
def get_service_info(self, request):
'''Get service information'''
res = ""
if request == "scheme":
self.createClVars(self.clVars)
res = self.clVars.Get('ld_ldap_scheme_conf')
elif request == "access_pw":
self.createClVars(self.clVars)
res = self.clVars.Get('ld_ldap_access_pw_conf')
elif request == "access_dn":
self.createClVars(self.clVars)
res = self.clVars.Get('ld_ldap_access_dn_conf')
return res
def scheme(self):
'''include lines in slapd.conf'''
return self.get_service_info('scheme')
def access_pw(self):
'''Access userPasswod lines in slapd.conf'''
return self.get_service_info('access_pw')
def access_dn(self):
'''Access DN lines in slapd.conf'''
return self.get_service_info('access_dn')
def apply_templates(self):
'''Apply package templates'''
if self.is_setup():
self.clVars.Set("cl_ldap_update_action","up", force=True)
return Template.applyTemplates(self)
return True

@ -14,42 +14,31 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
__version__ = "2.2.0.0" from cl_ldap_version import __version__, __app__
__app__ = "calculate-ldap"
import os, sys import os, sys
from server.utils import dialogYesNo from server.utils import dialogYesNo
from cl_print import color_print from cl_print import color_print
from cl_ldap_api import serviceAPI, shareVars from cl_ldap_api import serviceAPI, shareVars, Template
from cl_template import template from cl_api import packagesAPI, APIError
from server.services import services
from server.ldap import iniLdapParser, ldapFunction, shareldap from server.ldap import iniLdapParser, ldapFunction, shareldap
from server.utils import genSleep from server.utils import genSleep
from cl_utils import removeDir, _error, appendProgramToEnvFile,\ from cl_utils import removeDir, _error, appendProgramToEnvFile,\
removeProgramToEnvFile removeProgramToEnvFile
import cl_overriding
from cl_lang import lang from cl_lang import lang
lang().setLanguage(sys.modules[__name__]) lang().setLanguage(sys.modules[__name__])
class ldapService(shareVars, shareldap): class ldapService(shareVars, shareldap, Template):
"""Методы севисa Ldap""" """Методы севисa Ldap"""
# Базовый ldif файл # Базовый ldif файл
ldifFileBase = '/usr/lib/calculate-2.2/calculate-ldap/ldif/base.ldif' ldifFileBase = '/usr/lib/calculate-2.2/calculate-ldap/ldif/base.ldif'
apiFile = '/usr/lib/calculate-2.2/calculate-ldap/pym/cl_ldap_api.py' apiFile = '/usr/lib/calculate-2.2/calculate-ldap/pym/cl_ldap_api.py'
APIObj = serviceAPI() APIObj = serviceAPI()
servObj = services() libAPIObj = packagesAPI()
def applyTemplates(self):
"""Apply templates"""
clTempl = template(self.clVars)
dirsFiles = clTempl.applyTemplates()
if clTempl.getError():
self.printERROR(clTempl.getError().strip())
return False
else:
return dirsFiles
def removeLdapDatabase(self): def removeLdapDatabase(self):
"""Удаляем предыдущую базу данных""" """Удаляем предыдущую базу данных"""
@ -59,12 +48,23 @@ class ldapService(shareVars, shareldap):
self.printERROR("Can't remove /var/lib/openldap-data/*") self.printERROR("Can't remove /var/lib/openldap-data/*")
return False return False
return True return True
# TEST
if os.path.exists(pathDatabase) and os.listdir(pathDatabase): if os.path.exists(pathDatabase) and os.listdir(pathDatabase):
removeDir(pathDatabase) removeDir(pathDatabase)
self.printOK(_("Erased LDAP Database") + " ...") self.printOK(_("Erased LDAP Database") + " ...")
return True return True
def getApiAttrLib(self, attr):
try:
value = eval('self.libAPIObj.%s'%attr)
except APIError, e:
self.printERROR(str(e))
cl_overriding.exit(1)
except Exception, e:
self.printERROR(str(e))
return False
return value
def connectLdapServer(self): def connectLdapServer(self):
"""Соединяемся с LDAP сервером """Соединяемся с LDAP сервером
@ -151,24 +151,25 @@ class ldapService(shareVars, shareldap):
else: else:
# делаем backup # делаем backup
# Проверим запущен ли ldap # Проверим запущен ли ldap
if not self.APIObj.isStart(): if not self.APIObj.is_start():
# Запускаем LDAP сервер # Запускаем LDAP сервер
if not self.APIObj.start(): if not self.APIObj.start():
return False return False
#if not self.backupServer(): #if not self.backupServer():
#return False #return False
if self.APIObj.isRunlevel(): if self.APIObj.is_runlevel():
# Удаляем из автозапуска демона # Удаляем из автозапуска демона
if not self.APIObj.delRunlevel(): if not self.APIObj.del_runlevel():
return False return False
# Останавливаем все установленные сервисы # Останавливаем все установленные сервисы
if not self.servObj.stopAllServices(): if not self.getApiAttrLib("all.stop"):
return False return False
# Останавливаем LDAP # Останавливаем LDAP
if self.APIObj.isStart(): if self.APIObj.is_start():
self.APIObj.stop() self.APIObj.stop()
# Удаляем из автозагрузки все установленные сервисы # Удаляем из автозагрузки все установленные сервисы
if not self.servObj.delRunlevelAllServices(): if not self.getApiAttrLib("all.del_runlevel"):
return False return False
# Удаляем из крона скрипт для чистки удаленых пользователей # Удаляем из крона скрипт для чистки удаленых пользователей
# создаем объект репликации # создаем объект репликации
@ -179,7 +180,7 @@ class ldapService(shareVars, shareldap):
#if not self.servSambaObj.delReplFile(self.clVars): #if not self.servSambaObj.delReplFile(self.clVars):
#return False #return False
# Удаляем переменные # Удаляем переменные
if not self.servObj.delVarsFromAllServices(): if not self.getApiAttrLib("all.del_vars_from_env"):
return False return False
# Получим путь к ldap файлу # Получим путь к ldap файлу
ldapParser = iniLdapParser() ldapParser = iniLdapParser()
@ -228,7 +229,7 @@ class ldapService(shareVars, shareldap):
{"DN":self.clVars.Get("ld_admin_dn"), {"DN":self.clVars.Get("ld_admin_dn"),
"PASS":self.clVars.Get("ld_admin_pw")}) "PASS":self.clVars.Get("ld_admin_pw")})
# Устанавливаем автозапуск демона # Устанавливаем автозапуск демона
if not self.APIObj.addRunlevel(): if not self.APIObj.add_runlevel():
return False return False
# Записываем переменные для пользователя # Записываем переменные для пользователя
#clientVars = ["ur_organization", "ur_signature"] #clientVars = ["ur_organization", "ur_signature"]
@ -236,6 +237,8 @@ class ldapService(shareVars, shareldap):
#return False #return False
self.clVars.Write("sr_ldap_set","on",force=True) self.clVars.Write("sr_ldap_set","on",force=True)
self.printOK(_("LDAP service configured") + " ...") self.printOK(_("LDAP service configured") + " ...")
# test
print self.getApiAttrLib("calculate_ldap.apply_templates")
return True return True
def printVars(self, *arg, **argv): def printVars(self, *arg, **argv):

@ -0,0 +1,19 @@
#-*- coding: utf-8 -*-
# Copyright 2008-2010 Mir Calculate Ltd. http://www.calculate-linux.org
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
__version__ = "2.2.0.0"
__app__ = "calculate-ldap"

@ -14,7 +14,10 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from cl_ldap_service import __version__, __app__ from cl_ldap_version import __version__, __app__
#__version__ = "2.2.0.0"
#__app__ = "calculate-ldap"
class Data: class Data:
#базовый суффикс LDAP #базовый суффикс LDAP
@ -77,6 +80,31 @@ class Data:
# действие программа устанавливает сервис # действие программа устанавливает сервис
cl_ldap_setup_action = {'value':'down'} cl_ldap_setup_action = {'value':'down'}
# действие программа обновляет конфигурационные файлы
cl_ldap_update_action = {'value':'down'}
# include строки в slapd.conf
ld_ldap_scheme_conf = {'value':\
"include\t\t/etc/openldap/schema/core.schema\n"\
"include\t\t/etc/openldap/schema/cosine.schema\n"\
"include\t\t/etc/openldap/schema/nis.schema\n"\
"include\t\t/etc/openldap/schema/inetorgperson.schema\n"\
"include\t\t/etc/openldap/schema/misc.schema"}
# строки доступа к аттрибуту userPassword в slapd.conf
ld_ldap_access_pw_conf = {}
# строки доступа к LDAP DN сервиса в slapd.conf
ld_ldap_access_dn_conf = {}
ld_repl_set = {'value':'off'}
ld_repl_id = {}
ld_repl_servers_info = {}
ld_repl_servers_ref = {}
# lib vars # lib vars
cl_pass_step = {} cl_pass_step = {}
cl_api = {} cl_api = {}

Loading…
Cancel
Save