PAM
view release on metacpan or search on metacpan
#endif
item = SvPV_nolen(item_sv);
rv = pam_set_item(pam_handle, item_type, item);
break;
case PAM_CONV :
#ifdef __LINUX_PAM__
case PAM_FAIL_DELAY : // Linux specific
case PAM_XAUTHDATA : // Linux specific
case PAM_AUTHTOK_TYPE : // Linux specific
#endif
default :
break;
}
SV*
get_data(pam_handle, name)
pam_handle_t *pam_handle
const char *name
PREINIT:
const void *data;
int rv;
CODE:
rv = pam_get_data(pam_handle, name, &data);
if (rv == PAM_SUCCESS)
RETVAL = newSVpv((char*)data, 0);
else
RETVAL = &PL_sv_undef;
OUTPUT:
RETVAL
void
set_data(pam_handle, name, data_sv)
pam_handle_t *pam_handle
const char *name
SV *data_sv
PREINIT:
const void *data;
void *datacpy;
int rv;
STRLEN len = 0;
CODE:
if (SvOK(data_sv)) {
data = SvPV(data_sv, len);
datacpy = malloc(len);
if (datacpy == NULL)
croak("Unable to allocate memory\n");
memcpy(datacpy, data, len);
rv = pam_set_data(pam_handle, name, datacpy, &cleanup_data);
} else {
// undef should set null
rv = pam_set_data(pam_handle, name, NULL, NULL);
}
void
getenvlist(pam_handle)
pam_handle_t *pam_handle
PREINIT:
char **env;
char **env_orig;
PPCODE:
env = pam_getenvlist(pam_handle);
env_orig = env;
while (env != NULL) {
XPUSHs(sv_2mortal(newSVpv(*env, 0)));
env++;
}
free(env_orig);
SV*
getenv(pam_handle, name)
pam_handle_t *pam_handle
const char *name
PREINIT:
const char *value;
CODE:
value = pam_getenv(pam_handle, name);
RETVAL = newSVpv(value, 0);
OUTPUT:
RETVAL
void
putenv(pam_handle, name_value_sv)
pam_handle_t *pam_handle
SV *name_value_sv
const void *name_value = NO_INIT
int rv = NO_INIT
CODE:
name_value = SvPV_nolen(name_value_sv);
rv = pam_putenv(pam_handle, name_value);
SV*
strerror(pam_handle, errnum)
pam_handle_t *pam_handle
int errnum
PREINIT:
const char *errstr;
CODE:
errstr = pam_strerror(pam_handle, errnum);
RETVAL = newSVpv(errstr, 0);
OUTPUT:
RETVAL
MODULE = PAM PACKAGE = PAM::Conversation
int
run(SV *self, ...)
PREINIT:
struct pam_conv *pamc;
struct pam_message **msg = NULL;
struct pam_response *resp = NULL;
int rv, i;
SV **pamh_ref;
INIT:
pamc = xs_object_magic_get_struct_rv(aTHX_ self);
CODE:
pamh_ref = hv_fetchs((HV*)SvRV(self), "handle", 0);
SvREFCNT_inc(*pamh_ref);
items--; // self takes up one
if (pamh_ref != NULL) {
( run in 0.517 second using v1.01-cache-2.11-cpan-5511b514fd6 )