s4-libnet: Remove libnet_Join and create libnet_Join_member
authorAndrew Bartlett <abartlet@samba.org>
Mon, 16 May 2011 12:55:29 +0000 (22:55 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 18 May 2011 14:12:08 +0000 (16:12 +0200)
libnet_Join conflicts with a function in the source3 netapi of the
same name, and the ability to join as a DC via this particular method
is unused.

Andrew Bartlett

source4/libnet/libnet_join.c
source4/libnet/libnet_join.h
source4/libnet/py_net.c
source4/scripting/python/samba/netcmd/join.py

index 6e76df43e3d6d6b8d2f02f2cb92e12ea2b985078..a1124fdd6239547b658e8a611f24d9998218bcc9 100644 (file)
@@ -889,9 +889,9 @@ NTSTATUS libnet_JoinDomain(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, stru
        return status;
 }
 
-static NTSTATUS libnet_Join_primary_domain(struct libnet_context *ctx, 
-                                          TALLOC_CTX *mem_ctx, 
-                                          struct libnet_Join *r)
+NTSTATUS libnet_Join_member(struct libnet_context *ctx,
+                           TALLOC_CTX *mem_ctx,
+                           struct libnet_Join_member *r)
 {
        NTSTATUS status;
        TALLOC_CTX *tmp_mem;
@@ -916,15 +916,7 @@ static NTSTATUS libnet_Join_primary_domain(struct libnet_context *ctx,
                return NT_STATUS_NO_MEMORY;
        }
        
-       if (r->in.join_type == SEC_CHAN_BDC) {
-               acct_type = ACB_SVRTRUST;
-       } else if (r->in.join_type == SEC_CHAN_WKSTA) {
-               acct_type = ACB_WSTRUST;
-       } else {
-               r->out.error_string = NULL;
-               talloc_free(tmp_mem);   
-               return NT_STATUS_INVALID_PARAMETER;
-       }
+       acct_type = ACB_WSTRUST;
 
        if (r->in.netbios_name != NULL) {
                netbios_name = r->in.netbios_name;
@@ -972,7 +964,7 @@ static NTSTATUS libnet_Join_primary_domain(struct libnet_context *ctx,
        set_secrets->domain_name = r2->out.domain_name;
        set_secrets->realm = r2->out.realm;
        set_secrets->netbios_name = netbios_name;
-       set_secrets->secure_channel_type = r->in.join_type;
+       set_secrets->secure_channel_type = SEC_CHAN_WKSTA;
        set_secrets->machine_password = r2->out.join_password;
        set_secrets->key_version_number = r2->out.kvno;
        set_secrets->domain_sid = r2->out.domain_sid;
@@ -996,21 +988,3 @@ static NTSTATUS libnet_Join_primary_domain(struct libnet_context *ctx,
        return NT_STATUS_OK;
 }
 
-NTSTATUS libnet_Join(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, struct libnet_Join *r)
-{
-       switch (r->in.join_type) {
-               case SEC_CHAN_WKSTA:
-                       return libnet_Join_primary_domain(ctx, mem_ctx, r);
-               case SEC_CHAN_BDC:
-                       return libnet_Join_primary_domain(ctx, mem_ctx, r);
-               case SEC_CHAN_DOMAIN:
-               case SEC_CHAN_DNS_DOMAIN:
-               case SEC_CHAN_NULL:
-                       break;
-       }
-
-       r->out.error_string = talloc_asprintf(mem_ctx,
-                                             "Invalid join type specified (%08X) attempting to join domain %s",
-                                             r->in.join_type, r->in.domain_name);
-       return NT_STATUS_INVALID_PARAMETER;
-}
index 79884130d8a48743ac40ed5db6cfc3d38bd5a8a2..6acf374b3838c46384eaece8355e0e4ed118507c 100644 (file)
@@ -63,11 +63,10 @@ struct libnet_JoinDomain {
        } out;
 };
 
-struct libnet_Join {
+struct libnet_Join_member {
        struct {
                const char *domain_name;
                const char *netbios_name;
-               enum netr_SchannelType join_type;
                enum libnet_Join_level level;
        } in;
        
index b7f7d9eaafe6a2624e962b146c9760064afdb3c1..ffcd60da27d0e5f8701bc36ac08db87d81b66648 100644 (file)
@@ -41,17 +41,17 @@ typedef struct {
        struct tevent_context *ev;
 } py_net_Object;
 
-static PyObject *py_net_join(py_net_Object *self, PyObject *args, PyObject *kwargs)
+static PyObject *py_net_join_member(py_net_Object *self, PyObject *args, PyObject *kwargs)
 {
-       struct libnet_Join r;
+       struct libnet_Join_member r;
        NTSTATUS status;
        PyObject *result;
        TALLOC_CTX *mem_ctx;
-       const char *kwnames[] = { "domain_name", "netbios_name", "join_type", "level", NULL };
+       const char *kwnames[] = { "domain_name", "netbios_name", "level", NULL };
 
-       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ssii:Join", discard_const_p(char *, kwnames), 
+       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ssi:Join", discard_const_p(char *, kwnames),
                                         &r.in.domain_name, &r.in.netbios_name, 
-                                        &r.in.join_type, &r.in.level))
+                                        &r.in.level))
                return NULL;
 
        mem_ctx = talloc_new(self->mem_ctx);
@@ -60,7 +60,7 @@ static PyObject *py_net_join(py_net_Object *self, PyObject *args, PyObject *kwar
                return NULL;
        }
 
-       status = libnet_Join(self->libnet_ctx, mem_ctx, &r);
+       status = libnet_Join_member(self->libnet_ctx, mem_ctx, &r);
        if (NT_STATUS_IS_ERR(status)) {
                PyErr_SetString(PyExc_RuntimeError, r.out.error_string?r.out.error_string:nt_errstr(status));
                talloc_free(mem_ctx);
@@ -76,7 +76,7 @@ static PyObject *py_net_join(py_net_Object *self, PyObject *args, PyObject *kwar
        return result;
 }
 
-static const char py_net_join_doc[] = "join(domain_name, netbios_name, join_type, level) -> (join_password, domain_sid, domain_name)\n\n" \
+static const char py_net_join_member_doc[] = "join_member(domain_name, netbios_name, level) -> (join_password, domain_sid, domain_name)\n\n" \
 "Join the domain with the specified name.";
 
 static PyObject *py_net_set_password(py_net_Object *self, PyObject *args, PyObject *kwargs)
@@ -526,7 +526,7 @@ static const char py_net_finddc_doc[] = "finddc(domain, server_type)\n"
                                         "find a DC with the specified server_type bits. Return the DNS name";
 
 static PyMethodDef net_obj_methods[] = {
-       {"join", (PyCFunction)py_net_join, METH_VARARGS|METH_KEYWORDS, py_net_join_doc},
+       {"join_member", (PyCFunction)py_net_join_member, METH_VARARGS|METH_KEYWORDS, py_net_join_member_doc},
        {"set_password", (PyCFunction)py_net_set_password, METH_VARARGS|METH_KEYWORDS, py_net_set_password_doc},
        {"export_keytab", (PyCFunction)py_net_export_keytab, METH_VARARGS|METH_KEYWORDS, py_net_export_keytab_doc},
        {"time", (PyCFunction)py_net_time, METH_VARARGS|METH_KEYWORDS, py_net_time_doc},
index 70b750191a1e3ed7eac124644e09df6d21ef5fc4..820709c9e37eb5d5c6ea4835b9f5869eed2e772b 100644 (file)
@@ -59,7 +59,13 @@ class cmd_join(Command):
             role = role.upper()
 
         if role is None or role == "MEMBER":
-            secure_channel_type = SEC_CHAN_WKSTA
+            (join_password, sid, domain_name) = net.join_member(domain,
+                                                                netbios_name,
+                                                                LIBNET_JOIN_AUTOMATIC)
+
+            self.outf.write("Joined domain %s (%s)\n" % (domain_name, sid))
+            return
+
         elif role == "DC":
             join_DC(server=server, creds=creds, lp=lp, domain=domain,
                     site=site, netbios_name=netbios_name, targetdir=targetdir)
@@ -70,10 +76,3 @@ class cmd_join(Command):
             return
         else:
             raise CommandError("Invalid role %s (possible values: MEMBER, BDC, RODC)" % role)
-
-        (join_password, sid, domain_name) = net.join(domain,
-                                                     netbios_name,
-                                                     secure_channel_type,
-                                                     LIBNET_JOIN_AUTOMATIC)
-
-        self.outf.write("Joined domain %s (%s)\n" % (domain_name, sid))