Browse Source

optionally accept username as 2nd param

Fabian Peter Hammerle 6 years ago
parent
commit
c6182ea132
1 changed files with 9 additions and 4 deletions
  1. 9 4
      main.c

+ 9 - 4
main.c

@@ -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);
     }