From: Frank Brehm Date: Mon, 20 Mar 2017 16:13:24 +0000 (+0100) Subject: Finished mk-home X-Git-Tag: 0.1.2~240 X-Git-Url: https://git.uhu-banane.net/?a=commitdiff_plain;h=752f75dbbade36c4290eced5ef313b09de638fee;p=pixelpark%2Fadmin-tools.git Finished mk-home --- diff --git a/etc/mk-home.ini.default b/etc/mk-home.ini.default index 3c3fbe9..d559a44 100644 --- a/etc/mk-home.ini.default +++ b/etc/mk-home.ini.default @@ -10,8 +10,9 @@ bind_dn = cn=admin #bind_pw = [mk-home] -initial_uid = 999999999 -chroot_homedir = /mnt/nfs -home_root = /home +#initial_uid = 999999999 +#chroot_homedir = /mnt/nfs +#home_root = /home +#dn_counter = uid=uidNumber,ou=ldapTool,ou=Applications,o=Pixelpark,o=isp # vim: filetype=dosini diff --git a/pp_lib/mk_home_app.py b/pp_lib/mk_home_app.py index 48490f3..b8cc9b3 100644 --- a/pp_lib/mk_home_app.py +++ b/pp_lib/mk_home_app.py @@ -40,7 +40,7 @@ from .merge import merge_structure from .ldap_app import PpLdapAppError, PpLdapApplication -__version__ = '0.4.2' +__version__ = '0.4.3' LOG = logging.getLogger(__name__) @@ -74,6 +74,7 @@ class PpMkHomeApp(PpLdapApplication): self.home_root_rel = os.path.relpath(self.home_root_abs, os.sep) self.simulate = False self.user_entries = [] + self.users = {} self.home_root_real = os.path.join(self.chroot_homedir, self.home_root_rel) self.skel_dir = self.default_skel_dir self.dn_counter = self.default_dn_counter @@ -188,6 +189,9 @@ class PpMkHomeApp(PpLdapApplication): raise PpMkHomeError(msg) self.skel_dir = v + if 'dn_counter' in section: + self.dn_counter = section['dn_counter'].strip() + self.home_root_rel = os.path.relpath(self.home_root_abs, os.sep) self.home_root_real = os.path.join(self.chroot_homedir, self.home_root_rel) @@ -248,6 +252,15 @@ class PpMkHomeApp(PpLdapApplication): self.user_entries = self.ldap_search_subtree(person, query_filter) LOG.debug("Found {} LDAP entries.".format(len(self.user_entries))) + for entry in self.user_entries: + dn = entry.entry_dn + self.users[dn] = { + 'uid': entry['uid'][0], + 'uidNumber': entry['uidNumber'][0], + 'gidNumber': entry['gidNumber'][0], + 'homeDirectory': entry['homeDirectory'][0], + } + # ------------------------------------------------------------------------- def set_new_counter(self, new_uid): @@ -259,18 +272,25 @@ class PpMkHomeApp(PpLdapApplication): LOG.info("Checking UID's for new Users ...") uid_counter = self.get_numeric_uid(self.dn_counter) + if uid_counter is None: + LOG.error("Did not found current numeric UID of the counter.") + self.exit(5) LOG.debug("Current UID counter: {}".format(uid_counter)) el_printed = False i = 0 - for entry in self.user_entries: - cur_uid = entry['uidNumber'][0] - user_name = entry['uid'][0] - dn = entry.entry_dn + for dn in self.users.keys(): + + user = self.users[dn] + + uid = user['uidNumber'] + gid = user['gidNumber'] + user_name = user['uid'] + home = user['homeDirectory'] - if cur_uid == self.initial_uid: + if uid == self.initial_uid: i += 1 new_uid = uid_counter + 1 @@ -284,16 +304,17 @@ class PpMkHomeApp(PpLdapApplication): # Setting uid of the counter self.set_new_counter(new_uid) + user['uidNumber'] = new_uid + if self.verbose: print('') if i: if i > 1: - LOG.debug("Total {} numeric user Ids set.".format(i)) + LOG.info("Total {} numeric user Ids set.".format(i)) else: - LOG.debug("Total one numeric user Id set.") + LOG.info("Total one numeric user Id set.") else: - LOG.debug("No numeric user Ids set.") - + LOG.info("No numeric user Ids set.") if self.verbose: print('') @@ -306,22 +327,19 @@ class PpMkHomeApp(PpLdapApplication): home_mode = stat.S_IRWXU el_printed = False - i = 0 - for entry in self.user_entries: + created = 0 - i += 1 - if self.verbose > 3: - LOG.debug("Found {c}:\n{e}".format(c=entry.__class__.__name__, e=pp(entry))) - dn = entry.entry_dn - LOG.debug("Checking home of {!r} ...".format(dn)) + for dn in sorted(self.users.keys(), key=str.lower): - try: - home_dir = entry['homeDirectory'] - except LDAPKeyError as e: - LOG.debug("LDAP user {!r} has no home directory.".format(dn)) + user = self.users[dn] - home = entry['homeDirectory'][0] - LOG.debug("Checking home directory {!r} ...".format(home)) + uid = user['uidNumber'] + gid = user['gidNumber'] + user_name = user['uid'] + home = user['homeDirectory'] + + LOG.debug("Checking home directory {h!r} of {d!r} ...".format( + h=home, d=dn)) if not os.path.isabs(home): LOG.warn("Home directory {h!r} of user {u!r} is not absolute.".format( h=home, u=dn)) @@ -329,8 +347,8 @@ class PpMkHomeApp(PpLdapApplication): continue home_relative = os.path.relpath(home, self.home_root_abs) if home_relative.startswith(upper_dir): - if self.verbose: - LOG.warn("Home directory {h!r} outside {r!r} is not considered.".format( + if self.verbose > 1: + LOG.debug("Home directory {h!r} outside {r!r} is not considered.".format( h=home, r=self.home_root_abs)) el_printed = False continue @@ -353,10 +371,8 @@ class PpMkHomeApp(PpLdapApplication): if self.verbose: print("") el_printed = True - uid = entry['uidNumber'][0] - gid = entry['gidNumber'][0] - user_name = entry['uid'][0] + created += 1 LOG.info("Creating home directory {!r} ....".format(chroot_dir)) LOG.debug("Copying recursive {s!r} to {c!r} ....".format( s=self.skel_dir, c=chroot_dir)) @@ -386,8 +402,15 @@ class PpMkHomeApp(PpLdapApplication): if self.verbose: print("") - if i >= 2: - break + if self.verbose: + print('') + if created: + if created > 1: + LOG.info("Total {} home directories created.".format(created)) + else: + LOG.info("Total one home directory created.") + else: + LOG.info("No home directories created.") # =============================================================================