From: Jennifer Richards Date: Thu, 19 Apr 2018 21:27:17 +0000 (-0400) Subject: Separate tr_rp and tr_rp_client into separate modules X-Git-Tag: 3.4.0~1^2~42^2~2 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=trust_router.git;a=commitdiff_plain;h=66a710607cd6118b98a8cfc3e6343f1f09afbeb5 Separate tr_rp and tr_rp_client into separate modules No functional changes --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 0985721..1619306 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,7 +96,7 @@ set(SOURCE_FILES trp/trp_upd.c trp/trpc.c trp/trps.c include/tr_name_internal.h mon/mon_req.c mon/mon_req_encode.c mon/mon_req_decode.c - mon/mon_resp.c mon/mon_common.c mon/mon_resp_encode.c mon/mon_resp_decode.c tr/tr_mon.c mon/mons.c include/tr_socket.h common/tr_gss.c include/tr_gss.h common/tr_config_internal.c mon/mons_handlers.c include/mons_handlers.h tr/tr_tid_mons.c tr/tr_tid_mons.c trp/trp_route.c include/trp_route.h trp/trp_rtable_encoders.c trp/trp_route_encoders.c trp/trp_peer.c include/trp_peer.h trp/trp_peer_encoders.c trp/trp_ptable_encoders.c common/tr_idp_encoders.c common/tr_comm_encoders.c) + mon/mon_resp.c mon/mon_common.c mon/mon_resp_encode.c mon/mon_resp_decode.c tr/tr_mon.c mon/mons.c include/tr_socket.h common/tr_gss.c include/tr_gss.h common/tr_config_internal.c mon/mons_handlers.c include/mons_handlers.h tr/tr_tid_mons.c tr/tr_tid_mons.c trp/trp_route.c include/trp_route.h trp/trp_rtable_encoders.c trp/trp_route_encoders.c trp/trp_peer.c include/trp_peer.h trp/trp_peer_encoders.c trp/trp_ptable_encoders.c common/tr_idp_encoders.c common/tr_comm_encoders.c common/tr_rp_client.c include/tr_rp_client.h common/tr_rp_client_encoders.c) # Does not actually build! add_executable(trust_router ${SOURCE_FILES}) diff --git a/Makefile.am b/Makefile.am index d88ca77..7a94721 100644 --- a/Makefile.am +++ b/Makefile.am @@ -19,6 +19,7 @@ common_srcs = common/tr_name.c \ common/tr_comm.c \ common/tr_comm_encoders.c \ common/tr_rp.c \ + common/tr_rp_client.c \ common/tr_idp.c \ common/tr_idp_encoders.c \ common/tr_filter.c \ diff --git a/common/tr_rp.c b/common/tr_rp.c index a8988f6..0b7d08e 100644 --- a/common/tr_rp.c +++ b/common/tr_rp.c @@ -41,121 +41,6 @@ #include #include -static int tr_rp_client_destructor(void *obj) -{ - return 0; -} - -TR_RP_CLIENT *tr_rp_client_new(TALLOC_CTX *mem_ctx) -{ - TR_RP_CLIENT *client=talloc(mem_ctx, TR_RP_CLIENT); - - if (client!=NULL) { - client->next=NULL; - client->comm_next=NULL; - client->gss_names=NULL; - client->filters=NULL; - talloc_set_destructor((void *)client, tr_rp_client_destructor); - } - return client; -} - -void tr_rp_client_free(TR_RP_CLIENT *client) -{ - talloc_free(client); -} - -static TR_RP_CLIENT *tr_rp_client_tail(TR_RP_CLIENT *client) -{ - if (client==NULL) - return NULL; - - while (client->next!=NULL) - client=client->next; - return client; -} - -/* do not call directly, use the tr_rp_client_add() macro */ -TR_RP_CLIENT *tr_rp_client_add_func(TR_RP_CLIENT *clients, TR_RP_CLIENT *new) -{ - if (clients==NULL) - clients=new; - else { - tr_rp_client_tail(clients)->next=new; - while (new!=NULL) { - talloc_steal(clients, new); /* put it in the right context */ - new=new->next; - } - } - return clients; -} - - -int tr_rp_client_add_gss_name(TR_RP_CLIENT *rp_client, TR_NAME *gss_name) -{ - return tr_gss_names_add(rp_client->gss_names, gss_name); -} - -int tr_rp_client_set_filters(TR_RP_CLIENT *client, TR_FILTER_SET *filts) -{ - if (client->filters!=NULL) - tr_filter_set_free(client->filters); - client->filters=filts; - talloc_steal(client, filts); - return 0; /* success */ -} - -TR_RP_CLIENT_ITER *tr_rp_client_iter_new(TALLOC_CTX *memctx) -{ - return talloc(memctx, TR_RP_CLIENT_ITER); -} - -void tr_rp_client_iter_free(TR_RP_CLIENT_ITER *iter) -{ - talloc_free(iter); -} - -TR_RP_CLIENT *tr_rp_client_iter_first(TR_RP_CLIENT_ITER *iter, TR_RP_CLIENT *rp_clients) -{ - if (!iter) { - tr_err("tr_rp_client_iter_first: Iterator is null, failing."); - return NULL; - } - *iter=rp_clients; - return *iter; -} - -TR_RP_CLIENT *tr_rp_client_iter_next(TR_RP_CLIENT_ITER *iter) -{ - if (*iter) - *iter=(*iter)->next; - return *iter; -} - -/** - * Find a client associated with a GSS name. It's possible there are other clients that match as well. - * - * @param rp_clients List of RP clients to search - * @param gss_name GSS name to search for - * @return Borrowed reference to an RP client linked to the GSS name - */ -TR_RP_CLIENT *tr_rp_client_lookup(TR_RP_CLIENT *rp_clients, TR_NAME *gss_name) -{ - TR_RP_CLIENT_ITER *iter=tr_rp_client_iter_new(NULL); - TR_RP_CLIENT *client=NULL; - - if (iter==NULL) { - tr_err("tr_rp_client_lookup: Unable to allocate iterator"); - return NULL; - } - for (client=tr_rp_client_iter_first(iter, rp_clients); client != NULL; client=tr_rp_client_iter_next(iter)) { - if (tr_gss_names_matches(client->gss_names, gss_name)) - break; - } - tr_rp_client_iter_free(iter); - return client; -} - TR_RP_REALM *tr_rp_realm_lookup(TR_RP_REALM *rp_realms, TR_NAME *rp_name) { TR_RP_REALM *rp = NULL; @@ -331,7 +216,3 @@ char *tr_rp_realm_to_str(TALLOC_CTX *mem_ctx, TR_RP_REALM *rp) rp->realm_id->len, rp->realm_id->buf); } -json_t *tr_rp_realm_to_json(TR_RP_REALM *rp) -{ - return tr_name_to_json_string(tr_rp_realm_get_id(rp)); -} \ No newline at end of file diff --git a/common/tr_rp_client.c b/common/tr_rp_client.c new file mode 100644 index 0000000..b5e657e --- /dev/null +++ b/common/tr_rp_client.c @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2012-2018, JANET(UK) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of JANET(UK) nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include +#include +#include + +static int tr_rp_client_destructor(void *obj) +{ + return 0; +} + +TR_RP_CLIENT *tr_rp_client_new(TALLOC_CTX *mem_ctx) +{ + TR_RP_CLIENT *client=talloc(mem_ctx, TR_RP_CLIENT); + + if (client!=NULL) { + client->next=NULL; + client->comm_next=NULL; + client->gss_names=NULL; + client->filters=NULL; + talloc_set_destructor((void *)client, tr_rp_client_destructor); + } + return client; +} + +void tr_rp_client_free(TR_RP_CLIENT *client) +{ + talloc_free(client); +} + +static TR_RP_CLIENT *tr_rp_client_tail(TR_RP_CLIENT *client) +{ + if (client==NULL) + return NULL; + + while (client->next!=NULL) + client=client->next; + return client; +} + +/* do not call directly, use the tr_rp_client_add() macro */ +TR_RP_CLIENT *tr_rp_client_add_func(TR_RP_CLIENT *clients, TR_RP_CLIENT *new) +{ + if (clients==NULL) + clients=new; + else { + tr_rp_client_tail(clients)->next=new; + while (new!=NULL) { + talloc_steal(clients, new); /* put it in the right context */ + new=new->next; + } + } + return clients; +} + + +int tr_rp_client_add_gss_name(TR_RP_CLIENT *rp_client, TR_NAME *gss_name) +{ + return tr_gss_names_add(rp_client->gss_names, gss_name); +} + +int tr_rp_client_set_filters(TR_RP_CLIENT *client, TR_FILTER_SET *filts) +{ + if (client->filters!=NULL) + tr_filter_set_free(client->filters); + client->filters=filts; + talloc_steal(client, filts); + return 0; /* success */ +} + +TR_RP_CLIENT_ITER *tr_rp_client_iter_new(TALLOC_CTX *memctx) +{ + return talloc(memctx, TR_RP_CLIENT_ITER); +} + +void tr_rp_client_iter_free(TR_RP_CLIENT_ITER *iter) +{ + talloc_free(iter); +} + +TR_RP_CLIENT *tr_rp_client_iter_first(TR_RP_CLIENT_ITER *iter, TR_RP_CLIENT *rp_clients) +{ + if (!iter) { + tr_err("tr_rp_client_iter_first: Iterator is null, failing."); + return NULL; + } + *iter=rp_clients; + return *iter; +} + +TR_RP_CLIENT *tr_rp_client_iter_next(TR_RP_CLIENT_ITER *iter) +{ + if (*iter) + *iter=(*iter)->next; + return *iter; +} + +/** + * Find a client associated with a GSS name. It's possible there are other clients that match as well. + * + * @param rp_clients List of RP clients to search + * @param gss_name GSS name to search for + * @return Borrowed reference to an RP client linked to the GSS name + */ +TR_RP_CLIENT *tr_rp_client_lookup(TR_RP_CLIENT *rp_clients, TR_NAME *gss_name) +{ + TR_RP_CLIENT_ITER *iter=tr_rp_client_iter_new(NULL); + TR_RP_CLIENT *client=NULL; + + if (iter==NULL) { + tr_err("tr_rp_client_lookup: Unable to allocate iterator"); + return NULL; + } + for (client=tr_rp_client_iter_first(iter, rp_clients); client != NULL; client=tr_rp_client_iter_next(iter)) { + if (tr_gss_names_matches(client->gss_names, gss_name)) + break; + } + tr_rp_client_iter_free(iter); + return client; +} + diff --git a/include/tr_config.h b/include/tr_config.h index aaf016b..64339e7 100644 --- a/include/tr_config.h +++ b/include/tr_config.h @@ -44,6 +44,7 @@ #include #include +#include #include #include #include diff --git a/include/tr_rp.h b/include/tr_rp.h index abf476b..4424c73 100644 --- a/include/tr_rp.h +++ b/include/tr_rp.h @@ -36,18 +36,7 @@ #define TR_RP_H #include - -#include -#include - -typedef struct tr_rp_client { - struct tr_rp_client *next; - struct tr_rp_client *comm_next; - TR_GSS_NAMES *gss_names; - TR_FILTER_SET *filters; -} TR_RP_CLIENT; - -typedef struct tr_rp_client *TR_RP_CLIENT_ITER; +#include /* Structure to make a linked list of RP realms by name for community config */ typedef struct tr_rp_realm { @@ -57,18 +46,6 @@ typedef struct tr_rp_realm { } TR_RP_REALM; /* prototypes */ -TR_RP_CLIENT *tr_rp_client_new(TALLOC_CTX *mem_ctx); -void tr_rp_client_free(TR_RP_CLIENT *client); -TR_RP_CLIENT *tr_rp_client_add_func(TR_RP_CLIENT *clients, TR_RP_CLIENT *new); -#define tr_rp_client_add(clients,new) ((clients)=tr_rp_client_add_func((clients),(new))) -int tr_rp_client_add_gss_name(TR_RP_CLIENT *client, TR_NAME *name); -int tr_rp_client_set_filters(TR_RP_CLIENT *client, TR_FILTER_SET *filts); -TR_RP_CLIENT_ITER *tr_rp_client_iter_new(TALLOC_CTX *memctx); -void tr_rp_client_iter_free(TR_RP_CLIENT_ITER *iter); -TR_RP_CLIENT *tr_rp_client_iter_first(TR_RP_CLIENT_ITER *iter, TR_RP_CLIENT *rp_clients); -TR_RP_CLIENT *tr_rp_client_iter_next(TR_RP_CLIENT_ITER *iter); -TR_RP_CLIENT *tr_rp_client_lookup(TR_RP_CLIENT *rp_clients, TR_NAME *gss_name); - TR_RP_REALM *tr_rp_realm_new(TALLOC_CTX *mem_ctx); void tr_rp_realm_free(TR_RP_REALM *rp); TR_NAME *tr_rp_realm_get_id(TR_RP_REALM *rp); @@ -85,6 +62,5 @@ void tr_rp_realm_incref(TR_RP_REALM *realm); void tr_rp_realm_decref(TR_RP_REALM *realm); char *tr_rp_realm_to_str(TALLOC_CTX *mem_ctx, TR_RP_REALM *rp); -json_t *tr_rp_realm_to_json(TR_RP_REALM *rp); #endif diff --git a/include/tr_rp_client.h b/include/tr_rp_client.h new file mode 100644 index 0000000..1ff4b29 --- /dev/null +++ b/include/tr_rp_client.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2012-2018, JANET(UK) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of JANET(UK) nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef TRUST_ROUTER_TR_RP_CLIENT_H +#define TRUST_ROUTER_TR_RP_CLIENT_H + +#include + +#include +#include + +typedef struct tr_rp_client { + struct tr_rp_client *next; + struct tr_rp_client *comm_next; + TR_GSS_NAMES *gss_names; + TR_FILTER_SET *filters; +} TR_RP_CLIENT; + +typedef struct tr_rp_client *TR_RP_CLIENT_ITER; + +/* tr_rp_client.c */ +TR_RP_CLIENT *tr_rp_client_new(TALLOC_CTX *mem_ctx); +void tr_rp_client_free(TR_RP_CLIENT *client); +TR_RP_CLIENT *tr_rp_client_add_func(TR_RP_CLIENT *clients, TR_RP_CLIENT *new); +#define tr_rp_client_add(clients,new) ((clients)=tr_rp_client_add_func((clients),(new))) +int tr_rp_client_add_gss_name(TR_RP_CLIENT *client, TR_NAME *name); +int tr_rp_client_set_filters(TR_RP_CLIENT *client, TR_FILTER_SET *filts); +TR_RP_CLIENT_ITER *tr_rp_client_iter_new(TALLOC_CTX *memctx); +void tr_rp_client_iter_free(TR_RP_CLIENT_ITER *iter); +TR_RP_CLIENT *tr_rp_client_iter_first(TR_RP_CLIENT_ITER *iter, TR_RP_CLIENT *rp_clients); +TR_RP_CLIENT *tr_rp_client_iter_next(TR_RP_CLIENT_ITER *iter); +TR_RP_CLIENT *tr_rp_client_lookup(TR_RP_CLIENT *rp_clients, TR_NAME *gss_name); + +/* tr_rp_client_encoders.c */ +json_t *tr_rp_clients_to_json(TR_RP_CLIENT *rp_clients); + +#endif //TRUST_ROUTER_TR_RP_CLIENT_H diff --git a/tr/tr_tid.c b/tr/tr_tid.c index 6c649c0..e10b036 100644 --- a/tr/tr_tid.c +++ b/tr/tr_tid.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include