Home | History | Annotate | Line # | Download | only in krb5
      1 /*	$NetBSD: test_hostname.c,v 1.2 2017/01/28 21:31:49 christos Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 2005 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 <err.h>
     37 #include <krb5/getarg.h>
     38 
     39 static int debug_flag	= 0;
     40 static int version_flag = 0;
     41 static int help_flag	= 0;
     42 
     43 static int
     44 expand_hostname(krb5_context context, const char *host)
     45 {
     46     krb5_error_code ret;
     47     char *h, **r;
     48 
     49     ret = krb5_expand_hostname(context, host, &h);
     50     if (ret)
     51 	krb5_err(context, 1, ret, "krb5_expand_hostname(%s)", host);
     52 
     53     free(h);
     54 
     55     if (debug_flag)
     56 	printf("hostname: %s -> %s\n", host, h);
     57 
     58     ret = krb5_expand_hostname_realms(context, host, &h, &r);
     59     if (ret)
     60 	krb5_err(context, 1, ret, "krb5_expand_hostname_realms(%s)", host);
     61 
     62     if (debug_flag) {
     63 	int j;
     64 
     65 	printf("hostname: %s -> %s\n", host, h);
     66 	for (j = 0; r[j]; j++) {
     67 	    printf("\trealm: %s\n", r[j]);
     68 	}
     69     }
     70     free(h);
     71     krb5_free_host_realm(context, r);
     72 
     73     return 0;
     74 }
     75 
     76 static int
     77 test_expand_hostname(krb5_context context)
     78 {
     79     int i, errors = 0;
     80 
     81     struct t {
     82 	krb5_error_code ret;
     83 	const char *orig_hostname;
     84 	const char *new_hostname;
     85     } tests[] = {
     86 	{ 0, "pstn1.su.se", "pstn1.su.se" },
     87 	{ 0, "pstnproxy.su.se", "pstnproxy.su.se" },
     88     };
     89 
     90     for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) {
     91 	errors += expand_hostname(context, tests[i].orig_hostname);
     92     }
     93 
     94     return errors;
     95 }
     96 
     97 static struct getargs args[] = {
     98     {"debug",	'd',	arg_flag,	&debug_flag,
     99      "turn on debuggin", NULL },
    100     {"version",	0,	arg_flag,	&version_flag,
    101      "print version", NULL },
    102     {"help",	0,	arg_flag,	&help_flag,
    103      NULL, NULL }
    104 };
    105 
    106 static void
    107 usage (int ret)
    108 {
    109     arg_printusage (args, sizeof(args)/sizeof(*args), NULL, "hostname ...");
    110     exit (ret);
    111 }
    112 
    113 
    114 int
    115 main(int argc, char **argv)
    116 {
    117     krb5_context context;
    118     krb5_error_code ret;
    119     int optidx = 0, errors = 0;
    120 
    121     setprogname(argv[0]);
    122 
    123     if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx))
    124 	usage(1);
    125 
    126     if (help_flag)
    127 	usage (0);
    128 
    129     if(version_flag){
    130 	print_version(NULL);
    131 	exit(0);
    132     }
    133 
    134     argc -= optidx;
    135     argv += optidx;
    136 
    137     ret = krb5_init_context(&context);
    138     if (ret)
    139 	errx (1, "krb5_init_context failed: %d", ret);
    140 
    141     if (argc > 0) {
    142 	while (argc-- > 0)
    143 	    errors += expand_hostname(context, *argv++);
    144 	return errors;
    145     }
    146 
    147     errors += test_expand_hostname(context);
    148 
    149     krb5_free_context(context);
    150 
    151     return errors;
    152 }
    153