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