develop
asamoukin 16 years ago
parent 8006f411e9
commit 51ca23753e

@ -49,7 +49,6 @@ class ldapFunction(cl_profile._error):
def __ldapConnect(self, dnUser, password):
"""Соединение с LDAP сервером"""
conLdap = ldap.initialize('ldap://localhost')
print dnUser, password
conLdap.simple_bind_s(dnUser, password)
return conLdap
@ -76,7 +75,7 @@ Version = "calculate-server 0.0.1"
tr = cl_base.lang()
tr.setLanguage(sys.modules[__name__])
class cl_ldap(cl_profile._error):
class cl_ldap(cl_profile._error, cl_profile.xmlShare):
def getChapterNumber(self,NameChapter):
# Показать номер раздела по его имени
@ -89,15 +88,17 @@ class cl_ldap(cl_profile._error):
def __init__(self, cmdName):
# ini файл
self.iniFile = "/etc/calculate/calculate.ini"
self.iniFile = "/etc/calculate2/calculate.ini"
self.cmdName = cmdName
# Удаляем ненужный аттрибут класса cl_profile.xmlShare
self._createElement = False
delattr(self, "_createElement")
self.shortOpt = []
self.cmdName = cmdName
#короткие опции командной строки
self.longOpt = []
self.shortOpt = []
#длинные опции командной строки
self.longOpt = []
#optEnd = ""
#if "user" in self.cmdName and not "mod" in self.cmdName:
#optEnd = _("user")
@ -150,6 +151,12 @@ class cl_ldap(cl_profile._error):
'helpChapter':_("Options"),
'help':_("input user password")
},
{'progAccess':(6,),
'chortOption':"f",
'longOption':"force",
'helpChapter':_("Options"),
'help':_("forced setup service")
},
# Services
{'helpChapter':_("Services"),
'help':" ldap \t\t\tldap " + servName + "\n"
@ -157,33 +164,33 @@ class cl_ldap(cl_profile._error):
{'helpChapter':_("Services"),
'help':" samba \t\tsamba " + servName + "\n"
},
{'helpChapter':_("Services"),
'help':" mail \t\t\tmail " + servName + "\n"
},
{'helpChapter':_("Services"),
'help':" ftp \t\t\tftp " + servName + "\n"
},
{'helpChapter':_("Services"),
'help':" proxy \t\tproxy " + servName + "\n"
},
{'helpChapter':_("Services"),
'help':" radius \t\tradius " + servName + "\n"
},
{'helpChapter':_("Services"),
'help':" jabber \t\tjabber " + servName + "\n"
},
{'helpChapter':_("Services"),
'help':" addressbook \t\taddressbook " + servName + "\n"
},
{'helpChapter':_("Services"),
'help':" dhcp \t\t\tdhcp " + servName + "\n"
},
{'helpChapter':_("Services"),
'help':" named \t\tnamed " + servName + "\n"
},
{'helpChapter':_("Services"),
'help':" wiki \t\t\twiki " + servName + "\n"
},
##{'helpChapter':_("Services"),
##'help':" mail \t\t\tmail " + servName + "\n"
##},
##{'helpChapter':_("Services"),
##'help':" ftp \t\t\tftp " + servName + "\n"
##},
##{'helpChapter':_("Services"),
##'help':" proxy \t\tproxy " + servName + "\n"
##},
##{'helpChapter':_("Services"),
##'help':" radius \t\tradius " + servName + "\n"
##},
##{'helpChapter':_("Services"),
##'help':" jabber \t\tjabber " + servName + "\n"
##},
##{'helpChapter':_("Services"),
##'help':" addressbook \t\taddressbook " + servName + "\n"
##},
##{'helpChapter':_("Services"),
##'help':" dhcp \t\t\tdhcp " + servName + "\n"
##},
##{'helpChapter':_("Services"),
##'help':" named \t\tnamed " + servName + "\n"
##},
##{'helpChapter':_("Services"),
##'help':" wiki \t\t\twiki " + servName + "\n"
##},
# Informative output
{'chortOption':"h",
'longOption':"help",
@ -439,40 +446,43 @@ _("in the system") + ".\n"
self.setError(_("Not found ini file:")) + "\n " + self.iniFile
return False
def createIniFile(self):
pass
def setParamIniFile(self, name, value):
"""Записываем новый параметр в ini файл"""
if os.access(self.iniFile, os.F_OK):
FD = open (self.iniFile)
lines = FD.read().splitlines()
FD.close()
dictParam = {}
newLines = []
for par in lines:
n ,v = par.split("=")
if not dictParam.has_key(n.strip()):
dictParam[n.strip()] = v.strip()
newLines.append((n.strip(),v.strip(),par))
if dictParam.has_key(name):
i = 0
for n,v,l in newLines:
if n == name:
newLines[i] = (name, value, name + "=" + value)
break
i += 1
else:
newLines.append((name, value, name + "=" + value))
if newLines:
FD = open (self.iniFile, "w")
FD.truncate(0)
FD.seek(0)
for n,v,l in newLines[:-1]:
FD.write(l+"\n")
FD.write(newLines[-1][2])
FD.close()
return True
# Если ini файл не существует создаем его
if not os.access(self.iniFile, os.F_OK):
self.createIniFile()
FD = open (self.iniFile)
lines = FD.read().splitlines()
FD.close()
dictParam = {}
newLines = []
for par in lines:
n ,v = par.split("=")
if not dictParam.has_key(n.strip()):
dictParam[n.strip()] = v.strip()
newLines.append((n.strip(),v.strip(),par))
if dictParam.has_key(name):
i = 0
for n,v,l in newLines:
if n == name:
newLines[i] = (name, value, name + "=" + value)
break
i += 1
else:
self.setError(_("Not found ini file:")) + "\n " + self.iniFile
return False
newLines.append((name, value, name + "=" + value))
if newLines:
FD = open (self.iniFile, "w")
FD.truncate(0)
FD.seek(0)
for n,v,l in newLines[:-1]:
FD.write(l+"\n")
FD.write(newLines[-1][2])
FD.close()
return True
def delParamIniFile(self, name):
"""Удаляет параметр из ini файла"""
@ -526,18 +536,21 @@ _("in the system") + ".\n"
fout, fin = popen2.popen2(cmdStrProg)
fin.close()
textLine = fout.readline()
fout.read()
fout.close()
return textLine
def printRight(self, right):
"""Переводит курсор на позицию right справа от края консоли
def printRight(self, offsetLeft, offsetRight):
"""Добавляет необходимое количество пробелов:
количество пробелов = (ширина консоли - offsetLeft - offsetRight)
"""
s = struct.pack("HHHH", 0, 0, 0, 0)
fd_stdout = sys.stdout.fileno()
x = fcntl.ioctl(fd_stdout, termios.TIOCGWINSZ, s)
#(rows, cols, x pixels, y pixels)
cols = struct.unpack("HHHH", x)[1]
for i in range(cols-right):
for i in range(cols - offsetLeft - offsetRight):
sys.stdout.write(" ")
def colorPrint(self,attr,fg,bg,string):
@ -588,16 +601,100 @@ _("in the system") + ".\n"
lst.append(bg)
sys.stdout.write("\033[%sm%s\033[0m" %(";".join(lst),string))
def greenPrint(self, string):
"""Печатает зеленое сообщение"""
def greenBrightPrint(self, string):
"""Печатает яркое зеленое сообщение"""
self.colorPrint("1","32","",string)
def bluePrint(self, string):
"""Печатает фиолетовое сообщение"""
def blueBrightPrint(self, string):
"""Печатает яркое cинее сообщение"""
self.colorPrint("1","34","",string)
def setupLdapServer(self):
"""Начальная настройка Ldap сервиса"""
def redBrightPrint(self, string):
"""Печатает яркое красное сообщение"""
self.colorPrint("1","31","",string)
def brPrint(self):
sys.stdout.write("\n")
def lenString(self, string):
"""Получаем длинну строки"""
stringUnicode = self._toUNICODE(string)
lenString = len(stringUnicode)
return lenString
def defaultPrint(self, string):
sys.stdout.write(string)
def printLine(self, argL, argR):
"""Печатает справа и слева консоли цветные сообщения"""
#Допустимые цвета
colorDict = {\
# цвет по умолчанию
'':self.defaultPrint,
# ярко зеленый
'greenBr':self.greenBrightPrint,
# ярко голубой
'blueBr':self.blueBrightPrint,
# ярко красный
'redBr':self.redBrightPrint,
}
# cмещение от левого края консоли
offsetL = 0
for color,leftString in argL:
offsetL += self.lenString(leftString)
if colorDict.has_key(color):
# печатаем и считаем смещение
colorDict[color](leftString)
else:
colorDict[''](leftString)
# cмещение от правого края консоли
offsetR = 0
for color,rightString in argR:
offsetR += self.lenString(rightString)
# Добавляем пробелы
self.printRight(offsetL, offsetR)
for color,rightString in argR:
if colorDict.has_key(color):
# печатаем и считаем смещение
colorDict[color](rightString)
else:
colorDict[''](rightString)
def printNotOK(self, string):
"""Вывод на печать в случае сбоя"""
self.printLine((('greenBr',' * '),
('',string),
),
(('blueBr','['),
('redBr',' !! '),
('blueBr',']'),
)
)
def printOK(self, string):
"""Вывод на печать в случае успеха"""
self.printLine((('greenBr',' * '),
('',string),
),
(('blueBr','['),
('greenBr',' ok '),
('blueBr',']'),
)
)
def setupLdapServer(self, options):
"""Начальная настройка LDAP сервиса"""
# Принудительная установка
forceOptions = False
if "f" in options:
forceOptions = True
# В случае если сервер установлен
if self.getParamIniFile("setup_LDAP") == "yes" and\
not forceOptions:
print _("LDAP server is configured")
return True
# Проверим запущен ли ldap
if self.getRunService("ldap"):
print _("The LDAP service is running")
@ -607,10 +704,11 @@ _("in the system") + ".\n"
LDAP in backup directory")
print "3. " + _("Restart the program")
return True
self.setParamIniFile("setup_LDAP","no")
clVars = cl_base.DataVars()
clVars.flServer()
# Для тестовых целей устанавливаем директорию инсталяции
clVars.Set("setup_path_install","/tmp/test1/")
#clVars.Set("setup_path_install","/tmp/test1/")
# Устанавливаем переменную (говорит о том что первый проход)
clVars.Set("setup_pass_parser","1",True)
# Cоздаем объект профиль устанавливая директорию ldap для
@ -619,31 +717,19 @@ LDAP in backup directory")
# Объединяем профили
clProf.applyProfiles()
# Удаляем предыдущую базу данных
print _("Remove previons Ldap Database ...")
self.execProg("rm -rf /var/lib/openldap-data/*")
self.printOK(_("Remove previons LDAP Database ..."))
# Запускаем LDAP сервер
textLine = self.execProg("/etc/init.d/slapd start")
ldifFile = "/usr/lib/calculate/calculate-server/ldif/ldap_base.ldif"
#self.printRight(6)
#self.bluePrint("[")
#self.greenPrint(" ok ")
#self.bluePrint("]")
#print
if "ok" in textLine:
print "LDAP start OK"
self.printOK(_("LDAP start ..."))
else:
print "Error Ldap start"
self.printNotOK(_("LDAP start ..."))
return False
baseLdif = self.createLdif(ldifFile, clVars)
#print baseLdif
print clVars.Get("soft_ldap_admin")
#rootTmpDn = clVars.Get("soft_ldap_root_tmp")
#print clVars.Get("soft_ldap_rootpw_tmp")
#print clVars.Get("soft_ldap_rootpw_tmp_hash")
print clVars.Get("soft_ldap_adminpw")
#clVars.printVars()
ldapObj = ldapFunction(clVars.Get("soft_ldap_admin_tmp"),
clVars.Get("soft_ldap_adminpw_tmp"))
@ -651,15 +737,26 @@ LDAP in backup directory")
ldapObj.ldapAdd(baseLdif)
if ldapObj.getError():
print _("LDAP Error") + ": " + ldapObj.getError()
return False
self.printOK(_("Add ldif file ..."))
# Удаляем временного пользователя root из конфигурационного файла
clVars.Set("setup_pass_parser","2",True)
clProf.applyProfiles()
# Перезапускаем LDAP сервер
textLine = self.execProg("/etc/init.d/slapd restart")
if "ok" in textLine:
self.printOK(_("LDAP restart ..."))
else:
self.printNotOK(_("LDAP restart ..."))
return False
self.setParamIniFile("setup_LDAP","yes")
#print clVars.Get("soft_ldap_admin")
#print clVars.Get("soft_ldap_adminpw")
#self.setParamIniFile("test","param")
#
#self.setParamIniFile("test1","param1")
#self.delParamIniFile("test1")
#self.delParamIniFile("test")

@ -48,8 +48,7 @@ class tsOpt(cl_base.opt):
shortOpt = self.obj.getShortOpt(option)
if not shortOpt in self.opt:
self.opt.append(shortOpt)
if shortOpt=='p':
pass
def handlerErrOpt(self):
# Обработчик ошибок
@ -72,8 +71,7 @@ if __name__ == "__main__":
optObj = tsOpt(ldapObj)
if optObj.params.has_key('service'):
if optObj.params['service'] == "ldap":
print _("Setup Ldap Service")
ldapObj.setupLdapServer()
ldapObj.setupLdapServer(optObj.opt)
#import time
#for i in range(5):
#time.sleep(0.5)

Loading…
Cancel
Save