Copyright (C) Andrew Tridgell 1998
Copyright (C) Richard Sharpe 2000
Copyright (C) John Terpsra 2000
- Copyright (C) Tom Jansen (Ninja ISD) 2002
+ Copyright (C) Tom Jansen (Ninja ISD) 2002
Copyright (C) Derrell Lipman 2003-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/>.
=====================================================================*/
#endif
/*-------------------------------------------------------------------*/
-/* The following are special comments to instruct DOXYGEN (automated
+/* The following are special comments to instruct DOXYGEN (automated
* documentation tool:
*/
/** \defgroup libsmbclient
* \ingroup libsmbclient
* Functions that don't fit in to other categories
*/
-/*-------------------------------------------------------------------*/
+/*-------------------------------------------------------------------*/
/* Make sure we have the following includes for now ... */
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/statvfs.h>
+#include <stdint.h>
#include <fcntl.h>
+#include <time.h>
#include <utime.h>
#define SMBC_BASE_FD 10000 /* smallest file descriptor returned */
* Structure that represents a directory entry.
*
*/
-struct smbc_dirent
+struct smbc_dirent
{
/** Type of entity.
SMBC_WORKGROUP=1,
- SMBC_SERVER=2,
+ SMBC_SERVER=2,
SMBC_FILE_SHARE=3,
SMBC_PRINTER_SHARE=4,
SMBC_COMMS_SHARE=5,
SMBC_IPC_SHARE=6,
SMBC_DIR=7,
SMBC_FILE=8,
- SMBC_LINK=9,*/
- unsigned int smbc_type;
+ SMBC_LINK=9,*/
+ unsigned int smbc_type;
/** Length of this smbc_dirent in bytes
*/
* null terminator)
*/
unsigned int commentlen;
- /** Points to the null terminated comment string
+ /** Points to the null terminated comment string
*/
char *comment;
/** The length of the name string in bytes (does not include
* null terminator)
*/
unsigned int namelen;
- /** Points to the null terminated name string
+ /** Points to the null terminated name string
*/
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
+ */
+typedef void (*smbc_debug_callback_fn)(void *private_ptr, int level, const char *msg);
+
/*
* Flags for smbc_setxattr()
* Specify a bitwise OR of these, or 0 to add or replace as necessary
*/
typedef enum smbc_smb_encrypt_level
{
+ SMBC_ENCRYPTLEVEL_DEFAULT = -1,
SMBC_ENCRYPTLEVEL_NONE = 0,
SMBC_ENCRYPTLEVEL_REQUEST = 1,
SMBC_ENCRYPTLEVEL_REQUIRE = 2
*
*/
#ifndef _CLIENT_H
-struct print_job_info
+struct print_job_info
{
/** numeric ID of the print job
*/
unsigned short id;
-
+
/** represents print job priority (lower numbers mean higher priority)
*/
unsigned short priority;
-
+
/** Size of the print job
*/
size_t size;
-
+
/** Name of the user that owns the print job
*/
char user[128];
-
+
/** Name of the print job. This will have no name if an anonymous print
* file was opened. Ie smb://server/printer
*/
/**@ingroup structure
- * Server handle
+ * Server handle
*/
typedef struct _SMBCSRV SMBCSRV;
/**@ingroup structure
- * File or directory handle
+ * File or directory handle
*/
typedef struct _SMBCFILE SMBCFILE;
/**@ingroup structure
- * File or directory handle
+ * File or directory handle
*/
typedef struct _SMBCCTX SMBCCTX;
* smbc_getOptionFallbackAFterKerberos()
* smbc_setOptionNoAutoAnonymousLogin()
* smbc_getOptionNoAutoAnonymousLogin()
+ * smbc_setOptionUseCCache()
+ * smbc_getOptionUseCCache()
*/
# define SMB_CTX_FLAG_USE_KERBEROS (1 << 0)
# define SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS (1 << 1)
# define SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON (1 << 2)
+# define SMB_CTX_FLAG_USE_CCACHE (1 << 3)
/**@ingroup callback
* Authentication callback function type (traditional method)
- *
+ *
* Type for the the authentication function called by the library to
- * obtain authentication credentals
+ * obtain authentication credentials
*
* For kerberos support the function should just be called without
* prompting the user for credentials. Which means a simple 'return'
* @param wg Pointer to buffer containing a "hint" for the
* workgroup to be authenticated. Should be filled in
* with the correct workgroup if the hint is wrong.
- *
+ *
* @param wglen The size of the workgroup buffer in bytes
*
* @param un Pointer to buffer containing a "hint" for the
* user name to be use for authentication. Should be
* filled in with the correct workgroup if the hint is
* wrong.
- *
+ *
* @param unlen The size of the username buffer in bytes
*
- * @param pw Pointer to buffer containing to which password
+ * @param pw Pointer to buffer containing to which password
* copied
- *
+ *
* @param pwlen The size of the password buffer in bytes
- *
+ *
*/
-typedef void (*smbc_get_auth_data_fn)(const char *srv,
+typedef void (*smbc_get_auth_data_fn)(const char *srv,
const char *shr,
- char *wg, int wglen,
+ char *wg, int wglen,
char *un, int unlen,
char *pw, int pwlen);
/**@ingroup callback
* Authentication callback function type (method that includes context)
- *
+ *
* Type for the the authentication function called by the library to
- * obtain authentication credentals
+ * obtain authentication credentials
*
* For kerberos support the function should just be called without
* prompting the user for credentials. Which means a simple 'return'
* @param wg Pointer to buffer containing a "hint" for the
* workgroup to be authenticated. Should be filled in
* with the correct workgroup if the hint is wrong.
- *
+ *
* @param wglen The size of the workgroup buffer in bytes
*
* @param un Pointer to buffer containing a "hint" for the
* user name to be use for authentication. Should be
* filled in with the correct workgroup if the hint is
* wrong.
- *
+ *
* @param unlen The size of the username buffer in bytes
*
- * @param pw Pointer to buffer containing to which password
+ * @param pw Pointer to buffer containing to which password
* copied
- *
+ *
* @param pwlen The size of the password buffer in bytes
- *
+ *
*/
typedef void (*smbc_get_auth_data_with_context_fn)(SMBCCTX *c,
- const char *srv,
+ const char *srv,
const char *shr,
- char *wg, int wglen,
+ char *wg, int wglen,
char *un, int unlen,
char *pw, int pwlen);
*
* @param i pointer to print job information structure
*
- */
+ */
typedef void (*smbc_list_print_job_fn)(struct print_job_info *i);
-
+
/**@ingroup callback
* Check if a server is still good
*
* @return 0 when connection is good. 1 on error.
*
- */
+ */
typedef int (*smbc_check_server_fn)(SMBCCTX * c, SMBCSRV *srv);
/**@ingroup callback
*
* @return 0 on success. 1 on failure.
*
- */
+ */
typedef int (*smbc_remove_unused_server_fn)(SMBCCTX * c, SMBCSRV *srv);
*
* @param srv pointer to server to add
*
- * @param server server name
+ * @param server server name
*
* @param share share name
*
*
* @return 0 on success. 1 on failure.
*
- */
-typedef int (*smbc_add_cached_srv_fn) (SMBCCTX * c, SMBCSRV *srv,
+ */
+typedef int (*smbc_add_cached_srv_fn) (SMBCCTX * c, SMBCSRV *srv,
const char * server, const char * share,
const char * workgroup, const char * username);
*
* @return pointer to SMBCSRV on success. NULL on failure.
*
- */
+ */
typedef SMBCSRV * (*smbc_get_cached_srv_fn) (SMBCCTX * c, const char * server,
const char * share, const char * workgroup,
const char * username);
/**@ingroup callback
- * Check if a server is still good
+ * Remove a cached server
*
* @param c pointer to smb context
*
*
* @return 0 when found and removed. 1 on failure.
*
- */
+ */
typedef int (*smbc_remove_cached_srv_fn)(SMBCCTX * c, SMBCSRV *srv);
*
* @return 0 when found and removed. 1 on failure.
*
- */
+ */
typedef int (*smbc_purge_cached_fn) (SMBCCTX * c);
void
smbc_setDebug(SMBCCTX *c, int debug);
+/**
+ * set log callback function to capture logs from libsmbclient, this
+ * is applied at global level
+ */
+void
+smbc_setLogCallback(SMBCCTX *c, void *private_ptr,
+ smbc_debug_callback_fn fn);
+
+/** set configuration file, this is applied at global level */
+int
+smbc_setConfiguration(SMBCCTX *c, const char *file);
+
/** Get the netbios name used for making connections */
-char *
+const char *
smbc_getNetbiosName(SMBCCTX *c);
/** Set the netbios name used for making connections */
void
-smbc_setNetbiosName(SMBCCTX *c, char * netbios_name);
+smbc_setNetbiosName(SMBCCTX *c, const char *netbios_name);
/** Get the workgroup used for making connections */
-char *
+const char *
smbc_getWorkgroup(SMBCCTX *c);
/** Set the workgroup used for making connections */
-void smbc_setWorkgroup(SMBCCTX *c, char * workgroup);
+void smbc_setWorkgroup(SMBCCTX *c, const char *workgroup);
/** Get the username used for making connections */
-char *
+const char *
smbc_getUser(SMBCCTX *c);
/** Set the username used for making connections */
void
-smbc_setUser(SMBCCTX *c, char * user);
+smbc_setUser(SMBCCTX *c, const char *user);
/**
* Get the timeout used for waiting on connections and response data
smbc_setTimeout(SMBCCTX *c, int timeout);
+/**
+ * Get the TCP port used to connect (0 means default).
+ */
+uint16_t
+smbc_getPort(SMBCCTX *c);
+
+/**
+ * Set the TCP port used to connect (0 means default).
+ */
+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 *
void
smbc_setOptionNoAutoAnonymousLogin(SMBCCTX *c, smbc_bool b);
+/** Get whether to enable use of the winbind ccache */
+smbc_bool
+smbc_getOptionUseCCache(SMBCCTX *c);
+
+/** Set whether to enable use of the winbind ccache */
+void
+smbc_setOptionUseCCache(SMBCCTX *c, smbc_bool b);
+
+/** Get indication that the password supplied is the NT hash */
+smbc_bool
+smbc_getOptionUseNTHash(SMBCCTX *c);
+
+/** Set indication that the password supplied is the NT hash */
+void
+smbc_setOptionUseNTHash(SMBCCTX *c, smbc_bool b);
+/**
+ * @brief Set the 'client min protocol' and the 'client max protocol'.
+ *
+ * IMPORTANT: This overrides the values 'client min protocol' and 'client max
+ * protocol' set in the smb.conf file!
+ *
+ * @param[in] c The smbc context to use.
+ *
+ * @param[in] min_proto The minimal protocol to use or NULL for leaving it
+ * untouched.
+ *
+ * @param[in] max_proto The maximum protocol to use or NULL for leaving it
+ * untouched.
+ *
+ * @returns true for success, false otherwise
+ */
+smbc_bool
+smbc_setOptionProtocols(SMBCCTX *c, const char *min_proto, const char *max_proto);
/*************************************
* Getters and setters for FUNCTIONS *
smbc_write_fn smbc_getFunctionWrite(SMBCCTX *c);
void smbc_setFunctionWrite(SMBCCTX *c, smbc_write_fn fn);
+typedef off_t (*smbc_splice_fn)(SMBCCTX *c,
+ SMBCFILE *srcfile,
+ SMBCFILE *dstfile,
+ off_t count,
+ int (*splice_cb)(off_t n, void *priv),
+ void *priv);
+smbc_splice_fn smbc_getFunctionSplice(SMBCCTX *c);
+void smbc_setFunctionSplice(SMBCCTX *c, smbc_splice_fn fn);
+
typedef int (*smbc_unlink_fn)(SMBCCTX *c,
const char *fname);
smbc_unlink_fn smbc_getFunctionUnlink(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 const struct libsmb_file_info * (*smbc_readdirplus2_fn)(SMBCCTX *c,
+ SMBCFILE *dir,
+ struct stat *st);
+smbc_readdirplus2_fn smbc_getFunctionReaddirPlus2(SMBCCTX *c);
+void smbc_setFunctionReaddirPlus2(SMBCCTX *c, smbc_readdirplus2_fn fn);
+
typedef int (*smbc_getdents_fn)(SMBCCTX *c,
SMBCFILE *dir,
struct smbc_dirent *dirp,
smbc_fstatdir_fn smbc_getFunctionFstatdir(SMBCCTX *c);
void smbc_setFunctionFstatdir(SMBCCTX *c, smbc_fstatdir_fn fn);
+#define SMBC_NOTIFY_ACTION_ADDED 1
+#define SMBC_NOTIFY_ACTION_REMOVED 2
+#define SMBC_NOTIFY_ACTION_MODIFIED 3
+#define SMBC_NOTIFY_ACTION_OLD_NAME 4
+#define SMBC_NOTIFY_ACTION_NEW_NAME 5
+#define SMBC_NOTIFY_ACTION_ADDED_STREAM 6
+#define SMBC_NOTIFY_ACTION_REMOVED_STREAM 7
+#define SMBC_NOTIFY_ACTION_MODIFIED_STREAM 8
+
+struct smbc_notify_callback_action {
+ uint32_t action;
+ const char *filename;
+};
+
+typedef int (*smbc_notify_callback_fn)(
+ const struct smbc_notify_callback_action *actions,
+ size_t num_actions, void *private_data);
+
+typedef int (*smbc_notify_fn)(SMBCCTX *c, SMBCFILE *dir, smbc_bool recursive,
+ uint32_t completion_filter,
+ unsigned callback_timeout_ms,
+ smbc_notify_callback_fn cb, void *private_data);
+smbc_notify_fn smbc_getFunctionNotify(SMBCCTX *c);
+void smbc_setFunctionNotify(SMBCCTX *c, smbc_notify_fn fn);
/*****************************************************************
* @param shutdown_ctx If 1, all connections and files will be closed even if they are busy.
*
*
- * @return Returns 0 on succes. Returns 1 on failure with errno set:
- * - EBUSY Server connections are still used, Files are open or cache
+ * @return Returns 0 on success. Returns 1 on failure with errno set:
+ * - EBUSY Server connections are still used, Files are open or cache
* could not be purged
* - EBADF context == NULL
*
* is perfectly safe, but it might leak memory on
* smbc_context_init() failure. Avoid this.
* You'll have to call smbc_free_context() yourself
- * on failure.
+ * on failure.
*/
SMBCCTX * smbc_init_context(SMBCCTX * context);
/**@ingroup misc
* Initialize the samba client library.
*
- * Must be called before using any of the smbclient API function
- *
- * @param fn The function that will be called to obtaion
- * authentication credentials.
- *
- * @param debug Allows caller to set the debug level. Can be
- * changed in smb.conf file. Allows caller to set
- * debugging if no smb.conf.
- *
- * @return 0 on success, < 0 on error with errno set:
- * - ENOMEM Out of memory
- * - ENOENT The smb.conf file would not load
- *
+ * @deprecated use smbc_init_context()
+ * @see smbc_init_context()
*/
-
+DEPRECATED_SMBC_INTERFACE
int smbc_init(smbc_get_auth_data_fn fn, int debug);
/**@ingroup misc
/**@ingroup file
* Open a file on an SMB server.
*
- * @param furl The smb url of the file to be opened.
+ * @param furl The smb url of the file to be opened.
*
- * @param flags Is one of O_RDONLY, O_WRONLY or O_RDWR which
+ * @param flags Is one of O_RDONLY, O_WRONLY or O_RDWR which
* request opening the file read-only,write-only
* or read/write. flags may also be bitwise-or'd with
- * one or more of the following:
- * O_CREAT - If the file does not exist it will be
+ * one or more of the following:
+ * O_CREAT - If the file does not exist it will be
* created.
- * O_EXCL - When used with O_CREAT, if the file
- * already exists it is an error and the open will
- * fail.
+ * O_EXCL - When used with O_CREAT, if the file
+ * already exists it is an error and the open will
+ * fail.
* O_TRUNC - If the file already exists it will be
* truncated.
- * O_APPEND The file is opened in append mode
+ * O_APPEND The file is opened in append mode
*
- * @param mode mode specifies the permissions to use if a new
- * file is created. It is modified by the
+ * @param mode mode specifies the permissions to use if a new
+ * file is created. It is modified by the
* process's umask in the usual way: the permissions
- * of the created file are (mode & ~umask)
+ * of the created file are (mode & ~umask)
*
* Not currently use, but there for future use.
* We will map this to SYSTEM, HIDDEN, etc bits
*
* @return Valid file handle, < 0 on error with errno set:
* - ENOMEM Out of memory
- * - EINVAL if an invalid parameter passed, like no
+ * - EINVAL if an invalid parameter passed, like no
* file, or smbc_init not called.
- * - EEXIST pathname already exists and O_CREAT and
+ * - EEXIST pathname already exists and O_CREAT and
* O_EXCL were used.
- * - EISDIR pathname refers to a directory and
+ * - EISDIR pathname refers to a directory and
* the access requested involved writing.
- * - EACCES The requested access to the file is not
- * allowed
+ * - EACCES The requested access to the file is not
+ * allowed
* - ENODEV The requested share does not exist
* - ENOTDIR A file on the path is not a directory
- * - ENOENT A directory component in pathname does
+ * - ENOENT A directory component in pathname does
* not exist.
*
* @see smbc_creat()
* a new connection to the server specified in the URL.
* If the credentials supplied in the URL, or via the
* auth_fn in the smbc_init call, fail, this call will
- * try again with an empty username and password. This
+ * try again with an empty username and password. This
* often gets mapped to the guest account on some machines.
*/
/**@ingroup file
* Create a file on an SMB server.
*
- * Same as calling smbc_open() with flags = O_CREAT|O_WRONLY|O_TRUNC
- *
+ * Same as calling smbc_open() with flags = O_CREAT|O_WRONLY|O_TRUNC
+ *
* @param furl The smb url of the file to be created
- *
- * @param mode mode specifies the permissions to use if a new
- * file is created. It is modified by the
+ *
+ * @param mode mode specifies the permissions to use if a new
+ * file is created. It is modified by the
* process's umask in the usual way: the permissions
* of the created file are (mode & ~umask)
*
- * NOTE, the above is not true. We are dealing with
+ * NOTE, the above is not true. We are dealing with
* an SMB server, which has no concept of a umask!
- *
+ *
* @return Valid file handle, < 0 on error with errno set:
* - ENOMEM Out of memory
- * - EINVAL if an invalid parameter passed, like no
+ * - EINVAL if an invalid parameter passed, like no
* file, or smbc_init not called.
* - EEXIST pathname already exists and O_CREAT and
* O_EXCL were used.
* - EISDIR pathname refers to a directory and
* the access requested involved writing.
* - EACCES The requested access to the file is not
- * allowed
- * - ENOENT A directory component in pathname does
+ * allowed
+ * - ENOENT A directory component in pathname does
* not exist.
* - ENODEV The requested share does not exist.
* @see smbc_open()
*
* @param fd Open file handle from smbc_open() or smbc_creat()
*
- * @param buf Pointer to buffer to recieve read data
+ * @param buf Pointer to buffer to receive read data
*
* @param bufsize Size of buf in bytes
*
- * @return Number of bytes read, < 0 on error with errno set:
+ * @return Number of bytes read;
+ * 0 upon EOF;
+ * < 0 on error, with errno set:
* - EISDIR fd refers to a directory
- * - EBADF fd is not a valid file descriptor or
- * is not open for reading.
- * - EINVAL fd is attached to an object which is
- * unsuitable for reading, or no buffer passed or
- * smbc_init not called.
+ * - EBADF fd is not a valid file descriptor or
+ * is not open for reading.
+ * - EINVAL fd is attached to an object which is
+ * unsuitable for reading, or no buffer passed or
+ * smbc_init not called.
*
* @see smbc_open(), smbc_write()
*
*
* @param fd Open file handle from smbc_open() or smbc_creat()
*
- * @param buf Pointer to buffer to recieve read data
+ * @param buf Pointer to buffer to receive read data
*
* @param bufsize Size of buf in bytes
*
* @return Number of bytes written, < 0 on error with errno set:
* - EISDIR fd refers to a directory.
- * - EBADF fd is not a valid file descriptor or
+ * - EBADF fd is not a valid file descriptor or
* is not open for reading.
- * - EINVAL fd is attached to an object which is
+ * - EINVAL fd is attached to an object which is
* unsuitable for reading, or no buffer passed or
* smbc_init not called.
*
* Seek to a specific location in a file.
*
* @param fd Open file handle from smbc_open() or smbc_creat()
- *
+ *
* @param offset Offset in bytes from whence
- *
+ *
* @param whence A location in the file:
* - SEEK_SET The offset is set to offset bytes from
* the beginning of the file
- * - SEEK_CUR The offset is set to current location
+ * - SEEK_CUR The offset is set to current location
* plus offset bytes.
- * - SEEK_END The offset is set to the size of the
+ * - SEEK_END The offset is set to the size of the
* file plus offset bytes.
*
- * @return Upon successful completion, lseek returns the
- * resulting offset location as measured in bytes
+ * @return Upon successful completion, lseek returns the
+ * resulting offset location as measured in bytes
* from the beginning of the file. Otherwise, a value
- * of (off_t)-1 is returned and errno is set to
+ * of (off_t)-1 is returned and errno is set to
* indicate the error:
* - EBADF Fildes is not an open file descriptor.
* - EINVAL Whence is not a proper value or smbc_init
* not called.
*
* @todo Are all the whence values really supported?
- *
+ *
* @todo Are errno values complete and correct?
*/
off_t smbc_lseek(int fd, off_t offset, int whence);
* @param furl The smb url of the file to delete
*
* @return 0 on success, < 0 on error with errno set:
- * - EACCES or EPERM Write access to the directory
- * containing pathname is not allowed or one
+ * - EACCES or EPERM Write access to the directory
+ * containing pathname is not allowed or one
* of the directories in pathname did not allow
* search (execute) permission
* - ENOENT A directory component in pathname does
/**@ingroup directory
* Rename or move a file or directory.
- *
- * @param ourl The original smb url (source url) of file or
+ *
+ * @param ourl The original smb url (source url) of file or
* directory to be moved
- *
+ *
* @param nurl The new smb url (destination url) of the file
* or directory after the move. Currently nurl must
* be on the same share as ourl.
* @return 0 on success, < 0 on error with errno set:
* - EISDIR nurl is an existing directory, but ourl is
* not a directory.
- * - EEXIST nurl is a non-empty directory,
+ * - EEXIST nurl is a non-empty directory,
* i.e., contains entries other than "." and ".."
- * - EINVAL The new url contained a path prefix
+ * - EINVAL The new url contained a path prefix
* of the old, or, more generally, an attempt was
* made to make a directory a subdirectory of itself
* or smbc_init not called.
- * - ENOTDIR A component used as a directory in ourl
- * or nurl path is not, in fact, a directory. Or,
+ * - ENOTDIR A component used as a directory in ourl
+ * or nurl path is not, in fact, a directory. Or,
* ourl is a directory, and newpath exists but is not
* a directory.
- * - EACCES or EPERM Write access to the directory
- * containing ourl or nurl is not allowed for the
- * process's effective uid, or one of the
+ * - EACCES or EPERM Write access to the directory
+ * containing ourl or nurl is not allowed for the
+ * process's effective uid, or one of the
* directories in ourl or nurl did not allow search
* (execute) permission, or ourl was a directory
* and did not allow write permission.
- * - ENOENT A directory component in ourl or nurl
+ * - ENOENT A directory component in ourl or nurl
* does not exist.
* - EXDEV Rename across shares not supported.
* - ENOMEM Insufficient kernel memory was available.
* - EINVAL A NULL file/URL was passed, or the URL would
* not parse, or was of incorrect form or smbc_init not
* called.
- * - ENOENT durl does not exist, or name is an
- * - ENOMEM Insufficient memory to complete the
- * operation.
+ * - ENOENT durl does not exist, or name is an
+ * - ENOMEM Insufficient memory to complete the
+ * operation.
* - ENOTDIR name is not a directory.
* - EPERM the workgroup could not be found.
* - ENODEV the workgroup or server could not be found.
/**@ingroup directory
* Get multiple directory entries.
*
- * smbc_getdents() reads as many dirent structures from the an open
+ * smbc_getdents() reads as many dirent structures from the an open
* directory handle into a specified memory area as will fit.
*
* @param dh Valid directory as returned by smbc_opendir()
*
* @param dirp pointer to buffer that will receive the directory
* entries.
- *
+ *
* @param count The size of the dirp buffer in bytes
*
* @returns If any dirents returned, return will indicate the
*/
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
+ * Works similar as smbc_readdirplus() as well as fills up stat structure if
+ * provided.
+ *
+ * @param dh Valid directory as returned by smbc_opendir()
+ *
+ * @param stat Pointer to stat structure which will receive the
+ * information. If this pointer is null the call
+ * is identical to smbc_readdirplus.
+ *
+ * @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(), smbc_readdirplus2()
+ */
+const struct libsmb_file_info *smbc_readdirplus2(unsigned int dh,
+ struct stat *st);
/**@ingroup directory
* Get the current directory offset.
*
* @return The current location in the directory stream or -1
* if an error occur. The current location is not
- * an offset. Becuase of the implementation, it is a
+ * an offset. Because of the implementation, it is a
* handle that allows the library to find the entry
* later.
* - EBADF dh is not a valid directory handle
* smbc_telldir(). (rewind by smbc_lseekdir(fd, NULL))
*
* @param fd Valid directory as returned by smbc_opendir()
- *
+ *
* @param offset The offset (as returned by smbc_telldir). Can be
* NULL, in which case we will rewind
*
* @see smbc_telldir()
*
*
- * @todo In what does the reture and errno values mean?
+ * @todo In what does the return and errno values mean?
*/
int smbc_lseekdir(int fd, off_t offset);
* @param durl The url of the directory to create
*
* @param mode Specifies the permissions to use. It is modified
- * by the process's umask in the usual way: the
+ * by the process's umask in the usual way: the
* permissions of the created file are (mode & ~umask).
- *
+ *
* @return 0 on success, < 0 on error with errno set:
* - EEXIST directory url already exists
* - EACCES The parent directory does not allow write
/**@ingroup directory
* Remove a directory.
- *
+ *
* @param durl The smb url of the directory to remove
*
* @return 0 on success, < 0 on error with errno set:
* - ENOTEMPTY directory contains entries.
* - ENOMEM Insufficient kernel memory was available.
*
- * @see smbc_mkdir(), smbc_unlink()
+ * @see smbc_mkdir(), smbc_unlink()
*
* @todo Are errno values complete and correct?
*/
int smbc_rmdir(const char *durl);
+/**@ingroup directory
+ * Request directory notifications
+ *
+ * @param dh Valid directory as returned by smbc_opendir()
+ *
+ * @param recursive Are changes in subdirectories wanted?
+ *
+ * @param completion_filter Bitwise-or of the SMBC_NOTIFY_CHANGE_*
+ * events that are interesting
+ *
+ * @param callback_timeout_ms If set to non-zero, interval in milliseconds
+ * that "cb" will be called with 0 actions.
+ * This gives "cb" the chance to cancel the
+ * smbc_notify call.
+ *
+ * @param cb Callback functions taking events. If "cb"
+ * returns nonzero, smbc_notify will return.
+ *
+ * @param private_data Pointer given to "cb"
+ *
+ * @return 0 on success, -1 on error with errno set
+ *
+ * @see smbc_opendir(), smbc_closedir()
+ */
+
+#define SMBC_NOTIFY_CHANGE_FILE_NAME 0x001
+#define SMBC_NOTIFY_CHANGE_DIR_NAME 0x002
+#define SMBC_NOTIFY_CHANGE_ATTRIBUTES 0x004
+#define SMBC_NOTIFY_CHANGE_SIZE 0x008
+#define SMBC_NOTIFY_CHANGE_LAST_WRITE 0x010
+#define SMBC_NOTIFY_CHANGE_LAST_ACCESS 0x020
+#define SMBC_NOTIFY_CHANGE_CREATION 0x040
+#define SMBC_NOTIFY_CHANGE_EA 0x080
+#define SMBC_NOTIFY_CHANGE_SECURITY 0x100
+#define SMBC_NOTIFY_CHANGE_STREAM_NAME 0x200
+#define SMBC_NOTIFY_CHANGE_STREAM_SIZE 0x400
+#define SMBC_NOTIFY_CHANGE_STREAM_WRITE 0x800
+
+int smbc_notify(int dh, smbc_bool recursive, uint32_t completion_filter,
+ unsigned callback_timeout_ms,
+ smbc_notify_callback_fn cb, void *private_data);
/**@ingroup attribute
* Get information about a file or directory.
*
* @param url The smb url to get information for
*
- * @param st pointer to a buffer that will be filled with
+ * @param st pointer to a buffer that will be filled with
* standard Unix struct stat information.
*
* @return 0 on success, < 0 on error with errno set:
/**@ingroup attribute
* Get file information via an file descriptor.
- *
+ *
* @param fd Open file handle from smbc_open() or smbc_creat()
*
- * @param st pointer to a buffer that will be filled with
+ * @param st pointer to a buffer that will be filled with
* standard Unix struct stat information.
- *
- * @return EBADF filedes is bad.
+ *
+ * @return 0 on success, < 0 on error with errno set:
+ * - EBADF filedes is bad.
* - EACCES Permission denied.
* - EBADF fd is not a valid file descriptor
* - EINVAL Problems occurred in the underlying routines
/**@ingroup attribute
* Get file system information for a specified path.
- *
+ *
* @param url The smb url to get information for
*
- * @param st pointer to a buffer that will be filled with
+ * @param st pointer to a buffer that will be filled with
* standard Unix struct statvfs information.
- *
- * @return EBADF filedes is bad.
+ *
+ * @return 0 on success, < 0 on error with errno set:
+ * - EBADF filedes is bad.
* - EACCES Permission denied.
* - EBADF fd is not a valid file descriptor
* - EINVAL Problems occurred in the underlying routines
/**@ingroup attribute
* Get file system information via an file descriptor.
- *
+ *
* @param fd Open file handle from smbc_open(), smbc_creat(),
* or smbc_opendir()
*
- * @param st pointer to a buffer that will be filled with
+ * @param st pointer to a buffer that will be filled with
* standard Unix struct statvfs information.
- *
- * @return EBADF filedes is bad.
+ *
+ * @return 0 on success, < 0 on error with errno set:
+ * - EBADF filedes is bad.
* - EACCES Permission denied.
* - EBADF fd is not a valid file descriptor
* - EINVAL Problems occurred in the underlying routines
/**@ingroup attribute
* Truncate a file given a file descriptor
- *
+ *
* @param fd Open file handle from smbc_open() or smbc_creat()
*
* @param size size to truncate the file to
- *
- * @return EBADF filedes is bad.
+ *
+ * @return 0 on success, < 0 on error with errno set:
+ * - EBADF filedes is bad.
* - EACCES Permission denied.
* - EBADF fd is not a valid file descriptor
* - EINVAL Problems occurred in the underlying routines
*
* @param url The smb url of the file or directory to change
* permissions of
- *
+ *
* @param mode The permissions to set:
- * - Put good explaination of permissions here!
+ * - Put good explanation of permissions here!
*
* @return 0 on success, < 0 on error with errno set:
* - EPERM The effective UID does not match the owner
* - ENOMEM Insufficient was available.
* - ENOENT file or directory does not exist
*
- * @todo Actually implement this fuction?
+ * @todo Actually implement this function?
*
* @todo Are errno values complete and correct?
*/
*
* @param url The smb url of the file or directory to set extended
* attributes for.
- *
+ *
* @param name The name of an attribute to be changed. Names are of
* one of the following forms:
*
*
* @param url The smb url of the file or directory to set extended
* attributes for.
- *
+ *
* @param name The name of an attribute to be changed. Names are of
* one of the following forms:
*
* @param fd A file descriptor associated with an open file (as
* previously returned by smbc_open(), to get extended
* attributes for.
- *
+ *
* @param name The name of an attribute to be changed. Names are of
* one of the following forms:
*
*
* @param url The smb url of the file or directory to get extended
* attributes for.
- *
+ *
* @param name The name of an attribute to be retrieved. Names are of
* one of the following forms:
*
* may also be zero, in which case the size of the buffer
* required to hold the attribute value will be returned,
* but nothing will be placed into the value buffer.
- *
+ *
* @return 0 on success, < 0 on error with errno set:
* - EINVAL The client library is not properly initialized
* or one of the parameters is not of a correct
*
* @param url The smb url of the file or directory to get extended
* attributes for.
- *
+ *
* @param name The name of an attribute to be retrieved. Names are of
* one of the following forms:
*
* may also be zero, in which case the size of the buffer
* required to hold the attribute value will be returned,
* but nothing will be placed into the value buffer.
- *
- * @return 0 on success, < 0 on error with errno set:
+ *
+ * @return size on success, < 0 on error with errno set:
* - EINVAL The client library is not properly initialized
* or one of the parameters is not of a correct
* form
* @param fd A file descriptor associated with an open file (as
* previously returned by smbc_open(), to get extended
* attributes for.
- *
+ *
* @param name The name of an attribute to be retrieved. Names are of
* one of the following forms:
*
* may also be zero, in which case the size of the buffer
* required to hold the attribute value will be returned,
* but nothing will be placed into the value buffer.
- *
+ *
* @return 0 on success, < 0 on error with errno set:
* - EINVAL The client library is not properly initialized
* or one of the parameters is not of a correct
*
* @param url The smb url of the file or directory to remove the extended
* attributes for.
- *
+ *
* @param name The name of an attribute to be removed. Names are of
* one of the following forms:
*
*
* @param url The smb url of the file or directory to remove the extended
* attributes for.
- *
+ *
* @param name The name of an attribute to be removed. Names are of
* one of the following forms:
*
* @param fd A file descriptor associated with an open file (as
* previously returned by smbc_open(), to get extended
* attributes for.
- *
+ *
* @param name The name of an attribute to be removed. Names are of
* one of the following forms:
*
* may also be zero, in which case the size of the buffer
* required to hold all of the attribute names will be
* returned, but nothing will be placed into the list buffer.
- *
+ *
* @return 0 on success, < 0 on error with errno set:
* - EINVAL The client library is not properly initialized
* - ENOMEM No memory was available for internal needs
* may also be zero, in which case the size of the buffer
* required to hold all of the attribute names will be
* returned, but nothing will be placed into the list buffer.
- *
+ *
* @return 0 on success, < 0 on error with errno set:
* - EINVAL The client library is not properly initialized
* - ENOMEM No memory was available for internal needs
* extended attributes
*
* @note This function always returns all attribute names supported
- * by NT file systems, regardless of wether the referenced
+ * by NT file systems, regardless of whether the referenced
* file system supports extended attributes (e.g. a Windows
* 2000 machine supports extended attributes if NTFS is used,
* but not if FAT is used, and Windows 98 doesn't support
* @param fd A file descriptor associated with an open file (as
* previously returned by smbc_open(), to get extended
* attributes for.
- *
+ *
* @param list A pointer to a buffer in which the list of attributes for
* the specified file or directory will be placed (unless
* size is zero).
* may also be zero, in which case the size of the buffer
* required to hold all of the attribute names will be
* returned, but nothing will be placed into the list buffer.
- *
+ *
* @return 0 on success, < 0 on error with errno set:
* - EINVAL The client library is not properly initialized
* - ENOMEM No memory was available for internal needs
* extended attributes
*
* @note This function always returns all attribute names supported
- * by NT file systems, regardless of wether the referenced
+ * by NT file systems, regardless of whether the referenced
* file system supports extended attributes (e.g. a Windows
* 2000 machine supports extended attributes if NTFS is used,
* but not if FAT is used, and Windows 98 doesn't support
/**@ingroup print
* Print a file given the name in fname. It would be a URL ...
- *
+ *
* @param fname The URL of a file on a remote SMB server that the
* caller wants printed
*
* @param printq The URL of the print share to print the file to.
*
- * @return 0 on success, < 0 on error with errno set:
+ * @return 0 on success, < 0 on error with errno set:
*
* - EINVAL fname or printq was NULL or smbc_init not
* not called.
* and errors returned by smbc_open
*
- */
+ */
int smbc_print_file(const char *fname, const char *printq);
/**@ingroup print
* @param fname The URL of the print share to print to?
*
* @returns A file handle for the print file if successful.
- * Returns -1 if an error ocurred and errno has the values
+ * Returns -1 if an error occurred and errno has the values
* - EINVAL fname was NULL or smbc_init not called.
* - all errors returned by smbc_open
*
int smbc_open_print_job(const char *fname);
/**@ingroup print
- * List the print jobs on a print share, for the moment, pass a callback
+ * List the print jobs on a print share, for the moment, pass a callback
*
* @param purl The url of the print share to list the jobs of
- *
+ *
* @param fn Callback function the receives printjob info
- *
- * @return 0 on success, < 0 on error with errno set:
+ *
+ * @return 0 on success, < 0 on error with errno set:
* - EINVAL fname was NULL or smbc_init not called
* - EACCES ???
*/
int smbc_list_print_jobs(const char *purl, smbc_list_print_job_fn fn);
/**@ingroup print
- * Delete a print job
+ * Delete a print job
*
* @param purl Url of the print share
*
* @param id The id of the job to delete
*
- * @return 0 on success, < 0 on error with errno set:
+ * @return 0 on success, < 0 on error with errno set:
* - EINVAL fname was NULL or smbc_init not called
*
* @todo what errno values are possible here?
* @param srv pointer to server to remove
*
* @return On success, 0 is returned. 1 is returned if the server could not
- * be removed. Also useable outside libsmbclient.
+ * be removed. Also usable outside libsmbclient.
*/
int smbc_remove_unused_server(SMBCCTX * context, SMBCSRV * srv);
* @param dest A pointer to a buffer in which the resulting decoded
* string should be placed. This may be a pointer to the
* same buffer as src_segment.
- *
+ *
* @param src A pointer to the buffer containing the URL to be decoded.
* Any %xx sequences herein are converted to their single
* character equivalent. Each 'x' must be a valid hexadecimal
*
* @param max_dest_len
* The size of the buffer pointed to by dest_segment.
- *
+ *
* @return The number of % sequences which could not be converted
* due to lack of two following hexadecimal digits.
*/
* @param dest A pointer to a buffer in which the resulting encoded
* string should be placed. Unlike smbc_urldecode(), this
* must be a buffer unique from src.
- *
+ *
* @param src A pointer to the buffer containing the string to be encoded.
* Any character not specifically allowed in a URL is converted
* into its hexadecimal value and encoded as %xx.
*
* @param max_dest_len
* The size of the buffer pointed to by dest_segment.
- *
+ *
* @returns The remaining buffer length.
*/
#ifdef __cplusplus
#endif
/**@ingroup misc
+ * @deprecated This interface has been deprecated use
+ * smbc_set_credentials_with_fallback() instead.
+ *
+ * @see smbc_set_credentials_with_fallback()
+ */
+DEPRECATED_SMBC_INTERFACE
+void
+smbc_set_credentials(const char *workgroup,
+ const char *user,
+ const char *password,
+ smbc_bool use_kerberos,
+ const char *signing_state);
+
+/**@ingroup misc
+ *
* Set the users credentials globally so they can be used for DFS
* referrals. Probably best to use this function in the smbc_get_auth_data_fn
* callback.
*
+ * @param ctx The smb context.
+ *
* @param workgroup Workgroup of the user.
*
* @param user Username of user.
*
* @param password Password of user.
+ */
+void
+smbc_set_credentials_with_fallback(SMBCCTX *ctx,
+ const char *workgroup,
+ const char *user,
+ const char *password);
+
+
+/**
+ * @ingroup threads
*
- * @param use_kerberos Whether to use Kerberos
+ * Initialize for threads using the Posix Threads (pthread)
+ * implementation. This is a built-in implementation, avoiding the need to
+ * implement the component functions of the thread interface. If this function
+ * is used, it is not necessary to call smbc_thread_impl().
*
- * @param signing_state One of these strings (all equivalents on same line):
- * "off", "no", "false"
- * "on", "yes", "true", "auto"
- * "force", "required", "forced"
+ * @return {void}
*/
-
void
-smbc_set_credentials(char *workgroup,
- char *user,
- char *password,
- smbc_bool use_kerberos,
- char *signing_state);
+smbc_thread_posix(void);
-/*
- * Wrapper around smbc_set_credentials.
- * Used to set correct credentials that will
- * be used to connect to DFS target share
- * in libsmbclient
+/**
+ * @ingroup threads
+ *
+ * Initialize for an arbitrary thread implementation. The caller should
+ * provide, as parameters, pointers to functions to implement the requisite
+ * low-level thread functionality. A function must be provided for each
+ * parameter; none may be null.
+ *
+ * If the thread implementation is POSIX Threads (pthreads), then the much
+ * simpler smbc_thread_pthread() function may be used instead of this one.
+ *
+ * @param create_mutex
+ * Create a mutex. This function should expect three parameters: lockname,
+ * pplock, and location. It should create a unique mutex for each unique
+ * lockname it is provided, and return the mutex identifier in *pplock. The
+ * location parameter can be used for debugging, as it contains the
+ * compiler-provided __location__ of the call.
+ *
+ * @param destroy_mutex
+ * Destroy a mutex. This function should expect two parameters: plock and
+ * location. It should destroy the mutex associated with the identifier
+ * plock. The location parameter can be used for debugging, as it contains
+ * the compiler-provided __location__ of the call.
+ *
+ * @param lock_mutex
+ * Lock a mutex. This function should expect three parameters: plock,
+ * lock_type, and location. The mutex associated with identifier plock
+ * should be locked if lock_type is 1, and unlocked if lock_type is 2. The
+ * location parameter can be used for debugging, as it contains the
+ * compiler-provided __location__ of the call.
+ *
+ * @param create_tls
+ * Create thread local storage. This function should expect three
+ * parameters: keyname, ppkey, and location. It should allocate an
+ * implementation-specific amount of memory and assign the pointer to that
+ * allocated memory to *ppkey. The location parameter can be used for
+ * debugging, as it contains the compiler-provided __location__ of the
+ * call. This function should return 0 upon success, non-zero upon failure.
+ *
+ * @param destroy_tls
+ * Destroy thread local storage. This function should expect two parameters:
+ * ppkey and location. The ppkey parameter points to a variable containing a
+ * thread local storage key previously provided by the create_tls
+ * function. The location parameter can be used for debugging, as it
+ * contains the compiler-provided __location__ of the call.
+ *
+ * @param set_tls
+ * Set a thread local storage variable's value. This function should expect
+ * three parameters: pkey, pval, and location. The pkey parameter is a
+ * thread local storage key previously provided by the create_tls
+ * function. The (void *) pval parameter contains the value to be placed in
+ * the thread local storage variable identified by pkey. The location
+ * parameter can be used for debugging, as it contains the compiler-provided
+ * __location__ of the call. This function should return 0 upon success;
+ * non-zero otherwise.
+ *
+ * @param get_tls
+ * Retrieve a thread local storage variable's value. This function should
+ * expect two parameters: pkey and location. The pkey parameter is a thread
+ * local storage key previously provided by the create_tls function, and
+ * which has previously been used in a call to the set_tls function to
+ * initialize a thread local storage variable. The location parameter can be
+ * used for debugging, as it contains the compiler-provided __location__ of
+ * the call. This function should return the (void *) value stored in the
+ * variable identified by pkey.
+ *
+ * @return {void}
*/
-
void
-smbc_set_credentials_with_fallback(SMBCCTX *ctx,
- char *workgroup,
- char *user,
- char *password);
+smbc_thread_impl(
+ /* Mutex functions. */
+ int (*create_mutex)(const char *lockname,
+ void **pplock,
+ const char *location),
+ void (*destroy_mutex)(void *plock,
+ const char *location),
+ int (*lock_mutex)(void *plock,
+ int lock_type,
+ const char *location),
+
+ /* Thread local storage. */
+ int (*create_tls)(const char *keyname,
+ void **ppkey,
+ const char *location),
+ void (*destroy_tls)(void **ppkey,
+ const char *location),
+ int (*set_tls)(void *pkey,
+ const void *pval,
+ const char *location),
+ void *(*get_tls)(void *pkey,
+ const char *location)
+ );
+
+
/**
* @ingroup structure
- * Structure that contains a client context information
+ * Structure that contains a client context information
* This structure is known as SMBCCTX
*
* DO NOT DIRECTLY MANIPULATE THE CONTEXT STRUCTURE! The data in the context
* Use smbc_getDebug() and smbc_setDebug()
*/
int debug DEPRECATED_SMBC_INTERFACE;
-
+
/**
* netbios name used for making connections
*
*
* Use smbc_getFunction*() and smbc_setFunction*(), e.g.
* smbc_getFunctionOpen(), smbc_setFunctionUnlink(), etc.
- */
+ */
smbc_open_fn open DEPRECATED_SMBC_INTERFACE;
smbc_creat_fn creat DEPRECATED_SMBC_INTERFACE;
smbc_read_fn read DEPRECATED_SMBC_INTERFACE;
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_readdirplus2_fn readdirplus2 DEPRECATED_SMBC_INTERFACE;
smbc_getdents_fn getdents DEPRECATED_SMBC_INTERFACE;
smbc_mkdir_fn mkdir DEPRECATED_SMBC_INTERFACE;
smbc_rmdir_fn rmdir DEPRECATED_SMBC_INTERFACE;
* Use smbc_getFunctionAuthData(), smbc_setFunctionAuthData()
*/
smbc_get_auth_data_fn auth_fn DEPRECATED_SMBC_INTERFACE;
-
+
/**
* check if a server is still good
*
*/
/**
- * server cache addition
+ * server cache addition
*
* DEPRECATED:
* Use smbc_getFunctionAddCachedServer(),
smbc_add_cached_srv_fn add_cached_srv_fn DEPRECATED_SMBC_INTERFACE;
/**
- * server cache lookup
+ * server cache lookup
*
* DEPRECATED:
* Use smbc_getFunctionGetCachedServer(),
* smbc_setFunctionRemoveCachedServer()
*/
smbc_remove_cached_srv_fn remove_cached_srv_fn DEPRECATED_SMBC_INTERFACE;
-
+
/**
* server cache purging, try to remove all cached servers
* (disconnect)
/*
* Very old configuration options.
- *
+ *
* DEPRECATED:
* Use one of the following functions instead:
* smbc_setOptionUseKerberos()
* smbc_getOptionNoAutoAnonymousLogin()
*/
int flags DEPRECATED_SMBC_INTERFACE;
-
+
/**
* user options selections that apply to this session
*
int urlencode_readdir_entries DEPRECATED_SMBC_INTERFACE;
int one_share_per_server DEPRECATED_SMBC_INTERFACE;
} options DEPRECATED_SMBC_INTERFACE;
-
+
/** INTERNAL DATA
* do _NOT_ touch this from your program !
*/