From 6cb155f2e0729c486c0d4e1cd6061d376a09de34 Mon Sep 17 00:00:00 2001 From: Margaret Wasserman Date: Tue, 2 Jul 2013 08:49:06 -0400 Subject: [PATCH] Underlying code to check RP GSS Name. --- common/tr_config.c | 75 +++++++++++++++++++++++++++++------------------------ include/tr_config.h | 2 ++ 2 files changed, 43 insertions(+), 34 deletions(-) diff --git a/common/tr_config.c b/common/tr_config.c index c038ab4..3e79778 100644 --- a/common/tr_config.c +++ b/common/tr_config.c @@ -146,8 +146,8 @@ static TR_RP_CLIENT *tr_cfg_parse_one_rp_client (TR_INSTANCE *tr, json_t *jrp, T static TR_CFG_RC tr_cfg_parse_rp_clients (TR_INSTANCE *tr, json_t *jcfg) { json_t *jrps = NULL; - TR_CFG_RC rc = TR_CFG_SUCCESS; TR_RP_CLIENT *rp = NULL; + TR_CFG_RC rc = TR_CFG_SUCCESS; int i = 0; if ((!tr) || (!tr->new_cfg) || (!jcfg)) @@ -363,29 +363,6 @@ static TR_IDP_REALM *tr_cfg_find_idp (TR_INSTANCE *tr, TR_NAME *idp_id, TR_CFG_R return NULL; } -static TR_RP_CLIENT *tr_cfg_find_rp (TR_INSTANCE *tr, TR_NAME *rp_id, TR_CFG_RC *rc) -{ - TR_RP_CLIENT *cfg_rp; - int i; - - if ((!tr) || (!rp_id)) { - if (rc) - *rc = TR_CFG_BAD_PARAMS; - return NULL; - } - - for (cfg_rp = tr->active_cfg->rp_clients; NULL != cfg_rp; cfg_rp = cfg_rp->next) { - for (i = 0; i < TR_MAX_GSS_NAMES; i++) { - if (!tr_name_cmp (rp_id, cfg_rp->gss_names[i])) { - fprintf(stderr, "tr_cfg_find_rp: Found %s.\n", rp_id->buf); - return cfg_rp; - } - } - } - /* if we didn't find one, return NULL */ - return NULL; -} - static TR_IDP_REALM *tr_cfg_parse_comm_idps (TR_INSTANCE *tr, json_t *jidps, TR_CFG_RC *rc) { TR_IDP_REALM *idp = NULL; @@ -416,10 +393,10 @@ static TR_IDP_REALM *tr_cfg_parse_comm_idps (TR_INSTANCE *tr, json_t *jidps, TR_ return idp; } -static TR_RP_CLIENT *tr_cfg_parse_comm_rps (TR_INSTANCE *tr, json_t *jrps, TR_CFG_RC *rc) +static TR_RP_REALM *tr_cfg_parse_comm_rps (TR_INSTANCE *tr, json_t *jrps, TR_CFG_RC *rc) { - TR_RP_CLIENT *rp = NULL; - TR_RP_CLIENT *temp_rp = NULL; + TR_RP_REALM *rp = NULL; + TR_RP_REALM *temp_rp = NULL; int i = 0; if ((!tr) || @@ -430,16 +407,23 @@ static TR_RP_CLIENT *tr_cfg_parse_comm_rps (TR_INSTANCE *tr, json_t *jrps, TR_CF return NULL; } - for (i = 0; i < json_array_size(jrps); i++) { - if (NULL == (temp_rp = (tr_cfg_find_rp(tr, - tr_new_name((char *)json_string_value(json_array_get(jrps, i))), - rc)))) { - fprintf(stderr, "tr_cfg_parse_comm_rps: Unknown RP %s.\n", - (char *)json_string_value(json_array_get(jrps, i))); + for (i = (json_array_size(jrps)-1); i >= 0; i++) { + if (NULL == (temp_rp = malloc(sizeof(TR_RP_REALM)))) { + fprintf(stderr, "tr_cfg_parse_comm_rps: Can't allocate memory for RP Realm.\n"); + if (rc) + *rc = TR_CFG_NOMEM; return NULL; } + memset (temp_rp, 0, sizeof(TR_RP_REALM)); - temp_rp->comm_next = rp; + if (NULL == (temp_rp->realm_name = tr_new_name((char *)json_string_value(json_array_get(jrps, i))))) { + fprintf(stderr, "tr_cfg_parse_comm_rps: No memory for RP Realm Name.\n"); + if (rc) + *rc = TR_CFG_NOMEM; + return NULL; + } + + temp_rp->next = rp; rp = temp_rp; } @@ -588,6 +572,29 @@ TR_CFG_RC tr_parse_config (TR_INSTANCE *tr, json_t *jcfg) { return TR_CFG_SUCCESS; } +TR_RP_CLIENT *tr_cfg_find_rp (TR_INSTANCE *tr, TR_NAME *rp_gss, TR_CFG_RC *rc) +{ + TR_RP_CLIENT *cfg_rp; + int i; + + if ((!tr) || (!rp_gss)) { + if (rc) + *rc = TR_CFG_BAD_PARAMS; + return NULL; + } + + for (cfg_rp = tr->active_cfg->rp_clients; NULL != cfg_rp; cfg_rp = cfg_rp->next) { + for (i = 0; i < TR_MAX_GSS_NAMES; i++) { + if (!tr_name_cmp (rp_gss, cfg_rp->gss_names[i])) { + fprintf(stderr, "tr_cfg_find_rp: Found %s.\n", rp_gss->buf); + return cfg_rp; + } + } + } + /* if we didn't find one, return NULL */ + return NULL; +} + json_t *tr_read_config (int n, struct dirent **cfg_files) { json_t *jcfg = NULL; json_t *temp = NULL; diff --git a/include/tr_config.h b/include/tr_config.h index 7dcf126..48c4ce7 100644 --- a/include/tr_config.h +++ b/include/tr_config.h @@ -74,4 +74,6 @@ TR_CFG_RC tr_parse_config (TR_INSTANCE *tr, json_t *jcfg); TR_CFG_RC tr_apply_new_config (TR_INSTANCE *tr); void tr_cfg_free(TR_CFG *cfg); void tr_print_config(FILE *stream, TR_CFG *cfg); + +TR_RP_CLIENT *tr_cfg_find_rp (TR_INSTANCE *tr, TR_NAME *rp_gss, TR_CFG_RC *rc); #endif -- 2.1.4