diff options
-rw-r--r-- | epam.c | 54 |
1 files changed, 54 insertions, 0 deletions
@@ -0,0 +1,54 @@ +/* gcc -o epam -lpam -lpam_misc epam.c -g */ + +#include <security/pam_appl.h> +#include <security/pam_misc.h> +#include <stdio.h> + +static struct pam_conv conv = { + misc_conv, + NULL +}; + +int main (int argc, char *argv[]) +{ + pam_handle_t *pamh = NULL; + int retval; + const char *user = "nobody"; + + if (argc == 2) + user = argv[1]; + + if (argc > 2) + { + fprintf (stderr, "Usage: check_user [username]\n"); + exit (1); + } + + retval = pam_start ("elock", user, &conv, &pamh); + + printf (":%s\n", pam_strerror (pamh, retval)); + + if (retval == PAM_SUCCESS) + retval = pam_authenticate (pamh, 0); + printf (":%s\n", pam_strerror (pamh, retval)); + + if (retval == PAM_SUCCESS) + retval = pam_acct_mgmt (pamh, 0); + printf (":%s\n", pam_strerror (pamh, retval)); + + if (retval == PAM_SUCCESS) + fprintf (stdout, "Authenticated\n"); + else + fprintf (stdout, "Not Authenticated\n"); + printf (":%s\n", pam_strerror (pamh, retval)); + + if (pam_end (pamh, retval) != PAM_SUCCESS) + { + pamh = NULL; + fprintf (stderr, "check_user: failed to release authenticator\n"); + exit (1); + } + printf (":%s\n", pam_strerror (pamh, retval)); + + return (retval == PAM_SUCCESS ? 0 : 1); +} |