PAM pam_conv struktur
-
Hi, ich hab Probleme mit PAM Programmierung.
Das Beispielprogramm in der offiziellen PAM Dokumentation sieht wie folgt aus:/* This program was contributed by Shane Watts [modifications by AGM] You need to add the following (or equivalent) to the /etc/pam.conf file. # check authorization check_user auth required /usr/lib/security/pam_unix_auth.so check_user account required /usr/lib/security/pam_unix_acct.so */ #include <security/pam_appl.h> #include <security/pam_misc.h> #include <stdio.h> static struct pam_conv conv = { misc_conv, NULL }; int main(int argc, char *argv[]) { pam_handle_t *pamh=NULL; int retval; const char *user="nobody"; if(argc == 2) { user = argv[1]; } if(argc > 2) { fprintf(stderr, "Usage: check_user [username]\n"); exit(1); } retval = pam_start("check_user", user, &conv, &pamh); if (retval == PAM_SUCCESS) retval = pam_authenticate(pamh, 0); /* is user really user? */ if (retval == PAM_SUCCESS) retval = pam_acct_mgmt(pamh, 0); /* permitted access? */ /* This is where we have been authorized or not. */ if (retval == PAM_SUCCESS) { fprintf(stdout, "Authenticated\n"); } else { fprintf(stdout, "Not Authenticated\n"); } if (pam_end(pamh,retval) != PAM_SUCCESS) { /* close Linux-PAM */ pamh = NULL; fprintf(stderr, "check_user: failed to release authenticator\n"); exit(1); } return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */ }
Das funktioniert auch prima, abgesehen von drei Punkten.
1. pam_misc (misc_conv) gibt es nur bei Linux PAM.
Erstmal nicht so wild, aber in ein paar Monaten schon.
2. Nach dem Passwort wird auf der Kommandozeile gefragt.
Ich schreibe ein GUI und ein Client/Server Programm, und möchte das Passwort in einer Variable zwischenspeichern, die ich PAM dann liefere.
3. Benutzernamensprüfung und Passwortcheck finden gleichzeitig statt. Ich würde lieber erstmal schauen, ob der Benutzer existiert, und dann nach dem Passwort fragen. Aber das ist nicht so wichtig, kann auch ruhig in einem Schritt geschehen.Kann mir da jemand eine Beispiel pam_conv Struktur zeigen? Ich komme damit nicht so ganz klar ....
-
vielleicht hilft dir das:
http://www.linuxdevcenter.com/pub/a/linux/2002/04/04/PamModules.html?page=1
pam_set_item()
bzw.
PAM_USER_PROMPT
gruß Andy