|
|
#-*- coding: utf-8 -*-
|
|
|
|
|
|
# Copyright 2008-2010 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 sys
|
|
|
|
|
|
from cl_datavars import DataVars
|
|
|
from cl_print import color_print
|
|
|
# Перевод модуля
|
|
|
import cl_lang
|
|
|
tr = cl_lang.lang()
|
|
|
tr.setLocalDomain('cl_lib')
|
|
|
tr.setLanguage(sys.modules[__name__])
|
|
|
|
|
|
class shareVars:
|
|
|
"""Общие методы для классов модулей серверных программ"""
|
|
|
# Переменная объект Vars
|
|
|
clVars = False
|
|
|
|
|
|
def createClVars(self, clVars=False, returnImportVar=False):
|
|
|
"""Создает объект Vars"""
|
|
|
# Словарь импортируемых переменных из ini Файлов
|
|
|
dictImportVars = {}
|
|
|
if not clVars:
|
|
|
clVars = DataVars()
|
|
|
clVars.flServer()
|
|
|
dictImportVars = clVars.flIniFile()
|
|
|
# Устанавливаем у объекта объект Vars
|
|
|
self.clVars = clVars
|
|
|
if returnImportVar:
|
|
|
return dictImportVars
|
|
|
return True
|
|
|
|
|
|
def deleteServiceVarsInFile(self, service):
|
|
|
"""Удаляет переменные сервиса из ini файлов
|
|
|
|
|
|
После запуска этого метода объект self.clVars должен быть пересоздан
|
|
|
"""
|
|
|
importVarsDict = self.createClVars(False,True)
|
|
|
serviceNameVars = "_%s_" %service
|
|
|
for location in importVarsDict.keys():
|
|
|
for nameVar in importVarsDict[location]:
|
|
|
# Если имя сервиса присутствует в переменной -
|
|
|
# Удаляем переменную
|
|
|
if serviceNameVars in nameVar:
|
|
|
if not self.clVars.Delete(nameVar, location, "server"):
|
|
|
return False
|
|
|
self.clVars = False
|
|
|
return True
|
|
|
|
|
|
def saveVarsClient(self, listVarName):
|
|
|
"""Записывает переменные для клиента calcualte-client"""
|
|
|
#считаем переменные для клиента
|
|
|
dictVar = {}
|
|
|
flagError = False
|
|
|
for varName in listVarName:
|
|
|
value = self.clVars.Get(varName)
|
|
|
if not value and value != "":
|
|
|
self.printERROR(_("Variables %s is empty")%varName)
|
|
|
flagError = True
|
|
|
break
|
|
|
dictVar[varName] = value
|
|
|
if flagError:
|
|
|
return False
|
|
|
#Запишем переменные в клиентскую секцию
|
|
|
for name,value in dictVar.items():
|
|
|
value = str(value)
|
|
|
if not value.strip():
|
|
|
self.clVars.Delete(name)
|
|
|
if not self.clVars.Write(name,value,True,"remote","client"):
|
|
|
self.printERROR(_("Error writing variable %s")%name)
|
|
|
flagError = True
|
|
|
break
|
|
|
if flagError:
|
|
|
return False
|
|
|
return True
|
|
|
|
|
|
def reloadDefaultVar(self, nameVar):
|
|
|
"""При получениии значения переменной снова
|
|
|
|
|
|
вызывается метод заполнения переменной"""
|
|
|
self.clVars.Set(nameVar,"",True)
|
|
|
self.clVars.__getattribute__(nameVar).countFill = 0
|
|
|
self.clVars.__getattribute__(nameVar).fillStart = True
|
|
|
return True
|
|
|
|
|
|
class servicesAPI(color_print):
|
|
|
"""Методы сервисов используемые другими сервисами"""
|
|
|
# Путь к модулю сервера
|
|
|
__pathServer__ = "/usr/lib/calculate/calculate-server/pym"
|
|
|
# Названия импортированных классов
|
|
|
__imports_names__ = []
|
|
|
# Импортированные классы
|
|
|
__imports_classes__ = {}
|
|
|
|
|
|
def __getServiceObj__(self, serviceName):
|
|
|
"""Получаем объект сервиса"""
|
|
|
if not serviceName in __imports_names__:
|
|
|
try:
|
|
|
classImport = getattr(__import__("cl_ldap", globals(),\
|
|
|
locals(),[]), serviceName)
|
|
|
except (ImportError, AttributeError):
|
|
|
self.printERROR(_("Can not found service class '%s'")\
|
|
|
%serviceName)
|
|
|
return False
|
|
|
__imports_classes__[serviceName] = classImport
|
|
|
__imports_names__.append(serviceName)
|
|
|
retObj = classImport()
|
|
|
else:
|
|
|
retObj = __imports_classes__[serviceName]()
|
|
|
return retObj
|
|
|
|
|
|
def searchUnixUser(self, userName, servUnixObj=None):
|
|
|
"""Поиск пользователя в LDAP ветке Unix сервиса"""
|
|
|
if not servUnixObj:
|
|
|
servUnixObj = self.__getServiceObj__("unix")
|
|
|
if not servUnixObj:
|
|
|
exit(1)
|
|
|
return servUnixObj.searchUnixUser(userName)
|
|
|
|
|
|
def searchPasswdUser(self, userName, servUnixObj=None):
|
|
|
"""Поиск пользователя в /etc/passwd"""
|
|
|
if not servUnixObj:
|
|
|
servUnixObj = self.__getServiceObj__("unix")
|
|
|
if not servUnixObj:
|
|
|
exit(1)
|
|
|
return servUnixObj.searchPasswdUser(userName)
|
|
|
|