diff options
author | Arthur de Jong <arthur@arthurdejong.org> | 2013-03-30 22:59:57 +0100 |
---|---|---|
committer | Arthur de Jong <arthur@arthurdejong.org> | 2013-03-30 23:09:30 +0100 |
commit | 012b18554e5e6a408a11a7157a30c5d068f2d3d1 (patch) | |
tree | 50c70342106c2674d61b5559f7dfa89dc1f506bc /utils/chsh.py | |
parent | d0482fb56654037d01feb0f7a27206aefacf7112 (diff) |
Initial version of a chsh.ldap utility
Diffstat (limited to 'utils/chsh.py')
-rwxr-xr-x | utils/chsh.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/utils/chsh.py b/utils/chsh.py new file mode 100755 index 0000000..30c5c12 --- /dev/null +++ b/utils/chsh.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python +# coding: utf-8 + +# chsh.py - program for changing the login shell using nslcd +# +# Copyright (C) 2013 Arthur de Jong +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA + +import argparse + +from cmdline import VersionAction, ListShellsAction +import constants +import nslcd +import shells +import users + + +# set up command line parser +parser = argparse.ArgumentParser( + description='Change the user login shell in LDAP.', + epilog='Report bugs to <%s>.' % constants.PACKAGE_BUGREPORT + ) +parser.add_argument('-V', '--version', action=VersionAction) +parser.add_argument('-s', '--shell', help='login shell for the user account') +parser.add_argument('-l', '--list-shells', action=ListShellsAction) +parser.add_argument('username', metavar='USER', nargs='?', + help="the user who's shell to change") + + +def ask_shell(oldshell): + """Ask the user to provide a shell.""" + shell = raw_input(' Login Shell [%s]: ' % oldshell) + return shell or oldshell + + +# parse arguments +args = parser.parse_args() +# check username part +user = users.User(args.username) +user.check() +# check the command line shell if one was provided (to fail early) +shell = args.shell +if shell is not None: + shells.check(shell, user.asroot) +# prompt for a password if required +password = user.get_passwd() +# prompt for a shell if it was not specified on the command line +if shell is None: + print 'Enter the new value, or press ENTER for the default' + shell = ask_shell(user.shell) + shells.check(shell, user.asroot) +# perform the modification +result = nslcd.usermod(user.username, user.asroot, password, { + constants.NSLCD_USERMOD_SHELL: shell, + }) +# TODO: print proper response |