Herb's warning fixes. Also the POSIX locking fix.
authorJeremy Allison <jra@samba.org>
Fri, 6 Oct 2000 18:13:52 +0000 (18:13 +0000)
committerJeremy Allison <jra@samba.org>
Fri, 6 Oct 2000 18:13:52 +0000 (18:13 +0000)
We now use our own vfs layer to do get/set acl calls (hurrah!).
Jeremy.
(This used to be commit dfe77c7046cbd65ee52aea7439f21503c1eac41d)

19 files changed:
source3/include/includes.h
source3/include/profile.h
source3/include/proto.h
source3/include/smb.h
source3/include/vfs.h
source3/lib/kanji.c
source3/locking/posix.c
source3/profile/profile.c
source3/rpc_client/cli_spoolss.c
source3/rpc_client/cli_use.c
source3/rpc_client/msrpc_spoolss.c
source3/rpc_client/ncacn_np_use.c
source3/rpc_server/srv_spoolss_nt.c
source3/smbd/fileio.c
source3/smbd/reply.c
source3/smbd/statcache.c
source3/smbd/unix_acls.c
source3/smbd/vfs-wrap.c
source3/smbd/vfs.c

index ad2771665a36bb1d0ce84ebff0c2aaa020677376..da365ab953d674cab4c4dd4bf9170c820fc12eee 100644 (file)
@@ -635,12 +635,7 @@ extern int errno;
 
 #include "msdfs.h"
 
-#ifdef WITH_PROFILE
 #include "profile.h"
-#else
-#define START_PROFILE(x)
-#define END_PROFILE(x)
-#endif
 
 #ifndef MAXCODEPAGELINES
 #define MAXCODEPAGELINES 256
index 9b6ec462df8955b141e6486bb21d315a3c46adda..d18f598021e2f81f0e8dbac708163dd284fb80c9 100644 (file)
 
 */
 
+/*
+ * 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 */
 
@@ -308,19 +316,61 @@ struct profile_struct {
 
 
 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
index 2457856425239c678ae1dbf0d5dd962027842589..22c3f48f86b9b7191c4672b66cb8aafe3e2f1998 100644 (file)
@@ -3793,7 +3793,6 @@ int sslutil_negotiate_ssl(int fd, int msg_type);
 
 /*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);
@@ -3834,7 +3833,7 @@ BOOL set_nt_acl(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd);
 /*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);
@@ -3860,6 +3859,9 @@ char *vfswrap_getwd(connection_struct *conn, char *path);
 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  */
 
index 24211b0d50ddeb671e95fb7b6688d0970e041ae7..4d4aef088ef0822ec62c090db2104405759acff8 100644 (file)
@@ -617,13 +617,6 @@ struct current_user
        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
index fb089c86cc7425f4d40b25151af1d2600b353ca9..3624311c301389a516ae598e80cdd55b894b7424 100644 (file)
@@ -78,9 +78,9 @@ struct vfs_ops {
        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 {
index ca81933a195140c17e78dcf1d53b4adfc08cdcdc..294b6a623a3eedf410d757344c9b401c62fb1add 100644 (file)
@@ -693,7 +693,6 @@ static int  euc3sjis (int hi, int lo, BOOL is_3byte)
       }
     }
   }
-  return ((GETAHI << 8) | GETALO);
 }
 
 /*******************************************************************
index 7bac1ffe37983439bf32b558bc82068237effd11..fbdcf662fc9e2f8bcb2de2436df01a3e79714e06 100644 (file)
@@ -408,7 +408,7 @@ static BOOL does_lock_overlap(SMB_OFF_T start1, SMB_OFF_T size1, SMB_OFF_T start
        if (start1 >= start2 && start1 <= start2 + size2)
                return True;
 
-       if (start1 < start2 && start1 + size1 > start2);
+       if (start1 < start2 && start1 + size1 > start2)
                return True;
 
        return False;
index c2d9b4ce89ed2a03069c0a7c2d51031aa27689de..5b8b280c293e6a7fc33cf0d5572eefd0245c2d25 100644 (file)
@@ -22,7 +22,6 @@
 
 #include "includes.h"
 
-#ifdef WITH_PROFILE
 #include <sys/shm.h>
 
 extern int DEBUGLEVEL;
@@ -34,6 +33,11 @@ static BOOL read_only;
 
 struct profile_struct *profile_p;
 
+BOOL do_profile_flag = False;
+
+struct timeval profile_starttime;
+struct timeval profile_endtime;
+
 /*******************************************************************
   open the profiling shared memory area
   ******************************************************************/
@@ -99,10 +103,7 @@ BOOL profile_setup(BOOL rdonly)
                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
index 19e269a323cd10a374552809fa180ec94d035fac..3517fbbc9c8fddea13772cf08f38c335f5fa7c56 100644 (file)
@@ -679,7 +679,7 @@ uint32 spoolss_getprinterdata(const POLICY_HND *hnd, const UNISTR2 *valuename,
 
         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) &&
index 7cc4477b5797703216b6a11a67dbbf11e9bd85ac..93560e9772b5dc350c7815ec5337a5cc8675a78d 100644 (file)
@@ -172,7 +172,7 @@ static struct cli_use *cli_find(const char *srv_name,
                {
                        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;
index a841af82d0109a70e4fccaa96f1a2ee5e0b7714f..a7a25caaea2c1896ab5db6718760dce32713c1c4 100644 (file)
@@ -391,7 +391,7 @@ uint32 msrpc_spoolss_getprinterdata( const char* printer_name,
         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)
         {
@@ -400,7 +400,7 @@ uint32 msrpc_spoolss_getprinterdata( const char* printer_name,
                 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)
index 8e5c7240461fc07b99ded79c3f3b12bceda15a14..1a3938b6e9d731b1b75b30cd0808f0e2fcda8b22 100644 (file)
@@ -77,7 +77,7 @@ static BOOL ncacn_np_establish_connection(struct ncacn_np *cli,
                 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;
@@ -331,7 +331,7 @@ static struct ncacn_np_use *ncacn_np_find(const char *srv_name,
                         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;
index c32ca8d871308af8934b71114b3aac291fb124f7..5a724d6ab6487fbd701f21203a5530eb3b645b8a 100644 (file)
@@ -358,16 +358,14 @@ static BOOL set_printer_hnd_printertype(Printer_entry *Printer, char *handlename
        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;
 }
 
 /****************************************************************************
index b8a0585d90e48daef8a2340621431b1ab1cd6302..bb7ab46baa93a0627dace4296adbc83676721804 100644 (file)
@@ -83,9 +83,7 @@ BOOL read_from_write_cache(files_struct *fsp,char *data,SMB_OFF_T pos,size_t n)
 
   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;
 }
@@ -183,9 +181,9 @@ ssize_t write_file(files_struct *fsp, char *data, SMB_OFF_T pos, size_t n)
   }
 
 #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
 
@@ -296,9 +294,7 @@ nonop=%u allocated=%u active=%u direct=%u perfect=%u readhits=%u\n",
 #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);
   }
 
@@ -350,9 +346,7 @@ nonop=%u allocated=%u active=%u direct=%u perfect=%u readhits=%u\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;
@@ -388,9 +382,7 @@ nonop=%u allocated=%u active=%u direct=%u perfect=%u readhits=%u\n",
 
       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;
@@ -460,9 +452,7 @@ nonop=%u allocated=%u active=%u direct=%u perfect=%u readhits=%u\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 = 3;
@@ -494,9 +484,7 @@ len = %u\n",fsp->fd, (double)pos, (unsigned int)n, (double)wcp->offset, (unsigne
       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);
       }
 
@@ -525,9 +513,7 @@ n = %u, wcp->offset=%.0f, wcp->data_size=%u\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;
   }
 
@@ -538,17 +524,15 @@ n = %u, wcp->offset=%.0f, wcp->data_size=%u\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));
@@ -573,9 +557,7 @@ void delete_write_cache(files_struct *fsp)
   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);
@@ -621,9 +603,7 @@ static BOOL setup_write_cache(files_struct *fsp, SMB_OFF_T file_size)
   }
 
   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",
@@ -659,17 +639,14 @@ ssize_t flush_write_cache(files_struct *fsp, enum flush_reason_enum reason)
   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);
index e64875a8058ce257a5ad8b951ffb5d3addc45b5e..fd4ff23461fef8aa7b639d618e8c149a6600e531 100644 (file)
@@ -1034,7 +1034,7 @@ int reply_chkpth(connection_struct *conn, char *inbuf,char *outbuf, int dum_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);
 
index b66c5e2fe9e689f2419c0a912bcf5c663f7929f2..8d756a1d466b0c74de1750b050247e0db81c89f5 100644 (file)
@@ -30,28 +30,6 @@ extern BOOL case_sensitive;
  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... */
@@ -175,13 +153,14 @@ BOOL stat_cache_lookup(connection_struct *conn, char *name, char *dirpath,
   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;
   }
 
@@ -202,17 +181,17 @@ BOOL stat_cache_lookup(connection_struct *conn, char *name, char *dirpath,
         /*
          * 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.  */
index d32f1cfaae4d88815d7a2227c444c058e7037fa2..2e16611b0cb165767f72c9641a680d92149a23c2 100644 (file)
@@ -352,15 +352,6 @@ size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc)
     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;
@@ -462,15 +453,6 @@ BOOL set_nt_acl(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
   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.
    */
index 7495a7668752bd409510f11bf4faa4e5a0e501e1..3b8d5eebcc91df4866f30ab4ef27edac1e984c63 100644 (file)
@@ -34,7 +34,7 @@ int vfswrap_dummy_connect(connection_struct *conn, char *service, char *user)
     return 0;    /* Return >= 0 for success */
 }
 
-void vfswrap_dummy_disconnect(void)
+void vfswrap_dummy_disconnect(connection_struct *conn)
 {
 }
 
@@ -63,6 +63,8 @@ DIR *vfswrap_opendir(connection_struct *conn, char *fname)
 {
     DIR *result;
 
+    START_PROFILE(syscall_opendir);
+
 #ifdef VFS_CHECK_NULL
     if (fname == NULL) {
        smb_panic("NULL pointer passed to vfswrap_opendir()\n");
@@ -70,6 +72,7 @@ DIR *vfswrap_opendir(connection_struct *conn, char *fname)
 #endif
 
     result = opendir(fname);
+    END_PROFILE(syscall_opendir);
     return result;
 }
 
@@ -77,6 +80,8 @@ struct dirent *vfswrap_readdir(connection_struct *conn, DIR *dirp)
 {
     struct dirent *result;
 
+    START_PROFILE(syscall_readdir);
+
 #ifdef VFS_CHECK_NULL
     if (dirp == NULL) {
        smb_panic("NULL pointer passed to vfswrap_readdir()\n");
@@ -84,6 +89,7 @@ struct dirent *vfswrap_readdir(connection_struct *conn, DIR *dirp)
 #endif
 
     result = readdir(dirp);
+    END_PROFILE(syscall_readdir);
     return result;
 }
 
@@ -91,6 +97,8 @@ int vfswrap_mkdir(connection_struct *conn, char *path, mode_t mode)
 {
     int result;
 
+    START_PROFILE(syscall_mkdir);
+
 #ifdef VFS_CHECK_NULL
     if (path == NULL) {
        smb_panic("NULL pointer passed to vfswrap_mkdir()\n");
@@ -98,6 +106,7 @@ int vfswrap_mkdir(connection_struct *conn, char *path, mode_t mode)
 #endif
 
     result = mkdir(path, mode);
+    END_PROFILE(syscall_mkdir);
     return result;
 }
 
@@ -105,6 +114,8 @@ int vfswrap_rmdir(connection_struct *conn, char *path)
 {
     int result;
 
+    START_PROFILE(syscall_rmdir);
+
 #ifdef VFS_CHECK_NULL
     if (path == NULL) {
        smb_panic("NULL pointer passed to vfswrap_rmdir()\n");
@@ -112,6 +123,7 @@ int vfswrap_rmdir(connection_struct *conn, char *path)
 #endif
 
     result = rmdir(path);
+    END_PROFILE(syscall_rmdir);
     return result;
 }
 
@@ -119,6 +131,8 @@ int vfswrap_closedir(connection_struct *conn, DIR *dirp)
 {
     int result;
 
+    START_PROFILE(syscall_closedir);
+
 #ifdef VFS_CHECK_NULL
     if (dirp == NULL) {
        smb_panic("NULL pointer passed to vfswrap_closedir()\n");
@@ -126,6 +140,7 @@ int vfswrap_closedir(connection_struct *conn, DIR *dirp)
 #endif
 
     result = closedir(dirp);
+    END_PROFILE(syscall_closedir);
     return result;
 }
 
@@ -135,6 +150,8 @@ int vfswrap_open(connection_struct *conn, char *fname, int flags, mode_t mode)
 {
     int result;
 
+    START_PROFILE(syscall_open);
+
 #ifdef VFS_CHECK_NULL
     if (fname == NULL) {
        smb_panic("NULL pointer passed to vfswrap_open()\n");
@@ -142,6 +159,7 @@ int vfswrap_open(connection_struct *conn, char *fname, int flags, mode_t mode)
 #endif
 
     result = sys_open(fname, flags, mode);
+    END_PROFILE(syscall_open);
     return result;
 }
 
@@ -149,7 +167,10 @@ int vfswrap_close(files_struct *fsp, int fd)
 {
     int result;
 
+    START_PROFILE(syscall_close);
+
     result = close(fd);
+    END_PROFILE(syscall_close);
     return result;
 }
 
@@ -157,6 +178,8 @@ ssize_t vfswrap_read(files_struct *fsp, int fd, char *data, size_t n)
 {
     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");
@@ -164,6 +187,7 @@ ssize_t vfswrap_read(files_struct *fsp, int fd, char *data, size_t n)
 #endif
 
     result = read(fd, data, n);
+    END_PROFILE(syscall_read);
     return result;
 }
 
@@ -171,6 +195,8 @@ ssize_t vfswrap_write(files_struct *fsp, int fd, char *data, size_t n)
 {
     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");
@@ -178,6 +204,7 @@ ssize_t vfswrap_write(files_struct *fsp, int fd, char *data, size_t n)
 #endif
 
     result = write(fd, data, n);
+    END_PROFILE(syscall_write);
     return result;
 }
 
@@ -185,7 +212,10 @@ SMB_OFF_T vfswrap_lseek(files_struct *fsp, int filedes, SMB_OFF_T offset, int wh
 {
     SMB_OFF_T result;
 
+    START_PROFILE(syscall_lseek);
+
     result = sys_lseek(filedes, offset, whence);
+    END_PROFILE(syscall_lseek);
     return result;
 }
 
@@ -193,6 +223,8 @@ int vfswrap_rename(connection_struct *conn, char *old, char *new)
 {
     int result;
 
+    START_PROFILE(syscall_rename);
+
 #ifdef VFS_CHECK_NULL
     if ((old == NULL) || (new == NULL)) {
        smb_panic("NULL pointer passed to vfswrap_rename()\n");
@@ -200,13 +232,20 @@ int vfswrap_rename(connection_struct *conn, char *old, char *new)
 #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
@@ -216,6 +255,8 @@ int vfswrap_stat(connection_struct *conn, char *fname, SMB_STRUCT_STAT *sbuf)
 {
     int result;
 
+    START_PROFILE(syscall_stat);
+
 #ifdef VFS_CHECK_NULL
     if ((fname == NULL) || (sbuf == NULL)) {
        smb_panic("NULL pointer passed to vfswrap_stat()\n");
@@ -223,6 +264,7 @@ int vfswrap_stat(connection_struct *conn, char *fname, SMB_STRUCT_STAT *sbuf)
 #endif
 
     result = sys_stat(fname, sbuf);
+    END_PROFILE(syscall_stat);
     return result;
 }
 
@@ -230,6 +272,8 @@ int vfswrap_fstat(files_struct *fsp, int fd, SMB_STRUCT_STAT *sbuf)
 {
     int result;
 
+    START_PROFILE(syscall_fstat);
+
 #ifdef VFS_CHECK_NULL
     if (sbuf == NULL) {
        smb_panic("NULL pointer passed to vfswrap_fstat()\n");
@@ -237,6 +281,7 @@ int vfswrap_fstat(files_struct *fsp, int fd, SMB_STRUCT_STAT *sbuf)
 #endif
 
     result = sys_fstat(fd, sbuf);
+    END_PROFILE(syscall_fstat);
     return result;
 }
 
@@ -244,6 +289,8 @@ int vfswrap_lstat(connection_struct *conn, char *path, SMB_STRUCT_STAT *sbuf)
 {
     int result;
 
+    START_PROFILE(syscall_lstat);
+
 #ifdef VFS_CHECK_NULL
     if ((path == NULL) || (sbuf == NULL)) {
        smb_panic("NULL pointer passed to vfswrap_lstat()\n");
@@ -251,6 +298,7 @@ int vfswrap_lstat(connection_struct *conn, char *path, SMB_STRUCT_STAT *sbuf)
 #endif
 
     result = sys_lstat(path, sbuf);
+    END_PROFILE(syscall_lstat);
     return result;
 }
 
@@ -258,6 +306,8 @@ int vfswrap_unlink(connection_struct *conn, char *path)
 {
     int result;
 
+    START_PROFILE(syscall_unlink);
+
 #ifdef VFS_CHECK_NULL
     if (path == NULL) {
        smb_panic("NULL pointer passed to vfswrap_unlink()\n");
@@ -265,6 +315,7 @@ int vfswrap_unlink(connection_struct *conn, char *path)
 #endif
 
     result = unlink(path);
+    END_PROFILE(syscall_unlink);
     return result;
 }
 
@@ -272,6 +323,8 @@ int vfswrap_chmod(connection_struct *conn, char *path, mode_t mode)
 {
     int result;
 
+    START_PROFILE(syscall_chmod);
+
 #ifdef VFS_CHECK_NULL
     if (path == NULL) {
        smb_panic("NULL pointer passed to vfswrap_chmod()\n");
@@ -279,6 +332,7 @@ int vfswrap_chmod(connection_struct *conn, char *path, mode_t mode)
 #endif
 
     result = chmod(path, mode);
+    END_PROFILE(syscall_chmod);
     return result;
 }
 
@@ -286,6 +340,8 @@ int vfswrap_chown(connection_struct *conn, char *path, uid_t uid, gid_t gid)
 {
     int result;
 
+    START_PROFILE(syscall_chown);
+
 #ifdef VFS_CHECK_NULL
     if (path == NULL) {
        smb_panic("NULL pointer passed to vfswrap_chown()\n");
@@ -293,35 +349,50 @@ int vfswrap_chown(connection_struct *conn, char *path, uid_t uid, gid_t gid)
 #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");
@@ -329,6 +400,7 @@ int vfswrap_utime(connection_struct *conn, char *path, struct utimbuf *times)
 #endif
 
     result = utime(path, times);
+    END_PROFILE(syscall_utime);
     return result;
 }
 
@@ -336,11 +408,40 @@ int vfswrap_ftruncate(files_struct *fsp, int fd, SMB_OFF_T offset)
 {
     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);
 }
index 6b1b5ed22de46dbe66f94490aa056767aa440cc0..467f3e47a2ba5bf25f52711008aae4d47369be24 100644 (file)
@@ -26,8 +26,8 @@ extern int DEBUGLEVEL;
 /* 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
@@ -36,44 +36,44 @@ struct vfs_syminfo {
 
 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
 };
 
 /****************************************************************************