The branch master has been updated via 000edfec502c0eed742d07e3ac02c2012381ee5e (commit) via b107e7f5572e6d441913ee921e828bc10d27a504 (commit) via f6d765988f37c43edb1056ab83165f2569182e9d (commit) via 215a6730f1eaf53b01a4eb10d75bd09fd74f70cc (commit) from 6f007824adc40d629e6ad1317d4184ca8bb967fc (commit)
- Log ----------------------------------------------------------------- commit 000edfec502c0eed742d07e3ac02c2012381ee5e Author: Richard Levitte <levi...@openssl.org> Date: Thu Feb 22 23:39:01 2018 +0100 Adapt 15-test_out_option.t for more than just Unix Reviewed-by: Rich Salz <rs...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/4008) commit b107e7f5572e6d441913ee921e828bc10d27a504 Author: Richard Levitte <levi...@openssl.org> Date: Thu Feb 22 22:22:29 2018 +0100 Enable the -out option test on VMS as well Reviewed-by: Rich Salz <rs...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/4008) commit f6d765988f37c43edb1056ab83165f2569182e9d Author: Richard Levitte <levi...@openssl.org> Date: Mon Jan 29 08:58:26 2018 +0100 Check on VMS as well Reviewed-by: Rich Salz <rs...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/4008) commit 215a6730f1eaf53b01a4eb10d75bd09fd74f70cc Author: Richard Levitte <levi...@openssl.org> Date: Mon Jul 24 23:32:00 2017 +0200 Add VMS version of app_dirname() Related to #3709 Reviewed-by: Rich Salz <rs...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/4008) ----------------------------------------------------------------------- Summary of changes: apps/apps.c | 55 ++++++++++++++++++++++++++++++++++++--- apps/opt.c | 4 +-- test/recipes/15-test_out_option.t | 12 ++++----- 3 files changed, 60 insertions(+), 11 deletions(-) diff --git a/apps/apps.c b/apps/apps.c index 3b713f4..ef57355 100644 --- a/apps/apps.c +++ b/apps/apps.c @@ -25,6 +25,12 @@ #endif #include <ctype.h> #include <errno.h> +#ifdef __VMS +# include <descrip.h> +# include <iledef.h> +# include <fscndef.h> +# include <starlet.h> +#endif #include <openssl/err.h> #include <openssl/x509.h> #include <openssl/x509v3.h> @@ -2397,14 +2403,57 @@ static char *posix_dirname(char *path) } /* - * TODO: implement app_dirname for Windows - * and VMS. + * TODO: implement app_dirname for Windows. */ -#if !defined(_WIN32) && !defined(__VMS) +#if !defined(_WIN32) char *app_dirname(char *path) { return posix_dirname(path); } +#elif defined(__VMS) +/* + * sys$filescan fills the given item list with pointers into the original + * path string, so all we need to do is to find the file name and simply + * put a NUL byte wherever the FSCN$_NAME pointer points. If there is no + * file name part and the path string isn't the empty string, we know for + * a fact that the whole string is a directory spec and return it as is. + * Otherwise or if that pointer is the starting address of the original + * path string, we know to return "sys$disk:[]", which corresponds to the + * Unixly ".". + * + * If sys$filescan returns an error status, we know that this is not + * parsable as a VMS file spec, and then use the fallback, in case we + * have a Unix type path. + */ +char *app_dirname(char *path) +{ + char *ret = "sys$disk:[]"; + struct dsc$descriptor_s dsc_path = { 0 }; + ile2 itemlist[] = { + {0, FSCN$_NAME, 0}, + {0, 0, 0} + }; + int fields; + int status; + + dsc_path.dsc$a_pointer = path; + dsc_path.dsc$w_length = strlen(path); + status = sys$filescan(&dsc_path, itemlist, &fields, 0, 0); + + if (!(status & 1)) + return posix_dirname(path); + + if ((fields & (1 << FSCN$_NAME)) == 0) { + if (dsc_path.dsc$w_length != 0) + ret = path; + } else if (itemlist[0].ile2$ps_bufaddr != path) { + if (itemlist[0].ile2$ps_bufaddr != path) { + *itemlist[0].ile2$ps_bufaddr = '\0'; + ret = path; + } + } + return ret; +} #endif /* raw_read|write section */ diff --git a/apps/opt.c b/apps/opt.c index a47451c..9025636 100644 --- a/apps/opt.c +++ b/apps/opt.c @@ -620,7 +620,7 @@ int opt_next(void) unsigned long ulval; ossl_intmax_t imval; ossl_uintmax_t umval; -#if !defined(_WIN32) && !defined(__VMS) +#if !defined(_WIN32) char *c; int oerrno; #endif @@ -694,7 +694,7 @@ int opt_next(void) return -1; case '>': /* Output file. */ -#if !defined(_WIN32) && !defined(__VMS) +#if !defined(_WIN32) c = OPENSSL_strdup(arg); if (c == NULL) { BIO_printf(bio_err, diff --git a/test/recipes/15-test_out_option.t b/test/recipes/15-test_out_option.t index 1b9c40d..018ff3d 100644 --- a/test/recipes/15-test_out_option.t +++ b/test/recipes/15-test_out_option.t @@ -16,8 +16,8 @@ use OpenSSL::Test::Utils; setup("test_out_option"); -plan skip_all => "'-out' option tests are not available on Windows or VMS" - if $^O =~ /^(VMS|MSWin32)$/; +plan skip_all => "'-out' option tests are not available on Windows" + if $^O eq 'MSWin32'; plan tests => 11; @@ -31,8 +31,8 @@ plan tests => 11; test_illegal_path('/usr/'); test_illegal_path('/'); -test_illegal_path('.'); -test_illegal_path('..'); +test_illegal_path('./'); +test_illegal_path('../'); # Test for trying to create a file in a non-exist directory my @chars = ("A".."Z", "a".."z", "0".."9"); @@ -44,7 +44,7 @@ test_legal_path('test.pem'); unlink 'test.pem'; sub test_illegal_path { - my ($path) = @_; + my $path = File::Spec->canonpath($_[0]); my $start = time(); ok(!run(app([ 'openssl', 'genrsa', '-out', $path, '16384'])), "invalid output path: $path"); @@ -54,7 +54,7 @@ sub test_illegal_path { } sub test_legal_path { - my ($path) = @_; + my $path = File::Spec->canonpath($_[0]); ok(run(app([ 'openssl', 'genrsa', '-out', $path, '2048'])), "valid output path: $path"); } _____ openssl-commits mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-commits