/*
- * Copyright 2004-2017 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright (c) 2004, EdelKey Project. All Rights Reserved.
*
- * Licensed under the OpenSSL license (the "License"). You may not use
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
* in the file LICENSE in the source distribution or at
* https://www.openssl.org/source/license.html
+ *
+ * Originally written by Christophe Renou and Peter Sylvester,
+ * for the EdelKey project.
*/
#include <openssl/opensslconf.h>
# include <openssl/buffer.h>
# include <openssl/srp.h>
# include "apps.h"
+# include "progs.h"
# define BASE_SECTION "srp"
# define CONFIG_FILE "openssl.cnf"
-# define ENV_RANDFILE "RANDFILE"
# define ENV_DATABASE "srpvfile"
# define ENV_DEFAULT_SRP "default_srp"
OPT_ERR = -1, OPT_EOF = 0, OPT_HELP,
OPT_VERBOSE, OPT_CONFIG, OPT_NAME, OPT_SRPVFILE, OPT_ADD,
OPT_DELETE, OPT_MODIFY, OPT_LIST, OPT_GN, OPT_USERINFO,
- OPT_PASSIN, OPT_PASSOUT, OPT_ENGINE
+ OPT_PASSIN, OPT_PASSOUT, OPT_ENGINE, OPT_R_ENUM
} OPTION_CHOICE;
const OPTIONS srp_options[] = {
{"userinfo", OPT_USERINFO, 's', "Additional info to be set for user"},
{"passin", OPT_PASSIN, 's', "Input file pass phrase source"},
{"passout", OPT_PASSOUT, 's', "Output file pass phrase source"},
+ OPT_R_OPTIONS,
# ifndef OPENSSL_NO_ENGINE
{"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"},
# endif
int doupdatedb = 0, mode = OPT_ERR;
char *user = NULL, *passinarg = NULL, *passoutarg = NULL;
char *passin = NULL, *passout = NULL, *gN = NULL, *userinfo = NULL;
- char *randfile = NULL, *section = NULL;
+ char *section = NULL;
char **gNrow = NULL, *configfile = NULL;
char *srpvfile = NULL, **pp, *prog;
OPTION_CHOICE o;
case OPT_ENGINE:
e = setup_engine(opt_arg(), 0);
break;
+ case OPT_R_CASES:
+ if (!opt_rand(o))
+ goto end;
+ break;
}
}
argc = opt_num_rest();
"Exactly one of the options -add, -delete, -modify -list must be specified.\n");
goto opthelp;
}
- if ((mode == OPT_DELETE || mode == OPT_MODIFY || mode == OPT_ADD)
- && argc < 1) {
- BIO_printf(bio_err,
- "Need at least one user for options -add, -delete, -modify. \n");
- goto opthelp;
+ if (mode == OPT_DELETE || mode == OPT_MODIFY || mode == OPT_ADD) {
+ if (argc == 0) {
+ BIO_printf(bio_err, "Need at least one user.\n");
+ goto opthelp;
+ }
+ user = *argv++;
}
if ((passinarg != NULL || passoutarg != NULL) && argc != 1) {
BIO_printf(bio_err,
goto end;
}
- if (randfile == NULL)
- randfile = NCONF_get_string(conf, BASE_SECTION, "RANDFILE");
+ app_RAND_load_conf(conf, BASE_SECTION);
if (verbose)
BIO_printf(bio_err,
if (srpvfile == NULL)
goto end;
}
- if (randfile == NULL)
- ERR_clear_error();
- else
- app_RAND_load_file(randfile, 0);
if (verbose)
BIO_printf(bio_err, "Trying to read SRP verifier file \"%s\"\n",
if (verbose > 1)
BIO_printf(bio_err, "Starting user processing\n");
- if (argc > 0)
- user = *(argv++);
-
- while (mode == OPT_LIST || user) {
+ while (mode == OPT_LIST || user != NULL) {
int userindex = -1;
if (user != NULL && verbose > 1)
doupdatedb = 1;
}
}
- if (--argc > 0) {
- user = *(argv++);
- } else {
+ user = *argv++;
+ if (user == NULL) {
/* no more processing in any mode if no users left */
break;
}
OPENSSL_free(passout);
if (ret)
ERR_print_errors(bio_err);
- if (randfile != NULL)
- app_RAND_write_file(randfile);
NCONF_free(conf);
free_index(db);
release_engine(e);
- return (ret);
+ return ret;
}
#endif