| From 2166c2d3ee84ea2fde840c261d6401abc58650b5 Mon Sep 17 00:00:00 2001 |
| From: Puran Chand <pchand@vmware.com> |
| Date: Mon, 9 Apr 2018 10:10:28 -0700 |
| Subject: [PATCH] s3: libsmbclient: Add new function SMBC_readdirplus_ctx(). |
| |
| New ABI function, move to library version 0.33. |
| |
| Signed-off-by: Puran Chand <pchand@vmware.com> |
| Reviewed-by: Jeremy Allison <jra@samba.org> |
| Reviewed-by: Andreas Schneider <asn@samba.org> |
| Reviewed-by: Alexander Bokovoy <ab@samba.org> |
| --- |
| source3/include/libsmb_internal.h | 4 + |
| source3/include/libsmbclient.h | 20 ++++ |
| source3/libsmb/ABI/smbclient-0.3.3.sigs | 184 ++++++++++++++++++++++++++++++++ |
| source3/libsmb/libsmb_compat.c | 6 ++ |
| source3/libsmb/libsmb_context.c | 1 + |
| source3/libsmb/libsmb_dir.c | 46 ++++++++ |
| source3/libsmb/libsmb_setget.c | 10 ++ |
| source3/libsmb/wscript | 2 +- |
| 8 files changed, 272 insertions(+), 1 deletion(-) |
| create mode 100644 source3/libsmb/ABI/smbclient-0.3.3.sigs |
| |
| diff --git a/source3/include/libsmb_internal.h b/source3/include/libsmb_internal.h |
| index a7bda3dd1be..f3e44e875d8 100644 |
| --- a/source3/include/libsmb_internal.h |
| +++ b/source3/include/libsmb_internal.h |
| @@ -301,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 65aa7db21d3..426ed3cb6a1 100644 |
| --- a/source3/include/libsmbclient.h |
| +++ b/source3/include/libsmbclient.h |
| @@ -1024,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, |
| @@ -1618,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. |
| @@ -3067,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.3.sigs b/source3/libsmb/ABI/smbclient-0.3.3.sigs |
| new file mode 100644 |
| index 00000000000..833d0df6b5f |
| --- /dev/null |
| +++ b/source3/libsmb/ABI/smbclient-0.3.3.sigs |
| @@ -0,0 +1,184 @@ |
| +smbc_chmod: int (const char *, mode_t) |
| +smbc_close: int (int) |
| +smbc_closedir: int (int) |
| +smbc_creat: int (const char *, mode_t) |
| +smbc_fgetxattr: int (int, const char *, const void *, size_t) |
| +smbc_flistxattr: int (int, char *, size_t) |
| +smbc_free_context: int (SMBCCTX *, int) |
| +smbc_fremovexattr: int (int, const char *) |
| +smbc_fsetxattr: int (int, const char *, const void *, size_t, int) |
| +smbc_fstat: int (int, struct stat *) |
| +smbc_fstatvfs: int (int, struct statvfs *) |
| +smbc_ftruncate: int (int, off_t) |
| +smbc_getDebug: int (SMBCCTX *) |
| +smbc_getFunctionAddCachedServer: smbc_add_cached_srv_fn (SMBCCTX *) |
| +smbc_getFunctionAuthData: smbc_get_auth_data_fn (SMBCCTX *) |
| +smbc_getFunctionAuthDataWithContext: smbc_get_auth_data_with_context_fn (SMBCCTX *) |
| +smbc_getFunctionCheckServer: smbc_check_server_fn (SMBCCTX *) |
| +smbc_getFunctionChmod: smbc_chmod_fn (SMBCCTX *) |
| +smbc_getFunctionClose: smbc_close_fn (SMBCCTX *) |
| +smbc_getFunctionClosedir: smbc_closedir_fn (SMBCCTX *) |
| +smbc_getFunctionCreat: smbc_creat_fn (SMBCCTX *) |
| +smbc_getFunctionFstat: smbc_fstat_fn (SMBCCTX *) |
| +smbc_getFunctionFstatVFS: smbc_fstatvfs_fn (SMBCCTX *) |
| +smbc_getFunctionFstatdir: smbc_fstatdir_fn (SMBCCTX *) |
| +smbc_getFunctionFtruncate: smbc_ftruncate_fn (SMBCCTX *) |
| +smbc_getFunctionGetCachedServer: smbc_get_cached_srv_fn (SMBCCTX *) |
| +smbc_getFunctionGetdents: smbc_getdents_fn (SMBCCTX *) |
| +smbc_getFunctionGetxattr: smbc_getxattr_fn (SMBCCTX *) |
| +smbc_getFunctionListPrintJobs: smbc_list_print_jobs_fn (SMBCCTX *) |
| +smbc_getFunctionListxattr: smbc_listxattr_fn (SMBCCTX *) |
| +smbc_getFunctionLseek: smbc_lseek_fn (SMBCCTX *) |
| +smbc_getFunctionLseekdir: smbc_lseekdir_fn (SMBCCTX *) |
| +smbc_getFunctionMkdir: smbc_mkdir_fn (SMBCCTX *) |
| +smbc_getFunctionNotify: smbc_notify_fn (SMBCCTX *) |
| +smbc_getFunctionOpen: smbc_open_fn (SMBCCTX *) |
| +smbc_getFunctionOpenPrintJob: smbc_open_print_job_fn (SMBCCTX *) |
| +smbc_getFunctionOpendir: smbc_opendir_fn (SMBCCTX *) |
| +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 *) |
| +smbc_getFunctionRename: smbc_rename_fn (SMBCCTX *) |
| +smbc_getFunctionRmdir: smbc_rmdir_fn (SMBCCTX *) |
| +smbc_getFunctionSetxattr: smbc_setxattr_fn (SMBCCTX *) |
| +smbc_getFunctionSplice: smbc_splice_fn (SMBCCTX *) |
| +smbc_getFunctionStat: smbc_stat_fn (SMBCCTX *) |
| +smbc_getFunctionStatVFS: smbc_statvfs_fn (SMBCCTX *) |
| +smbc_getFunctionTelldir: smbc_telldir_fn (SMBCCTX *) |
| +smbc_getFunctionUnlink: smbc_unlink_fn (SMBCCTX *) |
| +smbc_getFunctionUnlinkPrintJob: smbc_unlink_print_job_fn (SMBCCTX *) |
| +smbc_getFunctionUtimes: smbc_utimes_fn (SMBCCTX *) |
| +smbc_getFunctionWrite: smbc_write_fn (SMBCCTX *) |
| +smbc_getNetbiosName: char *(SMBCCTX *) |
| +smbc_getOptionBrowseMaxLmbCount: int (SMBCCTX *) |
| +smbc_getOptionCaseSensitive: smbc_bool (SMBCCTX *) |
| +smbc_getOptionDebugToStderr: smbc_bool (SMBCCTX *) |
| +smbc_getOptionFallbackAfterKerberos: smbc_bool (SMBCCTX *) |
| +smbc_getOptionFullTimeNames: smbc_bool (SMBCCTX *) |
| +smbc_getOptionNoAutoAnonymousLogin: smbc_bool (SMBCCTX *) |
| +smbc_getOptionOneSharePerServer: smbc_bool (SMBCCTX *) |
| +smbc_getOptionOpenShareMode: smbc_share_mode (SMBCCTX *) |
| +smbc_getOptionSmbEncryptionLevel: smbc_smb_encrypt_level (SMBCCTX *) |
| +smbc_getOptionUrlEncodeReaddirEntries: smbc_bool (SMBCCTX *) |
| +smbc_getOptionUseCCache: smbc_bool (SMBCCTX *) |
| +smbc_getOptionUseKerberos: smbc_bool (SMBCCTX *) |
| +smbc_getOptionUseNTHash: smbc_bool (SMBCCTX *) |
| +smbc_getOptionUserData: void *(SMBCCTX *) |
| +smbc_getPort: uint16_t (SMBCCTX *) |
| +smbc_getServerCacheData: struct smbc_server_cache *(SMBCCTX *) |
| +smbc_getTimeout: int (SMBCCTX *) |
| +smbc_getUser: char *(SMBCCTX *) |
| +smbc_getWorkgroup: char *(SMBCCTX *) |
| +smbc_getdents: int (unsigned int, struct smbc_dirent *, int) |
| +smbc_getxattr: int (const char *, const char *, const void *, size_t) |
| +smbc_init: int (smbc_get_auth_data_fn, int) |
| +smbc_init_context: SMBCCTX *(SMBCCTX *) |
| +smbc_lgetxattr: int (const char *, const char *, const void *, size_t) |
| +smbc_list_print_jobs: int (const char *, smbc_list_print_job_fn) |
| +smbc_listxattr: int (const char *, char *, size_t) |
| +smbc_llistxattr: int (const char *, char *, size_t) |
| +smbc_lremovexattr: int (const char *, const char *) |
| +smbc_lseek: off_t (int, off_t, int) |
| +smbc_lseekdir: int (int, off_t) |
| +smbc_lsetxattr: int (const char *, const char *, const void *, size_t, int) |
| +smbc_mkdir: int (const char *, mode_t) |
| +smbc_new_context: SMBCCTX *(void) |
| +smbc_notify: int (int, smbc_bool, uint32_t, unsigned int, smbc_notify_callback_fn, void *) |
| +smbc_open: int (const char *, int, mode_t) |
| +smbc_open_print_job: int (const char *) |
| +smbc_opendir: int (const char *) |
| +smbc_option_get: void *(SMBCCTX *, char *) |
| +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 *) |
| +smbc_setConfiguration: int (SMBCCTX *, const char *) |
| +smbc_setDebug: void (SMBCCTX *, int) |
| +smbc_setFunctionAddCachedServer: void (SMBCCTX *, smbc_add_cached_srv_fn) |
| +smbc_setFunctionAuthData: void (SMBCCTX *, smbc_get_auth_data_fn) |
| +smbc_setFunctionAuthDataWithContext: void (SMBCCTX *, smbc_get_auth_data_with_context_fn) |
| +smbc_setFunctionCheckServer: void (SMBCCTX *, smbc_check_server_fn) |
| +smbc_setFunctionChmod: void (SMBCCTX *, smbc_chmod_fn) |
| +smbc_setFunctionClose: void (SMBCCTX *, smbc_close_fn) |
| +smbc_setFunctionClosedir: void (SMBCCTX *, smbc_closedir_fn) |
| +smbc_setFunctionCreat: void (SMBCCTX *, smbc_creat_fn) |
| +smbc_setFunctionFstat: void (SMBCCTX *, smbc_fstat_fn) |
| +smbc_setFunctionFstatVFS: void (SMBCCTX *, smbc_fstatvfs_fn) |
| +smbc_setFunctionFstatdir: void (SMBCCTX *, smbc_fstatdir_fn) |
| +smbc_setFunctionFtruncate: void (SMBCCTX *, smbc_ftruncate_fn) |
| +smbc_setFunctionGetCachedServer: void (SMBCCTX *, smbc_get_cached_srv_fn) |
| +smbc_setFunctionGetdents: void (SMBCCTX *, smbc_getdents_fn) |
| +smbc_setFunctionGetxattr: void (SMBCCTX *, smbc_getxattr_fn) |
| +smbc_setFunctionListPrintJobs: void (SMBCCTX *, smbc_list_print_jobs_fn) |
| +smbc_setFunctionListxattr: void (SMBCCTX *, smbc_listxattr_fn) |
| +smbc_setFunctionLseek: void (SMBCCTX *, smbc_lseek_fn) |
| +smbc_setFunctionLseekdir: void (SMBCCTX *, smbc_lseekdir_fn) |
| +smbc_setFunctionMkdir: void (SMBCCTX *, smbc_mkdir_fn) |
| +smbc_setFunctionNotify: void (SMBCCTX *, smbc_notify_fn) |
| +smbc_setFunctionOpen: void (SMBCCTX *, smbc_open_fn) |
| +smbc_setFunctionOpenPrintJob: void (SMBCCTX *, smbc_open_print_job_fn) |
| +smbc_setFunctionOpendir: void (SMBCCTX *, smbc_opendir_fn) |
| +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) |
| +smbc_setFunctionRename: void (SMBCCTX *, smbc_rename_fn) |
| +smbc_setFunctionRmdir: void (SMBCCTX *, smbc_rmdir_fn) |
| +smbc_setFunctionSetxattr: void (SMBCCTX *, smbc_setxattr_fn) |
| +smbc_setFunctionSplice: void (SMBCCTX *, smbc_splice_fn) |
| +smbc_setFunctionStat: void (SMBCCTX *, smbc_stat_fn) |
| +smbc_setFunctionStatVFS: void (SMBCCTX *, smbc_statvfs_fn) |
| +smbc_setFunctionTelldir: void (SMBCCTX *, smbc_telldir_fn) |
| +smbc_setFunctionUnlink: void (SMBCCTX *, smbc_unlink_fn) |
| +smbc_setFunctionUnlinkPrintJob: void (SMBCCTX *, smbc_unlink_print_job_fn) |
| +smbc_setFunctionUtimes: void (SMBCCTX *, smbc_utimes_fn) |
| +smbc_setFunctionWrite: void (SMBCCTX *, smbc_write_fn) |
| +smbc_setLogCallback: void (SMBCCTX *, void *, smbc_debug_callback_fn) |
| +smbc_setNetbiosName: void (SMBCCTX *, char *) |
| +smbc_setOptionBrowseMaxLmbCount: void (SMBCCTX *, int) |
| +smbc_setOptionCaseSensitive: void (SMBCCTX *, smbc_bool) |
| +smbc_setOptionDebugToStderr: void (SMBCCTX *, smbc_bool) |
| +smbc_setOptionFallbackAfterKerberos: void (SMBCCTX *, smbc_bool) |
| +smbc_setOptionFullTimeNames: void (SMBCCTX *, smbc_bool) |
| +smbc_setOptionNoAutoAnonymousLogin: void (SMBCCTX *, smbc_bool) |
| +smbc_setOptionOneSharePerServer: void (SMBCCTX *, smbc_bool) |
| +smbc_setOptionOpenShareMode: void (SMBCCTX *, smbc_share_mode) |
| +smbc_setOptionSmbEncryptionLevel: void (SMBCCTX *, smbc_smb_encrypt_level) |
| +smbc_setOptionUrlEncodeReaddirEntries: void (SMBCCTX *, smbc_bool) |
| +smbc_setOptionUseCCache: void (SMBCCTX *, smbc_bool) |
| +smbc_setOptionUseKerberos: void (SMBCCTX *, smbc_bool) |
| +smbc_setOptionUseNTHash: void (SMBCCTX *, smbc_bool) |
| +smbc_setOptionUserData: void (SMBCCTX *, void *) |
| +smbc_setPort: void (SMBCCTX *, uint16_t) |
| +smbc_setServerCacheData: void (SMBCCTX *, struct smbc_server_cache *) |
| +smbc_setTimeout: void (SMBCCTX *, int) |
| +smbc_setUser: void (SMBCCTX *, const char *) |
| +smbc_setWorkgroup: void (SMBCCTX *, char *) |
| +smbc_set_context: SMBCCTX *(SMBCCTX *) |
| +smbc_set_credentials: void (const char *, const char *, const char *, smbc_bool, const char *) |
| +smbc_set_credentials_with_fallback: void (SMBCCTX *, const char *, const char *, const char *) |
| +smbc_setxattr: int (const char *, const char *, const void *, size_t, int) |
| +smbc_stat: int (const char *, struct stat *) |
| +smbc_statvfs: int (char *, struct statvfs *) |
| +smbc_telldir: off_t (int) |
| +smbc_unlink: int (const char *) |
| +smbc_unlink_print_job: int (const char *, int) |
| +smbc_urldecode: int (char *, char *, size_t) |
| +smbc_urlencode: int (char *, char *, int) |
| +smbc_utime: int (const char *, struct utimbuf *) |
| +smbc_utimes: int (const char *, struct timeval *) |
| +smbc_version: const char *(void) |
| +smbc_write: ssize_t (int, const void *, size_t) |
| diff --git a/source3/libsmb/libsmb_compat.c b/source3/libsmb/libsmb_compat.c |
| index 5fed44abc4a..eb38480a5c6 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 b55cf1e2d15..932223c9b2f 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 30089108b74..41744eaef81 100644 |
| --- a/source3/libsmb/libsmb_dir.c |
| +++ b/source3/libsmb/libsmb_dir.c |
| @@ -1140,6 +1140,52 @@ SMBC_readdir_ctx(SMBCCTX *context, |
| return dirp; |
| } |
| |
| +/* |
| + * 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 cb32f5fc20e..7a17cadc891 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 526434eabe0..15575bcc6ab 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.1', |
| + vnum='0.3.3', |
| pc_files='smbclient.pc') |