diff --git a/modoboa_installer/scripts/backup.py b/modoboa_installer/scripts/backup.py index a913919..87de10f 100644 --- a/modoboa_installer/scripts/backup.py +++ b/modoboa_installer/scripts/backup.py @@ -1,7 +1,9 @@ """Backup script for pre-installed instance""" import os +import pwd import shutil +import stat from .. import database from .. import utils @@ -31,8 +33,9 @@ class Backup(): def preparePath(self): + pw = pwd.getpwnam("root") for dir in self.BACKUPDIRECTORY: - utils.mkdir(self.destinationPath + dir) + utils.mkdir_safe(self.destinationPath + dir, stat.S_IRWXU | stat.S_IRWXG, pw[2], pw[3]) def validatePath(self, path): @@ -49,7 +52,8 @@ class Backup(): createDir = input(f"\"{path}\" doesn't exists, would you like to create it ? [Y/n]\n").lower() if createDir == "y" or createDir == "yes": - os.mkdir(path) + pw = pwd.getpwnam("root") + utils.mkdir_safe(path, stat.S_IRWXU | stat.S_IRWXG, pw[2], pw[3]) else: return False diff --git a/modoboa_installer/utils.py b/modoboa_installer/utils.py index 627f519..78d9d67 100644 --- a/modoboa_installer/utils.py +++ b/modoboa_installer/utils.py @@ -106,6 +106,11 @@ def mkdir(path, mode, uid, gid): os.chmod(path, mode) os.chown(path, uid, gid) +def mkdir_safe(path, mode, uid, gid): + """Create a directory. Safe way (-p)""" + if not os.path.exists(path): + os.makedirs(os.path.abspath(path), mode) + mkdir(path, mode, uid, gid) def make_password(length=16): """Create a random password."""