From: Nikos Mavrogiannopoulos Date: Sun, 22 Jan 2012 08:50:59 +0000 (+0100) Subject: corrected command line parsing issues. X-Git-Tag: gnutls_3_0_13~231 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7408ef9793c38bbef2f4118e8312b991432db612;p=thirdparty%2Fgnutls.git corrected command line parsing issues. --- diff --git a/src/Makefile.am b/src/Makefile.am index 7586d11472..748468ce05 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -163,15 +163,15 @@ p11tool-gaa.c: $(srcdir)/p11tool.gaa endif certtool-gaa.c: $(srcdir)/certtool.gaa -$(GAA) $< -o certtool-gaa.c -i certtool-gaa.h -psk-args.c: $(srcdir)/psk-args.def +psk-args.c psk-args.h: $(srcdir)/psk-args.def -autogen $< -cli-debug-args.c: $(srcdir)/cli-debug-args.def +cli-debug-args.c cli-debug-args.h: $(srcdir)/cli-debug-args.def -autogen $< -cli-args.c: $(srcdir)/cli-args.def +cli-args.c cli-args.h: $(srcdir)/cli-args.def -autogen $< -serv-args.c: $(srcdir)/serv-args.def +serv-args.c serv-args.h: $(srcdir)/serv-args.def -autogen $< -srptool-args.c: $(srcdir)/srptool-args.def +srptool-args.c srptool-args.h: $(srcdir)/srptool-args.def -autogen $< -p11tool-args.c: $(srcdir)/p11tool-args.def +p11tool-args.c p11tool-args.h: $(srcdir)/p11tool-args.def -autogen $< diff --git a/src/cli-args.def.in b/src/cli-args.def.in index d8cd0aca37..8f73cd33ae 100644 --- a/src/cli-args.def.in +++ b/src/cli-args.def.in @@ -10,7 +10,8 @@ gnu-usage; no-misuse-usage; disable-save; reorder-args; -argument; +no-xlate = opt; +argument = "[hostname]"; long-opts; config-header = 'config.h'; export = '#include '; @@ -257,7 +258,6 @@ flag = { flag = { name = list; value = l; - arg-type = string; descrip = "Print a list of the supported algorithms and modes"; doc = "Print a list of the supported algorithms and modes. If a priority string is given then only the enabled ciphersuites are shown."; }; diff --git a/src/cli-debug-args.def.in b/src/cli-debug-args.def.in index 745044f202..d058c69719 100644 --- a/src/cli-debug-args.def.in +++ b/src/cli-debug-args.def.in @@ -8,6 +8,7 @@ detail = "TLS debug client. It sets up multiple TLS connections to a server and queries its capabilities. Can be used to check for servers with special needs or bugs."; gnu-usage; +no-xlate = opt; no-misuse-usage; disable-save; reorder-args; diff --git a/src/cli.c b/src/cli.c index 7ed6dcc7dd..b533d9a048 100644 --- a/src/cli.c +++ b/src/cli.c @@ -79,6 +79,7 @@ const char *x509_cafile = NULL; const char *x509_crlfile = NULL; static int x509ctype; static int disable_extensions; +static const char * priorities = NULL; const char *psk_username = NULL; gnutls_datum_t psk_key = { NULL, 0 }; @@ -547,15 +548,11 @@ init_tls_session (const char *hostname) { const char *err; int ret; - const char * priorities; gnutls_session_t session; - - if (HAVE_OPT(PRIORITY)) { - priorities = OPT_ARG(PRIORITY); - } else { - priorities = "NORMAL"; - } + if (priorities == NULL) + priorities = "NORMAL"; + if (udp) { gnutls_init (&session, GNUTLS_CLIENT|GNUTLS_DATAGRAM); @@ -615,7 +612,7 @@ init_tls_session (const char *hostname) } #ifdef ENABLE_SESSION_TICKET - if (disable_extensions == 0 && !ENABLED_OPT(NOTICKET)t) + if (disable_extensions == 0 && !HAVE_OPT(NOTICKET)t) gnutls_session_ticket_enable_client (session); #endif @@ -832,7 +829,7 @@ main (int argc, char **argv) gnutls_session_get_id (hd.session, session_id, &session_id_size); /* print some information */ - print_info (hd.session, hostname, ENABLED_OPT(INSECURE)); + print_info (hd.session, hostname, HAVE_OPT(INSECURE)); printf ("- Disconnecting\n"); socket_bye (&hd); @@ -1025,15 +1022,26 @@ const char* rest = NULL; if (rest == NULL && argc > 0) rest = argv[0]; + + if (HAVE_OPT(PRIORITY)) + { + priorities = OPT_ARG(PRIORITY); + } + verbose = HAVE_OPT( VERBOSE); - verbose = ENABLED_OPT( VERBOSE); - disable_extensions = ENABLED_OPT( DISABLE_EXTENSIONS); - print_cert = ENABLED_OPT( PRINT_CERT); - starttls = ENABLED_OPT(STARTTLS); - resume = ENABLED_OPT(RESUME); - rehandshake = ENABLED_OPT(REHANDSHAKE); - insecure = ENABLED_OPT(INSECURE); - udp = ENABLED_OPT(UDP); + if (HAVE_OPT(LIST)) + { + print_list(priorities, verbose); + exit(0); + } + + disable_extensions = HAVE_OPT( DISABLE_EXTENSIONS); + print_cert = HAVE_OPT( PRINT_CERT); + starttls = HAVE_OPT(STARTTLS); + resume = HAVE_OPT(RESUME); + rehandshake = HAVE_OPT(REHANDSHAKE); + insecure = HAVE_OPT(INSECURE); + udp = HAVE_OPT(UDP); mtu = OPT_VALUE_MTU; if (HAVE_OPT(PORT)) @@ -1046,9 +1054,9 @@ const char* rest = NULL; } record_max_size = OPT_VALUE_RECORDSIZE; - fingerprint = ENABLED_OPT(FINGERPRINT); + fingerprint = HAVE_OPT(FINGERPRINT); - if (ENABLED_OPT(X509FMTDER)) + if (HAVE_OPT(X509FMTDER)) x509ctype = GNUTLS_X509_FMT_DER; else x509ctype = GNUTLS_X509_FMT_PEM; @@ -1091,12 +1099,16 @@ const char* rest = NULL; if (HAVE_OPT(PGPKEYRING)) pgp_keyring = OPT_ARG(PGPKEYRING); - crlf = ENABLED_OPT(CRLF); + crlf = HAVE_OPT(CRLF); - if (rest == NULL) - hostname = "localhost"; - else + if (rest != NULL) hostname = rest; + + if (hostname == NULL) + { + fprintf(stderr, "No hostname specified\n"); + exit(1); + } } void cli_version (void); @@ -1161,7 +1173,7 @@ do_handshake (socket_st * socket) if (ret == 0) { /* print some information */ - print_info (socket->session, socket->hostname, ENABLED_OPT(INSECURE)); + print_info (socket->session, socket->hostname, HAVE_OPT(INSECURE)); socket->secure = 1; diff --git a/src/p11tool-args.def.in b/src/p11tool-args.def.in index 66ceffd090..9cb7202b4c 100644 --- a/src/p11tool-args.def.in +++ b/src/p11tool-args.def.in @@ -12,6 +12,7 @@ To use PKCS #11 tokens with gnutls the configuration file short-usage = "p11tool [options]\np11tool --help for usage instructions.\n"; prog-group = "GnuTLS"; gnu-usage; +no-xlate = opt; no-misuse-usage; disable-save; long-opts; @@ -165,6 +166,8 @@ flag = { flag = { name = login; descrip = "Force login to token"; + disabled; + disable = "no"; doc = ""; }; diff --git a/src/p11tool.c b/src/p11tool.c index d9f1af9ce4..864db3ed35 100644 --- a/src/p11tool.c +++ b/src/p11tool.c @@ -84,7 +84,7 @@ cmd_parser (int argc, char **argv) optionProcess( &p11toolOptions, argc, argv); - if (ENABLED_OPT(DEBUG)) + if (HAVE_OPT(DEBUG)) debug = OPT_VALUE_DEBUG; gnutls_global_set_log_function (tls_log_func); @@ -95,7 +95,7 @@ cmd_parser (int argc, char **argv) if ((ret = gnutls_global_init ()) < 0) error (EXIT_FAILURE, 0, "global_init: %s", gnutls_strerror (ret)); - if (ENABLED_OPT(PROVIDER)) + if (HAVE_OPT(PROVIDER)) { ret = gnutls_pkcs11_init (GNUTLS_PKCS11_FLAG_MANUAL, NULL); if (ret < 0) @@ -115,7 +115,7 @@ cmd_parser (int argc, char **argv) fprintf (stderr, "pkcs11_init: %s", gnutls_strerror (ret)); } - if (ENABLED_OPT(OUTFILE)) + if (HAVE_OPT(OUTFILE)) { outfile = safe_open_rw (OPT_ARG(OUTFILE), 0); if (outfile == NULL) @@ -126,74 +126,74 @@ cmd_parser (int argc, char **argv) memset (&cinfo, 0, sizeof (cinfo)); - if (ENABLED_OPT(SECRET_KEY)) + if (HAVE_OPT(SECRET_KEY)) cinfo.secret_key = OPT_ARG(SECRET_KEY); - if (ENABLED_OPT(LOAD_PRIVKEY)) + if (HAVE_OPT(LOAD_PRIVKEY)) cinfo.privkey = OPT_ARG(LOAD_PRIVKEY); - if (ENABLED_OPT(PKCS8)) + if (HAVE_OPT(PKCS8)) cinfo.pkcs8 = 1; - if (ENABLED_OPT(INDER) || ENABLED_OPT(INRAW)) + if (HAVE_OPT(INDER) || HAVE_OPT(INRAW)) cinfo.incert_format = GNUTLS_X509_FMT_DER; - if (ENABLED_OPT(LOAD_CERTIFICATE)) + if (HAVE_OPT(LOAD_CERTIFICATE)) cinfo.cert = OPT_ARG(LOAD_CERTIFICATE); - if (ENABLED_OPT(LOAD_PUBKEY)) + if (HAVE_OPT(LOAD_PUBKEY)) cinfo.pubkey = OPT_ARG(LOAD_PUBKEY); - if (ENABLED_OPT(LIST_TOKENS)) + if (HAVE_OPT(LIST_TOKENS)) action = ACTION_PKCS11_TOKENS; - else if (ENABLED_OPT(LIST_MECHANISMS)) + else if (HAVE_OPT(LIST_MECHANISMS)) action = ACTION_PKCS11_MECHANISMS; - else if (ENABLED_OPT(LIST_ALL)) + else if (HAVE_OPT(LIST_ALL)) { pkcs11_type = PKCS11_TYPE_ALL; action = ACTION_PKCS11_LIST; } - else if (ENABLED_OPT(LIST_ALL_CERTS)) + else if (HAVE_OPT(LIST_ALL_CERTS)) { pkcs11_type = PKCS11_TYPE_CRT_ALL; action = ACTION_PKCS11_LIST; } - else if (ENABLED_OPT(LIST_CERTS)) + else if (HAVE_OPT(LIST_CERTS)) { pkcs11_type = PKCS11_TYPE_PK; action = ACTION_PKCS11_LIST; } - else if (ENABLED_OPT(LIST_ALL_PRIVKEYS)) + else if (HAVE_OPT(LIST_ALL_PRIVKEYS)) { pkcs11_type = PKCS11_TYPE_PRIVKEY; action = ACTION_PKCS11_LIST; } - else if (ENABLED_OPT(LIST_ALL_TRUSTED)) + else if (HAVE_OPT(LIST_ALL_TRUSTED)) { pkcs11_type = PKCS11_TYPE_TRUSTED; action = ACTION_PKCS11_LIST; } - else if (ENABLED_OPT(EXPORT)) + else if (HAVE_OPT(EXPORT)) { action = ACTION_PKCS11_EXPORT_URL; } - else if (ENABLED_OPT(WRITE)) + else if (HAVE_OPT(WRITE)) action = ACTION_PKCS11_WRITE_URL; - else if (ENABLED_OPT(INITIALIZE)) + else if (HAVE_OPT(INITIALIZE)) action = ACTION_PKCS11_TOKEN_INIT; - else if (ENABLED_OPT(DELETE)) + else if (HAVE_OPT(DELETE)) action = ACTION_PKCS11_DELETE_URL; - else if (ENABLED_OPT(GENERATE_ECC)) + else if (HAVE_OPT(GENERATE_ECC)) { key_type = GNUTLS_PK_EC; action = ACTION_PKCS11_GENERATE; } - else if (ENABLED_OPT(GENERATE_RSA)) + else if (HAVE_OPT(GENERATE_RSA)) { key_type = GNUTLS_PK_RSA; action = ACTION_PKCS11_GENERATE; } - else if (ENABLED_OPT(GENERATE_DSA)) + else if (HAVE_OPT(GENERATE_DSA)) { key_type = GNUTLS_PK_DSA; action = ACTION_PKCS11_GENERATE; @@ -209,22 +209,22 @@ cmd_parser (int argc, char **argv) if (ENABLED_OPT(LOGIN)) login = 1; - if (ENABLED_OPT(URL)) + if (HAVE_OPT(URL)) { url = OPT_ARG(URL); } - if (ENABLED_OPT(LABEL)) + if (HAVE_OPT(LABEL)) { label = OPT_ARG(LABEL); } - if (ENABLED_OPT(BITS)) + if (HAVE_OPT(BITS)) { bits = OPT_VALUE_BITS; } - if (ENABLED_OPT(SEC_PARAM)) + if (HAVE_OPT(SEC_PARAM)) { sec_param = OPT_ARG(SEC_PARAM); } diff --git a/src/psk-args.def.in b/src/psk-args.def.in index a3921d2b6e..96fb92b75d 100644 --- a/src/psk-args.def.in +++ b/src/psk-args.def.in @@ -7,6 +7,7 @@ keys are stored in hexadecimal format in a key file."; short-usage = "psktool [options]\npsktool --help for usage instructions.\n"; prog-group = "GnuTLS"; gnu-usage; +no-xlate = opt; no-misuse-usage; disable-save; long-opts; diff --git a/src/serv-args.def.in b/src/serv-args.def.in index 711614f9c3..1a5d4712a2 100644 --- a/src/serv-args.def.in +++ b/src/serv-args.def.in @@ -6,6 +6,7 @@ short-usage = "Usage: gnutls-serv [options]\ngnutls-serv --help for usage inst prog-group = "GnuTLS"; detail = "Server program that listens to incoming TLS connections."; gnu-usage; +no-xlate = opt; no-misuse-usage; disable-save; long-opts; @@ -253,7 +254,6 @@ flag = { flag = { name = list; value = l; - arg-type = string; descrip = "Print a list of the supported algorithms and modes"; doc = "Print a list of the supported algorithms and modes. If a priority string is given then only the enabled ciphersuites are shown."; }; diff --git a/src/serv.c b/src/serv.c index 7d87ce2fd0..92fafe5590 100644 --- a/src/serv.c +++ b/src/serv.c @@ -79,6 +79,7 @@ const char *x509_ecccertfile = NULL; const char *x509_cafile = NULL; const char *dh_params_file = NULL; const char *x509_crlfile = NULL; +const char * priorities = NULL; gnutls_datum_t session_ticket_key; static void tcp_server(const char* name, int port); @@ -331,13 +332,9 @@ gnutls_session_t initialize_session (int dtls) { gnutls_session_t session; const char *err; - const char * priorities; - if (HAVE_OPT(PRIORITY)) { - priorities = OPT_ARG(PRIORITY); - } else { + if (priorities == NULL) priorities = "NORMAL"; - } if (dtls) gnutls_init (&session, GNUTLS_SERVER|GNUTLS_DATAGRAM); @@ -926,7 +923,7 @@ main (int argc, char **argv) if (nodb == 0) wrap_db_init (); - if (ENABLED_OPT(UDP)) + if (HAVE_OPT(UDP)) strcpy(name, "UDP "); else name[0] = 0; @@ -1021,9 +1018,9 @@ main (int argc, char **argv) } } - if (ENABLED_OPT(PGPCERTFILE)) + if (HAVE_OPT(PGPCERTFILE)) { - if (ENABLED_OPT(PGPSUBKEY)) + if (HAVE_OPT(PGPSUBKEY)) ret = gnutls_certificate_set_openpgp_key_file2 (cert_cred, pgp_certfile, pgp_keyfile, OPT_ARG(PGPSUBKEY), GNUTLS_OPENPGP_FMT_BASE64); @@ -1112,7 +1109,7 @@ main (int argc, char **argv) GERR (ret); } - if (ENABLED_OPT(PSKHINT)) + if (HAVE_OPT(PSKHINT)) { ret = gnutls_psk_set_server_credentials_hint (psk_cred, OPT_ARG(PSKHINT)); @@ -1139,16 +1136,16 @@ main (int argc, char **argv) gnutls_session_ticket_key_generate (&session_ticket_key); #endif - if (ENABLED_OPT(MTU)) + if (HAVE_OPT(MTU)) mtu = OPT_VALUE_MTU; else mtu = 1300; - if (ENABLED_OPT(PORT)) + if (HAVE_OPT(PORT)) port = OPT_VALUE_PORT; else port = 5556; - if (ENABLED_OPT(UDP)) + if (HAVE_OPT(UDP)) udp_server(name, port, mtu); else tcp_server(name, port); @@ -1546,66 +1543,75 @@ static void cmd_parser (int argc, char **argv) { optionProcess( &gnutls_servOptions, argc, argv); - disable_client_cert = ENABLED_OPT(DISABLE_CLIENT_CERT); - require_cert = ENABLED_OPT(REQUIRE_CLIENT_CERT); - if (ENABLED_OPT(DEBUG)) + disable_client_cert = HAVE_OPT(DISABLE_CLIENT_CERT); + require_cert = HAVE_OPT(REQUIRE_CLIENT_CERT); + if (HAVE_OPT(DEBUG)) debug = OPT_VALUE_DEBUG; - if (ENABLED_OPT(QUIET)) + if (HAVE_OPT(QUIET)) verbose = 0; - nodb = ENABLED_OPT(NODB); - noticket = ENABLED_OPT(NOTICKET); + if (HAVE_OPT(PRIORITY)) + priorities = OPT_ARG(PRIORITY); + + if (HAVE_OPT(LIST)) + { + print_list(priorities, verbose); + exit(0); + } + + nodb = HAVE_OPT(NODB); + noticket = HAVE_OPT(NOTICKET); - if (ENABLED_OPT(ECHO)) + if (HAVE_OPT(ECHO)) http = 0; else http = 1; - if (ENABLED_OPT(X509FMTDER)) + if (HAVE_OPT(X509FMTDER)) x509ctype = GNUTLS_X509_FMT_DER; else x509ctype = GNUTLS_X509_FMT_PEM; - generate = ENABLED_OPT(GENERATE); + generate = HAVE_OPT(GENERATE); - if (ENABLED_OPT(DHPARAMS)) + if (HAVE_OPT(DHPARAMS)) dh_params_file = OPT_ARG(DHPARAMS); - if (ENABLED_OPT(X509KEYFILE)) + if (HAVE_OPT(X509KEYFILE)) x509_keyfile = OPT_ARG(X509KEYFILE); - if (ENABLED_OPT(X509CERTFILE)) + if (HAVE_OPT(X509CERTFILE)) x509_certfile = OPT_ARG(X509CERTFILE); - if (ENABLED_OPT(X509DSAKEYFILE)) + if (HAVE_OPT(X509DSAKEYFILE)) x509_dsakeyfile = OPT_ARG(X509DSAKEYFILE); - if (ENABLED_OPT(X509DSACERTFILE)) + if (HAVE_OPT(X509DSACERTFILE)) x509_dsacertfile = OPT_ARG(X509DSACERTFILE); - if (ENABLED_OPT(X509ECCKEYFILE)) + if (HAVE_OPT(X509ECCKEYFILE)) x509_ecckeyfile = OPT_ARG(X509ECCKEYFILE); - if (ENABLED_OPT(X509CERTFILE)) + if (HAVE_OPT(X509CERTFILE)) x509_ecccertfile = OPT_ARG(X509ECCCERTFILE); - if (ENABLED_OPT(X509CAFILE)) + if (HAVE_OPT(X509CAFILE)) x509_cafile = OPT_ARG(X509CAFILE); - if (ENABLED_OPT(X509CRLFILE)) + if (HAVE_OPT(X509CRLFILE)) x509_crlfile = OPT_ARG(X509CRLFILE); - if (ENABLED_OPT(PGPKEYFILE)) + if (HAVE_OPT(PGPKEYFILE)) pgp_keyfile = OPT_ARG(PGPKEYFILE); - if (ENABLED_OPT(PGPCERTFILE)) + if (HAVE_OPT(PGPCERTFILE)) pgp_certfile = OPT_ARG(PGPCERTFILE); - if (ENABLED_OPT(PGPKEYRING)) + if (HAVE_OPT(PGPKEYRING)) pgp_keyring = OPT_ARG(PGPKEYRING); - if (ENABLED_OPT(SRPPASSWD)) + if (HAVE_OPT(SRPPASSWD)) srp_passwd = OPT_ARG(SRPPASSWD); - if (ENABLED_OPT(SRPPASSWDCONF)) + if (HAVE_OPT(SRPPASSWDCONF)) srp_passwd_conf = OPT_ARG(SRPPASSWDCONF); - if (ENABLED_OPT(PSKPASSWD)) + if (HAVE_OPT(PSKPASSWD)) psk_passwd = OPT_ARG(PSKPASSWD); } diff --git a/src/srptool-args.def.in b/src/srptool-args.def.in index f355e373cd..7d7fc6c88f 100644 --- a/src/srptool-args.def.in +++ b/src/srptool-args.def.in @@ -12,6 +12,7 @@ configuration file to hold the group parameters (called tpasswd.conf)."; short-usage = "srptool [options]\nsrptool --help for usage instructions.\n"; prog-group = "GnuTLS"; +no-xlate = opt; gnu-usage; no-misuse-usage; disable-save;