From 5eaf711b18a286c63aaa43f237af1fa561987ee7 Mon Sep 17 00:00:00 2001 From: asamoukin Date: Fri, 19 Jun 2009 12:59:28 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B7=D0=B0=D0=BF=D1=80=D0=B5=D1=82=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=B0=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=B8=20=D0=B4=D0=B8=D1=80=D0=B5=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=B9=20".."=20,=20"."=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=84=D0=B8=D0=BB=D0=B5=D0=B9=20=D0=B4=D0=B8=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=B9=20=D0=B2=20=D0=BA=D0=BE?= =?UTF-8?q?=D1=80=D0=BD=D0=B5=D0=B2=D1=8B=D1=85=20=D0=B4=D0=B8=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D1=8F=D1=85=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=84=D0=B8=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.calculate.ru/calculate2/calculate-lib/trunk@1800 c91db197-33c1-4113-bf15-f8a5c547ca64 --- pym/cl_profile.py | 86 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/pym/cl_profile.py b/pym/cl_profile.py index b35ec94..9332e0b 100644 --- a/pym/cl_profile.py +++ b/pym/cl_profile.py @@ -2873,7 +2873,18 @@ class profile(_file, _terms, xmlShare): _versionProgram = self.objVar.Get("cl_ver") # имя и версия текущей программы programVersion = "%s %s"%(_nameProgram, _versionProgram) + dirObjsApply = [] for dirObj in dirObjs: + dirInfoFile = os.path.join(dirObj.baseDir, self.profDirNameFile) + ret = self.__getApplyHeadDirRoot(dirInfoFile) + if ret: + dirObjsApply.append(dirObj) + else: + if self.getError(): + self.setError(_("Incorrect profile: " ) +\ + dirInfoFile) + return False + for dirObj in dirObjsApply: # сортируем файлы по названию if dirObj.files: dirObj.files.sort() @@ -3025,7 +3036,7 @@ class profile(_file, _terms, xmlShare): # Изменяем название директории if objHead.params.has_key("name"): nameDir = objHead.params['name'] - if "/" in nameDir: + if "/" in nameDir or nameDir == ".." or nameDir == ".": self.setError (_("False value 'name' in profile: " ) +\ profileDirFile) return (applyDir, False) @@ -3069,8 +3080,18 @@ class profile(_file, _terms, xmlShare): filesApply = [] # Словарь измененных директорий changeDirs = {} - + dirObjsApply = [] for dirObj in dirObjs: + dirInfoFile = os.path.join(dirObj.baseDir, self.profDirNameFile) + ret = self.__getApplyHeadDirRoot(dirInfoFile) + if ret: + dirObjsApply.append(dirObj) + else: + if self.getError(): + self.setError(_("Incorrect profile: " ) +\ + dirInfoFile) + return False + for dirObj in dirObjsApply: # сортируем файлы по названию if dirObj.files: dirObj.files.sort() @@ -3151,6 +3172,63 @@ class profile(_file, _terms, xmlShare): return False return filesApply + def __getApplyHeadDirRoot(self, profileDirFile): + """Будет ли применен профиль корневой директории + + Возвращает True, False + """ + + def function(text): + """Функция обработки функций в заголовке""" + return self.applyFuncProfile(text, newDir, profileDirFile) + + if not os.path.exists(profileDirFile): + return True + try: + FD = open(profileDirFile) + textProfile = FD.read() + FD.close() + except: + self.setError(_("Error open profile#: " ) +\ + profileDirFile) + return False + objHead = dirHeader(textProfile, self.objVar,function) + if not objHead.headerCorrect: + self.setError(_("Incorrect profile: " ) +\ + profileDirFile) + self.setError(objHead.errorMessage) + return False + if not objHead.headerTerm: + if objHead.getError(): + self.setError(_("Incorrect profile: " ) +\ + profileDirFile) + return False + + # Изменяем название директории + if objHead.params.has_key("name"): + self.setError (_("Invalid name 'name' in profile: " ) +\ + profileDirFile) + return False + + # Удаляем директорию + if objHead.typeAppend == "remove": + self.setError (_("Invalid name 'remove' in profile: " ) +\ + profileDirFile) + return False + + # chmod - изменяем права + if objHead.params.has_key("chmod"): + self.setError (_("Invalid name 'chmod' in profile: " ) +\ + profileDirFile) + return False + + # chown - изменяем владельца и группу + if objHead.params.has_key("chown"): + self.setError (_("Invalid name 'chown' in profile: " ) +\ + profileDirFile) + return False + return True + def __getApplyHeadDir(self, newDir, profileDirFile, changeDirs): """Применяет профиль к директории (права, владелец, и.т. д)""" @@ -3207,7 +3285,7 @@ class profile(_file, _terms, xmlShare): # Изменяем название директории if objHead.params.has_key("name"): nameDir = objHead.params['name'] - if "/" in nameDir: + if "/" in nameDir or nameDir == ".." or nameDir == ".": self.setError (_("False value 'name' in profile: " ) +\ profileDirFile) return (applyDir, False) @@ -3317,7 +3395,7 @@ class profile(_file, _terms, xmlShare): # Изменяем путь к оригинальному файлу if objHeadNew.params.has_key("name"): nameFile = objHeadNew.params['name'] - if "/" in nameFile: + if "/" in nameFile or nameFile == ".." or nameFile == ".": self.setError (_("False value 'name' in profile: " ) + newFile) return False pathRel = os.path.split(os.path.abspath(oldFile))[0]