summaryrefslogtreecommitdiffstats
path: root/src/lib/krb5
diff options
context:
space:
mode:
authorW. Trevor King <wking@tremily.us>2012-05-17 21:12:49 -0400
committerTom Yu <tlyu@mit.edu>2012-05-23 15:56:21 -0400
commit9fa7456b57eb59a4302f50a0254e9981d23dc590 (patch)
treec07c3605e4361990b32a04a007d37d838cd69388 /src/lib/krb5
parent27417b7d27bd61acf567da2ddccc591b7f499e47 (diff)
downloadkrb5-9fa7456b57eb59a4302f50a0254e9981d23dc590.tar.gz
krb5-9fa7456b57eb59a4302f50a0254e9981d23dc590.tar.xz
krb5-9fa7456b57eb59a4302f50a0254e9981d23dc590.zip
Add tests for trace.c formatting
This improves the previously minimal test coverage of "trace.c". ticket: 7151
Diffstat (limited to 'src/lib/krb5')
-rw-r--r--src/lib/krb5/os/Makefile.in14
-rw-r--r--src/lib/krb5/os/t_trace.c247
2 files changed, 259 insertions, 2 deletions
diff --git a/src/lib/krb5/os/Makefile.in b/src/lib/krb5/os/Makefile.in
index 19f5c33b4..9faab25ee 100644
--- a/src/lib/krb5/os/Makefile.in
+++ b/src/lib/krb5/os/Makefile.in
@@ -155,7 +155,7 @@ clean-unix:: clean-libobjs
shared:
mkdir shared
-TEST_PROGS= t_std_conf t_an_to_ln t_kuserok t_locate_kdc
+TEST_PROGS= t_std_conf t_an_to_ln t_kuserok t_locate_kdc t_trace
T_STD_CONF_OBJS= t_std_conf.o
@@ -163,6 +163,8 @@ T_AN_TO_LN_OBJS = t_an_to_ln.o an_to_ln.o
T_KUSEROK_OBJS = t_kuserok.o
+T_TRACE_OBJS = t_trace.o
+
t_std_conf: $(T_STD_CONF_OBJS) $(KRB5_BASE_DEPLIBS)
$(CC_LINK) -o t_std_conf $(T_STD_CONF_OBJS) $(KRB5_BASE_LIBS)
@@ -183,6 +185,9 @@ $(OUTPRE)t_locate_kdc.exe: $(OUTPRE)t_locate_kdc.obj \
$(KLIB) $(PLIB) $(CLIB) $(SLIB)
link $(EXE_LINKOPTS) -out:$@ $** ws2_32.lib $(DNSLIBS)
+t_trace: $(T_TRACE_OBJS) $(KRB5_BASE_DEPLIBS)
+ $(CC_LINK) -o t_trace $(T_TRACE_OBJS) $(KRB5_BASE_LIBS)
+
LCLINT=lclint
LCLINTOPTS= -warnposix \
-usedef +charintliteral +ignoresigns -predboolint +boolint \
@@ -192,7 +197,8 @@ lclint-localaddr: localaddr.c
$(LCLINT) $(LCLINTOPTS) $(CPPFLAGS) $(LOCALINCLUDES) $(DEFS) \
-DTEST $(srcdir)/localaddr.c
-check-unix:: check-unix-stdconf check-unix-locate check-unix-antoln t_kuserok
+check-unix:: check-unix-stdconf check-unix-locate check-unix-antoln \
+ check-unix-trace t_kuserok
check-unix-stdconf:: t_std_conf
KRB5_CONFIG=$(srcdir)/td_krb5.conf ; export KRB5_CONFIG ;\
@@ -254,6 +260,10 @@ check-unix-antoln:: t_an_to_ln
$(KRB5_RUN_ENV) $(VALGRIND) ./t_an_to_ln fred/r@r barney/r@r x/r/r/r@r
$(RM) ./t_an.*
+check-unix-trace:: t_trace
+ export KRB5_TRACE=/dev/stdout ; \
+ $(KRB5_RUN_ENV) $(VALGRIND) ./t_trace
+
clean::
$(RM) $(TEST_PROGS) test.out t_std_conf.o t_an_to_ln.o t_locate_kdc.o
$(RM) t_kuserok.o
diff --git a/src/lib/krb5/os/t_trace.c b/src/lib/krb5/os/t_trace.c
new file mode 100644
index 000000000..c90c202c4
--- /dev/null
+++ b/src/lib/krb5/os/t_trace.c
@@ -0,0 +1,247 @@
+/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* lib/krb5/os/t_trace.c - Test harness for trace.c */
+/*
+ * Copyright (C) 2012 by the Massachusetts Institute of Technology.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * 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.
+ *
+ * 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 <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include "port-sockets.h"
+#include <com_err.h>
+
+#define TEST
+#include "k5-int.h"
+#include "cm.h"
+
+const char *prog;
+
+static void
+kfatal (krb5_error_code err)
+{
+ com_err (prog, err, "- exiting");
+ exit (1);
+}
+
+int
+main (int argc, char *argv[])
+{
+ char *p;
+ krb5_context ctx;
+ krb5_error_code err;
+ int i = -1;
+ long ln = -2;
+ size_t s = 0;
+ char *str = "example.data";
+ krb5_octet *oct = (krb5_octet *) str;
+ unsigned int oct_length = strlen(str);
+ struct conn_state conn;
+ struct sockaddr_in *addr_in;
+ krb5_data data;
+ struct krb5_key_st key;
+ krb5_checksum checksum;
+ krb5_principal_data principal_data, principal_data2;
+ krb5_principal princ = &principal_data;
+ krb5_pa_data padata, padata2, **padatap;
+ krb5_enctype enctypes[4] = {
+ ENCTYPE_DES3_CBC_SHA, ENCTYPE_ARCFOUR_HMAC_EXP, ENCTYPE_UNKNOWN,
+ ENCTYPE_NULL};
+ krb5_ccache ccache;
+ krb5_keytab keytab;
+ krb5_creds creds;
+
+ p = strrchr (argv[0], '/');
+ if (p)
+ prog = p+1;
+ else
+ prog = argv[0];
+
+ if (argc != 1) {
+ fprintf (stderr, "%s: usage: %s\n", prog, prog);
+ return 1;
+ }
+
+ err = krb5_init_context (&ctx);
+ if (err)
+ kfatal (err);
+
+ krb5int_trace(NULL, NULL);
+ TRACE(ctx, "simple format");
+
+ TRACE(ctx, "int, in decimal: {int}", i);
+ TRACE(ctx, "long, in decimal: {long}", ln);
+
+ TRACE(ctx, "const char *, display as C string: {str}", str);
+ s = strlen(str);
+ TRACE(ctx, "size_t and const char *, as a counted string: {lenstr}",
+ s, str);
+ TRACE(ctx, "size_t and const char *, as a counted string: {lenstr}",
+ 1, NULL);
+ TRACE(ctx, "size_t and const char *, as hex bytes: {hexlenstr}",
+ s, str);
+ TRACE(ctx, "size_t and const char *, as hex bytes: {hexlenstr}",
+ 1, NULL);
+ TRACE(ctx, "size_t and const char *, as four-character hex hash: "
+ "{hashlenstr}", s, str);
+ TRACE(ctx, "size_t and const char *, as four-character hex hash: "
+ "{hashlenstr}", 1, NULL);
+
+ conn.socktype = SOCK_STREAM;
+ addr_in = (struct sockaddr_in *) &conn.addr;
+ addr_in->sin_family = AF_INET;
+ addr_in->sin_addr.s_addr = INADDR_ANY;
+ addr_in->sin_port = htons(88);
+ TRACE(ctx, "struct conn_state *, show socket type, address, port: "
+ "{connstate}", &conn);
+ conn.socktype = SOCK_DGRAM;
+ TRACE(ctx, "struct conn_state *, show socket type, address, port: "
+ "{connstate}", &conn);
+ conn.socktype = SOCK_RDM;
+ addr_in->sin_family = AF_UNSPEC;
+ TRACE(ctx, "struct conn_state *, show socket type, address, port: "
+ "{connstate}", &conn);
+ conn.family = AF_UNSPEC;
+ TRACE(ctx, "struct conn_state *, show socket type, address, port: "
+ "{connstate}", &conn);
+
+ data.magic = 0;
+ data.length = strlen(str);
+ data.data = str;
+ TRACE(ctx, "krb5_data *, display as counted string: {data}", &data);
+ TRACE(ctx, "krb5_data *, display as counted string: {data}", NULL);
+ TRACE(ctx, "krb5_data *, display as hex bytes: {hexdata}", &data);
+ TRACE(ctx, "krb5_data *, display as hex bytes: {hexdata}", NULL);
+
+ TRACE(ctx, "int, display as number/errorstring: {errno}", 0);
+ TRACE(ctx, "int, display as number/errorstring: {errno}", 1);
+ TRACE(ctx, "krb5_error_code, display as number/errorstring: {kerr}", 0);
+
+ key.keyblock.magic = 0;
+ key.keyblock.enctype = ENCTYPE_UNKNOWN;
+ key.keyblock.length = strlen(str);
+ key.keyblock.contents = (krb5_octet *)str;
+ key.refcount = 0;
+ key.derived = NULL;
+ key.cache = NULL;
+ TRACE(ctx, "const krb5_keyblock *, display enctype and hash of key: "
+ "{keyblock}", &key.keyblock);
+ TRACE(ctx, "const krb5_keyblock *, display enctype and hash of key: "
+ "{keyblock}", NULL);
+ TRACE(ctx, "krb5_key, display enctype and hash of key: {key}", &key);
+ TRACE(ctx, "krb5_key, display enctype and hash of key: {key}", NULL);
+
+ checksum.magic = 0;
+ checksum.checksum_type = -1;
+ checksum.length = oct_length;
+ checksum.contents = oct;
+ TRACE(ctx, "const krb5_checksum *, display cksumtype and hex checksum: "
+ "{cksum}", &checksum);
+
+ principal_data.magic = 0;
+ principal_data.realm.magic = 0;
+ principal_data.realm.data = "ATHENA.MIT.EDU";
+ principal_data.realm.length = strlen(principal_data.realm.data);
+ principal_data.data = &data;
+ principal_data.length = 0;
+ principal_data.type = KRB5_NT_UNKNOWN;
+ TRACE(ctx, "krb5_principal, unparse and display: {princ}", princ);
+ TRACE(ctx, "int, krb5_principal type: {ptype}", KRB5_NT_UNKNOWN);
+ TRACE(ctx, "int, krb5_principal type: {ptype}", KRB5_NT_PRINCIPAL);
+ TRACE(ctx, "int, krb5_principal type: {ptype}", KRB5_NT_SRV_INST);
+ TRACE(ctx, "int, krb5_principal type: {ptype}", KRB5_NT_SRV_HST);
+ TRACE(ctx, "int, krb5_principal type: {ptype}", KRB5_NT_SRV_XHST);
+ TRACE(ctx, "int, krb5_principal type: {ptype}", KRB5_NT_UID);
+ TRACE(ctx, "int, krb5_principal type: {ptype}", KRB5_NT_X500_PRINCIPAL);
+ TRACE(ctx, "int, krb5_principal type: {ptype}", KRB5_NT_SMTP_NAME);
+ TRACE(ctx, "int, krb5_principal type: {ptype}",
+ KRB5_NT_ENTERPRISE_PRINCIPAL);
+ TRACE(ctx, "int, krb5_principal type: {ptype}", KRB5_NT_WELLKNOWN);
+ TRACE(ctx, "int, krb5_principal type: {ptype}", KRB5_NT_MS_PRINCIPAL);
+ TRACE(ctx, "int, krb5_principal type: {ptype}",
+ KRB5_NT_MS_PRINCIPAL_AND_ID);
+ TRACE(ctx, "int, krb5_principal type: {ptype}",
+ KRB5_NT_ENT_PRINCIPAL_AND_ID);
+ TRACE(ctx, "int, krb5_principal type: {ptype}", -1);
+
+ padatap = (krb5_pa_data **) malloc(sizeof(krb5_pa_data *)*2);
+ padatap[0] = &padata;
+ memcpy(&padata2, &padata, sizeof(padata));
+ padatap[1] = &padata2;
+ padatap[2] = NULL;
+ padata.magic = 0;
+ padata.pa_type = KRB5_PADATA_NONE;
+ padata.length = oct_length;
+ padata.contents = oct;
+ TRACE(ctx, "krb5_pa_data **, display list of padata type numbers: "
+ "{patypes}", padatap);
+ TRACE(ctx, "krb5_pa_data **, display list of padata type numbers: "
+ "{patypes}", NULL);
+ free(padatap);
+ padatap = NULL;
+
+ TRACE(ctx, "krb5_enctype, display shortest name of enctype: {etype}",
+ ENCTYPE_DES_CBC_CRC);
+ TRACE(ctx, "krb5_enctype *, display list of enctypes: {etypes}", enctypes);
+ TRACE(ctx, "krb5_enctype *, display list of enctypes: {etypes}", NULL);
+
+ err = krb5_cc_default(ctx, &ccache);
+ TRACE(ctx, "krb5_ccache, display type:name: {ccache}", ccache);
+ krb5_cc_close(ctx, ccache);
+
+ err = krb5_kt_default(ctx, &keytab);
+ TRACE(ctx, "krb5_keytab, display name: {keytab}", keytab);
+ krb5_kt_close(ctx, keytab);
+
+ creds.magic = 0;
+ creds.client = &principal_data;
+ memcpy(&principal_data2, &principal_data, sizeof(principal_data));
+ principal_data2.realm.data = "ZEUS.MIT.EDU";
+ principal_data2.realm.length = strlen(principal_data2.realm.data);
+ creds.server = &principal_data2;
+ memcpy(&creds.keyblock, &key.keyblock, sizeof(creds.keyblock));
+ creds.times.authtime = 0;
+ creds.times.starttime = 1;
+ creds.times.endtime = 2;
+ creds.times.renew_till = 3;
+ creds.is_skey = FALSE;
+ creds.ticket_flags = 0;
+ creds.addresses = NULL;
+ creds.ticket.magic = 0;
+ creds.ticket.length = strlen(str);
+ creds.ticket.data = str;
+ creds.second_ticket.magic = 0;
+ creds.second_ticket.length = strlen(str);
+ creds.second_ticket.data = str;
+ creds.authdata = NULL;
+ TRACE(ctx, "krb5_creds *, display clientprinc -> serverprinc: {creds}",
+ &creds);
+
+ krb5_free_context(ctx);
+ return 0;
+}