Changeset 39 in openpam


Ignore:
Timestamp:
Feb 7, 2002, 12:22:08 PM (13 years ago)
Author:
des
Message:

Introduce pam_v{info,error,prompt}().
Move OpenPAM API extensions into <security/openpam.h> to avoid
namespace pollution for apps or modules that do not use them.

Sponsored by: DARPA, NAI Labs

Location:
trunk
Files:
3 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/security/openpam.h

    r32 r39  
    3737#ifndef _SECURITY_OPENPAM_H_INCLUDED 
    3838#define _SECURITY_OPENPAM_H_INCLUDED 
     39 
     40/* 
     41 * Annoying but necessary header pollution 
     42 */ 
     43#include <stdarg.h> 
     44 
     45/* 
     46 * API extensions 
     47 */ 
     48int 
     49pam_error(pam_handle_t *_pamh, 
     50        const char *_fmt, 
     51        ...); 
     52 
     53int 
     54pam_get_authtok(pam_handle_t *_pamh, 
     55        const char **_authtok, 
     56        const char *_prompt); 
     57 
     58int 
     59pam_info(pam_handle_t *_pamh, 
     60        const char *_fmt, 
     61        ...); 
     62 
     63int 
     64pam_prompt(pam_handle_t *_pamh, 
     65        int _style, 
     66        char **_resp, 
     67        const char *_fmt, 
     68        ...); 
     69 
     70int 
     71pam_setenv(pam_handle_t *_pamh, 
     72        const char *_name, 
     73        const char *_value, 
     74        int _overwrite); 
     75 
     76int 
     77pam_vinfo(pam_handle_t *_pamh, 
     78        const char *_fmt, 
     79        va_list _ap); 
     80 
     81int 
     82pam_verror(pam_handle_t *_pamh, 
     83        const char *_fmt, 
     84        va_list _ap); 
     85 
     86int 
     87pam_vprompt(pam_handle_t *_pamh, 
     88        int _style, 
     89        char **_resp, 
     90        const char *_fmt, 
     91        va_list _ap); 
    3992 
    4093/* 
  • trunk/include/security/pam_appl.h

    r38 r39  
    123123 
    124124/* 
    125  * OpenPAM extensions 
    126  */ 
    127 int 
    128 pam_error(pam_handle_t *_pamh, 
    129         const char *_fmt, 
    130         ...); 
    131  
    132 int 
    133 pam_get_authtok(pam_handle_t *_pamh, 
    134         const char **_authtok, 
    135         const char *_prompt); 
    136  
    137 int 
    138 pam_info(pam_handle_t *_pamh, 
    139         const char *_fmt, 
    140         ...); 
    141  
    142 int 
    143 pam_prompt(pam_handle_t *pamh, 
    144         char **resp, 
    145         int echo, 
    146         const char *fmt, 
    147         ...); 
    148  
    149 int 
    150 pam_setenv(pam_handle_t *_pamh, 
    151         const char *_name, 
    152         const char *_value, 
    153         int overwrite); 
    154  
    155 /* 
    156125 * Single Sign-On extensions 
    157126 */ 
  • trunk/lib/Makefile

    r21 r39  
    7171SRCS            += pam_start.c 
    7272SRCS            += pam_strerror.c 
     73SRCS            += pam_verror.c 
     74SRCS            += pam_vinfo.c 
     75SRCS            += pam_vprompt.c 
    7376 
    7477.if 0 
  • trunk/lib/pam_error.c

    r16 r39  
    4040 
    4141#include <security/pam_appl.h> 
     42#include <security/openpam.h> 
    4243 
    4344/* 
     
    5253        ...) 
    5354{ 
    54         char msgbuf[PAM_MAX_MSG_SIZE]; 
    55         struct pam_message msg; 
    56         const struct pam_message *msgp; 
    57         struct pam_response *rsp; 
    58         struct pam_conv conv; 
    5955        va_list ap; 
     56        char *rsp; 
    6057        int r; 
    6158 
    62         if ((r = pam_get_item(pamh, PAM_CONV, (void *)&conv)) != PAM_SUCCESS) 
    63                 return (r); 
    6459        va_start(ap, fmt); 
    65         vsnprintf(msgbuf, PAM_MAX_MSG_SIZE, fmt, ap); 
     60        r = pam_vprompt(pamh, PAM_ERROR_MSG, &rsp, fmt, ap); 
    6661        va_end(ap); 
    67         msg.msg_style = PAM_ERROR_MSG; 
    68         msg.msg = msgbuf; 
    69         msgp = &msg; 
    70         r = (conv.conv)(1, &msgp, &rsp, conv.appdata_ptr); 
    7162        free(rsp); /* ignore response */ 
    7263        return (r); 
  • trunk/lib/pam_get_authtok.c

    r38 r39  
    3838 
    3939#include <security/pam_appl.h> 
     40#include <security/openpam.h> 
    4041 
    4142#include "openpam_impl.h" 
     
    6667                        prompt = "Password:"; 
    6768        } 
    68         r = pam_prompt(pamh, &resp, 0, "%s", prompt ? prompt : p); 
     69        r = pam_prompt(pamh, PAM_PROMPT_ECHO_OFF, &resp, 
     70            "%s", prompt ? prompt : p); 
    6971        if (r != PAM_SUCCESS) 
    7072                return (r); 
  • trunk/lib/pam_get_user.c

    r35 r39  
    3838 
    3939#include <security/pam_appl.h> 
     40#include <security/openpam.h> 
    4041 
    4142#include "openpam_impl.h" 
     
    6768                        prompt = "Login: "; 
    6869        } 
    69         r = pam_prompt(pamh, &resp, 0, "%s", prompt ? prompt : p); 
     70        r = pam_prompt(pamh, PAM_PROMPT_ECHO_ON, &resp, 
     71            "%s", prompt ? prompt : p); 
    7072        if (r != PAM_SUCCESS) 
    7173                return (r); 
  • trunk/lib/pam_info.c

    r16 r39  
    4040 
    4141#include <security/pam_appl.h> 
     42#include <security/openpam.h> 
    4243 
    4344/* 
     
    5253        ...) 
    5354{ 
    54         char msgbuf[PAM_MAX_MSG_SIZE]; 
    55         struct pam_message msg; 
    56         const struct pam_message *msgp; 
    57         struct pam_response *rsp; 
    58         struct pam_conv conv; 
    5955        va_list ap; 
     56        char *rsp; 
    6057        int r; 
    6158 
    62         if ((r = pam_get_item(pamh, PAM_CONV, (void *)&conv)) != PAM_SUCCESS) 
    63                 return (r); 
    6459        va_start(ap, fmt); 
    65         vsnprintf(msgbuf, PAM_MAX_MSG_SIZE, fmt, ap); 
     60        r = pam_vprompt(pamh, PAM_TEXT_INFO, &rsp, fmt, ap); 
    6661        va_end(ap); 
    67         msg.msg_style = PAM_TEXT_INFO; 
    68         msg.msg = msgbuf; 
    69         msgp = &msg; 
    70         r = (conv.conv)(1, &msgp, &rsp, conv.appdata_ptr); 
    7162        free(rsp); /* ignore response */ 
    7263        return (r); 
  • trunk/lib/pam_prompt.c

    r16 r39  
    3636 
    3737#include <stdarg.h> 
    38 #include <stdio.h> 
    39 #include <stdlib.h> 
    4038 
    4139#include <security/pam_appl.h> 
     40#include <security/openpam.h> 
    4241 
    4342/* 
    4443 * OpenPAM extension 
    4544 * 
    46  * Prompt the user for information 
     45 * Call the conversation function 
    4746 */ 
    4847 
    4948int 
    5049pam_prompt(pam_handle_t *pamh, 
     50        int style, 
    5151        char **resp, 
    52         int echo, 
    5352        const char *fmt, 
    5453        ...) 
    5554{ 
    56         char msgbuf[PAM_MAX_MSG_SIZE]; 
    57         struct pam_message msg; 
    58         const struct pam_message *msgp; 
    59         struct pam_response *rsp; 
    60         struct pam_conv conv; 
    6155        va_list ap; 
    6256        int r; 
    6357 
    64         if ((r = pam_get_item(pamh, PAM_CONV, (void *)&conv)) != PAM_SUCCESS) 
    65                 return (r); 
    6658        va_start(ap, fmt); 
    67         vsnprintf(msgbuf, PAM_MAX_MSG_SIZE, fmt, ap); 
     59        r = pam_vprompt(pamh, style, resp, fmt, ap); 
    6860        va_end(ap); 
    69         msg.msg_style = echo ? PAM_PROMPT_ECHO_ON : PAM_PROMPT_ECHO_OFF; 
    70         msg.msg = msgbuf; 
    71         msgp = &msg; 
    72         r = (conv.conv)(1, &msgp, &rsp, conv.appdata_ptr); 
    73         *resp = rsp == NULL ? NULL : rsp->resp; 
    74         free(rsp); 
    7561        return (r); 
    7662} 
Note: See TracChangeset for help on using the changeset viewer.