1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
/*
* Copyright (C) 1996-2025 The Squid Software Foundation and contributors
*
* Squid software is distributed under GPLv2+ license and includes
* contributions from numerous individuals and organizations.
* Please see the COPYING and CONTRIBUTORS files for details.
*/
#ifndef SQUID_LIBNTLMAUTH_SUPPORT_BITS_CCI
#define SQUID_LIBNTLMAUTH_SUPPORT_BITS_CCI
#include <cstring>
/*
* Defines several functions which are used and mutually shared by the NTLM helpers
* These do not (yet) have a defined stable home to go to.
* For now include this file into helper main .cc where needed.
*/
/* makes a null-terminated string upper-case. Changes CONTENTS! */
inline void
uc(char *string)
{
char *p = string, c;
while ((c = *p)) {
*p = xtoupper(c);
++p;
}
}
/* makes a null-terminated string lower-case. Changes CONTENTS! */
inline void
lc(char *string)
{
char *p = string, c;
while ((c = *p)) {
*p = xtolower(c);
++p;
}
}
inline void
hex_dump(unsigned char *data, int size)
{
/* dumps size bytes of *data to stdout. Looks like:
* [0000] 75 6E 6B 6E 6F 77 6E 20
* 30 FF 00 00 00 00 39 00 unknown 0.....9.
* (in a single line of course)
*/
if (!data)
return;
if (debug_enabled) {
unsigned char *p = data;
unsigned char c;
int n;
char bytestr[4] = {0};
char addrstr[10] = {0};
char hexstr[16 * 3 + 5] = {0};
char charstr[16 * 1 + 5] = {0};
for (n = 1; n <= size; ++n) {
if (n % 16 == 1) {
/* store address for this line */
snprintf(addrstr, sizeof(addrstr), "%.4x", (int) (p - data));
}
c = *p;
if (xisalnum(c) == 0) {
c = '.';
}
/* store hex str (for left side) */
snprintf(bytestr, sizeof(bytestr), "%02X ", *p);
strncat(hexstr, bytestr, sizeof(hexstr) - strlen(hexstr) - 1);
/* store char str (for right side) */
snprintf(bytestr, sizeof(bytestr), "%c", c);
strncat(charstr, bytestr, sizeof(charstr) - strlen(charstr) - 1);
if (n % 16 == 0) {
/* line completed */
fprintf(stderr, "[%4.4s] %-50.50s %s\n", addrstr, hexstr, charstr);
hexstr[0] = 0;
charstr[0] = 0;
} else if (n % 8 == 0) {
/* half line: add whitespaces */
strncat(hexstr, " ", sizeof(hexstr) - strlen(hexstr) - 1);
strncat(charstr, " ", sizeof(charstr) - strlen(charstr) - 1);
}
++p; /* next byte */
}
if (strlen(hexstr) > 0) {
/* print rest of buffer if not empty */
fprintf(stderr, "[%4.4s] %-50.50s %s\n", addrstr, hexstr, charstr);
}
}
if (0) { //temporary hack to keep the linker happy
uc(nullptr);
lc(nullptr);
hex_dump(nullptr,0);
}
}
#endif /* SQUID_LIBNTLMAUTH_SUPPORT_BITS_CCI */
|