107
107
Do a node status query.
108
108
****************************************************************************/
110
static void do_node_status(int fd,
110
static void do_node_status(const char *name,
113
112
struct sockaddr_storage *pss)
115
114
struct nmb_name nname;
117
NODE_STATUS_STRUCT *status;
116
struct node_status *addrs;
118
117
struct node_status_extra extra;
119
118
fstring cleanname;
120
119
char addr[INET6_ADDRSTRLEN];
122
122
print_sockaddr(addr, sizeof(addr), pss);
123
123
d_printf("Looking up status of %s\n",addr);
124
124
make_nmb_name(&nname, name, type);
125
status = node_status_query(fd, &nname, pss, &count, &extra);
125
status = node_status_query(talloc_tos(), &nname, pss,
126
&addrs, &count, &extra);
127
if (NT_STATUS_IS_OK(status)) {
127
128
for (i=0;i<count;i++) {
128
pull_ascii_fstring(cleanname, status[i].name);
129
pull_ascii_fstring(cleanname, addrs[i].name);
129
130
for (j=0;cleanname[j];j++) {
130
131
if (!isprint((int)cleanname[j])) {
131
132
cleanname[j] = '.';
134
135
d_printf("\t%-15s <%02x> - %s\n",
135
cleanname,status[i].type,
136
node_status_flags(status[i].flags));
136
cleanname,addrs[i].type,
137
node_status_flags(addrs[i].flags));
138
139
d_printf("\n\tMAC Address = %02X-%02X-%02X-%02X-%02X-%02X\n",
139
140
extra.mac_addr[0], extra.mac_addr[1],
140
141
extra.mac_addr[2], extra.mac_addr[3],
141
142
extra.mac_addr[4], extra.mac_addr[5]);
145
146
d_printf("No reply from %s\n\n",addr);
154
155
static bool query_one(const char *lookup, unsigned int lookup_type)
156
int j, count, flags = 0;
157
159
struct sockaddr_storage *ip_list=NULL;
160
NTSTATUS status = NT_STATUS_NOT_FOUND;
160
163
char addr[INET6_ADDRSTRLEN];
161
164
print_sockaddr(addr, sizeof(addr), &bcast_addr);
162
165
d_printf("querying %s on %s\n", lookup, addr);
163
ip_list = name_query(ServerFD,lookup,lookup_type,use_bcast,
164
use_bcast?true:recursion_desired,
165
&bcast_addr, &count, &flags, NULL);
166
status = name_query(lookup,lookup_type,use_bcast,
167
use_bcast?true:recursion_desired,
168
&bcast_addr, talloc_tos(),
169
&ip_list, &count, &flags);
167
171
const struct in_addr *bcast;
168
172
for (j=iface_count() - 1;
179
183
print_sockaddr(addr, sizeof(addr), &bcast_ss);
180
184
d_printf("querying %s on %s\n",
182
ip_list = name_query(ServerFD,lookup,lookup_type,
184
use_bcast?True:recursion_desired,
185
&bcast_ss,&count, &flags, NULL);
186
status = name_query(lookup,lookup_type,
188
use_bcast?True:recursion_desired,
189
&bcast_ss, talloc_tos(),
190
&ip_list, &count, &flags);
194
if (!NT_STATUS_IS_OK(status)) {
214
219
was valid - ie. name_query returned true.
216
221
if (find_status) {
217
do_node_status(ServerFD, lookup,
218
lookup_type, &ip_list[j]);
222
do_node_status(lookup, lookup_type, &ip_list[j]);
226
TALLOC_FREE(ip_list);
224
return (ip_list != NULL);
228
return NT_STATUS_IS_OK(status);
259
263
load_case_tables();
261
setup_logging(argv[0],True);
265
setup_logging(argv[0], DEBUG_STDOUT);
263
267
pc = poptGetContext("nmblookup", argc, (const char **)argv,
264
268
long_options, POPT_CONTEXT_KEEP_FIRST);
335
339
ip = interpret_addr2(lookup);
336
340
in_addr_to_sockaddr_storage(&ss, ip);
337
341
fstrcpy(lookup,"*");
338
do_node_status(ServerFD, lookup, lookup_type, &ss);
342
do_node_status(lookup, lookup_type, &ss);