|
|
|
@ -39,6 +39,8 @@ import time
|
|
|
|
|
import datetime
|
|
|
|
|
# Создание временных файлов
|
|
|
|
|
import tempfile
|
|
|
|
|
# Вывод в строку ввода
|
|
|
|
|
import readline
|
|
|
|
|
|
|
|
|
|
Version = "calculate-server 2.0.8"
|
|
|
|
|
|
|
|
|
@ -906,6 +908,85 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
self.printERROR(_("Service %s is not installed")%service + " ...")
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
def raw_input(self, promptText="", inputText=""):
|
|
|
|
|
"""Создает поле ввода
|
|
|
|
|
|
|
|
|
|
promptText - текст перед полем ввода
|
|
|
|
|
inputText - текст в поле ввода
|
|
|
|
|
"""
|
|
|
|
|
if inputText:
|
|
|
|
|
# Записываем текст для последующего вывода в строке ввода
|
|
|
|
|
readline.set_pre_input_hook(lambda:\
|
|
|
|
|
readline.insert_text(inputText) or\
|
|
|
|
|
readline.redisplay())
|
|
|
|
|
strInput = ""
|
|
|
|
|
if promptText:
|
|
|
|
|
# Получаем текст введенный пользователем
|
|
|
|
|
strInput = raw_input(promptText)
|
|
|
|
|
else:
|
|
|
|
|
strInput = raw_input()
|
|
|
|
|
if inputText:
|
|
|
|
|
# Сбрасываем строку ввода
|
|
|
|
|
readline.set_pre_input_hook(None)
|
|
|
|
|
return strInput
|
|
|
|
|
|
|
|
|
|
def isCorrectStringNet(self, strNetworks):
|
|
|
|
|
"""Проверяет на корректность строку доверительных сетей
|
|
|
|
|
|
|
|
|
|
Выводит cписок сетей
|
|
|
|
|
"""
|
|
|
|
|
splNet = strNetworks.replace(","," ").split(" ")
|
|
|
|
|
res=re.compile("^\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?(\/\d\d)?$")
|
|
|
|
|
flagError = False
|
|
|
|
|
networks = []
|
|
|
|
|
for i in splNet:
|
|
|
|
|
r = i.strip()
|
|
|
|
|
if not r:
|
|
|
|
|
continue
|
|
|
|
|
find =res.search(r)
|
|
|
|
|
if not find:
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
splIP = map(lambda x: 255>=int(x.split("/")[0]) and x.split("/")[0], find.group().split("."))
|
|
|
|
|
if splIP[0] and int(splIP[0]) == 0 or\
|
|
|
|
|
splIP[0] and int(splIP[3]) == 255:
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
for t in splIP:
|
|
|
|
|
if t == False:
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
if flagError:
|
|
|
|
|
break
|
|
|
|
|
networks.append(r)
|
|
|
|
|
if flagError:
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
|
return networks
|
|
|
|
|
|
|
|
|
|
def getUserAllowNetwork(self, strPrompt, strNetAllow):
|
|
|
|
|
"""Получаем от пользователя доверительные сети
|
|
|
|
|
|
|
|
|
|
вывод - список доверительных сетей
|
|
|
|
|
"""
|
|
|
|
|
def printW():
|
|
|
|
|
print _("Incorrect string allow networks")
|
|
|
|
|
print _("Example - allow networks: 10.0.0.0/24 10.0.10/24")
|
|
|
|
|
print _("Try again\n")
|
|
|
|
|
strNet = self.raw_input(strPrompt, strNetAllow)
|
|
|
|
|
i = 0
|
|
|
|
|
while i<3 and not self.isCorrectStringNet(strNet):
|
|
|
|
|
printW()
|
|
|
|
|
strNet = self.raw_input(strPrompt, strNet)
|
|
|
|
|
i +=1
|
|
|
|
|
if i == 3 and not self.isCorrectStringNet(strNet):
|
|
|
|
|
printW()
|
|
|
|
|
self.printERROR("You used three attempts, \
|
|
|
|
|
if you want to continue to run the program again")
|
|
|
|
|
return False
|
|
|
|
|
return self.isCorrectStringNet(strNet)
|
|
|
|
|
|
|
|
|
|
def copyDir(self, destDir, srcDir):
|
|
|
|
|
"""Копируем директорию в другое место
|
|
|
|
|
|
|
|
|
@ -3418,6 +3499,27 @@ Unix service ...") %str(primaryMail))
|
|
|
|
|
self.printSUCCESS(_("Added user in Mail service") + " ...")
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def getAllowNet(self):
|
|
|
|
|
"""Получаем от пользователя доверительные сети
|
|
|
|
|
|
|
|
|
|
и устанавливаем переменную профилей sr_mail_net_allow
|
|
|
|
|
|
|
|
|
|
self.clVars должен быть определен
|
|
|
|
|
"""
|
|
|
|
|
print _("Enter the allowed ip addresses and network for %s service")\
|
|
|
|
|
%"Mail"
|
|
|
|
|
strPrompt = _("allow networks: ")
|
|
|
|
|
netAllow = self.clVars.Get("sr_mail_net_allow")
|
|
|
|
|
strNetAllow = self.clVars.Get("os_net_allow")
|
|
|
|
|
if netAllow:
|
|
|
|
|
strNetAllow = netAllow.replace(","," ")
|
|
|
|
|
allowNet = self.getUserAllowNetwork(strPrompt, strNetAllow)
|
|
|
|
|
if not allowNet:
|
|
|
|
|
return False
|
|
|
|
|
# Установка переменной доступные сети
|
|
|
|
|
self.clVars.Set("sr_mail_net_allow",",".join(allowNet),True)
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def setupMailServer(self, options):
|
|
|
|
|
"""Начальная настройка Mail сервиса"""
|
|
|
|
|
# Принудительная установка
|
|
|
|
@ -3453,7 +3555,11 @@ Unix service ...") %str(primaryMail))
|
|
|
|
|
_("input 'yes'") +", "+ _("if not 'no'")
|
|
|
|
|
if not self.dialogYesNo(messDialog):
|
|
|
|
|
return True
|
|
|
|
|
if not self.getAllowNet():
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
|
if not self.getAllowNet():
|
|
|
|
|
return False
|
|
|
|
|
# делаем backup
|
|
|
|
|
# Проверим запущен ли ldap
|
|
|
|
|
if not self.getRunService("ldap"):
|
|
|
|
@ -3572,6 +3678,8 @@ Unix service ...") %str(primaryMail))
|
|
|
|
|
self.clVars.Delete("sr_mail_send_crypt","",True)
|
|
|
|
|
self.clVars.Write("sr_mail_crypt",
|
|
|
|
|
self.clVars.Get("sr_mail_crypt"),True,"local")
|
|
|
|
|
self.clVars.Write("sr_mail_net_allow",
|
|
|
|
|
self.clVars.Get("sr_mail_net_allow"),True,"local")
|
|
|
|
|
#запишем переменные для клиента
|
|
|
|
|
if mailType == "all":
|
|
|
|
|
self.clVars.Set("sr_mail_type","imap")
|
|
|
|
@ -4652,6 +4760,27 @@ if %%errorlevel%%==0 NET USE T: \\\\%s\\ftp' %(netbios,netbios,netbios)
|
|
|
|
|
self.printERROR(_("Can not add machine")+ " ...")
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
def getAllowNet(self):
|
|
|
|
|
"""Получаем от пользователя доверительные сети
|
|
|
|
|
|
|
|
|
|
и устанавливаем переменную профилей sr_samba_net_allow
|
|
|
|
|
|
|
|
|
|
self.clVars должен быть определен
|
|
|
|
|
"""
|
|
|
|
|
print _("Enter the allowed ip addresses and network for %s service")\
|
|
|
|
|
%"Samba"
|
|
|
|
|
strPrompt = _("allow networks: ")
|
|
|
|
|
netAllow = self.clVars.Get("sr_samba_net_allow")
|
|
|
|
|
strNetAllow = self.clVars.Get("os_net_allow")
|
|
|
|
|
if netAllow:
|
|
|
|
|
strNetAllow = netAllow.replace(","," ")
|
|
|
|
|
allowNet = self.getUserAllowNetwork(strPrompt, strNetAllow)
|
|
|
|
|
if not allowNet:
|
|
|
|
|
return False
|
|
|
|
|
# Установка переменной доступные сети
|
|
|
|
|
self.clVars.Set("sr_samba_net_allow",",".join(allowNet),True)
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def setupSambaServer(self, options):
|
|
|
|
|
"""Начальная настройка Samba сервиса"""
|
|
|
|
|
# Принудительная установка
|
|
|
|
@ -4671,7 +4800,6 @@ if %%errorlevel%%==0 NET USE T: \\\\%s\\ftp' %(netbios,netbios,netbios)
|
|
|
|
|
self.printWARNING (_("WARNING") + ": " +\
|
|
|
|
|
_("Samba server is configured")+ ".")
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
if not forceOptions:
|
|
|
|
|
# предупреждение при выполнении этой программы будут изменены
|
|
|
|
|
# конфигурационные файлы сервиса Samba
|
|
|
|
@ -4684,7 +4812,13 @@ if %%errorlevel%%==0 NET USE T: \\\\%s\\ftp' %(netbios,netbios,netbios)
|
|
|
|
|
_("input 'yes'") +", "+ _("if not 'no'")
|
|
|
|
|
if not self.dialogYesNo(messDialog):
|
|
|
|
|
return True
|
|
|
|
|
# Получаем от пользователя доверительные сети
|
|
|
|
|
if not self.getAllowNet():
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
|
# Получаем от пользователя доверительные сети
|
|
|
|
|
if not self.getAllowNet():
|
|
|
|
|
return False
|
|
|
|
|
# делаем backup
|
|
|
|
|
# Проверим запущен ли ldap
|
|
|
|
|
if not self.getRunService("ldap"):
|
|
|
|
@ -4847,6 +4981,8 @@ if %%errorlevel%%==0 NET USE T: \\\\%s\\ftp' %(netbios,netbios,netbios)
|
|
|
|
|
self.clVars.Write("sr_samba_domain",domain,True,"local")
|
|
|
|
|
netbios = self.clVars.Get("sr_samba_netbios")
|
|
|
|
|
self.clVars.Write("sr_samba_netbios",netbios,True,"local")
|
|
|
|
|
netallow = self.clVars.Get("sr_samba_net_allow")
|
|
|
|
|
self.clVars.Write("sr_samba_net_allow",netallow,True,"local")
|
|
|
|
|
#запишем переменные для клиента
|
|
|
|
|
fullHostName = "%s.%s"%(self.clVars.Get('os_net_hostname'),
|
|
|
|
|
self.clVars.Get('os_net_domain'))
|
|
|
|
@ -7693,7 +7829,8 @@ class servRepl(shareLdap):
|
|
|
|
|
# которые будут сохранены при rebuild
|
|
|
|
|
self.restoreLocalVar = ["sr_samba_domain","sr_samba_netbios",
|
|
|
|
|
"ld_repl_servers","ld_repl_unix_servers",
|
|
|
|
|
"ld_repl_samba_servers","ld_repl_ids"]
|
|
|
|
|
"ld_repl_samba_servers","ld_repl_ids",
|
|
|
|
|
"sr_samba_net_allow"]
|
|
|
|
|
# Переменные клиента (/var/calculate/remote/calculate.env)
|
|
|
|
|
# которые будут сохранены при rebuild
|
|
|
|
|
self.restoreRemoteClientVar = ["ld_base_dn", "ld_bind_dn",
|
|
|
|
@ -7801,6 +7938,13 @@ class servRepl(shareLdap):
|
|
|
|
|
elif serviceRepl == "samba":
|
|
|
|
|
self.clVars.Set('sr_samba_netbios', "%s-cds"%hostName, True)
|
|
|
|
|
self.clVars.Set('sr_samba_host',fullHostName, True)
|
|
|
|
|
# Получаем от пользователя доверительные сети для сервиса Samba
|
|
|
|
|
# Переназначаем объект переменных
|
|
|
|
|
print _("Replications servers for Samba: %s")\
|
|
|
|
|
% " ".join(replSambaServers)
|
|
|
|
|
self.servSambaObj.clVars = self.clVars
|
|
|
|
|
if not self.servSambaObj.getAllowNet():
|
|
|
|
|
return False
|
|
|
|
|
# Находим пути к env файлам
|
|
|
|
|
envPaths = self.clVars.Get("cl_env_path")
|
|
|
|
|
# Удаляем env файлы
|
|
|
|
@ -7832,6 +7976,25 @@ class servRepl(shareLdap):
|
|
|
|
|
if self.restoreRemoteClientVar:
|
|
|
|
|
if not self.saveVarsClient(self.restoreRemoteClientVar):
|
|
|
|
|
return False
|
|
|
|
|
# Выставляем права на ресурс remote
|
|
|
|
|
if serviceRepl == "samba":
|
|
|
|
|
cl = self.staticUsers["client"]
|
|
|
|
|
# Если нет то создадим директорию /var/calculate/remote
|
|
|
|
|
remoteEnvFile = self.clVars.Get("cl_env_path")[0]
|
|
|
|
|
remotePath = os.path.split(remoteEnvFile)[0]
|
|
|
|
|
if not os.path.exists(remotePath):
|
|
|
|
|
os.makedirs(remotePath)
|
|
|
|
|
# права и владелец /var/calculate/remote
|
|
|
|
|
if os.path.exists(remotePath):
|
|
|
|
|
os.chown(remotePath,0,int(cl.gid))
|
|
|
|
|
os.chmod(remotePath,02750)
|
|
|
|
|
# изменяем владельца remote на client
|
|
|
|
|
if not os.path.exists(remoteEnvFile):
|
|
|
|
|
fd = os.open(remoteEnvFile, os.O_CREAT)
|
|
|
|
|
os.close(fd)
|
|
|
|
|
os.chmod(remoteEnvFile, 0640)
|
|
|
|
|
if os.path.exists(remoteEnvFile):
|
|
|
|
|
os.chown(remoteEnvFile,0,int(cl.gid))
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
@adminConnectLdap
|
|
|
|
|