diff -Nurd net-snmp-5.7.3.orig/apps/snmpusm.c net-snmp-5.7.3/apps/snmpusm.c --- net-snmp-5.7.3.orig/apps/snmpusm.c 2014-12-08 15:23:22.000000000 -0500 +++ net-snmp-5.7.3/apps/snmpusm.c 2020-01-14 19:19:35.000000000 -0500 @@ -61,7 +61,6 @@ #include -int main(int, char **); #define CMD_PASSWD_NAME "passwd" #define CMD_PASSWD 1 @@ -190,6 +189,7 @@ oid *keyoid, size_t keyoid_len) { u_char *dhkeychange; DH *dh; + const BIGNUM *p, *g, *pub_key; BIGNUM *other_pub; u_char *key; size_t key_len; @@ -205,25 +205,27 @@ dh = d2i_DHparams(NULL, &cp, dhvar->val_len); } - if (!dh || !dh->g || !dh->p) { + if (dh) + DH_get0_pqg(dh, &p, NULL, &g); + + if (!dh || !g || !p) { SNMP_FREE(dhkeychange); return SNMPERR_GENERR; } - DH_generate_key(dh); - if (!dh->pub_key) { + if (!DH_generate_key(dh)) { SNMP_FREE(dhkeychange); return SNMPERR_GENERR; } - - if (vars->val_len != (unsigned int)BN_num_bytes(dh->pub_key)) { + DH_get0_key(dh, &pub_key, NULL); + if (vars->val_len != (unsigned int)BN_num_bytes(pub_key)) { SNMP_FREE(dhkeychange); fprintf(stderr,"incorrect diffie-helman lengths (%lu != %d)\n", - (unsigned long)vars->val_len, BN_num_bytes(dh->pub_key)); + (unsigned long)vars->val_len, BN_num_bytes(pub_key)); return SNMPERR_GENERR; } - BN_bn2bin(dh->pub_key, dhkeychange + vars->val_len); + BN_bn2bin(pub_key, dhkeychange + vars->val_len); key_len = DH_size(dh); if (!key_len) { diff -Nurd net-snmp-5.7.3.orig/snmplib/keytools.c net-snmp-5.7.3/snmplib/keytools.c --- net-snmp-5.7.3.orig/snmplib/keytools.c 2014-12-08 15:23:22.000000000 -0500 +++ net-snmp-5.7.3/snmplib/keytools.c 2020-01-14 19:00:58.000000000 -0500 @@ -149,7 +149,9 @@ */ #ifdef NETSNMP_USE_OPENSSL -#ifdef HAVE_EVP_MD_CTX_CREATE +#if defined(HAVE_EVP_MD_CTX_NEW) + ctx = EVP_MD_CTX_new(); +#elif defined(HAVE_EVP_MD_CTX_CREATE) ctx = EVP_MD_CTX_create(); #else ctx = malloc(sizeof(*ctx)); @@ -259,7 +261,9 @@ memset(buf, 0, sizeof(buf)); #ifdef NETSNMP_USE_OPENSSL if (ctx) { -#ifdef HAVE_EVP_MD_CTX_DESTROY +#if defined(HAVE_EVP_MD_CTX_FREE) + EVP_MD_CTX_free(ctx); +#elif defined(HAVE_EVP_MD_CTX_DESTROY) EVP_MD_CTX_destroy(ctx); #else EVP_MD_CTX_cleanup(ctx); diff -Nurd net-snmp-5.7.3.orig/snmplib/scapi.c net-snmp-5.7.3/snmplib/scapi.c --- net-snmp-5.7.3.orig/snmplib/scapi.c 2014-12-08 15:23:22.000000000 -0500 +++ net-snmp-5.7.3/snmplib/scapi.c 2020-01-14 19:00:01.000000000 -0500 @@ -486,7 +486,9 @@ } /** initialize the pointer */ -#ifdef HAVE_EVP_MD_CTX_CREATE +#if defined(HAVE_EVP_MD_CTX_NEW) + cptr = EVP_MD_CTX_new(); +#elif defined(HAVE_EVP_MD_CTX_CREATE) cptr = EVP_MD_CTX_create(); #else cptr = malloc(sizeof(*cptr)); @@ -507,7 +509,9 @@ /** do the final pass */ EVP_DigestFinal(cptr, MAC, &tmp_len); *MAC_len = tmp_len; -#ifdef HAVE_EVP_MD_CTX_DESTROY +#if defined(HAVE_EVP_MD_CTX_FREE) + EVP_MD_CTX_free(cptr); +#elif defined(HAVE_EVP_MD_CTX_DESTROY) EVP_MD_CTX_destroy(cptr); #else #if !defined(OLD_DES)