From e37c72c991f06c7f6331e957523e9f92610d3ccb Mon Sep 17 00:00:00 2001 From: Jennifer Richards Date: Mon, 22 Aug 2016 11:49:35 -0400 Subject: [PATCH] Parsing new-style config files partially working. Still need to add APC/community parsing and peer table parsing. --- common/tr_apc.c | 1 + common/tr_comm.c | 4 ++-- common/tr_config.c | 54 +++++++++++++++++++++++++++++++++++++++++++----------- common/tr_filter.c | 2 +- common/tr_rp.c | 5 ++++- tr/tr_main.c | 2 +- 6 files changed, 52 insertions(+), 16 deletions(-) diff --git a/common/tr_apc.c b/common/tr_apc.c index a2cabed..eb7da1f 100644 --- a/common/tr_apc.c +++ b/common/tr_apc.c @@ -48,6 +48,7 @@ TR_APC *tr_apc_add(TR_APC *head, TR_APC *new) new=new->next; } } + return head; } /* does not copy next pointer */ diff --git a/common/tr_comm.c b/common/tr_comm.c index 1434353..fe4476a 100644 --- a/common/tr_comm.c +++ b/common/tr_comm.c @@ -75,8 +75,8 @@ void tr_comm_add_idp_realm(TR_COMM *comm, TR_IDP_REALM *realm) if (comm->idp_realms==NULL) comm->idp_realms=realm; else { - for (cur=comm->idp_realms; cur->next!=NULL; cur=cur->next) { } - cur->next=realm; + for (cur=comm->idp_realms; cur->comm_next!=NULL; cur=cur->comm_next) { } + cur->comm_next=realm; } } diff --git a/common/tr_config.c b/common/tr_config.c index bfe8fe8..23228e3 100644 --- a/common/tr_config.c +++ b/common/tr_config.c @@ -471,7 +471,6 @@ static TR_FILTER *tr_cfg_parse_filters(TALLOC_CTX *mem_ctx, json_t *jfilts, TR_C TALLOC_CTX *tmp_ctx=talloc_new(NULL); json_t *jfilt; TR_FILTER *filt=NULL; - int ii=0; *rc=TR_CFG_ERROR; @@ -564,7 +563,7 @@ static TR_AAA_SERVER *tr_cfg_parse_aaa_servers(TALLOC_CTX *mem_ctx, json_t *jaaa return aaa; } -static TR_APC *tr_cfg_parse_apc(TALLOC_CTX *mem_ctx, json_t *japc, TR_CFG_RC *rc) +static TR_APC *tr_cfg_parse_one_apc(TALLOC_CTX *mem_ctx, json_t *japc, TR_CFG_RC *rc) { TR_APC *apc=NULL; TR_NAME *name=NULL; @@ -572,7 +571,7 @@ static TR_APC *tr_cfg_parse_apc(TALLOC_CTX *mem_ctx, json_t *japc, TR_CFG_RC *rc *rc = TR_CFG_SUCCESS; /* presume success */ if ((!japc) || (!rc) || (!json_is_string(japc))) { - tr_debug("tr_cfg_parse_apc: Bad parameters."); + tr_debug("tr_cfg_parse_one_apc: Bad parameters."); if (rc) *rc = TR_CFG_BAD_PARAMS; return NULL; @@ -580,14 +579,14 @@ static TR_APC *tr_cfg_parse_apc(TALLOC_CTX *mem_ctx, json_t *japc, TR_CFG_RC *rc apc=tr_apc_new(mem_ctx); if (apc==NULL) { - tr_debug("tr_cfg_parse_apc: Out of memory."); + tr_debug("tr_cfg_parse_one_apc: Out of memory."); *rc = TR_CFG_NOMEM; return NULL; } name=tr_new_name(json_string_value(japc)); if (name==NULL) { - tr_debug("tr_cfg_parse_apc: No memory for APC name."); + tr_debug("tr_cfg_parse_one_apc: No memory for APC name."); tr_apc_free(apc); *rc = TR_CFG_NOMEM; return NULL; @@ -597,6 +596,41 @@ static TR_APC *tr_cfg_parse_apc(TALLOC_CTX *mem_ctx, json_t *japc, TR_CFG_RC *rc return apc; } +static TR_APC *tr_cfg_parse_apcs(TALLOC_CTX *mem_ctx, json_t *japcs, TR_CFG_RC *rc) +{ + TALLOC_CTX *tmp_ctx=talloc_new(NULL); + TR_APC *apcs=NULL; + TR_APC *new_apc=NULL; + int ii=0; + TR_CFG_RC call_rc=TR_CFG_ERROR; + + *rc = TR_CFG_SUCCESS; /* presume success */ + + if ((!japcs) || (!rc) || (!json_is_array(japcs))) { + tr_debug("tr_cfg_parse_one_apc: Bad parameters."); + if (rc) + *rc = TR_CFG_BAD_PARAMS; + return NULL; + } + + for (ii=0; iiid->buf); aaa=tr_cfg_parse_aaa_servers(idp, json_object_get(jidp, "aaa_servers"), &rc); - if ((rc!=TR_CFG_SUCCESS) || (aaa==NULL)) { + if (rc!=TR_CFG_SUCCESS) { tr_err("tr_cfg_parse_idp: unable to parse AAA servers"); rc=TR_CFG_NOPARSE; goto cleanup; @@ -1164,7 +1198,8 @@ TR_CFG_RC tr_cfg_parse_one_config_file(TR_CFG *cfg, const char *file_with_path) } #endif - if (TR_CFG_SUCCESS != tr_cfg_parse_local_orgs(cfg, jcfg)) + if ((TR_CFG_SUCCESS != tr_cfg_parse_internal(cfg, jcfg)) || + (TR_CFG_SUCCESS != tr_cfg_parse_local_orgs(cfg, jcfg))) return TR_CFG_ERROR; return TR_CFG_SUCCESS; @@ -1174,9 +1209,6 @@ TR_CFG_RC tr_cfg_parse_one_config_file(TR_CFG *cfg, const char *file_with_path) TR_CFG_RC tr_parse_config(TR_CFG_MGR *cfg_mgr, const char *config_dir, int n, struct dirent **cfg_files) { TALLOC_CTX *tmp_ctx=talloc_new(NULL); - json_t *jcfg; - json_t *jser; - json_error_t rc; char *file_with_path; int ii; TR_CFG_RC cfg_rc=TR_CFG_ERROR; diff --git a/common/tr_filter.c b/common/tr_filter.c index eecc4ca..e02c986 100644 --- a/common/tr_filter.c +++ b/common/tr_filter.c @@ -82,7 +82,7 @@ void tr_fspec_free(TR_FSPEC *fspec) talloc_free(fspec); } -int tr_fspec_destructor(void *obj) +static int tr_fspec_destructor(void *obj) { TR_FSPEC *fspec=talloc_get_type_abort(obj, TR_FSPEC); if (fspec->field!=NULL) diff --git a/common/tr_rp.c b/common/tr_rp.c index a132596..4196d3d 100644 --- a/common/tr_rp.c +++ b/common/tr_rp.c @@ -75,7 +75,10 @@ void tr_rp_client_free(TR_RP_CLIENT *client) static TR_RP_CLIENT *tr_rp_client_tail(TR_RP_CLIENT *client) { - while (client!=NULL) + if (client==NULL) + return NULL; + + while (client->next!=NULL) client=client->next; return client; } diff --git a/tr/tr_main.c b/tr/tr_main.c index 2810edc..15c17a1 100644 --- a/tr/tr_main.c +++ b/tr/tr_main.c @@ -52,7 +52,7 @@ #include #define TALLOC_DEBUG_ENABLE 1 -#define DEBUG_HARDCODED_PEER_TABLE 1 +#define DEBUG_HARDCODED_PEER_TABLE 0 #define DEBUG_PING_SELF 0 /***** command-line option handling / setup *****/ -- 2.1.4