mirror of
https://github.com/openssl/openssl.git
synced 2025-01-24 13:55:42 +08:00
Revert "Check directory is able to create files for various -out option"
This reverts commit 555c94a0db
.
Reviewed-by: Andy Polyakov <appro@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6033)
This commit is contained in:
parent
b47b665016
commit
96de2e590b
67
apps/apps.c
67
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"
|
||||
|
@ -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);
|
||||
|
41
apps/opt.c
41
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':
|
||||
|
Loading…
Reference in New Issue
Block a user