From 9956f913901c2cc9e25a8267fb2a71a9bc556570 Mon Sep 17 00:00:00 2001 From: Zhanna Tsitkov Date: Sun, 10 Jan 2010 02:12:55 +0000 Subject: [PATCH] Move krb5_authdata_export_authdata into the separate file for better code modularity git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@23623 dc483132-0cff-0310-8789-dd5450dbe970 --- src/lib/krb5/krb/Makefile.in | 5 +- src/lib/krb5/krb/authdata.c | 64 ---------------------- src/lib/krb5/krb/authdata_exp.c | 95 +++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 65 deletions(-) create mode 100644 src/lib/krb5/krb/authdata_exp.c diff --git a/src/lib/krb5/krb/Makefile.in b/src/lib/krb5/krb/Makefile.in index 51f2f15c3..39ccdd0cc 100644 --- a/src/lib/krb5/krb/Makefile.in +++ b/src/lib/krb5/krb/Makefile.in @@ -17,6 +17,7 @@ STLIBOBJS= \ appdefault.o \ auth_con.o \ authdata.o \ + authdata_exp.o \ authdata_enc.o \ authdata_dec.o \ bld_pr_ext.o \ @@ -114,6 +115,7 @@ OBJS= $(OUTPRE)addr_comp.$(OBJEXT) \ $(OUTPRE)appdefault.$(OBJEXT) \ $(OUTPRE)auth_con.$(OBJEXT) \ $(OUTPRE)authdata.$(OBJEXT) \ + $(OUTPRE)authdata_exp.$(OBJEXT) \ $(OUTPRE)authdata_enc.$(OBJEXT) \ $(OUTPRE)authdata_dec.$(OBJEXT) \ $(OUTPRE)bld_pr_ext.$(OBJEXT) \ @@ -211,6 +213,7 @@ SRCS= $(srcdir)/addr_comp.c \ $(srcdir)/appdefault.c \ $(srcdir)/auth_con.c \ $(srcdir)/authdata.c \ + $(srcdir)/authdata_exp.c \ $(srcdir)/authdata_enc.c \ $(srcdir)/authdata_dec.c \ $(srcdir)/bld_pr_ext.c \ @@ -335,7 +338,7 @@ T_KERB_OBJS= t_kerb.o conv_princ.o unparse.o set_realm.o str_conv.o T_SER_OBJS= t_ser.o ser_actx.o ser_adata.o ser_addr.o ser_auth.o ser_cksum.o \ ser_ctx.o ser_key.o ser_princ.o serialize.o authdata.o pac.o pac_sign.o \ - copy_data.o etype_list.o + authdata_exp.o copy_data.o etype_list.o T_DELTAT_OBJS= t_deltat.o deltat.o diff --git a/src/lib/krb5/krb/authdata.c b/src/lib/krb5/krb/authdata.c index 62e08d0f9..d98bfe943 100644 --- a/src/lib/krb5/krb/authdata.c +++ b/src/lib/krb5/krb/authdata.c @@ -539,70 +539,6 @@ k5_get_kdc_issued_authdata(krb5_context kcontext, return code; } -krb5_error_code KRB5_CALLCONV -krb5_authdata_export_authdata(krb5_context kcontext, - krb5_authdata_context context, - krb5_flags flags, - krb5_authdata ***pauthdata) -{ - int i; - krb5_error_code code = 0; - krb5_authdata **authdata = NULL; - unsigned int len = 0; - - *pauthdata = NULL; - - for (i = 0; i < context->n_modules; i++) { - struct _krb5_authdata_context_module *module = &context->modules[i]; - krb5_authdata **authdata2 = NULL; - int j; - - if ((module->flags & flags) == 0) - continue; - - if (module->ftable->export_authdata == NULL) - continue; - - code = (*module->ftable->export_authdata)(kcontext, - context, - module->plugin_context, - *(module->request_context_pp), - flags, - &authdata2); - if (code == ENOENT) - code = 0; - else if (code != 0) - break; - - if (authdata2 == NULL) - continue; - - for (j = 0; authdata2[j] != NULL; j++) - ; - - authdata = realloc(authdata, (len + j + 1) * sizeof(krb5_authdata *)); - if (authdata == NULL) - return ENOMEM; - - memcpy(&authdata[len], authdata2, j * sizeof(krb5_authdata *)); - free(authdata2); - - len += j; - } - - if (authdata != NULL) - authdata[len] = NULL; - - if (code != 0) { - krb5_free_authdata(kcontext, authdata); - return code; - } - - *pauthdata = authdata; - - return 0; -} - krb5_error_code krb5int_authdata_verify(krb5_context kcontext, krb5_authdata_context context, diff --git a/src/lib/krb5/krb/authdata_exp.c b/src/lib/krb5/krb/authdata_exp.c new file mode 100644 index 000000000..227581907 --- /dev/null +++ b/src/lib/krb5/krb/authdata_exp.c @@ -0,0 +1,95 @@ +/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ +/* + * Copyright 2009 by the Massachusetts Institute of Technology. All + * Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * krb5_authdata_export_authdata() + */ + +#include "k5-int.h" +#include "authdata.h" +#include "auth_con.h" +#include "int-proto.h" + +krb5_error_code KRB5_CALLCONV +krb5_authdata_export_authdata(krb5_context kcontext, + krb5_authdata_context context, + krb5_flags flags, + krb5_authdata ***pauthdata) +{ + int i; + krb5_error_code code = 0; + krb5_authdata **authdata = NULL; + unsigned int len = 0; + + *pauthdata = NULL; + + for (i = 0; i < context->n_modules; i++) { + struct _krb5_authdata_context_module *module = &context->modules[i]; + krb5_authdata **authdata2 = NULL; + int j; + + if ((module->flags & flags) == 0) + continue; + + if (module->ftable->export_authdata == NULL) + continue; + + code = (*module->ftable->export_authdata)(kcontext, + context, + module->plugin_context, + *(module->request_context_pp), + flags, + &authdata2); + if (code == ENOENT) + code = 0; + else if (code != 0) + break; + + if (authdata2 == NULL) + continue; + + for (j = 0; authdata2[j] != NULL; j++) + ; + + authdata = realloc(authdata, (len + j + 1) * sizeof(krb5_authdata *)); + if (authdata == NULL) + return ENOMEM; + + memcpy(&authdata[len], authdata2, j * sizeof(krb5_authdata *)); + free(authdata2); + + len += j; + } + + if (authdata != NULL) + authdata[len] = NULL; + + if (code != 0) { + krb5_free_authdata(kcontext, authdata); + return code; + } + + *pauthdata = authdata; + + return 0; +} -- 2.26.2