From: Jennifer Richards Date: Thu, 25 Aug 2016 20:18:14 +0000 (-0400) Subject: Forgot to check in a couple of files. X-Git-Tag: v2.0~11 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=trust_router.git;a=commitdiff_plain;h=e183e381ea1d34f1e66bdd0682643b6bace7c885 Forgot to check in a couple of files. --- diff --git a/Makefile.am b/Makefile.am index d509db5..a8fe8dd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5,6 +5,7 @@ AM_CPPFLAGS=-I$(srcdir)/include $(GLIB_CFLAGS) AM_CFLAGS = -Wall -Werror=missing-prototypes -Werror -Wno-parentheses $(GLIB_CFLAGS) SUBDIRS = gsscon common_srcs = common/tr_name.c \ + common/tr_gss.c \ common/tr_constraint.c \ common/jansson_iterators.h \ common/tr_msg.c \ @@ -43,7 +44,6 @@ common/tr_comm.c \ common/tr_filter.c \ common/tr_rp.c \ common/tr_mq.c \ -common/tr_gss.c \ tr/tr.c \ tr/tr_event.c \ tr/tr_cfgwatch.c \ diff --git a/common/tr_gss.c b/common/tr_gss.c new file mode 100644 index 0000000..e1ae99b --- /dev/null +++ b/common/tr_gss.c @@ -0,0 +1,95 @@ +#include + +#include + +static int tr_gss_names_destructor(void *obj) +{ + TR_GSS_NAMES *gss_names=talloc_get_type_abort(obj, TR_GSS_NAMES); + int ii=0; + + for (ii=0; iinames[ii]!=NULL) + tr_free_name(gss_names->names[ii]); + } + return 0; +} +TR_GSS_NAMES *tr_gss_names_new(TALLOC_CTX *mem_ctx) +{ + TR_GSS_NAMES *gn=talloc(mem_ctx, TR_GSS_NAMES); + int ii=0; + + if (gn!=NULL) { + for (ii=0; iinames[ii]=NULL; + talloc_set_destructor((void *)gn, tr_gss_names_destructor); + } + return gn; +} + +void tr_gss_names_free(TR_GSS_NAMES *gn) +{ + talloc_free(gn); +} + +/* returns 0 on success */ +int tr_gss_names_add(TR_GSS_NAMES *gn, TR_NAME *new) +{ + int ii=0; + + for (ii=0; iinames[ii]==NULL) + break; + } + if (ii!=TR_MAX_GSS_NAMES) { + gn->names[ii]=new; + return 0; + } else + return -1; +} + +int tr_gss_names_matches(TR_GSS_NAMES *gn, TR_NAME *name) +{ + int ii=0; + + for (ii=0; iinames[ii]!=NULL) && + (0==tr_name_cmp(gn->names[ii], name))) + return 1; + } + return 0; +} + +/* iterators */ +TR_GSS_NAMES_ITER *tr_gss_names_iter_new(TALLOC_CTX *mem_ctx) +{ + TR_GSS_NAMES_ITER *iter=talloc(mem_ctx, TR_GSS_NAMES_ITER); + if (iter!=NULL) { + iter->gn=NULL; + iter->ii=0; + } + return iter; +} + +TR_NAME *tr_gss_names_iter_first(TR_GSS_NAMES_ITER *iter, TR_GSS_NAMES *gn) +{ + iter->gn=gn; + iter->ii=-1; + return tr_gss_names_iter_next(iter); +} + +TR_NAME *tr_gss_names_iter_next(TR_GSS_NAMES_ITER *iter) +{ + for (iter->ii++; + (iter->ii < TR_MAX_GSS_NAMES) && (iter->gn->names[iter->ii]==NULL); + iter->ii++) { } + + if (iter->iign->names[iter->ii]; + + return NULL; +} + +void tr_gss_names_iter_free(TR_GSS_NAMES_ITER *iter) +{ + talloc_free(iter); +} diff --git a/include/tr_gss.h b/include/tr_gss.h new file mode 100644 index 0000000..460e4ab --- /dev/null +++ b/include/tr_gss.h @@ -0,0 +1,28 @@ +#ifndef __TR_GSS_H__ +#define __TR_GSS_H__ + +#include +#include + +#define TR_MAX_GSS_NAMES 5 + +typedef struct tr_gss_names { + TR_NAME *names[TR_MAX_GSS_NAMES]; +} TR_GSS_NAMES; + +typedef struct tr_gss_names_iter { + TR_GSS_NAMES *gn; + int ii; /* which entry did we last output? */ +} TR_GSS_NAMES_ITER; + +TR_GSS_NAMES *tr_gss_names_new(TALLOC_CTX *mem_ctx); +void tr_gss_names_free(TR_GSS_NAMES *gn); +int tr_gss_names_add(TR_GSS_NAMES *gn, TR_NAME *new); +int tr_gss_names_matches(TR_GSS_NAMES *gn, TR_NAME *name); + +TR_GSS_NAMES_ITER *tr_gss_names_iter_new(TALLOC_CTX *mem_ctx); +TR_NAME *tr_gss_names_iter_first(TR_GSS_NAMES_ITER *iter, TR_GSS_NAMES *gn); +TR_NAME *tr_gss_names_iter_next(TR_GSS_NAMES_ITER *iter); +void tr_gss_names_iter_free(TR_GSS_NAMES_ITER *iter); + +#endif /* __TR_GSS_H__ */