}
static const char *skel_connectpath(struct vfs_handle_struct *handle,
- const char *filename)
+ const struct smb_filename *smb_fname)
{
errno = ENOSYS;
return NULL;
}
static const char *skel_connectpath(struct vfs_handle_struct *handle,
- const char *filename)
+ const struct smb_filename *smb_fname)
{
- return SMB_VFS_NEXT_CONNECTPATH(handle, filename);
+ return SMB_VFS_NEXT_CONNECTPATH(handle, smb_fname);
}
static NTSTATUS skel_brl_lock_windows(struct vfs_handle_struct *handle,
to struct smb_filename * */
/* Version 37 - Change realpath from char *
to struct smb_filename * */
+/* Version 37 - Change connectpath from char *
+ to struct smb_filename * */
#define SMB_VFS_INTERFACE_VERSION 37
char **found_name);
const char *(*connectpath_fn)(struct vfs_handle_struct *handle,
- const char *filename);
+ const struct smb_filename *smb_fname);
NTSTATUS (*brl_lock_windows_fn)(struct vfs_handle_struct *handle,
struct byte_range_lock *br_lck,
const char *path, const char *name,
TALLOC_CTX *mem_ctx, char **found_name);
const char *smb_vfs_call_connectpath(struct vfs_handle_struct *handle,
- const char *filename);
+ const struct smb_filename *smb_fname);
NTSTATUS smb_vfs_call_brl_lock_windows(struct vfs_handle_struct *handle,
struct byte_range_lock *br_lck,
struct lock_struct *plock,
#define SMB_VFS_NEXT_GET_REAL_FILENAME(handle, path, name, mem_ctx, found_name) \
smb_vfs_call_get_real_filename((handle)->next, (path), (name), (mem_ctx), (found_name))
-#define SMB_VFS_CONNECTPATH(conn, fname) \
- smb_vfs_call_connectpath((conn)->vfs_handles, (fname))
-#define SMB_VFS_NEXT_CONNECTPATH(conn, fname) \
- smb_vfs_call_connectpath((conn)->next, (fname))
+#define SMB_VFS_CONNECTPATH(conn, smb_fname) \
+ smb_vfs_call_connectpath((conn)->vfs_handles, (smb_fname))
+#define SMB_VFS_NEXT_CONNECTPATH(conn, smb_fname) \
+ smb_vfs_call_connectpath((conn)->next, (smb_fname))
#define SMB_VFS_BRL_LOCK_WINDOWS(conn, br_lck, plock, blocking_lock) \
smb_vfs_call_brl_lock_windows((conn)->vfs_handles, (br_lck), (plock), (blocking_lock))
}
static const char *cephwrap_connectpath(struct vfs_handle_struct *handle,
- const char *fname)
+ const struct smb_filename *smb_fname)
{
return handle->conn->connectpath;
}
}
static const char *vfswrap_connectpath(struct vfs_handle_struct *handle,
- const char *fname)
+ const struct smb_filename *smb_fname)
{
return handle->conn->connectpath;
}
}
static const char *smb_full_audit_connectpath(vfs_handle_struct *handle,
- const char *fname)
+ const struct smb_filename *smb_fname)
{
const char *result;
- result = SMB_VFS_NEXT_CONNECTPATH(handle, fname);
+ result = SMB_VFS_NEXT_CONNECTPATH(handle, smb_fname);
do_log(SMB_VFS_OP_CONNECTPATH, result != NULL, handle,
- "%s", fname);
+ "%s", smb_fname->base_name);
return result;
}
}
static const char *vfs_gluster_connectpath(struct vfs_handle_struct *handle,
- const char *filename)
+ const struct smb_filename *smb_fname)
{
return handle->conn->connectpath;
}
}
static const char *shadow_copy2_connectpath(struct vfs_handle_struct *handle,
- const char *fname)
+ const struct smb_filename *smb_fname_in)
{
time_t timestamp = 0;
char *stripped = NULL;
char *tmp = NULL;
+ const char *fname = smb_fname_in->base_name;
struct smb_filename smb_fname = {0};
struct smb_filename *result_fname = NULL;
char *result = NULL;
goto done;
}
if (timestamp == 0) {
- return SMB_VFS_NEXT_CONNECTPATH(handle, fname);
+ return SMB_VFS_NEXT_CONNECTPATH(handle, smb_fname_in);
}
tmp = shadow_copy2_do_convert(talloc_tos(), handle, stripped, timestamp,
}
static const char *smb_time_audit_connectpath(vfs_handle_struct *handle,
- const char *fname)
+ const struct smb_filename *smb_fname)
{
const char *result;
struct timespec ts1,ts2;
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_CONNECTPATH(handle, fname);
+ result = SMB_VFS_NEXT_CONNECTPATH(handle, smb_fname);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log_fname("connectpath", timediff, fname);
+ smb_time_audit_log_fname("connectpath", timediff,
+ smb_fname->base_name);
}
return result;
if (!lp_widelinks(SNUM(conn))) {
struct smb_filename *conn_rootdir_fname = NULL;
const char *conn_rootdir = SMB_VFS_CONNECTPATH(conn,
- smb_fname->base_name);
+ smb_fname);
int saved_errno = 0;
if (conn_rootdir == NULL) {
char *dir_name = NULL;
char *resolved_name = NULL;
const char *last_component = NULL;
- const char *fname = smb_fname->base_name;
struct smb_filename *resolved_fname = NULL;
struct smb_filename *saved_dir_fname = NULL;
struct smb_filename *smb_fname_cwd = NULL;
int ret;
DEBUG(3,("check_reduced_name_with_privilege [%s] [%s]\n",
- fname,
+ smb_fname->base_name,
conn->connectpath));
goto err;
}
- if (!parent_dirname(ctx, fname, &dir_name, &last_component)) {
+ if (!parent_dirname(ctx, smb_fname->base_name,
+ &dir_name, &last_component)) {
status = NT_STATUS_NO_MEMORY;
goto err;
}
/* Ensure we're below the connect path. */
- conn_rootdir = SMB_VFS_CONNECTPATH(conn, fname);
+ conn_rootdir = SMB_VFS_CONNECTPATH(conn, smb_fname);
if (conn_rootdir == NULL) {
DEBUG(2, ("check_reduced_name_with_privilege: Could not get "
"conn_rootdir\n"));
const char *conn_rootdir;
size_t rootdir_len;
- conn_rootdir = SMB_VFS_CONNECTPATH(conn, fname);
+ conn_rootdir = SMB_VFS_CONNECTPATH(conn, smb_fname);
if (conn_rootdir == NULL) {
DEBUG(2, ("check_reduced_name: Could not get "
"conn_rootdir\n"));
}
const char *smb_vfs_call_connectpath(struct vfs_handle_struct *handle,
- const char *filename)
+ const struct smb_filename *smb_fname)
{
VFS_FIND(connectpath);
- return handle->fns->connectpath_fn(handle, filename);
+ return handle->fns->connectpath_fn(handle, smb_fname);
}
bool smb_vfs_call_strict_lock(struct vfs_handle_struct *handle,