X-Git-Url: http://www.project-moonshot.org/gitweb/?p=trust_router.git;a=blobdiff_plain;f=common%2Ftr_config.c;h=83eddf77abb095d2474461a9b86774bb84b38951;hp=59cdfdce9a5c18abe994e93a854ca28f5131a278;hb=e427f7d366115d72ded50c2d8de7e7c4c37a773f;hpb=ee6787f44e1c2507add20b083a2d652b34632f32 diff --git a/common/tr_config.c b/common/tr_config.c index 59cdfdc..83eddf7 100644 --- a/common/tr_config.c +++ b/common/tr_config.c @@ -46,9 +46,39 @@ #include #include -void tr_print_config (FILE *stream, TR_CFG *cfg) { - fprintf(stream, "tr_print_config: Not yet implemented."); - return; +void tr_print_config (TR_CFG *cfg) { + tr_notice("tr_print_config: Logging running trust router configuration."); + tr_print_comms(cfg->comms); +} + +void tr_print_comms (TR_COMM *comm_list) { + TR_COMM *comm = NULL; + + for (comm = comm_list; NULL != comm; comm = comm->next) { + tr_notice("tr_print_config: Community %s:", comm->id->buf); + + tr_notice("tr_print_config: - Member IdPs:"); + tr_print_comm_idps(comm->idp_realms); + + tr_notice("tr_print_config: - Member RPs:"); + tr_print_comm_rps(comm->rp_realms); + } +} + +void tr_print_comm_idps (TR_IDP_REALM *idp_list) { + TR_IDP_REALM *idp = NULL; + + for (idp = idp_list; NULL != idp; idp = idp->comm_next) { + tr_notice("tr_print_config: - @%s", idp->realm_id->buf); + } +} + +void tr_print_comm_rps(TR_RP_REALM *rp_list) { + TR_RP_REALM *rp = NULL; + + for (rp = rp_list; NULL != rp; rp = rp->next) { + tr_notice("tr_print_config: - %s", rp->realm_name->buf); + } } TR_CFG *tr_cfg_new(TALLOC_CTX *mem_ctx) @@ -774,6 +804,7 @@ static TR_CFG_RC tr_cfg_parse_idp_realms (TR_CFG *trc, json_t *jcfg) static TR_IDP_REALM *tr_cfg_parse_comm_idps (TR_CFG *trc, json_t *jidps, TR_CFG_RC *rc) { TR_IDP_REALM *idp = NULL; + TR_IDP_REALM *found_idp = NULL; TR_IDP_REALM *temp_idp = NULL; int i = 0; @@ -786,14 +817,25 @@ static TR_IDP_REALM *tr_cfg_parse_comm_idps (TR_CFG *trc, json_t *jidps, TR_CFG_ } for (i = 0; i < json_array_size(jidps); i++) { - if (NULL == (temp_idp = (tr_cfg_find_idp(trc, - tr_new_name((char *)json_string_value(json_array_get(jidps, i))), - rc)))) { + if (NULL == (temp_idp = talloc(trc, TR_IDP_REALM))) { + tr_debug("tr_cfg_parse_comm_idps: Can't allocate memory for IdP Realm."); + if (rc) + *rc = TR_CFG_NOMEM; + return NULL; + } + memset (temp_idp, 0, sizeof(TR_IDP_REALM)); + + if (NULL == (found_idp = (tr_cfg_find_idp(trc, + tr_new_name((char *)json_string_value(json_array_get(jidps, i))), + rc)))) { tr_debug("tr_cfg_parse_comm_idps: Unknown IDP %s.", (char *)json_string_value(json_array_get(jidps, i))); return NULL; } + // We *MUST* do a dereferenced copy here or the second community will corrupt the linked list we create here. + *temp_idp = *found_idp; + temp_idp->comm_next = idp; idp = temp_idp; } @@ -1002,6 +1044,7 @@ TR_CFG_RC tr_parse_config (TR_CFG_MGR *cfg_mgr, const char *config_dir, int n, s { TALLOC_CTX *tmp_ctx=talloc_new(NULL); json_t *jcfg; + json_t *jser; json_error_t rc; char *file_with_path; int ii; @@ -1036,6 +1079,16 @@ TR_CFG_RC tr_parse_config (TR_CFG_MGR *cfg_mgr, const char *config_dir, int n, s cfg_rc=TR_CFG_NOPARSE; goto cleanup; } + talloc_free(file_with_path); /* done with filename */ + + // Look for serial number and log it if it exists + if (NULL != (jser = json_object_get(jcfg, "serial_number"))) { + if (json_is_number(jser)) { + tr_notice("tr_read_config: Attempting to load revision %" JSON_INTEGER_FORMAT " of '%s'.", + json_integer_value(jser), + cfg_files[n]->d_name); + } + } if ((TR_CFG_SUCCESS != tr_cfg_parse_internal(cfg_mgr->new, jcfg)) || (TR_CFG_SUCCESS != tr_cfg_parse_rp_clients(cfg_mgr->new, jcfg)) ||