1 /* $NetBSD: test_expand_toks.c,v 1.2 2017/01/28 21:31:49 christos Exp $ */ 2 3 /* 4 * Copyright (c) 2003 Kungliga Tekniska Högskolan 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 int version_flag = 0; 40 static int help_flag = 0; 41 42 static struct getargs args[] = { 43 {"help", 0, arg_flag, &help_flag, 44 NULL, NULL } 45 }; 46 47 static void 48 usage (int ret) 49 { 50 arg_printusage (args, 51 sizeof(args)/sizeof(*args), 52 NULL, 53 ""); 54 exit (ret); 55 } 56 57 int 58 main(int argc, char **argv) 59 { 60 krb5_context context; 61 krb5_error_code ret; 62 int optidx = 0; 63 char *expanded; 64 65 setprogname(argv[0]); 66 67 if (getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx)) 68 usage(1); 69 70 if (help_flag) 71 usage (0); 72 73 if (version_flag){ 74 print_version(NULL); 75 exit(0); 76 } 77 78 argc -= optidx; 79 argv += optidx; 80 81 ret = krb5_init_context(&context); 82 if (ret) 83 errx (1, "krb5_init_context failed: %d", ret); 84 85 ret = _krb5_expand_path_tokensv(context, "/tmp/%{foo}/%{bar}%{baz}/x", 0, 86 &expanded, 87 "foo", "abc", 88 "bar", "dce", 89 "baz", "fgh", 90 NULL); 91 if (ret) 92 krb5_err(context, ret, 1, "Token expansion failed"); 93 94 #ifdef _WIN32 95 #define EXPANDED_SHOULD_BE "\\tmp\\abc\\dcefgh\\x" 96 #else 97 #define EXPANDED_SHOULD_BE "/tmp/abc/dcefgh/x" 98 #endif 99 100 if (strcmp(expanded, EXPANDED_SHOULD_BE)) 101 krb5_errx(context, 1, "Token expansion incorrect"); 102 103 krb5_free_context(context); 104 105 return 0; 106 } 107