svn commit: samba r9180 - in branches/SOC/SAMBA_4_0: . source/libnet
brad at samba.org
brad at samba.org
Sun Aug 7 15:25:26 GMT 2005
Author: brad
Date: 2005-08-07 15:25:25 +0000 (Sun, 07 Aug 2005)
New Revision: 9180
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9180
Log:
r5314 at buttercup: j0j0 | 2005-08-07 09:30:12 -0600
Reworked libnet_join to use two join levels, AUTOMATIC and SPECIFIED.
Modified:
branches/SOC/SAMBA_4_0/
branches/SOC/SAMBA_4_0/source/libnet/libnet_join.c
branches/SOC/SAMBA_4_0/source/libnet/libnet_join.h
Changeset:
Property changes on: branches/SOC/SAMBA_4_0
___________________________________________________________________
Name: svk:merge
- 0c0555d6-39d7-0310-84fc-f1cc0bd64818:/branches/SAMBA_4_0:9111
d349723c-e9fc-0310-b8a8-fdedf1c27407:/local/SAMBA_4_0:5312
d349723c-e9fc-0310-b8a8-fdedf1c27407:/local/samba-SAMBA_4_0:5311
+ 0c0555d6-39d7-0310-84fc-f1cc0bd64818:/branches/SAMBA_4_0:9111
d349723c-e9fc-0310-b8a8-fdedf1c27407:/local/SAMBA_4_0:5314
d349723c-e9fc-0310-b8a8-fdedf1c27407:/local/samba-SAMBA_4_0:5311
Modified: branches/SOC/SAMBA_4_0/source/libnet/libnet_join.c
===================================================================
--- branches/SOC/SAMBA_4_0/source/libnet/libnet_join.c 2005-08-07 15:20:25 UTC (rev 9179)
+++ branches/SOC/SAMBA_4_0/source/libnet/libnet_join.c 2005-08-07 15:25:25 UTC (rev 9180)
@@ -145,7 +145,8 @@
attr.sec_qos = &qos;
lsa_open_policy.in.attr = &attr;
- lsa_open_policy.in.system_name = talloc_asprintf(tmp_ctx, "\\%s", lp_netbios_name());
+
+ lsa_open_policy.in.system_name = talloc_asprintf(tmp_ctx, "\\%s", r->in.netbios_name);
lsa_open_policy.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
lsa_open_policy.out.handle = &lsa_p_handle;
@@ -600,11 +601,12 @@
{
char *service_principal_name[2];
- char *dns_host_name = strlower_talloc(mem_ctx,
- talloc_asprintf(mem_ctx,
- "%s.%s", lp_netbios_name(), realm));
+ char *dns_host_name = strlower_talloc(mem_ctx, talloc_asprintf(mem_ctx,
+ "%s.%s",
+ r->in.netbios_name,
+ realm));
service_principal_name[0] = talloc_asprintf(tmp_ctx, "host/%s", dns_host_name);
- service_principal_name[1] = talloc_asprintf(tmp_ctx, "host/%s", strlower_talloc(mem_ctx, lp_netbios_name()));
+ service_principal_name[1] = talloc_asprintf(tmp_ctx, "host/%s", strlower_talloc(mem_ctx, r->in.netbios_name));
samdb_msg_add_string(remote_ldb, tmp_ctx, msg, "dNSHostName", dns_host_name);
samdb_msg_add_string(remote_ldb, tmp_ctx, msg, "servicePrincipalName", service_principal_name[0]);
@@ -626,15 +628,13 @@
return NT_STATUS_OK;
}
-static NTSTATUS libnet_Join_primary_domain(struct libnet_context *ctx,
- TALLOC_CTX *mem_ctx,
- struct libnet_Join *r)
+static NTSTATUS libnet_Join_primary_domain_common(struct libnet_context *ctx,
+ TALLOC_CTX *mem_ctx,
+ struct libnet_Join *r, struct libnet_JoinDomain r2)
{
NTSTATUS status;
int ret;
-
struct ldb_context *ldb;
- struct libnet_JoinDomain r2;
const char *base_dn = "cn=Primary Domains";
const struct ldb_val *prior_secret;
const struct ldb_val *prior_modified_time;
@@ -643,20 +643,11 @@
const char *attrs[] = {
"whenChanged",
"secret",
- "priorSecret"
+ "priorSecret",
"priorChanged",
NULL
};
-
- if (r->in.secure_channel_type == SEC_CHAN_BDC) {
- r2.in.acct_type = ACB_SVRTRUST;
- } else if (r->in.secure_channel_type == SEC_CHAN_WKSTA) {
- r2.in.acct_type = ACB_WSTRUST;
- }
- r2.in.domain_name = r->in.domain_name;
-
- r2.in.account_name = talloc_asprintf(mem_ctx, "%s$", lp_netbios_name());
-
+
/* Local secrets are stored in secrets.ldb */
ldb = secrets_db_connect(mem_ctx);
if (!ldb) {
@@ -745,12 +736,69 @@
return NT_STATUS_OK;
}
+static NTSTATUS libnet_Join_primary_domain_specified(struct libnet_context *ctx,
+ TALLOC_CTX *mem_ctx,
+ struct libnet_Join *r)
+{
+ NTSTATUS status;
+ struct libnet_JoinDomain r2;
+
+ if (r->in.secure_channel_type == SEC_CHAN_BDC) {
+ r2.in.acct_type = ACB_SVRTRUST;
+ } else if (r->in.secure_channel_type == SEC_CHAN_WKSTA) {
+ r2.in.acct_type = ACB_WSTRUST;
+ }
+ r2.in.domain_name = r->in.domain_name;
+ r2.in.netbios_name = r->in.netbios_name;
+ r2.in.account_name = talloc_asprintf(mem_ctx, "%s$", r->in.netbios_name);
+
+ status = libnet_Join_primary_domain_common(ctx, mem_ctx, r, r2);
+ return status;
+}
+
+static NTSTATUS libnet_Join_primary_domain_automatic(struct libnet_context *ctx,
+ TALLOC_CTX *mem_ctx,
+ struct libnet_Join *r)
+{
+ NTSTATUS status;
+ struct libnet_JoinDomain r2;
+
+ if (r->in.secure_channel_type == SEC_CHAN_BDC) {
+ r2.in.acct_type = ACB_SVRTRUST;
+ } else if (r->in.secure_channel_type == SEC_CHAN_WKSTA) {
+ r2.in.acct_type = ACB_WSTRUST;
+ }
+ r2.in.domain_name = r->in.domain_name;
+ r2.in.netbios_name = talloc_asprintf(mem_ctx, "%s", lp_netbios_name());
+ r2.in.account_name = talloc_asprintf(mem_ctx, "%s$", r2.in.netbios_name);
+
+ status = libnet_Join_primary_domain_common(ctx, mem_ctx, r, r2);
+ return status;
+}
+
+static NTSTATUS libnet_Join_primary_domain(struct libnet_context *ctx,
+ TALLOC_CTX *mem_ctx,
+ struct libnet_Join *r)
+{
+ switch (r->in.level) {
+ case LIBNET_JOIN_AUTOMATIC:
+ return libnet_Join_primary_domain_automatic(ctx, mem_ctx, r);
+ case LIBNET_JOIN_SPECIFIED:
+ return libnet_Join_primary_domain_specified(ctx, mem_ctx, r);
+ }
+ return NT_STATUS_INVALID_LEVEL;
+}
+
NTSTATUS libnet_Join(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, struct libnet_Join *r)
{
+
NTSTATUS nt_status;
struct libnet_Join r2;
+
+ r2.in.level = r->in.level;
r2.in.secure_channel_type = r->in.secure_channel_type;
r2.in.domain_name = r->in.domain_name;
+ r2.in.netbios_name = r->in.netbios_name;
if ((r->in.secure_channel_type == SEC_CHAN_WKSTA)
|| (r->in.secure_channel_type == SEC_CHAN_BDC)) {
Modified: branches/SOC/SAMBA_4_0/source/libnet/libnet_join.h
===================================================================
--- branches/SOC/SAMBA_4_0/source/libnet/libnet_join.h 2005-08-07 15:20:25 UTC (rev 9179)
+++ branches/SOC/SAMBA_4_0/source/libnet/libnet_join.h 2005-08-07 15:25:25 UTC (rev 9180)
@@ -21,10 +21,16 @@
#include "librpc/gen_ndr/ndr_netlogon.h"
+enum libnet_Join_level {
+ LIBNET_JOIN_AUTOMATIC,
+ LIBNET_JOIN_SPECIFIED,
+};
+
struct libnet_JoinDomain {
struct {
const char *domain_name;
const char *account_name;
+ const char *netbios_name;
uint32_t acct_type;
} in;
@@ -41,7 +47,9 @@
struct libnet_Join {
struct {
const char *domain_name;
+ const char *netbios_name;
enum netr_SchannelType secure_channel_type;
+ enum libnet_Join_level level;
} in;
struct {
More information about the samba-cvs
mailing list