/ lib / kadm5 / default_keys.c
default_keys.c
  1  /*
  2   * Copyright (c) 2003 Kungliga Tekniska Högskolan
  3   * (Royal Institute of Technology, Stockholm, Sweden).
  4   * All rights reserved.
  5   *
  6   * Redistribution and use in source and binary forms, with or without
  7   * modification, are permitted provided that the following conditions
  8   * are met:
  9   *
 10   * 1. Redistributions of source code must retain the above copyright
 11   *    notice, this list of conditions and the following disclaimer.
 12   *
 13   * 2. Redistributions in binary form must reproduce the above copyright
 14   *    notice, this list of conditions and the following disclaimer in the
 15   *    documentation and/or other materials provided with the distribution.
 16   *
 17   * 3. Neither the name of the Institute nor the names of its contributors
 18   *    may be used to endorse or promote products derived from this software
 19   *    without specific prior written permission.
 20   *
 21   * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
 22   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 23   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 24   * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
 25   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 26   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 27   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 28   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 29   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 30   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 31   * SUCH DAMAGE.
 32   */
 33  
 34  #include "kadm5_locl.h"
 35  #include <err.h>
 36  
 37  RCSID("$Id$");
 38  
 39  static void
 40  print_keys(krb5_context context, Key *keys, size_t nkeys)
 41  {
 42      krb5_error_code ret;
 43      char *str;
 44      int i;
 45  
 46      printf("keys:\n");
 47  
 48      for (i = 0; i < nkeys; i++) {
 49  
 50  	ret = krb5_enctype_to_string(context, keys[i].key.keytype, &str);
 51  	if (ret)
 52  	    krb5_err(context, ret, 1, "krb5_enctype_to_string: %d\n",
 53  		     (int)keys[i].key.keytype);
 54  
 55  	printf("\tenctype %s", str);
 56  	free(str);
 57  
 58  	if (keys[i].salt) {
 59  	    printf(" salt: ");
 60  
 61  	    switch (keys[i].salt->type) {
 62  	    case KRB5_PW_SALT:
 63  		printf("pw-salt:");
 64  		break;
 65  	    case KRB5_AFS3_SALT:
 66  		printf("afs3-salt:");
 67  		break;
 68  	    default:
 69  		printf("unknown salt: %d", keys[i].salt->type);
 70  		break;
 71  	    }
 72  	    if (keys[i].salt->salt.length)
 73  		printf("%.*s", (int)keys[i].salt->salt.length,
 74  		       (char *)keys[i].salt->salt.data);
 75  	}
 76  	printf("\n");
 77      }
 78      printf("end keys:\n");
 79  }
 80  
 81  static void
 82  parse_file(krb5_context context, krb5_principal principal, int no_salt)
 83  {
 84      krb5_error_code ret;
 85      size_t nkeys;
 86      Key *keys;
 87  
 88      ret = hdb_generate_key_set(context, principal, 0, NULL, &keys, &nkeys,
 89  			       no_salt);
 90      if (ret)
 91  	krb5_err(context, 1, ret, "hdb_generate_key_set");
 92  
 93      print_keys(context, keys, nkeys);
 94  
 95      hdb_free_keys(context, nkeys, keys);
 96  }
 97  
 98  int
 99  main(int argc, char **argv)
100  {
101      krb5_error_code ret;
102      krb5_context context;
103      krb5_principal principal;
104  
105      ret = krb5_init_context(&context);
106      if (ret)
107  	errx(1, "krb5_init_context");
108  
109      ret = krb5_parse_name(context, "lha@SU.SE", &principal);
110      if (ret)
111  	krb5_err(context, ret, 1, "krb5_parse_name");
112  
113      parse_file(context, principal, 0);
114      parse_file(context, principal, 1);
115  
116      krb5_free_principal(context, principal);
117  
118      krb5_free_context(context);
119  
120      return 0;
121  }