def groupadd(force, gid, key, non_unique, password, system, config, group): if not gid or force: gid = find_new_gid(sysuser=system) else: try: if not non_unique and grp.getgrgid(gid): print("Error: GID already taken") exit(1) except KeyError: pass try: if grp.getgrnam(group): if force: exit(0) print("Error: Group name already taken") exit(1) except KeyError: pass conf = get_config(config) defs = get_defs() for k, v in key: defs[k] = v dbs = connect_db(conf) gm = GroupManager(conf, dbs) gm.addgroup(group, gid, password) dbs.commit() dbs.close()
def useradd(ctx, basedir, comment, home_dir, expiredate, inactive, gid, groups, skel, key, no_create_home, no_user_group, non_unique, password, system, shell, uid, config, login): conf = get_config(config) defs = get_defs() useradd_conf = get_useradd_conf() for k, v in key: defs[k] = v if not uid: uid = find_new_uid(sysuser=system) else: try: if not non_unique and pwd.getpwuid(uid): print(_("Error: UID already taken")) exit(1) except KeyError: pass try: if not non_unique and pwd.getpwnam(login): print(_("Error: Login name already taken")) exit(1) except KeyError: pass if not shell: shell = useradd_conf.get('SHELL', '') if not basedir: basedir = useradd_conf.get('HOME', '/home') if not home_dir: home_dir = os.path.join(basedir, login) if not gid: try: gr = grp.getgrnam(login) if gr: gid = int(gr.gr_gid) no_user_group = True except KeyError: gid = find_new_gid(sysuser=system, preferred_gid=uid) else: gid = get_gid(gid) if expiredate: expiredate = (expiredate - REFDATE).days if not no_create_home: if not skel: skel = useradd_conf.get('SKEL', '/etc/skel') try: create_home(home_dir, skel, uid, gid) except PermissionError: print(_("Error: Insufficient permissions to create home dir")) exit(1) except FileExistsError: print(_('Error: Directory "%s" already exists') % home_dir) exit(1) lastchg = datetime.date.today() - REFDATE dbs = connect_db(conf) pm = UserManager(conf, dbs) pm.adduser(username=login, gid=gid, uid=uid, gecos=comment, homedir=home_dir, shell=shell, lstchg=lastchg.days, mini=defs.get('PASS_MIN_DAYS', 0), maxi=defs.get('PASS_MAX_DAYS', 99999), warn=defs.get('PASS_WARN_DAYS', 7), expire=expiredate, inact=inactive, password=password) if groups: glm = GroupListManager(conf, dbs) for g in groups: try: glm.addgroupuser(login, get_gid(g)) except KeyError: print(_("Warning: Can't find group {group}").format(group=g)) dbs.commit() dbs.close() if not no_user_group: ctx.invoke(groupadd, group=login, gid=gid, system=system, config=config, non_unique=non_unique)
def useradd( ctx, basedir, comment, home_dir, expiredate, inactive, gid, groups, skel, key, no_create_home, no_user_group, non_unique, password, system, shell, uid, config, login, ): conf = get_config(config) defs = get_defs() useradd_conf = get_useradd_conf() for k, v in key: defs[k] = v if not uid: uid = find_new_uid(sysuser=system) else: try: if not non_unique and pwd.getpwuid(uid): print(_("Error: UID already taken")) exit(1) except KeyError: pass try: if not non_unique and pwd.getpwnam(login): print(_("Error: Login name already taken")) exit(1) except KeyError: pass if not shell: shell = useradd_conf.get("SHELL", "") if not basedir: basedir = useradd_conf.get("HOME", "/home") if not home_dir: home_dir = os.path.join(basedir, login) if not gid: try: gr = grp.getgrnam(login) if gr: gid = int(gr.gr_gid) no_user_group = True except KeyError: gid = find_new_gid(sysuser=system, preferred_gid=uid) else: gid = get_gid(gid) if expiredate: expiredate = (expiredate - REFDATE).days if not no_create_home: if not skel: skel = useradd_conf.get("SKEL", "/etc/skel") try: create_home(home_dir, skel, uid, gid) except PermissionError: print(_("Error: Insufficient permissions to create home dir")) exit(1) except FileExistsError: print(_('Error: Directory "%s" already exists') % home_dir) exit(1) lastchg = datetime.date.today() - REFDATE dbs = connect_db(conf) pm = UserManager(conf, dbs) pm.adduser( username=login, gid=gid, uid=uid, gecos=comment, homedir=home_dir, shell=shell, lstchg=lastchg.days, mini=defs.get("PASS_MIN_DAYS", 0), maxi=defs.get("PASS_MAX_DAYS", 99999), warn=defs.get("PASS_WARN_DAYS", 7), expire=expiredate, inact=inactive, password=password, ) if groups: glm = GroupListManager(conf, dbs) for g in groups: try: glm.addgroupuser(login, get_gid(g)) except KeyError: print(_("Warning: Can't find group {group}").format(group=g)) dbs.commit() dbs.close() if not no_user_group: ctx.invoke(groupadd, group=login, gid=gid, system=system, config=config, non_unique=non_unique)