From a22b0af1993a489c9c0e66fdc1083f43b410d12c Mon Sep 17 00:00:00 2001 From: Pavel Březina Date: Dec 19 2016 22:22:05 +0000 Subject: nss: move nss_ctx->global_names to rctx Global names context is used to parse AD well known SIDs and names into its opposite. This patch moves definition of this parameter from nss responder into common responder context so it can be used also by other responders. This change will be use to enable looking up well known SIDs and names directly in cache_req. Reviewed-by: Lukáš Slebodník --- diff --git a/src/responder/common/responder.h b/src/responder/common/responder.h index 9e3b2fd..6f81e68 100644 --- a/src/responder/common/responder.h +++ b/src/responder/common/responder.h @@ -99,6 +99,7 @@ struct resp_ctx { const char *priv_sock_name; struct sss_nc_ctx *ncache; + struct sss_names_ctx *global_names; struct sbus_connection *mon_conn; struct be_conn *be_conns; diff --git a/src/responder/common/responder_common.c b/src/responder/common/responder_common.c index c939ea2..bf0d92f 100644 --- a/src/responder/common/responder_common.c +++ b/src/responder/common/responder_common.c @@ -1080,6 +1080,12 @@ int sss_process_init(TALLOC_CTX *mem_ctx, goto fail; } + ret = sss_ad_default_names_ctx(rctx, &rctx->global_names); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, "sss_ad_default_names_ctx failed.\n"); + goto fail; + } + DEBUG(SSSDBG_TRACE_FUNC, "Responder Initialization complete\n"); *responder_ctx = rctx; diff --git a/src/responder/nss/nsssrv.c b/src/responder/nss/nsssrv.c index 236ae87..8318b35 100644 --- a/src/responder/nss/nsssrv.c +++ b/src/responder/nss/nsssrv.c @@ -515,12 +515,6 @@ int nss_process_init(TALLOC_CTX *mem_ctx, goto fail; } - ret = sss_ad_default_names_ctx(nctx, &nctx->global_names); - if (ret != EOK) { - DEBUG(SSSDBG_CRIT_FAILURE, "sss_ad_default_names_ctx failed.\n"); - goto fail; - } - DEBUG(SSSDBG_TRACE_FUNC, "NSS Initialization complete\n"); return EOK; diff --git a/src/responder/nss/nsssrv.h b/src/responder/nss/nsssrv.h index d4a80f7..f670a11 100644 --- a/src/responder/nss/nsssrv.h +++ b/src/responder/nss/nsssrv.h @@ -72,7 +72,6 @@ struct nss_ctx { struct sss_mc_ctx *initgr_mc_ctx; struct sss_idmap_ctx *idmap_ctx; - struct sss_names_ctx *global_names; const char **extra_attributes; }; diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index f83b21a..36be8f2 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -1405,11 +1405,9 @@ static int nss_check_name_of_well_known_sid(struct nss_cmd_ctx *cmdctx, uint8_t *body; size_t blen; struct cli_protocol *pctx; - struct nss_ctx *nss_ctx; size_t pctr = 0; - nss_ctx = talloc_get_type(cmdctx->cctx->rctx->pvt_ctx, struct nss_ctx); - ret = sss_parse_name(cmdctx, nss_ctx->global_names, full_name, + ret = sss_parse_name(cmdctx, cmdctx->cctx->rctx->global_names, full_name, &wk_dom_name, &wk_name); if (ret != EOK) { DEBUG(SSSDBG_OP_FAILURE, "sss_parse_name failed.\n"); @@ -5188,7 +5186,6 @@ static int nss_check_well_known_sid(struct nss_cmd_ctx *cmdctx) uint8_t *body; size_t blen; struct cli_protocol *pctx; - struct nss_ctx *nss_ctx; size_t pctr = 0; pctx = talloc_get_type(cmdctx->cctx->protocol_ctx, struct cli_protocol); @@ -5207,8 +5204,7 @@ static int nss_check_well_known_sid(struct nss_cmd_ctx *cmdctx) } if (wk_dom_name != NULL) { - nss_ctx = talloc_get_type(cmdctx->cctx->rctx->pvt_ctx, struct nss_ctx); - fq_name = sss_tc_fqname2(cmdctx, nss_ctx->global_names, + fq_name = sss_tc_fqname2(cmdctx, cmdctx->cctx->rctx->global_names, wk_dom_name, wk_dom_name, wk_name); if (fq_name == NULL) { DEBUG(SSSDBG_OP_FAILURE, "sss_tc_fqname2 failed.\n"); diff --git a/src/tests/cmocka/test_nss_srv.c b/src/tests/cmocka/test_nss_srv.c index 3cfdb38..bc63c95 100644 --- a/src/tests/cmocka/test_nss_srv.c +++ b/src/tests/cmocka/test_nss_srv.c @@ -1233,17 +1233,17 @@ void test_nss_setup(struct sss_test_conf_param params[], nss_test_ctx->nctx = mock_nctx(nss_test_ctx); assert_non_null(nss_test_ctx->nctx); - ret = sss_ad_default_names_ctx(nss_test_ctx->nctx, - &nss_test_ctx->nctx->global_names); - assert_int_equal(ret, EOK); - assert_non_null(nss_test_ctx->nctx->global_names); - nss_test_ctx->rctx = mock_rctx(nss_test_ctx, nss_test_ctx->tctx->ev, nss_test_ctx->tctx->dom, nss_test_ctx->nctx); assert_non_null(nss_test_ctx->rctx); nss_test_ctx->rctx->cdb = nss_test_ctx->tctx->confdb; nss_test_ctx->nctx->rctx = nss_test_ctx->rctx; + ret = sss_ad_default_names_ctx(nss_test_ctx->nctx, + &nss_test_ctx->nctx->rctx->global_names); + assert_int_equal(ret, EOK); + assert_non_null(nss_test_ctx->nctx->rctx->global_names); + /* Create client context */ nss_test_ctx->cctx = mock_cctx(nss_test_ctx, nss_test_ctx->rctx); assert_non_null(nss_test_ctx->cctx); @@ -1255,7 +1255,6 @@ void test_nss_setup(struct sss_test_conf_param params[], /* do after previous setup as the former nulls procotol_ctx */ nss_test_ctx->cctx->protocol_ctx = mock_prctx(nss_test_ctx->cctx); assert_non_null(nss_test_ctx->cctx->protocol_ctx); - } struct group getgrnam_no_members = {