2 Unix SMB/CIFS implementation.
4 Implements functions offered by repadmin.exe tool under Windows
6 Copyright (C) Kamen Mazdrashki <kamen.mazdrashki@postpath.com> 2010
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "utils/net/net.h"
24 #include "utils/net/drs/net_drs.h"
27 #define DEFINE_FLAG(_flag, _win_name) {_flag, #_flag, _win_name}
29 struct drs_extension_flag
{
31 const char *samba_name
;
35 static const struct drs_extension_flag drs_repl_flags
[] = {
36 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_BASE
, "DRS_EXT_BASE"),
37 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATION
, "DRS_EXT_ASYNCREPL"),
38 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPI
, "DRS_EXT_REMOVEAPI"),
39 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2
, "DRS_EXT_MOVEREQ_V2"),
40 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESS
, "DRS_EXT_GETCHG_DEFLATE"),
41 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1
, "DRS_EXT_DCINFO_V1"),
42 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION
, "DRS_EXT_RESTORE_USN_OPTIMIZATION"),
43 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY
, "DRS_EXT_ADDENTRY"),
44 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTE
, "DRS_EXT_KCC_EXECUTE"),
45 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2
, "DRS_EXT_ADDENTRY_V2"),
46 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION
, "DRS_EXT_LINKED_VALUE_REPLICATION"),
47 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2
, "DRS_EXT_DCINFO_V2"),
48 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD
, "DRS_EXT_INSTANCE_TYPE_NOT_REQ_ON_MOD"),
49 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BIND
, "DRS_EXT_CRYPTO_BIND"),
50 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFO
, "DRS_EXT_GET_REPL_INFO"),
51 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTION
, "DRS_EXT_STRONG_ENCRYPTION"),
52 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01
, "DRS_EXT_DCINFO_VFFFFFFFF"),
53 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIP
, "DRS_EXT_TRANSITIVE_MEMBERSHIP"),
54 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORY
, "DRS_EXT_ADD_SID_HISTORY"),
55 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3
, "DRS_EXT_POST_BETA3"),
56 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V5
, "DRS_EXT_GETCHGREQ_V5"),
57 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2
, "DRS_EXT_GETMEMBERSHIPS2"),
58 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6
, "DRS_EXT_GETCHGREQ_V6"),
59 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCS
, "DRS_EXT_NONDOMAIN_NCS"),
60 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8
, "DRS_EXT_GETCHGREQ_V8"),
61 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5
, "DRS_EXT_GETCHGREPLY_V5"),
62 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6
, "DRS_EXT_GETCHGREPLY_V6"),
63 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3
, "DRS_EXT_WHISTLER_BETA3"),
64 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7
, "DRS_EXT_WHISTLER_BETA3"),
65 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT
, "DRS_EXT_WHISTLER_BETA3"),
66 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS
, "DRS_EXT_W2K3_DEFLATE"),
67 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V10
, "DRS_EXT_GETCHGREQ_V10"),
68 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_RESERVED_PART2
, "DRS_EXT_RESERVED_FOR_WIN2K_OR_DOTNET_PART2"),
69 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_RESERVED_PART3
, "DRS_EXT_RESERVED_FOR_WIN2K_OR_DOTNET_PART3")
72 static const struct drs_extension_flag drs_repl_flags_ex
[] = {
73 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_ADAM
, "DRS_EXT_ADAM"),
74 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_LH_BETA2
, "DRS_EXT_LH_BETA2"),
75 DEFINE_FLAG(DRSUAPI_SUPPORTED_EXTENSION_RECYCLE_BIN
, "DRS_EXT_RECYCLE_BIN")
80 int net_drs_bind_cmd(struct net_context
*ctx
, int argc
, const char **argv
)
83 struct net_drs_context
*drs_ctx
;
84 struct drsuapi_DsBindInfo48
*info48
;
86 /* only one arg expected */
88 return net_drs_bind_usage(ctx
, argc
, argv
);
91 if (!net_drs_create_context(ctx
, argv
[0], &drs_ctx
)) {
95 d_printf("Bind to %s succeeded.\n", drs_ctx
->dc_name
);
96 d_printf("Extensions supported (cb=%d):\n", drs_ctx
->drs_conn
->bind_info_len
);
98 /* Print standard flags */
99 info48
= &drs_ctx
->drs_conn
->info48
;
100 for (i
= 0; i
< ARRAY_SIZE(drs_repl_flags
); i
++) {
101 const struct drs_extension_flag
*repl_flag
= &drs_repl_flags
[i
];
102 d_printf(" %-60s: %-3s (%s)\n", repl_flag
->samba_name
,
103 info48
->supported_extensions
& repl_flag
->flag
? "Yes" : "No",
104 repl_flag
->win_name
);
107 /* Print Extended flags */
109 d_printf("Extended Extensions supported:\n");
110 for (i
= 0; i
< ARRAY_SIZE(drs_repl_flags_ex
); i
++) {
111 const struct drs_extension_flag
*repl_flag_ex
= &drs_repl_flags_ex
[i
];
112 d_printf(" %-60s: %-3s (%s)\n", repl_flag_ex
->samba_name
,
113 info48
->supported_extensions_ext
& repl_flag_ex
->flag
? "Yes" : "No",
114 repl_flag_ex
->win_name
);
117 /* print additional info */
119 d_printf("Site GUID: %s\n", GUID_string(drs_ctx
, &info48
->site_guid
));
120 d_printf("Repl epoch: %d\n", info48
->repl_epoch
);
121 if (GUID_all_zero(&info48
->config_dn_guid
)) {
122 d_printf("Forest GUID: (none)\n");
124 d_printf("Forest GUID: %s\n", GUID_string(drs_ctx
, &info48
->config_dn_guid
));
127 talloc_free(drs_ctx
);
132 int net_drs_bind_usage(struct net_context
*ctx
, int argc
, const char **argv
)
134 d_printf("net drs bind <DC_NAME>\n");