2 Unix SMB/CIFS implementation.
3 Test suite for libnet calls.
5 Copyright (C) Rafal Szczesniak 2005
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 #include "lib/cmdline/popt_common.h"
23 #include "libnet/libnet.h"
24 #include "libcli/libcli.h"
25 #include "torture/rpc/torture_rpc.h"
26 #include "param/param.h"
29 bool torture_lookup(struct torture_context
*torture
)
34 struct libnet_context
*ctx
;
35 struct libnet_Lookup lookup
;
36 struct dcerpc_binding
*binding
;
38 mem_ctx
= talloc_init("test_lookup");
40 ctx
= libnet_context_init(torture
->ev
, torture
->lp_ctx
);
41 ctx
->cred
= cmdline_credentials
;
43 lookup
.in
.hostname
= torture_setting_string(torture
, "host", NULL
);
44 if (lookup
.in
.hostname
== NULL
) {
45 status
= torture_rpc_binding(torture
, &binding
);
46 if (NT_STATUS_IS_OK(status
)) {
47 lookup
.in
.hostname
= binding
->host
;
51 lookup
.in
.type
= NBT_NAME_CLIENT
;
52 lookup
.in
.resolve_ctx
= NULL
;
53 lookup
.out
.address
= NULL
;
55 status
= libnet_Lookup(ctx
, mem_ctx
, &lookup
);
57 if (!NT_STATUS_IS_OK(status
)) {
58 torture_comment(torture
, "Couldn't lookup name %s: %s\n", lookup
.in
.hostname
, nt_errstr(status
));
65 torture_comment(torture
, "Name [%s] found at address: %s.\n", lookup
.in
.hostname
, *lookup
.out
.address
);
73 bool torture_lookup_host(struct torture_context
*torture
)
78 struct libnet_context
*ctx
;
79 struct libnet_Lookup lookup
;
80 struct dcerpc_binding
*binding
;
82 mem_ctx
= talloc_init("test_lookup_host");
84 ctx
= libnet_context_init(torture
->ev
, torture
->lp_ctx
);
85 ctx
->cred
= cmdline_credentials
;
87 lookup
.in
.hostname
= torture_setting_string(torture
, "host", NULL
);
88 if (lookup
.in
.hostname
== NULL
) {
89 status
= torture_rpc_binding(torture
, &binding
);
90 if (NT_STATUS_IS_OK(status
)) {
91 lookup
.in
.hostname
= binding
->host
;
95 lookup
.in
.resolve_ctx
= NULL
;
96 lookup
.out
.address
= NULL
;
98 status
= libnet_LookupHost(ctx
, mem_ctx
, &lookup
);
100 if (!NT_STATUS_IS_OK(status
)) {
101 torture_comment(torture
, "Couldn't lookup host %s: %s\n", lookup
.in
.hostname
, nt_errstr(status
));
108 torture_comment(torture
, "Host [%s] found at address: %s.\n", lookup
.in
.hostname
, *lookup
.out
.address
);
111 talloc_free(mem_ctx
);
116 bool torture_lookup_pdc(struct torture_context
*torture
)
121 struct libnet_context
*ctx
;
122 struct libnet_LookupDCs
*lookup
;
125 mem_ctx
= talloc_init("test_lookup_pdc");
127 ctx
= libnet_context_init(torture
->ev
, torture
->lp_ctx
);
128 ctx
->cred
= cmdline_credentials
;
130 talloc_steal(ctx
, mem_ctx
);
132 lookup
= talloc(mem_ctx
, struct libnet_LookupDCs
);
138 lookup
->in
.domain_name
= lpcfg_workgroup(torture
->lp_ctx
);
139 lookup
->in
.name_type
= NBT_NAME_PDC
;
141 status
= libnet_LookupDCs(ctx
, mem_ctx
, lookup
);
143 if (!NT_STATUS_IS_OK(status
)) {
144 torture_comment(torture
, "Couldn't lookup pdc %s: %s\n", lookup
->in
.domain_name
,
152 torture_comment(torture
, "DCs of domain [%s] found.\n", lookup
->in
.domain_name
);
153 for (i
= 0; i
< lookup
->out
.num_dcs
; i
++) {
154 torture_comment(torture
, "\tDC[%d]: name=%s, address=%s\n", i
, lookup
->out
.dcs
[i
].name
,
155 lookup
->out
.dcs
[i
].address
);
159 talloc_free(mem_ctx
);
164 bool torture_lookup_sam_name(struct torture_context
*torture
)
168 struct libnet_context
*ctx
;
169 struct libnet_LookupName r
;
171 ctx
= libnet_context_init(torture
->ev
, torture
->lp_ctx
);
172 ctx
->cred
= cmdline_credentials
;
174 mem_ctx
= talloc_init("torture lookup sam name");
175 if (mem_ctx
== NULL
) return false;
177 r
.in
.name
= "Administrator";
178 r
.in
.domain_name
= lpcfg_workgroup(torture
->lp_ctx
);
180 status
= libnet_LookupName(ctx
, mem_ctx
, &r
);
182 talloc_free(mem_ctx
);