diff options
author | Cody Maloney | 2013-02-07 07:22:19 +0100 |
---|---|---|
committer | Karel Zak | 2013-02-13 09:28:33 +0100 |
commit | d91ad6ab3c925ad88c9df80dd78818b5aa2d14df (patch) | |
tree | d6b233aec5d9ab2698115a3e3db4a06c3f257b81 /login-utils/chsh.c | |
parent | build-sys: Add flag for enabling/disabling libuser support. (diff) | |
download | kernel-qcow2-util-linux-d91ad6ab3c925ad88c9df80dd78818b5aa2d14df.tar.gz kernel-qcow2-util-linux-d91ad6ab3c925ad88c9df80dd78818b5aa2d14df.tar.xz kernel-qcow2-util-linux-d91ad6ab3c925ad88c9df80dd78818b5aa2d14df.zip |
chsh-chfn: Move pam auth to its own function, factoring out common code
This makes it easier to add support for libuser, which needs the same PAM
authentication. Also removes duplicate code between chsh and chfn.
Signed-off-by: Cody Maloney <cmaloney@theoreticalchaos.com>
Diffstat (limited to 'login-utils/chsh.c')
-rw-r--r-- | login-utils/chsh.c | 33 |
1 files changed, 3 insertions, 30 deletions
diff --git a/login-utils/chsh.c b/login-utils/chsh.c index f83b0571d..7d3963fc0 100644 --- a/login-utils/chsh.c +++ b/login-utils/chsh.c @@ -32,12 +32,12 @@ #include <sys/types.h> #include <unistd.h> +#include "auth.h" #include "c.h" #include "env.h" #include "closestream.h" #include "islocal.h" #include "nls.h" -#include "pamfail.h" #include "pathnames.h" #include "setpwnam.h" #include "xalloc.h" @@ -147,36 +147,9 @@ int main(int argc, char **argv) printf(_("Changing shell for %s.\n"), pw->pw_name); -#ifdef REQUIRE_PASSWORD - if (uid != 0) { - pam_handle_t *pamh = NULL; - struct pam_conv conv = { misc_conv, NULL }; - int retcode; - - retcode = pam_start("chsh", pw->pw_name, &conv, &pamh); - if (pam_fail_check(pamh, retcode)) - return EXIT_FAILURE; - - retcode = pam_authenticate(pamh, 0); - if (pam_fail_check(pamh, retcode)) - return EXIT_FAILURE; - - retcode = pam_acct_mgmt(pamh, 0); - if (retcode == PAM_NEW_AUTHTOK_REQD) - retcode = - pam_chauthtok(pamh, PAM_CHANGE_EXPIRED_AUTHTOK); - if (pam_fail_check(pamh, retcode)) - return EXIT_FAILURE; - - retcode = pam_setcred(pamh, 0); - if (pam_fail_check(pamh, retcode)) - return EXIT_FAILURE; - - pam_end(pamh, 0); - /* no need to establish a session; this isn't a - * session-oriented activity... */ + if(!auth_pam("chsh", uid, pw->pw_name)) { + return EXIT_FAILURE; } -#endif /* REQUIRE_PASSWORD */ if (!shell) { shell = prompt(_("New shell"), oldshell); |