/ lib / krb5 / test_renew.c
test_renew.c
  1  /*
  2   * Copyright (c) 2007 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 KTH nor the names of its contributors may be
 18   *    used to endorse or promote products derived from this software without
 19   *    specific prior written permission.
 20   *
 21   * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
 22   * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 23   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 24   * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
 25   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 26   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 27   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
 28   * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 29   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 30   * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 31   * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 32   */
 33  
 34  #include "krb5_locl.h"
 35  #include <err.h>
 36  #include <getarg.h>
 37  
 38  static int version_flag = 0;
 39  static int help_flag	= 0;
 40  
 41  static struct getargs args[] = {
 42      {"version",	0,	arg_flag,	&version_flag,
 43       "print version", NULL },
 44      {"help",	0,	arg_flag,	&help_flag,
 45       NULL, NULL }
 46  };
 47  
 48  static void
 49  usage (int ret)
 50  {
 51      arg_printusage (args,
 52  		    sizeof(args)/sizeof(*args),
 53  		    NULL,
 54  		    "[principal]");
 55      exit (ret);
 56  }
 57  
 58  int
 59  main(int argc, char **argv)
 60  {
 61      krb5_principal client;
 62      krb5_context context;
 63      const char *in_tkt_service = NULL;
 64      krb5_ccache id;
 65      krb5_error_code ret;
 66      krb5_creds out;
 67      int optidx = 0;
 68  
 69      setprogname(argv[0]);
 70  
 71      if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx))
 72  	usage(1);
 73  
 74      if (help_flag)
 75  	usage (0);
 76  
 77      if(version_flag){
 78  	print_version(NULL);
 79  	exit(0);
 80      }
 81  
 82      argc -= optidx;
 83      argv += optidx;
 84  
 85      if (argc > 0)
 86  	in_tkt_service = argv[0];
 87  
 88      memset(&out, 0, sizeof(out));
 89  
 90      ret = krb5_init_context(&context);
 91      if (ret)
 92  	krb5_err(context, 1, ret, "krb5_init_context");
 93  
 94      ret = krb5_cc_default(context, &id);
 95      if (ret)
 96  	krb5_err(context, 1, ret, "krb5_cc_default");
 97  
 98      ret = krb5_cc_get_principal(context, id, &client);
 99      if (ret)
100  	krb5_err(context, 1, ret, "krb5_cc_default");
101  
102      ret = krb5_get_renewed_creds(context,
103  				 &out,
104  				 client,
105  				 id,
106  				 in_tkt_service);
107  
108      if(ret)
109  	krb5_err(context, 1, ret, "krb5_get_renewed_creds");
110  
111      if (krb5_principal_compare(context, out.client, client) != TRUE)
112  	krb5_errx(context, 1, "return principal is not as expected");
113  
114      krb5_free_cred_contents(context, &out);
115  
116      krb5_free_context(context);
117  
118      return 0;
119  }