|
@@ -27,16 +27,21 @@ int conv(int num_msg, const struct pam_message **msg,
|
|
|
}
|
|
|
|
|
|
int main(int argc, char **argv) {
|
|
|
- const char *user = NULL;
|
|
|
- const char *service_name;
|
|
|
+ char *service_name;
|
|
|
if (argc > 1) {
|
|
|
service_name = argv[1];
|
|
|
} else {
|
|
|
service_name = "test";
|
|
|
}
|
|
|
+ char *user;
|
|
|
+ if (argc > 2) {
|
|
|
+ user = argv[2];
|
|
|
+ } else {
|
|
|
+ user = NULL; // ask later
|
|
|
+ }
|
|
|
const struct pam_conv pam_conversation = {conv, NULL};
|
|
|
pam_handle_t *pamh; // blind structure, see security/_pam_types.h
|
|
|
- int status = pam_start(service_name, NULL, &pam_conversation, &pamh);
|
|
|
+ int status = pam_start(service_name, user, &pam_conversation, &pamh);
|
|
|
if (status != PAM_SUCCESS) {
|
|
|
fprintf(stderr, "pam_start: %s\n", pam_strerror(pamh, PAM_SYSTEM_ERR));
|
|
|
return 1;
|
|
@@ -46,7 +51,7 @@ int main(int argc, char **argv) {
|
|
|
if (status != PAM_SUCCESS) {
|
|
|
fprintf(stderr, "pam_authenticate: %s\n", pam_strerror(pamh, status));
|
|
|
} else {
|
|
|
- char *user = pam_get_str(pamh, PAM_USER);
|
|
|
+ user = pam_get_str(pamh, PAM_USER);
|
|
|
fprintf(stderr, "Successfully authenticated user \"%s\".\n", user);
|
|
|
fprintf(stdout, "%s\n", user);
|
|
|
}
|