The branch, master has been updated
       via  69b3d19 vfs_fake_perms: Fix bug 9775, segfault for "artificial" 
conn_structs
       via  ce2fb2d vfs_fake_perms: Slightly streamline code
       via  60c2953 vfs_fake_perms: Slightly streamline code
      from  a308db6 s3-netlogon: enumerate UPN suffixes from PASSDB when 
available

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 69b3d1944501f65427fbd12e4ddd3b66e67deedd
Author: Volker Lendecke <v...@samba.org>
Date:   Tue Apr 9 21:18:34 2013 +0200

    vfs_fake_perms: Fix bug 9775, segfault for "artificial" conn_structs
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Wed Apr 10 00:12:06 CEST 2013 on sn-devel-104

commit ce2fb2d019b6f8304b81e2d4d68bdac31edcf025
Author: Volker Lendecke <v...@samba.org>
Date:   Tue Apr 9 21:07:23 2013 +0200

    vfs_fake_perms: Slightly streamline code
    
    Don't initialize a variable directly set
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 60c2953a9d5fa12494a8a767c30913398affe453
Author: Volker Lendecke <v...@samba.org>
Date:   Tue Apr 9 21:07:23 2013 +0200

    vfs_fake_perms: Slightly streamline code
    
    Do an early error return
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/modules/vfs_fake_perms.c |   66 +++++++++++++++++++++++++++----------
 1 files changed, 48 insertions(+), 18 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_fake_perms.c b/source3/modules/vfs_fake_perms.c
index 4cda7ea..8eb6e3c 100644
--- a/source3/modules/vfs_fake_perms.c
+++ b/source3/modules/vfs_fake_perms.c
@@ -32,17 +32,32 @@
 static int fake_perms_stat(vfs_handle_struct *handle,
                           struct smb_filename *smb_fname)
 {
-       int ret = -1;
+       int ret;
 
        ret = SMB_VFS_NEXT_STAT(handle, smb_fname);
-       if (ret == 0) {
-               if (S_ISDIR(smb_fname->st.st_ex_mode)) {
-                       smb_fname->st.st_ex_mode = S_IFDIR | S_IRWXU;
-               } else {
-                       smb_fname->st.st_ex_mode = S_IRWXU;
-               }
-               smb_fname->st.st_ex_uid = 
handle->conn->session_info->unix_token->uid;
-               smb_fname->st.st_ex_gid = 
handle->conn->session_info->unix_token->gid;
+       if (ret != 0) {
+               return ret;
+       }
+
+       if (S_ISDIR(smb_fname->st.st_ex_mode)) {
+               smb_fname->st.st_ex_mode = S_IFDIR | S_IRWXU;
+       } else {
+               smb_fname->st.st_ex_mode = S_IRWXU;
+       }
+
+       if (handle->conn->session_info != NULL) {
+               struct security_unix_token *utok;
+
+               utok = handle->conn->session_info->unix_token;
+               smb_fname->st.st_ex_uid = utok->uid;
+               smb_fname->st.st_ex_gid = utok->gid;
+       } else {
+               /*
+                * We have an artificial connection for dfs for example. It
+                * sucks, but the current uid/gid is the best we have.
+                */
+               smb_fname->st.st_ex_uid = geteuid();
+               smb_fname->st.st_ex_gid = getegid();
        }
 
        return ret;
@@ -50,18 +65,33 @@ static int fake_perms_stat(vfs_handle_struct *handle,
 
 static int fake_perms_fstat(vfs_handle_struct *handle, files_struct *fsp, 
SMB_STRUCT_STAT *sbuf)
 {
-       int ret = -1;
+       int ret;
 
        ret = SMB_VFS_NEXT_FSTAT(handle, fsp, sbuf);
-       if (ret == 0) {
-               if (S_ISDIR(sbuf->st_ex_mode)) {
-                       sbuf->st_ex_mode = S_IFDIR | S_IRWXU;
-               } else {
-                       sbuf->st_ex_mode = S_IRWXU;
-               }
-               sbuf->st_ex_uid = handle->conn->session_info->unix_token->uid;
-               sbuf->st_ex_gid = handle->conn->session_info->unix_token->gid;
+       if (ret != 0) {
+               return ret;
        }
+
+       if (S_ISDIR(sbuf->st_ex_mode)) {
+               sbuf->st_ex_mode = S_IFDIR | S_IRWXU;
+       } else {
+               sbuf->st_ex_mode = S_IRWXU;
+       }
+       if (handle->conn->session_info != NULL) {
+               struct security_unix_token *utok;
+
+               utok = handle->conn->session_info->unix_token;
+               sbuf->st_ex_uid = utok->uid;
+               sbuf->st_ex_gid = utok->gid;
+       } else {
+               /*
+                * We have an artificial connection for dfs for example. It
+                * sucks, but the current uid/gid is the best we have.
+                */
+               sbuf->st_ex_uid = geteuid();
+               sbuf->st_ex_gid = getegid();
+       }
+
        return ret;
 }
 


-- 
Samba Shared Repository

Reply via email to