>From f79fd0a2f35353078b19577076738c6487fe8cdc 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 647f827621448f5c386c6e257ba1aa2561e6c3f2..fa6cf23cd2d5752900b6c6c1a08a1ad17f816ec8 100644 --- a/src/responder/pam/pamsrv_cmd.c +++ b/src/responder/pam/pamsrv_cmd.c @@ -758,7 +758,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 f6ddcaad2c2506e372152c33b5d4f470f4ad489b..302cf3c8e242a0a44dbe6eef0641a391e63eae5a 100644 --- a/src/tests/krb5_child-test.c +++ b/src/tests/krb5_child-test.c @@ -169,7 +169,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