Skip to content

Commit

Permalink
Fix more openssl3 deprecation (#1385)
Browse files Browse the repository at this point in the history
Found by: michaelortmann
Patch by: michaelortmann
  • Loading branch information
michaelortmann committed Apr 11, 2023
1 parent 540f3bc commit a3274e6
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 29 deletions.
3 changes: 2 additions & 1 deletion aclocal.m4
Expand Up @@ -1610,11 +1610,12 @@ AC_DEFUN([EGG_TLS_DETECT],
if test -z "$SSL_LIBS"; then
AC_CHECK_LIB(crypto, X509_digest, , [havessllib="no"], [-lssl])
AC_CHECK_LIB(ssl, SSL_accept, , [havessllib="no"], [-lcrypto])
AC_CHECK_FUNCS([EVP_md5 EVP_sha1 a2i_IPADDRESS], , [[
AC_CHECK_FUNCS([EVP_sha1 a2i_IPADDRESS], , [[
havessllib="no"
break
]])
fi
AC_CHECK_FUNCS([EVP_md5])
AC_CHECK_FUNC(OPENSSL_buf2hexstr, ,
AC_CHECK_FUNC(hex_to_string,
AC_DEFINE([OPENSSL_buf2hexstr], [hex_to_string], [Define this to hex_to_string when using OpenSSL < 1.1.0])
Expand Down
36 changes: 28 additions & 8 deletions src/dcc.c
Expand Up @@ -325,15 +325,26 @@ static void cont_link(int idx, char *buf, int i)
*/
static void dcc_bot_digest(int idx, char *challenge, char *password)
{
MD5_CTX md5context;
char digest_string[33]; /* 32 for digest in hex + null */
unsigned char digest[16];
int i;

#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && defined(HAVE_EVP_MD5)
EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
const EVP_MD *md = EVP_md5();
unsigned int md_len;
EVP_DigestInit_ex(mdctx, md, NULL);
EVP_DigestUpdate(mdctx, challenge, strlen(challenge));
EVP_DigestUpdate(mdctx, password, strlen(password));
EVP_DigestFinal_ex(mdctx, digest, &md_len);
EVP_MD_CTX_free(mdctx);
#else
MD5_CTX md5context;
MD5_Init(&md5context);
MD5_Update(&md5context, (unsigned char *) challenge, strlen(challenge));
MD5_Update(&md5context, (unsigned char *) password, strlen(password));
MD5_Final(digest, &md5context);
#endif

for (i = 0; i < 16; i++)
sprintf(digest_string + (i * 2), "%.2x", digest[i]);
Expand Down Expand Up @@ -582,30 +593,39 @@ struct dcc_table DCC_FORK_BOT = {
*/
static int dcc_bot_check_digest(int idx, char *remote_digest)
{
MD5_CTX md5context;
char digest_string[33]; /* 32 for digest in hex + null */
unsigned char digest[16];
int i, ret;
char *password = get_user(&USERENTRY_PASS, dcc[idx].user);

if (!password)
return 1;

snprintf(digest_string, 33, "<%lx%lx@", (long) getpid(),
(unsigned long) dcc[idx].timeval);
#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && defined(HAVE_EVP_MD5)
EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
const EVP_MD *md = EVP_md5();
unsigned int md_len;
EVP_DigestInit_ex(mdctx, md, NULL);
EVP_DigestUpdate(mdctx, digest_string, strlen(digest_string));
EVP_DigestUpdate(mdctx, botnetnick, strlen(botnetnick));
EVP_DigestUpdate(mdctx, ">", 1);
EVP_DigestUpdate(mdctx, password, strlen(password));
EVP_DigestFinal_ex(mdctx, digest, &md_len);
EVP_MD_CTX_free(mdctx);
#else
MD5_CTX md5context;
MD5_Init(&md5context);

egg_snprintf(digest_string, 33, "<%lx%lx@", (long) getpid(),
(unsigned long) dcc[idx].timeval);
MD5_Update(&md5context, (unsigned char *) digest_string,
strlen(digest_string));
MD5_Update(&md5context, (unsigned char *) botnetnick, strlen(botnetnick));
MD5_Update(&md5context, (unsigned char *) ">", 1);
MD5_Update(&md5context, (unsigned char *) password, strlen(password));

MD5_Final(digest, &md5context);
#endif

for (i = 0; i < 16; i++)
sprintf(digest_string + (i * 2), "%.2x", digest[i]);

ret = strcmp(digest_string, remote_digest);
explicit_bzero(digest_string, sizeof digest_string);
explicit_bzero(digest, sizeof digest);
Expand Down
1 change: 0 additions & 1 deletion src/tcl.c
Expand Up @@ -1043,7 +1043,6 @@ void init_tcl(int argc, char **argv)
add_tcl_commands(tcluser_cmds);
add_tcl_commands(tcldcc_cmds);
add_tcl_commands(tclmisc_cmds);
add_tcl_objcommands(tclmisc_objcmds);
add_tcl_commands(tcldns_cmds);
#ifdef TLS
add_tcl_commands(tcltls_cmds);
Expand Down
37 changes: 18 additions & 19 deletions src/tclmisc.c
Expand Up @@ -705,26 +705,29 @@ static int tcl_stripcodes STDVAR
return TCL_OK;
}

static int tcl_md5(cd, irp, objc, objv)
ClientData cd;
Tcl_Interp *irp;
int objc;
Tcl_Obj *CONST objv[];
static int tcl_md5 STDVAR
{
MD5_CTX md5context;
char digest_string[33], *string;
char digest_string[33];
unsigned char digest[16];
int i, len;
int i;

if (objc != 2) {
Tcl_WrongNumArgs(irp, 1, objv, "string");
return TCL_ERROR;
}
string = Tcl_GetStringFromObj(objv[1], &len);
BADARGS(2, 2, " string");

#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && defined(HAVE_EVP_MD5)
EVP_MD_CTX *mdctx = EVP_MD_CTX_new();
const EVP_MD *md = EVP_md5();
unsigned int md_len;
EVP_DigestInit_ex(mdctx, md, NULL);
EVP_DigestUpdate(mdctx, argv[1], strlen(argv[1]));
EVP_DigestFinal_ex(mdctx, digest, &md_len);
EVP_MD_CTX_free(mdctx);
#else
MD5_CTX md5context;
MD5_Init(&md5context);
MD5_Update(&md5context, (unsigned char *) string, len);
MD5_Update(&md5context, (unsigned char *) argv[1], strlen(argv[1]));
MD5_Final(digest, &md5context);
#endif

for (i = 0; i < 16; i++)
sprintf(digest_string + (i * 2), "%.2x", digest[i]);
Tcl_AppendResult(irp, digest_string, NULL);
Expand Down Expand Up @@ -764,11 +767,6 @@ static int tcl_matchstr STDVAR
return TCL_OK;
}

tcl_cmds tclmisc_objcmds[] = {
{"md5", tcl_md5},
{NULL, NULL}
};

static int tcl_status STDVAR
{
char s[15];
Expand Down Expand Up @@ -860,5 +858,6 @@ tcl_cmds tclmisc_cmds[] = {
{"matchstr", tcl_matchstr},
{"status", tcl_status},
{"rfcequal", tcl_rfcequal},
{"md5", tcl_md5},
{NULL, NULL}
};

0 comments on commit a3274e6

Please sign in to comment.