]> granicus.if.org Git - linux-pam/blob - examples/vpass.c
Relevant BUGIDs: 111927, 117240
[linux-pam] / examples / vpass.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <unistd.h>
4 #include <pwd.h>
5 #include <sys/types.h>
6 #include <security/pam_appl.h>
7
8 static int test_conv(int num_msg, const struct pam_message **msgm,
9                      struct pam_response **response, void *appdata_ptr)
10 {
11     return 0;
12 }
13
14 static struct pam_conv conv = {
15     test_conv,
16     NULL
17 };
18
19 int main(void)
20 {
21     char *user;
22     pam_handle_t *pamh;
23     struct passwd *pw;
24     uid_t uid;
25     int res;
26
27     uid = geteuid();
28     pw = getpwuid(uid);
29     if (pw) {
30         user = pw->pw_name;
31     } else {
32         fprintf(stderr, "Invalid userid: %d\n", uid);
33         exit(1);
34     }
35
36     pam_start("vpass", user, &conv, &pamh);
37     pam_set_item(pamh, PAM_TTY, "/dev/tty");
38     if ((res = pam_authenticate(pamh, 0)) != PAM_SUCCESS) {
39         fprintf(stderr, "Oops: %s\n", pam_strerror(pamh, res));
40         exit(1);
41     }
42
43     pam_end(pamh, res);
44     exit(0);
45 }
46
47