Add _pam_winbind_init/free_context.
authorGünther Deschner <gd@samba.org>
Thu, 3 Apr 2008 11:23:34 +0000 (13:23 +0200)
committerGünther Deschner <gd@samba.org>
Thu, 3 Apr 2008 14:27:18 +0000 (16:27 +0200)
Guenther
(This used to be commit d62676cf886d910334b3d6f7ce0147b75ef53aec)

source3/nsswitch/pam_winbind.c

index 688462c5e5a2e065392f5dfdd8006db9f331a895..7c3c2b1666bf6a997f43b4f1a4f379fff0347b70 100644 (file)
@@ -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)