|
|
#-*- 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.
|
|
|
|
|
|
import os, sys, re
|
|
|
from cl_print import color_print
|
|
|
from cl_datavars import DataVars
|
|
|
from server.utils import execProg
|
|
|
|
|
|
from cl_lang import lang
|
|
|
lang().setLanguage(sys.modules[__name__])
|
|
|
|
|
|
from cl_abstract import abs_api
|
|
|
|
|
|
class DataVarsLdap(DataVars):
|
|
|
"""Хранение переменных"""
|
|
|
# Имя секции в calculate2.env
|
|
|
envSection = "ldap"
|
|
|
|
|
|
def importLdap(self, **args):
|
|
|
'''Импорт переменных для calculate-ldap'''
|
|
|
# Импорт переменных
|
|
|
self.importData(self.envSection, ('cl_vars_ldap','cl_fill_ldap'))
|
|
|
|
|
|
class shareVars:
|
|
|
"""share methods template vars"""
|
|
|
# template variables
|
|
|
clVars = False
|
|
|
|
|
|
def createClVars(self, clVars=False):
|
|
|
"""Создает объект Vars"""
|
|
|
if not clVars:
|
|
|
clVars = DataVarsLdap()
|
|
|
# Импортируем переменные
|
|
|
clVars.importLdap()
|
|
|
# Заменяем значения переменных переменными из env файлов
|
|
|
clVars.flIniFile()
|
|
|
# Устанавливаем у объекта атрибут объект переменных
|
|
|
self.clVars = clVars
|
|
|
return True
|
|
|
|
|
|
class serviceAPI(color_print, shareVars, abs_api):
|
|
|
'''Methods ldap service'''
|
|
|
prioritet = 25
|
|
|
nameService = "ldap"
|
|
|
nameDaemon = 'slapd'
|
|
|
_templDict = {'name':nameDaemon}
|
|
|
# files
|
|
|
pidFile = '/var/run/openldap/%(name)s.pid' %_templDict
|
|
|
# command
|
|
|
cmdPath = '/etc/init.d/%(name)s' %_templDict
|
|
|
_templDict.update({'cmd':cmdPath})
|
|
|
cmdStart = '%(cmd)s start' %_templDict
|
|
|
cmdReStart = '%(cmd)s restart' %_templDict
|
|
|
cmdStop = '%(cmd)s stop' %_templDict
|
|
|
cmdShowDaemons = 'rc-update show default'
|
|
|
reShowDaemons = re.compile("(.+)\s+\|\s+.+")
|
|
|
cmdAddRunlevel = 'rc-update add %(name)s default' %_templDict
|
|
|
cmdDelRunlevel = 'rc-update del %(name)s default' %_templDict
|
|
|
|
|
|
def getServiceName(self):
|
|
|
'''Get name service'''
|
|
|
return self.nameService
|
|
|
|
|
|
def isSetup(self):
|
|
|
'''Is setup service (True/False)'''
|
|
|
self.createClVars(self.clVars)
|
|
|
return self.clVars.Get('sr_ldap_set') == "on"
|
|
|
|
|
|
def _getRunlevelDaemons(self):
|
|
|
"""Получаем всех демонов в default уровне"""
|
|
|
textLines = execProg(self.cmdShowDaemons)
|
|
|
if textLines is False:
|
|
|
self.printERROR(_("ERROR") + ": " + self.cmdShowDaemons)
|
|
|
return False
|
|
|
else:
|
|
|
daemons = []
|
|
|
for line in textLines:
|
|
|
res = self.reShowDaemons.search(line)
|
|
|
if res:
|
|
|
daemon = res.groups(0)[0]
|
|
|
daemons.append(daemon)
|
|
|
return daemons
|
|
|
|
|
|
def isStart(self):
|
|
|
'''Run ldap server (True/False)'''
|
|
|
if os.access(self.pidFile, os.R_OK):
|
|
|
pid = open(self.pidFile).read().strip()
|
|
|
if pid:
|
|
|
procDir = "/proc"+"/"+pid
|
|
|
if os.access(procDir, os.F_OK):
|
|
|
return True
|
|
|
return False
|
|
|
|
|
|
def start(self):
|
|
|
'''Запускает LDAP сервер'''
|
|
|
if execProg(self.cmdStart) is False:
|
|
|
self.printERROR(_("Can't execute '%s'") %self.cmdStart)
|
|
|
self.printNotOK(_("Starting LDAP") + " ...")
|
|
|
return False
|
|
|
else:
|
|
|
return True
|
|
|
|
|
|
def restart(self):
|
|
|
'''Перезапускает LDAP сервер'''
|
|
|
if execProg(self.cmdReStart) is False:
|
|
|
self.printERROR(_("Can't execute '%s'") %self.cmdReStart)
|
|
|
self.printNotOK(_("Restarting LDAP")+ " ...")
|
|
|
return False
|
|
|
else:
|
|
|
return True
|
|
|
|
|
|
def stop(self):
|
|
|
'''Останавливает LDAP сервер'''
|
|
|
if execProg(self.cmdStop) is False:
|
|
|
self.printERROR(_("Can't execute '%s'") %self.cmdStop)
|
|
|
self.printNotOK(_("Stopping LDAP")+ " ...")
|
|
|
return False
|
|
|
else:
|
|
|
return True
|
|
|
|
|
|
def isRunlevel(self):
|
|
|
'''Находится ли LDAP в автозагрузке'''
|
|
|
daemons = self._getRunlevelDaemons()
|
|
|
if daemons is False:
|
|
|
return False
|
|
|
if self.nameDaemon in daemons:
|
|
|
return True
|
|
|
else:
|
|
|
return False
|
|
|
|
|
|
def addRunlevel(self):
|
|
|
'''Add daemon to runlevel'''
|
|
|
if not self.isRunlevel():
|
|
|
if execProg(self.cmdAddRunlevel) is False:
|
|
|
self.printERROR(_("Can't execute '%s'") %self.cmdAddRunlevel)
|
|
|
self.printNotOK(_("service %(name)s added to runlevel")\
|
|
|
%self._templDict + " ...")
|
|
|
return False
|
|
|
return True
|
|
|
|
|
|
def delRunlevel(self):
|
|
|
'''Delete daemon from runlevel'''
|
|
|
if self.isRunlevel():
|
|
|
if execProg(self.cmdDelRunlevel) is False:
|
|
|
self.printERROR(_("Can't execute '%s'") %self.cmdDelRunlevel)
|
|
|
self.printNotOK(_("service %(name)s removed from runlevel")\
|
|
|
%self._templDict + " ...")
|
|
|
return False
|
|
|
return True
|
|
|
|
|
|
def getRunPrioritet(self):
|
|
|
'''Get run daemon prioritet'''
|
|
|
return self.prioritet
|
|
|
|
|
|
def delVarsFromEnv(self):
|
|
|
'''Delete template vars in env files
|
|
|
'''
|
|
|
self.createClVars(self.clVars)
|
|
|
deleteVariables = ("sr_ldap_set",)
|
|
|
locations = map(lambda x: x[0], self.clVars.Get("cl_env_data"))
|
|
|
for varName in deleteVariables:
|
|
|
for locate in locations:
|
|
|
if not self.clVars.Delete(varName, location=locate,
|
|
|
header=self.clVars.envSection):
|
|
|
fileName = filter(lambda x: x[0] == locate,
|
|
|
self.clVars.Get("cl_env_data"))[0][1]
|
|
|
self.printERROR(_("Can't delete variable '%(name)s' "
|
|
|
"in file %(file)s") %{'name':varName,
|
|
|
'file':fileName})
|
|
|
return False
|
|
|
return True
|