При установке сервисов Samba, Mail, и при выполнении cl-rebuild --repl добавлен диалог для ввода разрешенных сетей соответствующих сервисов.

git-svn-id: http://svn.calculate.ru/calculate2/calculate-server/trunk@1031 c91db197-33c1-4113-bf15-f8a5c547ca64
develop
asamoukin 15 years ago
parent 4a4d65ad3c
commit 5efdb7d73a

@ -55,7 +55,7 @@ unknown_local_recipient_reject_code = 550
#прописываем следующие сети 127.0.0.0 (для localhost, собственно сам
#сервер), 192.168.10.0 (для всех других компьютеров в нашей внешней сети),
#и 192.168.0.0 (для всех компьютеров во внутренней сети).
mynetworks = #-os_net_allow-#, 127.0.0.0/8#-sr_mail_relay-#
mynetworks = #-sr_mail_net_allow_pass-#
#По умолчанию, Postfix пытается посылать почту в Internet напрямую. В зависимости
#от окружения, в котором функционирует Ваш почтовый сервер, это может быть

@ -74,7 +74,8 @@ chown=root:root
logon home = \\%L\%U
logon drive = H:
hosts allow = #-os_net_allow-# 127.
#hosts allow = #-os_net_allow-# 127.
hosts allow = #-sr_samba_net_allow_pass-#
hosts deny = 0.0.0.0/0
#interfaces = 127.0.0.1 eth0
map to guest = bad user

@ -352,4 +352,30 @@ class fillVars(object, cl_base.glob_attr):
fullHostName = "%s.%s"%(hostName,domain)
if fullHostName in replSambaServers:
return "on"
return "off"
return "off"
def get_sr_samba_net_allow_pass(self):
"""Текст в smb.conf - доступные сети"""
netAllow = self.Get("sr_samba_net_allow")
if netAllow:
netAllow = netAllow.split(",")
netAllow = " ".join(netAllow)
netAllow += " 127."
return netAllow
osNetAllow = self.Get("os_net_allow")
if osNetAllow:
return "%s 127." %osNetAllow
return "127."
def get_sr_mail_net_allow_pass(self):
"""Текст в main.cf - доступные сети"""
netAllow = self.Get("sr_mail_net_allow")
if netAllow:
netAllow = netAllow.split(",")
netAllow = ", ".join(netAllow)
netAllow += ", 127.0.0.0/8"
return netAllow
osNetAllow = self.Get("os_net_allow")
if osNetAllow:
return "%s, 127.0.0.0/8" %osNetAllow
return "127.0.0.0/8"

@ -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

@ -311,12 +311,6 @@ class Data:
#V soft_ldap_admin_mailpw_hash
ld_mail_hash = {}
#почтовый релей
# Пример заполнения:
# value:', 212.113.122.130'
#soft_ldap_mail_relay
sr_mail_relay = {}
# Директория хранения писем
#V soft_ldap_mail_path
sr_mail_path = {'value':'/var/calculate/server-data/mail'}
@ -432,4 +426,13 @@ class Data:
# id серверов репликации
ld_repl_ids = {}
# Включена или нет репликация для сервиса Samba
ld_repl_samba_set = {}
ld_repl_samba_set = {}
# Доступные сети для сервиса Samba
sr_samba_net_allow = {}
# Текст в smb.conf - доступные сети
sr_samba_net_allow_pass = {}
# Доступные сети для сервиса Mail
sr_mail_net_allow = {}
# Текст в main.cf - доступные сети
sr_mail_net_allow_pass = {}
Loading…
Cancel
Save