Home | History | Annotate | Line # | Download | only in krb5
test_alname.c revision 1.1.1.1
      1 /*	$NetBSD: test_alname.c,v 1.1.1.1 2011/04/13 18:15:38 elric Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 2003 Kungliga Tekniska Hgskolan
      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 #include <krb5/getarg.h>
     37 #include <err.h>
     38 
     39 static void
     40 test_alname(krb5_context context, krb5_const_realm realm,
     41 	    const char *user, const char *inst,
     42 	    const char *localuser, int ok)
     43 {
     44     krb5_principal p;
     45     char localname[1024];
     46     krb5_error_code ret;
     47     char *princ;
     48 
     49     ret = krb5_make_principal(context, &p, realm, user, inst, NULL);
     50     if (ret)
     51 	krb5_err(context, 1, ret, "krb5_build_principal");
     52 
     53     ret = krb5_unparse_name(context, p, &princ);
     54     if (ret)
     55 	krb5_err(context, 1, ret, "krb5_unparse_name");
     56 
     57     ret = krb5_aname_to_localname(context, p, sizeof(localname), localname);
     58     krb5_free_principal(context, p);
     59     free(princ);
     60     if (ret) {
     61 	if (!ok)
     62 	    return;
     63 	krb5_err(context, 1, ret, "krb5_aname_to_localname: %s -> %s",
     64 		 princ, localuser);
     65     }
     66 
     67     if (strcmp(localname, localuser) != 0) {
     68 	if (ok)
     69 	    errx(1, "compared failed %s != %s (should have succeded)",
     70 		 localname, localuser);
     71     } else {
     72 	if (!ok)
     73 	    errx(1, "compared failed %s == %s (should have failed)",
     74 		 localname, localuser);
     75     }
     76 
     77 }
     78 
     79 static int version_flag = 0;
     80 static int help_flag	= 0;
     81 
     82 static struct getargs args[] = {
     83     {"version",	0,	arg_flag,	&version_flag,
     84      "print version", NULL },
     85     {"help",	0,	arg_flag,	&help_flag,
     86      NULL, NULL }
     87 };
     88 
     89 static void
     90 usage (int ret)
     91 {
     92     arg_printusage (args,
     93 		    sizeof(args)/sizeof(*args),
     94 		    NULL,
     95 		    "");
     96     exit (ret);
     97 }
     98 
     99 int
    100 main(int argc, char **argv)
    101 {
    102     krb5_context context;
    103     krb5_error_code ret;
    104     krb5_realm realm;
    105     int optidx = 0;
    106     char *user;
    107 
    108     setprogname(argv[0]);
    109 
    110     if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx))
    111 	usage(1);
    112 
    113     if (help_flag)
    114 	usage (0);
    115 
    116     if(version_flag){
    117 	print_version(NULL);
    118 	exit(0);
    119     }
    120 
    121     argc -= optidx;
    122     argv += optidx;
    123 
    124     if (argc != 1)
    125 	errx(1, "first argument should be a local user that in root .k5login");
    126 
    127     user = argv[0];
    128 
    129     ret = krb5_init_context(&context);
    130     if (ret)
    131 	errx (1, "krb5_init_context failed: %d", ret);
    132 
    133     ret = krb5_get_default_realm(context, &realm);
    134     if (ret)
    135 	krb5_err(context, 1, ret, "krb5_get_default_realm");
    136 
    137     test_alname(context, realm, user, NULL, user, 1);
    138     test_alname(context, realm, user, "root", "root", 1);
    139 
    140     test_alname(context, "FOO.BAR.BAZ.KAKA", user, NULL, user, 0);
    141     test_alname(context, "FOO.BAR.BAZ.KAKA", user, "root", "root", 0);
    142 
    143     test_alname(context, realm, user, NULL,
    144 		"not-same-as-user", 0);
    145     test_alname(context, realm, user, "root",
    146 		"not-same-as-user", 0);
    147 
    148     test_alname(context, "FOO.BAR.BAZ.KAKA", user, NULL,
    149 		"not-same-as-user", 0);
    150     test_alname(context, "FOO.BAR.BAZ.KAKA", user, "root",
    151 		"not-same-as-user", 0);
    152 
    153     krb5_free_context(context);
    154 
    155     return 0;
    156 }
    157