summaryrefslogtreecommitdiffstats
path: root/apps/lib
diff options
context:
space:
mode:
authorShane Lontis <shane.lontis@oracle.com>2020-09-11 03:50:09 +1000
committerShane Lontis <shane.lontis@oracle.com>2020-09-11 03:50:09 +1000
commit9a62ccbe8a73101d2cfcdf7902b6fe10da7602c9 (patch)
treed12d736be0605e05aa2d0000a4cb563c1e76b2b6 /apps/lib
parent9f604ca13ddc99e17ba37fed9281fbd1b71149a9 (diff)
Fix fipsinstall module path
If a path is specified with the -module option it will use this path to load the library when the provider is activated, instead of also having to set the environment variable OPENSSL_MODULES. Added a platform specific opt_path_end() function that uses existing functionality used by opt_progname(). Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org> (Merged from https://github.com/openssl/openssl/pull/12761)
Diffstat (limited to 'apps/lib')
-rw-r--r--apps/lib/opt.c43
1 files changed, 34 insertions, 9 deletions
diff --git a/apps/lib/opt.c b/apps/lib/opt.c
index d6bfecc8ff..260ff3b1c2 100644
--- a/apps/lib/opt.c
+++ b/apps/lib/opt.c
@@ -46,18 +46,27 @@ static char prog[40];
* Return the simple name of the program; removing various platform gunk.
*/
#if defined(OPENSSL_SYS_WIN32)
-char *opt_progname(const char *argv0)
+
+const char *opt_path_end(const char *filename)
{
- size_t i, n;
const char *p;
- char *q;
/* find the last '/', '\' or ':' */
- for (p = argv0 + strlen(argv0); --p > argv0;)
+ for (p = filename + strlen(filename); --p > filename; )
if (*p == '/' || *p == '\\' || *p == ':') {
p++;
break;
}
+ return p;
+}
+
+char *opt_progname(const char *argv0)
+{
+ size_t i, n;
+ const char *p;
+ char *q;
+
+ p = opt_path_end(argv0);
/* Strip off trailing nonsense. */
n = strlen(p);
@@ -76,17 +85,25 @@ char *opt_progname(const char *argv0)
#elif defined(OPENSSL_SYS_VMS)
-char *opt_progname(const char *argv0)
+const char *opt_path_end(const char *filename)
{
- const char *p, *q;
+ const char *p;
/* Find last special character sys:[foo.bar]openssl */
- for (p = argv0 + strlen(argv0); --p > argv0;)
+ for (p = filename + strlen(filename); --p > filename;)
if (*p == ':' || *p == ']' || *p == '>') {
p++;
break;
}
+ return p;
+}
+char *opt_progname(const char *argv0)
+{
+ const char *p, *q;
+
+ /* Find last special character sys:[foo.bar]openssl */
+ p = opt_path_end(argv0);
q = strrchr(p, '.');
strncpy(prog, p, sizeof(prog) - 1);
prog[sizeof(prog) - 1] = '\0';
@@ -97,16 +114,24 @@ char *opt_progname(const char *argv0)
#else
-char *opt_progname(const char *argv0)
+const char *opt_path_end(const char *filename)
{
const char *p;
/* Could use strchr, but this is like the ones above. */
- for (p = argv0 + strlen(argv0); --p > argv0;)
+ for (p = filename + strlen(filename); --p > filename;)
if (*p == '/') {
p++;
break;
}
+ return p;
+}
+
+char *opt_progname(const char *argv0)
+{
+ const char *p;
+
+ p = opt_path_end(argv0);
strncpy(prog, p, sizeof(prog) - 1);
prog[sizeof(prog) - 1] = '\0';
return prog;