1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

libsmbclient: Add smbc_[gs]etOptionPosixExtensions()

This is an obvious part of MR2888, not used anywhere yet. It will
eventually result in us requesting SMB311 posix semantics, but for now
it will just allow to change behaviour of libsmbclient that could
break unsuspecting applications.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Böhme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
Volker Lendecke 2023-08-16 09:13:50 +02:00 committed by Jeremy Allison
parent 9e3856ecf8
commit feb7803555
6 changed files with 220 additions and 1 deletions

View File

@ -159,6 +159,14 @@ struct SMBC_internal_data {
*/
bool full_time_names;
/*
* Enable POSIX extensions before opening files/directories
* Will silently ignore if the server does not support the POSIX
* extensions
*/
bool posix_extensions;
/*
* The share mode of a file being opened. To match POSIX semantics
* (and maintain backward compatibility), DENY_NONE is the default.

View File

@ -588,7 +588,13 @@ smbc_getPort(SMBCCTX *c);
void
smbc_setPort(SMBCCTX *c, uint16_t port);
/** Get whether to enable POSIX extensions if available */
smbc_bool
smbc_getOptionPosixExtensions(SMBCCTX *c);
/** Set whether to enable POSIX extensions if available */
void
smbc_setOptionPosixExtensions(SMBCCTX *c, smbc_bool b);
/***********************************
* Getters and setters for OPTIONS *

View File

@ -0,0 +1,190 @@
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_getFunctionReaddirPlus2: smbc_readdirplus2_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: const 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_getOptionPosixExtensions: smbc_bool (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: const char *(SMBCCTX *)
smbc_getWorkgroup: const 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_readdirplus2: const struct libsmb_file_info *(unsigned int, struct stat *)
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_setFunctionReaddirPlus2: void (SMBCCTX *, smbc_readdirplus2_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 *, const 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_setOptionPosixExtensions: void (SMBCCTX *, smbc_bool)
smbc_setOptionProtocols: smbc_bool (SMBCCTX *, const char *, const char *)
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 *, const 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)

View File

@ -191,6 +191,7 @@ smbc_new_context(void)
smbc_setOptionBrowseMaxLmbCount(context, 3); /* # LMBs to query */
smbc_setOptionUrlEncodeReaddirEntries(context, False);
smbc_setOptionOneSharePerServer(context, False);
smbc_setOptionPosixExtensions(context, false);
if (getenv("LIBSMBCLIENT_NO_CCACHE") != NULL) {
smbc_setOptionUseCCache(context, false);
}

View File

@ -549,6 +549,20 @@ smbc_setOptionProtocols(SMBCCTX *c,
return ok;
}
/** Get whether to enable POSIX extensions if available */
smbc_bool
smbc_getOptionPosixExtensions(SMBCCTX *c)
{
return c->internal->posix_extensions;
}
/** Set whether to enable POSIX extensions if available */
void
smbc_setOptionPosixExtensions(SMBCCTX *c, smbc_bool b)
{
c->internal->posix_extensions = b;
}
/** Get the function for obtaining authentication data */
smbc_get_auth_data_fn
smbc_getFunctionAuthData(SMBCCTX *c)

View File

@ -26,5 +26,5 @@ def build(bld):
public_headers='../include/libsmbclient.h',
abi_directory='ABI',
abi_match='smbc_*',
vnum='0.7.0',
vnum='0.8.0',
pc_files='smbclient.pc')