The branch, master has been updated via ff4c70e03ae lib: Fix error path memleaks in read_ea_list_entry() via dc84e98ed5c lib: Fix a comment via df219ed8185 smbd: Simplify smbd_do_qfsinfo() via 70b3699f8bd Fix whitespace via ff638743066 vfs: Slightly speed up stream_dir() via 0dfaa08ce38 vfs: Simplify stream_dir() via fca88879009 Modernize DEBUGs via 7e8bfe738a3 pam_winbind: Fix Bug 15771 from e0aab377bdc s3:winbindd: Remove unused set_routing_domain()
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit ff4c70e03aebd9c1b54741d28154468029f7e887 Author: Volker Lendecke <v...@samba.org> Date: Thu Dec 12 15:17:05 2024 +0100 lib: Fix error path memleaks in read_ea_list_entry() Don't leak the result on error Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> Autobuild-User(master): Volker Lendecke <v...@samba.org> Autobuild-Date(master): Wed Dec 18 09:30:33 UTC 2024 on atb-devel-224 commit dc84e98ed5c6ec977c678adceec025609bebb0a0 Author: Volker Lendecke <v...@samba.org> Date: Thu Dec 12 13:59:45 2024 +0100 lib: Fix a comment Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit df219ed8185a911542087ce8e6d779e4e133e1ee Author: Volker Lendecke <v...@samba.org> Date: Tue Dec 10 11:42:59 2024 +0100 smbd: Simplify smbd_do_qfsinfo() Do early returns, avoid else statements Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 70b3699f8bdfd95b40076f631af1335206ec2797 Author: Volker Lendecke <v...@samba.org> Date: Tue Dec 10 16:57:47 2024 +0100 Fix whitespace Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit ff6387430660848fe250a05dc0372a306938dabd Author: Volker Lendecke <v...@samba.org> Date: Mon Dec 9 10:01:19 2024 +0100 vfs: Slightly speed up stream_dir() lp_parm_bool() is a relatively expensive string-based operation. Do it only when needed. Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 0dfaa08ce3807c1dae324dff4312d79e8eb40539 Author: Volker Lendecke <v...@samba.org> Date: Mon Dec 9 08:09:53 2024 +0100 vfs: Simplify stream_dir() We know in advance how large "id_hex" is. Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit fca88879009c13e152d6b14535ee61f0ed506437 Author: Volker Lendecke <v...@samba.org> Date: Mon Dec 9 07:55:45 2024 +0100 Modernize DEBUGs Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 7e8bfe738a3d91b0724d57ed54acf40ebe026c14 Author: Volker Lendecke <v...@samba.org> Date: Mon Dec 16 17:49:43 2024 +0100 pam_winbind: Fix Bug 15771 Bug: https://bugzilla.samba.org/show_bug.cgi?id=15771 Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> ----------------------------------------------------------------------- Summary of changes: nsswitch/pam_winbind.c | 1 + source3/include/smb.h | 5 ++++- source3/include/trans2.h | 8 ++++---- source3/lib/util_ea.c | 20 +++++++++++--------- source3/lib/util_nttoken.c | 6 +++--- source3/modules/vfs_streams_depot.c | 36 +++++++++++++++--------------------- source3/smbd/smb2_trans2.c | 35 ++++++++++++++++++++--------------- 7 files changed, 58 insertions(+), 53 deletions(-) Changeset truncated at 500 lines: diff --git a/nsswitch/pam_winbind.c b/nsswitch/pam_winbind.c index 67f351c056f..e1581427856 100644 --- a/nsswitch/pam_winbind.c +++ b/nsswitch/pam_winbind.c @@ -2527,6 +2527,7 @@ static char* winbind_upn_to_username(struct pwb_context *ctx, /* Convert the UPN to a SID */ wbc_status = wbcCtxLookupName(ctx->wbc_ctx, domain, name, &sid, &type); + TALLOC_FREE(name); if (!WBC_ERROR_IS_OK(wbc_status)) { return NULL; } diff --git a/source3/include/smb.h b/source3/include/smb.h index 4cebe366346..2642e364d0a 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -607,7 +607,10 @@ struct ea_list { struct ea_struct ea; }; -/* EA names used internally in Samba. KEEP UP TO DATE with prohibited_ea_names in trans2.c !. */ +/* + * EA names used internally in Samba. KEEP UP TO DATE with + * samba_private_attr_name() in smb2_trans2.c !. + */ #define SAMBA_POSIX_INHERITANCE_EA_NAME "user.SAMBA_PAI" /* EA to use for DOS attributes */ #define SAMBA_XATTR_DOS_ATTRIB "user.DOSATTRIB" diff --git a/source3/include/trans2.h b/source3/include/trans2.h index 21b2a3588e8..4f6b228b753 100644 --- a/source3/include/trans2.h +++ b/source3/include/trans2.h @@ -1,4 +1,4 @@ -/* +/* Unix SMB/CIFS implementation. SMB transaction2 handling @@ -11,12 +11,12 @@ it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ @@ -208,7 +208,7 @@ Byte offset Type name description #define SMB_QUERY_FS_DEVICE_INFO 0x104 #define SMB_QUERY_FS_ATTRIBUTE_INFO 0x105 #if 0 -#define SMB_QUERY_FS_QUOTA_INFO +#define SMB_QUERY_FS_QUOTA_INFO #endif #define l2_vol_fdateCreation 0 diff --git a/source3/lib/util_ea.c b/source3/lib/util_ea.c index dd48e77e6f1..b0b6726c3ee 100644 --- a/source3/lib/util_ea.c +++ b/source3/lib/util_ea.c @@ -33,11 +33,11 @@ struct ea_list *read_ea_list_entry(TALLOC_CTX *ctx, const char *pdata, size_t da size_t converted_size; if (!eal) { - return NULL; + goto fail; } if (data_size < 6) { - return NULL; + goto fail; } eal->ea.flags = CVAL(pdata,0); @@ -45,24 +45,23 @@ struct ea_list *read_ea_list_entry(TALLOC_CTX *ctx, const char *pdata, size_t da val_len = SVAL(pdata,2); if (4 + namelen + 1 + val_len > data_size) { - return NULL; + goto fail; } /* Ensure the name is null terminated. */ if (pdata[namelen + 4] != '\0') { - return NULL; + goto fail; } if (!pull_ascii_talloc(ctx, &eal->ea.name, pdata + 4, &converted_size)) { - DEBUG(0,("read_ea_list_entry: pull_ascii_talloc failed: %s\n", - strerror(errno))); + DBG_ERR("pull_ascii_talloc failed: %s\n", strerror(errno)); } if (!eal->ea.name) { - return NULL; + goto fail; } eal->ea.value = data_blob_talloc(eal, NULL, (size_t)val_len + 1); if (!eal->ea.value.data) { - return NULL; + goto fail; } memcpy(eal->ea.value.data, pdata + 4 + namelen + 1, val_len); @@ -76,10 +75,13 @@ struct ea_list *read_ea_list_entry(TALLOC_CTX *ctx, const char *pdata, size_t da *pbytes_used = 4 + namelen + 1 + val_len; } - DEBUG(10,("read_ea_list_entry: read ea name %s\n", eal->ea.name)); + DBG_DEBUG("read ea name %s\n", eal->ea.name); dump_data(10, eal->ea.value.data, eal->ea.value.length); return eal; +fail: + TALLOC_FREE(eal); + return NULL; } /**************************************************************************** diff --git a/source3/lib/util_nttoken.c b/source3/lib/util_nttoken.c index 925b79c041c..8a69bb60876 100644 --- a/source3/lib/util_nttoken.c +++ b/source3/lib/util_nttoken.c @@ -1,4 +1,4 @@ -/* +/* * Unix SMB/CIFS implementation. * Authentication utility functions * Copyright (C) Andrew Tridgell 1992-1998 @@ -13,12 +13,12 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, see <http://www.gnu.org/licenses/>. */ diff --git a/source3/modules/vfs_streams_depot.c b/source3/modules/vfs_streams_depot.c index 566d34996c1..408ff02e559 100644 --- a/source3/modules/vfs_streams_depot.c +++ b/source3/modules/vfs_streams_depot.c @@ -158,19 +158,15 @@ static char *stream_dir(vfs_handle_struct *handle, SMB_STRUCT_STAT base_sbuf_tmp; char *tmp = NULL; uint8_t first, second; - char *id_hex; struct file_id id; uint8_t id_buf[16]; - bool check_valid; + char id_hex[sizeof(id_buf) * 2 + 1]; char *rootdir = NULL; struct smb_filename *rootdir_fname = NULL; struct smb_filename *tmp_fname = NULL; struct vfs_rename_how rhow = { .flags = 0, }; int ret; - check_valid = lp_parm_bool(SNUM(handle->conn), - "streams_depot", "check_valid", true); - rootdir = stream_rootdir(handle, talloc_tos()); if (rootdir == NULL) { @@ -223,18 +219,11 @@ static char *stream_dir(vfs_handle_struct *handle, first = hash & 0xff; second = (hash >> 8) & 0xff; - id_hex = hex_encode_talloc(talloc_tos(), id_buf, sizeof(id_buf)); - - if (id_hex == NULL) { - errno = ENOMEM; - goto fail; - } + hex_encode_buf(id_hex, id_buf, sizeof(id_buf)); result = talloc_asprintf(talloc_tos(), "%s/%2.2X/%2.2X/%s", rootdir, first, second, id_hex); - TALLOC_FREE(id_hex); - if (result == NULL) { errno = ENOMEM; return NULL; @@ -254,13 +243,18 @@ static char *stream_dir(vfs_handle_struct *handle, if (SMB_VFS_NEXT_STAT(handle, smb_fname_hash) == 0) { struct smb_filename *smb_fname_new = NULL; char *newname; - bool delete_lost; + bool check_valid, delete_lost; if (!S_ISDIR(smb_fname_hash->st.st_ex_mode)) { errno = EINVAL; goto fail; } + check_valid = lp_parm_bool(SNUM(handle->conn), + "streams_depot", + "check_valid", + true); + if (!check_valid || file_is_valid(handle, smb_fname)) { return result; @@ -277,9 +271,9 @@ static char *stream_dir(vfs_handle_struct *handle, "delete_lost", false); if (delete_lost) { - DEBUG(3, ("Someone has recreated a file under an " - "existing inode. Removing: %s\n", - smb_fname_hash->base_name)); + DBG_NOTICE("Someone has recreated a file under an " + "existing inode. Removing: %s\n", + smb_fname_hash->base_name); recursive_rmdir(talloc_tos(), handle->conn, smb_fname_hash); SMB_VFS_NEXT_UNLINKAT(handle, @@ -289,10 +283,10 @@ static char *stream_dir(vfs_handle_struct *handle, } else { newname = talloc_asprintf(talloc_tos(), "lost-%lu", random()); - DEBUG(3, ("Someone has recreated a file under an " - "existing inode. Renaming: %s to: %s\n", - smb_fname_hash->base_name, - newname)); + DBG_NOTICE("Someone has recreated a file under an " + "existing inode. Renaming: %s to: %s\n", + smb_fname_hash->base_name, + newname); if (newname == NULL) { errno = ENOMEM; goto fail; diff --git a/source3/smbd/smb2_trans2.c b/source3/smbd/smb2_trans2.c index 4df3cc0eab1..7ec1af751db 100644 --- a/source3/smbd/smb2_trans2.c +++ b/source3/smbd/smb2_trans2.c @@ -2474,25 +2474,30 @@ cBytesSector=%u, cUnitTotal=%u, cUnitAvail=%d\n", (unsigned int)bsize, (unsigned rc = SMB_VFS_STATVFS(conn, &smb_fname, &svfs); - if (!rc) { - data_len = 56; - SIVAL(pdata,0,svfs.OptimalTransferSize); - SIVAL(pdata,4,svfs.BlockSize); - SBIG_UINT(pdata,8,svfs.TotalBlocks); - SBIG_UINT(pdata,16,svfs.BlocksAvail); - SBIG_UINT(pdata,24,svfs.UserBlocksAvail); - SBIG_UINT(pdata,32,svfs.TotalFileNodes); - SBIG_UINT(pdata,40,svfs.FreeFileNodes); - SBIG_UINT(pdata,48,svfs.FsIdentifier); - DEBUG(5,("smbd_do_qfsinfo : SMB_QUERY_POSIX_FS_INFO successful\n")); #ifdef EOPNOTSUPP - } else if (rc == EOPNOTSUPP) { + if (rc == EOPNOTSUPP) { return NT_STATUS_INVALID_LEVEL; -#endif /* EOPNOTSUPP */ - } else { - DEBUG(0,("vfs_statvfs() failed for service [%s]\n",lp_servicename(talloc_tos(), lp_sub, SNUM(conn)))); + } +#endif + if (rc != 0) { + DBG_ERR("vfs_statvfs() failed for service " + "[%s]\n", + lp_servicename(talloc_tos(), + lp_sub, + SNUM(conn))); return NT_STATUS_DOS(ERRSRV, ERRerror); } + + data_len = 56; + PUSH_LE_U32(pdata, 0, svfs.OptimalTransferSize); + PUSH_LE_U32(pdata, 4, svfs.BlockSize); + PUSH_LE_U64(pdata, 8, svfs.TotalBlocks); + PUSH_LE_U64(pdata, 16, svfs.BlocksAvail); + PUSH_LE_U64(pdata, 24, svfs.UserBlocksAvail); + PUSH_LE_U64(pdata, 32, svfs.TotalFileNodes); + PUSH_LE_U64(pdata, 40, svfs.FreeFileNodes); + PUSH_LE_U64(pdata, 48, svfs.FsIdentifier); + DBG_INFO("SMB_QUERY_POSIX_FS_INFO successful\n"); break; } -- Samba Shared Repository