X-Git-Url: http://www.project-moonshot.org/gitweb/?p=trust_router.git;a=blobdiff_plain;f=common%2Ftr_rp.c;fp=common%2Ftr_rp.c;h=0b7d08ef6dfe754f4036427e4309606697c41727;hp=4acdc4b2deb2294957c2602db7e5a9f678c75e42;hb=6f65c9cce86719147d0b4dcc9823b25443c2d185;hpb=eaa1a8ceed54fbfadc2638cf383aaa12ab446a57 diff --git a/common/tr_rp.c b/common/tr_rp.c index 4acdc4b..0b7d08e 100644 --- a/common/tr_rp.c +++ b/common/tr_rp.c @@ -36,126 +36,11 @@ #include #include -#include +#include #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; -} - TR_RP_REALM *tr_rp_realm_lookup(TR_RP_REALM *rp_realms, TR_NAME *rp_name) { TR_RP_REALM *rp = NULL; @@ -330,3 +215,4 @@ char *tr_rp_realm_to_str(TALLOC_CTX *mem_ctx, TR_RP_REALM *rp) "RP realm: \"%.*s\"\n", rp->realm_id->len, rp->realm_id->buf); } +