diff options
author | Arthur de Jong <arthur@arthurdejong.org> | 2013-03-30 23:10:34 +0100 |
---|---|---|
committer | Arthur de Jong <arthur@arthurdejong.org> | 2013-03-30 23:10:34 +0100 |
commit | 62a409cb43b441c32692f414a1867176d37034ac (patch) | |
tree | 50c70342106c2674d61b5559f7dfa89dc1f506bc /utils/users.py | |
parent | aae36cfcfb6ec00776f6da1e0d1fd5f90a72f2dd (diff) | |
parent | 012b18554e5e6a408a11a7157a30c5d068f2d3d1 (diff) |
Implement used modification functionality
This adds user information modification functionality to nslcd and pynslcd and
implements a chsh.ldap utility that can be used to change the login shell of a
user (similar to the normal chsh command).
The user modification functionality should allow for generic modifications of
user information. More utility commands to perform modifications remain to be
implemented.
Diffstat (limited to 'utils/users.py')
-rw-r--r-- | utils/users.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/utils/users.py b/utils/users.py new file mode 100644 index 0000000..02216d6 --- /dev/null +++ b/utils/users.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +# users.py - functions for validating the user to change information for +# +# 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 getpass +import os +import pwd +import sys + + +class User(object): + + def __init__(self, username): + self.myuid = os.getuid() + if username: + userinfo = pwd.getpwnam(username) + else: + self.asroot = False + userinfo = pwd.getpwuid(self.myuid) + (self.username, ignore, self.uid, self.gid, self.gecos, self.homedir, + self.shell) = userinfo + # if we are trying to modify another user we should be root + self.asroot = self.myuid != self.uid + + def check(self): + """Check if the user we want to modify is an LDAP user and whether + we may modify the user information.""" + if self.asroot and self.myuid != 0: + print "%s: you may not modify user '%s'.\n" % \ + (sys.argv[0], self.username) + sys.exit(1) + # FIXME: check if the user is an LDAP user + + def get_passwd(self): + """Ask and return a password that is required to change the user.""" + # FIXME: only ask the password if we require it + # (e.g. when root and nslcd has userpwmoddn we don't need to) + return getpass.getpass( + 'LDAP administrator password: ' + if self.asroot else + 'LDAP password for %s: ' % self.username + ) + # FIXME: check if the provided password is valid |