Fix chown template work with chroot.

develop
Mike Hiretsky 13 years ago
parent 79764a7b10
commit 1b09e5effa

@ -4265,6 +4265,7 @@ variable 'cl_name'"))
if ":" in owner: if ":" in owner:
strUid, strGid = owner.split(":") strUid, strGid = owner.split(":")
import pwd import pwd
uid = self.getUidFromPasswd(strUid)
try: try:
uid = pwd.getpwnam(strUid).pw_uid uid = pwd.getpwnam(strUid).pw_uid
except: except:
@ -4272,6 +4273,7 @@ variable 'cl_name'"))
self.setError(_("False value 'chown' in template")+\ self.setError(_("False value 'chown' in template")+\
": " + templateDirFile) ": " + templateDirFile)
return ("", False, []) return ("", False, [])
gid = self.getGidFromGroup(strGid)
try: try:
import grp import grp
gid = grp.getgrnam(strGid).gr_gid gid = grp.getgrnam(strGid).gr_gid
@ -4321,6 +4323,28 @@ variable 'cl_name'"))
self.autoUpdateDirs.append(applyDir) self.autoUpdateDirs.append(applyDir)
return (applyDir, objHead, createdDirs) return (applyDir, objHead, createdDirs)
def getUidFromPasswd(self,strUid):
"""Get uid by username from chroot passwd file"""
passwdFile = os.path.join(self._baseDir,'etc/passwd')
if os.path.exists(passwdFile):
mapUid = dict(map(lambda x:x.split(':')[0:3:2],
filter(lambda x:not x.startswith('#'),
open(passwdFile,'r'))))
if strUid in mapUid:
return int(mapUid[strUid])
return None
def getGidFromGroup(self,strGid):
"""Get gid by groupname from chroot group file"""
groupFile = os.path.join(self._baseDir,'etc/group')
if os.path.exists(groupFile):
mapGid = dict(map(lambda x:x.split(':')[0:3:2],
filter(lambda x:not x.startswith('#'),
open(groupFile,'r'))))
if strGid in mapGid:
return int(mapGid[strGid])
return None
def getApplyHeadTemplate(self, nameFileTemplate, nameFileConfig, def getApplyHeadTemplate(self, nameFileTemplate, nameFileConfig,
templateFileType, optFile): templateFileType, optFile):
"""Применяет заголовок к шаблону (права, владелец, и.т. д)""" """Применяет заголовок к шаблону (права, владелец, и.т. д)"""
@ -4612,24 +4636,36 @@ variable 'cl_name'"))
if owner: if owner:
if ":" in owner: if ":" in owner:
strUid, strGid = owner.split(":") strUid, strGid = owner.split(":")
import pwd if strUid.isdigit():
try: uid = int(strUid)
uid = pwd.getpwnam(strUid).pw_uid else:
except: uid = self.getUidFromPasswd(strUid)
self.setError(_("Not user in this system: ") + strUid) import pwd
self.setError(_("False value 'chown' in template") +\ try:
": "+ nameFileTemplate) if uid is None:
preReturn(pathProg) uid = pwd.getpwnam(strUid).pw_uid
return ([], False) except:
try: self.setError(_("Not user in this system: ") +
import grp strUid)
gid = grp.getgrnam(strGid).gr_gid self.setError(_("False value 'chown' in template") +
except: ": "+ nameFileTemplate)
self.setError(_("Not group in this system: ")+strGid) preReturn(pathProg)
self.setError(_("False value 'chown' in template") +\ return ([], False)
": "+ nameFileTemplate) if strGid.isdigit():
preReturn(pathProg) gid = int(strGid)
return ([], False) else:
gid = self.getGidFromGroup(strGid)
try:
if gid is None:
import grp
gid = grp.getgrnam(strGid).gr_gid
except:
self.setError(_("Not group in this system: ") +
strGid)
self.setError(_("False value 'chown' in template") +
": "+ nameFileTemplate)
preReturn(pathProg)
return ([], False)
# Изменяем владельца файла # Изменяем владельца файла
if not chownConfFile(pathOldFile,uid,gid,nameFileTemplate): if not chownConfFile(pathOldFile,uid,gid,nameFileTemplate):
preReturn(pathProg) preReturn(pathProg)
@ -4945,7 +4981,7 @@ variable 'cl_name'"))
return False return False
if objHeadOld and objHeadOld.body: if objHeadOld and objHeadOld.body:
self.textConfig = objHeadOld.body self.textConfig = objHeadOld.body
if self.textTemplate[-1] == "\n": if self.textTemplate and self.textTemplate[-1] == "\n":
tmpTemplate = self.textTemplate + self.textConfig tmpTemplate = self.textTemplate + self.textConfig
else: else:
tmpTemplate = self.textTemplate + "\n" + self.textConfig tmpTemplate = self.textTemplate + "\n" + self.textConfig

Loading…
Cancel
Save