The branch, v3-2-test has been updated
       via  8858e403e1940c362d307b4d4125f977abb0b96a (commit)
       via  4ca33928512bd71268bafd41d2b608e814a7295f (commit)
       via  d4c5b323229c6f43c824e3559084c98e370730a5 (commit)
       via  30458116b389889cad845eb96b54c3edc833e722 (commit)
       via  96f645553ae5c75aabfe588e1a67f3d4bfacb5cb (commit)
      from  7aec862ddc2aa2b5152c3a452971e55ba43646a5 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 8858e403e1940c362d307b4d4125f977abb0b96a
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Fri Jan 18 02:50:33 2008 +0100

    Add NetGetJoinableOUs() to libnetapi (incl. example).
    
    Guenther

commit 4ca33928512bd71268bafd41d2b608e814a7295f
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Fri Jan 18 02:38:35 2008 +0100

    Cosmetics and error string reporting for libnetapi.
    
    Guenther

commit d4c5b323229c6f43c824e3559084c98e370730a5
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Fri Jan 18 02:30:53 2008 +0100

    Add some more debugging into netdomjoin-gui.
    
    Guenther

commit 30458116b389889cad845eb96b54c3edc833e722
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Fri Jan 18 02:30:09 2008 +0100

    Fix local hostname detection in netdomjoin-gui.
    
    Guenther

commit 96f645553ae5c75aabfe588e1a67f3d4bfacb5cb
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Fri Jan 18 01:56:01 2008 +0100

    Improve libnetapi_set_error_string().
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source/lib/netapi/examples/Makefile.in             |   16 +-
 .../getjoinableous.c}                              |   68 ++----
 .../examples/netdomjoin-gui/netdomjoin-gui.c       |   50 +++-
 source/lib/netapi/getdc.c                          |   30 +++-
 source/lib/netapi/joindomain.c                     |  249 +++++++++++++++++++-
 source/lib/netapi/netapi.c                         |   11 +-
 source/lib/netapi/netapi.h                         |   35 +++-
 source/lib/netapi/serverinfo.c                     |   43 +++-
 8 files changed, 420 insertions(+), 82 deletions(-)
 copy source/lib/netapi/examples/{netdomjoin/netdomjoin.c => 
getjoinableous/getjoinableous.c} (55%)


Changeset truncated at 500 lines:

diff --git a/source/lib/netapi/examples/Makefile.in 
b/source/lib/netapi/examples/Makefile.in
index c2f453d..86e1b1b 100644
--- a/source/lib/netapi/examples/Makefile.in
+++ b/source/lib/netapi/examples/Makefile.in
@@ -5,7 +5,7 @@ [EMAIL PROTECTED]@
 [EMAIL PROTECTED]@
 [EMAIL PROTECTED]@ -lnetapi
 [EMAIL PROTECTED]@
[EMAIL PROTECTED]@ $(GTK_FLAGS)
+FLAGS=-I../ -L../../../bin @CFLAGS@ $(GTK_FLAGS)
 [EMAIL PROTECTED]@
 [EMAIL PROTECTED]@ @LDFLAGS@
 [EMAIL PROTECTED]@
@@ -36,8 +36,12 @@ MAKEDIR = || exec false; \
 GETDC_OBJ = getdc/getdc.o
 NETDOMJOIN_OBJ = netdomjoin/netdomjoin.o
 NETDOMJOIN_GUI_OBJ = netdomjoin-gui/netdomjoin-gui.o
+GETJOINABLEOUS_OBJ = getjoinableous/getjoinableous.o
 
-PROGS = bin/[EMAIL PROTECTED]@ bin/[EMAIL PROTECTED]@ bin/[EMAIL PROTECTED]@
+PROGS = bin/[EMAIL PROTECTED]@ \
+       bin/[EMAIL PROTECTED]@ \
+       bin/[EMAIL PROTECTED]@ \
+       bin/[EMAIL PROTECTED]@
 
 all: $(PROGS)
 
@@ -45,6 +49,10 @@ bin/[EMAIL PROTECTED]@: $(GETDC_OBJ)
        @echo Linking $@
        @$(CC) $(FLAGS) -o $@ $(GETDC_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) 
$(KRB5LIBS) $(LDAP_LIBS)
 
+bin/[EMAIL PROTECTED]@: $(GETJOINABLEOUS_OBJ)
+       @echo Linking $@
+       @$(CC) $(FLAGS) -o $@ $(GETJOINABLEOUS_OBJ) $(LDFLAGS) $(DYNEXP) 
$(LIBS) $(KRB5LIBS) $(LDAP_LIBS)
+
 bin/[EMAIL PROTECTED]@: $(NETDOMJOIN_OBJ)
        @echo Linking $@
        @$(CC) $(FLAGS) -o $@ $(NETDOMJOIN_OBJ) $(LDFLAGS) $(DYNEXP) $(LIBS) 
$(KRB5LIBS) $(LDAP_LIBS)
@@ -54,4 +62,6 @@ bin/[EMAIL PROTECTED]@: $(NETDOMJOIN_GUI_OBJ)
        @$(CC) $(FLAGS) $(GTK_FLAGS) -o $@ $(NETDOMJOIN_GUI_OBJ) $(LDFLAGS) 
$(DYNEXP) $(LIBS) $(KRB5LIBS) $(LDAP_LIBS) $(GTK_LIBS)
 
 clean:
-       @rm -f $(PROGS)
+       -rm -f $(PROGS)
+       -rm -f core */*~ *~ \
+               */*.o */*/*.o */*/*/*.o \
diff --git a/source/lib/netapi/examples/netdomjoin/netdomjoin.c 
b/source/lib/netapi/examples/getjoinableous/getjoinableous.c
similarity index 55%
copy from source/lib/netapi/examples/netdomjoin/netdomjoin.c
copy to source/lib/netapi/examples/getjoinableous/getjoinableous.c
index 29f66a1..5a3366c 100644
--- a/source/lib/netapi/examples/netdomjoin/netdomjoin.c
+++ b/source/lib/netapi/examples/getjoinableous/getjoinableous.c
@@ -1,7 +1,7 @@
 /*
  *  Unix SMB/CIFS implementation.
  *  Join Support (cmdline + netapi)
- *  Copyright (C) Guenther Deschner 2007-2008
+ *  Copyright (C) Guenther Deschner 2008
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -17,11 +17,8 @@
  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <sys/types.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
 #include <string.h>
+#include <stdio.h>
 
 #include <netapi.h>
 
@@ -42,10 +39,10 @@ int main(int argc, char **argv)
        NET_API_STATUS status;
        const char *server_name = NULL;
        const char *domain_name = NULL;
-       const char *account_ou = NULL;
-       const char *Account = NULL;
+       const char *account = NULL;
        const char *password = NULL;
-       uint32_t join_flags = 3;
+       const char **ous = NULL;
+       uint32_t num_ous = 0;
        struct libnetapi_ctx *ctx = NULL;
        int i;
 
@@ -55,11 +52,8 @@ int main(int argc, char **argv)
        }
 
        if (argc < 2) {
-               printf("usage: netdomjoin\n");
-               printf("\t[hostname] [domain=DOMAIN] <ou=OU> "
-                      "<usero=USERO> <passwordo=PASSWORDO> "
-                      "<userd=USERD> <passwordd=PASSWORDD> "
-                      "<debug=DEBUGLEVEL>\n");
+               printf("usage: getjoinableous\n");
+               printf("\t<hostname> [domain=DOMAIN] <user=USER> 
<password=PASSWORD>\n");
                return 0;
        }
 
@@ -68,27 +62,16 @@ int main(int argc, char **argv)
        }
 
        for (i=0; i<argc; i++) {
-               if (strncasecmp(argv[i], "ou", strlen("ou")) == 0) {
-                       account_ou = get_string_param(argv[i]);
-               }
                if (strncasecmp(argv[i], "domain", strlen("domain"))== 0) {
                        domain_name = get_string_param(argv[i]);
                }
-               if (strncasecmp(argv[i], "userd", strlen("userd"))== 0) {
-                       Account = get_string_param(argv[i]);
+               if (strncasecmp(argv[i], "user", strlen("user"))== 0) {
+                       account = get_string_param(argv[i]);
+                       libnetapi_set_username(ctx, account);
                }
-               if (strncasecmp(argv[i], "passwordd", strlen("passwordd"))== 0) 
{
+               if (strncasecmp(argv[i], "password", strlen("password"))== 0) {
                        password = get_string_param(argv[i]);
-               }
-               if (strncasecmp(argv[i], "usero", strlen("usero"))== 0) {
-                       const char *str = NULL;
-                       str = get_string_param(argv[i]);
-                       libnetapi_set_username(ctx, str);
-               }
-               if (strncasecmp(argv[i], "passwordo", strlen("passwordo"))== 0) 
{
-                       const char *str = NULL;
-                       str = get_string_param(argv[i]);
-                       libnetapi_set_password(ctx, str);
+                       libnetapi_set_password(ctx, password);
                }
                if (strncasecmp(argv[i], "debug", strlen("debug"))== 0) {
                        const char *str = NULL;
@@ -97,23 +80,24 @@ int main(int argc, char **argv)
                }
        }
 
-       status = NetJoinDomain(server_name,
-                              domain_name,
-                              account_ou,
-                              Account,
-                              password,
-                              join_flags);
+       status = NetGetJoinableOUs(server_name,
+                                  domain_name,
+                                  account,
+                                  password,
+                                  &num_ous,
+                                  &ous);
        if (status != 0) {
-               const char *errstr = NULL;
-               errstr = libnetapi_get_error_string(ctx, status);
-               if (!errstr) {
-                       errstr = libnetapi_errstr(status);
-               }
-               printf("Join failed with: %s\n", errstr);
+               printf("failed with: %s\n",
+                       libnetapi_get_error_string(ctx, status));
        } else {
-               printf("Successfully joined\n");
+               printf("Successfully queried joinable ous:\n");
+               for (i=0; i<num_ous; i++) {
+                       printf("ou: %s\n", ous[i]);
+               }
        }
 
+       NetApiBufferFree(ous);
+
        libnetapi_free(ctx);
 
        return status;
diff --git a/source/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c 
b/source/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c
index 9dc2a18..73b14d4 100644
--- a/source/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c
+++ b/source/lib/netapi/examples/netdomjoin-gui/netdomjoin-gui.c
@@ -24,6 +24,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
+#include <netdb.h>
 
 #include <gtk/gtk.h>
 #include <glib/gprintf.h>
@@ -439,7 +440,7 @@ static void callback_do_join(GtkWidget *widget,
                                         state->password,
                                         unjoin_flags);
                if (status != 0) {
-                       err_str = libnetapi_errstr(status);
+                       err_str = libnetapi_get_error_string(state->ctx, 
status);
                        g_print("callback_do_join: failed to unjoin (%s)\n",
                                err_str);
 
@@ -463,7 +464,7 @@ static void callback_do_join(GtkWidget *widget,
                               state->password,
                               join_flags);
        if (status != 0) {
-               err_str = libnetapi_errstr(status);
+               err_str = libnetapi_get_error_string(state->ctx, status);
                g_print("callback_do_join: failed to join (%s)\n", err_str);
 
                dialog = 
gtk_message_dialog_new(GTK_WINDOW(state->window_parent),
@@ -1263,37 +1264,56 @@ static int initialize_join_state(struct join_state 
*state,
        {
                char my_hostname[HOST_NAME_MAX];
                const char *p = NULL;
+               struct hostent *hp = NULL;
+
                if (gethostname(my_hostname, sizeof(my_hostname)) == -1) {
                        return -1;
                }
 
-               state->my_fqdn = strdup(my_hostname);
+               p = strchr(my_hostname, '.');
+               if (p) {
+                       my_hostname[strlen(my_hostname)-strlen(p)] = '\0';
+               }
+               state->my_hostname = strdup(my_hostname);
+               if (!state->my_hostname) {
+                       return -1;
+               }
+               debug("state->my_hostname: %s\n", state->my_hostname);
+
+               hp = gethostbyname(my_hostname);
+               if (!hp || !hp->h_name || !*hp->h_name) {
+                       return -1;
+               }
+
+               state->my_fqdn = strdup(hp->h_name);
                if (!state->my_fqdn) {
                        return -1;
                }
+               debug("state->my_fqdn: %s\n", state->my_fqdn);
 
-               p = strchr(my_hostname, '.');
+               p = strchr(state->my_fqdn, '.');
                if (p) {
-                       my_hostname[strlen(my_hostname) - strlen(p)] = '\0';
-                       state->my_hostname = strdup(my_hostname);
-                       if (!state->my_hostname) {
-                               return -1;
-                       }
                        p++;
                        state->my_dnsdomain = strdup(p);
-                       if (!state->my_dnsdomain) {
-                               return -1;
-                       }
+               } else {
+                       state->my_dnsdomain = strdup("");
+               }
+               if (!state->my_dnsdomain) {
+                       return -1;
                }
+               debug("state->my_dnsdomain: %s\n", state->my_dnsdomain);
        }
 
        {
                const char *buffer = NULL;
                uint16_t type = 0;
                status = NetGetJoinInformation(NULL, &buffer, &type);
-               if (status) {
+               if (status != 0) {
+                       printf("NetGetJoinInformation failed with: %s\n",
+                               libnetapi_get_error_string(state->ctx, status));
                        return status;
                }
+               debug("NetGetJoinInformation gave: %s and %d\n", buffer, type);
                state->name_buffer_initial = strdup(buffer);
                if (!state->name_buffer_initial) {
                        return -1;
@@ -1307,7 +1327,9 @@ static int initialize_join_state(struct join_state *state,
                uint8_t *buffer = NULL;
 
                status = NetServerGetInfo(NULL, 1005, &buffer);
-               if (status) {
+               if (status != 0) {
+                       printf("NetServerGetInfo failed with: %s\n",
+                               libnetapi_get_error_string(state->ctx, status));
                        return status;
                }
 
diff --git a/source/lib/netapi/getdc.c b/source/lib/netapi/getdc.c
index 484af04..1084ddc 100644
--- a/source/lib/netapi/getdc.c
+++ b/source/lib/netapi/getdc.c
@@ -22,6 +22,9 @@
 #include "lib/netapi/netapi.h"
 #include "libnet/libnet.h"
 
+/********************************************************************
+********************************************************************/
+
 static WERROR NetGetDCNameLocal(struct libnetapi_ctx *ctx,
                                const char *server_name,
                                const char *domain_name,
@@ -30,6 +33,9 @@ static WERROR NetGetDCNameLocal(struct libnetapi_ctx *ctx,
        return WERR_NOT_SUPPORTED;
 }
 
+/********************************************************************
+********************************************************************/
+
 static WERROR NetGetDCNameRemote(struct libnetapi_ctx *ctx,
                                 const char *server_name,
                                 const char *domain_name,
@@ -73,6 +79,9 @@ static WERROR NetGetDCNameRemote(struct libnetapi_ctx *ctx,
        return werr;
 }
 
+/********************************************************************
+********************************************************************/
+
 static WERROR libnetapi_NetGetDCName(struct libnetapi_ctx *ctx,
                                     const char *server_name,
                                     const char *domain_name,
@@ -91,6 +100,10 @@ static WERROR libnetapi_NetGetDCName(struct libnetapi_ctx 
*ctx,
                                  buffer);
 }
 
+/****************************************************************
+ NetGetDCName
+****************************************************************/
+
 NET_API_STATUS NetGetDCName(const char *server_name,
                            const char *domain_name,
                            uint8_t **buffer)
@@ -112,9 +125,12 @@ NET_API_STATUS NetGetDCName(const char *server_name,
                return W_ERROR_V(werr);
        }
 
-       return 0;
+       return NET_API_STATUS_SUCCESS;
 }
 
+/********************************************************************
+********************************************************************/
+
 static WERROR NetGetAnyDCNameLocal(struct libnetapi_ctx *ctx,
                                   const char *server_name,
                                   const char *domain_name,
@@ -123,6 +139,9 @@ static WERROR NetGetAnyDCNameLocal(struct libnetapi_ctx 
*ctx,
        return WERR_NOT_SUPPORTED;
 }
 
+/********************************************************************
+********************************************************************/
+
 static WERROR NetGetAnyDCNameRemote(struct libnetapi_ctx *ctx,
                                    const char *server_name,
                                    const char *domain_name,
@@ -170,6 +189,9 @@ static WERROR NetGetAnyDCNameRemote(struct libnetapi_ctx 
*ctx,
 
 }
 
+/********************************************************************
+********************************************************************/
+
 static WERROR libnetapi_NetGetAnyDCName(struct libnetapi_ctx *ctx,
                                        const char *server_name,
                                        const char *domain_name,
@@ -188,6 +210,10 @@ static WERROR libnetapi_NetGetAnyDCName(struct 
libnetapi_ctx *ctx,
                                     buffer);
 }
 
+/****************************************************************
+ NetGetAnyDCName
+****************************************************************/
+
 NET_API_STATUS NetGetAnyDCName(const char *server_name,
                               const char *domain_name,
                               uint8_t **buffer)
@@ -209,5 +235,5 @@ NET_API_STATUS NetGetAnyDCName(const char *server_name,
                return W_ERROR_V(werr);
        }
 
-       return 0;
+       return NET_API_STATUS_SUCCESS;
 }
diff --git a/source/lib/netapi/joindomain.c b/source/lib/netapi/joindomain.c
index b268e41..cbfc6c0 100644
--- a/source/lib/netapi/joindomain.c
+++ b/source/lib/netapi/joindomain.c
@@ -22,6 +22,9 @@
 #include "lib/netapi/netapi.h"
 #include "libnet/libnet.h"
 
+/****************************************************************
+****************************************************************/
+
 static WERROR NetJoinDomainLocal(struct libnetapi_ctx *mem_ctx,
                                 const char *server_name,
                                 const char *domain_name,
@@ -52,6 +55,8 @@ static WERROR NetJoinDomainLocal(struct libnetapi_ctx 
*mem_ctx,
                status = dsgetdcname(mem_ctx, NULL, domain_name,
                                     NULL, NULL, flags, &info);
                if (!NT_STATUS_IS_OK(status)) {
+                       libnetapi_set_error_string(mem_ctx,
+                               "%s", get_friendly_nt_error_msg(status));
                        return ntstatus_to_werror(status);
                }
                r->in.dc_name = talloc_strdup(mem_ctx,
@@ -79,13 +84,16 @@ static WERROR NetJoinDomainLocal(struct libnetapi_ctx 
*mem_ctx,
 
        werr = libnet_Join(mem_ctx, r);
        if (!W_ERROR_IS_OK(werr) && r->out.error_string) {
-               libnetapi_set_error_string(mem_ctx, r->out.error_string);
+               libnetapi_set_error_string(mem_ctx, "%s", r->out.error_string);
        }
        TALLOC_FREE(r);
 
        return werr;
 }
 
+/****************************************************************
+****************************************************************/
+
 static WERROR NetJoinDomainRemote(struct libnetapi_ctx *ctx,
                                  const char *server_name,
                                  const char *domain_name,
@@ -149,6 +157,9 @@ static WERROR NetJoinDomainRemote(struct libnetapi_ctx *ctx,
        return werr;
 }
 
+/****************************************************************
+****************************************************************/
+
 static WERROR libnetapi_NetJoinDomain(struct libnetapi_ctx *ctx,
                                      const char *server_name,
                                      const char *domain_name,
@@ -181,6 +192,10 @@ static WERROR libnetapi_NetJoinDomain(struct libnetapi_ctx 
*ctx,
                                   join_flags);
 }
 
+/****************************************************************
+ NetJoinDomain
+****************************************************************/
+
 NET_API_STATUS NetJoinDomain(const char *server_name,
                             const char *domain_name,
                             const char *account_ou,
@@ -208,9 +223,12 @@ NET_API_STATUS NetJoinDomain(const char *server_name,
                return W_ERROR_V(werr);
        }
 
-       return 0;
+       return NET_API_STATUS_SUCCESS;
 }
 
+/****************************************************************
+****************************************************************/
+
 static WERROR NetUnjoinDomainLocal(struct libnetapi_ctx *mem_ctx,
                                   const char *server_name,
                                   const char *account,
@@ -232,7 +250,6 @@ static WERROR NetUnjoinDomainLocal(struct libnetapi_ctx 
*mem_ctx,
                r->in.dc_name = talloc_strdup(mem_ctx, server_name);
                W_ERROR_HAVE_NO_MEMORY(r->in.dc_name);
        } else {
-
                NTSTATUS status;
                const char *domain = NULL;
                struct DS_DOMAIN_CONTROLLER_INFO *info = NULL;
@@ -247,6 +264,8 @@ static WERROR NetUnjoinDomainLocal(struct libnetapi_ctx 
*mem_ctx,
                status = dsgetdcname(mem_ctx, NULL, domain,
                                     NULL, NULL, flags, &info);
                if (!NT_STATUS_IS_OK(status)) {
+                       libnetapi_set_error_string(mem_ctx,
+                               "%s", get_friendly_nt_error_msg(status));
                        return ntstatus_to_werror(status);
                }
                r->in.dc_name = talloc_strdup(mem_ctx,
@@ -266,13 +285,22 @@ static WERROR NetUnjoinDomainLocal(struct libnetapi_ctx 
*mem_ctx,
 
        r->in.unjoin_flags = unjoin_flags;
        r->in.modify_config = true;
+       r->in.debug = true;
 
        r->in.domain_sid = &domain_sid;
 
-       return libnet_Unjoin(mem_ctx, r);
+       werr = libnet_Unjoin(mem_ctx, r);
+       if (!W_ERROR_IS_OK(werr) && r->out.error_string) {
+               libnetapi_set_error_string(mem_ctx, "%s", r->out.error_string);
+       }
+       TALLOC_FREE(r);
 
+       return werr;
 }
 
+/****************************************************************
+****************************************************************/
+
 static WERROR NetUnjoinDomainRemote(struct libnetapi_ctx *ctx,
                                    const char *server_name,
                                    const char *account,
@@ -335,6 +363,9 @@ static WERROR NetUnjoinDomainRemote(struct libnetapi_ctx 
*ctx,
        return werr;
 }


-- 
Samba Shared Repository

Reply via email to