12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (C) Andrew Tridgell 1995-1999 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * This software may be distributed either under the terms of the 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * BSD-style license that accompanies tcpdump or the GNU GPL version 2 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * or later 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h" 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ = 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "@(#) $Header: /tcpdump/master/tcpdump/print-smb.c,v 1.41.2.4 2007/07/14 22:29:05 guy Exp $"; 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h> 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h> 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <string.h> 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h" 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "extract.h" 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "smb.h" 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int request = 0; 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic int unicodestr = 0; 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst u_char *startbuf = NULL; 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct smbdescript { 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *req_f1; 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *req_f2; 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *rep_f1; 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *rep_f2; 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project void (*fn)(const u_char *, const u_char *, const u_char *, const u_char *); 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct smbdescriptint { 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *req_f1; 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *req_f2; 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *rep_f1; 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *rep_f2; 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project void (*fn)(const u_char *, const u_char *, int, int); 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct smbfns 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int id; 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *name; 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int flags; 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct smbdescript descript; 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct smbfnsint 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int id; 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *name; 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int flags; 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct smbdescriptint descript; 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DEFDESCRIPT { NULL, NULL, NULL, NULL, NULL } 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define FLG_CHAIN (1 << 0) 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic struct smbfns * 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectsmbfind(int id, struct smbfns *list) 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int sindex; 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (sindex = 0; list[sindex].name; sindex++) 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (list[sindex].id == id) 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return(&list[sindex]); 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return(&list[0]); 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic struct smbfnsint * 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectsmbfindint(int id, struct smbfnsint *list) 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int sindex; 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (sindex = 0; list[sindex].name; sindex++) 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (list[sindex].id == id) 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return(&list[sindex]); 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return(&list[0]); 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrans2_findfirst(const u_char *param, const u_char *data, int pcnt, int dcnt) 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *fmt; 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (request) 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fmt = "Attribute=[A]\nSearchCount=[d]\nFlags=[w]\nLevel=[dP4]\nFile=[S]\n"; 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fmt = "Handle=[w]\nCount=[d]\nEOS=[w]\nEoffset=[d]\nLastNameOfs=[w]\n"; 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(param, fmt, param + pcnt, unicodestr); 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (dcnt) { 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("data:\n"); 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_data(data, dcnt); 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrans2_qfsinfo(const u_char *param, const u_char *data, int pcnt, int dcnt) 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static int level = 0; 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *fmt=""; 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (request) { 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(*param, 2); 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project level = EXTRACT_LE_16BITS(param); 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fmt = "InfoLevel=[d]\n"; 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(param, fmt, param + pcnt, unicodestr); 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (level) { 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 1: 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fmt = "idFileSystem=[W]\nSectorUnit=[D]\nUnit=[D]\nAvail=[D]\nSectorSize=[d]\n"; 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 2: 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fmt = "CreationTime=[T2]VolNameLength=[lb]\nVolumeLabel=[c]\n"; 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x105: 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fmt = "Capabilities=[W]\nMaxFileLen=[D]\nVolNameLen=[lD]\nVolume=[C]\n"; 1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fmt = "UnknownLevel\n"; 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(data, fmt, data + dcnt, unicodestr); 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (dcnt) { 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("data:\n"); 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_data(data, dcnt); 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|SMB]"); 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct smbfnsint trans2_fns[] = { 1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, "TRANSACT2_OPEN", 0, 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Flags2=[w]\nMode=[w]\nSearchAttrib=[A]\nAttrib=[A]\nTime=[T2]\nOFun=[w]\nSize=[D]\nRes=([w, w, w, w, w])\nPath=[S]", 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Handle=[d]\nAttrib=[A]\nTime=[T2]\nSize=[D]\nAccess=[w]\nType=[w]\nState=[w]\nAction=[w]\nInode=[W]\nOffErr=[d]\n|EALength=[d]\n", 1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL }}, 1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 1, "TRANSACT2_FINDFIRST", 0, 1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL, NULL, trans2_findfirst }}, 1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 2, "TRANSACT2_FINDNEXT", 0, DEFDESCRIPT }, 1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 3, "TRANSACT2_QFSINFO", 0, 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL, NULL, trans2_qfsinfo }}, 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 4, "TRANSACT2_SETFSINFO", 0, DEFDESCRIPT }, 1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 5, "TRANSACT2_QPATHINFO", 0, DEFDESCRIPT }, 1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 6, "TRANSACT2_SETPATHINFO", 0, DEFDESCRIPT }, 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 7, "TRANSACT2_QFILEINFO", 0, DEFDESCRIPT }, 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 8, "TRANSACT2_SETFILEINFO", 0, DEFDESCRIPT }, 1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 9, "TRANSACT2_FSCTL", 0, DEFDESCRIPT }, 1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 10, "TRANSACT2_IOCTL", 0, DEFDESCRIPT }, 1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 11, "TRANSACT2_FINDNOTIFYFIRST", 0, DEFDESCRIPT }, 1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 12, "TRANSACT2_FINDNOTIFYNEXT", 0, DEFDESCRIPT }, 1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 13, "TRANSACT2_MKDIR", 0, DEFDESCRIPT }, 1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { -1, NULL, 0, DEFDESCRIPT } 1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectprint_trans2(const u_char *words, const u_char *dat, const u_char *buf, const u_char *maxbuf) 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int bcc; 1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static struct smbfnsint *fn = &trans2_fns[0]; 1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *data, *param; 1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *w = words + 1; 1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *f1 = NULL, *f2 = NULL; 1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int pcnt, dcnt; 1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(words[0]); 1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (request) { 1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(w[14 * 2], 2); 1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pcnt = EXTRACT_LE_16BITS(w + 9 * 2); 1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project param = buf + EXTRACT_LE_16BITS(w + 10 * 2); 1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project dcnt = EXTRACT_LE_16BITS(w + 11 * 2); 1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = buf + EXTRACT_LE_16BITS(w + 12 * 2); 1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fn = smbfindint(EXTRACT_LE_16BITS(w + 14 * 2), trans2_fns); 1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (words[0] == 0) { 1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%s\n", fn->name); 1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Trans2Interim\n"); 1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(w[7 * 2], 2); 1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pcnt = EXTRACT_LE_16BITS(w + 3 * 2); 1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project param = buf + EXTRACT_LE_16BITS(w + 4 * 2); 1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project dcnt = EXTRACT_LE_16BITS(w + 6 * 2); 2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = buf + EXTRACT_LE_16BITS(w + 7 * 2); 2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%s param_length=%d data_length=%d\n", fn->name, pcnt, dcnt); 2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (request) { 2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (words[0] == 8) { 2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(words + 1, 2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Trans2Secondary\nTotParam=[d]\nTotData=[d]\nParamCnt=[d]\nParamOff=[d]\nParamDisp=[d]\nDataCnt=[d]\nDataOff=[d]\nDataDisp=[d]\nHandle=[d]\n", 2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, unicodestr); 2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(words + 1, 2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "TotParam=[d]\nTotData=[d]\nMaxParam=[d]\nMaxData=[d]\nMaxSetup=[b][P1]\nFlags=[w]\nTimeOut=[D]\nRes1=[w]\nParamCnt=[d]\nParamOff=[d]\nDataCnt=[d]\nDataOff=[d]\nSetupCnt=[b][P1]\n", 2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project words + 1 + 14 * 2, unicodestr); 2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = fn->descript.req_f1; 2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f2 = fn->descript.req_f2; 2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(words + 1, 2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "TotParam=[d]\nTotData=[d]\nRes1=[w]\nParamCnt=[d]\nParamOff=[d]\nParamDisp[d]\nDataCnt=[d]\nDataOff=[d]\nDataDisp=[d]\nSetupCnt=[b][P1]\n", 2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project words + 1 + 10 * 2, unicodestr); 2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = fn->descript.rep_f1; 2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f2 = fn->descript.rep_f2; 2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(*dat, 2); 2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bcc = EXTRACT_LE_16BITS(dat); 2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("smb_bcc=%u\n", bcc); 2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (fn->descript.fn) 2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (*fn->descript.fn)(param, data, pcnt, dcnt); 2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(param, f1 ? f1 : "Parameters=\n", param + pcnt, unicodestr); 2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(data, f2 ? f2 : "Data=\n", data + dcnt, unicodestr); 2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|SMB]"); 2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectprint_browse(const u_char *param, int paramlen, const u_char *data, int datalen) 2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *maxbuf = data + datalen; 2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int command; 2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(data[0]); 2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project command = data[0]; 2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(param, "BROWSE PACKET\n|Param ", param+paramlen, unicodestr); 2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (command) { 2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0xF: 2552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, 2562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BROWSE PACKET:\nType=[B] (LocalMasterAnnouncement)\nUpdateCount=[w]\nRes1=[B]\nAnnounceInterval=[d]\nName=[n2]\nMajorVersion=[B]\nMinorVersion=[B]\nServerType=[W]\nElectionVersion=[w]\nBrowserConstant=[w]\n", 2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, unicodestr); 2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x1: 2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, 2622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BROWSE PACKET:\nType=[B] (HostAnnouncement)\nUpdateCount=[w]\nRes1=[B]\nAnnounceInterval=[d]\nName=[n2]\nMajorVersion=[B]\nMinorVersion=[B]\nServerType=[W]\nElectionVersion=[w]\nBrowserConstant=[w]\n", 2632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, unicodestr); 2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x2: 2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, 2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BROWSE PACKET:\nType=[B] (AnnouncementRequest)\nFlags=[B]\nReplySystemName=[S]\n", 2692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, unicodestr); 2702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0xc: 2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, 2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BROWSE PACKET:\nType=[B] (WorkgroupAnnouncement)\nUpdateCount=[w]\nRes1=[B]\nAnnounceInterval=[d]\nName=[n2]\nMajorVersion=[B]\nMinorVersion=[B]\nServerType=[W]\nCommentPointer=[W]\nServerName=[S]\n", 2752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, unicodestr); 2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x8: 2792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, 2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BROWSE PACKET:\nType=[B] (ElectionFrame)\nElectionVersion=[B]\nOSSummary=[W]\nUptime=[(W, W)]\nServerName=[S]\n", 2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, unicodestr); 2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0xb: 2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, 2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BROWSE PACKET:\nType=[B] (BecomeBackupBrowser)\nName=[S]\n", 2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, unicodestr); 2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x9: 2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, 2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BROWSE PACKET:\nType=[B] (GetBackupList)\nListCount?=[B]\nToken=[W]\n", 2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, unicodestr); 2942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0xa: 2972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, 2982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BROWSE PACKET:\nType=[B] (BackupListResponse)\nServerCount?=[B]\nToken=[W]\n*Name=[S]\n", 2992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, unicodestr); 3002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0xd: 3032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, 3042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BROWSE PACKET:\nType=[B] (MasterAnnouncement)\nMasterName=[S]\n", 3052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, unicodestr); 3062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0xe: 3092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, 3102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BROWSE PACKET:\nType=[B] (ResetBrowser)\nOptions=[B]\n", maxbuf, unicodestr); 3112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 3142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, "Unknown Browser Frame ", maxbuf, unicodestr); 3152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 3162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 3192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|SMB]"); 3202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 3222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 3252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectprint_ipc(const u_char *param, int paramlen, const u_char *data, int datalen) 3262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 3272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (paramlen) 3282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(param, "Command=[w]\nStr1=[S]\nStr2=[S]\n", param + paramlen, 3292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unicodestr); 3302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (datalen) 3312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(data, "IPC ", data + datalen, unicodestr); 3322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 3332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 3362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectprint_trans(const u_char *words, const u_char *data1, const u_char *buf, const u_char *maxbuf) 3372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 3382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int bcc; 3392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *f1, *f2, *f3, *f4; 3402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *data, *param; 3412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *w = words + 1; 3422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int datalen, paramlen; 3432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (request) { 3452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(w[12 * 2], 2); 3462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project paramlen = EXTRACT_LE_16BITS(w + 9 * 2); 3472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project param = buf + EXTRACT_LE_16BITS(w + 10 * 2); 3482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project datalen = EXTRACT_LE_16BITS(w + 11 * 2); 3492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = buf + EXTRACT_LE_16BITS(w + 12 * 2); 3502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = "TotParamCnt=[d] \nTotDataCnt=[d] \nMaxParmCnt=[d] \nMaxDataCnt=[d]\nMaxSCnt=[d] \nTransFlags=[w] \nRes1=[w] \nRes2=[w] \nRes3=[w]\nParamCnt=[d] \nParamOff=[d] \nDataCnt=[d] \nDataOff=[d] \nSUCnt=[d]\n"; 3512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f2 = "|Name=[S]\n"; 3522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f3 = "|Param "; 3532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f4 = "|Data "; 3542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 3552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(w[7 * 2], 2); 3562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project paramlen = EXTRACT_LE_16BITS(w + 3 * 2); 3572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project param = buf + EXTRACT_LE_16BITS(w + 4 * 2); 3582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project datalen = EXTRACT_LE_16BITS(w + 6 * 2); 3592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = buf + EXTRACT_LE_16BITS(w + 7 * 2); 3602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = "TotParamCnt=[d] \nTotDataCnt=[d] \nRes1=[d]\nParamCnt=[d] \nParamOff=[d] \nRes2=[d] \nDataCnt=[d] \nDataOff=[d] \nRes3=[d]\nLsetup=[d]\n"; 3612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f2 = "|Unknown "; 3622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f3 = "|Param "; 3632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f4 = "|Data "; 3642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(words + 1, f1, SMBMIN(words + 1 + 2 * words[0], maxbuf), 3672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unicodestr); 3682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(*data1, 2); 3702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bcc = EXTRACT_LE_16BITS(data1); 3712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("smb_bcc=%u\n", bcc); 3722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (bcc > 0) { 3732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(data1 + 2, f2, maxbuf - (paramlen + datalen), unicodestr); 3742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (strcmp((const char *)(data1 + 2), "\\MAILSLOT\\BROWSE") == 0) { 3762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_browse(param, paramlen, data, datalen); 3772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (strcmp((const char *)(data1 + 2), "\\PIPE\\LANMAN") == 0) { 3812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_ipc(param, paramlen, data, datalen); 3822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (paramlen) 3862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(param, f3, SMBMIN(param + paramlen, maxbuf), unicodestr); 3872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (datalen) 3882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(data, f4, SMBMIN(data + datalen, maxbuf), unicodestr); 3892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 3922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|SMB]"); 3932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 3942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 3952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 3982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectprint_negprot(const u_char *words, const u_char *data, const u_char *buf _U_, const u_char *maxbuf) 3992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 4002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int wct, bcc; 4012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *f1 = NULL, *f2 = NULL; 4022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(words[0]); 4042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project wct = words[0]; 4052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (request) 4062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f2 = "*|Dialect=[Y]\n"; 4072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 4082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (wct == 1) 4092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = "Core Protocol\nDialectIndex=[d]"; 4102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (wct == 17) 4112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = "NT1 Protocol\nDialectIndex=[d]\nSecMode=[B]\nMaxMux=[d]\nNumVcs=[d]\nMaxBuffer=[D]\nRawSize=[D]\nSessionKey=[W]\nCapabilities=[W]\nServerTime=[T3]TimeZone=[d]\nCryptKey="; 4122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (wct == 13) 4132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = "Coreplus/Lanman1/Lanman2 Protocol\nDialectIndex=[d]\nSecMode=[w]\nMaxXMit=[d]\nMaxMux=[d]\nMaxVcs=[d]\nBlkMode=[w]\nSessionKey=[W]\nServerTime=[T1]TimeZone=[d]\nRes=[W]\nCryptKey="; 4142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (f1) 4172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(words + 1, f1, SMBMIN(words + 1 + wct * 2, maxbuf), 4182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unicodestr); 4192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_data(words + 1, SMBMIN(wct * 2, PTR_DIFF(maxbuf, words + 1))); 4212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(*data, 2); 4232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bcc = EXTRACT_LE_16BITS(data); 4242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("smb_bcc=%u\n", bcc); 4252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (bcc > 0) { 4262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (f2) 4272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(data + 2, f2, SMBMIN(data + 2 + EXTRACT_LE_16BITS(data), 4282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf), unicodestr); 4292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_data(data + 2, SMBMIN(EXTRACT_LE_16BITS(data), PTR_DIFF(maxbuf, data + 2))); 4312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 4332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 4342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|SMB]"); 4352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 4362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 4372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 4392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectprint_sesssetup(const u_char *words, const u_char *data, const u_char *buf _U_, const u_char *maxbuf) 4402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 4412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int wct, bcc; 4422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *f1 = NULL, *f2 = NULL; 4432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(words[0]); 4452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project wct = words[0]; 4462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (request) { 4472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (wct == 10) 4482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = "Com2=[w]\nOff2=[d]\nBufSize=[d]\nMpxMax=[d]\nVcNum=[d]\nSessionKey=[W]\nPassLen=[d]\nCryptLen=[d]\nCryptOff=[d]\nPass&Name=\n"; 4492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = "Com2=[B]\nRes1=[B]\nOff2=[d]\nMaxBuffer=[d]\nMaxMpx=[d]\nVcNumber=[d]\nSessionKey=[W]\nCaseInsensitivePasswordLength=[d]\nCaseSensitivePasswordLength=[d]\nRes=[W]\nCapabilities=[W]\nPass1&Pass2&Account&Domain&OS&LanMan=\n"; 4512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 4522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (wct == 3) { 4532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = "Com2=[w]\nOff2=[d]\nAction=[w]\n"; 4542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else if (wct == 13) { 4552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = "Com2=[B]\nRes=[B]\nOff2=[d]\nAction=[w]\n"; 4562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f2 = "NativeOS=[S]\nNativeLanMan=[S]\nPrimaryDomain=[S]\n"; 4572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (f1) 4612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(words + 1, f1, SMBMIN(words + 1 + wct * 2, maxbuf), 4622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unicodestr); 4632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_data(words + 1, SMBMIN(wct * 2, PTR_DIFF(maxbuf, words + 1))); 4652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(*data, 2); 4672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bcc = EXTRACT_LE_16BITS(data); 4682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("smb_bcc=%u\n", bcc); 4692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (bcc > 0) { 4702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (f2) 4712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(data + 2, f2, SMBMIN(data + 2 + EXTRACT_LE_16BITS(data), 4722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf), unicodestr); 4732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_data(data + 2, SMBMIN(EXTRACT_LE_16BITS(data), PTR_DIFF(maxbuf, data + 2))); 4752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 4772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 4782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|SMB]"); 4792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 4802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 4812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 4832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectprint_lockingandx(const u_char *words, const u_char *data, const u_char *buf _U_, const u_char *maxbuf) 4842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 4852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int wct, bcc; 4862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *maxwords; 4872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *f1 = NULL, *f2 = NULL; 4882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(words[0]); 4902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project wct = words[0]; 4912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (request) { 4922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = "Com2=[w]\nOff2=[d]\nHandle=[d]\nLockType=[w]\nTimeOut=[D]\nUnlockCount=[d]\nLockCount=[d]\n"; 4932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(words[7]); 4942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (words[7] & 0x10) 4952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f2 = "*Process=[d]\n[P2]Offset=[M]\nLength=[M]\n"; 4962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f2 = "*Process=[d]\nOffset=[D]\nLength=[D]\n"; 4982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 4992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = "Com2=[w]\nOff2=[d]\n"; 5002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxwords = SMBMIN(words + 1 + wct * 2, maxbuf); 5032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (wct) 5042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(words + 1, f1, maxwords, unicodestr); 5052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(*data, 2); 5072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bcc = EXTRACT_LE_16BITS(data); 5082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("smb_bcc=%u\n", bcc); 5092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (bcc > 0) { 5102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (f2) 5112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(data + 2, f2, SMBMIN(data + 2 + EXTRACT_LE_16BITS(data), 5122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf), unicodestr); 5132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 5142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_data(data + 2, SMBMIN(EXTRACT_LE_16BITS(data), PTR_DIFF(maxbuf, data + 2))); 5152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 5172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 5182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|SMB]"); 5192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 5202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 5212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic struct smbfns smb_fns[] = { 5242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { -1, "SMBunknown", 0, DEFDESCRIPT }, 5252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBtcon, "SMBtcon", 0, 5272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, "Path=[Z]\nPassword=[Z]\nDevice=[Z]\n", 5282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "MaxXmit=[d]\nTreeId=[d]\n", NULL, 5292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL } }, 5302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBtdis, "SMBtdis", 0, DEFDESCRIPT }, 5322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBexit, "SMBexit", 0, DEFDESCRIPT }, 5332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBioctl, "SMBioctl", 0, DEFDESCRIPT }, 5342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBecho, "SMBecho", 0, 5362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "ReverbCount=[d]\n", NULL, 5372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "SequenceNum=[d]\n", NULL, 5382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL } }, 5392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBulogoffX, "SMBulogoffX", FLG_CHAIN, DEFDESCRIPT }, 5412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBgetatr, "SMBgetatr", 0, 5432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, "Path=[Z]\n", 5442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Attribute=[A]\nTime=[T2]Size=[D]\nRes=([w,w,w,w,w])\n", NULL, 5452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL } }, 5462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsetatr, "SMBsetatr", 0, 5482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Attribute=[A]\nTime=[T2]Res=([w,w,w,w,w])\n", "Path=[Z]\n", 5492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL, NULL } }, 5502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBchkpth, "SMBchkpth", 0, 5522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, "Path=[Z]\n", NULL, NULL, NULL } }, 5532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsearch, "SMBsearch", 0, 5552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Count=[d]\nAttrib=[A]\n", 5562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Path=[Z]\nBlkType=[B]\nBlkLen=[d]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\n", 5572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Count=[d]\n", 5582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BlkType=[B]\nBlkLen=[d]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[D]\nName=[s13]\n", 5592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL } }, 5602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBopen, "SMBopen", 0, 5622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Mode=[w]\nAttribute=[A]\n", "Path=[Z]\n", 5632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Handle=[d]\nOAttrib=[A]\nTime=[T2]Size=[D]\nAccess=[w]\n", 5642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL } }, 5652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBcreate, "SMBcreate", 0, 5672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Attrib=[A]\nTime=[T2]", "Path=[Z]\n", "Handle=[d]\n", NULL, NULL } }, 5682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBmknew, "SMBmknew", 0, 5702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Attrib=[A]\nTime=[T2]", "Path=[Z]\n", "Handle=[d]\n", NULL, NULL } }, 5712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBunlink, "SMBunlink", 0, 5732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Attrib=[A]\n", "Path=[Z]\n", NULL, NULL, NULL } }, 5742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBread, "SMBread", 0, 5762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nByteCount=[d]\nOffset=[D]\nCountLeft=[d]\n", NULL, 5772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Count=[d]\nRes=([w,w,w,w])\n", NULL, NULL } }, 5782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBwrite, "SMBwrite", 0, 5802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nByteCount=[d]\nOffset=[D]\nCountLeft=[d]\n", NULL, 5812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Count=[d]\n", NULL, NULL } }, 5822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBclose, "SMBclose", 0, 5842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nTime=[T2]", NULL, NULL, NULL, NULL } }, 5852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBmkdir, "SMBmkdir", 0, 5872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, "Path=[Z]\n", NULL, NULL, NULL } }, 5882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBrmdir, "SMBrmdir", 0, 5902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, "Path=[Z]\n", NULL, NULL, NULL } }, 5912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBdskattr, "SMBdskattr", 0, 5932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, 5942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "TotalUnits=[d]\nBlocksPerUnit=[d]\nBlockSize=[d]\nFreeUnits=[d]\nMedia=[w]\n", 5952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL } }, 5962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBmv, "SMBmv", 0, 5982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Attrib=[A]\n", "OldPath=[Z]\nNewPath=[Z]\n", NULL, NULL, NULL } }, 5992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 6012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * this is a Pathworks specific call, allowing the 6022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * changing of the root path 6032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 6042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { pSETDIR, "SMBsetdir", 0, { NULL, "Path=[Z]\n", NULL, NULL, NULL } }, 6052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBlseek, "SMBlseek", 0, 6072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nMode=[w]\nOffset=[D]\n", "Offset=[D]\n", NULL, NULL, NULL } }, 6082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBflush, "SMBflush", 0, { "Handle=[d]\n", NULL, NULL, NULL, NULL } }, 6102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsplopen, "SMBsplopen", 0, 6122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "SetupLen=[d]\nMode=[w]\n", "Ident=[Z]\n", "Handle=[d]\n", 6132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL } }, 6142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsplclose, "SMBsplclose", 0, 6162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\n", NULL, NULL, NULL, NULL } }, 6172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsplretq, "SMBsplretq", 0, 6192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "MaxCount=[d]\nStartIndex=[d]\n", NULL, 6202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Count=[d]\nIndex=[d]\n", 6212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "*Time=[T2]Status=[B]\nJobID=[d]\nSize=[D]\nRes=[B]Name=[s16]\n", 6222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL } }, 6232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsplwr, "SMBsplwr", 0, 6252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\n", NULL, NULL, NULL, NULL } }, 6262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBlock, "SMBlock", 0, 6282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nCount=[D]\nOffset=[D]\n", NULL, NULL, NULL, NULL } }, 6292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBunlock, "SMBunlock", 0, 6312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nCount=[D]\nOffset=[D]\n", NULL, NULL, NULL, NULL } }, 6322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* CORE+ PROTOCOL FOLLOWS */ 6342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBreadbraw, "SMBreadbraw", 0, 6362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nOffset=[D]\nMaxCount=[d]\nMinCount=[d]\nTimeOut=[D]\nRes=[d]\n", 6372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL, NULL, NULL } }, 6382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBwritebraw, "SMBwritebraw", 0, 6402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nTotalCount=[d]\nRes=[w]\nOffset=[D]\nTimeOut=[D]\nWMode=[w]\nRes2=[W]\n|DataSize=[d]\nDataOff=[d]\n", 6412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, "WriteRawAck", NULL, NULL } }, 6422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBwritec, "SMBwritec", 0, 6442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, "Count=[d]\n", NULL, NULL } }, 6452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBwriteclose, "SMBwriteclose", 0, 6472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nCount=[d]\nOffset=[D]\nTime=[T2]Res=([w,w,w,w,w,w])", 6482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, "Count=[d]\n", NULL, NULL } }, 6492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBlockread, "SMBlockread", 0, 6512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nByteCount=[d]\nOffset=[D]\nCountLeft=[d]\n", NULL, 6522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Count=[d]\nRes=([w,w,w,w])\n", NULL, NULL } }, 6532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBwriteunlock, "SMBwriteunlock", 0, 6552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nByteCount=[d]\nOffset=[D]\nCountLeft=[d]\n", NULL, 6562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Count=[d]\n", NULL, NULL } }, 6572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBreadBmpx, "SMBreadBmpx", 0, 6592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nOffset=[D]\nMaxCount=[d]\nMinCount=[d]\nTimeOut=[D]\nRes=[w]\n", 6602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, 6612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Offset=[D]\nTotCount=[d]\nRemaining=[d]\nRes=([w,w])\nDataSize=[d]\nDataOff=[d]\n", 6622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL } }, 6632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBwriteBmpx, "SMBwriteBmpx", 0, 6652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nTotCount=[d]\nRes=[w]\nOffset=[D]\nTimeOut=[D]\nWMode=[w]\nRes2=[W]\nDataSize=[d]\nDataOff=[d]\n", NULL, 6662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Remaining=[d]\n", NULL, NULL } }, 6672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBwriteBs, "SMBwriteBs", 0, 6692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nTotCount=[d]\nOffset=[D]\nRes=[W]\nDataSize=[d]\nDataOff=[d]\n", 6702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, "Count=[d]\n", NULL, NULL } }, 6712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsetattrE, "SMBsetattrE", 0, 6732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\nCreationTime=[T2]AccessTime=[T2]ModifyTime=[T2]", NULL, 6742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL, NULL } }, 6752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBgetattrE, "SMBgetattrE", 0, 6772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\n", NULL, 6782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "CreationTime=[T2]AccessTime=[T2]ModifyTime=[T2]Size=[D]\nAllocSize=[D]\nAttribute=[A]\n", 6792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL } }, 6802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBtranss, "SMBtranss", 0, DEFDESCRIPT }, 6822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBioctls, "SMBioctls", 0, DEFDESCRIPT }, 6832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBcopy, "SMBcopy", 0, 6852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "TreeID2=[d]\nOFun=[w]\nFlags=[w]\n", "Path=[S]\nNewPath=[S]\n", 6862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "CopyCount=[d]\n", "|ErrStr=[S]\n", NULL } }, 6872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBmove, "SMBmove", 0, 6892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "TreeID2=[d]\nOFun=[w]\nFlags=[w]\n", "Path=[S]\nNewPath=[S]\n", 6902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "MoveCount=[d]\n", "|ErrStr=[S]\n", NULL } }, 6912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBopenX, "SMBopenX", FLG_CHAIN, 6932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Com2=[w]\nOff2=[d]\nFlags=[w]\nMode=[w]\nSearchAttrib=[A]\nAttrib=[A]\nTime=[T2]OFun=[w]\nSize=[D]\nTimeOut=[D]\nRes=[W]\n", 6942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Path=[S]\n", 6952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Com2=[w]\nOff2=[d]\nHandle=[d]\nAttrib=[A]\nTime=[T2]Size=[D]\nAccess=[w]\nType=[w]\nState=[w]\nAction=[w]\nFileID=[W]\nRes=[w]\n", 6962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL } }, 6972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBreadX, "SMBreadX", FLG_CHAIN, 6992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Com2=[w]\nOff2=[d]\nHandle=[d]\nOffset=[D]\nMaxCount=[d]\nMinCount=[d]\nTimeOut=[D]\nCountLeft=[d]\n", 7002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, 7012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Com2=[w]\nOff2=[d]\nRemaining=[d]\nRes=[W]\nDataSize=[d]\nDataOff=[d]\nRes=([w,w,w,w])\n", 7022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL } }, 7032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBwriteX, "SMBwriteX", FLG_CHAIN, 7052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Com2=[w]\nOff2=[d]\nHandle=[d]\nOffset=[D]\nTimeOut=[D]\nWMode=[w]\nCountLeft=[d]\nRes=[w]\nDataSize=[d]\nDataOff=[d]\n", 7062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, 7072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Com2=[w]\nOff2=[d]\nCount=[d]\nRemaining=[d]\nRes=[W]\n", 7082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL } }, 7092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBffirst, "SMBffirst", 0, 7112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Count=[d]\nAttrib=[A]\n", 7122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Path=[Z]\nBlkType=[B]\nBlkLen=[d]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\n", 7132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Count=[d]\n", 7142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BlkType=[B]\nBlkLen=[d]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[D]\nName=[s13]\n", 7152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL } }, 7162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBfunique, "SMBfunique", 0, 7182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Count=[d]\nAttrib=[A]\n", 7192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Path=[Z]\nBlkType=[B]\nBlkLen=[d]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\n", 7202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Count=[d]\n", 7212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BlkType=[B]\nBlkLen=[d]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[D]\nName=[s13]\n", 7222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL } }, 7232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBfclose, "SMBfclose", 0, 7252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Count=[d]\nAttrib=[A]\n", 7262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Path=[Z]\nBlkType=[B]\nBlkLen=[d]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\n", 7272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Count=[d]\n", 7282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "BlkType=[B]\nBlkLen=[d]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[d]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[D]\nName=[s13]\n", 7292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL } }, 7302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBfindnclose, "SMBfindnclose", 0, 7322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\n", NULL, NULL, NULL, NULL } }, 7332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBfindclose, "SMBfindclose", 0, 7352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Handle=[d]\n", NULL, NULL, NULL, NULL } }, 7362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsends, "SMBsends", 0, 7382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, "Source=[Z]\nDest=[Z]\n", NULL, NULL, NULL } }, 7392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsendstrt, "SMBsendstrt", 0, 7412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, "Source=[Z]\nDest=[Z]\n", "GroupID=[d]\n", NULL, NULL } }, 7422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsendend, "SMBsendend", 0, 7442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "GroupID=[d]\n", NULL, NULL, NULL, NULL } }, 7452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsendtxt, "SMBsendtxt", 0, 7472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "GroupID=[d]\n", NULL, NULL, NULL, NULL } }, 7482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsendb, "SMBsendb", 0, 7502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, "Source=[Z]\nDest=[Z]\n", NULL, NULL, NULL } }, 7512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBfwdname, "SMBfwdname", 0, DEFDESCRIPT }, 7532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBcancelf, "SMBcancelf", 0, DEFDESCRIPT }, 7542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBgetmac, "SMBgetmac", 0, DEFDESCRIPT }, 7552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBnegprot, "SMBnegprot", 0, 7572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL, NULL, print_negprot } }, 7582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBsesssetupX, "SMBsesssetupX", FLG_CHAIN, 7602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL, NULL, print_sesssetup } }, 7612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBtconX, "SMBtconX", FLG_CHAIN, 7632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Com2=[w]\nOff2=[d]\nFlags=[w]\nPassLen=[d]\nPasswd&Path&Device=\n", 7642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, "Com2=[w]\nOff2=[d]\n", "ServiceType=[R]\n", NULL } }, 7652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBlockingX, "SMBlockingX", FLG_CHAIN, 7672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL, NULL, print_lockingandx } }, 7682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBtrans2, "SMBtrans2", 0, { NULL, NULL, NULL, NULL, print_trans2 } }, 7702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBtranss2, "SMBtranss2", 0, DEFDESCRIPT }, 7722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBctemp, "SMBctemp", 0, DEFDESCRIPT }, 7732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBreadBs, "SMBreadBs", 0, DEFDESCRIPT }, 7742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBtrans, "SMBtrans", 0, { NULL, NULL, NULL, NULL, print_trans } }, 7752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBnttrans, "SMBnttrans", 0, DEFDESCRIPT }, 7772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBnttranss, "SMBnttranss", 0, DEFDESCRIPT }, 7782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBntcreateX, "SMBntcreateX", FLG_CHAIN, 7802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Com2=[w]\nOff2=[d]\nRes=[b]\nNameLen=[ld]\nFlags=[W]\nRootDirectoryFid=[D]\nAccessMask=[W]\nAllocationSize=[L]\nExtFileAttributes=[W]\nShareAccess=[W]\nCreateDisposition=[W]\nCreateOptions=[W]\nImpersonationLevel=[W]\nSecurityFlags=[b]\n", 7812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Path=[C]\n", 7822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Com2=[w]\nOff2=[d]\nOplockLevel=[b]\nFid=[d]\nCreateAction=[W]\nCreateTime=[T3]LastAccessTime=[T3]LastWriteTime=[T3]ChangeTime=[T3]ExtFileAttributes=[W]\nAllocationSize=[L]\nEndOfFile=[L]\nFileType=[w]\nDeviceState=[w]\nDirectory=[b]\n", 7832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NULL, NULL } }, 7842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { SMBntcancel, "SMBntcancel", 0, DEFDESCRIPT }, 7862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { -1, NULL, 0, DEFDESCRIPT } 7882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 7892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 7922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * print a SMB message 7932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 7942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 7952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectprint_smb(const u_char *buf, const u_char *maxbuf) 7962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 7972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int16_t flags2; 7982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int nterrcodes; 7992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int command; 8002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t nterror; 8012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *words, *maxwords, *data; 8022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct smbfns *fn; 8032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *fmt_smbheader = 8042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "[P4]SMB Command = [B]\nError class = [BP1]\nError code = [d]\nFlags1 = [B]\nFlags2 = [B][P13]\nTree ID = [d]\nProc ID = [d]\nUID = [d]\nMID = [d]\nWord Count = [b]\n"; 8052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int smboffset; 8062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(buf[9]); 8082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project request = (buf[9] & 0x80) ? 0 : 1; 8092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project flags2 = EXTRACT_LE_16BITS(&buf[10]); 8102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unicodestr = flags2 & 0x8000; 8112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nterrcodes = flags2 & 0x4000; 8122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project startbuf = buf; 8132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project command = buf[4]; 8152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fn = smbfind(command, smb_fns); 8172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag > 1) 8192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n"); 8202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("SMB PACKET: %s (%s)\n", fn->name, request ? "REQUEST" : "REPLY"); 8222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag < 2) 8242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 8252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* print out the header */ 8272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(buf, fmt_smbheader, buf + 33, unicodestr); 8282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nterrcodes) { 8302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nterror = EXTRACT_LE_32BITS(&buf[5]); 8312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nterror) 8322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("NTError = %s\n", nt_errstr(nterror)); 8332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 8342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (buf[5]) 8352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("SMBError = %s\n", smb_errstr(buf[5], EXTRACT_LE_16BITS(&buf[7]))); 8362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smboffset = 32; 8392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (;;) { 8412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *f1, *f2; 8422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int wct; 8432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int bcc; 8442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int newsmboffset; 8452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project words = buf + smboffset; 8472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(words[0]); 8482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project wct = words[0]; 8492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = words + 1 + wct * 2; 8502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxwords = SMBMIN(data, maxbuf); 8512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (request) { 8532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = fn->descript.req_f1; 8542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f2 = fn->descript.req_f2; 8552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 8562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f1 = fn->descript.rep_f1; 8572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f2 = fn->descript.rep_f2; 8582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (fn->descript.fn) 8612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (*fn->descript.fn)(words, data, buf, maxbuf); 8622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 8632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (wct) { 8642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (f1) 8652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(words + 1, f1, words + 1 + wct * 2, unicodestr); 8662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 8672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 8682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int v; 8692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; &words[1 + 2 * i] < maxwords; i++) { 8712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(words[1 + 2 * i], 2); 8722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project v = EXTRACT_LE_16BITS(words + 1 + 2 * i); 8732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("smb_vwv[%d]=%d (0x%X)\n", i, v, v); 8742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(*data, 2); 8792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project bcc = EXTRACT_LE_16BITS(data); 8802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("smb_bcc=%u\n", bcc); 8812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (f2) { 8822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (bcc > 0) 8832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(data + 2, f2, data + 2 + bcc, unicodestr); 8842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 8852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (bcc > 0) { 8862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("smb_buf[]=\n"); 8872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_data(data + 2, SMBMIN(bcc, PTR_DIFF(maxbuf, data + 2))); 8882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ((fn->flags & FLG_CHAIN) == 0) 8932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 8942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (wct == 0) 8952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 8962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(words[1]); 8972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project command = words[1]; 8982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (command == 0xFF) 8992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(words[3], 2); 9012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project newsmboffset = EXTRACT_LE_16BITS(words + 3); 9022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fn = smbfind(command, smb_fns); 9042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\nSMB PACKET: %s (%s) (CHAINED)\n", 9062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fn->name, request ? "REQUEST" : "REPLY"); 9072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (newsmboffset <= smboffset) { 9082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Bad andX offset: %u <= %u\n", newsmboffset, smboffset); 9092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 9112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smboffset = newsmboffset; 9122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 9132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n"); 9152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 9162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 9172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|SMB]"); 9182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 9192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 9202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 9232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * print a NBT packet received across tcp on port 139 9242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 9252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid 9262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectnbt_tcp_print(const u_char *data, int length) 9272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 9282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int caplen; 9292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int type; 9302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int nbt_len; 9312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *maxbuf; 9322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length < 4) 9342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 9352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (snapend < data) 9362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 9372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project caplen = snapend - data; 9382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (caplen < 4) 9392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 9402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf = data + caplen; 9412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project type = data[0]; 9422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nbt_len = EXTRACT_16BITS(data + 2); 9432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project length -= 4; 9442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project caplen -= 4; 9452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project startbuf = data; 9472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag < 2) { 9492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" NBT Session Packet: "); 9502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (type) { 9512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x00: 9522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Session Message"); 9532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x81: 9562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Session Request"); 9572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x82: 9602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Session Granted"); 9612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x83: 9642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 9652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int ecode; 9662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nbt_len < 4) 9682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 9692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length < 4) 9702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 9712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (caplen < 4) 9722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto trunc; 9732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ecode = data[4]; 9742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Session Reject, "); 9762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (ecode) { 9772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x80: 9782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Not listening on called name"); 9792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x81: 9812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Not listening for calling name"); 9822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x82: 9842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Called name not present"); 9852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x83: 9872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Called name present, but insufficient resources"); 9882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 9902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Unspecified error 0x%X", ecode); 9912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 9932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 9942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 9962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x85: 9972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Session Keepalive"); 9982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 9992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 10012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, "Unknown packet type [rB]", maxbuf, 0); 10022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 10052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf ("\n>>> NBT Session Packet\n"); 10062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (type) { 10072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x00: 10082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, "[P1]NBT Session Message\nFlags=[B]\nLength=[rd]\n", 10092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data + 4, 0); 10102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (data == NULL) 10112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nbt_len >= 4 && caplen >= 4 && memcmp(data,"\377SMB",4) == 0) { 10132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ((int)nbt_len > caplen) { 10142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ((int)nbt_len > length) 10152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("WARNING: Packet is continued in later TCP segments\n"); 10162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 10172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("WARNING: Short packet. Try increasing the snap length by %d\n", 10182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nbt_len - caplen); 10192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_smb(data, maxbuf > data + nbt_len ? data + nbt_len : maxbuf); 10212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else 10222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Session packet:(raw data or continuation?)\n"); 10232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x81: 10262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, 10272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "[P1]NBT Session Request\nFlags=[B]\nLength=[rd]\nDestination=[n1]\nSource=[n1]\n", 10282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, 0); 10292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x82: 10322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, "[P1]NBT Session Granted\nFlags=[B]\nLength=[rd]\n", maxbuf, 0); 10332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x83: 10362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 10372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *origdata; 10382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int ecode; 10392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project origdata = data; 10412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, "[P1]NBT SessionReject\nFlags=[B]\nLength=[rd]\nReason=[B]\n", 10422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, 0); 10432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (data == NULL) 10442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nbt_len >= 1 && caplen >= 1) { 10462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ecode = origdata[4]; 10472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (ecode) { 10482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x80: 10492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Not listening on called name\n"); 10502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x81: 10522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Not listening for calling name\n"); 10532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x82: 10552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Called name not present\n"); 10562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x83: 10582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Called name present, but insufficient resources\n"); 10592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 10612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Unspecified error 0x%X\n", ecode); 10622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x85: 10692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, "[P1]NBT Session Keepalive\nFlags=[B]\nLength=[rd]\n", maxbuf, 0); 10702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 10732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, "NBT - Unknown packet type\nType=[B]\n", maxbuf, 0); 10742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 10752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n"); 10772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fflush(stdout); 10782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 10802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 10812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|SMB]"); 10822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 10832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 10842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 10872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * print a NBT packet received across udp on port 137 10882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 10892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid 10902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectnbt_udp137_print(const u_char *data, int length) 10912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 10922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *maxbuf = data + length; 10932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int name_trn_id, response, opcode, nm_flags, rcode; 10942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int qdcount, ancount, nscount, arcount; 10952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *opcodestr; 10962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *p; 10972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int total, i; 10982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(data[10], 2); 11002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project name_trn_id = EXTRACT_16BITS(data); 11012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project response = (data[2] >> 7); 11022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project opcode = (data[2] >> 3) & 0xF; 11032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nm_flags = ((data[2] & 0x7) << 4) + (data[3] >> 4); 11042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rcode = data[3] & 0xF; 11052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project qdcount = EXTRACT_16BITS(data + 4); 11062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ancount = EXTRACT_16BITS(data + 6); 11072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project nscount = EXTRACT_16BITS(data + 8); 11082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project arcount = EXTRACT_16BITS(data + 10); 11092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project startbuf = data; 11102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (maxbuf <= data) 11122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 11132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag > 1) 11152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n>>> "); 11162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("NBT UDP PACKET(137): "); 11182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (opcode) { 11202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0: opcodestr = "QUERY"; break; 11212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 5: opcodestr = "REGISTRATION"; break; 11222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 6: opcodestr = "RELEASE"; break; 11232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 7: opcodestr = "WACK"; break; 11242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 8: opcodestr = "REFRESH(8)"; break; 11252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 9: opcodestr = "REFRESH"; break; 11262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 15: opcodestr = "MULTIHOMED REGISTRATION"; break; 11272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: opcodestr = "OPUNKNOWN"; break; 11282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%s", opcodestr); 11302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (response) { 11312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rcode) 11322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("; NEGATIVE"); 11332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 11342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("; POSITIVE"); 11352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (response) 11382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("; RESPONSE"); 11392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 11402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("; REQUEST"); 11412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nm_flags & 1) 11432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("; BROADCAST"); 11442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 11452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("; UNICAST"); 11462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag < 2) 11482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 11492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\nTrnID=0x%X\nOpCode=%d\nNmFlags=0x%X\nRcode=%d\nQueryCount=%d\nAnswerCount=%d\nAuthorityCount=%d\nAddressRecCount=%d\n", 11512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project name_trn_id, opcode, nm_flags, rcode, qdcount, ancount, nscount, 11522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project arcount); 11532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = data + 12; 11552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project total = ancount + nscount + arcount; 11572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (qdcount > 100 || total > 100) { 11592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("Corrupt packet??\n"); 11602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 11612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (qdcount) { 11642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("QuestionRecords:\n"); 11652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < qdcount; i++) { 11662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = smb_fdata(p, 11672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "|Name=[n1]\nQuestionType=[rw]\nQuestionClass=[rw]\n#", 11682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, 0); 11692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p == NULL) 11702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto out; 11712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (total) { 11752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\nResourceRecords:\n"); 11762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < total; i++) { 11772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int rdlen; 11782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int restype; 11792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = smb_fdata(p, "Name=[n1]\n#", maxbuf, 0); 11812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p == NULL) 11822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto out; 11832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project restype = EXTRACT_16BITS(p); 11842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = smb_fdata(p, "ResType=[rw]\nResClass=[rw]\nTTL=[rD]\n", p + 8, 0); 11852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p == NULL) 11862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto out; 11872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project rdlen = EXTRACT_16BITS(p); 11882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("ResourceLength=%d\nResourceData=\n", rdlen); 11892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p += 2; 11902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (rdlen == 6) { 11912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = smb_fdata(p, "AddrType=[rw]\nAddress=[b.b.b.b]\n", p + rdlen, 0); 11922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p == NULL) 11932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto out; 11942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 11952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (restype == 0x21) { 11962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int numnames; 11972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(*p); 11992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project numnames = p[0]; 12002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = smb_fdata(p, "NumNames=[B]\n", p + 1, 0); 12012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p == NULL) 12022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto out; 12032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (numnames--) { 12042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = smb_fdata(p, "Name=[n2]\t#", maxbuf, 0); 12052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p == NULL) 12062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto out; 12072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(*p); 12082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p[0] & 0x80) 12092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("<GROUP> "); 12102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (p[0] & 0x60) { 12112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x00: printf("B "); break; 12122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x20: printf("P "); break; 12132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x40: printf("M "); break; 12142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case 0x60: printf("_ "); break; 12152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p[0] & 0x10) 12172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("<DEREGISTERING> "); 12182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p[0] & 0x08) 12192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("<CONFLICT> "); 12202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p[0] & 0x04) 12212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("<ACTIVE> "); 12222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p[0] & 0x02) 12232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("<PERMANENT> "); 12242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n"); 12252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p += 2; 12262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 12282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_data(p, min(rdlen, length - (p - data))); 12292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p += rdlen; 12302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p < maxbuf) 12362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(p, "AdditionalData:\n", maxbuf, 0); 12372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectout: 12392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n"); 12402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fflush(stdout); 12412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 12422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 12432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|SMB]"); 12442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 12452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 12462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 12502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * print a NBT packet received across udp on port 138 12512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 12522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid 12532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectnbt_udp138_print(const u_char *data, int length) 12542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 12552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *maxbuf = data + length; 12562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (maxbuf > snapend) 12582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf = snapend; 12592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (maxbuf <= data) 12602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 12612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project startbuf = data; 12622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag < 2) { 12642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("NBT UDP PACKET(138)"); 12652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 12662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, 12692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "\n>>> NBT UDP PACKET(138) Res=[rw] ID=[rw] IP=[b.b.b.b] Port=[rd] Length=[rd] Res2=[rw]\nSourceName=[n1]\nDestName=[n1]\n#", 12702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf, 0); 12712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (data != NULL) { 12732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* If there isn't enough data for "\377SMB", don't check for it. */ 12742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (&data[3] >= maxbuf) 12752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto out; 12762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (memcmp(data, "\377SMB",4) == 0) 12782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_smb(data, maxbuf); 12792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 12802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectout: 12812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n"); 12822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fflush(stdout); 12832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 12842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 12862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 12872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print netbeui frames 12882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project*/ 12892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct nbf_strings { 12902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *name; 12912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *nonverbose; 12922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *verbose; 12932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} nbf_strings[0x20] = { 12942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Add Group Name Query", ", [P23]Name to add=[n2]#", 12952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "[P5]ResponseCorrelator=[w]\n[P16]Name to add=[n2]\n" }, 12962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Add Name Query", ", [P23]Name to add=[n2]#", 12972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "[P5]ResponseCorrelator=[w]\n[P16]Name to add=[n2]\n" }, 12982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Name In Conflict", NULL, NULL }, 12992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Status Query", NULL, NULL }, 13002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL }, /* not used */ 13012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL }, /* not used */ 13022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL }, /* not used */ 13032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Terminate Trace", NULL, NULL }, 13042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Datagram", NULL, 13052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "[P7]Destination=[n2]\nSource=[n2]\n" }, 13062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Broadcast Datagram", NULL, 13072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "[P7]Destination=[n2]\nSource=[n2]\n" }, 13082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Name Query", ", [P7]Name=[n2]#", 13092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "[P1]SessionNumber=[B]\nNameType=[B][P2]\nResponseCorrelator=[w]\nName=[n2]\nName of sender=[n2]\n" }, 13102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL }, /* not used */ 13112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL }, /* not used */ 13122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Add Name Response", ", [P1]GroupName=[w] [P4]Destination=[n2] Source=[n2]#", 13132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "AddNameInProcess=[B]\nGroupName=[w]\nTransmitCorrelator=[w][P2]\nDestination=[n2]\nSource=[n2]\n" }, 13142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Name Recognized", NULL, 13152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "[P1]Data2=[w]\nTransmitCorrelator=[w]\nResponseCorelator=[w]\nDestination=[n2]\nSource=[n2]\n" }, 13162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Status Response", NULL, NULL }, 13172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL }, /* not used */ 13182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL }, /* not used */ 13192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL }, /* not used */ 13202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Terminate Trace", NULL, NULL }, 13212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Data Ack", NULL, 13222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "[P3]TransmitCorrelator=[w][P2]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" }, 13232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Data First/Middle", NULL, 13242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Flags=[{RECEIVE_CONTINUE|NO_ACK||PIGGYBACK_ACK_INCLUDED|}]\nResyncIndicator=[w][P2]\nResponseCorelator=[w]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" }, 13252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Data Only/Last", NULL, 13262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Flags=[{|NO_ACK|PIGGYBACK_ACK_ALLOWED|PIGGYBACK_ACK_INCLUDED|}]\nResyncIndicator=[w][P2]\nResponseCorelator=[w]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" }, 13272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Session Confirm", NULL, 13282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Data1=[B]\nData2=[w]\nTransmitCorrelator=[w]\nResponseCorelator=[w]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" }, 13292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Session End", NULL, 13302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "[P1]Data2=[w][P4]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" }, 13312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Session Initialize", NULL, 13322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Data1=[B]\nData2=[w]\nTransmitCorrelator=[w]\nResponseCorelator=[w]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" }, 13332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "No Receive", NULL, 13342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "Flags=[{|SEND_NO_ACK}]\nDataBytesAccepted=[b][P4]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" }, 13352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Receive Outstanding", NULL, 13362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "[P1]DataBytesAccepted=[b][P4]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" }, 13372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Receive Continue", NULL, 13382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "[P2]TransmitCorrelator=[w]\n[P2]RemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" }, 13392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL }, /* not used */ 13402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { NULL, NULL, NULL }, /* not used */ 13412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { "Session Alive", NULL, NULL } 13422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 13432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid 13452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectnetbeui_print(u_short control, const u_char *data, int length) 13462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 13472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *maxbuf = data + length; 13482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int len; 13492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int command; 13502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *data2; 13512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int is_truncated = 0; 13522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (maxbuf > snapend) 13542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf = snapend; 13552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK(data[4]); 13562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project len = EXTRACT_LE_16BITS(data); 13572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project command = data[4]; 13582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data2 = data + len; 13592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (data2 >= maxbuf) { 13602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data2 = maxbuf; 13612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project is_truncated = 1; 13622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 13632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project startbuf = data; 13652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag < 2) { 13672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("NBF Packet: "); 13682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, "[P5]#", maxbuf, 0); 13692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 13702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n>>> NBF Packet\nType=0x%X ", control); 13712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, "Length=[d] Signature=[w] Command=[B]\n#", maxbuf, 0); 13722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 13732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (data == NULL) 13742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto out; 13752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (command > 0x1f || nbf_strings[command].name == NULL) { 13772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag < 2) 13782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, "Unknown NBF Command#", data2, 0); 13792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 13802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, "Unknown NBF Command\n", data2, 0); 13812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 13822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag < 2) { 13832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%s", nbf_strings[command].name); 13842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nbf_strings[command].nonverbose != NULL) 13852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, nbf_strings[command].nonverbose, data2, 0); 13862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 13872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%s:\n", nbf_strings[command].name); 13882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nbf_strings[command].verbose != NULL) 13892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project data = smb_fdata(data, nbf_strings[command].verbose, data2, 0); 13902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 13912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n"); 13922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 13932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 13942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (vflag < 2) 13962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 13972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 13982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (data == NULL) 13992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto out; 14002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (is_truncated) { 14022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* data2 was past the end of the buffer */ 14032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto out; 14042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 14052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* If this isn't a command that would contain an SMB message, quit. */ 14072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (command != 0x08 && command != 0x09 && command != 0x15 && 14082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project command != 0x16) 14092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto out; 14102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* If there isn't enough data for "\377SMB", don't look for it. */ 14122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (&data2[3] >= maxbuf) 14132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project goto out; 14142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (memcmp(data2, "\377SMB",4) == 0) 14162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_smb(data2, maxbuf); 14172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else { 14182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 14192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < 128; i++) { 14202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (&data2[i + 3] >= maxbuf) 14212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 14222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (memcmp(&data2[i], "\377SMB", 4) == 0) { 14232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("found SMB packet at %d\n", i); 14242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_smb(&data2[i], maxbuf); 14252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 14262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 14272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 14282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 14292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectout: 14312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n"); 14322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 14332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 14342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|SMB]"); 14352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 14362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 14372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 14402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * print IPX-Netbios frames 14412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 14422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid 14432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectipx_netbios_print(const u_char *data, u_int length) 14442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 14452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 14462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * this is a hack till I work out how to parse the rest of the 14472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * NetBIOS-over-IPX stuff 14482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 14492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 14502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *maxbuf; 14512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 14522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf = data + length; 14532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Don't go past the end of the captured data in the packet. */ 14542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (maxbuf > snapend) 14552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project maxbuf = snapend; 14562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project startbuf = data; 14572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; i < 128; i++) { 14582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (&data[i + 4] > maxbuf) 14592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 14602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (memcmp(&data[i], "\377SMB", 4) == 0) { 14612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(data, "\n>>> IPX transport ", &data[i], 0); 14622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (data != NULL) 14632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print_smb(&data[i], maxbuf); 14642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("\n"); 14652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fflush(stdout); 14662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 14672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 14682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 14692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (i == 128) 14702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project smb_fdata(data, "\n>>> Unknown IPX ", maxbuf, 0); 14712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1472