Skip to content

Commit b3fa87d

Browse files
committed
Fix NetBSD build by renaming the hmac function to avoid conflicts
1 parent 96e21b0 commit b3fa87d

File tree

3 files changed

+76
-3
lines changed

3 files changed

+76
-3
lines changed

CHANGES

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
DD MMM YYYY - 2.9.3 - To be released
22
------------------------------------
33

4+
* Fix NetBSD build by renaming the hmac function to avoid conflicts
5+
[Issue #1241 - @victorhora, @joerg, @sevan]
46
* IIS: Windows build, fix duplicate YAJL dir in script
57
[Issue #1612 - @allanbomsft, @victorhora]
68
* IIS: Remove body prebuffering due to no locking in modsecProcessRequest

apache2/msc_crypt.c

Lines changed: 69 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,13 @@ char *getkey(apr_pool_t *mp) {
188188
*
189189
* \retval hex_digest The MAC
190190
*/
191+
#ifdef __NetBSD__
192+
char *mschmac(modsec_rec *msr, const char *key, int key_len,
193+
unsigned char *msg, int msglen) {
194+
#else
191195
char *hmac(modsec_rec *msr, const char *key, int key_len,
192196
unsigned char *msg, int msglen) {
197+
#endif
193198
apr_sha1_ctx_t ctx;
194199
unsigned char digest[APR_SHA1_DIGESTSIZE];
195200
unsigned char hmac_ipad[HMAC_PAD_SIZE], hmac_opad[HMAC_PAD_SIZE];
@@ -1260,8 +1265,11 @@ char *do_hash_link(modsec_rec *msr, char *link, int type) {
12601265
}
12611266

12621267
if(msr->txcfg->crypto_key_add == HASH_KEYONLY)
1268+
#ifdef __NetBSD__
1269+
hash_value = mschmac(msr, msr->txcfg->crypto_key, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1270+
#else
12631271
hash_value = hmac(msr, msr->txcfg->crypto_key, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1264-
1272+
#endif
12651273
if(msr->txcfg->crypto_key_add == HASH_SESSIONID) {
12661274
if(msr->sessionid == NULL || strlen(msr->sessionid) == 0) {
12671275
#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
@@ -1272,13 +1280,21 @@ char *do_hash_link(modsec_rec *msr, char *link, int type) {
12721280
if (msr->txcfg->debuglog_level >= 4)
12731281
msr_log(msr, 4, "Session id is empty. Using REMOTE_IP");
12741282
msr->txcfg->crypto_key_len = strlen(new_pwd);
1283+
#ifdef __NetBSD__
1284+
hash_value = mschmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1285+
#else
12751286
hash_value = hmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1287+
#endif
12761288
} else {
12771289
const char *new_pwd = apr_psprintf(msr->mp,"%s%s", msr->txcfg->crypto_key, msr->sessionid);
12781290
if (msr->txcfg->debuglog_level >= 4)
12791291
msr_log(msr, 4, "Using session id [%s]", msr->sessionid);
12801292
msr->txcfg->crypto_key_len = strlen(new_pwd);
1293+
#ifdef __NetBSD__
1294+
hash_value = mschmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1295+
#else
12811296
hash_value = hmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1297+
#endif
12821298
}
12831299
}
12841300

@@ -1289,7 +1305,11 @@ char *do_hash_link(modsec_rec *msr, char *link, int type) {
12891305
const char *new_pwd = apr_psprintf(msr->mp,"%s%s", msr->txcfg->crypto_key, msr->r->connection->remote_ip);
12901306
#endif
12911307
msr->txcfg->crypto_key_len = strlen(new_pwd);
1308+
#ifdef __NetBSD__
1309+
hash_value = mschmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1310+
#else
12921311
hash_value = hmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1312+
#endif
12931313
}
12941314
} else {
12951315
return NULL;
@@ -1303,8 +1323,11 @@ char *do_hash_link(modsec_rec *msr, char *link, int type) {
13031323
}
13041324

13051325
if(msr->txcfg->crypto_key_add == HASH_KEYONLY)
1326+
#ifdef __NetBSD__
1327+
hash_value = mschmac(msr, msr->txcfg->crypto_key, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1328+
#else
13061329
hash_value = hmac(msr, msr->txcfg->crypto_key, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1307-
1330+
#endif
13081331
if(msr->txcfg->crypto_key_add == HASH_SESSIONID) {
13091332
if(msr->sessionid == NULL || strlen(msr->sessionid) == 0) {
13101333
#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
@@ -1315,13 +1338,21 @@ char *do_hash_link(modsec_rec *msr, char *link, int type) {
13151338
if (msr->txcfg->debuglog_level >= 4)
13161339
msr_log(msr, 4, "Session id is empty. Using REMOTE_IP");
13171340
msr->txcfg->crypto_key_len = strlen(new_pwd);
1341+
#ifdef __NetBSD__
1342+
hash_value = mschmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1343+
#else
13181344
hash_value = hmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1345+
#endif
13191346
} else {
13201347
const char *new_pwd = apr_psprintf(msr->mp,"%s%s", msr->txcfg->crypto_key, msr->sessionid);
13211348
if (msr->txcfg->debuglog_level >= 4)
13221349
msr_log(msr, 4, "Using session id [%s]", msr->sessionid);
13231350
msr->txcfg->crypto_key_len = strlen(new_pwd);
1351+
#ifdef __NetBSD__
1352+
hash_value = mschmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1353+
#else
13241354
hash_value = hmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1355+
#endif
13251356
}
13261357
}
13271358

@@ -1332,7 +1363,11 @@ char *do_hash_link(modsec_rec *msr, char *link, int type) {
13321363
const char *new_pwd = apr_psprintf(msr->mp,"%s%s", msr->txcfg->crypto_key, msr->r->connection->remote_ip);
13331364
#endif
13341365
msr->txcfg->crypto_key_len = strlen(new_pwd);
1366+
#ifdef __NetBSD__
1367+
hash_value = mschmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1368+
#else
13351369
hash_value = hmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) path_chunk+1, strlen((char*)path_chunk)-1);
1370+
#endif
13361371
}
13371372
} else {
13381373
return NULL;
@@ -1344,8 +1379,11 @@ char *do_hash_link(modsec_rec *msr, char *link, int type) {
13441379
}
13451380

13461381
if(msr->txcfg->crypto_key_add == HASH_KEYONLY)
1382+
#ifdef __NetBSD__
1383+
hash_value = mschmac(msr, msr->txcfg->crypto_key, msr->txcfg->crypto_key_len, (unsigned char *) link+1, strlen((char*)link)-1);
1384+
#else
13471385
hash_value = hmac(msr, msr->txcfg->crypto_key, msr->txcfg->crypto_key_len, (unsigned char *) link+1, strlen((char*)link)-1);
1348-
1386+
#endif
13491387
if(msr->txcfg->crypto_key_add == HASH_SESSIONID) {
13501388
if(msr->sessionid == NULL || strlen(msr->sessionid) == 0) {
13511389
#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
@@ -1356,13 +1394,21 @@ char *do_hash_link(modsec_rec *msr, char *link, int type) {
13561394
if (msr->txcfg->debuglog_level >= 4)
13571395
msr_log(msr, 4, "Session id is empty. Using REMOTE_IP");
13581396
msr->txcfg->crypto_key_len = strlen(new_pwd);
1397+
#ifdef __NetBSD__
1398+
hash_value = mschmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) link+1, strlen((char*)link)-1);
1399+
#else
13591400
hash_value = hmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) link+1, strlen((char*)link)-1);
1401+
#endif
13601402
} else {
13611403
const char *new_pwd = apr_psprintf(msr->mp,"%s%s", msr->txcfg->crypto_key, msr->sessionid);
13621404
if (msr->txcfg->debuglog_level >= 4)
13631405
msr_log(msr, 4, "Using session id [%s]", msr->sessionid);
13641406
msr->txcfg->crypto_key_len = strlen(new_pwd);
1407+
#ifdef __NetBSD__
1408+
hash_value = mschmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) link+1, strlen((char*)link)-1);
1409+
#else
13651410
hash_value = hmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) link+1, strlen((char*)link)-1);
1411+
#endif
13661412
}
13671413
}
13681414

@@ -1373,7 +1419,11 @@ char *do_hash_link(modsec_rec *msr, char *link, int type) {
13731419
const char *new_pwd = apr_psprintf(msr->mp,"%s%s", msr->txcfg->crypto_key, msr->r->connection->remote_ip);
13741420
#endif
13751421
msr->txcfg->crypto_key_len = strlen(new_pwd);
1422+
#ifdef __NetBSD__
1423+
hash_value = mschmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) link+1, strlen((char*)link)-1);
1424+
#else
13761425
hash_value = hmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) link+1, strlen((char*)link)-1);
1426+
#endif
13771427
}
13781428

13791429
}
@@ -1398,7 +1448,11 @@ char *do_hash_link(modsec_rec *msr, char *link, int type) {
13981448
}
13991449

14001450
if(msr->txcfg->crypto_key_add == HASH_KEYONLY)
1451+
#ifdef __NetBSD__
1452+
hash_value = mschmac(msr, msr->txcfg->crypto_key, msr->txcfg->crypto_key_len, (unsigned char *) relative_link, strlen((char*)relative_link));
1453+
#else
14011454
hash_value = hmac(msr, msr->txcfg->crypto_key, msr->txcfg->crypto_key_len, (unsigned char *) relative_link, strlen((char*)relative_link));
1455+
#endif
14021456

14031457
if(msr->txcfg->crypto_key_add == HASH_SESSIONID) {
14041458
if(msr->sessionid == NULL || strlen(msr->sessionid) == 0) {
@@ -1410,13 +1464,21 @@ char *do_hash_link(modsec_rec *msr, char *link, int type) {
14101464
if (msr->txcfg->debuglog_level >= 4)
14111465
msr_log(msr, 4, "Session id is empty. Using REMOTE_IP");
14121466
msr->txcfg->crypto_key_len = strlen(new_pwd);
1467+
#ifdef __NetBSD__
1468+
hash_value = mschmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) relative_link, strlen((char*)relative_link));
1469+
#else
14131470
hash_value = hmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) relative_link, strlen((char*)relative_link));
1471+
#endif
14141472
} else {
14151473
const char *new_pwd = apr_psprintf(msr->mp,"%s%s", msr->txcfg->crypto_key, msr->sessionid);
14161474
if (msr->txcfg->debuglog_level >= 4)
14171475
msr_log(msr, 4, "Using session id [%s]", msr->sessionid);
14181476
msr->txcfg->crypto_key_len = strlen(new_pwd);
1477+
#ifdef __NetBSD__
1478+
hash_value = mschmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) relative_link, strlen((char*)relative_link));
1479+
#else
14191480
hash_value = hmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) relative_link, strlen((char*)relative_link));
1481+
#endif
14201482
}
14211483
}
14221484

@@ -1427,7 +1489,11 @@ char *do_hash_link(modsec_rec *msr, char *link, int type) {
14271489
const char *new_pwd = apr_psprintf(msr->mp,"%s%s", msr->txcfg->crypto_key, msr->r->connection->remote_ip);
14281490
#endif
14291491
msr->txcfg->crypto_key_len = strlen(new_pwd);
1492+
#ifdef __NetBSD__
1493+
hash_value = mschmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) relative_link, strlen((char*)relative_link));
1494+
#else
14301495
hash_value = hmac(msr, new_pwd, msr->txcfg->crypto_key_len, (unsigned char *) relative_link, strlen((char*)relative_link));
1496+
#endif
14311497
}
14321498

14331499
link = relative_uri;

apache2/msc_crypt.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,13 @@
2727
#define INT32_MAX (2147483647)
2828
#endif
2929

30+
#ifdef __NetBSD__
31+
char DSOLOCAL *mschmac(modsec_rec *msr, const char *key, int key_len,
32+
unsigned char *msg, int msglen);
33+
#else
3034
char DSOLOCAL *hmac(modsec_rec *msr, const char *key, int key_len,
3135
unsigned char *msg, int msglen);
36+
#endif
3237
char DSOLOCAL *do_hash_link(modsec_rec *msr, char *link,
3338
int type);
3439
char DSOLOCAL *getkey(apr_pool_t *mp);

0 commit comments

Comments
 (0)