1 /*
2 * pam_debug module
3 *
4 * Written by Andrew Morgan <morgan@kernel.org> 2001/02/04
5 *
6 * This module is intended as a debugging aide for determining how
7 * the PAM stack is operating.
8 */
9
10 #include "config.h"
11 #include <stdio.h>
12
13 #include <security/pam_modules.h>
14 #include <security/_pam_macros.h>
15 #include <security/pam_ext.h>
16
17 #define _PAM_ACTION_UNDEF (-10)
18 #include "../../libpam/pam_tokens.h"
19
20 #define DEFAULT_USER "nobody"
21
22 /* --- authentication management functions --- */
23
24 static int state(pam_handle_t *pamh, const char *text)
25 {
26 int retval;
27
28 retval = pam_info (pamh, "%s", text);
29
30 if (retval != PAM_SUCCESS) {
31 D(("pam_info failed"));
32 }
33
34 return retval;
35 }
36
37 static int parse_args(int retval, const char *event,
38 pam_handle_t *pamh, int argc, const char **argv)
39 {
40 int i;
41
42 for (i=0; i<argc; ++i) {
43 int length = strlen(event);
44 if (!strncmp(event, argv[i], length) && (argv[i][length] == '=')) {
45 int j;
46 const char *return_string = argv[i] + (length+1);
47
48 for (j=0; j<_PAM_RETURN_VALUES; ++j) {
49 if (!strcmp(return_string, _pam_token_returns[j])) {
50 retval = j;
51 state(pamh, argv[i]);
52 break;
53 }
54 }
55 break;
56 }
57 }
58
59 return retval;
60 }
61
62 int pam_sm_authenticate(pam_handle_t *pamh, int flags UNUSED,
63 int argc, const char **argv)
64 {
65 return parse_args(PAM_SUCCESS, "auth", pamh, argc, argv);
66 }
67
68 int pam_sm_setcred(pam_handle_t *pamh, int flags UNUSED,
69 int argc, const char **argv)
70 {
71 return parse_args(PAM_SUCCESS, "cred", pamh, argc, argv);
72 }
73
74 /* --- account management functions --- */
75
76 int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags UNUSED,
77 int argc, const char **argv)
78 {
79 return parse_args(PAM_SUCCESS, "acct", pamh, argc, argv);
80 }
81
82 /* --- password management --- */
83
84 int pam_sm_chauthtok(pam_handle_t *pamh, int flags UNUSED,
85 int argc, const char **argv)
86 {
87 if (flags & PAM_PRELIM_CHECK) {
88 return parse_args(PAM_SUCCESS, "prechauthtok", pamh, argc, argv);
89 } else {
90 return parse_args(PAM_SUCCESS, "chauthtok", pamh, argc, argv);
91 }
92 }
93
94 /* --- session management --- */
95
96 int pam_sm_open_session(pam_handle_t *pamh, int flags UNUSED,
97 int argc, const char **argv)
98 {
99 return parse_args(PAM_SUCCESS, "open_session", pamh, argc, argv);
100 }
101
102 int pam_sm_close_session(pam_handle_t *pamh, int flags UNUSED,
103 int argc, const char **argv)
104 {
105 return parse_args(PAM_SUCCESS, "close_session", pamh, argc, argv);
106 }
107
108 /* end of module definition */