static int request = 0;
static int unicodestr = 0;
+extern const u_char *startbuf;
+
const u_char *startbuf = NULL;
struct smbdescript {
int command;
ND_TCHECK_1(data);
- command = data[0];
+ command = EXTRACT_U_1(data);
smb_fdata(ndo, param, "BROWSE PACKET\n|Param ", param+paramlen, unicodestr);
f4 = "|Data ";
}
- smb_fdata(ndo, words + 1, f1, min(words + 1 + 2 * words[0], maxbuf),
- unicodestr);
+ smb_fdata(ndo, words + 1, f1,
+ min(words + 1 + 2 * EXTRACT_U_1(words), maxbuf),
+ unicodestr);
ND_TCHECK_2(data1);
bcc = EXTRACT_LE_U_2(data1);
const char *f1 = NULL, *f2 = NULL;
ND_TCHECK_1(words);
- wct = words[0];
+ wct = EXTRACT_U_1(words);
if (request)
f2 = "*|Dialect=[Y]\n";
else {
const char *f1 = NULL, *f2 = NULL;
ND_TCHECK_1(words);
- wct = words[0];
+ wct = EXTRACT_U_1(words);
if (request) {
if (wct == 10)
f1 = "Com2=[w]\nOff2=[d]\nBufSize=[d]\nMpxMax=[d]\nVcNum=[d]\nSessionKey=[W]\nPassLen=[d]\nCryptLen=[d]\nCryptOff=[d]\nPass&Name=\n";
const char *f1 = NULL, *f2 = NULL;
ND_TCHECK_1(words);
- wct = words[0];
+ wct = EXTRACT_U_1(words);
if (request) {
f1 = "Com2=[w]\nOff2=[d]\nHandle=[d]\nLockType=[w]\nTimeOut=[D]\nUnlockCount=[d]\nLockCount=[d]\n";
ND_TCHECK_1(words + 7);
int smboffset;
ND_TCHECK_1(buf + 9);
- request = (buf[9] & 0x80) ? 0 : 1;
+ request = (EXTRACT_U_1(buf + 9) & 0x80) ? 0 : 1;
startbuf = buf;
- command = buf[4];
+ command = EXTRACT_U_1(buf + 4);
fn = smbfind(command, smb_fns);
words = buf + smboffset;
ND_TCHECK_1(words);
- wct = words[0];
+ wct = EXTRACT_U_1(words);
data = words + 1 + wct * 2;
maxwords = min(data, maxbuf);
int i;
int v;
- for (i = 0; &words[1 + 2 * i] < maxwords; i++) {
- ND_TCHECK_2(words + (1 + 2 * i));
+ for (i = 0; words + 1 + 2 * i < maxwords; i++) {
+ ND_TCHECK_2(words + 1 + 2 * i);
v = EXTRACT_LE_U_2(words + 1 + 2 * i);
ND_PRINT((ndo, "smb_vwv[%d]=%d (0x%X)\n", i, v, v));
}
if (wct == 0)
break;
ND_TCHECK_1(words + 1);
- command = words[1];
+ command = EXTRACT_U_1(words + 1);
if (command == 0xFF)
break;
ND_TCHECK_2(words + 3);
if (caplen < 4)
goto trunc;
maxbuf = data + caplen;
- type = data[0];
+ ND_TCHECK_1(data);
+ type = EXTRACT_U_1(data);
+ ND_TCHECK_2(data + 2);
nbt_len = EXTRACT_BE_U_2(data + 2);
length -= 4;
caplen -= 4;
goto trunc;
if (caplen < 4)
goto trunc;
- ecode = data[4];
+ ecode = EXTRACT_U_1(data + 4);
ND_PRINT((ndo, "Session Reject, "));
switch (ecode) {
if (data == NULL)
break;
if (nbt_len >= 1 && caplen >= 1) {
- ecode = origdata[4];
+ ecode = EXTRACT_U_1(origdata + 4);
switch (ecode) {
case 0x80:
ND_PRINT((ndo, "Not listening on called name\n"));
ND_TCHECK_2(data + 10);
name_trn_id = EXTRACT_BE_U_2(data);
- response = (data[2] >> 7);
- opcode = (data[2] >> 3) & 0xF;
- nm_flags = ((data[2] & 0x7) << 4) + (data[3] >> 4);
- rcode = data[3] & 0xF;
+ response = (EXTRACT_U_1(data + 2) >> 7);
+ opcode = (EXTRACT_U_1(data + 2) >> 3) & 0xF;
+ nm_flags = ((EXTRACT_U_1(data + 2) & 0x7) << 4) + (EXTRACT_U_1(data + 3) >> 4);
+ rcode = EXTRACT_U_1(data + 3) & 0xF;
qdcount = EXTRACT_BE_U_2(data + 4);
ancount = EXTRACT_BE_U_2(data + 6);
nscount = EXTRACT_BE_U_2(data + 8);
int numnames;
ND_TCHECK_1(p);
- numnames = p[0];
+ numnames = EXTRACT_U_1(p);
p = smb_fdata(ndo, p, "NumNames=[B]\n", p + 1, 0);
if (p == NULL)
goto out;
maxbuf = ndo->ndo_snapend;
ND_TCHECK_1(data + 4);
len = EXTRACT_LE_U_2(data);
- command = data[4];
+ command = EXTRACT_U_1(data + 4);
data2 = data + len;
if (data2 >= maxbuf) {
data2 = maxbuf;