]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
chfn, chsh: new file pamfail.h for error printing
authorSami Kerola <kerolasa@iki.fi>
Sun, 13 Nov 2011 17:18:33 +0000 (18:18 +0100)
committerSami Kerola <sami.kerola@tomtom.com>
Tue, 29 Nov 2011 16:57:39 +0000 (17:57 +0100)
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
include/Makefile.am
include/pamfail.h [new file with mode: 0644]
login-utils/chfn.c
login-utils/chsh.c

index 64a620f8a0c7ac373ce69fecdc2590c077781c77..237840ab2552b1c4e23b07e9f4a922b189f97a55 100644 (file)
@@ -22,6 +22,7 @@ dist_noinst_HEADERS = \
        md5.h \
        minix.h \
        nls.h \
+       pamfail.h \
        path.h \
        pathnames.h \
        procutils.h \
diff --git a/include/pamfail.h b/include/pamfail.h
new file mode 100644 (file)
index 0000000..8008ce3
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef UTIL_LINUX_PAMFAIL_H
+#include <security/pam_appl.h>
+#include <security/pam_misc.h>
+#include "c.h"
+
+static inline int
+pam_fail_check(pam_handle_t *pamh, int retcode)
+{
+       if (retcode == PAM_SUCCESS)
+               return 0;
+       warnx("%s", pam_strerror(pamh, retcode));
+       pam_end(pamh, retcode);
+       return 1;
+}
+
+#endif /* UTIL_LINUX_PAMFAIL_H */
index 1ddd5864bf617c64107ffc49b882f369517a1675..7e87999d543d3c76a6e8defdd2134c7a7bf7d003 100644 (file)
@@ -34,6 +34,7 @@
 #include <getopt.h>
 #include <stdbool.h>
 
+#include "pamfail.h"
 #include "islocal.h"
 #include "setpwnam.h"
 #include "strutils.h"
 #include "selinux_utils.h"
 #endif
 
-#ifdef REQUIRE_PASSWORD
-#include <security/pam_appl.h>
-#include <security/pam_misc.h>
-
-#define PAM_FAIL_CHECK(_ph, _rc) \
-    do { \
-       if ((_rc) != PAM_SUCCESS) { \
-           fprintf(stderr, "\n%s\n", pam_strerror((_ph), (_rc))); \
-           pam_end((_ph), (_rc)); \
-           exit(EXIT_FAILURE); \
-       } \
-    } while(0)
-
-#endif /* REQUIRE_PASSWORD */
-
 static char buf[1024];
 
 struct finfo {
@@ -177,20 +163,22 @@ int main (int argc, char **argv) {
        int retcode;
 
        retcode = pam_start("chfn", oldf.username, &conv, &pamh);
-       if(retcode != PAM_SUCCESS)
-           errx(EXIT_FAILURE, _("PAM failure, aborting: %s"),
-                   pam_strerror(pamh, retcode));
+       if (pam_fail_check(pamh, retcode))
+            exit(EXIT_FAILURE);
 
        retcode = pam_authenticate(pamh, 0);
-       PAM_FAIL_CHECK(pamh, retcode);
+       if (pam_fail_check(pamh, retcode))
+            exit(EXIT_FAILURE);
 
        retcode = pam_acct_mgmt(pamh, 0);
        if (retcode == PAM_NEW_AUTHTOK_REQD)
            retcode = pam_chauthtok(pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
-       PAM_FAIL_CHECK(pamh, retcode);
+       if (pam_fail_check(pamh, retcode))
+           exit(EXIT_FAILURE);
 
        retcode = pam_setcred(pamh, 0);
-       PAM_FAIL_CHECK(pamh, retcode);
+       if (pam_fail_check(pamh, retcode))
+           exit(EXIT_FAILURE);
 
        pam_end(pamh, 0);
        /* no need to establish a session; this isn't a session-oriented
index bca161fb3e687857c07f17d1c822e83ebc8f3ed4..f6a5c9fa19a0821316ab346f2eaf6af4ccaca5c5 100644 (file)
@@ -33,6 +33,7 @@
 #include <getopt.h>
 #include <stdbool.h>
 
+#include "pamfail.h"
 #include "c.h"
 #include "islocal.h"
 #include "setpwnam.h"
 #include "pathnames.h"
 #include "xalloc.h"
 
-#ifdef REQUIRE_PASSWORD
-#include <security/pam_appl.h>
-#include <security/pam_misc.h>
-
-#define PAM_FAIL_CHECK(_ph, _rc) \
-    do { \
-       if ((_rc) != PAM_SUCCESS) { \
-           fprintf(stderr, "\n%s\n", pam_strerror((_ph), (_rc))); \
-           pam_end((_ph), (_rc)); \
-           exit(EXIT_FAILURE); \
-       } \
-    } while(0)
-
-#endif /* REQUIRE_PASSWORD */
-
 #ifdef HAVE_LIBSELINUX
 #include <selinux/selinux.h>
 #include <selinux/av_permissions.h>
@@ -163,20 +149,22 @@ main (int argc, char *argv[]) {
        int retcode;
 
        retcode = pam_start("chsh", pw->pw_name, &conv, &pamh);
-       if(retcode != PAM_SUCCESS)
-           errx(EXIT_FAILURE, _("PAM failure, aborting: %s"),
-                   pam_strerror(pamh, retcode));
+       if (pam_fail_check(pamh, retcode))
+           exit(EXIT_FAILURE);
 
        retcode = pam_authenticate(pamh, 0);
-       PAM_FAIL_CHECK(pamh, retcode);
+       if (pam_fail_check(pamh, retcode))
+           exit(EXIT_FAILURE);
 
        retcode = pam_acct_mgmt(pamh, 0);
        if (retcode == PAM_NEW_AUTHTOK_REQD)
            retcode = pam_chauthtok(pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
-       PAM_FAIL_CHECK(pamh, retcode);
+       if (pam_fail_check(pamh, retcode))
+           exit(EXIT_FAILURE);
 
        retcode = pam_setcred(pamh, 0);
-       PAM_FAIL_CHECK(pamh, retcode);
+       if (pam_fail_check(pamh, retcode))
+           exit(EXIT_FAILURE);
 
        pam_end(pamh, 0);
        /* no need to establish a session; this isn't a session-oriented