Implement --principal.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22848 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		| @@ -1,34 +1,34 @@ | |||||||
| /* | /* | ||||||
|  * Copyright (c) 2008 Kungliga Tekniska H<>gskolan |  * Copyright (c) 2008 Kungliga Tekniska H<>gskolan | ||||||
|  * (Royal Institute of Technology, Stockholm, Sweden).  |  * (Royal Institute of Technology, Stockholm, Sweden). | ||||||
|  * All rights reserved.  |  * All rights reserved. | ||||||
|  * |  * | ||||||
|  * Redistribution and use in source and binary forms, with or without  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  * modification, are permitted provided that the following conditions  |  * modification, are permitted provided that the following conditions | ||||||
|  * are met:  |  * are met: | ||||||
|  * |  * | ||||||
|  * 1. Redistributions of source code must retain the above copyright  |  * 1. Redistributions of source code must retain the above copyright | ||||||
|  *    notice, this list of conditions and the following disclaimer.  |  *    notice, this list of conditions and the following disclaimer. | ||||||
|  * |  * | ||||||
|  * 2. Redistributions in binary form must reproduce the above copyright  |  * 2. Redistributions in binary form must reproduce the above copyright | ||||||
|  *    notice, this list of conditions and the following disclaimer in the  |  *    notice, this list of conditions and the following disclaimer in the | ||||||
|  *    documentation and/or other materials provided with the distribution.  |  *    documentation and/or other materials provided with the distribution. | ||||||
|  * |  * | ||||||
|  * 3. Neither the name of the Institute nor the names of its contributors  |  * 3. Neither the name of the Institute nor the names of its contributors | ||||||
|  *    may be used to endorse or promote products derived from this software  |  *    may be used to endorse or promote products derived from this software | ||||||
|  *    without specific prior written permission.  |  *    without specific prior written permission. | ||||||
|  * |  * | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND  |  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND | ||||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  |  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  |  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE  |  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE | ||||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  |  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS  |  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  |  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  |  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  |  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  |  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||||
|  * SUCH DAMAGE.  |  * SUCH DAMAGE. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include "kuser_locl.h" | #include "kuser_locl.h" | ||||||
| @@ -52,7 +52,7 @@ static struct getargs args[] = { | |||||||
|       "name of credential cache", "cache" }, |       "name of credential cache", "cache" }, | ||||||
|     { "principal",		'p', arg_string, &principal, |     { "principal",		'p', arg_string, &principal, | ||||||
|       "name of principal", "principal" }, |       "name of principal", "principal" }, | ||||||
|     { "version", 		0,   arg_flag, &version_flag,  |     { "version", 		0,   arg_flag, &version_flag, | ||||||
|       "print version", NULL }, |       "print version", NULL }, | ||||||
|     { "help",			0,   arg_flag, &help_flag, NULL, NULL} |     { "help",			0,   arg_flag, &help_flag, NULL, NULL} | ||||||
| }; | }; | ||||||
| @@ -67,12 +67,10 @@ usage (int ret) | |||||||
| int | int | ||||||
| main (int argc, char **argv) | main (int argc, char **argv) | ||||||
| { | { | ||||||
|     const krb5_cc_ops *ops; |  | ||||||
|     krb5_context context; |     krb5_context context; | ||||||
|     krb5_error_code ret; |     krb5_error_code ret; | ||||||
|     krb5_ccache id; |     krb5_ccache id; | ||||||
|     int optidx = 0; |     int optidx = 0; | ||||||
|     char *str; |  | ||||||
|  |  | ||||||
|     setprogname (argv[0]); |     setprogname (argv[0]); | ||||||
|  |  | ||||||
| @@ -84,7 +82,7 @@ main (int argc, char **argv) | |||||||
|  |  | ||||||
|     if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx)) |     if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx)) | ||||||
| 	usage(1); | 	usage(1); | ||||||
|      |  | ||||||
|     if (help_flag) |     if (help_flag) | ||||||
| 	usage (0); | 	usage (0); | ||||||
|  |  | ||||||
| @@ -99,22 +97,42 @@ main (int argc, char **argv) | |||||||
|     if (argc != 0) |     if (argc != 0) | ||||||
| 	usage (1); | 	usage (1); | ||||||
|  |  | ||||||
|     if (cache == NULL) |     if (cache && principal) | ||||||
| 	krb5_errx(context, 1, "No cache name given"); | 	krb5_errx(context, 1, "Both --cache and --principal given, choose one"); | ||||||
|  |  | ||||||
|     ops = krb5_cc_get_prefix_ops(context, type); |     if (principal) { | ||||||
|     if (ops == NULL) | 	krb5_principal p; | ||||||
| 	krb5_err (context, 1, 0, "krb5_cc_get_prefix_ops"); |  | ||||||
|  |  | ||||||
|     asprintf(&str, "%s:%s", ops->prefix, cache); | 	ret = krb5_parse_name(context, principal, &p); | ||||||
|     if (str == NULL) | 	if (ret) | ||||||
| 	krb5_errx(context, 1, "out of memory"); | 	    krb5_err (context, 1, ret, "krb5_parse_name: %s", principal); | ||||||
|  |  | ||||||
|     ret = krb5_cc_resolve(context, str, &id); | 	ret = krb5_cc_cache_match(context, p, type, &id); | ||||||
|     if (ret) | 	if (ret) | ||||||
| 	krb5_err (context, 1, ret, "krb5_cc_resolve: %s", str); | 	    krb5_err (context, 1, ret, | ||||||
|  | 		      "Did not find principal: %s", principal); | ||||||
|  |  | ||||||
|     free(str); | 	krb5_free_principal(context, p); | ||||||
|  |  | ||||||
|  |     } else if (cache) { | ||||||
|  | 	const krb5_cc_ops *ops; | ||||||
|  | 	char *str; | ||||||
|  |  | ||||||
|  | 	ops = krb5_cc_get_prefix_ops(context, type); | ||||||
|  | 	if (ops == NULL) | ||||||
|  | 	    krb5_err (context, 1, 0, "krb5_cc_get_prefix_ops"); | ||||||
|  | 	 | ||||||
|  | 	asprintf(&str, "%s:%s", ops->prefix, cache); | ||||||
|  | 	if (str == NULL) | ||||||
|  | 	    krb5_errx(context, 1, "out of memory"); | ||||||
|  | 	 | ||||||
|  | 	ret = krb5_cc_resolve(context, str, &id); | ||||||
|  | 	if (ret) | ||||||
|  | 	    krb5_err (context, 1, ret, "krb5_cc_resolve: %s", str); | ||||||
|  | 	 | ||||||
|  | 	free(str); | ||||||
|  |     } else | ||||||
|  | 	usage(1); | ||||||
|  |  | ||||||
|     ret = krb5_cc_switch(context, id); |     ret = krb5_cc_switch(context, id); | ||||||
|     if (ret) |     if (ret) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Love Hörnquist Åstrand
					Love Hörnquist Åstrand