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.