From 96de2e590bad00575baa7c2c6be5767b43aa017c Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Fri, 20 Apr 2018 12:22:45 +0200 Subject: [PATCH] Revert "Check directory is able to create files for various -out option" This reverts commit 555c94a0db9661428da0a45cb32b9f002324eefd. Reviewed-by: Andy Polyakov (Merged from https://github.com/openssl/openssl/pull/6033) --- apps/apps.c | 67 ----------------------------------------------------- apps/apps.h | 1 - apps/opt.c | 41 ++++---------------------------- 3 files changed, 5 insertions(+), 104 deletions(-) diff --git a/apps/apps.c b/apps/apps.c index 2ab65b7213..b35ea563ee 100644 --- a/apps/apps.c +++ b/apps/apps.c @@ -2364,73 +2364,6 @@ int app_isdir(const char *name) } #endif -/* app_dirname section */ - -/* - * This exactly follows what POSIX's - * dirname does, but is implemented - * in a more platform independent way. - * - * path dirname - * /usr/lib /usr - * /usr/ / - * usr . - * / / - * . . - * .. . - * "" . - * - * Note: this function also keeps the - * possibility of modifying the 'path' - * string same as POSIX dirname. - */ -static char *posix_dirname(char *path) -{ - size_t l; - char *ret = "."; - - l = strlen(path); - if (l == 0) - goto out; - if (strcmp(path, ".") == 0) - goto out; - if (strcmp(path, "..") == 0) - goto out; - if (strcmp(path, "/") == 0) { - ret = "/"; - goto out; - } - if (path[l - 1] == '/') { - /* /usr/ */ - path[l - 1] = '\0'; - } - if ((ret = strrchr(path, '/')) == NULL) { - /* usr */ - ret = "."; - } else if (ret == path) { - /* /usr */ - *++ret = '\0'; - ret = path; - } else { - /* /usr/lib */ - *ret = '\0'; - ret = path; - } - out: - return ret; -} - -/* - * TODO: implement app_dirname for Windows - * and VMS. - */ -#if !defined(_WIN32) && !defined(__VMS) -char *app_dirname(char *path) -{ - return posix_dirname(path); -} -#endif - /* raw_read|write section */ #if defined(__VMS) # include "vms_term_sock.h" diff --git a/apps/apps.h b/apps/apps.h index 4d4aae79ed..b45a31aadc 100644 --- a/apps/apps.h +++ b/apps/apps.h @@ -611,7 +611,6 @@ void store_setup_crl_download(X509_STORE *st); int app_isdir(const char *); int app_access(const char *, int flag); -char *app_dirname(char *path); int fileno_stdin(void); int fileno_stdout(void); int raw_read_stdin(void *, int); diff --git a/apps/opt.c b/apps/opt.c index a47451c94f..a9d163a480 100644 --- a/apps/opt.c +++ b/apps/opt.c @@ -613,17 +613,13 @@ int opt_verify(int opt, X509_VERIFY_PARAM *vpm) */ int opt_next(void) { - char *p, *estr; + char *p; const OPTIONS *o; int ival; long lval; unsigned long ulval; ossl_intmax_t imval; ossl_uintmax_t umval; -#if !defined(_WIN32) && !defined(__VMS) - char *c; - int oerrno; -#endif /* Look at current arg; at end of the list? */ arg = NULL; @@ -680,13 +676,13 @@ int opt_next(void) /* Just a string. */ break; case '/': - if (app_isdir(arg) > 0) + if (app_isdir(arg) >= 0) break; BIO_printf(bio_err, "%s: Not a directory: %s\n", prog, arg); return -1; case '<': /* Input file. */ - if (strcmp(arg, "-") == 0 || app_access(arg, R_OK) == 0) + if (strcmp(arg, "-") == 0 || app_access(arg, R_OK) >= 0) break; BIO_printf(bio_err, "%s: Cannot open input file %s, %s\n", @@ -694,38 +690,11 @@ int opt_next(void) return -1; case '>': /* Output file. */ -#if !defined(_WIN32) && !defined(__VMS) - c = OPENSSL_strdup(arg); - if (c == NULL) { - BIO_printf(bio_err, - "%s: Memory allocation failure\n", prog); - return -1; - } - oerrno = errno; - errno = 0; - if (strcmp(arg, "-") == 0 - || (app_access(app_dirname(c), W_OK) == 0 - && app_isdir(arg) <= 0 - && (app_access(arg, W_OK) == 0 || errno == ENOENT))) { - OPENSSL_free(c); + if (strcmp(arg, "-") == 0 || app_access(arg, W_OK) >= 0 || errno == ENOENT) break; - } - OPENSSL_free(c); - if (errno == 0) - /* only possible if 'arg' is a directory */ - estr = "is a directory"; - else - estr = strerror(errno); - errno = oerrno; -#else - if (strcmp(arg, "-") == 0 || app_access(arg, W_OK) == 0 - || errno == ENOENT) - break; - estr = strerror(errno); -#endif BIO_printf(bio_err, "%s: Cannot open output file %s, %s\n", - prog, arg, estr); + prog, arg, strerror(errno)); return -1; case 'p': case 'n': -- 2.25.1