1120945Snectar/* 2120945Snectar * Copyright (c) 2003 Kungliga Tekniska H�gskolan 3120945Snectar * (Royal Institute of Technology, Stockholm, Sweden). 4120945Snectar * All rights reserved. 5120945Snectar * 6120945Snectar * Redistribution and use in source and binary forms, with or without 7120945Snectar * modification, are permitted provided that the following conditions 8120945Snectar * are met: 9120945Snectar * 10120945Snectar * 1. Redistributions of source code must retain the above copyright 11120945Snectar * notice, this list of conditions and the following disclaimer. 12120945Snectar * 13120945Snectar * 2. Redistributions in binary form must reproduce the above copyright 14120945Snectar * notice, this list of conditions and the following disclaimer in the 15120945Snectar * documentation and/or other materials provided with the distribution. 16120945Snectar * 17120945Snectar * 3. Neither the name of KTH nor the names of its contributors may be 18120945Snectar * used to endorse or promote products derived from this software without 19120945Snectar * specific prior written permission. 20120945Snectar * 21120945Snectar * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY 22120945Snectar * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23120945Snectar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 24120945Snectar * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE 25120945Snectar * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26120945Snectar * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27120945Snectar * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 28120945Snectar * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 29120945Snectar * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 30120945Snectar * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 31120945Snectar * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ 32120945Snectar 33120945Snectar#include "krb5_locl.h" 34120945Snectar#include <getarg.h> 35120945Snectar#include <err.h> 36120945Snectar 37178825SdfrRCSID("$Id: test_alname.c 15474 2005-06-17 04:48:02Z lha $"); 38120945Snectar 39120945Snectarstatic void 40178825Sdfrtest_alname(krb5_context context, krb5_const_realm realm, 41120945Snectar const char *user, const char *inst, 42120945Snectar const char *localuser, int ok) 43120945Snectar{ 44120945Snectar krb5_principal p; 45120945Snectar char localname[1024]; 46120945Snectar krb5_error_code ret; 47120945Snectar char *princ; 48120945Snectar 49120945Snectar ret = krb5_make_principal(context, &p, realm, user, inst, NULL); 50120945Snectar if (ret) 51120945Snectar krb5_err(context, 1, ret, "krb5_build_principal"); 52120945Snectar 53120945Snectar ret = krb5_unparse_name(context, p, &princ); 54120945Snectar if (ret) 55120945Snectar krb5_err(context, 1, ret, "krb5_unparse_name"); 56120945Snectar 57120945Snectar ret = krb5_aname_to_localname(context, p, sizeof(localname), localname); 58120945Snectar krb5_free_principal(context, p); 59120945Snectar free(princ); 60120945Snectar if (ret) { 61120945Snectar if (!ok) 62120945Snectar return; 63120945Snectar krb5_err(context, 1, ret, "krb5_aname_to_localname: %s -> %s", 64120945Snectar princ, localuser); 65120945Snectar } 66120945Snectar 67120945Snectar if (strcmp(localname, localuser) != 0) { 68120945Snectar if (ok) 69120945Snectar errx(1, "compared failed %s != %s (should have succeded)", 70120945Snectar localname, localuser); 71120945Snectar } else { 72120945Snectar if (!ok) 73120945Snectar errx(1, "compared failed %s == %s (should have failed)", 74120945Snectar localname, localuser); 75120945Snectar } 76120945Snectar 77120945Snectar} 78120945Snectar 79120945Snectarstatic int version_flag = 0; 80120945Snectarstatic int help_flag = 0; 81120945Snectar 82120945Snectarstatic struct getargs args[] = { 83120945Snectar {"version", 0, arg_flag, &version_flag, 84120945Snectar "print version", NULL }, 85120945Snectar {"help", 0, arg_flag, &help_flag, 86120945Snectar NULL, NULL } 87120945Snectar}; 88120945Snectar 89120945Snectarstatic void 90120945Snectarusage (int ret) 91120945Snectar{ 92120945Snectar arg_printusage (args, 93120945Snectar sizeof(args)/sizeof(*args), 94120945Snectar NULL, 95120945Snectar ""); 96120945Snectar exit (ret); 97120945Snectar} 98120945Snectar 99120945Snectarint 100120945Snectarmain(int argc, char **argv) 101120945Snectar{ 102120945Snectar krb5_context context; 103120945Snectar krb5_error_code ret; 104120945Snectar krb5_realm realm; 105178825Sdfr int optidx = 0; 106120945Snectar char *user; 107120945Snectar 108120945Snectar setprogname(argv[0]); 109120945Snectar 110178825Sdfr if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx)) 111120945Snectar usage(1); 112120945Snectar 113120945Snectar if (help_flag) 114120945Snectar usage (0); 115120945Snectar 116120945Snectar if(version_flag){ 117120945Snectar print_version(NULL); 118120945Snectar exit(0); 119120945Snectar } 120120945Snectar 121178825Sdfr argc -= optidx; 122178825Sdfr argv += optidx; 123120945Snectar 124120945Snectar if (argc != 1) 125120945Snectar errx(1, "first argument should be a local user that in root .k5login"); 126120945Snectar 127120945Snectar user = argv[0]; 128120945Snectar 129120945Snectar ret = krb5_init_context(&context); 130120945Snectar if (ret) 131120945Snectar errx (1, "krb5_init_context failed: %d", ret); 132120945Snectar 133120945Snectar ret = krb5_get_default_realm(context, &realm); 134120945Snectar if (ret) 135120945Snectar krb5_err(context, 1, ret, "krb5_get_default_realm"); 136120945Snectar 137120945Snectar test_alname(context, realm, user, NULL, user, 1); 138120945Snectar test_alname(context, realm, user, "root", "root", 1); 139120945Snectar 140120945Snectar test_alname(context, "FOO.BAR.BAZ.KAKA", user, NULL, user, 0); 141120945Snectar test_alname(context, "FOO.BAR.BAZ.KAKA", user, "root", "root", 0); 142120945Snectar 143120945Snectar test_alname(context, realm, user, NULL, 144120945Snectar "not-same-as-user", 0); 145120945Snectar test_alname(context, realm, user, "root", 146120945Snectar "not-same-as-user", 0); 147120945Snectar 148120945Snectar test_alname(context, "FOO.BAR.BAZ.KAKA", user, NULL, 149120945Snectar "not-same-as-user", 0); 150120945Snectar test_alname(context, "FOO.BAR.BAZ.KAKA", user, "root", 151120945Snectar "not-same-as-user", 0); 152120945Snectar 153120945Snectar krb5_free_context(context); 154120945Snectar 155120945Snectar return 0; 156120945Snectar} 157