- added a PAM module playground directory

git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@41 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
jey 2001-11-15 14:44:36 +00:00
parent e883b6f989
commit eb4d366453
1 changed files with 64 additions and 0 deletions

64
src/pam/pam_pkcs15.c Normal file
View File

@ -0,0 +1,64 @@
#include <stdio.h>
#include <stdlib.h>
#include <security/pam_appl.h>
#include <security/pam_modules.h>
#include <openssl/x509.h>
#include <openssl/rsa.h>
#include <sc.h>
#include <sc-pkcs15.h>
static struct sc_context *ctx = NULL;
static struct sc_card *card = NULL;
PAM_EXTERN int pam_sm_authenticate(pam_handle_t * pamh, int flags, int argc, const char **argv)
{
int r, i;
const char *user, *password = NULL;
printf("argc = %d\n", argc);
for (i = 0; i < argc; i++)
printf("%s\n", argv[i]);
r = pam_get_user(pamh, &user, NULL);
if (r != PAM_SUCCESS)
return r;
r = sc_establish_context(&ctx);
if (r != 0) {
printf("establish_context() failed: %s\n", sc_strerror(r));
return PAM_AUTH_ERR;
}
for (i = 0; i < ctx->reader_count; i++) {
if (sc_detect_card(ctx, i) == 1) {
printf("Using card in reader %s.\n", ctx->readers[i]);
if (sc_connect_card(ctx, i, &card) != 0) {
printf("Connecting to card failed: %s\n", sc_strerror(r));
goto err;
}
}
}
if (card == NULL) {
printf("SmartCard absent.\n");
goto err;
}
sc_destroy_context(ctx);
return PAM_SUCCESS;
err:
if (card)
sc_disconnect_card(card);
if (ctx)
sc_destroy_context(ctx);
return PAM_AUTH_ERR;
}
PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags, int argc, const char **argv)
{
printf("pam_sm_setcred() called\n");
return PAM_SUCCESS;
}