diff options
Diffstat (limited to 'src/tests/test1.c')
-rw-r--r-- | src/tests/test1.c | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/src/tests/test1.c b/src/tests/test1.c new file mode 100644 index 0000000000..1149243b4d --- /dev/null +++ b/src/tests/test1.c @@ -0,0 +1,187 @@ +/* + * $Source$ + * $Author$ + * + * Copyright 1990 by the Massachusetts Institute of Technology. + * + * For copying and distribution information, please see the file + * <krb5/mit-copyright.h>. + * + * Regression tests for the kerberos library. + */ + +#if !defined(lint) && !defined(SABER) +static char rcsid_test1_c [] = +"$Id$"; +#endif /* !lint & !SABER */ + +#include <krb5/copyright.h> + +#include <krb5/krb5.h> + +unsigned char key_one[8] = { 0x10, 0x23, 0x32, 0x45, 0x54, 0x67, 0x76, 0x89 }; +unsigned char key_two[8] = { 0xea, 0x89, 0x57, 0x76, 0x5b, 0xcd, 0x0d, 0x34 }; + +extern void dump_data(); + +tkt_test_1() +{ + krb5_data *data; + krb5_ticket tk_in, *tk_out; + krb5_keyblock sess_k, serv_k, *nsess; + krb5_enc_tkt_part tk_in_enc; + int code; + krb5_address *addr_list[2]; + krb5_address addr_1; + static krb5_octet ip_addr_1[4] = { 18, 72, 0, 122 }; + char *out; + + /* + * fill in some values on the "in" side of the ticket + */ + code = krb5_parse_name ("server/test/1@BOGUS.ORG", &tk_in.server); + if (code != 0) { + com_err("tkt_test_1", code, " parsing server principal"); + return; + } + + serv_k.keytype = 1; /* XXX symbolic constant */ + serv_k.length = 8; /* XXX symbolic constant */ + serv_k.contents = key_one; + + sess_k.keytype = 1; /* XXX symbolic constant */ + sess_k.length = 8; /* XXX symbolic constant */ + sess_k.contents = key_two; + + tk_in.etype = 1; /* XXX symbolic constant here */ + tk_in.skvno = 4; + + tk_in.enc_part2 = &tk_in_enc; + + tk_in_enc.confounder = 52; + tk_in_enc.flags = 0x11; + tk_in_enc.session = &sess_k; + + tk_in_enc.times.authtime = 42; + tk_in_enc.times.starttime = 43; + tk_in_enc.times.endtime = 44; + + code = krb5_parse_name ("client/test/1@BOGUS.ORG", &tk_in_enc.client); + if (code != 0) { + com_err("tkt_test_1", code, " parsing client principal"); + return; + } + tk_in_enc.transited.length = 0; + + addr_1.addrtype = ADDRTYPE_INET; /* XXX should be KRB5_ADDR... */ + addr_1.length = 4; + addr_1.contents = ip_addr_1; + + addr_list[0] = &addr_1; + addr_list[1] = 0; + + + tk_in_enc.caddrs = addr_list; + tk_in_enc.authorization_data = 0; + + code = krb5_encrypt_tkt_part(&serv_k, &tk_in); + if (code != 0) { + com_err ("tkt_test_1", code, " encrypting ticket"); + return; + } + + data = 0; + + code = krb5_encode_ticket (&tk_in, &data); + if (code != 0) { + com_err ("tkt_test_1", code, " encoding ticket"); + return; + } + + dump_data(data); + + tk_out = 0; + code = krb5_decode_ticket (data, &tk_out); + if (code != 0) { + com_err ("tkt_test_1", code, "decoding ticket"); + return; + } + /* check the plaintext values */ + if (tk_out->etype != 1) { + com_err ("tkt_test_1", 0, "wrong etype"); + return; + } + if (tk_out->skvno != 4) { + com_err ("tkt_test_1", 0, "wrong kvno"); + return; + } + + code = krb5_unparse_name(tk_out->server, &out); + if (code != 0) { + com_err ("tkt_test_1", code, "couldn't unparse server principal"); + return; + } + if (strcmp (out, "server/test/1@BOGUS.ORG") != 0) { + com_err("tkt_test_1", 0, "wrong server principal"); + return; + } + free(out); + out = 0; + + /* decode the ciphertext */ + code = krb5_decrypt_tkt_part (&serv_k, tk_out); + if (code != 0) { + com_err ("tkt_test_1", code, "while decrypting ticket"); + return; + } + + /* check the contents */ + if (tk_out->enc_part2->flags != 0x11) { + com_err("tkt_test_1", 0, "wrong flags"); + return; + } + + nsess = tk_out->enc_part2->session; + + if (nsess->keytype != 1) { + com_err("tkt_test_1", 0, "wrong session key type"); + return; + } + if (nsess->length != 8) { + com_err("tkt_test_1", 0, "wrong session key length"); + return; + } + if (bcmp(nsess->contents, key_two, 8) != 0) { + com_err("tkt_test_1", 0, "wrong session key contents"); + return; + } + + code = krb5_unparse_name(tk_out->enc_part2->client, &out); + if (code != 0) { + com_err ("tkt_test_1", code, "couldn't unparse client principal"); + return; + } + if (strcmp (out, "client/test/1@BOGUS.ORG") != 0) { + com_err("tkt_test_1", 0, "wrong client principal"); + return; + } + free(out); + out = 0; + if (tk_out->enc_part2->transited.length != 0) { + com_err("tkt_test_1", 0, "wrong transited length"); + return; + } + /* XXX should check address here, too */ + /* XXX should check times here */ + /* XXX should check auth. data here */ + printf("test 1 passed\n"); +} + + + +main() +{ + initialize_isod_error_table(); + initialize_krb5_error_table(); + tkt_test_1(); +} |