#include "msdfs.h"
-#ifdef WITH_PROFILE
#include "profile.h"
-#else
-#define START_PROFILE(x)
-#define END_PROFILE(x)
-#endif
#ifndef MAXCODEPAGELINES
#define MAXCODEPAGELINES 256
*/
+/*
+ * Reasons for cache flush.
+ */
+
+#define NUM_FLUSH_REASONS 8 /* Keep this in sync with the enum below. */
+enum flush_reason_enum { SEEK_FLUSH, READ_FLUSH, WRITE_FLUSH, READRAW_FLUSH,
+ OPLOCK_RELEASE_FLUSH, CLOSE_FLUSH, SYNC_FLUSH, SIZECHANGE_FLUSH };
+
/* this file defines the profile structure in the profile shared
memory area */
extern struct profile_struct *profile_p;
+extern struct timeval profile_starttime;
+extern struct timeval profile_endtime;
+extern BOOL do_profile_flag;
-#define INC_PROFILE_COUNT(x) if (profile_p) profile_p->x++
-#define DEC_PROFILE_COUNT(x) if (profile_p) profile_p->x--
-#define ADD_PROFILE_COUNT(x,y) if (profile_p) profile_p->x += (y)
+/* these are helper macros - do not call them directly in the code
+ * use the DO_PROFILE_* START_PROFILE and END_PROFILE ones
+ * below which test for the profile flage first
+ */
+#define INC_PROFILE_COUNT(x) profile_p->x++
+#define DEC_PROFILE_COUNT(x) profile_p->x--
+#define ADD_PROFILE_COUNT(x,y) profile_p->x += (y)
+#define PROFILE_TIME TvalDiff(&profile_starttime,&profile_endtime)
+#ifdef WITH_PROFILE
+#define DO_PROFILE_INC(x) \
+ if (do_profile_flag) { \
+ INC_PROFILE_COUNT(x); \
+ }
+#define DO_PROFILE_DEC(x) \
+ if (do_profile_flag) { \
+ DEC_PROFILE_COUNT(x); \
+ }
+#define DO_PROFILE_DEC_INC(x,y) \
+ if (do_profile_flag) { \
+ DEC_PROFILE_COUNT(x); \
+ INC_PROFILE_COUNT(y); \
+ }
+#define DO_PROFILE_ADD(x,n) \
+ if (do_profile_flag) { \
+ ADD_PROFILE_COUNT(x,n); \
+ }
#define START_PROFILE(x) \
- struct timeval starttime; \
- struct timeval endtime; \
- GetTimeOfDay(&starttime); \
- INC_PROFILE_COUNT(x##_count)
-
-#define END_PROFILE(y) \
- GetTimeOfDay(&endtime); \
- ADD_PROFILE_COUNT((y##_time),TvalDiff(&starttime,&endtime))
+ if (do_profile_flag) { \
+ GetTimeOfDay(&profile_starttime); \
+ INC_PROFILE_COUNT(x##_count); \
+ }
+#define START_PROFILE_BYTES(x,n) \
+ if (do_profile_flag) { \
+ GetTimeOfDay(&profile_starttime); \
+ INC_PROFILE_COUNT(x##_count); \
+ ADD_PROFILE_COUNT(x##_bytes,n); \
+ }
+#define END_PROFILE(x) \
+ if (do_profile_flag) { \
+ GetTimeOfDay(&profile_endtime); \
+ ADD_PROFILE_COUNT(x##_time,PROFILE_TIME); \
+ }
+#else
+#define DO_PROFILE_INC(x)
+#define DO_PROFILE_DEC(x)
+#define DO_PROFILE_DEC_INC(x,y)
+#define DO_PROFILE_ADD(x,n)
+#define START_PROFILE(x)
+#define START_PROFILE_BYTES(x,n)
+#define END_PROFILE(x)
+#endif
#endif
/*The following definitions come from smbd/statcache.c */
-void print_stat_cache_statistics(void);
void stat_cache_add( char *full_orig_name, char *orig_translated_path);
BOOL stat_cache_lookup(connection_struct *conn, char *name, char *dirpath,
char **start, SMB_STRUCT_STAT *pst);
/*The following definitions come from smbd/vfs-wrap.c */
int vfswrap_dummy_connect(connection_struct *conn, char *service, char *user);
-void vfswrap_dummy_disconnect(void);
+void vfswrap_dummy_disconnect(connection_struct *conn);
SMB_BIG_UINT vfswrap_disk_free(connection_struct *conn, char *path, BOOL small_query, SMB_BIG_UINT *bsize,
SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize);
DIR *vfswrap_opendir(connection_struct *conn, char *fname);
int vfswrap_utime(connection_struct *conn, char *path, struct utimbuf *times);
int vfswrap_ftruncate(files_struct *fsp, int fd, SMB_OFF_T offset);
BOOL vfswrap_lock(files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type);
+size_t vfswrap_fget_nt_acl(files_struct *fsp, int fd, SEC_DESC **ppdesc);
+size_t vfswrap_get_nt_acl(files_struct *fsp, char *name, SEC_DESC **ppdesc);
+BOOL vfswrap_fset_nt_acl(files_struct *fsp, int fd, uint32 security_info_sent, SEC_DESC *psd);
/*The following definitions come from smbd/vfs.c */
NT_USER_TOKEN *nt_user_token;
};
-/*
- * Reasons for cache flush.
- */
-
-#define NUM_FLUSH_REASONS 8 /* Keep this in sync with the enum below. */
-enum flush_reason_enum { SEEK_FLUSH, READ_FLUSH, WRITE_FLUSH, READRAW_FLUSH,
- OPLOCK_RELEASE_FLUSH, CLOSE_FLUSH, SYNC_FLUSH, SIZECHANGE_FLUSH };
/* Defines for the sent_oplock_break field above. */
#define NO_BREAK_SENT 0
#define EXCLUSIVE_BREAK_SENT 1
BOOL (*lock)(struct files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type);
size_t (*fget_nt_acl)(struct files_struct *fsp, int fd, struct security_descriptor_info **ppdesc);
- size_t (*get_nt_acl)(struct connection_struct *conn, char *name, struct security_descriptor_info **ppdesc);
+ size_t (*get_nt_acl)(struct files_struct *fsp, char *name, struct security_descriptor_info **ppdesc);
BOOL (*fset_nt_acl)(struct files_struct *fsp, int fd, uint32 security_info_sent, struct security_descriptor_info *psd);
- BOOL (*set_nt_acl)(struct connection_struct *conn, char *name, uint32 security_info_sent, struct security_descriptor_info *psd);
+ BOOL (*set_nt_acl)(struct files_struct *fsp, char *name, uint32 security_info_sent, struct security_descriptor_info *psd);
};
struct vfs_options {
}
}
}
- return ((GETAHI << 8) | GETALO);
}
/*******************************************************************
if (start1 >= start2 && start1 <= start2 + size2)
return True;
- if (start1 < start2 && start1 + size1 > start2);
+ if (start1 < start2 && start1 + size1 > start2)
return True;
return False;
#include "includes.h"
-#ifdef WITH_PROFILE
#include <sys/shm.h>
extern int DEBUGLEVEL;
struct profile_struct *profile_p;
+BOOL do_profile_flag = False;
+
+struct timeval profile_starttime;
+struct timeval profile_endtime;
+
/*******************************************************************
open the profiling shared memory area
******************************************************************/
DEBUG(3,("Initialised profile area\n"));
}
+ do_profile_flag = True; /* temp for now */
return True;
}
-#else
- /* to keep compilers happy about empty modules */
- void profile_dummy(void) {}
-#endif
DEBUG(5,("SPOOLSS Get Printer data)\n"));
- make_spoolss_q_getprinterdata(&q_o, hnd, valuename, in_size);
+ make_spoolss_q_getprinterdata(&q_o, hnd,(UNISTR2 *)valuename, in_size);
/* turn parameters into data stream */
if (spoolss_io_q_getprinterdata("", &q_o, &buf, 0) &&
{
continue;
}
- if (!reuse && !pwd_compare(&usr_creds->pwd, &c->cli->pwd))
+ if (!reuse && !pwd_compare((struct pwd_info *)&usr_creds->pwd, &c->cli->pwd))
{
DEBUG(100, ("password doesn't match\n"));
continue;
init_buffer(buffer, size, mem_ctx);
status = spoolss_getprinterdata(&hnd, &uni_val_name, size, type, &size,
- data, &needed);
+ (unsigned char *)data, &needed);
if (status == ERROR_INSUFFICIENT_BUFFER)
{
data = prs_data_p(&buffer->prs);
status = spoolss_getprinterdata(&hnd, &uni_val_name,
size, type, &size,
- data, &needed);
+ (unsigned char *)data, &needed);
}
if (mem_ctx)
return False;
}
/* if (!cli_nt_session_open(cli->smb, pipe_name, &cli->fnum)) by JERRY */
- if (!cli_nt_session_open(cli->smb, pipe_name))
+ if (!cli_nt_session_open(cli->smb, (char *)pipe_name))
{
cli_net_use_del(srv_name, ntc, False, NULL);
return False;
continue;
}
if (!reuse
- && !pwd_compare(&usr_creds->pwd, &c->cli->smb->pwd))
+ && !pwd_compare((struct pwd_info *)&usr_creds->pwd, &c->cli->smb->pwd))
{
DEBUG(100, ("password doesn't match\n"));
continue;
if (!strchr(handlename+2, '\\')) {
DEBUGADD(4,("Printer is a print server\n"));
Printer->printer_type = PRINTER_HANDLE_IS_PRINTSERVER;
- return True;
}
/* it's a printer */
else {
DEBUGADD(4,("Printer is a printer\n"));
Printer->printer_type = PRINTER_HANDLE_IS_PRINTER;
- return True;
}
- return False;
+ return True;
}
/****************************************************************************
memcpy(data, wcp->data + (pos - wcp->offset), n);
-#ifdef WITH_PROFILE
- INC_PROFILE_COUNT(writecache_read_hits);
-#endif
+ DO_PROFILE_INC(writecache_read_hits);
return True;
}
}
#ifdef WITH_PROFILE
- INC_PROFILE_COUNT(writecache_total_writes);
+ DO_PROFILE_INC(writecache_total_writes);
if (!fsp->oplock_type) {
- INC_PROFILE_COUNT(writecache_non_oplock_writes);
+ DO_PROFILE_INC(writecache_non_oplock_writes);
}
#endif
#endif
if(!wcp) {
-#ifdef WITH_PROFILE
- INC_PROFILE_COUNT(writecache_direct_writes);
-#endif
+ DO_PROFILE_INC(writecache_direct_writes);
return real_write_file(fsp, data, pos, n);
}
pos += data_used;
n -= data_used;
-#ifdef WITH_PROFILE
- INC_PROFILE_COUNT(writecache_abutted_writes);
-#endif
+ DO_PROFILE_INC(writecache_abutted_writes);
total_written = data_used;
write_path = 1;
cache_flush_needed = True;
-#ifdef WITH_PROFILE
- INC_PROFILE_COUNT(writecache_abutted_writes);
-#endif
+ DO_PROFILE_INC(writecache_abutted_writes);
total_written = data_used;
write_path = 2;
pos += data_used;
n -= data_used;
-#ifdef WITH_PROFILE
- INC_PROFILE_COUNT(writecache_abutted_writes);
-#endif
+ DO_PROFILE_INC(writecache_abutted_writes);
total_written = data_used;
write_path = 3;
if ( n <= wcp->alloc_size && n > wcp->data_size) {
cache_flush_needed = True;
} else {
-#ifdef WITH_PROFILE
- INC_PROFILE_COUNT(writecache_direct_writes);
-#endif
+ DO_PROFILE_INC(writecache_direct_writes);
return real_write_file(fsp, data, pos, n);
}
if (n > wcp->alloc_size ) {
if(real_write_file(fsp, data, pos, n) == -1)
return -1;
-#ifdef WITH_PROFILE
- INC_PROFILE_COUNT(writecache_direct_writes);
-#endif
+ DO_PROFILE_INC(writecache_direct_writes);
return total_written + n;
}
if (n) {
#ifdef WITH_PROFILE
if (wcp->data_size) {
- INC_PROFILE_COUNT(writecache_abutted_writes);
+ DO_PROFILE_INC(writecache_abutted_writes);
} else {
- INC_PROFILE_COUNT(writecache_init_writes);
+ DO_PROFILE_INC(writecache_init_writes);
}
#endif
memcpy(wcp->data+wcp->data_size, data, n);
if (wcp->data_size == 0) {
wcp->offset = pos;
-#ifdef WITH_PROFILE
- INC_PROFILE_COUNT(writecache_num_write_caches);
-#endif
+ DO_PROFILE_INC(writecache_num_write_caches);
}
wcp->data_size += n;
DEBUG(9,("cache return %u\n", (unsigned int)n));
if(!(wcp = fsp->wcp))
return;
-#ifdef WITH_PROFILE
- DEC_PROFILE_COUNT(writecache_allocated_write_caches);
-#endif
+ DO_PROFILE_DEC(writecache_allocated_write_caches);
allocated_write_caches--;
SMB_ASSERT(wcp->data_size == 0);
}
fsp->wcp = wcp;
-#ifdef WITH_PROFILE
- INC_PROFILE_COUNT(writecache_allocated_write_caches);
-#endif
+ DO_PROFILE_INC(writecache_allocated_write_caches);
allocated_write_caches++;
DEBUG(10,("setup_write_cache: File %s allocated write cache size %u\n",
data_size = wcp->data_size;
wcp->data_size = 0;
-#ifdef WITH_PROFILE
- DEC_PROFILE_COUNT(writecache_num_write_caches);
- INC_PROFILE_COUNT(writecache_flushed_writes[reason]);
-#endif
+ DO_PROFILE_DEC_INC(writecache_num_write_caches,writecache_flushed_writes[reason]);
DEBUG(9,("flushing write cache: fd = %d, off=%.0f, size=%u\n",
fsp->fd, (double)wcp->offset, (unsigned int)data_size));
#ifdef WITH_PROFILE
if(data_size == wcp->alloc_size)
- INC_PROFILE_COUNT(writecache_num_perfect_writes);
+ DO_PROFILE_INC(writecache_num_perfect_writes);
#endif
return real_write_file(fsp, wcp->data, wcp->offset, data_size);
BOOL ok = False;
BOOL bad_path = False;
SMB_STRUCT_STAT st;
- START_PROFILE(SMBchkpth_count);
+ START_PROFILE(SMBchkpth);
pstrcpy(name,smb_buf(inbuf) + 1);
Stat cache code used in unix_convert.
*****************************************************************************/
-static int global_stat_cache_lookups;
-static int global_stat_cache_misses;
-static int global_stat_cache_hits;
-
-/****************************************************************************
- Stat cache statistics code.
-*****************************************************************************/
-
-void print_stat_cache_statistics(void)
-{
- double eff;
-
- if(global_stat_cache_lookups == 0)
- return;
-
- eff = (100.0* (double)global_stat_cache_hits)/(double)global_stat_cache_lookups;
-
- DEBUG(0,("stat cache stats: lookups = %d, hits = %d, misses = %d, \
-stat cache was %f%% effective.\n", global_stat_cache_lookups,
- global_stat_cache_hits, global_stat_cache_misses, eff ));
-}
-
typedef struct {
int name_len;
char names[2]; /* This is extended via malloc... */
namelen = strlen(name);
*start = name;
- global_stat_cache_lookups++;
+
+ DO_PROFILE_INC(statcache_lookups);
/*
* Don't lookup trivial valid directory entries.
*/
if((*name == '\0') || (strcmp(name, ".") == 0) || (strcmp(name, "..") == 0)) {
- global_stat_cache_misses++;
+ DO_PROFILE_INC(statcache_misses);
return False;
}
/*
* We reached the end of the name - no match.
*/
- global_stat_cache_misses++;
+ DO_PROFILE_INC(statcache_misses);
return False;
}
if((*chk_name == '\0') || (strcmp(chk_name, ".") == 0)
|| (strcmp(chk_name, "..") == 0)) {
- global_stat_cache_misses++;
+ DO_PROFILE_INC(statcache_misses);
return False;
}
} else {
scp = (stat_cache_entry *)(hash_elem->value);
- global_stat_cache_hits++;
+ DO_PROFILE_INC(statcache_hits);
trans_name = scp->names+scp->name_len+1;
if(conn->vfs_ops.stat(conn,dos_to_unix(trans_name,False), pst) != 0) {
/* Discard this entry - it doesn't exist in the filesystem. */
sid_copy( &group_sid, &global_sid_World);
} else {
- /*
- * If there is a VFS redirect, use it.
- */
-
- if ((fsp->is_directory || fsp->fd == -1) && fsp->conn->vfs_ops.get_nt_acl)
- return fsp->conn->vfs_ops.get_nt_acl(fsp->conn,dos_to_unix(fsp->fsp_name, False), ppdesc);
- else if (fsp->conn->vfs_ops.fget_nt_acl)
- return fsp->conn->vfs_ops.fget_nt_acl(fsp,fsp->fd, ppdesc);
-
if(fsp->is_directory || fsp->fd == -1) {
if(vfs_stat(fsp->conn,fsp->fsp_name, &sbuf) != 0) {
return 0;
SMB_STRUCT_STAT sbuf;
BOOL got_dacl = False;
- /*
- * If there is a VFS redirect, use it.
- */
-
- if ((fsp->is_directory || fsp->fd == -1) && fsp->conn->vfs_ops.set_nt_acl)
- return fsp->conn->vfs_ops.set_nt_acl(conn,dos_to_unix(fsp->fsp_name, False), security_info_sent, psd);
- else if (fsp->conn->vfs_ops.fset_nt_acl)
- return fsp->conn->vfs_ops.fset_nt_acl(fsp,fsp->fd, security_info_sent, psd);
-
/*
* Get the current state of the file.
*/
return 0; /* Return >= 0 for success */
}
-void vfswrap_dummy_disconnect(void)
+void vfswrap_dummy_disconnect(connection_struct *conn)
{
}
{
DIR *result;
+ START_PROFILE(syscall_opendir);
+
#ifdef VFS_CHECK_NULL
if (fname == NULL) {
smb_panic("NULL pointer passed to vfswrap_opendir()\n");
#endif
result = opendir(fname);
+ END_PROFILE(syscall_opendir);
return result;
}
{
struct dirent *result;
+ START_PROFILE(syscall_readdir);
+
#ifdef VFS_CHECK_NULL
if (dirp == NULL) {
smb_panic("NULL pointer passed to vfswrap_readdir()\n");
#endif
result = readdir(dirp);
+ END_PROFILE(syscall_readdir);
return result;
}
{
int result;
+ START_PROFILE(syscall_mkdir);
+
#ifdef VFS_CHECK_NULL
if (path == NULL) {
smb_panic("NULL pointer passed to vfswrap_mkdir()\n");
#endif
result = mkdir(path, mode);
+ END_PROFILE(syscall_mkdir);
return result;
}
{
int result;
+ START_PROFILE(syscall_rmdir);
+
#ifdef VFS_CHECK_NULL
if (path == NULL) {
smb_panic("NULL pointer passed to vfswrap_rmdir()\n");
#endif
result = rmdir(path);
+ END_PROFILE(syscall_rmdir);
return result;
}
{
int result;
+ START_PROFILE(syscall_closedir);
+
#ifdef VFS_CHECK_NULL
if (dirp == NULL) {
smb_panic("NULL pointer passed to vfswrap_closedir()\n");
#endif
result = closedir(dirp);
+ END_PROFILE(syscall_closedir);
return result;
}
{
int result;
+ START_PROFILE(syscall_open);
+
#ifdef VFS_CHECK_NULL
if (fname == NULL) {
smb_panic("NULL pointer passed to vfswrap_open()\n");
#endif
result = sys_open(fname, flags, mode);
+ END_PROFILE(syscall_open);
return result;
}
{
int result;
+ START_PROFILE(syscall_close);
+
result = close(fd);
+ END_PROFILE(syscall_close);
return result;
}
{
ssize_t result;
+ START_PROFILE_BYTES(syscall_read, n);
+
#ifdef VFS_CHECK_NULL
if (data == NULL) {
smb_panic("NULL pointer passed to vfswrap_read()\n");
#endif
result = read(fd, data, n);
+ END_PROFILE(syscall_read);
return result;
}
{
ssize_t result;
+ START_PROFILE_BYTES(syscall_write, n);
+
#ifdef VFS_CHECK_NULL
if (data == NULL) {
smb_panic("NULL pointer passed to vfswrap_write()\n");
#endif
result = write(fd, data, n);
+ END_PROFILE(syscall_write);
return result;
}
{
SMB_OFF_T result;
+ START_PROFILE(syscall_lseek);
+
result = sys_lseek(filedes, offset, whence);
+ END_PROFILE(syscall_lseek);
return result;
}
{
int result;
+ START_PROFILE(syscall_rename);
+
#ifdef VFS_CHECK_NULL
if ((old == NULL) || (new == NULL)) {
smb_panic("NULL pointer passed to vfswrap_rename()\n");
#endif
result = rename(old, new);
+ END_PROFILE(syscall_rename);
return result;
}
int vfswrap_fsync(files_struct *fsp, int fd)
{
#ifdef HAVE_FSYNC
- return fsync(fd);
+ int result;
+
+ START_PROFILE(syscall_fsync);
+
+ result = fsync(fd);
+ END_PROFILE(syscall_fsync);
+ return result;
#else
return 0;
#endif
{
int result;
+ START_PROFILE(syscall_stat);
+
#ifdef VFS_CHECK_NULL
if ((fname == NULL) || (sbuf == NULL)) {
smb_panic("NULL pointer passed to vfswrap_stat()\n");
#endif
result = sys_stat(fname, sbuf);
+ END_PROFILE(syscall_stat);
return result;
}
{
int result;
+ START_PROFILE(syscall_fstat);
+
#ifdef VFS_CHECK_NULL
if (sbuf == NULL) {
smb_panic("NULL pointer passed to vfswrap_fstat()\n");
#endif
result = sys_fstat(fd, sbuf);
+ END_PROFILE(syscall_fstat);
return result;
}
{
int result;
+ START_PROFILE(syscall_lstat);
+
#ifdef VFS_CHECK_NULL
if ((path == NULL) || (sbuf == NULL)) {
smb_panic("NULL pointer passed to vfswrap_lstat()\n");
#endif
result = sys_lstat(path, sbuf);
+ END_PROFILE(syscall_lstat);
return result;
}
{
int result;
+ START_PROFILE(syscall_unlink);
+
#ifdef VFS_CHECK_NULL
if (path == NULL) {
smb_panic("NULL pointer passed to vfswrap_unlink()\n");
#endif
result = unlink(path);
+ END_PROFILE(syscall_unlink);
return result;
}
{
int result;
+ START_PROFILE(syscall_chmod);
+
#ifdef VFS_CHECK_NULL
if (path == NULL) {
smb_panic("NULL pointer passed to vfswrap_chmod()\n");
#endif
result = chmod(path, mode);
+ END_PROFILE(syscall_chmod);
return result;
}
{
int result;
+ START_PROFILE(syscall_chown);
+
#ifdef VFS_CHECK_NULL
if (path == NULL) {
smb_panic("NULL pointer passed to vfswrap_chown()\n");
#endif
result = sys_chown(path, uid, gid);
+ END_PROFILE(syscall_chown);
return result;
}
int vfswrap_chdir(connection_struct *conn, char *path)
{
+ int result;
+
+ START_PROFILE(syscall_chdir);
+
#ifdef VFS_CHECK_NULL
if (path == NULL) {
smb_panic("NULL pointer passed to vfswrap_chdir()\n");
}
#endif
- return chdir(path);
+ result = chdir(path);
+ END_PROFILE(syscall_chdir);
+ return result;
}
char *vfswrap_getwd(connection_struct *conn, char *path)
{
+ char *result;
+
+ START_PROFILE(syscall_getwd);
+
#ifdef VFS_CHECK_NULL
if (path == NULL) {
smb_panic("NULL pointer passed to vfswrap_getwd()\n");
}
#endif
- return sys_getwd(path);
+ result = sys_getwd(path);
+ END_PROFILE(syscall_getwd);
+ return result;
}
int vfswrap_utime(connection_struct *conn, char *path, struct utimbuf *times)
{
int result;
+ START_PROFILE(syscall_utime);
+
#ifdef VFS_CHECK_NULL
if ((path == NULL) || (times == NULL)) {
smb_panic("NULL pointer passed to vfswrap_utime()\n");
#endif
result = utime(path, times);
+ END_PROFILE(syscall_utime);
return result;
}
{
int result;
+ START_PROFILE(syscall_ftruncate);
+
result = sys_ftruncate(fd, offset);
+ END_PROFILE(syscall_ftruncate);
return result;
}
BOOL vfswrap_lock(files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type)
{
- return fcntl_lock(fd, op, offset, count,type);
+ BOOL result;
+
+ START_PROFILE(syscall_fcntl_lock);
+
+ result = fcntl_lock(fd, op, offset, count,type);
+ END_PROFILE(syscall_fcntl_lock);
+ return result;
+}
+
+size_t vfswrap_fget_nt_acl(files_struct *fsp, int fd, SEC_DESC **ppdesc)
+{
+ return get_nt_acl(fsp, ppdesc);
+}
+
+size_t vfswrap_get_nt_acl(files_struct *fsp, char *name, SEC_DESC **ppdesc)
+{
+ return get_nt_acl(fsp, ppdesc);
+}
+
+BOOL vfswrap_fset_nt_acl(files_struct *fsp, int fd, uint32 security_info_sent, SEC_DESC *psd)
+{
+ return set_nt_acl(fsp, security_info_sent, psd);
+}
+
+BOOL vfswrap_set_nt_acl(files_struct *fsp, char *name, uint32 security_info_sent, SEC_DESC *psd)
+{
+ return set_nt_acl(fsp, security_info_sent, psd);
}
/* Some structures to help us initialise the vfs operations table */
struct vfs_syminfo {
- char *name;
- void *fptr;
+ char *name;
+ void *fptr;
};
/* Default vfs hooks. WARNING: The order of these initialisers is
struct vfs_ops default_vfs_ops = {
- /* Disk operations */
-
- vfswrap_dummy_connect,
- vfswrap_dummy_disconnect,
- vfswrap_disk_free,
-
- /* Directory operations */
-
- vfswrap_opendir,
- vfswrap_readdir,
- vfswrap_mkdir,
- vfswrap_rmdir,
- vfswrap_closedir,
-
- /* File operations */
-
- vfswrap_open,
- vfswrap_close,
- vfswrap_read,
- vfswrap_write,
- vfswrap_lseek,
- vfswrap_rename,
- vfswrap_fsync,
- vfswrap_stat,
- vfswrap_fstat,
- vfswrap_lstat,
- vfswrap_unlink,
- vfswrap_chmod,
- vfswrap_chown,
- vfswrap_chdir,
- vfswrap_getwd,
- vfswrap_utime,
- vfswrap_ftruncate,
- vfswrap_lock,
- NULL, /* The 4 security descriptor functions are not defined by default. */
- NULL,
- NULL,
- NULL
+ /* Disk operations */
+
+ vfswrap_dummy_connect,
+ vfswrap_dummy_disconnect,
+ vfswrap_disk_free,
+
+ /* Directory operations */
+
+ vfswrap_opendir,
+ vfswrap_readdir,
+ vfswrap_mkdir,
+ vfswrap_rmdir,
+ vfswrap_closedir,
+
+ /* File operations */
+
+ vfswrap_open,
+ vfswrap_close,
+ vfswrap_read,
+ vfswrap_write,
+ vfswrap_lseek,
+ vfswrap_rename,
+ vfswrap_fsync,
+ vfswrap_stat,
+ vfswrap_fstat,
+ vfswrap_lstat,
+ vfswrap_unlink,
+ vfswrap_chmod,
+ vfswrap_chown,
+ vfswrap_chdir,
+ vfswrap_getwd,
+ vfswrap_utime,
+ vfswrap_ftruncate,
+ vfswrap_lock,
+ vfswrap_fget_nt_acl,
+ vfswrap_get_nt_acl,
+ vfswrap_fset_nt_acl,
+ vfswrap_set_nt_acl
};
/****************************************************************************