diff options
author | Günther Deschner <gd@samba.org> | 2008-04-03 13:23:34 +0200 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2008-04-03 16:27:18 +0200 |
commit | d62676cf886d910334b3d6f7ce0147b75ef53aec (patch) | |
tree | 06657fb56ca49a18afec15bd5c5e9f8d17babe9e /source/nsswitch | |
parent | fe8acb064433b286938e0b572ca1faa8a54414b7 (diff) | |
download | samba-d62676cf886d910334b3d6f7ce0147b75ef53aec.tar.gz samba-d62676cf886d910334b3d6f7ce0147b75ef53aec.tar.xz samba-d62676cf886d910334b3d6f7ce0147b75ef53aec.zip |
Add _pam_winbind_init/free_context.
Guenther
Diffstat (limited to 'source/nsswitch')
-rw-r--r-- | source/nsswitch/pam_winbind.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/source/nsswitch/pam_winbind.c b/source/nsswitch/pam_winbind.c index 688462c5e5a..7c3c2b1666b 100644 --- a/source/nsswitch/pam_winbind.c +++ b/source/nsswitch/pam_winbind.c @@ -346,6 +346,45 @@ config_from_pam: return ctrl; }; +static void _pam_winbind_free_context(struct pwb_context *ctx) +{ + if (ctx->dict) { + iniparser_freedict(ctx->dict); + } + + SAFE_FREE(ctx); +} + +static int _pam_winbind_init_context(const pam_handle_t *pamh, + int flags, + int argc, + const char **argv, + struct pwb_context **ctx_p) +{ + struct pwb_context *r = NULL; + + r = (struct pwb_context *)malloc(sizeof(struct pwb_context)); + if (!r) { + return PAM_BUF_ERR; + } + + ZERO_STRUCTP(r); + + r->pamh = pamh; + r->flags = flags; + r->argc = argc; + r->argv = argv; + r->ctrl = _pam_parse(pamh, flags, argc, argv, &r->dict); + if (r->ctrl == -1) { + _pam_winbind_free_context(r); + return PAM_SYSTEM_ERR; + } + + *ctx_p = r; + + return PAM_SUCCESS; +} + static void _pam_winbind_cleanup_func(pam_handle_t *pamh, void *data, int error_status) |