@ -42,7 +42,7 @@ import tempfile
# Вывод в строку ввода
import readline
Version = " calculate-server 2.1. 3 "
Version = " calculate-server 2.1. 4 "
tr = cl_base . lang ( )
tr . setLanguage ( sys . modules [ __name__ ] )
@ -399,7 +399,8 @@ in a sambaDomainName',
# инсталированнные сервисы
servInstalled = [ ]
# доступные сервисы
services = ( ' ldap ' , ' unix ' , ' samba ' , ' mail ' , ' jabber ' , ' ftp ' , ' proxy ' )
services = ( ' ldap ' , ' unix ' , ' samba ' , ' mail ' ,
' jabber ' , ' ftp ' , ' proxy ' , ' dns ' )
for serv in services :
if self . clVars . Get ( " sr_ %s _set " % serv ) == " on " :
servInstalled . append ( serv )
@ -894,6 +895,17 @@ in a sambaDomainName',
_ ( " service is not stopped " ) )
flagError = True
break
elif service == " dns " :
if self . getRunDaemons ( [ " named " ] ) :
textLines = self . execProg ( " /etc/init.d/named stop " , False ,
False )
if not ( textLines and type ( textLines ) == types . ListType and \
" ok " in textLines [ - 1 ] or textLines and \
" ok " in textLines ) :
self . printERROR ( " DNS " + " " +
_ ( " service is not stopped " ) )
flagError = True
break
elif self . getRunService ( service ) :
stopService = service
textLines = self . execProg ( " /etc/init.d/ %s stop " % ( stopService ) ,
@ -972,7 +984,8 @@ in a sambaDomainName',
if os . path . exists ( baselayoutDir ) :
addDirDict [ " ejabberd " ] = ( baselayoutDir , " ejabberd " )
addDirDict [ " samba " ] = ( baselayoutDir , " samba " )
elif daemon in [ " ejabberd " , " samba " ] :
addDirDict [ " named " ] = ( baselayoutDir , " named " )
elif daemon in [ " ejabberd " , " samba " , " named " ] :
if not os . system ( " /lib/rc/bin/service_started %s " % daemon ) :
runDaemons [ daemon ] = True
else :
@ -8417,6 +8430,7 @@ class cl_ldap(shareLdap):
( _ ( " Jabber service options " ) , True , 1 , 1 , " options " ) ,
( _ ( " FTP service options " ) , True , 1 , 1 , " options " ) ,
( _ ( " Proxy service options " ) , True , 1 , 1 , " options " ) ,
( _ ( " DNS service options " ) , True , 1 , 1 , " options " ) ,
( _ ( " Services " ) , True , 1 , 0 , " " )
]
@ -8454,6 +8468,8 @@ class cl_ldap(shareLdap):
_ ( " FTP service options " ) ] ,
" proxy " : [ _ ( " Common options " ) ,
_ ( " Proxy service options " ) ] ,
" dns " : [ _ ( " Common options " ) ,
_ ( " DNS service options " ) ] ,
}
# Cвязь длинных опций помощи и выводимых разделов помощи с опциями
self . relOptions = { " h " : [ _ ( " Common options " ) ] ,
@ -8467,10 +8483,12 @@ class cl_ldap(shareLdap):
_ ( " Mail service options " ) ] ,
" help-jabber " : [ _ ( " Common options " ) ,
_ ( " Jabber service options " ) ] ,
" help-ftp " : [ _ ( " Common op tions" ) ,
" help-ftp " : [ _ ( " Common op Proxy tions" ) ,
_ ( " FTP service options " ) ] ,
" help-proxy " : [ _ ( " Common options " ) ,
_ ( " Proxy service options " ) ] ,
" help-dns " : [ _ ( " Common options " ) ,
_ ( " DNS service options " ) ] ,
" help-all " : [ _ ( " Common options " ) ,
_ ( " Samba service options " ) ,
_ ( " LDAP service options " ) ,
@ -8479,6 +8497,7 @@ class cl_ldap(shareLdap):
_ ( " Jabber service options " ) ,
_ ( " FTP service options " ) ,
_ ( " Proxy service options " ) ,
_ ( " DNS service options " ) ,
]
}
@ -8533,6 +8552,10 @@ class cl_ldap(shareLdap):
' helpChapter ' : _ ( " Common options " ) ,
' help ' : _ ( " display help for Proxy service options " )
} ,
{ ' longOption ' : " help-dns " ,
' helpChapter ' : _ ( " Common options " ) ,
' help ' : _ ( " display help for DNS service options " )
} ,
{ ' progAccess ' : ( 0 , ) ,
' shortOption ' : " f " ,
' longOption ' : " force " ,
@ -9263,6 +9286,12 @@ the password will be changed only for Samba account")
' helpChapter ' : _ ( " Proxy service options " ) ,
' help ' : _ ( " enter the allowed ip addresses and network " )
} ,
{ ' progAccess ' : ( 6 , ) ,
' shortOption ' : " a " ,
' longOption ' : " allow " ,
' helpChapter ' : _ ( " DNS service options " ) ,
' help ' : _ ( " enter the allowed ip addresses and network " )
} ,
{ ' progAccess ' : ( 6 , ) ,
' shortOption ' : " p " ,
' longOption ' : " port " ,
@ -9276,6 +9305,12 @@ the password will be changed only for Samba account")
' helpChapter ' : _ ( " LDAP service options " ) ,
' help ' : _ ( " forced setup service " )
} ,
{ ' progAccess ' : ( 6 , ) ,
' shortOption ' : " f " ,
' longOption ' : " force " ,
' helpChapter ' : _ ( " DNS service options " ) ,
' help ' : _ ( " forced setup service " )
} ,
{ ' progAccess ' : ( 6 , ) ,
' shortOption ' : " n " ,
' longOption ' : " netbios " ,
@ -9664,13 +9699,13 @@ file")
#'helpChapter':_("Common options"),
#'help':_("show enviroment values (filter for type, all - no filter)")
#},
# Services
{ ' progAccess ' : ( 6 , ) ,
' helpChapter ' : _ ( " Services " ) ,
' help ' : pcs ( " ldap " , self . column_width ,
" ldap " + servName , self . consolewidth - self . column_width )
} ,
{ ' progAccess ' : ( 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 9 , 12 , 14 ) ,
' helpChapter ' : _ ( " Services " ) ,
' help ' : pcs ( " unix " , self . column_width ,
@ -9701,6 +9736,11 @@ file")
' help ' : pcs ( " proxy " , self . column_width ,
" proxy " + servName , self . consolewidth - self . column_width )
} ,
{ ' progAccess ' : ( 6 , ) ,
' helpChapter ' : _ ( " Services " ) ,
' help ' : pcs ( " dns " , self . column_width ,
" dns " + servName , self . consolewidth - self . column_width )
} ,
##{'helpChapter':_("Services"),
##'help':" mail \t\t\tmail " + servName + "\n"
##},
@ -12861,7 +12901,6 @@ class servProxy(shareLdap):
self . relUsersDN = self . addDN ( self . relUsDN , self . relDN )
# DN групп пользователей, относительно базового DN
self . relGroupsDN = self . addDN ( self . relGrDN , self . relDN )
# Директория хранения писем
if unixObj :
# получаем объект сервиса Unix
self . servUnixObj = unixObj
@ -12870,7 +12909,8 @@ class servProxy(shareLdap):
self . servUnixObj = servUnix ( )
def connectToLDAP ( self , adminDn , adminPw ) :
""" Подключаемся к LDAP """
""" Подключаемся к LDAP - для внешних программ запускающихся не от root
"""
ldapObj = ldapFunction ( adminDn , adminPw )
# Генератор задержек
wait = self . genSleep ( )
@ -13658,6 +13698,179 @@ group'),
self . printOK ( _ ( " Proxy service configured " ) + " ... " )
return True
class servDNS ( shareLdap ) :
""" Методы сервиса DNS """
# Прямые зоны
relFwdDN = ' ou=Forward '
# Обратные зоны
relRevDN = ' ou=Reverse '
relServDN = ' ou=DNS '
ldifFileBase = " /usr/lib/calculate/calculate-server/ldif/dns_base.ldif "
def __init__ ( self ) :
shareLdap . __init__ ( self )
# DN сервиса
self . relDN = self . addDN ( self . relServDN , self . ServicesDN )
# DN прямых зон, относительно базового DN
self . relForwardDN = self . addDN ( self . relFwdDN , self . relDN )
# DN обратных зон, относительно базового DN
self . relReverseDN = self . addDN ( self . relRevDN , self . relDN )
def getAllowNet ( self ) :
""" Получаем от пользователя доверительные сети
и устанавливаем переменную профилей sr_dns_net_allow
self . clVars должен быть определен
"""
print _ ( " Enter the allowed ip addresses and network for %s service " ) \
% " DNS " + " ( " + _ ( " comma or space delimited " ) + " ) "
strPrompt = _ ( " allow networks: " )
netAllow = self . clVars . Get ( " sr_dns_net_allow " )
strNetAllow = " "
if netAllow :
strNetAllow = netAllow . replace ( " , " , " " )
allowNet = self . getUserAllowNetwork ( strPrompt , strNetAllow )
if not allowNet :
return False
# Установка переменной доступные сети
allowNet = " , " . join ( allowNet )
self . clVars . Set ( " sr_dns_net_allow " , allowNet , True )
return allowNet
def setupDnsServer ( self , options ) :
""" Начальная настройка DNS сервиса """
# Принудительная установка
forceOptions = False
if options . has_key ( " f " ) :
forceOptions = True
# Создаем объект переменных
self . createClVars ( )
if self . clVars . Get ( " sr_ldap_set " ) != " on " :
self . printERROR ( _ ( " LDAP service is not setuped " ) )
self . printWARNING ( _ ( " Setup LDAP service " ) )
self . printWARNING ( " cl-setup ldap " )
return False
# В случае если сервер установлен
if self . clVars . Get ( " sr_dns_set " ) == " on " and \
not forceOptions :
self . printWARNING ( _ ( " WARNING " ) + " : " + \
_ ( " DNS server is configured " ) + " . " )
return True
# Доверительные сети по умолчанию
allowNet = self . clVars . Get ( " os_net_allow " )
if not forceOptions :
# предупреждение при выполнении этой программы будут изменены
# конфигурационные файлы сервиса Proxy (пр о г р а ммa squid)
self . printWARNING ( _ ( " WARNING " ) + " : " +
_ ( " Executing of the program will change " ) + " " +
_ ( " the configuration files of DNS service " ) + " ( " +
_ ( " program bind " ) + " ). " )
# если вы готовы продолжить работу программы нажмите Y если нет n
messDialog = \
_ ( " If you are ready to continue executing the program " ) + " , " + \
_ ( " input ' yes ' " ) + " , " + _ ( " if not ' no ' " )
if not self . dialogYesNo ( messDialog ) :
return True
if options . has_key ( " a " ) :
# Получаем от пользователя доверительные сети
allowNet = self . getAllowNet ( )
if not allowNet :
return False
else :
if options . has_key ( " a " ) :
# Получаем от пользователя доверительные сети
allowNet = self . getAllowNet ( )
if not allowNet :
return False
# делаем backup
# Проверим запущен ли ldap
if not self . getRunService ( " ldap " ) :
# Запускаем LDAP сервер
if not self . runLdapServer ( ) :
return False
bakupObj = servLdap ( )
bakupObj . backupServer ( )
# Удаляем переменные сервиса в ini файлах
self . deleteServiceVarsInFile ( " dns " )
# Cо зда е м объект переменные
self . createClVars ( )
# Устанавливаем доступные сети
self . clVars . Set ( " sr_dns_net_allow " , allowNet , True )
# Удаляем из автозапуска демона
if not self . delDaemonAutostart ( " named " ) :
return False
# останавливаем сервис DNS
if not self . stopServices ( [ " dns " ] ) :
return False
# Имя устанавливаемого сервиса
self . clVars . Set ( " cl_pass_service " , " dns " )
self . clVars . Write ( " sr_dns_set " , " off " )
# Cо зда е м объект профиль устанавливая директорию proxy для
# файлов профилей
if not self . applyProfilesFromService ( ' dns ' ) :
return False
# Проверим запущен ли ldap
if not self . getRunService ( " ldap " ) :
# Запускаем LDAP сервер
if not self . runLdapServer ( ) :
return False
else :
if not self . restartLdapServer ( ) :
return False
# Подключаемся к LDAP cе р ве р у
if not shareLdap . getLdapObjInFile ( self ) :
return False
# Находим в LDAP DNS сервис
resSearch = self . searchService ( )
ret = True
if resSearch :
delDN = self . relDN
ret = self . deleteDN ( delDN )
if ret :
self . printOK ( _ ( " Remove DNS DN from LDAP Database " ) + " ... " )
else :
self . printERROR ( \
_ ( " Can not remove DNS DN from LDAP Database " ) )
if not ret :
return False
ldifFile = self . ldifFileBase
baseLdif = self . createLdif ( ldifFile )
if not self . ldapObj . getError ( ) :
self . ldapObj . ldapAdd ( baseLdif )
if self . ldapObj . getError ( ) :
print _ ( " LDAP Error " ) + " : " + self . ldapObj . getError ( ) . strip ( )
return False
# Записываем данные администратора сервиса Proxy
ldapParser = iniLdapParser ( )
ldapParser . setVar ( " dns " ,
{ " DN " : self . clVars . Get ( " ld_dns_dn " ) ,
" PASS " : self . clVars . Get ( " ld_dns_pw " ) } )
self . printOK ( _ ( " Added ldif file " ) + " ... " )
textLines = self . execProg ( " /etc/init.d/named start " , False , False )
if textLines and type ( textLines ) == types . ListType and \
" ok " in textLines [ - 1 ] or textLines and " ok " in textLines :
self . printOK ( _ ( " Starting " ) + " " + " Named " + " ... " )
else :
self . printNotOK ( _ ( " Starting " ) + " " + " Named " + " ... " )
return False
# Устанавливаем автозапуск демона
if not self . setDaemonAutostart ( " named " ) :
return False
# запишем переменные для сервера
allow = self . clVars . Get ( " sr_dns_net_allow " )
self . clVars . Write ( " sr_dns_net_allow " , allow , True , " local " )
# запишем переменные для клиента
#
# Запишем, что сервис установлен
self . clVars . Write ( " sr_dns_set " , " on " )
self . printOK ( _ ( " DNS service configured " ) + " ... " )
return True
class tsOpt ( cl_base . opt ) :
""" Класс для обработки параметров и вывода help