|
Packit |
7e982e |
|
|
Packit |
7e982e |
#include "config.h"
|
|
Packit |
7e982e |
|
|
Packit |
7e982e |
#include <stdlib.h>
|
|
Packit |
7e982e |
#include <stdio.h>
|
|
Packit |
7e982e |
#include <unistd.h>
|
|
Packit |
7e982e |
#include <pwd.h>
|
|
Packit |
7e982e |
#include <sys/types.h>
|
|
Packit |
7e982e |
#include <security/pam_appl.h>
|
|
Packit |
7e982e |
|
|
Packit |
7e982e |
static int
|
|
Packit |
7e982e |
test_conv (int num_msg UNUSED, const struct pam_message **msgm UNUSED,
|
|
Packit |
7e982e |
struct pam_response **response UNUSED, void *appdata_ptr UNUSED)
|
|
Packit |
7e982e |
{
|
|
Packit |
7e982e |
return 0;
|
|
Packit |
7e982e |
}
|
|
Packit |
7e982e |
|
|
Packit |
7e982e |
static struct pam_conv conv = {
|
|
Packit |
7e982e |
test_conv,
|
|
Packit |
7e982e |
NULL
|
|
Packit |
7e982e |
};
|
|
Packit |
7e982e |
|
|
Packit |
7e982e |
int main(void)
|
|
Packit |
7e982e |
{
|
|
Packit |
7e982e |
char *user;
|
|
Packit |
7e982e |
pam_handle_t *pamh;
|
|
Packit |
7e982e |
struct passwd *pw;
|
|
Packit |
7e982e |
uid_t uid;
|
|
Packit |
7e982e |
int res;
|
|
Packit |
7e982e |
|
|
Packit |
7e982e |
uid = geteuid();
|
|
Packit |
7e982e |
pw = getpwuid(uid);
|
|
Packit |
7e982e |
if (pw) {
|
|
Packit |
7e982e |
user = pw->pw_name;
|
|
Packit |
7e982e |
} else {
|
|
Packit |
7e982e |
fprintf(stderr, "Invalid userid: %lu\n", (unsigned long) uid);
|
|
Packit |
7e982e |
exit(1);
|
|
Packit |
7e982e |
}
|
|
Packit |
7e982e |
|
|
Packit |
7e982e |
pam_start("vpass", user, &conv, &pamh);
|
|
Packit |
7e982e |
pam_set_item(pamh, PAM_TTY, "/dev/tty");
|
|
Packit |
7e982e |
if ((res = pam_authenticate(pamh, 0)) != PAM_SUCCESS) {
|
|
Packit |
7e982e |
fprintf(stderr, "Oops: %s\n", pam_strerror(pamh, res));
|
|
Packit |
7e982e |
exit(1);
|
|
Packit |
7e982e |
}
|
|
Packit |
7e982e |
|
|
Packit |
7e982e |
pam_end(pamh, res);
|
|
Packit |
7e982e |
exit(0);
|
|
Packit |
7e982e |
}
|