Print this page
NEX-16159 Time spent sharing SMB filesystems could be reduced by optimizing smb_getdataset for default mount points
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Reviewed by: Matt Barden <matt.barden@nexenta.com>
NEX-3981 bad pointer free causes crash in fksmbd
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Alek Pinchuk <alek@nexenta.com>
NEX-1456 Cannot receive incremental stream for dataset shared via SMB: destination dataset has been modified. part 1
SMB-153 Quota tab for the Share does not work

*** 19,29 **** * CDDL HEADER END */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2014 Nexenta Systems, Inc. All rights reserved. */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> --- 19,29 ---- * CDDL HEADER END */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2018 Nexenta Systems, Inc. All rights reserved. */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h>
*** 1081,1096 **** static uint32_t smb_quota_zfs_init(const char *path, smb_quota_zfs_handle_t *zfs_hdl) { char dataset[MAXPATHLEN]; - if (smb_getdataset(path, dataset, MAXPATHLEN) != 0) - return (NT_STATUS_INVALID_PARAMETER); - if ((zfs_hdl->z_lib = libzfs_init()) == NULL) return (NT_STATUS_INTERNAL_ERROR); zfs_hdl->z_fs = zfs_open(zfs_hdl->z_lib, dataset, ZFS_TYPE_DATASET); if (zfs_hdl->z_fs == NULL) { libzfs_fini(zfs_hdl->z_lib); return (NT_STATUS_ACCESS_DENIED); } --- 1081,1098 ---- static uint32_t smb_quota_zfs_init(const char *path, smb_quota_zfs_handle_t *zfs_hdl) { char dataset[MAXPATHLEN]; if ((zfs_hdl->z_lib = libzfs_init()) == NULL) return (NT_STATUS_INTERNAL_ERROR); + if (smb_getdataset(zfs_hdl->z_lib, path, dataset, MAXPATHLEN) != 0) { + libzfs_fini(zfs_hdl->z_lib); + return (NT_STATUS_INVALID_PARAMETER); + } + zfs_hdl->z_fs = zfs_open(zfs_hdl->z_lib, dataset, ZFS_TYPE_DATASET); if (zfs_hdl->z_fs == NULL) { libzfs_fini(zfs_hdl->z_lib); return (NT_STATUS_ACCESS_DENIED); }
*** 1213,1229 **** (void) remove(dir); return; } acl_text = acl_totext(existing_aclp, ACL_COMPACT_FMT); - acl_free(existing_aclp); if (acl_text == NULL) { (void) unlink(file); if (qdir_created) (void) remove(dir); return; } aclp = NULL; if (strcmp(acl_text, SMB_QUOTA_CNTRL_PERM) != 0) { if (acl_fromtext(SMB_QUOTA_CNTRL_PERM, &aclp) != 0) { free(acl_text); --- 1215,1232 ---- (void) remove(dir); return; } acl_text = acl_totext(existing_aclp, ACL_COMPACT_FMT); if (acl_text == NULL) { + acl_free(existing_aclp); (void) unlink(file); if (qdir_created) (void) remove(dir); return; } + acl_free(existing_aclp); aclp = NULL; if (strcmp(acl_text, SMB_QUOTA_CNTRL_PERM) != 0) { if (acl_fromtext(SMB_QUOTA_CNTRL_PERM, &aclp) != 0) { free(acl_text);