All pastes #973199 Raw Edit

Mine

public c v1 · immutable
·published 2008-04-05 23:33 UTC
rendered paste body
#include <stdio.h>#include <errno.h>#include <pwd.h>#include <security/pam_appl.h>#include <security/pam_misc.h>#include <security/pam_modules.h>#include "auth.h"int check_conv (int num_msg, struct pam_message **msg,struct pam_response **resp, void *app_data){     struct pam_message *m = *msg;     struct pam_response *r;     int i;     char *ct_passwd;     if ((num_msg <= 0) || (num_msg >= PAM_MAX_NUM_MSG)) {         fprintf (stderr, "Invalid number of messages\n");         *resp = NULL;         return (PAM_CONV_ERR);     }     if ((*resp = r = calloc (num_msg, sizeof (struct pam_response))) == NULL)         return (PAM_BUF_ERR);     for (i = 0; i < num_msg; i++) {         switch (m->msg_style) {             case PAM_PROMPT_ECHO_OFF:                 ct_passwd = passtok;                 r->resp = strdup (ct_passwd);                 m++;                 r++;                 break;             case PAM_PROMPT_ECHO_ON:                 if (m->msg)                     fputs (m->msg, stdout);                 r->resp = NULL;                 m++;                 r++;                 break;             case PAM_ERROR_MSG:                 if (m->msg)                     fprintf (stderr, "%s\n", m->msg);                 m++;                 r++;                 break;             case PAM_TEXT_INFO:                 if (m->msg)                     printf ("%s\n", m->msg);                 m++;                 r++;                 break;         }         return (PAM_SUCCESS);     }}int check_auth(void){        pam_handle_t *pamh;        struct passwd *user_info;        int pam_status;        char *user;        static struct pam_conv conv = {check_conv,NULL};        if((user_info=getpwuid(getuid()))==NULL){            perror("getpwuid");            exit(EXIT_FAILURE);        }        pam_status = pam_start("login", user_info->pw_name, &conv, &pamh);                        if (pam_status == PAM_SUCCESS)            pam_status = pam_authenticate(pamh,PAM_SILENT);        if (pam_status == PAM_SUCCESS){            pam_get_item(pamh, PAM_USER, (const void **)&user);            fprintf(stdout, "Greetings %s\n", user);        }         else{                printf("%s\n", pam_strerror(pamh, pam_status));        }        pam_end(pamh, pam_status);        return pam_status;}