From: Frank Brehm Date: Tue, 21 Mar 2017 16:13:33 +0000 (+0100) Subject: Adding reading of all passwd entries in pp_lib/test_home_app.py X-Git-Tag: 0.1.2~235 X-Git-Url: https://git.uhu-banane.net/?a=commitdiff_plain;h=696c0d07fdecf4ce19c1a4b12797837bec6a9b41;p=pixelpark%2Fadmin-tools.git Adding reading of all passwd entries in pp_lib/test_home_app.py --- diff --git a/pp_lib/test_home_app.py b/pp_lib/test_home_app.py index 63ed652..830faa0 100644 --- a/pp_lib/test_home_app.py +++ b/pp_lib/test_home_app.py @@ -31,7 +31,7 @@ from .common import pp, terminal_can_colors, to_bytes, to_bool from .cfg_app import PpCfgAppError, PpConfigApplication -__version__ = '0.2.1' +__version__ = '0.3.1' LOG = logging.getLogger(__name__) @@ -150,6 +150,7 @@ class PpTestHomeApp(PpConfigApplication): def _run(self): self.read_exclude_dirs() + self.read_passwd_homes() # ------------------------------------------------------------------------- def read_exclude_dirs(self): @@ -199,20 +200,50 @@ class PpTestHomeApp(PpConfigApplication): e=token, f=self.exclude_file, l=lnr)) continue home_relative = os.path.relpath(token, self.home_root_abs) - if home_relative.startswith(upper_dir): + if token == os.sep or home_relative.startswith(upper_dir): LOG.warn(( "Entry {e!r} in file {f!r}, line {l}, " "is outside home root {h!r}.").format( e=token, f=self.exclude_file, l=lnr, h=self.home_root_abs)) continue - if not token in self.exclude_dirs: + if token not in self.exclude_dirs: self.exclude_dirs.append(token) self.exclude_dirs.sort(key=str.lower) + LOG.debug("Found {} directories to exclude.".format(len(self.exclude_dirs))) if self.verbose > 2: LOG.debug("Found directories to exclude:\n{}".format(pp(self.exclude_dirs))) + # ------------------------------------------------------------------------- + def read_passwd_homes(self): + + LOG.info("Reading all home directories from 'getent passwd' ...") + + upper_dir = os.pardir + os.sep + entries = pwd.getpwall() + + for entry in entries: + home = entry.pw_dir + if not home: + continue + home_relative = os.path.relpath(home, self.home_root_abs) + if home == os.sep or home_relative.startswith(upper_dir): + if self.verbose > 1: + LOG.debug(( + "Home directory {d!r} of user {u!r} " + "is outside home root {h!r}.").format( + d=home, u=entry.pw_name, h=self.home_root_abs)) + continue + if home not in self.passwd_home_dirs: + self.passwd_home_dirs.append(home) + + self.passwd_home_dirs.sort(key=str.lower) + + LOG.debug("Found {} home directories in passwd.".format(len(self.passwd_home_dirs))) + if self.verbose > 2: + LOG.debug("Home directories in passwd:\n{}".format(pp(self.passwd_home_dirs))) + # ============================================================================= if __name__ == "__main__":