Removing last vestiges of OpenSSL MD5 API - new XplHash is used. This should fix most segfaults now.

Task #4626 is mostly complete with this.
This commit is contained in:
alexhudson
2007-01-25 11:53:32 +00:00
parent c9afb7facc
commit 77250215b0
28 changed files with 114 additions and 169 deletions
+1
View File
@@ -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);
+1
View File
@@ -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));
+1
View File
@@ -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);
+1
View File
@@ -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);
+1
View File
@@ -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);
+1
View File
@@ -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");
+1
View File
@@ -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);
+7 -11
View File
@@ -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();
+14 -22
View File
@@ -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(
+1
View File
@@ -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");
+1
View File
@@ -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);
+1
View File
@@ -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");
+1
View File
@@ -985,6 +985,7 @@ XplServiceMain(int argc, char *argv[])
XplThreadID id;
XplSignalHandler(SignalHandler);
XplInit();
MailProxy.force = FALSE;
MailProxy.runInterval = 3600 * 3;
+1
View File
@@ -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);
+1
View File
@@ -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();
+2 -2
View File
@@ -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);
+1
View File
@@ -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);
+17 -24
View File
@@ -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);
+1 -1
View File
@@ -228,7 +228,7 @@ _XplServiceMain(int argc, char *argv[])
return -1;
}
XplHashInit();
XplInit();
strcpy(StoreAgent.nmapAddress, "127.0.0.1");
/* Initialize the Bongo libraries */
-2
View File
@@ -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)
+7 -14
View File
@@ -1,7 +1,6 @@
#include <config.h>
#include <xpl.h>
#include <bongoutil.h>
#include <gnutls/openssl.h>
#include <memmgr.h>
@@ -22,6 +21,7 @@ const int debugging = 0;
int
main (int argc, char** argv) {
XplInit();
if (argc != 2) {
XplConsolePrintf("Usage: ./mkauthhash.c <salt>\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;
+7 -13
View File
@@ -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);
-1
View File
@@ -22,7 +22,6 @@
#if 0
#include <config.h>
#include <xpl.h>
#include <gnutls/openssl.h>
#include <msgapi.h>
#include <gatekeeper.h>
#include <gklib.h>
+8 -20
View File
@@ -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",
+5 -17
View File
@@ -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';
}
-1
View File
@@ -22,7 +22,6 @@
#if 0
#include <config.h>
#include <xpl.h>
#include <gnutls/openssl.h>
#include <msgapi.h>
#include <nmap.h>
#include <nmlib.h>
+20 -38
View File
@@ -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);
}
}
+12 -3
View File
@@ -11,10 +11,19 @@
#include <gcrypt.h>
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)