1 /* $NetBSD: store-test.c,v 1.1.1.1 2011/04/13 18:15:38 elric Exp $ */ 2 3 /* 4 * Copyright (c) 2001 Kungliga Tekniska Högskolan 5 * (Royal Institute of Technology, Stockholm, Sweden). 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * 3. Neither the name of KTH nor the names of its contributors may be 20 * used to endorse or promote products derived from this software without 21 * specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY 24 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 26 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE 27 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 30 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 31 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 32 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ 34 35 #include "krb5_locl.h" 36 37 static void 38 print_data(unsigned char *data, size_t len) 39 { 40 int i; 41 for(i = 0; i < len; i++) { 42 if(i > 0 && (i % 16) == 0) 43 printf("\n "); 44 printf("%02x ", data[i]); 45 } 46 printf("\n"); 47 } 48 49 static int 50 compare(const char *name, krb5_storage *sp, void *expected, size_t len) 51 { 52 int ret = 0; 53 krb5_data data; 54 if (krb5_storage_to_data(sp, &data)) 55 errx(1, "krb5_storage_to_data failed"); 56 krb5_storage_free(sp); 57 if(data.length != len || memcmp(data.data, expected, len) != 0) { 58 printf("%s mismatch\n", name); 59 printf(" Expected: "); 60 print_data(expected, len); 61 printf(" Actual: "); 62 print_data(data.data, data.length); 63 ret++; 64 } 65 krb5_data_free(&data); 66 return ret; 67 } 68 69 int 70 main(int argc, char **argv) 71 { 72 int nerr = 0; 73 krb5_storage *sp; 74 krb5_context context; 75 krb5_principal principal; 76 77 78 krb5_init_context(&context); 79 80 sp = krb5_storage_emem(); 81 krb5_store_int32(sp, 0x01020304); 82 nerr += compare("Integer", sp, "\x1\x2\x3\x4", 4); 83 84 sp = krb5_storage_emem(); 85 krb5_storage_set_byteorder(sp, KRB5_STORAGE_BYTEORDER_LE); 86 krb5_store_int32(sp, 0x01020304); 87 nerr += compare("Integer (LE)", sp, "\x4\x3\x2\x1", 4); 88 89 sp = krb5_storage_emem(); 90 krb5_storage_set_byteorder(sp, KRB5_STORAGE_BYTEORDER_BE); 91 krb5_store_int32(sp, 0x01020304); 92 nerr += compare("Integer (BE)", sp, "\x1\x2\x3\x4", 4); 93 94 sp = krb5_storage_emem(); 95 krb5_storage_set_byteorder(sp, KRB5_STORAGE_BYTEORDER_HOST); 96 krb5_store_int32(sp, 0x01020304); 97 { 98 int test = 1; 99 void *data; 100 if(*(char*)&test) 101 data = "\x4\x3\x2\x1"; 102 else 103 data = "\x1\x2\x3\x4"; 104 nerr += compare("Integer (host)", sp, data, 4); 105 } 106 107 sp = krb5_storage_emem(); 108 krb5_make_principal(context, &principal, "TEST", "foobar", NULL); 109 krb5_store_principal(sp, principal); 110 krb5_free_principal(context, principal); 111 nerr += compare("Principal", sp, "\x0\x0\x0\x1" 112 "\x0\x0\x0\x1" 113 "\x0\x0\x0\x4TEST" 114 "\x0\x0\x0\x6""foobar", 26); 115 116 krb5_free_context(context); 117 118 return nerr ? 1 : 0; 119 } 120