root/source4/torture/libnet/libnet_lookup.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. torture_lookup
  2. torture_lookup_host
  3. torture_lookup_pdc
  4. torture_lookup_sam_name

   1 /* 
   2    Unix SMB/CIFS implementation.
   3    Test suite for libnet calls.
   4 
   5    Copyright (C) Rafal Szczesniak 2005
   6    
   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.
  11    
  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.
  16    
  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/>.
  19 */
  20 
  21 #include "includes.h"
  22 #include "lib/cmdline/popt_common.h"
  23 #include "libnet/libnet.h"
  24 #include "librpc/gen_ndr/nbt.h"
  25 #include "librpc/rpc/dcerpc.h"
  26 #include "libcli/libcli.h"
  27 #include "torture/rpc/rpc.h"
  28 #include "torture/torture.h"
  29 #include "param/param.h"
  30 
  31 
  32 bool torture_lookup(struct torture_context *torture)
     /* [<][>][^][v][top][bottom][index][help] */
  33 {
  34         bool ret;
  35         NTSTATUS status;
  36         TALLOC_CTX *mem_ctx;
  37         struct libnet_context *ctx;
  38         struct libnet_Lookup lookup;
  39         struct dcerpc_binding *binding;
  40 
  41         mem_ctx = talloc_init("test_lookup");
  42 
  43         ctx = libnet_context_init(torture->ev, torture->lp_ctx);
  44         ctx->cred = cmdline_credentials;
  45 
  46         lookup.in.hostname = torture_setting_string(torture, "host", NULL);
  47         if (lookup.in.hostname == NULL) {
  48                 status = torture_rpc_binding(torture, &binding);
  49                 if (NT_STATUS_IS_OK(status)) {
  50                         lookup.in.hostname = binding->host;
  51                 }
  52         }
  53 
  54         lookup.in.type     = NBT_NAME_CLIENT;
  55         lookup.in.resolve_ctx = NULL;
  56         lookup.out.address = NULL;
  57 
  58         status = libnet_Lookup(ctx, mem_ctx, &lookup);
  59 
  60         if (!NT_STATUS_IS_OK(status)) {
  61                 printf("Couldn't lookup name %s: %s\n", lookup.in.hostname, nt_errstr(status));
  62                 ret = false;
  63                 goto done;
  64         }
  65 
  66         ret = true;
  67 
  68         printf("Name [%s] found at address: %s.\n", lookup.in.hostname, *lookup.out.address);
  69 
  70 done:
  71         talloc_free(mem_ctx);
  72         return ret;
  73 }
  74 
  75 
  76 bool torture_lookup_host(struct torture_context *torture)
     /* [<][>][^][v][top][bottom][index][help] */
  77 {
  78         bool ret;
  79         NTSTATUS status;
  80         TALLOC_CTX *mem_ctx;
  81         struct libnet_context *ctx;
  82         struct libnet_Lookup lookup;
  83         struct dcerpc_binding *binding;
  84 
  85         mem_ctx = talloc_init("test_lookup_host");
  86 
  87         ctx = libnet_context_init(torture->ev, torture->lp_ctx);
  88         ctx->cred = cmdline_credentials;
  89 
  90         lookup.in.hostname = torture_setting_string(torture, "host", NULL);
  91         if (lookup.in.hostname == NULL) {
  92                 status = torture_rpc_binding(torture, &binding);
  93                 if (NT_STATUS_IS_OK(status)) {
  94                         lookup.in.hostname = binding->host;
  95                 }
  96         }
  97 
  98         lookup.in.resolve_ctx = NULL;
  99         lookup.out.address = NULL;
 100 
 101         status = libnet_LookupHost(ctx, mem_ctx, &lookup);
 102 
 103         if (!NT_STATUS_IS_OK(status)) {
 104                 printf("Couldn't lookup host %s: %s\n", lookup.in.hostname, nt_errstr(status));
 105                 ret = false;
 106                 goto done;
 107         }
 108 
 109         ret = true;
 110 
 111         printf("Host [%s] found at address: %s.\n", lookup.in.hostname, *lookup.out.address);
 112 
 113 done:
 114         talloc_free(mem_ctx);
 115         return ret;
 116 }
 117 
 118 
 119 bool torture_lookup_pdc(struct torture_context *torture)
     /* [<][>][^][v][top][bottom][index][help] */
 120 {
 121         bool ret;
 122         NTSTATUS status;
 123         TALLOC_CTX *mem_ctx;
 124         struct libnet_context *ctx;
 125         struct libnet_LookupDCs *lookup;
 126         int i;
 127 
 128         mem_ctx = talloc_init("test_lookup_pdc");
 129 
 130         ctx = libnet_context_init(torture->ev, torture->lp_ctx);
 131         ctx->cred = cmdline_credentials;
 132 
 133         talloc_steal(ctx, mem_ctx);
 134 
 135         lookup = talloc(mem_ctx, struct libnet_LookupDCs);
 136         if (!lookup) {
 137                 ret = false;
 138                 goto done;
 139         }
 140 
 141         lookup->in.domain_name = lp_workgroup(torture->lp_ctx);
 142         lookup->in.name_type   = NBT_NAME_PDC;
 143 
 144         status = libnet_LookupDCs(ctx, mem_ctx, lookup);
 145 
 146         if (!NT_STATUS_IS_OK(status)) {
 147                 printf("Couldn't lookup pdc %s: %s\n", lookup->in.domain_name,
 148                        nt_errstr(status));
 149                 ret = false;
 150                 goto done;
 151         }
 152 
 153         ret = true;
 154 
 155         printf("DCs of domain [%s] found.\n", lookup->in.domain_name);
 156         for (i = 0; i < lookup->out.num_dcs; i++) {
 157                 printf("\tDC[%d]: name=%s, address=%s\n", i, lookup->out.dcs[i].name,
 158                        lookup->out.dcs[i].address);
 159         }
 160 
 161 done:
 162         talloc_free(mem_ctx);
 163         return ret;
 164 }
 165 
 166 
 167 bool torture_lookup_sam_name(struct torture_context *torture)
     /* [<][>][^][v][top][bottom][index][help] */
 168 {
 169         NTSTATUS status;
 170         TALLOC_CTX *mem_ctx;
 171         struct libnet_context *ctx;
 172         struct libnet_LookupName r;
 173 
 174         ctx = libnet_context_init(torture->ev, torture->lp_ctx);
 175         ctx->cred = cmdline_credentials;
 176 
 177         mem_ctx = talloc_init("torture lookup sam name");
 178         if (mem_ctx == NULL) return false;
 179 
 180         r.in.name = "Administrator";
 181         r.in.domain_name = lp_workgroup(torture->lp_ctx);
 182 
 183         status = libnet_LookupName(ctx, mem_ctx, &r);
 184 
 185         talloc_free(mem_ctx);
 186         talloc_free(ctx);
 187 
 188         return true;
 189 }

/* [<][>][^][v][top][bottom][index][help] */