From 556f2cc1f573cfce0fd886eaeca9b90c7bb1f0f9 Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Dec 07 2011 15:25:36 +0000 Subject: request: validate the -d flag's argument after we finish arg parsing --- diff --git a/src/getcert.c b/src/getcert.c index 36131e2..ae158ec 100644 --- a/src/getcert.c +++ b/src/getcert.c @@ -504,12 +504,7 @@ request(const char *argv0, int argc, char **argv) GETOPT_CA)) != -1) { switch (c) { case 'd': - nss_scheme = NULL; - dbdir = ensure_nss(globals.tctx, optarg, &nss_scheme); - if ((nss_scheme != NULL) && (dbdir != NULL)) { - dbdir = talloc_asprintf(globals.tctx, "%s:%s", - nss_scheme, dbdir); - } + dbdir = optarg; break; case 't': token = talloc_strdup(globals.tctx, optarg); @@ -599,6 +594,7 @@ request(const char *argv0, int argc, char **argv) return 1; } } + /* Check for leftover arguments. */ if (optind < argc) { for (c = optind; c < argc; c++) { printf(_("Error: unused extra argument \"%s\".\n"), @@ -608,6 +604,15 @@ request(const char *argv0, int argc, char **argv) help(argv0, "request"); return 1; } + /* Pull the NSS storage scheme out, if one was given. */ + if (dbdir != NULL) { + nss_scheme = NULL; + dbdir = ensure_nss(globals.tctx, optarg, &nss_scheme); + if ((nss_scheme != NULL) && (dbdir != NULL)) { + dbdir = talloc_asprintf(globals.tctx, "%s:%s", + nss_scheme, dbdir); + } + } if (((dbdir != NULL) && (nickname == NULL)) || ((dbdir == NULL) && (nickname != NULL))) { printf(_("Database location or nickname specified "