+ TR_IDP_REALM *cfg_idp;
+
+ if ((!tr) || (!idp_id)) {
+ if (rc)
+ *rc = TR_CFG_BAD_PARAMS;
+ return NULL;
+ }
+
+ for (cfg_idp = tr->active_cfg->idp_realms; NULL != cfg_idp; cfg_idp = cfg_idp->next) {
+ if (!tr_name_cmp (idp_id, cfg_idp->realm_id)) {
+ fprintf(stderr, "tr_cfg_find_idp: Found %s.\n", idp_id->buf);
+ return cfg_idp;
+ }
+ }
+ /* if we didn't find one, return NULL */
+ 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;
+ TR_IDP_REALM *temp_idp = NULL;
+ int i = 0;
+
+ if ((!tr) ||
+ (!jidps) ||
+ (!json_is_array(jidps))) {
+ if (rc)
+ *rc = TR_CFG_BAD_PARAMS;
+ return NULL;
+ }
+
+ for (i = 0; i < json_array_size(jidps); i++) {
+ if (NULL == (temp_idp = (tr_cfg_find_idp(tr,
+ tr_new_name((char *)json_string_value(json_array_get(jidps, i))),
+ rc)))) {
+ fprintf(stderr, "tr_cfg_parse_comm_idps: Unknown IDP %s.\n",
+ (char *)json_string_value(json_array_get(jidps, i)));
+ return NULL;
+ }
+
+ temp_idp->comm_next = idp;
+ idp = temp_idp;
+ }
+
+ return idp;