>From 70e583e460ad9202b4d53d39e153e0e5799f5d4b Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Thu, 14 Mar 2013 09:44:41 +0100 Subject: [PATCH 1/2] Reusing create_pam_data() on the other places. Function create_pam_data() should be only one way how to create new struct pam_data, because it also initialize destructor to created object. --- src/providers/data_provider.h | 12 ++++++++++++ src/providers/krb5/krb5_child.c | 2 +- src/responder/pam/pamsrv_cmd.c | 2 +- src/tests/krb5_child-test.c | 2 +- src/tests/krb5_utils-tests.c | 2 +- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/providers/data_provider.h b/src/providers/data_provider.h index 8e475d229c908b122c9d853b207bff82072df18b..2ce16e8599b3623a03acdc4947dab0f3926ca8aa 100644 --- a/src/providers/data_provider.h +++ b/src/providers/data_provider.h @@ -202,6 +202,18 @@ struct pam_data { #define SSS_KRB5_INFO_TGT_LIFETIME (SSS_SERVER_INFO|SSS_KRB5_INFO|0x01) #define SSS_KRB5_INFO_UPN (SSS_SERVER_INFO|SSS_KRB5_INFO|0x02) +/** + * @brief Create new zero initialized struct pam_data. + * + * @param mem_ctx A memory context use to allocate the internal data + * @return A pointer to new struct pam_data + * NULL on error + * + * NOTE: This function should be the only way, how to create new empty + * struct pam_data, because this function automatically initialize sub + * structures and set destructor to created object. + */ +struct pam_data *create_pam_data(TALLOC_CTX *mem_ctx); errno_t copy_pam_data(TALLOC_CTX *mem_ctx, struct pam_data *old_pd, struct pam_data **new_pd); void pam_print_data(int l, struct pam_data *pd); diff --git a/src/providers/krb5/krb5_child.c b/src/providers/krb5/krb5_child.c index 65685333551def89b5f94e9f6e91e40a7736f22d..52127b39ad92b1f66a20c38ced32c2778dcdc590 100644 --- a/src/providers/krb5/krb5_child.c +++ b/src/providers/krb5/krb5_child.c @@ -1556,7 +1556,7 @@ static errno_t unpack_buffer(uint8_t *buf, size_t size, if (!offline || !kr) return EINVAL; - pd = talloc_zero(kr, struct pam_data); + pd = create_pam_data(kr); if (pd == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, ("talloc_zero failed.\n")); return ENOMEM; diff --git a/src/responder/pam/pamsrv_cmd.c b/src/responder/pam/pamsrv_cmd.c index 69791a0e5f4d6a5034a8cd05b3f3dcabb70123e5..a0250102ab9d2f563e78977411036c41a4d73851 100644 --- a/src/responder/pam/pamsrv_cmd.c +++ b/src/responder/pam/pamsrv_cmd.c @@ -1067,7 +1067,7 @@ static int pam_forwarder(struct cli_ctx *cctx, int pam_cmd) } preq->cctx = cctx; - preq->pd = talloc_zero(preq, struct pam_data); + preq->pd = create_pam_data(preq); if (!preq->pd) { talloc_free(preq); return ENOMEM; diff --git a/src/tests/krb5_child-test.c b/src/tests/krb5_child-test.c index a72a3519985292456db6b9bbf9bccdcf678068a6..93ee72d5358fe8d6691db11c2d309210ec0492a0 100644 --- a/src/tests/krb5_child-test.c +++ b/src/tests/krb5_child-test.c @@ -171,7 +171,7 @@ create_dummy_pam_data(TALLOC_CTX *mem_ctx, const char *user, size_t authtok_len; errno_t ret; - pd = talloc_zero(mem_ctx, struct pam_data); + pd = create_pam_data(mem_ctx); if (!pd) goto fail; pd->cmd = SSS_PAM_AUTHENTICATE; diff --git a/src/tests/krb5_utils-tests.c b/src/tests/krb5_utils-tests.c index aa2f4ed4b8eb39c3aea8fdf53f27f12e096b9233..fdfe00ac2e2ab8e0ed099d4aea43d610210426a7 100644 --- a/src/tests/krb5_utils-tests.c +++ b/src/tests/krb5_utils-tests.c @@ -425,7 +425,7 @@ void setup_talloc_context(void) kr = talloc_zero(tmp_ctx, struct krb5child_req); fail_unless(kr != NULL, "Cannot create krb5child_req structure."); - pd = talloc_zero(tmp_ctx, struct pam_data); + pd = create_pam_data(tmp_ctx); fail_unless(pd != NULL, "Cannot create pam_data structure."); krb5_ctx = talloc_zero(tmp_ctx, struct krb5_ctx); -- 1.8.1.4