Commit | Line | Data |
---|---|---|
4e98ead2 JL |
1 | #include <security/pam_appl.h> |
2 | #include <security/pam_misc.h> | |
3 | #include <stdio.h> | |
4 | ||
5 | const struct pam_conv conv = { | |
6 | misc_conv, | |
7 | NULL | |
8 | }; | |
9 | ||
10 | int main(int argc, char *argv[]) { | |
11 | pam_handle_t* pamh = NULL; | |
12 | int retval; | |
13 | const char* user = "nobody"; | |
14 | ||
15 | if(argc != 2) { | |
16 | printf("Usage: app [username]\n"); | |
17 | exit(1); | |
18 | } | |
19 | ||
20 | user = argv[1]; | |
21 | ||
22 | retval = pam_start("check_user", user, &conv, &pamh); | |
23 | ||
24 | // Are the credentials correct? | |
25 | if (retval == PAM_SUCCESS) { | |
26 | printf("Credentials accepted.\n"); | |
27 | retval = pam_authenticate(pamh, 0); | |
28 | } | |
29 | ||
30 | // Can the accound be used at this time? | |
31 | if (retval == PAM_SUCCESS) { | |
32 | printf("Account is valid.\n"); | |
33 | retval = pam_acct_mgmt(pamh, 0); | |
34 | } | |
35 | ||
36 | // Did everything work? | |
37 | if (retval == PAM_SUCCESS) { | |
38 | printf("Authenticated\n"); | |
39 | } else { | |
40 | printf("Not Authenticated\n"); | |
41 | } | |
42 | ||
43 | // close PAM (end session) | |
44 | if (pam_end(pamh, retval) != PAM_SUCCESS) { | |
45 | pamh = NULL; | |
46 | printf("check_user: failed to release authenticator\n"); | |
47 | exit(1); | |
48 | } | |
49 | ||
50 | return retval == PAM_SUCCESS ? 0 : 1; | |
51 | } |