|
Packit |
fd8b60 |
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
Packit |
fd8b60 |
/* tests/test1.c - Regression tests for krb5 library */
|
|
Packit |
fd8b60 |
/*
|
|
Packit |
fd8b60 |
* Copyright 1990 by the Massachusetts Institute of Technology.
|
|
Packit |
fd8b60 |
* All Rights Reserved.
|
|
Packit |
fd8b60 |
*
|
|
Packit |
fd8b60 |
* Export of this software from the United States of America may
|
|
Packit |
fd8b60 |
* require a specific license from the United States Government.
|
|
Packit |
fd8b60 |
* It is the responsibility of any person or organization contemplating
|
|
Packit |
fd8b60 |
* export to obtain such a license before exporting.
|
|
Packit |
fd8b60 |
*
|
|
Packit |
fd8b60 |
* WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
Packit |
fd8b60 |
* distribute this software and its documentation for any purpose and
|
|
Packit |
fd8b60 |
* without fee is hereby granted, provided that the above copyright
|
|
Packit |
fd8b60 |
* notice appear in all copies and that both that copyright notice and
|
|
Packit |
fd8b60 |
* this permission notice appear in supporting documentation, and that
|
|
Packit |
fd8b60 |
* the name of M.I.T. not be used in advertising or publicity pertaining
|
|
Packit |
fd8b60 |
* to distribution of the software without specific, written prior
|
|
Packit |
fd8b60 |
* permission. Furthermore if you modify this software you must label
|
|
Packit |
fd8b60 |
* your software as modified software and not distribute it in such a
|
|
Packit |
fd8b60 |
* fashion that it might be confused with the original M.I.T. software.
|
|
Packit |
fd8b60 |
* M.I.T. makes no representations about the suitability of
|
|
Packit |
fd8b60 |
* this software for any purpose. It is provided "as is" without express
|
|
Packit |
fd8b60 |
* or implied warranty.
|
|
Packit |
fd8b60 |
*/
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#include "krb5.h"
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
unsigned char key_one[8] = { 0x10, 0x23, 0x32, 0x45, 0x54, 0x67, 0x76, 0x89 };
|
|
Packit |
fd8b60 |
unsigned char key_two[8] = { 0xea, 0x89, 0x57, 0x76, 0x5b, 0xcd, 0x0d, 0x34 };
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
extern void dump_data();
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
tkt_test_1()
|
|
Packit |
fd8b60 |
{
|
|
Packit |
fd8b60 |
krb5_data *data;
|
|
Packit |
fd8b60 |
krb5_ticket tk_in, *tk_out;
|
|
Packit |
fd8b60 |
krb5_keyblock sess_k, serv_k, *nsess;
|
|
Packit |
fd8b60 |
krb5_enc_tkt_part tk_in_enc;
|
|
Packit |
fd8b60 |
int code;
|
|
Packit |
fd8b60 |
krb5_address *addr_list[2];
|
|
Packit |
fd8b60 |
krb5_address addr_1;
|
|
Packit |
fd8b60 |
static krb5_octet ip_addr_1[4] = { 18, 72, 0, 122 };
|
|
Packit |
fd8b60 |
char *out;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
/*
|
|
Packit |
fd8b60 |
* fill in some values on the "in" side of the ticket
|
|
Packit |
fd8b60 |
*/
|
|
Packit |
fd8b60 |
code = krb5_parse_name ("server/test/1@BOGUS.ORG", &tk_in.server);
|
|
Packit |
fd8b60 |
if (code != 0) {
|
|
Packit |
fd8b60 |
com_err("tkt_test_1", code, " parsing server principal");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
serv_k.enctype = 1; /* XXX symbolic constant */
|
|
Packit |
fd8b60 |
serv_k.length = 8; /* XXX symbolic constant */
|
|
Packit |
fd8b60 |
serv_k.contents = key_one;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
sess_k.enctype = 1; /* XXX symbolic constant */
|
|
Packit |
fd8b60 |
sess_k.length = 8; /* XXX symbolic constant */
|
|
Packit |
fd8b60 |
sess_k.contents = key_two;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
tk_in.etype = 1; /* XXX symbolic constant here */
|
|
Packit |
fd8b60 |
tk_in.skvno = 4;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
tk_in.enc_part2 = &tk_in_enc;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
tk_in_enc.flags = 0x11;
|
|
Packit |
fd8b60 |
tk_in_enc.session = &sess_k;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
tk_in_enc.times.authtime = 42;
|
|
Packit |
fd8b60 |
tk_in_enc.times.starttime = 43;
|
|
Packit |
fd8b60 |
tk_in_enc.times.endtime = 44;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
code = krb5_parse_name ("client/test/1@BOGUS.ORG", &tk_in_enc.client);
|
|
Packit |
fd8b60 |
if (code != 0) {
|
|
Packit |
fd8b60 |
com_err("tkt_test_1", code, " parsing client principal");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
tk_in_enc.transited.length = 0;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
addr_1.addrtype = ADDRTYPE_INET; /* XXX should be KRB5_ADDR... */
|
|
Packit |
fd8b60 |
addr_1.length = 4;
|
|
Packit |
fd8b60 |
addr_1.contents = ip_addr_1;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
addr_list[0] = &addr_1;
|
|
Packit |
fd8b60 |
addr_list[1] = 0;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
tk_in_enc.caddrs = addr_list;
|
|
Packit |
fd8b60 |
tk_in_enc.authorization_data = 0;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
code = krb5_encrypt_tkt_part(&serv_k, &tk_in);
|
|
Packit |
fd8b60 |
if (code != 0) {
|
|
Packit |
fd8b60 |
com_err ("tkt_test_1", code, " encrypting ticket");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
data = 0;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
code = krb5_encode_ticket (&tk_in, &data);
|
|
Packit |
fd8b60 |
if (code != 0) {
|
|
Packit |
fd8b60 |
com_err ("tkt_test_1", code, " encoding ticket");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
dump_data(data);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
tk_out = 0;
|
|
Packit |
fd8b60 |
code = krb5_decode_ticket (data, &tk_out);
|
|
Packit |
fd8b60 |
if (code != 0) {
|
|
Packit |
fd8b60 |
com_err ("tkt_test_1", code, "decoding ticket");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
/* check the plaintext values */
|
|
Packit |
fd8b60 |
if (tk_out->etype != 1) {
|
|
Packit |
fd8b60 |
com_err ("tkt_test_1", 0, "wrong etype");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
if (tk_out->skvno != 4) {
|
|
Packit |
fd8b60 |
com_err ("tkt_test_1", 0, "wrong kvno");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
code = krb5_unparse_name(tk_out->server, &out;;
|
|
Packit |
fd8b60 |
if (code != 0) {
|
|
Packit |
fd8b60 |
com_err ("tkt_test_1", code, "couldn't unparse server principal");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
if (strcmp (out, "server/test/1@BOGUS.ORG") != 0) {
|
|
Packit |
fd8b60 |
com_err("tkt_test_1", 0, "wrong server principal");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
free(out);
|
|
Packit |
fd8b60 |
out = 0;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
/* decode the ciphertext */
|
|
Packit |
fd8b60 |
code = krb5_decrypt_tkt_part (&serv_k, tk_out);
|
|
Packit |
fd8b60 |
if (code != 0) {
|
|
Packit |
fd8b60 |
com_err ("tkt_test_1", code, "while decrypting ticket");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
/* check the contents */
|
|
Packit |
fd8b60 |
if (tk_out->enc_part2->flags != 0x11) {
|
|
Packit |
fd8b60 |
com_err("tkt_test_1", 0, "wrong flags");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
nsess = tk_out->enc_part2->session;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
if (nsess->enctype != 1) {
|
|
Packit |
fd8b60 |
com_err("tkt_test_1", 0, "wrong session key type");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
if (nsess->length != 8) {
|
|
Packit |
fd8b60 |
com_err("tkt_test_1", 0, "wrong session key length");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
if (memcmp(nsess->contents, key_two, 8) != 0) {
|
|
Packit |
fd8b60 |
com_err("tkt_test_1", 0, "wrong session key contents");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
code = krb5_unparse_name(tk_out->enc_part2->client, &out;;
|
|
Packit |
fd8b60 |
if (code != 0) {
|
|
Packit |
fd8b60 |
com_err ("tkt_test_1", code, "couldn't unparse client principal");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
if (strcmp (out, "client/test/1@BOGUS.ORG") != 0) {
|
|
Packit |
fd8b60 |
com_err("tkt_test_1", 0, "wrong client principal");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
free(out);
|
|
Packit |
fd8b60 |
out = 0;
|
|
Packit |
fd8b60 |
if (tk_out->enc_part2->transited.length != 0) {
|
|
Packit |
fd8b60 |
com_err("tkt_test_1", 0, "wrong transited length");
|
|
Packit |
fd8b60 |
return;
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
/* XXX should check address here, too */
|
|
Packit |
fd8b60 |
/* XXX should check times here */
|
|
Packit |
fd8b60 |
/* XXX should check auth. data here */
|
|
Packit |
fd8b60 |
printf("test 1 passed\n");
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
main()
|
|
Packit |
fd8b60 |
{
|
|
Packit |
fd8b60 |
krb5_init_ets();
|
|
Packit |
fd8b60 |
tkt_test_1();
|
|
Packit |
fd8b60 |
}
|