Commit 96de2e59 authored by Richard Levitte's avatar Richard Levitte
Browse files

Revert "Check directory is able to create files for various -out option"



This reverts commit 555c94a0.

Reviewed-by: default avatarAndy Polyakov <appro@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6033)
parent b47b6650
Loading
Loading
Loading
Loading
+0 −67
Original line number Diff line number Diff line
@@ -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"
+0 −1
Original line number Diff line number Diff line
@@ -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);
+5 −36
Original line number Diff line number Diff line
@@ -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':