The branch, master has been updated
       via  54f2989 tests: libsmbclient: Add a readdirplus() test suite.
       via  2166c2d s3: libsmbclient: Add new function SMBC_readdirplus_ctx().
       via  dd3f019 s3: libsmbclient: Add function add_dirplus() to fill the 
list from a returned file info.
       via  3fc5a79 s3: libsmbclient: Add readdirplus cleanup code on directory 
close.
       via  bf13fe0 s3: libsmbclient: Add internal/external structures needed 
for readdirplus.
       via  abb80ce s3: client: Add btime_ts to struct finfo.
      from  30e6b59 s3: VFS: Remove SMB_VFS_WRITE() function and all 
implementations.

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 54f29891090edb0a26120d8ad6ed0485c31516ab
Author: Jeremy Allison <[email protected]>
Date:   Tue Apr 24 13:47:54 2018 -0700

    tests: libsmbclient: Add a readdirplus() test suite.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    Reviewed-by: Alexander Bokovoy <[email protected]>
    
    Autobuild-User(master): Jeremy Allison <[email protected]>
    Autobuild-Date(master): Sat May  5 04:31:18 CEST 2018 on sn-devel-144

commit 2166c2d3ee84ea2fde840c261d6401abc58650b5
Author: Puran Chand <[email protected]>
Date:   Mon Apr 9 10:10:28 2018 -0700

    s3: libsmbclient: Add new function SMBC_readdirplus_ctx().
    
    New ABI function, move to library version 0.33.
    
    Signed-off-by: Puran Chand <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    Reviewed-by: Alexander Bokovoy <[email protected]>

commit dd3f019d588ee71a06985da2c1abe84391d95b0e
Author: Puran Chand <[email protected]>
Date:   Fri Apr 6 14:50:39 2018 -0700

    s3: libsmbclient: Add function add_dirplus() to fill the list from a 
returned file info.
    
    Not yet externally visible.
    
    Signed-off-by: Puran Chand <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    Reviewed-by: Alexander Bokovoy <[email protected]>

commit 3fc5a79750c443087ac0968085fadba74cce555d
Author: Puran Chand <[email protected]>
Date:   Fri Apr 6 14:17:35 2018 -0700

    s3: libsmbclient: Add readdirplus cleanup code on directory close.
    
    Signed-off-by: Puran Chand <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    Reviewed-by: Alexander Bokovoy <[email protected]>

commit bf13fe0f2226844123cfb090e0ab82c8ce24e09b
Author: Puran Chand <[email protected]>
Date:   Fri Apr 6 14:08:03 2018 -0700

    s3: libsmbclient: Add internal/external structures needed for readdirplus.
    
    Not yet used.
    
    Signed-off-by: Puran Chand <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    Reviewed-by: Alexander Bokovoy <[email protected]>

commit abb80ce44c41759306be3ff1cca6bea532bdf45f
Author: Jeremy Allison <[email protected]>
Date:   Fri Apr 6 13:35:05 2018 -0700

    s3: client: Add btime_ts to struct finfo.
    
    Fill it in when available, else return it as zero.
    
    Based on a patch from Puran Chand <[email protected]>.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    Reviewed-by: Alexander Bokovoy <[email protected]>

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

Summary of changes:
 examples/fuse/clifuse.c                            |   1 +
 source3/include/client.h                           |   1 +
 source3/include/libsmb_internal.h                  |   9 ++
 source3/include/libsmbclient.h                     |  69 ++++++++++
 .../{smbclient-0.3.2.sigs => smbclient-0.3.3.sigs} |   3 +
 source3/libsmb/cli_smb2_fnum.c                     |   1 +
 source3/libsmb/clilist.c                           |  19 +++
 source3/libsmb/libsmb_compat.c                     |   6 +
 source3/libsmb/libsmb_context.c                    |   1 +
 source3/libsmb/libsmb_dir.c                        | 140 +++++++++++++++++++++
 source3/libsmb/libsmb_setget.c                     |  10 ++
 source3/libsmb/wscript                             |   2 +-
 source3/selftest/tests.py                          |   8 +-
 source4/selftest/tests.py                          |   3 +-
 source4/torture/libsmbclient/libsmbclient.c        |  96 ++++++++++++++
 15 files changed, 365 insertions(+), 4 deletions(-)
 copy source3/libsmb/ABI/{smbclient-0.3.2.sigs => smbclient-0.3.3.sigs} (98%)


Changeset truncated at 500 lines:

diff --git a/examples/fuse/clifuse.c b/examples/fuse/clifuse.c
index da9dd4d..3c7e498 100644
--- a/examples/fuse/clifuse.c
+++ b/examples/fuse/clifuse.c
@@ -484,6 +484,7 @@ static NTSTATUS parse_finfo_id_both_directory_info(uint8_t 
*dir_data,
                return NT_STATUS_INFO_LENGTH_MISMATCH;
        }
 
+       finfo->btime_ts = interpret_long_date((const char *)dir_data + 8);
        finfo->atime_ts = interpret_long_date((const char *)dir_data + 16);
        finfo->mtime_ts = interpret_long_date((const char *)dir_data + 24);
        finfo->ctime_ts = interpret_long_date((const char *)dir_data + 32);
diff --git a/source3/include/client.h b/source3/include/client.h
index 1fe3f1c..0cb2138 100644
--- a/source3/include/client.h
+++ b/source3/include/client.h
@@ -108,6 +108,7 @@ struct file_info {
        uid_t uid;
        gid_t gid;
        /* these times are normally kept in GMT */
+       struct timespec btime_ts; /* Birth-time if supported by system */
        struct timespec mtime_ts;
        struct timespec atime_ts;
        struct timespec ctime_ts;
diff --git a/source3/include/libsmb_internal.h 
b/source3/include/libsmb_internal.h
index 0e0045e..f3e44e8 100644
--- a/source3/include/libsmb_internal.h
+++ b/source3/include/libsmb_internal.h
@@ -94,6 +94,10 @@ struct smbc_dir_list {
        struct smbc_dirent *dirent;
 };
 
+struct smbc_dirplus_list {
+       struct smbc_dirplus_list *next;
+       struct libsmb_file_info *smb_finfo;
+};
 
 /*
  * Structure for open file management
@@ -110,6 +114,7 @@ struct _SMBCFILE {
        struct _SMBCSRV *srv;
        bool file;
        struct smbc_dir_list *dir_list, *dir_end, *dir_next;
+       struct smbc_dirplus_list *dirplus_list, *dirplus_end, *dirplus_next;
        int dir_type, dir_error;
 
        SMBCFILE *next, *prev;
@@ -296,6 +301,10 @@ struct smbc_dirent *
 SMBC_readdir_ctx(SMBCCTX *context,
                  SMBCFILE *dir);
 
+const struct libsmb_file_info *
+SMBC_readdirplus_ctx(SMBCCTX *context,
+                     SMBCFILE *dir);
+
 int
 SMBC_getdents_ctx(SMBCCTX *context,
                   SMBCFILE *dir,
diff --git a/source3/include/libsmbclient.h b/source3/include/libsmbclient.h
index 7a20679..426ed3c 100644
--- a/source3/include/libsmbclient.h
+++ b/source3/include/libsmbclient.h
@@ -129,6 +129,55 @@ struct smbc_dirent
        char name[1];
 };
 
+/**@ingroup structure
+ * Structure that represents all attributes of a directory entry.
+ *
+ */
+struct libsmb_file_info
+{
+       /**
+        * Size of file
+        */
+       uint64_t size;
+       /**
+        * DOS attributes of file
+        */
+       uint16_t attrs;
+       /**
+        * User ID of file
+        */
+       uid_t uid;
+       /**
+        * Group ID of file
+        */
+       gid_t gid;
+       /**
+        * Birth/Create time of file (if supported by system)
+        * Otherwise the value will be 0
+        */
+       struct timespec btime_ts;
+       /**
+        * Modified time for the file
+        */
+       struct timespec mtime_ts;
+       /**
+        * Access time for the file
+        */
+       struct timespec atime_ts;
+       /**
+        * Change time for the file
+        */
+       struct timespec ctime_ts;
+       /**
+        * Name of file
+        */
+       char *name;
+       /**
+        * Short name of file
+        */
+       char *short_name;
+};
+
 /*
  * Logging callback function
  */
@@ -975,6 +1024,11 @@ typedef struct smbc_dirent * (*smbc_readdir_fn)(SMBCCTX 
*c,
 smbc_readdir_fn smbc_getFunctionReaddir(SMBCCTX *c);
 void smbc_setFunctionReaddir(SMBCCTX *c, smbc_readdir_fn fn);
 
+typedef const struct libsmb_file_info * (*smbc_readdirplus_fn)(SMBCCTX *c,
+                                                               SMBCFILE *dir);
+smbc_readdirplus_fn smbc_getFunctionReaddirPlus(SMBCCTX *c);
+void smbc_setFunctionReaddirPlus(SMBCCTX *c, smbc_readdirplus_fn fn);
+
 typedef int (*smbc_getdents_fn)(SMBCCTX *c,
                                 SMBCFILE *dir,
                                 struct smbc_dirent *dirp,
@@ -1569,6 +1623,20 @@ int smbc_getdents(unsigned int dh, struct smbc_dirent 
*dirp, int count);
  */
 struct smbc_dirent* smbc_readdir(unsigned int dh);
 
+/**@ingroup directory
+ * Works similar as smbc_readdir but returns more information about file.
+ *
+ * @param dh        Valid directory as returned by smbc_opendir()
+ *
+ * @return          A const pointer to a libsmb_file_info structure,
+ *                  or NULL if an error occurs or end-of-directory is reached:
+ *                  - EBADF Invalid directory handle
+ *                  - EINVAL smbc_init() failed or has not been called
+ *
+ * @see             smbc_open(), smbc_readdir()
+ */
+const struct libsmb_file_info *smbc_readdirplus(unsigned int dh);
+
 
 /**@ingroup directory
  * Get the current directory offset.
@@ -3018,6 +3086,7 @@ struct _SMBCCTX
         smbc_opendir_fn                 opendir DEPRECATED_SMBC_INTERFACE;
         smbc_closedir_fn                closedir DEPRECATED_SMBC_INTERFACE;
         smbc_readdir_fn                 readdir DEPRECATED_SMBC_INTERFACE;
+        smbc_readdirplus_fn             readdirplus DEPRECATED_SMBC_INTERFACE;
         smbc_getdents_fn                getdents DEPRECATED_SMBC_INTERFACE;
         smbc_mkdir_fn                   mkdir DEPRECATED_SMBC_INTERFACE;
         smbc_rmdir_fn                   rmdir DEPRECATED_SMBC_INTERFACE;
diff --git a/source3/libsmb/ABI/smbclient-0.3.2.sigs 
b/source3/libsmb/ABI/smbclient-0.3.3.sigs
similarity index 98%
copy from source3/libsmb/ABI/smbclient-0.3.2.sigs
copy to source3/libsmb/ABI/smbclient-0.3.3.sigs
index 2f089d8..833d0df 100644
--- a/source3/libsmb/ABI/smbclient-0.3.2.sigs
+++ b/source3/libsmb/ABI/smbclient-0.3.3.sigs
@@ -39,6 +39,7 @@ smbc_getFunctionPrintFile: smbc_print_file_fn (SMBCCTX *)
 smbc_getFunctionPurgeCachedServers: smbc_purge_cached_fn (SMBCCTX *)
 smbc_getFunctionRead: smbc_read_fn (SMBCCTX *)
 smbc_getFunctionReaddir: smbc_readdir_fn (SMBCCTX *)
+smbc_getFunctionReaddirPlus: smbc_readdirplus_fn (SMBCCTX *)
 smbc_getFunctionRemoveCachedServer: smbc_remove_cached_srv_fn (SMBCCTX *)
 smbc_getFunctionRemoveUnusedServer: smbc_remove_unused_server_fn (SMBCCTX *)
 smbc_getFunctionRemovexattr: smbc_removexattr_fn (SMBCCTX *)
@@ -96,6 +97,7 @@ smbc_option_set: void (SMBCCTX *, char *, ...)
 smbc_print_file: int (const char *, const char *)
 smbc_read: ssize_t (int, void *, size_t)
 smbc_readdir: struct smbc_dirent *(unsigned int)
+smbc_readdirplus: const struct libsmb_file_info *(unsigned int)
 smbc_removexattr: int (const char *, const char *)
 smbc_rename: int (const char *, const char *)
 smbc_rmdir: int (const char *)
@@ -129,6 +131,7 @@ smbc_setFunctionPrintFile: void (SMBCCTX *, 
smbc_print_file_fn)
 smbc_setFunctionPurgeCachedServers: void (SMBCCTX *, smbc_purge_cached_fn)
 smbc_setFunctionRead: void (SMBCCTX *, smbc_read_fn)
 smbc_setFunctionReaddir: void (SMBCCTX *, smbc_readdir_fn)
+smbc_setFunctionReaddirPlus: void (SMBCCTX *, smbc_readdirplus_fn)
 smbc_setFunctionRemoveCachedServer: void (SMBCCTX *, smbc_remove_cached_srv_fn)
 smbc_setFunctionRemoveUnusedServer: void (SMBCCTX *, 
smbc_remove_unused_server_fn)
 smbc_setFunctionRemovexattr: void (SMBCCTX *, smbc_removexattr_fn)
diff --git a/source3/libsmb/cli_smb2_fnum.c b/source3/libsmb/cli_smb2_fnum.c
index c397b29..1eb1bea 100644
--- a/source3/libsmb/cli_smb2_fnum.c
+++ b/source3/libsmb/cli_smb2_fnum.c
@@ -803,6 +803,7 @@ static NTSTATUS parse_finfo_id_both_directory_info(uint8_t 
*dir_data,
                return NT_STATUS_INFO_LENGTH_MISMATCH;
        }
 
+       finfo->btime_ts = interpret_long_date((const char *)dir_data + 8);
        finfo->atime_ts = interpret_long_date((const char *)dir_data + 16);
        finfo->mtime_ts = interpret_long_date((const char *)dir_data + 24);
        finfo->ctime_ts = interpret_long_date((const char *)dir_data + 32);
diff --git a/source3/libsmb/clilist.c b/source3/libsmb/clilist.c
index 41f5851..5cb1fce 100644
--- a/source3/libsmb/clilist.c
+++ b/source3/libsmb/clilist.c
@@ -77,6 +77,14 @@ static size_t interpret_long_filename(TALLOC_CTX *ctx,
                        if (pdata_end - base < 27) {
                                return pdata_end - base;
                        }
+                       /*
+                        * What we're returning here as ctime_ts is
+                        * actually the server create time.
+                        */
+                       finfo->btime_ts = convert_time_t_to_timespec(
+                               make_unix_date2(p+4,
+                                       smb1cli_conn_server_time_zone(
+                                               cli->conn)));
                        finfo->ctime_ts = convert_time_t_to_timespec(
                                make_unix_date2(p+4, 
smb1cli_conn_server_time_zone(cli->conn)));
                        finfo->atime_ts = convert_time_t_to_timespec(
@@ -128,6 +136,14 @@ static size_t interpret_long_filename(TALLOC_CTX *ctx,
                        if (pdata_end - base < 31) {
                                return pdata_end - base;
                        }
+                       /*
+                        * What we're returning here as ctime_ts is
+                        * actually the server create time.
+                        */
+                       finfo->btime_ts = convert_time_t_to_timespec(
+                               make_unix_date2(p+4,
+                                       smb1cli_conn_server_time_zone(
+                                               cli->conn)));
                        finfo->ctime_ts = convert_time_t_to_timespec(
                                make_unix_date2(p+4, 
smb1cli_conn_server_time_zone(cli->conn)));
                        finfo->atime_ts = convert_time_t_to_timespec(
@@ -250,6 +266,9 @@ static bool interpret_short_filename(TALLOC_CTX *ctx,
 
        finfo->mode = CVAL(p,21);
 
+       /* We don't get birth time. */
+       finfo->btime_ts.tv_sec = 0;
+       finfo->btime_ts.tv_nsec = 0;
        /* this date is converted to GMT by make_unix_date */
        finfo->ctime_ts.tv_sec = make_unix_date(p+22, 
smb1cli_conn_server_time_zone(cli->conn));
        finfo->ctime_ts.tv_nsec = 0;
diff --git a/source3/libsmb/libsmb_compat.c b/source3/libsmb/libsmb_compat.c
index 5fed44a..eb38480 100644
--- a/source3/libsmb/libsmb_compat.c
+++ b/source3/libsmb/libsmb_compat.c
@@ -285,6 +285,12 @@ smbc_readdir(unsigned int dh)
         return smbc_getFunctionReaddir(statcont)(statcont, file);
 }
 
+const struct libsmb_file_info *smbc_readdirplus(unsigned int dh)
+{
+       SMBCFILE * file = find_fd(dh);
+       return smbc_getFunctionReaddirPlus(statcont)(statcont, file);
+}
+
 off_t
 smbc_telldir(int dh)
 {
diff --git a/source3/libsmb/libsmb_context.c b/source3/libsmb/libsmb_context.c
index b55cf1e..932223c 100644
--- a/source3/libsmb/libsmb_context.c
+++ b/source3/libsmb/libsmb_context.c
@@ -208,6 +208,7 @@ smbc_new_context(void)
         smbc_setFunctionOpendir(context, SMBC_opendir_ctx);
         smbc_setFunctionClosedir(context, SMBC_closedir_ctx);
         smbc_setFunctionReaddir(context, SMBC_readdir_ctx);
+        smbc_setFunctionReaddirPlus(context, SMBC_readdirplus_ctx);
         smbc_setFunctionGetdents(context, SMBC_getdents_ctx);
         smbc_setFunctionMkdir(context, SMBC_mkdir_ctx);
         smbc_setFunctionRmdir(context, SMBC_rmdir_ctx);
diff --git a/source3/libsmb/libsmb_dir.c b/source3/libsmb/libsmb_dir.c
index 8c3fed6..41744ea 100644
--- a/source3/libsmb/libsmb_dir.c
+++ b/source3/libsmb/libsmb_dir.c
@@ -40,6 +40,26 @@
  * We accept the URL syntax explained in SMBC_parse_path(), above.
  */
 
+static void remove_dirplus(SMBCFILE *dir)
+{
+       struct smbc_dirplus_list *d = NULL;
+
+       d = dir->dirplus_list;
+       while (d != NULL) {
+               struct smbc_dirplus_list *f = d;
+               d = d->next;
+
+               SAFE_FREE(f->smb_finfo->short_name);
+               SAFE_FREE(f->smb_finfo->name);
+               SAFE_FREE(f->smb_finfo);
+               SAFE_FREE(f);
+       }
+
+       dir->dirplus_list = NULL;
+       dir->dirplus_end = NULL;
+       dir->dirplus_next = NULL;
+}
+
 static void
 remove_dir(SMBCFILE *dir)
 {
@@ -139,6 +159,73 @@ add_dirent(SMBCFILE *dir,
 
 }
 
+static int add_dirplus(SMBCFILE *dir, struct file_info *finfo)
+{
+       struct smbc_dirplus_list *new_entry = NULL;
+       struct libsmb_file_info *info = NULL;
+
+       new_entry = SMB_MALLOC_P(struct smbc_dirplus_list);
+       if (new_entry == NULL) {
+               dir->dir_error = ENOMEM;
+               return -1;
+       }
+       ZERO_STRUCTP(new_entry);
+
+       info = SMB_MALLOC_P(struct libsmb_file_info);
+       if (info == NULL) {
+               SAFE_FREE(new_entry);
+               dir->dir_error = ENOMEM;
+               return -1;
+       }
+
+       ZERO_STRUCTP(info);
+
+       info->btime_ts = finfo->btime_ts;
+       info->atime_ts = finfo->atime_ts;
+       info->ctime_ts = finfo->ctime_ts;
+       info->mtime_ts = finfo->mtime_ts;
+       info->gid = finfo->gid;
+       info->attrs = finfo->mode;
+       info->size = finfo->size;
+       info->uid = finfo->uid;
+       info->name = SMB_STRDUP(finfo->name);
+       if (info->name == NULL) {
+               SAFE_FREE(info);
+               SAFE_FREE(new_entry);
+               dir->dir_error = ENOMEM;
+               return -1;
+       }
+
+       if (finfo->short_name) {
+               info->short_name = SMB_STRDUP(finfo->short_name);
+       } else {
+               info->short_name = SMB_STRDUP("");
+       }
+
+       if (info->short_name == NULL) {
+               SAFE_FREE(info->name);
+               SAFE_FREE(info);
+               SAFE_FREE(new_entry);
+               dir->dir_error = ENOMEM;
+               return -1;
+       }
+       new_entry->smb_finfo = info;
+
+       /* Now add to the list. */
+       if (dir->dirplus_list == NULL) {
+               /* Empty list - point everything at new_entry. */
+               dir->dirplus_list = new_entry;
+               dir->dirplus_end = new_entry;
+               dir->dirplus_next = new_entry;
+       } else {
+               /* Append to list but leave the ->next cursor alone. */
+               dir->dirplus_end->next = new_entry;
+               dir->dirplus_end = new_entry;
+       }
+
+       return 0;
+}
+
 static void
 list_unique_wg_fn(const char *name,
                   uint32_t type,
@@ -248,12 +335,18 @@ dir_list_fn(const char *mnt,
             const char *mask,
             void *state)
 {
+       SMBCFILE *dirp = (SMBCFILE *)state;
+       int ret;
 
        if (add_dirent((SMBCFILE *)state, finfo->name, "",
                       
(finfo->mode&FILE_ATTRIBUTE_DIRECTORY?SMBC_DIR:SMBC_FILE)) < 0) {
                SMBCFILE *dir = (SMBCFILE *)state;
                return map_nt_error_from_unix(dir->dir_error);
        }
+       ret = add_dirplus(dirp, finfo);
+       if (ret < 0) {
+               return map_nt_error_from_unix(dirp->dir_error);
+       }
        return NT_STATUS_OK;
 }
 
@@ -930,6 +1023,7 @@ SMBC_closedir_ctx(SMBCCTX *context,
        }
 
        remove_dir(dir); /* Clean it up */
+       remove_dirplus(dir);
 
        DLIST_REMOVE(context->internal->files, dir);
 
@@ -1047,6 +1141,52 @@ SMBC_readdir_ctx(SMBCCTX *context,
 }
 
 /*
+ * Routine to get a directory entry with all attributes
+ */
+
+const struct libsmb_file_info *
+SMBC_readdirplus_ctx(SMBCCTX *context,
+                     SMBCFILE *dir)
+{
+       struct libsmb_file_info *smb_finfo = NULL;
+       TALLOC_CTX *frame = talloc_stackframe();
+
+       /* Check that all is ok first ... */
+
+       if (context == NULL || !context->internal->initialized) {
+               DBG_ERR("Invalid context in SMBC_readdirplus_ctx()\n");
+               TALLOC_FREE(frame);
+               errno = EINVAL;
+               return NULL;
+       }
+
+       if (dir == NULL ||
+           SMBC_dlist_contains(context->internal->files,
+                               dir) == 0) {
+               DBG_ERR("Invalid dir in SMBC_readdirplus_ctx()\n");
+               TALLOC_FREE(frame);
+               errno = EBADF;
+               return NULL;
+       }
+
+       if (dir->dirplus_next == NULL) {
+               TALLOC_FREE(frame);
+               return NULL;
+       }
+
+       smb_finfo = dir->dirplus_next->smb_finfo;
+       if (smb_finfo == NULL) {
+               TALLOC_FREE(frame);
+               errno = ENOENT;
+               return NULL;
+       }
+       dir->dirplus_next = dir->dirplus_next->next;
+
+       TALLOC_FREE(frame);
+       return smb_finfo;
+}
+
+/*
  * Routine to get directory entries
  */
 
diff --git a/source3/libsmb/libsmb_setget.c b/source3/libsmb/libsmb_setget.c
index cb32f5f..7a17cad 100644
--- a/source3/libsmb/libsmb_setget.c
+++ b/source3/libsmb/libsmb_setget.c
@@ -879,6 +879,16 @@ smbc_setFunctionReaddir(SMBCCTX *c, smbc_readdir_fn fn)
         c->readdir = fn;
 }
 
+smbc_readdirplus_fn smbc_getFunctionReaddirPlus(SMBCCTX *c)
+{
+       return c->readdirplus;
+}
+
+void smbc_setFunctionReaddirPlus(SMBCCTX *c, smbc_readdirplus_fn fn)
+{
+       c->readdirplus = fn;
+}
+
 smbc_getdents_fn
 smbc_getFunctionGetdents(SMBCCTX *c)
 {
diff --git a/source3/libsmb/wscript b/source3/libsmb/wscript
index 526434e..15575bc 100644
--- a/source3/libsmb/wscript
+++ b/source3/libsmb/wscript
@@ -27,5 +27,5 @@ def build(bld):
                        public_headers='../include/libsmbclient.h',
                        abi_directory='ABI',
                        abi_match='smbc_*',
-                       vnum='0.3.2',
+                       vnum='0.3.3',
                        pc_files='smbclient.pc')
diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py
index 810cb5e..c234679 100755
--- a/source3/selftest/tests.py
+++ b/source3/selftest/tests.py
@@ -551,8 +551,12 @@ for t in tests:
         plansmbtorture4testsuite(t, "nt4_dc", '//$SERVER_IP/tmp 
-U$USERNAME%$PASSWORD --option=torture:wksname=samba3rpctest')
         plansmbtorture4testsuite(t, "ad_dc", '//$SERVER/tmp 
-U$USERNAME%$PASSWORD --option=torture:wksname=samba3rpctest')
     elif t == "libsmbclient":


-- 
Samba Shared Repository

Reply via email to