mirror of
https://github.com/QuasarApp/openssl.git
synced 2025-05-01 04:04:39 +00:00
Revert "Check directory is able to create files for various -out option"
This reverts commit 555c94a0db9661428da0a45cb32b9f002324eefd. 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
|
#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 */
|
/* raw_read|write section */
|
||||||
#if defined(__VMS)
|
#if defined(__VMS)
|
||||||
# include "vms_term_sock.h"
|
# include "vms_term_sock.h"
|
||||||
|
@ -611,7 +611,6 @@ void store_setup_crl_download(X509_STORE *st);
|
|||||||
|
|
||||||
int app_isdir(const char *);
|
int app_isdir(const char *);
|
||||||
int app_access(const char *, int flag);
|
int app_access(const char *, int flag);
|
||||||
char *app_dirname(char *path);
|
|
||||||
int fileno_stdin(void);
|
int fileno_stdin(void);
|
||||||
int fileno_stdout(void);
|
int fileno_stdout(void);
|
||||||
int raw_read_stdin(void *, int);
|
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)
|
int opt_next(void)
|
||||||
{
|
{
|
||||||
char *p, *estr;
|
char *p;
|
||||||
const OPTIONS *o;
|
const OPTIONS *o;
|
||||||
int ival;
|
int ival;
|
||||||
long lval;
|
long lval;
|
||||||
unsigned long ulval;
|
unsigned long ulval;
|
||||||
ossl_intmax_t imval;
|
ossl_intmax_t imval;
|
||||||
ossl_uintmax_t umval;
|
ossl_uintmax_t umval;
|
||||||
#if !defined(_WIN32) && !defined(__VMS)
|
|
||||||
char *c;
|
|
||||||
int oerrno;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Look at current arg; at end of the list? */
|
/* Look at current arg; at end of the list? */
|
||||||
arg = NULL;
|
arg = NULL;
|
||||||
@ -680,13 +676,13 @@ int opt_next(void)
|
|||||||
/* Just a string. */
|
/* Just a string. */
|
||||||
break;
|
break;
|
||||||
case '/':
|
case '/':
|
||||||
if (app_isdir(arg) > 0)
|
if (app_isdir(arg) >= 0)
|
||||||
break;
|
break;
|
||||||
BIO_printf(bio_err, "%s: Not a directory: %s\n", prog, arg);
|
BIO_printf(bio_err, "%s: Not a directory: %s\n", prog, arg);
|
||||||
return -1;
|
return -1;
|
||||||
case '<':
|
case '<':
|
||||||
/* Input file. */
|
/* Input file. */
|
||||||
if (strcmp(arg, "-") == 0 || app_access(arg, R_OK) == 0)
|
if (strcmp(arg, "-") == 0 || app_access(arg, R_OK) >= 0)
|
||||||
break;
|
break;
|
||||||
BIO_printf(bio_err,
|
BIO_printf(bio_err,
|
||||||
"%s: Cannot open input file %s, %s\n",
|
"%s: Cannot open input file %s, %s\n",
|
||||||
@ -694,38 +690,11 @@ int opt_next(void)
|
|||||||
return -1;
|
return -1;
|
||||||
case '>':
|
case '>':
|
||||||
/* Output file. */
|
/* Output file. */
|
||||||
#if !defined(_WIN32) && !defined(__VMS)
|
if (strcmp(arg, "-") == 0 || app_access(arg, W_OK) >= 0 || errno == ENOENT)
|
||||||
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);
|
|
||||||
break;
|
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,
|
BIO_printf(bio_err,
|
||||||
"%s: Cannot open output file %s, %s\n",
|
"%s: Cannot open output file %s, %s\n",
|
||||||
prog, arg, estr);
|
prog, arg, strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
case 'p':
|
case 'p':
|
||||||
case 'n':
|
case 'n':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user