The branch, v3-3-test has been updated
       via  c69741cf19828ffcb051727029022a319437ee39 (commit)
       via  bf5934ebc7c2207f4813a3019ca109ca3b7c84c0 (commit)
       via  a156ab0597f539aea36cafa3429c7646c9eb5d7f (commit)
       via  b6e11d038a7620b6dfcae157a5cc353f193b6fa6 (commit)
      from  579732653fc2354575303dbde392eb9c4eb4d62c (commit)

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


- Log -----------------------------------------------------------------
commit c69741cf19828ffcb051727029022a319437ee39
Author: Jeremy Allison <[EMAIL PROTECTED]>
Date:   Mon Oct 20 16:34:56 2008 -0700

    Fix warnings. Jeremy.

commit bf5934ebc7c2207f4813a3019ca109ca3b7c84c0
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Fri Sep 12 17:24:37 2008 +0200

    netapi: add NetFile testsuite.
    
    Guenther

commit a156ab0597f539aea36cafa3429c7646c9eb5d7f
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Mon Sep 22 19:31:44 2008 +0200

    netapi: fix case statement in example NetUserSetModals code.
    
    Guenther

commit b6e11d038a7620b6dfcae157a5cc353f193b6fa6
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Tue Sep 16 17:53:06 2008 +0200

    netapi: start supporting NetUserSetInfo level 3.
    
    Guenther

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

Summary of changes:
 source/lib/netapi/examples/user/user_modalsset.c   |    1 +
 source/lib/netapi/tests/Makefile.in                |    2 +-
 source/lib/netapi/tests/common.h                   |    2 +
 source/lib/netapi/tests/netapitest.c               |    5 +
 .../{examples/file/file_enum.c => tests/netfile.c} |  137 ++++++++++----------
 source/lib/netapi/tests/netgroup.c                 |   10 +-
 source/lib/netapi/tests/netlocalgroup.c            |    6 +-
 source/lib/netapi/tests/netshare.c                 |    8 +-
 source/lib/netapi/tests/netuser.c                  |   20 ++--
 source/lib/netapi/user.c                           |   53 +++++++-
 10 files changed, 145 insertions(+), 99 deletions(-)
 copy source/lib/netapi/{examples/file/file_enum.c => tests/netfile.c} (56%)


Changeset truncated at 500 lines:

diff --git a/source/lib/netapi/examples/user/user_modalsset.c 
b/source/lib/netapi/examples/user/user_modalsset.c
index 57e1ef7..c6958a9 100644
--- a/source/lib/netapi/examples/user/user_modalsset.c
+++ b/source/lib/netapi/examples/user/user_modalsset.c
@@ -95,6 +95,7 @@ int main(int argc, const char **argv)
                case 1:
                case 2:
                case 3:
+                       break;
                case 1001:
                        u1001.usrmod1001_min_passwd_len = 0;
                        buffer = (uint8_t *)&u1001;
diff --git a/source/lib/netapi/tests/Makefile.in 
b/source/lib/netapi/tests/Makefile.in
index d3f0663..339e367 100644
--- a/source/lib/netapi/tests/Makefile.in
+++ b/source/lib/netapi/tests/Makefile.in
@@ -44,7 +44,7 @@ bin/.dummy:
 
 CMDLINE_OBJ = common.o
 NETAPIBUFFER_OBJ = netapibuffer.o
-NETAPITEST_OBJ = netapitest.o netlocalgroup.o netuser.o netgroup.o 
netdisplay.o netshare.o $(CMDLINE_OBJ)
+NETAPITEST_OBJ = netapitest.o netlocalgroup.o netuser.o netgroup.o 
netdisplay.o netshare.o netfile.o $(CMDLINE_OBJ)
 
 bin/[EMAIL PROTECTED]@: $(BINARY_PREREQS) $(NETAPITEST_OBJ)
        @echo Linking $@
diff --git a/source/lib/netapi/tests/common.h b/source/lib/netapi/tests/common.h
index 5a32032..9320840 100644
--- a/source/lib/netapi/tests/common.h
+++ b/source/lib/netapi/tests/common.h
@@ -41,6 +41,8 @@ NET_API_STATUS netapitest_display(struct libnetapi_ctx *ctx,
                                  const char *hostname);
 NET_API_STATUS netapitest_share(struct libnetapi_ctx *ctx,
                                const char *hostname);
+NET_API_STATUS netapitest_file(struct libnetapi_ctx *ctx,
+                              const char *hostname);
 
 #ifndef ARRAY_SIZE
 #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
diff --git a/source/lib/netapi/tests/netapitest.c 
b/source/lib/netapi/tests/netapitest.c
index 8714402..4a38f72 100644
--- a/source/lib/netapi/tests/netapitest.c
+++ b/source/lib/netapi/tests/netapitest.c
@@ -84,6 +84,11 @@ int main(int argc, const char **argv)
                goto out;
        }
 
+       status = netapitest_file(ctx, hostname);
+       if (status) {
+               goto out;
+       }
+
  out:
        if (status != 0) {
                printf("testsuite failed with: %s\n",
diff --git a/source/lib/netapi/examples/file/file_enum.c 
b/source/lib/netapi/tests/netfile.c
similarity index 56%
copy from source/lib/netapi/examples/file/file_enum.c
copy to source/lib/netapi/tests/netfile.c
index 5fbb285..bee3c2e 100644
--- a/source/lib/netapi/examples/file/file_enum.c
+++ b/source/lib/netapi/tests/netfile.c
@@ -1,6 +1,6 @@
 /*
  *  Unix SMB/CIFS implementation.
- *  NetFileEnum query
+ *  NetFile testsuite
  *  Copyright (C) Guenther Deschner 2008
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -27,72 +27,25 @@
 
 #include "common.h"
 
-int main(int argc, const char **argv)
+static NET_API_STATUS test_netfileenum(const char *hostname,
+                                      uint32_t level)
 {
        NET_API_STATUS status;
-       struct libnetapi_ctx *ctx = NULL;
-       const char *hostname = NULL;
-       const char *basepath = NULL;
-       const char *username = NULL;
-       uint32_t level = 3;
-       uint8_t *buffer = NULL;
        uint32_t entries_read = 0;
        uint32_t total_entries = 0;
        uint32_t resume_handle = 0;
+       uint8_t *buffer = NULL;
        int i;
 
        struct FILE_INFO_2 *i2 = NULL;
        struct FILE_INFO_3 *i3 = 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("file_enum", argc, argv, long_options, 0);
-
-       poptSetOtherOptionHelp(pc, "hostname basepath username level");
-       while((opt = poptGetNextOpt(pc)) != -1) {
-       }
-
-       if (!poptPeekArg(pc)) {
-               poptPrintHelp(pc, stderr, 0);
-               goto out;
-       }
-       hostname = poptGetArg(pc);
-
-       if (!poptPeekArg(pc)) {
-               poptPrintHelp(pc, stderr, 0);
-               goto out;
-       }
-       basepath = poptGetArg(pc);
-
-       if (!poptPeekArg(pc)) {
-               poptPrintHelp(pc, stderr, 0);
-               goto out;
-       }
-       username = poptGetArg(pc);
-
-       if (poptPeekArg(pc)) {
-               level = atoi(poptGetArg(pc));
-       }
-
-       /* NetFileEnum */
+       printf("testing NetFileEnum level %d\n", level);
 
        do {
-
                status = NetFileEnum(hostname,
-                                    basepath,
-                                    username,
+                                    NULL,
+                                    NULL,
                                     level,
                                     &buffer,
                                     (uint32_t)-1,
@@ -100,7 +53,6 @@ int main(int argc, const char **argv)
                                     &total_entries,
                                     &resume_handle);
                if (status == 0 || status == ERROR_MORE_DATA) {
-                       printf("total entries: %d\n", total_entries);
                        switch (level) {
                                case 2:
                                        i2 = (struct FILE_INFO_2 *)buffer;
@@ -109,38 +61,85 @@ int main(int argc, const char **argv)
                                        i3 = (struct FILE_INFO_3 *)buffer;
                                        break;
                                default:
-                                       break;
+                                       return -1;
                        }
+
                        for (i=0; i<entries_read; i++) {
+
+                               switch (level) {
+                                       case 2:
+                                       case 3:
+                                               break;
+                                       default:
+                                               break;
+                               }
+
                                switch (level) {
                                        case 2:
-                                               printf("file_id: %d\n", 
i2->fi2_id);
                                                i2++;
                                                break;
                                        case 3:
-                                               printf("file_id: %d\n", 
i3->fi3_id);
-                                               printf("permissions: %d\n", 
i3->fi3_permissions);
-                                               printf("num_locks: %d\n", 
i3->fi3_num_locks);
-                                               printf("pathname: %s\n", 
i3->fi3_pathname);
-                                               printf("username: %s\n", 
i3->fi3_username);
                                                i3++;
                                                break;
-                                       default:
-                                               break;
                                }
                        }
                        NetApiBufferFree(buffer);
                }
        } while (status == ERROR_MORE_DATA);
 
+       if (status) {
+               return status;
+       }
+
+       return 0;
+}
+
+NET_API_STATUS netapitest_file(struct libnetapi_ctx *ctx,
+                              const char *hostname)
+{
+       NET_API_STATUS status = 0;
+       uint32_t enum_levels[] = { 2, 3 };
+       int i;
+
+       printf("NetFile tests\n");
+
+       /* test enum */
+
+       for (i=0; i<ARRAY_SIZE(enum_levels); i++) {
+
+               status = test_netfileenum(hostname, enum_levels[i]);
+               if (status) {
+                       NETAPI_STATUS(ctx, status, "NetFileEnum");
+                       goto out;
+               }
+       }
+
+       /* basic queries */
+#if 0
+       {
+               uint32_t levels[] = { 2, 3 };
+               for (i=0; i<ARRAY_SIZE(levels); i++) {
+                       uint8_t *buffer = NULL;
+
+                       printf("testing NetFileGetInfo level %d\n", levels[i]);
+
+                       status = NetFileGetInfo(hostname, fid, levels[i], 
&buffer);
+                       if (status && status != 124) {
+                               NETAPI_STATUS(ctx, status, "NetFileGetInfo");
+                               goto out;
+                       }
+               }
+       }
+#endif
+
+       status = 0;
+
+       printf("NetFile tests succeeded\n");
+ out:
        if (status != 0) {
-               printf("NetFileEnum failed with: %s\n",
+               printf("NetFile testsuite failed with: %s\n",
                        libnetapi_get_error_string(ctx, status));
-               goto out;
        }
- out:
-       libnetapi_free(ctx);
-       poptFreeContext(pc);
 
        return status;
 }
diff --git a/source/lib/netapi/tests/netgroup.c 
b/source/lib/netapi/tests/netgroup.c
index a89a772..51a21b3 100644
--- a/source/lib/netapi/tests/netgroup.c
+++ b/source/lib/netapi/tests/netgroup.c
@@ -36,14 +36,14 @@ static NET_API_STATUS test_netgroupenum(const char 
*hostname,
        uint32_t total_entries = 0;
        uint32_t resume_handle = 0;
        int found_group = 0;
-       const char *current_name;
+       const char *current_name = NULL;
        uint8_t *buffer = NULL;
        int i;
 
-       struct GROUP_INFO_0 *info0;
-       struct GROUP_INFO_1 *info1;
-       struct GROUP_INFO_2 *info2;
-       struct GROUP_INFO_3 *info3;
+       struct GROUP_INFO_0 *info0 = NULL;
+       struct GROUP_INFO_1 *info1 = NULL;
+       struct GROUP_INFO_2 *info2 = NULL;
+       struct GROUP_INFO_3 *info3 = NULL;
 
        printf("testing NetGroupEnum level %d\n", level);
 
diff --git a/source/lib/netapi/tests/netlocalgroup.c 
b/source/lib/netapi/tests/netlocalgroup.c
index 0d82059..76c59c8 100644
--- a/source/lib/netapi/tests/netlocalgroup.c
+++ b/source/lib/netapi/tests/netlocalgroup.c
@@ -36,12 +36,12 @@ static NET_API_STATUS test_netlocalgroupenum(const char 
*hostname,
        uint32_t total_entries = 0;
        uint32_t resume_handle = 0;
        int found_group = 0;
-       const char *current_name;
+       const char *current_name = NULL;
        uint8_t *buffer = NULL;
        int i;
 
-       struct LOCALGROUP_INFO_0 *info0;
-       struct LOCALGROUP_INFO_1 *info1;
+       struct LOCALGROUP_INFO_0 *info0 = NULL;
+       struct LOCALGROUP_INFO_1 *info1 = NULL;
 
        printf("testing NetLocalGroupEnum level %d\n", level);
 
diff --git a/source/lib/netapi/tests/netshare.c 
b/source/lib/netapi/tests/netshare.c
index 9446c30..84af9e0 100644
--- a/source/lib/netapi/tests/netshare.c
+++ b/source/lib/netapi/tests/netshare.c
@@ -36,13 +36,13 @@ static NET_API_STATUS test_netshareenum(const char 
*hostname,
        uint32_t total_entries = 0;
        uint32_t resume_handle = 0;
        int found_share = 0;
-       const char *current_name;
+       const char *current_name = NULL;
        uint8_t *buffer = NULL;
        int i;
 
-       struct SHARE_INFO_0 *i0;
-       struct SHARE_INFO_1 *i1;
-       struct SHARE_INFO_2 *i2;
+       struct SHARE_INFO_0 *i0 = NULL;
+       struct SHARE_INFO_1 *i1 = NULL;
+       struct SHARE_INFO_2 *i2 = NULL;
 
        printf("testing NetShareEnum level %d\n", level);
 
diff --git a/source/lib/netapi/tests/netuser.c 
b/source/lib/netapi/tests/netuser.c
index f1622e4..7bbc5ca 100644
--- a/source/lib/netapi/tests/netuser.c
+++ b/source/lib/netapi/tests/netuser.c
@@ -35,20 +35,20 @@ static NET_API_STATUS test_netuserenum(const char *hostname,
        uint32_t entries_read = 0;
        uint32_t total_entries = 0;
        uint32_t resume_handle = 0;
-       const char *current_name;
+       const char *current_name = NULL;
        int found_user = 0;
        uint8_t *buffer = NULL;
        int i;
 
-       struct USER_INFO_0 *info0;
-       struct USER_INFO_1 *info1;
-       struct USER_INFO_2 *info2;
-       struct USER_INFO_3 *info3;
-       struct USER_INFO_4 *info4;
-       struct USER_INFO_10 *info10;
-       struct USER_INFO_11 *info11;
-       struct USER_INFO_20 *info20;
-       struct USER_INFO_23 *info23;
+       struct USER_INFO_0 *info0 = NULL;
+       struct USER_INFO_1 *info1 = NULL;
+       struct USER_INFO_2 *info2 = NULL;
+       struct USER_INFO_3 *info3 = NULL;
+       struct USER_INFO_4 *info4 = NULL;
+       struct USER_INFO_10 *info10 = NULL;
+       struct USER_INFO_11 *info11 = NULL;
+       struct USER_INFO_20 *info20 = NULL;
+       struct USER_INFO_23 *info23 = NULL;
 
        printf("testing NetUserEnum level %d\n", level);
 
diff --git a/source/lib/netapi/user.c b/source/lib/netapi/user.c
index 7edf1ce..2abc25d 100644
--- a/source/lib/netapi/user.c
+++ b/source/lib/netapi/user.c
@@ -108,18 +108,18 @@ static void 
convert_USER_INFO_X_to_samr_user_info21(struct USER_INFO_X *infoX,
                              infoX->usriX_workstations,
                              infoX->usriX_usr_comment,
                              &zero_parameters,
-                             0,
+                             infoX->usriX_user_id,
                              infoX->usriX_primary_group_id,
                              infoX->usriX_flags,
                              fields_present,
                              zero_logon_hours,
-                             0,
-                             0,
+                             infoX->usriX_bad_pw_count,
+                             infoX->usriX_num_logons,
                              infoX->usriX_country_code,
+                             infoX->usriX_code_page,
                              0,
                              0,
-                             0,
-                             0);
+                             infoX->usriX_password_expired);
 }
 
 /****************************************************************
@@ -132,6 +132,7 @@ static NTSTATUS construct_USER_INFO_X(uint32_t level,
        struct USER_INFO_0 *u0 = NULL;
        struct USER_INFO_1 *u1 = NULL;
        struct USER_INFO_2 *u2 = NULL;
+       struct USER_INFO_3 *u3 = NULL;
        struct USER_INFO_1003 *u1003 = NULL;
        struct USER_INFO_1006 *u1006 = NULL;
        struct USER_INFO_1007 *u1007 = NULL;
@@ -193,6 +194,37 @@ static NTSTATUS construct_USER_INFO_X(uint32_t level,
                        uX->usriX_country_code  = u2->usri2_country_code;
                        uX->usriX_code_page     = u2->usri2_code_page;
                        break;
+               case 3:
+                       u3 = (struct USER_INFO_3 *)buffer;
+                       uX->usriX_name          = u3->usri3_name;
+                       uX->usriX_password_age  = u3->usri3_password_age;
+                       uX->usriX_priv          = u3->usri3_priv;
+                       uX->usriX_home_dir      = u3->usri3_home_dir;
+                       uX->usriX_comment       = u3->usri3_comment;
+                       uX->usriX_flags         = u3->usri3_flags;
+                       uX->usriX_script_path   = u3->usri3_script_path;
+                       uX->usriX_auth_flags    = u3->usri3_auth_flags;
+                       uX->usriX_full_name     = u3->usri3_full_name;
+                       uX->usriX_usr_comment   = u3->usri3_usr_comment;
+                       uX->usriX_parms         = u3->usri3_parms;
+                       uX->usriX_workstations  = u3->usri3_workstations;
+                       uX->usriX_last_logon    = u3->usri3_last_logon;
+                       uX->usriX_last_logoff   = u3->usri3_last_logoff;
+                       uX->usriX_acct_expires  = u3->usri3_acct_expires;
+                       uX->usriX_max_storage   = u3->usri3_max_storage;
+                       uX->usriX_units_per_week= u3->usri3_units_per_week;
+                       uX->usriX_logon_hours   = u3->usri3_logon_hours;
+                       uX->usriX_bad_pw_count  = u3->usri3_bad_pw_count;
+                       uX->usriX_num_logons    = u3->usri3_num_logons;
+                       uX->usriX_logon_server  = u3->usri3_logon_server;
+                       uX->usriX_country_code  = u3->usri3_country_code;
+                       uX->usriX_code_page     = u3->usri3_code_page;
+                       uX->usriX_user_id       = u3->usri3_user_id;
+                       uX->usriX_primary_group_id = u3->usri3_primary_group_id;
+                       uX->usriX_profile       = u3->usri3_profile;
+                       uX->usriX_home_dir_drive = u3->usri3_home_dir_drive;
+                       uX->usriX_password_expired = u3->usri3_password_expired;
+                       break;
                case 1003:
                        u1003 = (struct USER_INFO_1003 *)buffer;
                        uX->usriX_password      = u1003->usri1003_password;
@@ -237,7 +269,6 @@ static NTSTATUS construct_USER_INFO_X(uint32_t level,
                        u1053 = (struct USER_INFO_1053 *)buffer;
                        uX->usriX_home_dir_drive = 
u1053->usri1053_home_dir_drive;
                        break;
-               case 3:
                case 4:
                default:
                        return NT_STATUS_INVALID_INFO_CLASS;
@@ -1753,9 +1784,17 @@ WERROR NetUserSetInfo_r(struct libnetapi_ctx *ctx,
                        user_mask = SAMR_USER_ACCESS_SET_ATTRIBUTES |
                                    SAMR_USER_ACCESS_GET_GROUPS;
                        break;
+               case 3:
+                       user_mask = STD_RIGHT_READ_CONTROL_ACCESS |
+                                   STD_RIGHT_WRITE_DAC_ACCESS |
+                                   SAMR_USER_ACCESS_GET_GROUPS |
+                                   SAMR_USER_ACCESS_SET_PASSWORD |
+                                   SAMR_USER_ACCESS_SET_ATTRIBUTES |
+                                   SAMR_USER_ACCESS_GET_ATTRIBUTES |
+                                   SAMR_USER_ACCESS_SET_LOC_COM;
+                       break;
                case 1:
                case 2:
-               case 3:
                case 4:
                case 21:
                case 22:


-- 
Samba Shared Repository

Reply via email to