From 192371fcb2a4e54bdf72ec88c3948acc8a350d1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Wed, 10 Sep 2003 09:31:54 +0000 Subject: [PATCH] use getarg git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12814 ec53bebd-3082-4978-b11e-865c3cabbd6b --- appl/test/http_client.c | 58 +++++++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/appl/test/http_client.c b/appl/test/http_client.c index 3b5532b96..cb0cde6a2 100644 --- a/appl/test/http_client.c +++ b/appl/test/http_client.c @@ -106,6 +106,32 @@ fdprintf(int s, const char *fmt, ...) free(str); } +static int help_flag; +static int version_flag; +static char *port_str; +static char *service = "HTTP"; +static char *gss_mech = "SPNEGO"; + +static struct getargs args[] = { + { "port", 'p', arg_string, &port_str, "port to listen to", "port" }, + { "service", 's', arg_string, &service, "service to use", "service" }, + { "mech", 'm', arg_string, &gss_mech, "gssapi mech to use", "mech" }, + { "help", 'h', arg_flag, &help_flag }, + { "version", 0, arg_flag, &version_flag } +}; + +static int num_args = sizeof(args) / sizeof(args[0]); + +static void +usage(int code) +{ + arg_printusage(args, num_args, NULL, "host [page]"); + exit(code); +} + +/* + * + */ struct http_req { char *response; @@ -247,14 +273,30 @@ main(int argc, char **argv) int num_headers; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; gss_name_t server = GSS_C_NO_NAME; + int optind = 0; + gss_OID mech; - setprogname(argv[0]); + if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optind)) + usage(1); - if (argc != 2 && argc != 3) + if (help_flag) + usage (0); + + if(version_flag) { + print_version(NULL); + exit(0); + } + + argc -= optind; + argv += optind; + + mech = select_mech(gss_mech); + + if (argc != 1 && argc != 2) errx(1, "usage: %s host [page]", getprogname()); - host = argv[1]; - if (argc == 3) - page = argv[2]; + host = argv[0]; + if (argc == 2) + page = argv[1]; else page = "/"; @@ -292,7 +334,7 @@ main(int argc, char **argv) if (server == GSS_C_NO_NAME) { char *name; - asprintf(&name, "HTTP@%s", host); + asprintf(&name, "%s@%s", service, host); input_token.length = strlen(name); input_token.value = name; @@ -329,7 +371,7 @@ main(int argc, char **argv) GSS_C_NO_CREDENTIAL, &context_hdl, server, - GSS_SPNEGO_MECHANISM, + mech, 0, 0, GSS_C_NO_CHANNEL_BINDINGS, @@ -349,7 +391,7 @@ main(int argc, char **argv) gssapi_done = 1; - printf("Negotiate done\n"); + printf("Negotiate done: %s\n", gss_mech); maj_stat = gss_inquire_context(&min_stat, context_hdl,