X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=apps%2Fsrp.c;h=1c9a9bee43e86fa8a4452c4f74c82e3b5dc5822f;hp=b984c14c97ab3088e4fec6d1897011a987bacd40;hb=bb1aaab42880489729aeafea27d3569cce60c20b;hpb=68dc682499ea3fe27d909c946d7abd39062d6efd diff --git a/apps/srp.c b/apps/srp.c index b984c14c97..1c9a9bee43 100644 --- a/apps/srp.c +++ b/apps/srp.c @@ -58,17 +58,16 @@ #include #ifndef OPENSSL_NO_SRP -# include -# include -# include -# include -# include -# include -# include -# include -# include - -# include "apps.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "apps.h" # define BASE_SECTION "srp" # define CONFIG_FILE "openssl.cnf" @@ -88,14 +87,14 @@ static int get_index(CA_DB *db, char *id, char type) for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { pp = sk_OPENSSL_PSTRING_value(db->db->data, i); if (pp[DB_srptype][0] == DB_SRP_INDEX - && !strcmp(id, pp[DB_srpid])) + && strcmp(id, pp[DB_srpid]) == 0) return i; } else for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { pp = sk_OPENSSL_PSTRING_value(db->db->data, i); if (pp[DB_srptype][0] != DB_SRP_INDEX - && !strcmp(id, pp[DB_srpid])) + && strcmp(id, pp[DB_srpid]) == 0) return i; } @@ -138,7 +137,7 @@ static int update_index(CA_DB *db, char **row) char **irow; int i; - irow = app_malloc(sizeof(char *) * (DB_NUMBER + 1), "row pointers"); + irow = app_malloc(sizeof(*irow) * (DB_NUMBER + 1), "row pointers"); for (i = 0; i < DB_NUMBER; i++) { irow[i] = row[i]; row[i] = NULL; @@ -256,14 +255,13 @@ int srp_main(int argc, char **argv) CA_DB *db = NULL; DB_ATTR db_attr; CONF *conf = NULL; - int gNindex = -1, maxgN = -1, ret = 1, errors = 0, verbose = - 0, i, doupdatedb = 0; - int mode = OPT_ERR; + int gNindex = -1, maxgN = -1, ret = 1, errors = 0, verbose = 0, i; + 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, *tofree = NULL, *section = NULL; - char **gNrow = NULL, *configfile = NULL, *dbfile = NULL, **pp, *prog; - long errorline = -1; + char **gNrow = NULL, *configfile = NULL; + char *srpvfile = NULL, **pp, *prog; OPTION_CHOICE o; prog = opt_init(argc, argv, srp_options); @@ -288,7 +286,7 @@ int srp_main(int argc, char **argv) section = opt_arg(); break; case OPT_SRPVFILE: - dbfile = opt_arg(); + srpvfile = opt_arg(); break; case OPT_ADD: case OPT_DELETE: @@ -322,9 +320,9 @@ int srp_main(int argc, char **argv) argc = opt_num_rest(); argv = opt_rest(); - if (dbfile && configfile) { + if (srpvfile && configfile) { BIO_printf(bio_err, - "-dbfile and -configfile cannot be specified together.\n"); + "-srpvfile and -configfile cannot be specified together.\n"); goto end; } if (mode == OPT_ERR) { @@ -349,45 +347,18 @@ int srp_main(int argc, char **argv) goto end; } - if (!dbfile) { - - /*****************************************************************/ - tofree = NULL; - if (configfile == NULL) - configfile = getenv("OPENSSL_CONF"); - if (configfile == NULL) - configfile = getenv("SSLEAY_CONF"); - if (configfile == NULL) { - const char *s = X509_get_default_cert_area(); - size_t len = strlen(s) + 1 + sizeof(CONFIG_FILE); - - tofree = app_malloc(len, "config filename space"); -# ifdef OPENSSL_SYS_VMS - strcpy(tofree, s); -# else - BUF_strlcpy(tofree, s, len); - BUF_strlcat(tofree, "/", len); -# endif - BUF_strlcat(tofree, CONFIG_FILE, len); - configfile = tofree; - } + if (!srpvfile) { + if (!configfile) + configfile = default_config_file; if (verbose) - BIO_printf(bio_err, "Using configuration from %s\n", configfile); - conf = NCONF_new(NULL); - if (NCONF_load(conf, configfile, &errorline) <= 0) { - if (errorline <= 0) - BIO_printf(bio_err, "error loading the config file '%s'\n", - configfile); - else - BIO_printf(bio_err, "error on line %ld of config file '%s'\n", - errorline, configfile); + BIO_printf(bio_err, "Using configuration from %s\n", + configfile); + conf = app_load_config(configfile); + if (conf == NULL) + goto end; + if (!app_load_modules(conf)) goto end; - } - if (tofree) { - OPENSSL_free(tofree); - tofree = NULL; - } /* Lets get the config section we are using */ if (section == NULL) { @@ -411,7 +382,8 @@ int srp_main(int argc, char **argv) "trying to read " ENV_DATABASE " in section \"%s\"\n", section); - if ((dbfile = NCONF_get_string(conf, section, ENV_DATABASE)) == NULL) { + if ((srpvfile = NCONF_get_string(conf, section, ENV_DATABASE)) + == NULL) { lookup_fail(section, ENV_DATABASE); goto end; } @@ -424,9 +396,9 @@ int srp_main(int argc, char **argv) if (verbose) BIO_printf(bio_err, "Trying to read SRP verifier file \"%s\"\n", - dbfile); + srpvfile); - db = load_index(dbfile, &db_attr); + db = load_index(srpvfile, &db_attr); if (db == NULL) goto end; @@ -436,7 +408,7 @@ int srp_main(int argc, char **argv) if (pp[DB_srptype][0] == DB_SRP_INDEX) { maxgN = i; - if (gNindex < 0 && gN != NULL && !strcmp(gN, pp[DB_srpid])) + if ((gNindex < 0) && (gN != NULL) && strcmp(gN, pp[DB_srpid]) == 0) gNindex = i; print_index(db, i, verbose > 1); @@ -514,31 +486,24 @@ int srp_main(int argc, char **argv) errors++; goto end; } - row[DB_srpid] = BUF_strdup(user); - row[DB_srptype] = BUF_strdup("v"); - row[DB_srpgN] = BUF_strdup(gNid); - - if (!row[DB_srpid] || !row[DB_srpgN] || !row[DB_srptype] - || !row[DB_srpverifier] || !row[DB_srpsalt] || (userinfo - && - (!(row - [DB_srpinfo] - = - BUF_strdup - (userinfo)))) + row[DB_srpid] = OPENSSL_strdup(user); + row[DB_srptype] = OPENSSL_strdup("v"); + row[DB_srpgN] = OPENSSL_strdup(gNid); + + if ((row[DB_srpid] == NULL) + || (row[DB_srpgN] == NULL) + || (row[DB_srptype] == NULL) + || (row[DB_srpverifier] == NULL) + || (row[DB_srpsalt] == NULL) + || (userinfo + && ((row[DB_srpinfo] = OPENSSL_strdup(userinfo)) == NULL)) || !update_index(db, row)) { - if (row[DB_srpid]) - OPENSSL_free(row[DB_srpid]); - if (row[DB_srpgN]) - OPENSSL_free(row[DB_srpgN]); - if (row[DB_srpinfo]) - OPENSSL_free(row[DB_srpinfo]); - if (row[DB_srptype]) - OPENSSL_free(row[DB_srptype]); - if (row[DB_srpverifier]) - OPENSSL_free(row[DB_srpverifier]); - if (row[DB_srpsalt]) - OPENSSL_free(row[DB_srpsalt]); + OPENSSL_free(row[DB_srpid]); + OPENSSL_free(row[DB_srpgN]); + OPENSSL_free(row[DB_srpinfo]); + OPENSSL_free(row[DB_srptype]); + OPENSSL_free(row[DB_srpverifier]); + OPENSSL_free(row[DB_srpsalt]); goto end; } doupdatedb = 1; @@ -606,12 +571,16 @@ int srp_main(int argc, char **argv) } row[DB_srptype][0] = 'v'; - row[DB_srpgN] = BUF_strdup(gNid); + row[DB_srpgN] = OPENSSL_strdup(gNid); - if (!row[DB_srpid] || !row[DB_srpgN] || !row[DB_srptype] - || !row[DB_srpverifier] || !row[DB_srpsalt] + if (row[DB_srpid] == NULL + || row[DB_srpgN] == NULL + || row[DB_srptype] == NULL + || row[DB_srpverifier] == NULL + || row[DB_srpsalt] == NULL || (userinfo - && (!(row[DB_srpinfo] = BUF_strdup(userinfo))))) + && ((row[DB_srpinfo] = OPENSSL_strdup(userinfo)) + == NULL))) goto end; doupdatedb = 1; @@ -624,12 +593,10 @@ int srp_main(int argc, char **argv) user); errors++; } else { - char **xpp = - sk_OPENSSL_PSTRING_value(db->db->data, userindex); - BIO_printf(bio_err, "user \"%s\" revoked. t\n", user); + char **xpp = sk_OPENSSL_PSTRING_value(db->db->data, userindex); + BIO_printf(bio_err, "user \"%s\" revoked. t\n", user); xpp[DB_srptype][0] = 'R'; - doupdatedb = 1; } } @@ -656,12 +623,12 @@ int srp_main(int argc, char **argv) if (verbose) BIO_printf(bio_err, "Trying to update srpvfile.\n"); - if (!save_index(dbfile, "new", db)) + if (!save_index(srpvfile, "new", db)) goto end; if (verbose) BIO_printf(bio_err, "Temporary srpvfile created.\n"); - if (!rotate_index(dbfile, "new", "old")) + if (!rotate_index(srpvfile, "new", "old")) goto end; if (verbose) @@ -676,19 +643,21 @@ int srp_main(int argc, char **argv) if (verbose) BIO_printf(bio_err, "SRP terminating with code %d.\n", ret); - if (tofree) - OPENSSL_free(tofree); + OPENSSL_free(tofree); if (ret) ERR_print_errors(bio_err); if (randfile) app_RAND_write_file(randfile); - if (conf) - NCONF_free(conf); - if (db) - free_index(db); - + NCONF_free(conf); + free_index(db); OBJ_cleanup(); return (ret); } +#else + +# if PEDANTIC +static void *dummy = &dummy; +# endif + #endif