samba-cvs.cvs
[Top] [All Lists]

[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0

Subject: [SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-3438-g8b3149b
From: gd@xxxxxxxxx (Günther Deschner)
Date: Wed, 30 Jul 2008 09:36:33 -0500 (CDT)
The branch, v3-3-test has been updated
       via  8b3149b4a663f59b504c1458cd7ecafe0c0e0322 (commit)
      from  d4594a7a03381fb251c9f8caf4c70e1ed97674b6 (commit)

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


- Log -----------------------------------------------------------------
commit 8b3149b4a663f59b504c1458cd7ecafe0c0e0322
Author: Günther Deschner <gd@xxxxxxxxx>
Date:   Fri Jul 18 19:12:42 2008 +0200

    netapi: add netapi testsuite.
    
    Guenther

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

Summary of changes:
 source/lib/netapi/tests/Makefile.in     |   57 ++++++
 source/lib/netapi/tests/common.c        |   86 +++++++++
 source/lib/netapi/tests/common.h        |   55 ++++++
 source/lib/netapi/tests/netapitest.c    |   92 ++++++++++
 source/lib/netapi/tests/netdisplay.c    |  150 ++++++++++++++++
 source/lib/netapi/tests/netgroup.c      |  286 +++++++++++++++++++++++++++++++
 source/lib/netapi/tests/netlocalgroup.c |  226 ++++++++++++++++++++++++
 source/lib/netapi/tests/netuser.c       |  259 ++++++++++++++++++++++++++++
 8 files changed, 1211 insertions(+), 0 deletions(-)
 create mode 100644 source/lib/netapi/tests/Makefile.in
 create mode 100644 source/lib/netapi/tests/common.c
 create mode 100644 source/lib/netapi/tests/common.h
 create mode 100644 source/lib/netapi/tests/netapitest.c
 create mode 100644 source/lib/netapi/tests/netdisplay.c
 create mode 100644 source/lib/netapi/tests/netgroup.c
 create mode 100644 source/lib/netapi/tests/netlocalgroup.c
 create mode 100644 source/lib/netapi/tests/netuser.c


Changeset truncated at 500 lines:

diff --git a/source/lib/netapi/tests/Makefile.in 
b/source/lib/netapi/tests/Makefile.in
new file mode 100644
index 0000000..f13281e
--- /dev/null
+++ b/source/lib/netapi/tests/Makefile.in
@@ -0,0 +1,57 @@
+KRB5LIBS=@KRB5_LIBS@
+LDAP_LIBS=@LDAP_LIBS@
+LIBS=@LIBS@ -lnetapi -ltdb -ltalloc
+DEVELOPER_CFLAGS=@DEVELOPER_CFLAGS@
+FLAGS=-I../ -L../../../bin @CFLAGS@ $(GTK_FLAGS)
+CC=@CC@
+PICFLAG=@PICFLAG@
+LDFLAGS=@PIE_LDFLAGS@ @LDFLAGS@
+DYNEXP=@DYNEXP@
+NETAPI_LIBS=$(LIBS) $(KRB5LIBS) $(LDAP_LIBS)
+CMDLINE_LIBS=$(NETAPI_LIBS) @POPTLIBS@
+
+# Compile a source file.
+COMPILE_CC = $(CC) -I. $(FLAGS) $(PICFLAG) -c $< -o $@
+COMPILE = $(COMPILE_CC)
+
+PROGS = bin/netapitest@EXEEXT@
+
+all: $(PROGS)
+
+MAKEDIR = || exec false; \
+         if test -d "$$dir"; then :; else \
+         echo mkdir "$$dir"; \
+         mkdir -p "$$dir" >/dev/null 2>&1 || \
+         test -d "$$dir" || \
+         mkdir "$$dir" || \
+         exec false; fi || exec false
+
+BINARY_PREREQS = bin/.dummy
+
+bin/.dummy:
+       @if (: >> $@ || : > $@) >/dev/null 2>&1; then :; else \
+         dir=bin $(MAKEDIR); fi
+       @: >> $@ || : > $@ # what a fancy emoticon!
+
+.c.o:
+       @if (: >> $@ || : > $@) >/dev/null 2>&1; then rm -f $@; else \
+        dir=`echo $@ | sed 's,/[^/]*$$,,;s,^$$,.,'` $(MAKEDIR); fi
+       @echo Compiling $*.c
+       @$(COMPILE) && exit 0;\
+               echo "The following command failed:" 1>&2;\
+               echo "$(COMPILE_CC)" 1>&2;\
+               $(COMPILE_CC) >/dev/null 2>&1
+
+CMDLINE_OBJ = common.o
+NETAPIBUFFER_OBJ = netapibuffer.o
+NETAPITEST_OBJ = netapitest.o netlocalgroup.o netuser.o netgroup.o 
netdisplay.o $(CMDLINE_OBJ)
+
+bin/netapitest@EXEEXT@: $(BINARY_PREREQS) $(NETAPITEST_OBJ)
+       @echo Linking $@
+       @$(CC) $(FLAGS) -o $@ $(NETAPITEST_OBJ) $(LDFLAGS) $(DYNEXP) 
$(CMDLINE_LIBS)
+
+clean:
+       -rm -f $(PROGS)
+       -rm -f core */*~ *~ \
+               */*.o */*/*.o */*/*/*.o
+
diff --git a/source/lib/netapi/tests/common.c b/source/lib/netapi/tests/common.c
new file mode 100644
index 0000000..22175af
--- /dev/null
+++ b/source/lib/netapi/tests/common.c
@@ -0,0 +1,86 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  NetApi testsuite
+ *  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
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <inttypes.h>
+
+#include <popt.h>
+#include <netapi.h>
+
+#include "common.h"
+
+void popt_common_callback(poptContext con,
+                        enum poptCallbackReason reason,
+                        const struct poptOption *opt,
+                        const char *arg, const void *data)
+{
+       struct libnetapi_ctx *ctx = NULL;
+
+       libnetapi_getctx(&ctx);
+
+       if (reason == POPT_CALLBACK_REASON_PRE) {
+       }
+
+       if (reason == POPT_CALLBACK_REASON_POST) {
+       }
+
+       if (!opt) {
+               return;
+       }
+       switch (opt->val) {
+               case 'U': {
+                       char *puser = strdup(arg);
+                       char *p = NULL;
+
+                       if ((p = strchr(puser,'%'))) {
+                               size_t len;
+                               *p = 0;
+                               libnetapi_set_username(ctx, puser);
+                               libnetapi_set_password(ctx, p+1);
+                               len = strlen(p+1);
+                               memset(strchr(arg,'%')+1,'X',len);
+                       } else {
+                               libnetapi_set_username(ctx, puser);
+                       }
+                       free(puser);
+                       break;
+               }
+               case 'd':
+                       libnetapi_set_debuglevel(ctx, arg);
+                       break;
+               case 'p':
+                       libnetapi_set_password(ctx, arg);
+                       break;
+               case 'k':
+                       libnetapi_set_use_kerberos(ctx);
+                       break;
+       }
+}
+
+struct poptOption popt_common_netapi_examples[] = {
+       { NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE|POPT_CBFLAG_POST, (void 
*)popt_common_callback },
+       { "user", 'U', POPT_ARG_STRING, NULL, 'U', "Username used for 
connection", "USERNAME" },
+       { "password", 'p', POPT_ARG_STRING, NULL, 'p', "Password used for 
connection", "PASSWORD" },
+       { "debuglevel", 'd', POPT_ARG_STRING, NULL, 'd', "Debuglevel", 
"DEBUGLEVEL" },
+       { "kerberos", 'k', POPT_ARG_NONE, NULL, 'k', "Use Kerberos", NULL },
+       POPT_TABLEEND
+};
+
diff --git a/source/lib/netapi/tests/common.h b/source/lib/netapi/tests/common.h
new file mode 100644
index 0000000..ed073c0
--- /dev/null
+++ b/source/lib/netapi/tests/common.h
@@ -0,0 +1,55 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  NetApi testsuite
+ *  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
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <popt.h>
+
+void popt_common_callback(poptContext con,
+                        enum poptCallbackReason reason,
+                        const struct poptOption *opt,
+                        const char *arg, const void *data);
+
+extern struct poptOption popt_common_netapi_examples[];
+
+#define POPT_COMMON_LIBNETAPI_EXAMPLES { NULL, 0, POPT_ARG_INCLUDE_TABLE, 
popt_common_netapi_examples, 0, "Common samba netapi example options:", NULL },
+
+NET_API_STATUS test_netuseradd(const char *hostname,
+                              const char *username);
+
+NET_API_STATUS netapitest_localgroup(struct libnetapi_ctx *ctx,
+                                    const char *hostname);
+NET_API_STATUS netapitest_user(struct libnetapi_ctx *ctx,
+                              const char *hostname);
+NET_API_STATUS netapitest_group(struct libnetapi_ctx *ctx,
+                               const char *hostname);
+NET_API_STATUS netapitest_display(struct libnetapi_ctx *ctx,
+                                 const char *hostname);
+
+#ifndef ARRAY_SIZE
+#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
+#endif
+
+#define NETAPI_STATUS(x,y,fn) \
+       printf("FAILURE: line %d: %s failed with status: %s (%d)\n", \
+               __LINE__, fn, libnetapi_get_error_string(x,y), y);
+
+#define NETAPI_STATUS_MSG(x,y,fn,z) \
+       printf("FAILURE: line %d: %s failed with status: %s (%d), %s\n", \
+               __LINE__, fn, libnetapi_get_error_string(x,y), y, z);
+
+#define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
diff --git a/source/lib/netapi/tests/netapitest.c 
b/source/lib/netapi/tests/netapitest.c
new file mode 100644
index 0000000..de81f5e
--- /dev/null
+++ b/source/lib/netapi/tests/netapitest.c
@@ -0,0 +1,92 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  NetApi testsuite
+ *  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
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  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 <netapi.h>
+
+#include "common.h"
+
+int main(int argc, const char **argv)
+{
+       NET_API_STATUS status = 0;
+       struct libnetapi_ctx *ctx = NULL;
+       const char *hostname = NULL;
+
+       poptContext pc;
+       int opt;
+
+       struct poptOption long_options[] = {
+               POPT_AUTOHELP
+               POPT_COMMON_LIBNETAPI_EXAMPLES
+               POPT_TABLEEND
+       };
+
+       status = libnetapi_init(&ctx);
+       if (status != 0) {
+               return status;
+       }
+
+       pc = poptGetContext("netapitest", argc, argv, long_options, 0);
+
+       poptSetOtherOptionHelp(pc, "hostname");
+       while((opt = poptGetNextOpt(pc)) != -1) {
+       }
+
+       if (!poptPeekArg(pc)) {
+               poptPrintHelp(pc, stderr, 0);
+               goto out;
+       }
+       hostname = poptGetArg(pc);
+
+       status = netapitest_localgroup(ctx, hostname);
+       if (status) {
+               goto out;
+       }
+
+       status = netapitest_user(ctx, hostname);
+       if (status) {
+               goto out;
+       }
+
+       status = netapitest_group(ctx, hostname);
+       if (status) {
+               goto out;
+       }
+
+       status = netapitest_display(ctx, hostname);
+       if (status) {
+               goto out;
+       }
+
+ out:
+       if (status != 0) {
+               printf("testsuite failed with: %s\n",
+                       libnetapi_get_error_string(ctx, status));
+       }
+
+       libnetapi_free(ctx);
+       poptFreeContext(pc);
+
+       return status;
+}
diff --git a/source/lib/netapi/tests/netdisplay.c 
b/source/lib/netapi/tests/netdisplay.c
new file mode 100644
index 0000000..090792c
--- /dev/null
+++ b/source/lib/netapi/tests/netdisplay.c
@@ -0,0 +1,150 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  NetGroup testsuite
+ *  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
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  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 <netapi.h>
+
+#include "common.h"
+
+static NET_API_STATUS test_netquerydisplayinformation(const char *hostname,
+                                                     uint32_t level,
+                                                     const char *name)
+{
+       NET_API_STATUS status;
+       uint32_t entries_read = 0;
+       int found_name = 0;
+       const char *current_name;
+       uint8_t *buffer = NULL;
+       uint32_t idx = 0;
+       int i;
+
+       struct NET_DISPLAY_USER *user;
+       struct NET_DISPLAY_GROUP *group;
+       struct NET_DISPLAY_MACHINE *machine;
+
+       printf("testing NetQueryDisplayInformation level %d\n", level);
+
+       do {
+               status = NetQueryDisplayInformation(hostname,
+                                                   level,
+                                                   idx,
+                                                   1000,
+                                                   (uint32_t)-1,
+                                                   &entries_read,
+                                                   (void **)&buffer);
+               if (status == 0 || status == ERROR_MORE_DATA) {
+                       switch (level) {
+                               case 1:
+                                       user = (struct NET_DISPLAY_USER 
*)buffer;
+                                       break;
+                               case 2:
+                                       machine = (struct NET_DISPLAY_MACHINE 
*)buffer;
+                                       break;
+                               case 3:
+                                       group = (struct NET_DISPLAY_GROUP 
*)buffer;
+                                       break;
+                               default:
+                                       return -1;
+                       }
+
+                       for (i=0; i<entries_read; i++) {
+
+                               switch (level) {
+                                       case 1:
+                                               current_name =  
user->usri1_name;
+                                               break;
+                                       case 2:
+                                               current_name =  
machine->usri2_name;
+                                               break;
+                                       case 3:
+                                               current_name =  
group->grpi3_name;
+                                               break;
+                                       default:
+                                               break;
+                               }
+
+                               if (name && strcasecmp(current_name, name) == 
0) {
+                                       found_name = 1;
+                               }
+
+                               switch (level) {
+                                       case 1:
+                                               user++;
+                                               break;
+                                       case 2:
+                                               machine++;
+                                               break;
+                                       case 3:
+                                               group++;
+                                               break;
+                               }
+                       }
+                       NetApiBufferFree(buffer);
+               }
+               idx += entries_read;
+       } while (status == ERROR_MORE_DATA);
+
+       if (status) {
+               return status;
+       }
+
+       if (name && !found_name) {
+               printf("failed to get name\n");
+               return -1;
+       }
+
+       return 0;
+}
+
+NET_API_STATUS netapitest_display(struct libnetapi_ctx *ctx,
+                                 const char *hostname)
+{
+       NET_API_STATUS status = 0;
+       uint32_t levels[] = { 1, 2, 3};
+       int i;
+
+       printf("NetDisplay tests\n");
+
+       /* test enum */
+
+       for (i=0; i<ARRAY_SIZE(levels); i++) {
+
+               status = test_netquerydisplayinformation(hostname, levels[i], 
NULL);
+               if (status) {
+                       NETAPI_STATUS(ctx, status, 
"NetQueryDisplayInformation");
+                       goto out;
+               }
+       }
+
+       status = 0;
+
+       printf("NetDisplay tests succeeded\n");
+ out:
+       if (status != 0) {
+               printf("NetDisplay testsuite failed with: %s\n",
+                       libnetapi_get_error_string(ctx, status));
+       }
+
+       return status;
+}
diff --git a/source/lib/netapi/tests/netgroup.c 
b/source/lib/netapi/tests/netgroup.c
new file mode 100644
index 0000000..a89a772
--- /dev/null
+++ b/source/lib/netapi/tests/netgroup.c
@@ -0,0 +1,286 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  NetGroup testsuite
+ *  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
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  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>


-- 
Samba Shared Repository

<Prev in Thread] Current Thread [Next in Thread>
  • [SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-3438-g8b3149b, Günther Deschner <=