diff --git a/include/xplhash.h b/include/xplhash.h index 244b708..f382394 100644 --- a/include/xplhash.h +++ b/include/xplhash.h @@ -36,6 +36,7 @@ typedef struct _xpl_hash_context { #define XPLHASH_MD5_LENGTH (16*2)+1 #define XPLHASH_SHA1_LENGTH (20*2)+1 +void XplInit(void); void XplHashInit(void); void XplHashNew(xpl_hash_context *ctx, xpl_hash_type type); diff --git a/src/agents/addressbook/addressbook.c b/src/agents/addressbook/addressbook.c index e262540..797a0aa 100644 --- a/src/agents/addressbook/addressbook.c +++ b/src/agents/addressbook/addressbook.c @@ -265,6 +265,7 @@ XplServiceMain(int argc, char *argv[]) MsgGetUnprivilegedUser()); return -1; } + XplInit(); /* Initialize the Bongo libraries */ ccode = BongoAgentInit(&AddressbookAgent.agent, AGENT_NAME, AGENT_DN, (30 * 60)); diff --git a/src/agents/alarm/alarm.c b/src/agents/alarm/alarm.c index 711529f..d1f1007 100644 --- a/src/agents/alarm/alarm.c +++ b/src/agents/alarm/alarm.c @@ -392,6 +392,7 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf(AGENT_NAME ": Could not drop to unprivileged user '%s'\r\n" AGENT_NAME ": exiting.\n", MsgGetUnprivilegedUser()); return -1; } + XplInit(); /* Initialize the Bongo libraries */ ccode = BongoAgentInit(&Alarm.agent, AGENT_NAME, AGENT_DN, DEFAULT_CONNECTION_TIMEOUT); diff --git a/src/agents/antispam/antispam.c b/src/agents/antispam/antispam.c index a588728..3c0ce9a 100644 --- a/src/agents/antispam/antispam.c +++ b/src/agents/antispam/antispam.c @@ -942,6 +942,7 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf("bongoantispam: Could not drop to unprivileged user '%s', exiting.\n", MsgGetUnprivilegedUser()); return(1); } + XplInit(); XplSignalHandler(SignalHandler); diff --git a/src/agents/avirus/avirus.c b/src/agents/avirus/avirus.c index 090fea4..56e107a 100755 --- a/src/agents/avirus/avirus.c +++ b/src/agents/avirus/avirus.c @@ -1364,6 +1364,7 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf("antivirus: Could not drop to unprivileged user '%s', exiting.\n", MsgGetUnprivilegedUser()); return(1); } + XplInit(); XplSignalHandler(SignalHandler); diff --git a/src/agents/calcmd/calcmdd.c b/src/agents/calcmd/calcmdd.c index 4ded19c..0c6c19d 100644 --- a/src/agents/calcmd/calcmdd.c +++ b/src/agents/calcmd/calcmdd.c @@ -519,6 +519,7 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf(AGENT_NAME ": Could not drop to unprivileged user '%s'\r\n" AGENT_NAME ": exiting.\n", MsgGetUnprivilegedUser()); return -1; } + XplInit(); strcpy(CalCmdAgent.nmapAddress, "127.0.0.1"); diff --git a/src/agents/collector/collector.c b/src/agents/collector/collector.c index 892a93d..4e2cd40 100644 --- a/src/agents/collector/collector.c +++ b/src/agents/collector/collector.c @@ -98,6 +98,7 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf(AGENT_NAME ": Could not drop to unprivileged user '%s'\r\n" AGENT_NAME ": exiting.\n", MsgGetUnprivilegedUser()); return -1; } + XplInit(); /* Initialize the Bongo libraries */ ccode = BongoAgentInit(&Collector.agent, AGENT_NAME, AGENT_DN, DEFAULT_CONNECTION_TIMEOUT); diff --git a/src/agents/connmgr/connmgr.c b/src/agents/connmgr/connmgr.c index c8ad753..109fbb2 100644 --- a/src/agents/connmgr/connmgr.c +++ b/src/agents/connmgr/connmgr.c @@ -324,23 +324,18 @@ HandleConnection(void *param) } if (!found) { - MD5_CTX md5; - unsigned char handle[32 + 1]; - unsigned char digest[16]; + xpl_hash_context ctx; + unsigned char handle[XPLHASH_MD5_LENGTH]; XplRWReadLockRelease(&ConnMgr.authHandles.lock); snprintf(salt, sizeof(salt), "%x%s%x", XplGetThreadID(), ConnMgr.server.host, (unsigned int)time(NULL)); salt[sizeof(salt) - 1] = 0; - MD5_Init(&md5); - MD5_Update(&md5, salt, strlen(salt)); - MD5_Update(&md5, ConnMgr.server.hash, CM_HASH_SIZE); - MD5_Final(digest, &md5); - - for (i = 0; i < 16; i++) { - sprintf(handle + (i * 2), "%02x", digest[i]); - } + XplHashNew(&ctx, XPLHASH_MD5); + XplHashWrite(&ctx, salt, strlen(salt)); + XplHashWrite(&ctx, ConnMgr.server.hash, CM_HASH_SIZE); + XplHashFinal(&ctx, XPLHASH_LOWERCASE, handle, XPLHASH_MD5_LENGTH); XplRWWriteLockAcquire(&ConnMgr.authHandles.lock); /* Generate the salt and the pass */ @@ -1189,6 +1184,7 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf("bongoconnmgr: Could not drop to unprivileged user '%s', exiting.\n", MsgGetUnprivilegedUser()); return(-1); } + XplInit(); ConnMgr.id.main = XplGetThreadID(); ConnMgr.id.group = XplGetThreadGroupID(); diff --git a/src/agents/dmc/dmc.c b/src/agents/dmc/dmc.c index 142560b..10fb9f7 100644 --- a/src/agents/dmc/dmc.c +++ b/src/agents/dmc/dmc.c @@ -1830,10 +1830,9 @@ DMCCommandRegister(void *param) unsigned char *ptr; unsigned char *ptr2; unsigned char salt[(8 * sizeof(unsigned long)) + 1]; - unsigned char digest[16]; - unsigned char signature[(sizeof(digest) * 2) + 1]; + unsigned char signature[XPLHASH_MD5_LENGTH]; unsigned char identity[MDB_MAX_OBJECT_CHARS + 1]; - MD5_CTX mdContext; + xpl_hash_context ctx; DMCClient *client = param; if (client->state == CLIENT_STATE_FRESH) { @@ -1863,15 +1862,11 @@ DMCCommandRegister(void *param) && ((ccode = ConnFlush(client->user)) != -1) && ((ccode = ConnReadAnswer(client->user, client->buffer, CONN_BUFSIZE)) != -1) && (strlen(client->buffer) == sizeof(signature) - 1)) { - MD5_Init(&mdContext); - MD5_Update(&mdContext, salt, strlen(salt)); - MD5_Update(&mdContext, DMC.credential, NMAP_HASH_SIZE); - MD5_Update(&mdContext, identity, strlen(identity)); - MD5_Final(digest, &mdContext); - - for (i = 0; i < sizeof(digest); i++) { - sprintf(signature + (i * 2),"%02x", digest[i]); - } + XplHashNew(&ctx, XPLHASH_MD5); + XplHashWrite(&ctx, salt, strlen(salt)); + XplHashWrite(&ctx, DMC.credential, NMAP_HASH_SIZE); + XplHashWrite(&ctx, identity, strlen(identity)); + XplHashFinal(&ctx, XPLHASH_LOWERCASE, signature, XPLHASH_MD5_LENGTH); if ((strcmp(signature, client->buffer) == 0) && (AddManagedAgent(client, identity, (short) port, (short) sslPort, signature) != -1)) { @@ -3582,6 +3577,7 @@ int XplServiceMain(int argc, char *argv[]) int ccode; XplThreadID id; + XplInit(); if (XplSetEffectiveUser(MsgGetUnprivilegedUser()) < 0) { XplConsolePrintf("bongodmc: Could not drop to unprivileged user '%s', exiting.\n", MsgGetUnprivilegedUser()); return 1; @@ -3758,9 +3754,8 @@ DMCCommandAuth(void *param) { int i; unsigned char *ptr; - unsigned char digest[16]; - unsigned char credential[33]; - MD5_CTX mdContext; + xpl_hash_context ctx; + unsigned char credential[XPLHASH_MD5_LENGTH]; DMCClient *client = param; int ccode = -1; @@ -3769,13 +3764,10 @@ DMCCommandAuth(void *param) ptr = strchr(client->buffer + 5, ' '); if (!ptr) { ptr = &client->buffer[5]; - MD5_Init(&mdContext); - MD5_Update(&mdContext, DMC.rdn, strlen(DMC.rdn)); - MD5_Update(&mdContext, DMC.credential, DMC_HASH_SIZE); - MD5_Final(digest, &mdContext); - for (i = 0; i < 16; i++) { - sprintf(credential + (i * 2), "%02x", digest[i]); - } + XplHashNew(&ctx, XPLHASH_MD5); + XplHashWrite(&ctx, DMC.rdn, strlen(DMC.rdn)); + XplHashWrite(&ctx, DMC.credential, DMC_HASH_SIZE); + XplHashFinal(&ctx, XPLHASH_LOWERCASE, credential, XPLHASH_MD5_LENGTH); if (QuickCmp(credential, ptr)) { for (i = 0; i < (int) DMC.server.managed.count; i++) { if (XplStrCaseCmp( diff --git a/src/agents/generic/generic.c b/src/agents/generic/generic.c index 19fb785..58bddf1 100755 --- a/src/agents/generic/generic.c +++ b/src/agents/generic/generic.c @@ -193,6 +193,7 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf(AGENT_NAME ": Could not drop to unprivileged user '%s'\r\n" AGENT_NAME ": exiting.\n", MsgGetUnprivilegedUser()); return -1; } + XplInit(); strcpy(GAgent.nmapAddress, "127.0.0.1"); diff --git a/src/agents/imap/imapd.c b/src/agents/imap/imapd.c index 8a0ad00..8e839f5 100644 --- a/src/agents/imap/imapd.c +++ b/src/agents/imap/imapd.c @@ -4319,6 +4319,7 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf("bongoimap: Could not drop to unprivileged user '%s', exiting.\n", MsgGetUnprivilegedUser()); return 1; } + XplInit(); XplSignalHandler(IMAPShutdownSigHandler); diff --git a/src/agents/itip/itip.c b/src/agents/itip/itip.c index b938040..25f6dab 100644 --- a/src/agents/itip/itip.c +++ b/src/agents/itip/itip.c @@ -430,6 +430,7 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf(AGENT_NAME ": Could not drop to unprivileged user '%s'\r\n" AGENT_NAME ": exiting.\n", MsgGetUnprivilegedUser()); return -1; } + XplInit(); strcpy(ItipAgent.nmapAddress, "127.0.0.1"); diff --git a/src/agents/mailprox/mailprox.c b/src/agents/mailprox/mailprox.c index 54e7a2e..f3bcfd9 100644 --- a/src/agents/mailprox/mailprox.c +++ b/src/agents/mailprox/mailprox.c @@ -985,6 +985,7 @@ XplServiceMain(int argc, char *argv[]) XplThreadID id; XplSignalHandler(SignalHandler); + XplInit(); MailProxy.force = FALSE; MailProxy.runInterval = 3600 * 3; diff --git a/src/agents/pluspack/pluspack.c b/src/agents/pluspack/pluspack.c index fb032dd..0e904e6 100644 --- a/src/agents/pluspack/pluspack.c +++ b/src/agents/pluspack/pluspack.c @@ -1629,6 +1629,7 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf("bongopluspack: Could not drop to unprivileged user '%s', exiting.\n", MsgGetUnprivilegedUser()); return(1); } + XplInit(); XplSignalHandler(SignalHandler); diff --git a/src/agents/pop/pop3.c b/src/agents/pop/pop3.c index 1173f0c..c5f83f8 100644 --- a/src/agents/pop/pop3.c +++ b/src/agents/pop/pop3.c @@ -2561,6 +2561,7 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf("bongopop3: Could not drop to unprivileged user '%s', exiting.\n", MsgGetUnprivilegedUser()); return 1; } + XplInit(); POP3.id.main = XplGetThreadID(); POP3.id.group = XplGetThreadGroupID(); diff --git a/src/agents/queue/queued.c b/src/agents/queue/queued.c index 764cca2..292dc01 100644 --- a/src/agents/queue/queued.c +++ b/src/agents/queue/queued.c @@ -540,6 +540,8 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf(AGENT_NAME ": Could not drop to unprivileged user '%s'\r\n" AGENT_NAME ": exiting.\n", MsgGetUnprivilegedUser()); return -1; } + + XplInit(); /* Set the default port */ Agent.agent.port = BONGO_QUEUE_PORT; @@ -570,8 +572,6 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf(AGENT_NAME ": Exiting.\r\n"); return -1; } - - XplHashInit(); LoadProtocolCommandTree(&Agent.authCommands, authCommands); LoadProtocolCommandTree(&Agent.commands, commands); diff --git a/src/agents/rules/rules.c b/src/agents/rules/rules.c index 248d06a..b4b2fbc 100644 --- a/src/agents/rules/rules.c +++ b/src/agents/rules/rules.c @@ -2241,6 +2241,7 @@ XplServiceMain(int argc, char *argv[]) XplConsolePrintf("bongorules: Could not drop to unprivileged user '%s', exiting.\n", MsgGetUnprivilegedUser()); return(1); } + XplInit(); XplSignalHandler(SignalHandler); diff --git a/src/agents/smtp/smtpd.c b/src/agents/smtp/smtpd.c index 0face0b..8260a52 100644 --- a/src/agents/smtp/smtpd.c +++ b/src/agents/smtp/smtpd.c @@ -2826,10 +2826,8 @@ HandleConnection (void *param) case 4242:{ unsigned char *ptr, *salt; - MD5_CTX mdContext; - unsigned char digest[16]; - unsigned char HexDigest[33]; - int i; + xpl_hash_context ctx; + unsigned char digest[XPLHASH_MD5_LENGTH]; ptr = strchr (Answer, '<'); if (ptr) { @@ -2839,14 +2837,12 @@ HandleConnection (void *param) *ptr = '\0'; } - MD5_Init(&mdContext); - MD5_Update(&mdContext, salt, strlen(salt)); - MD5_Update(&mdContext, NMAPHash, NMAP_HASH_SIZE); - MD5_Final(digest, &mdContext); - for (i=0; i<16; i++) { - sprintf(HexDigest+(i*2),"%02x",digest[i]); - } - ReplyInt = sprintf(Answer, "AUTH SYSTEM %s\r\n", HexDigest); + XplHashNew(&ctx, XPLHASH_MD5); + XplHashWrite(&ctx, salt, strlen(salt)); + XplHashWrite(&ctx, NMAPHash, NMAP_HASH_SIZE); + XplHashFinal(&ctx, XPLHASH_LOWERCASE, digest, XPLHASH_MD5_LENGTH); + + ReplyInt = sprintf(Answer, "AUTH SYSTEM %s\r\n", digest); SendNMAPServer (Client, Answer, ReplyInt); if (GetNMAPAnswer (Client, Answer, sizeof (Answer), TRUE) == @@ -6994,10 +6990,8 @@ RegisterNMAPServer (void *QSIn) case 4242:{ unsigned char *ptr, *salt; - MD5_CTX mdContext; - unsigned char digest[16]; - unsigned char HexDigest[33]; - int i; + xpl_hash_context ctx; + unsigned char digest[XPLHASH_MD5_LENGTH]; ptr = strchr (Answer, '<'); if (ptr) { @@ -7007,14 +7001,12 @@ RegisterNMAPServer (void *QSIn) *ptr = '\0'; } - MD5_Init(&mdContext); - MD5_Update(&mdContext, salt, strlen(salt)); - MD5_Update(&mdContext, NMAPHash, NMAP_HASH_SIZE); - MD5_Final(digest, &mdContext); - for (i = 0; i < 16; i++) { - sprintf(HexDigest+(i*2),"%02x",digest[i]); - } - ReplyInt = sprintf(Answer, "AUTH SYSTEM %s\r\n", HexDigest); + XplHashNew(&ctx, XPLHASH_MD5); + XplHashWrite(&ctx, salt, strlen(salt)); + XplHashWrite(&ctx, NMAPHash, NMAP_HASH_SIZE); + XplHashFinal(&ctx, XPLHASH_LOWERCASE, digest, XPLHASH_MD5_LENGTH); + + ReplyInt = sprintf(Answer, "AUTH SYSTEM %s\r\n", digest); SendNMAPServer (Client, Answer, ReplyInt); if (GetNMAPAnswer (Client, Answer, sizeof (Answer), TRUE) == @@ -8750,6 +8742,7 @@ XplServiceCode (SMTPShutdownSigHandler) MsgGetUnprivilegedUser ()); return 1; } + XplInit(); XplSignalHandler (SMTPShutdownSigHandler); diff --git a/src/agents/store/stored.c b/src/agents/store/stored.c index 1cfbfb9..6a5050e 100644 --- a/src/agents/store/stored.c +++ b/src/agents/store/stored.c @@ -228,7 +228,7 @@ _XplServiceMain(int argc, char *argv[]) return -1; } - XplHashInit(); + XplInit(); strcpy(StoreAgent.nmapAddress, "127.0.0.1"); /* Initialize the Bongo libraries */ diff --git a/src/agents/store/tests/Bongo.rules b/src/agents/store/tests/Bongo.rules index 4e2b7ea..5945355 100644 --- a/src/agents/store/tests/Bongo.rules +++ b/src/agents/store/tests/Bongo.rules @@ -16,7 +16,6 @@ checktest_store_LDADD := $(CHECK_LIBS) \ libbongoutil.la \ libbongoxpl.la \ $(top_builddir)/import/log4c/log4c/libbongolog4c.la \ - $(GNUTLS_OPENSSL_LIBS) \ $(LIBSQLITE_LIBS) \ $(PTHREAD_LIBS) \ $(ALL_LIBS) @@ -42,7 +41,6 @@ mkauthhash_LDADD = \ libbongoxpl.la \ $(top_builddir)/import/log4c/log4c/libbongolog4c.la \ $(LIBSQLITE_LIBS) \ - $(GNUTLS_OPENSSL_LIBS) \ $(PTHREAD_LIBS) \ $(ALL_LIBS) diff --git a/src/agents/store/tests/mkauthhash.c b/src/agents/store/tests/mkauthhash.c index 99dcecd..d3eb787 100644 --- a/src/agents/store/tests/mkauthhash.c +++ b/src/agents/store/tests/mkauthhash.c @@ -1,7 +1,6 @@ #include #include #include -#include #include @@ -22,6 +21,7 @@ const int debugging = 0; int main (int argc, char** argv) { + XplInit(); if (argc != 2) { XplConsolePrintf("Usage: ./mkauthhash.c \n"); return 1; @@ -32,9 +32,8 @@ main (int argc, char** argv) { unsigned char access[NMAP_HASH_SIZE]; // from libs/nmap/nmap.c MDBHandle directoryHandle; // ditto MDBValueStruct *v; - unsigned char digest[16]; - unsigned char message[33]; - MD5_CTX context; + unsigned char message[XPLHASH_MD5_LENGTH]; + xpl_hash_context ctx; int i; BOOL ccode; @@ -87,16 +86,10 @@ main (int argc, char** argv) { MDBDestroyValueStruct(v); // mix access with salt - MD5_Init(&context); - MD5_Update(&context, argv[1], strlen(argv[1])); - MD5_Update(&context, access, NMAP_HASH_SIZE); - MD5_Final(digest, &context); - - // format and print the hash - for (i = 0; i<16; i++) { - sprintf(message + i*2, "%02x", digest[i]); - } - message[32] = '\0'; + XplHashNew(&ctx, XPLHASH_MD5); + XplHashWrite(&ctx, argv[1], strlen(argv[1])); + XplHashWrite(&ctx, access, NMAP_HASH_SIZE); + XplHashFinal(&ctx, XPLHASH_LOWERCASE, message, XPLHASH_MD5_LENGTH); XplConsolePrintf("%s\n", message); } return 0; diff --git a/src/libs/connmgr/connmgr.c b/src/libs/connmgr/connmgr.c index c41c0b8..9ed733e 100644 --- a/src/libs/connmgr/connmgr.c +++ b/src/libs/connmgr/connmgr.c @@ -31,7 +31,7 @@ struct { unsigned char access[CM_HASH_SIZE]; - unsigned char pass[32 + 1]; + unsigned char pass[XPLHASH_MD5_LENGTH]; MDBHandle directoryHandle; BOOL debug; @@ -82,21 +82,15 @@ CMSendCommand(ConnMgrCommand *command, ConnMgrResult *result) } if (result->result == CM_RESULT_MUST_AUTH) { - unsigned char digest[16]; - MD5_CTX context; - unsigned long i; + xpl_hash_context ctx; - /* Ensure that we don't walk off the edge of the buffer if garbage was sent */ + // Ensure that we don't walk off the edge of the buffer if garbage was sent result->detail.salt[sizeof(result->detail.salt) - 1] = '\0'; - MD5_Init(&context); - MD5_Update(&context, result->detail.salt, strlen(result->detail.salt)); - MD5_Update(&context, CMLibrary.access, CM_HASH_SIZE); - - MD5_Final(digest, &context); - for (i = 0; i < 16; i++) { - sprintf(command->pass + (i * 2), "%02x", digest[i]); - } + XplHashNew(&ctx, XPLHASH_MD5); + XplHashWrite(&ctx, result->detail.salt, strlen(result->detail.salt)); + XplHashWrite(&ctx, CMLibrary.access, CM_HASH_SIZE); + XplHashFinal(&ctx, XPLHASH_LOWERCASE, command->pass, XPLHASH_MD5_LENGTH); /* Store the password so we don't have to generate it every time */ XplRWWriteLockAcquire(&CMLibrary.lock); diff --git a/src/libs/connmgr/hashcred.c b/src/libs/connmgr/hashcred.c index bbbf900..d9aa49d 100644 --- a/src/libs/connmgr/hashcred.c +++ b/src/libs/connmgr/hashcred.c @@ -22,7 +22,6 @@ #if 0 #include #include -#include #include #include #include diff --git a/src/libs/management/managee.c b/src/libs/management/managee.c index 6b013e1..55c458e 100644 --- a/src/libs/management/managee.c +++ b/src/libs/management/managee.c @@ -878,7 +878,7 @@ ManagementDMCRegister(void) { int err; unsigned long used; - MD5_CTX mdContext; + xpl_hash_context ctx; unsigned char buffer[CONN_BUFSIZE + 1]; if (Management.dmc.pConn == NULL) { @@ -948,26 +948,14 @@ ManagementDMCRegister(void) } } if (err != -1) { - int i; - /* Generate and send our signature */ - MD5_Init(&mdContext); - MD5_Update(&mdContext, buffer, strlen(buffer)); - MD5_Update( - &mdContext, - Management.dmc.credential, - NMAP_HASH_SIZE); - MD5_Update( - &mdContext, - Management.server.dn, - strlen(Management.server.dn)); - MD5_Final(buffer, &mdContext); - for (i = 0; i < 16; i++) { - sprintf( - Management.server.signature + (i * 2), - "%02x", - buffer[i]); - } + XplHashNew(&ctx, XPLHASH_MD5); + XplHashWrite(&ctx, buffer, strlen(buffer)); + XplHashWrite(&ctx, Management.dmc.credential, NMAP_HASH_SIZE); + XplHashWrite(&ctx, Management.server.dn, strlen(Management.server.dn)); + XplHashFinal(&ctx, XPLHASH_LOWERCASE, + Management.server.signature, XPLHASH_MD5_LENGTH); + err = ConnWriteF( Management.dmc.pConn, "%s\r\n", diff --git a/src/libs/msgapi/msgapi.c b/src/libs/msgapi/msgapi.c index 56f82bf..12e2dfd 100644 --- a/src/libs/msgapi/msgapi.c +++ b/src/libs/msgapi/msgapi.c @@ -645,13 +645,11 @@ MsgDomainExists(const unsigned char *domain, unsigned char *domainObjectDN) EXPORT void MsgNmapChallenge(const unsigned char *response, unsigned char *reply, size_t length) { - int i; unsigned char *ptr; unsigned char *salt; - unsigned char digest[16]; static unsigned char access[NMAP_HASH_SIZE] = { '\0' }; - MD5_CTX context; MDBValueStruct *v; + xpl_hash_context ctx; if (access[0] == '\0') { if (MsgGlobal.directoryHandle) { @@ -674,20 +672,10 @@ MsgNmapChallenge(const unsigned char *response, unsigned char *reply, size_t len *ptr = '\0'; } - MD5_Init(&context); - - MD5_Update(&context, salt, strlen(salt)); - MD5_Update(&context, access, NMAP_HASH_SIZE); - - MD5_Final(digest, &context); - - ptr = reply; - for (i = 0; i < 16; i++) { - sprintf(ptr, "%02x", digest[i]); - - ptr += 2; - } - *ptr = '\0'; + XplHashNew(&ctx, XPLHASH_MD5); + XplHashWrite(&ctx, salt, strlen(salt)); + XplHashWrite(&ctx, access, NMAP_HASH_SIZE); + XplHashFinal(&ctx, XPLHASH_LOWERCASE, reply, XPLHASH_MD5_LENGTH); } else if (reply) { *reply = '\0'; } diff --git a/src/libs/nmap/hashcred.c b/src/libs/nmap/hashcred.c index 1209de2..08f3e60 100644 --- a/src/libs/nmap/hashcred.c +++ b/src/libs/nmap/hashcred.c @@ -22,7 +22,6 @@ #if 0 #include #include -#include #include #include #include diff --git a/src/libs/nmap/nmap.c b/src/libs/nmap/nmap.c index a8fcb2e..8197900 100644 --- a/src/libs/nmap/nmap.c +++ b/src/libs/nmap/nmap.c @@ -1451,12 +1451,10 @@ NMAPAuthenticateToStore(Connection *conn, unsigned char *response, int length) } case 4242: { - int i; - unsigned char *ptr; - unsigned char *salt; - unsigned char digest[16]; - unsigned char message[33]; - MD5_CTX context; + unsigned char *ptr; + unsigned char *salt; + unsigned char message[XPLHASH_MD5_LENGTH]; + xpl_hash_context ctx; ptr = strchr(response, '<'); if (ptr) { @@ -1466,26 +1464,19 @@ NMAPAuthenticateToStore(Connection *conn, unsigned char *response, int length) *ptr = '\0'; } - MD5_Init(&context); - - MD5_Update(&context, salt, strlen(salt)); - MD5_Update(&context, NMAPLibrary.access, NMAP_HASH_SIZE); - - MD5_Final(digest, &context); + XplHashNew(&ctx, XPLHASH_MD5); + XplHashWrite(&ctx, salt, strlen(salt)); + XplHashWrite(&ctx, NMAPLibrary.access, NMAP_HASH_SIZE); + XplHashFinal(&ctx, XPLHASH_LOWERCASE, message, XPLHASH_MD5_LENGTH); NMAPEncrypt(conn, response, length, FALSE); ConnWrite(conn, "AUTH SYSTEM ", 12); - - for (i = 0; i < 16; i++) { - sprintf(message + (i * 2), "%02x", digest[i]); - } - ConnWrite(conn, message, 32); ConnWrite(conn, "\r\n", 2); - if ((i = ConnFlush(conn)) == 46) { - if ((i = NMAPReadAnswer(conn, response, length, TRUE)) == 1000) { + if ((ccode = ConnFlush(conn)) == 46) { + if ((ccode = NMAPReadAnswer(conn, response, length, TRUE)) == 1000) { return(TRUE); } } @@ -1518,12 +1509,10 @@ NMAPAuthenticate(Connection *conn, unsigned char *response, int length) } case 4242: { - int i; - unsigned char *ptr; - unsigned char *salt; - unsigned char digest[16]; - unsigned char message[33]; - MD5_CTX context; + unsigned char *ptr; + unsigned char *salt; + unsigned char message[XPLHASH_MD5_LENGTH]; + xpl_hash_context ctx; ptr = strchr(response, '<'); if (ptr) { @@ -1533,26 +1522,19 @@ NMAPAuthenticate(Connection *conn, unsigned char *response, int length) *ptr = '\0'; } - MD5_Init(&context); - - MD5_Update(&context, salt, strlen(salt)); - MD5_Update(&context, NMAPLibrary.access, NMAP_HASH_SIZE); - - MD5_Final(digest, &context); + XplHashNew(&ctx, XPLHASH_MD5); + XplHashWrite(&ctx, salt, strlen(salt)); + XplHashWrite(&ctx, NMAPLibrary.access, NMAP_HASH_SIZE); + XplHashFinal(&ctx, XPLHASH_LOWERCASE, message, XPLHASH_MD5_LENGTH); NMAPEncrypt(conn, response, length, FALSE); ConnWrite(conn, "AUTH SYSTEM ", 12); - - for (i = 0; i < 16; i++) { - sprintf(message + (i * 2), "%02x", digest[i]); - } - ConnWrite(conn, message, 32); ConnWrite(conn, "\r\n", 2); - if ((i = ConnFlush(conn)) == 46) { - if ((i = NMAPReadAnswer(conn, response, length, TRUE)) == 1000) { + if ((ccode = ConnFlush(conn)) == 46) { + if ((ccode = NMAPReadAnswer(conn, response, length, TRUE)) == 1000) { return(TRUE); } } diff --git a/src/libs/xpl/hash.c b/src/libs/xpl/hash.c index 673e53a..5bba566 100644 --- a/src/libs/xpl/hash.c +++ b/src/libs/xpl/hash.c @@ -11,10 +11,19 @@ #include GCRY_THREAD_OPTION_PTHREAD_IMPL; +/** + * Initialise the XPL library. Should be called once in each program that + * uses XPL. + */ +void +XplInit(void) +{ + XplHashInit(); +} + /** - * Initialise the hashing subsystem for a program. Call this once at the - * start of the program before using hash functions - this is needed to - * ensure thread safety. + * Initialise the hashing subsystem for a program. This is usually part of + * the XplInit() process - this is sort-of private. */ void XplHashInit(void)