summaryrefslogtreecommitdiffstats
path: root/source/smbd/uid.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>1998-08-04 23:45:34 +0000
committerJeremy Allison <jra@samba.org>1998-08-04 23:45:34 +0000
commitc3663379fdcec487feea2e5d848ee012ee6c6baf (patch)
tree3cb427d6dbd8ae3b0b29f446eadcc28770754158 /source/smbd/uid.c
parent34ef55b7228155cef40cbdfcdc1fe623c1037bd6 (diff)
downloadsamba-c3663379fdcec487feea2e5d848ee012ee6c6baf.tar.gz
samba-c3663379fdcec487feea2e5d848ee012ee6c6baf.tar.xz
samba-c3663379fdcec487feea2e5d848ee012ee6c6baf.zip
nttrans.c: Fix change_notify. Queue processing code wasn't changing to
the correct directory before doing the stat. Doh ! uid.c: Fix for performance in security=share mode. Invalid vuid meant that in security=share mode Samba was always doing the become_user/ undebome_user pairs for *every* smb. This code fixes it, but tridge should review for security implications. Jeremy.
Diffstat (limited to 'source/smbd/uid.c')
-rw-r--r--source/smbd/uid.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/source/smbd/uid.c b/source/smbd/uid.c
index 82ff7ee7cea..9e669c301b9 100644
--- a/source/smbd/uid.c
+++ b/source/smbd/uid.c
@@ -216,7 +216,18 @@ BOOL become_user(connection_struct *conn, int cnum, uint16 vuid)
int snum,gid;
int uid;
- if ((current_user.cnum == cnum) && (vuser != 0) && (current_user.vuid == vuid) &&
+ /*
+ * We need a separate check in security=share mode due to vuid
+ * always being UID_FIELD_INVALID. If we don't do this then
+ * in share mode security we are *always* changing uid's between
+ * SMB's - this hurts performance - Badly.
+ */
+
+ if((lp_security() == SEC_SHARE) && (current_user.cnum == cnum) &&
+ (current_user.uid == conn->uid)) {
+ DEBUG(4,("Skipping become_user - already user\n"));
+ return(True);
+ } else if ((current_user.cnum == cnum) && (vuser != 0) && (current_user.vuid == vuid) &&
(current_user.uid == vuser->uid)) {
DEBUG(4,("Skipping become_user - already user\n"));
return(True);