[SCM] Samba Shared Repository - branch master updated
Günther Deschner
gd at samba.org
Wed Sep 15 02:17:36 MDT 2010
The branch, master has been updated
via c35629c s3-nltest: add dsgetdc command.
via bbdbb0c s3-libnetapi: try using netr_DsRGetDCNameEx() in DsGetDcName().
via 3fe966d s3-libnetapi: add DS request flags to public header.
via 26672e2 s3-libnetapi: add DS_X_FLAGs to public header.
via 45d772e libnetapi: add DOMAIN_CONTROLLER_INFO_FLAGS.
via 5901e81 s3-nltest: convert server input argument into --server.
via a609c03 s3-nltest: rename print_result to print_netlogon_info_result.
from 2d23ddb s3-build: only link in prs parser where needed.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit c35629cbb2e5f7c6743c8c15e0b3bb424e611931
Author: Günther Deschner <gd at samba.org>
Date: Fri Sep 10 09:56:36 2010 +0200
s3-nltest: add dsgetdc command.
Guenther
commit bbdbb0cbcc3de9a3188b77c2d34cf46a33bbe980
Author: Günther Deschner <gd at samba.org>
Date: Wed Sep 15 10:11:38 2010 +0200
s3-libnetapi: try using netr_DsRGetDCNameEx() in DsGetDcName().
Guenther
commit 3fe966d28003f8a09a29c9a9051672e0e066e7b6
Author: Günther Deschner <gd at samba.org>
Date: Sat Sep 11 01:23:01 2010 +0200
s3-libnetapi: add DS request flags to public header.
Guenther
commit 26672e228a6eb327f5810ee1b6adb8b4bb39d5ec
Author: Günther Deschner <gd at samba.org>
Date: Sat Sep 11 01:19:07 2010 +0200
s3-libnetapi: add DS_X_FLAGs to public header.
Guenther
commit 45d772e0e616186cd8b45c81d7c775e07ab0d7ae
Author: Günther Deschner <gd at samba.org>
Date: Sat Sep 11 01:18:04 2010 +0200
libnetapi: add DOMAIN_CONTROLLER_INFO_FLAGS.
Guenther
commit 5901e81acff9b6da965782276e457069bf2be55d
Author: Günther Deschner <gd at samba.org>
Date: Tue Sep 14 17:39:45 2010 +0200
s3-nltest: convert server input argument into --server.
Guenther
commit a609c03956843b11d335b7f3b0f8d5a330588711
Author: Günther Deschner <gd at samba.org>
Date: Fri Sep 10 09:56:02 2010 +0200
s3-nltest: rename print_result to print_netlogon_info_result.
Guenther
-----------------------------------------------------------------------
Summary of changes:
source3/lib/netapi/examples/netlogon/nltest.c | 248 +++++++++++++++++++++---
source3/lib/netapi/getdc.c | 13 ++
source3/lib/netapi/netapi.h | 37 ++++
source3/librpc/idl/libnetapi.idl | 20 ++-
4 files changed, 286 insertions(+), 32 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/lib/netapi/examples/netlogon/nltest.c b/source3/lib/netapi/examples/netlogon/nltest.c
index 9dc70da..e3ced90 100644
--- a/source3/lib/netapi/examples/netlogon/nltest.c
+++ b/source3/lib/netapi/examples/netlogon/nltest.c
@@ -30,18 +30,42 @@
#include "common.h"
enum {
- OPT_DBFLAG = 1,
+ OPT_SERVER = 1,
+ OPT_DBFLAG,
OPT_SC_QUERY,
OPT_SC_RESET,
OPT_SC_VERIFY,
- OPT_SC_CHANGE_PWD
+ OPT_SC_CHANGE_PWD,
+ OPT_DSGETDC,
+ OPT_PDC,
+ OPT_DS,
+ OPT_DSP,
+ OPT_GC,
+ OPT_KDC,
+ OPT_TIMESERV,
+ OPT_GTIMESERV,
+ OPT_WS,
+ OPT_NETBIOS,
+ OPT_DNS,
+ OPT_IP,
+ OPT_FORCE,
+ OPT_WRITABLE,
+ OPT_AVOIDSELF,
+ OPT_LDAPONLY,
+ OPT_BACKG,
+ OPT_DS_6,
+ OPT_TRY_NEXT_CLOSEST_SITE,
+ OPT_SITE,
+ OPT_ACCOUNT,
+ OPT_RET_DNS,
+ OPT_RET_NETBIOS
};
/****************************************************************
****************************************************************/
-static void print_result(uint32_t level,
- uint8_t *buffer)
+static void print_netlogon_info_result(uint32_t level,
+ uint8_t *buffer)
{
struct NETLOGON_INFO_1 *i1 = NULL;
struct NETLOGON_INFO_2 *i2 = NULL;
@@ -100,25 +124,126 @@ static void print_result(uint32_t level,
/****************************************************************
****************************************************************/
+static void print_dc_info_flags(uint32_t flags)
+{
+ if (flags & DS_PDC_FLAG)
+ printf("PDC ");
+ if (flags & DS_GC_FLAG)
+ printf("GC ");
+ if (flags & DS_DS_FLAG)
+ printf("DS ");
+ if (flags & DS_LDAP_FLAG)
+ printf("LDAP ");
+ if (flags & DS_KDC_FLAG)
+ printf("KDC ");
+ if (flags & DS_TIMESERV_FLAG)
+ printf("TIMESERV ");
+ if (flags & DS_GOOD_TIMESERV_FLAG)
+ printf("GTIMESERV ");
+ if (flags & DS_WRITABLE_FLAG)
+ printf("WRITABLE ");
+ if (flags & DS_DNS_FOREST_FLAG)
+ printf("DNS_FOREST ");
+ if (flags & DS_CLOSEST_FLAG)
+ printf("CLOSE_SITE ");
+ if (flags & DS_FULL_SECRET_DOMAIN_6_FLAG)
+ printf("FULL_SECRET ");
+ /* "WS" */
+ printf("\n");
+}
+
+/****************************************************************
+****************************************************************/
+
+static void print_dc_info(struct DOMAIN_CONTROLLER_INFO *dc_info)
+{
+ if (dc_info->flags) {
+ printf(" DC: %s\n", dc_info->domain_controller_name);
+ printf(" Address: %s\n", dc_info->domain_controller_address);
+/* printf(" Dom Guid: %s\n", X(domain_guid)); */
+ printf(" Dom Name: %s\n", dc_info->domain_name);
+ printf(" Forest Name: %s\n", dc_info->dns_forest_name);
+ printf(" Dc Site Name: %s\n", dc_info->dc_site_name);
+ printf("Our Site Name: %s\n", dc_info->client_site_name);
+ printf(" Flags: ");
+ print_dc_info_flags(dc_info->flags);
+ } else {
+ printf(" DC: %s\n", dc_info->domain_controller_name);
+ printf(" Address: %s\n", dc_info->domain_controller_address);
+ printf(" Dom Name: %s\n", dc_info->domain_name);
+ }
+}
+
+/****************************************************************
+****************************************************************/
+
int main(int argc, const char **argv)
{
int opt;
NET_API_STATUS status;
struct libnetapi_ctx *ctx = NULL;
- const char *server_name = NULL;
+ char *opt_server = NULL;
char *opt_domain = NULL;
int opt_dbflag = 0;
+ int opt_pdc = 0;
+ int opt_ds = 0;
+ int opt_dsp = 0;
+ int opt_gc = 0;
+ int opt_kdc = 0;
+ int opt_timeserv = 0;
+ int opt_gtimeserv = 0;
+ int opt_ws = 0;
+ int opt_netbios = 0;
+ int opt_dns = 0;
+ int opt_ip = 0;
+ int opt_force = 0;
+ int opt_writable = 0;
+ int opt_avoidself = 0;
+ int opt_ldaponly = 0;
+ int opt_backg = 0;
+ int opt_ds_6 = 0;
+ int opt_try_next_closest_site = 0;
+ char *opt_site = NULL;
+ char *opt_account = NULL;
+ int opt_ret_dns = 0;
+ int opt_ret_netbios = 0;
uint32_t query_level = 0;
uint8_t *buffer = NULL;
+ uint32_t flags = 0;
+ struct DOMAIN_CONTROLLER_INFO *dc_info = NULL;
poptContext pc;
struct poptOption long_options[] = {
POPT_AUTOHELP
+ {"server", 0, POPT_ARG_STRING, &opt_server, OPT_SERVER, "Servername", "SERVER"},
{"dbflag", 0, POPT_ARG_INT, &opt_dbflag, OPT_DBFLAG, "New Debug Flag", "HEXFLAGS"},
{"sc_query", 0, POPT_ARG_STRING, &opt_domain, OPT_SC_QUERY, "Query secure channel for domain on server", "DOMAIN"},
{"sc_reset", 0, POPT_ARG_STRING, &opt_domain, OPT_SC_RESET, "Reset secure channel for domain on server to dcname", "DOMAIN"},
{"sc_verify", 0, POPT_ARG_STRING, &opt_domain, OPT_SC_VERIFY, "Verify secure channel for domain on server", "DOMAIN"},
{"sc_change_pwd", 0, POPT_ARG_STRING, &opt_domain, OPT_SC_CHANGE_PWD, "Change a secure channel password for domain on server", "DOMAIN"},
+ {"dsgetdc", 0, POPT_ARG_STRING, &opt_domain, OPT_DSGETDC, "Call DsGetDcName", "DOMAIN"},
+ {"pdc", 0, POPT_ARG_NONE, &opt_pdc, OPT_PDC, NULL},
+ {"ds", 0, POPT_ARG_NONE, &opt_ds, OPT_DS, NULL},
+ {"dsp", 0, POPT_ARG_NONE, &opt_dsp, OPT_DSP, NULL},
+ {"gc", 0, POPT_ARG_NONE, &opt_gc, OPT_GC, NULL},
+ {"kdc", 0, POPT_ARG_NONE, &opt_kdc, OPT_KDC, NULL},
+ {"timeserv", 0, POPT_ARG_NONE, &opt_timeserv, OPT_TIMESERV, NULL},
+ {"gtimeserv", 0, POPT_ARG_NONE, &opt_gtimeserv, OPT_GTIMESERV, NULL},
+ {"ws", 0, POPT_ARG_NONE, &opt_ws, OPT_WS, NULL},
+ {"netbios", 0, POPT_ARG_NONE, &opt_netbios, OPT_NETBIOS, NULL},
+ {"dns", 0, POPT_ARG_NONE, &opt_dns, OPT_DNS, NULL},
+ {"ip", 0, POPT_ARG_NONE, &opt_ip, OPT_IP, NULL},
+ {"force", 0, POPT_ARG_NONE, &opt_force, OPT_FORCE, NULL},
+ {"writable", 0, POPT_ARG_NONE, &opt_writable, OPT_WRITABLE, NULL},
+ {"avoidself", 0, POPT_ARG_NONE, &opt_avoidself, OPT_AVOIDSELF, NULL},
+ {"ldaponly", 0, POPT_ARG_NONE, &opt_ldaponly, OPT_LDAPONLY, NULL},
+ {"backg", 0, POPT_ARG_NONE, &opt_backg, OPT_BACKG, NULL},
+ {"ds_6", 0, POPT_ARG_NONE, &opt_ds_6, OPT_DS_6, NULL},
+ {"try_next_closest_site", 0, POPT_ARG_NONE, &opt_try_next_closest_site, OPT_TRY_NEXT_CLOSEST_SITE, NULL},
+ {"site", 0, POPT_ARG_STRING, &opt_site, OPT_SITE, "SITE"},
+ {"account", 0, POPT_ARG_STRING, &opt_account, OPT_ACCOUNT, "ACCOUNT"},
+ {"ret_dns", 0, POPT_ARG_NONE, &opt_ret_dns, OPT_RET_DNS, NULL},
+ {"ret_netbios", 0, POPT_ARG_NONE, &opt_ret_netbios, OPT_RET_NETBIOS, NULL},
POPT_COMMON_LIBNETAPI_EXAMPLES
POPT_TABLEEND
};
@@ -130,39 +255,32 @@ int main(int argc, const char **argv)
pc = poptGetContext("nltest", argc, argv, long_options, 0);
- poptSetOtherOptionHelp(pc, "server_name");
+ poptSetOtherOptionHelp(pc, "<options>");
while((opt = poptGetNextOpt(pc)) != -1) {
}
- if (!poptPeekArg(pc)) {
- poptPrintHelp(pc, stderr, 0);
- goto done;
- }
- server_name = poptGetArg(pc);
-
if (argc == 1) {
poptPrintHelp(pc, stderr, 0);
goto done;
}
- if (!server_name || poptGetArg(pc)) {
- poptPrintHelp(pc, stderr, 0);
- goto done;
- }
-
- if ((server_name[0] == '/' && server_name[1] == '/') ||
- (server_name[0] == '\\' && server_name[1] == '\\')) {
- server_name += 2;
- }
-
poptResetContext(pc);
while ((opt = poptGetNextOpt(pc)) != -1) {
switch (opt) {
+ case OPT_SERVER:
+
+ if ((opt_server[0] == '/' && opt_server[1] == '/') ||
+ (opt_server[0] == '\\' && opt_server[1] == '\\')) {
+ opt_server += 2;
+ }
+
+ break;
+
case OPT_DBFLAG:
query_level = 1;
- status = I_NetLogonControl2(server_name,
+ status = I_NetLogonControl2(opt_server,
NETLOGON_CONTROL_SET_DBFLAG,
query_level,
(uint8_t *)opt_dbflag,
@@ -173,10 +291,13 @@ int main(int argc, const char **argv)
libnetapi_get_error_string(ctx, status));
goto done;
}
+
+ print_netlogon_info_result(query_level, buffer);
+
break;
case OPT_SC_QUERY:
query_level = 2;
- status = I_NetLogonControl2(server_name,
+ status = I_NetLogonControl2(opt_server,
NETLOGON_CONTROL_TC_QUERY,
query_level,
(uint8_t *)opt_domain,
@@ -187,10 +308,13 @@ int main(int argc, const char **argv)
libnetapi_get_error_string(ctx, status));
goto done;
}
+
+ print_netlogon_info_result(query_level, buffer);
+
break;
case OPT_SC_VERIFY:
query_level = 2;
- status = I_NetLogonControl2(server_name,
+ status = I_NetLogonControl2(opt_server,
NETLOGON_CONTROL_TC_VERIFY,
query_level,
(uint8_t *)opt_domain,
@@ -201,10 +325,13 @@ int main(int argc, const char **argv)
libnetapi_get_error_string(ctx, status));
goto done;
}
+
+ print_netlogon_info_result(query_level, buffer);
+
break;
case OPT_SC_RESET:
query_level = 2;
- status = I_NetLogonControl2(server_name,
+ status = I_NetLogonControl2(opt_server,
NETLOGON_CONTROL_REDISCOVER,
query_level,
(uint8_t *)opt_domain,
@@ -215,10 +342,13 @@ int main(int argc, const char **argv)
libnetapi_get_error_string(ctx, status));
goto done;
}
+
+ print_netlogon_info_result(query_level, buffer);
+
break;
case OPT_SC_CHANGE_PWD:
query_level = 1;
- status = I_NetLogonControl2(server_name,
+ status = I_NetLogonControl2(opt_server,
NETLOGON_CONTROL_CHANGE_PASSWORD,
query_level,
(uint8_t *)opt_domain,
@@ -229,15 +359,71 @@ int main(int argc, const char **argv)
libnetapi_get_error_string(ctx, status));
goto done;
}
+
+ print_netlogon_info_result(query_level, buffer);
+
+ break;
+ case OPT_DSGETDC:
+ if (opt_pdc)
+ flags |= DS_PDC_REQUIRED;
+ if (opt_ds)
+ flags |= DS_DIRECTORY_SERVICE_REQUIRED;
+ if (opt_dsp)
+ flags |= DS_DIRECTORY_SERVICE_PREFERRED;
+ if (opt_kdc)
+ flags |= DS_KDC_REQUIRED;
+ if (opt_timeserv)
+ flags |= DS_TIMESERV_REQUIRED;
+ if (opt_gtimeserv)
+ flags |= DS_GOOD_TIMESERV_PREFERRED;
+ if (opt_ws)
+ flags |= DS_WEB_SERVICE_REQUIRED;
+ if (opt_netbios)
+ flags |= DS_IS_FLAT_NAME;
+ if (opt_dns)
+ flags |= DS_IS_DNS_NAME;
+ if (opt_ip)
+ flags |= DS_IP_REQUIRED;
+ if (opt_force)
+ flags |= DS_FORCE_REDISCOVERY;
+ if (opt_writable)
+ flags |= DS_WRITABLE_REQUIRED;
+ if (opt_avoidself)
+ flags |= DS_AVOID_SELF;
+ if (opt_ldaponly)
+ flags |= DS_ONLY_LDAP_NEEDED;
+ if (opt_backg)
+ flags |= DS_BACKGROUND_ONLY;
+ if (opt_ds_6)
+ flags |= DS_DIRECTORY_SERVICE_6_REQUIRED;
+ if (opt_try_next_closest_site)
+ flags |= DS_TRY_NEXTCLOSEST_SITE;
+ if (opt_ret_dns)
+ flags |= DS_RETURN_DNS_NAME;
+ if (opt_ret_netbios)
+ flags |= DS_RETURN_FLAT_NAME;
+
+ status = DsGetDcName(opt_server,
+ opt_domain,
+ NULL, /* domain_guid */
+ opt_site,
+ flags,
+ &dc_info);
+ if (status != 0) {
+ fprintf(stderr, "DsGetDcName failed: Status = %d 0x%x %s\n",
+ status, status,
+ libnetapi_get_error_string(ctx, status));
+ goto done;
+ }
+
+ print_dc_info(dc_info);
+
break;
default:
- poptPrintHelp(pc, stderr, 0);
- goto done;
+ continue;
}
}
- print_result(query_level, buffer);
-
printf("The command completed successfully\n");
status = 0;
diff --git a/source3/lib/netapi/getdc.c b/source3/lib/netapi/getdc.c
index 787b258..565ccbc 100644
--- a/source3/lib/netapi/getdc.c
+++ b/source3/lib/netapi/getdc.c
@@ -146,6 +146,19 @@ WERROR DsGetDcName_r(struct libnetapi_ctx *ctx,
goto done;
}
+ status = rpccli_netr_DsRGetDCNameEx(pipe_cli,
+ ctx,
+ r->in.server_name,
+ r->in.domain_name,
+ r->in.domain_guid,
+ r->in.site_name,
+ r->in.flags,
+ (struct netr_DsRGetDCNameInfo **)r->out.dc_info,
+ &werr);
+ if (NT_STATUS_IS_OK(status)) {
+ goto done;
+ }
+
status = rpccli_netr_DsRGetDCName(pipe_cli,
ctx,
r->in.server_name,
diff --git a/source3/lib/netapi/netapi.h b/source3/lib/netapi/netapi.h
index 8976ebd..9e1549d 100644
--- a/source3/lib/netapi/netapi.h
+++ b/source3/lib/netapi/netapi.h
@@ -1284,6 +1284,22 @@ struct NETLOGON_INFO_4 {
const char * netlog4_trusted_domain_name;
};
+#define DS_PDC_FLAG ( 0x00000001 )
+#define DS_GC_FLAG ( 0x00000004 )
+#define DS_LDAP_FLAG ( 0x00000008 )
+#define DS_DS_FLAG ( 0x00000010 )
+#define DS_KDC_FLAG ( 0x00000020 )
+#define DS_TIMESERV_FLAG ( 0x00000040 )
+#define DS_CLOSEST_FLAG ( 0x00000080 )
+#define DS_WRITABLE_FLAG ( 0x00000100 )
+#define DS_GOOD_TIMESERV_FLAG ( 0x00000200 )
+#define DS_NDNC_FLAG ( 0x00000400 )
+#define DS_SELECT_SECRET_DOMAIN_6_FLAG ( 0x00000800 )
+#define DS_FULL_SECRET_DOMAIN_6_FLAG ( 0x00001000 )
+#define DS_DNS_CONTROLLER_FLAG ( 0x20000000 )
+#define DS_DNS_DOMAIN_FLAG ( 0x40000000 )
+#define DS_DNS_FOREST_FLAG ( 0x80000000 )
+
#endif /* _HEADER_libnetapi */
#ifndef _HEADER_netlogon
@@ -1305,6 +1321,27 @@ struct NETLOGON_INFO_4 {
#define NETLOGON_CONTROL_SET_DBFLAG ( 0x0000FFFE )
#define NETLOGON_CONTROL_BREAKPOINT ( 0x0000FFFF )
+#define DS_FORCE_REDISCOVERY ( 0x00000001 )
+#define DS_DIRECTORY_SERVICE_REQUIRED ( 0x00000010 )
+#define DS_DIRECTORY_SERVICE_PREFERRED ( 0x00000020 )
+#define DS_GC_SERVER_REQUIRED ( 0x00000040 )
+#define DS_PDC_REQUIRED ( 0x00000080 )
+#define DS_BACKGROUND_ONLY ( 0x00000100 )
+#define DS_IP_REQUIRED ( 0x00000200 )
+#define DS_KDC_REQUIRED ( 0x00000400 )
+#define DS_TIMESERV_REQUIRED ( 0x00000800 )
+#define DS_WRITABLE_REQUIRED ( 0x00001000 )
+#define DS_GOOD_TIMESERV_PREFERRED ( 0x00002000 )
+#define DS_AVOID_SELF ( 0x00004000 )
+#define DS_ONLY_LDAP_NEEDED ( 0x00008000 )
+#define DS_IS_FLAT_NAME ( 0x00010000 )
+#define DS_IS_DNS_NAME ( 0x00020000 )
+#define DS_TRY_NEXTCLOSEST_SITE ( 0x00040000 )
+#define DS_DIRECTORY_SERVICE_6_REQUIRED ( 0x00080000 )
+#define DS_WEB_SERVICE_REQUIRED ( 0x00100000 )
+#define DS_RETURN_DNS_NAME ( 0x40000000 )
+#define DS_RETURN_FLAT_NAME ( 0x80000000 )
+
#endif /* _HEADER_netlogon */
/****************************************************************
diff --git a/source3/librpc/idl/libnetapi.idl b/source3/librpc/idl/libnetapi.idl
index c57048d..f83896c 100644
--- a/source3/librpc/idl/libnetapi.idl
+++ b/source3/librpc/idl/libnetapi.idl
@@ -800,6 +800,24 @@ interface libnetapi
/* DsGetDcName */
/*******************************************/
+ [public] typedef [v1_enum] enum {
+ DS_PDC_FLAG = 0x00000001,
+ DS_GC_FLAG = 0x00000004,
+ DS_LDAP_FLAG = 0x00000008,
+ DS_DS_FLAG = 0x00000010,
+ DS_KDC_FLAG = 0x00000020,
+ DS_TIMESERV_FLAG = 0x00000040,
+ DS_CLOSEST_FLAG = 0x00000080,
+ DS_WRITABLE_FLAG = 0x00000100,
+ DS_GOOD_TIMESERV_FLAG = 0x00000200,
+ DS_NDNC_FLAG = 0x00000400,
+ DS_SELECT_SECRET_DOMAIN_6_FLAG = 0x00000800,
+ DS_FULL_SECRET_DOMAIN_6_FLAG = 0x00001000,
+ DS_DNS_CONTROLLER_FLAG = 0x20000000,
+ DS_DNS_DOMAIN_FLAG = 0x40000000,
+ DS_DNS_FOREST_FLAG = 0x80000000
+ } DOMAIN_CONTROLLER_INFO_FLAGS;
+
[public] typedef struct {
string domain_controller_name;
string domain_controller_address;
@@ -807,7 +825,7 @@ interface libnetapi
GUID domain_guid;
string domain_name;
string dns_forest_name;
- uint32 flags;
+ DOMAIN_CONTROLLER_INFO_FLAGS flags;
string dc_site_name;
string client_site_name;
} DOMAIN_CONTROLLER_INFO;
--
Samba Shared Repository
More information about the samba-cvs
mailing list