From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id DDAE0138359 for ; Fri, 25 Sep 2020 20:28:39 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 13492E082B; Fri, 25 Sep 2020 20:28:39 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id D3849E082B for ; Fri, 25 Sep 2020 20:28:38 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 3E9FD33C6B6 for ; Fri, 25 Sep 2020 20:28:37 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id E0143318 for ; Fri, 25 Sep 2020 20:28:35 +0000 (UTC) From: "Georgy Yakovlev" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Georgy Yakovlev" Message-ID: <1601065700.c10c708ba999cd9aa08aae373d4103522ad7d358.gyakovlev@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: sys-fs/zfs/, sys-fs/zfs/files/ X-VCS-Repository: repo/gentoo X-VCS-Files: sys-fs/zfs/files/2.0.0_rc2-exports-d-permissions.patch sys-fs/zfs/zfs-2.0.0_rc2-r1.ebuild sys-fs/zfs/zfs-2.0.0_rc2.ebuild X-VCS-Directories: sys-fs/zfs/ sys-fs/zfs/files/ X-VCS-Committer: gyakovlev X-VCS-Committer-Name: Georgy Yakovlev X-VCS-Revision: c10c708ba999cd9aa08aae373d4103522ad7d358 X-VCS-Branch: master Date: Fri, 25 Sep 2020 20:28:35 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 5f95e056-48d3-4ab3-8839-73c9e03864e2 X-Archives-Hash: 990a0e6914c0c32feaff243398002e44 commit: c10c708ba999cd9aa08aae373d4103522ad7d358 Author: Georgy Yakovlev gentoo org> AuthorDate: Fri Sep 25 20:24:26 2020 +0000 Commit: Georgy Yakovlev gentoo org> CommitDate: Fri Sep 25 20:28:20 2020 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c10c708b sys-fs/zfs: add exports.d patch Closes: https://bugs.gentoo.org/742503 Package-Manager: Portage-3.0.8, Repoman-3.0.1 Signed-off-by: Georgy Yakovlev gentoo.org> .../files/2.0.0_rc2-exports-d-permissions.patch | 189 +++++++++++++++++++++ ...fs-2.0.0_rc2.ebuild => zfs-2.0.0_rc2-r1.ebuild} | 5 +- 2 files changed, 193 insertions(+), 1 deletion(-) diff --git a/sys-fs/zfs/files/2.0.0_rc2-exports-d-permissions.patch b/sys-fs/zfs/files/2.0.0_rc2-exports-d-permissions.patch new file mode 100644 index 00000000000..4acaf465a7b --- /dev/null +++ b/sys-fs/zfs/files/2.0.0_rc2-exports-d-permissions.patch @@ -0,0 +1,189 @@ +From fe413a4d901a243d98cfef16ea330f7114a104ea Mon Sep 17 00:00:00 2001 +From: George Wilson +Date: Tue, 15 Sep 2020 22:57:16 -0400 +Subject: [PATCH] zpool command complains about /etc/exports.d + +If the /etc/exports.d directory does not exist, then we should only +create it when we're performing an action which already requires root +privileges. + +This commit moves the directory creation to the enable/disable code +path which ensures that we have the appropriate privileges. + +Signed-off-by: George Wilson +Closes #10785 +--- + lib/libshare/os/freebsd/nfs.c | 36 +++++++++++------- + lib/libshare/os/linux/nfs.c | 71 ++++++++++++++++++++--------------- + 2 files changed, 64 insertions(+), 43 deletions(-) + +diff --git a/lib/libshare/os/freebsd/nfs.c b/lib/libshare/os/freebsd/nfs.c +index 65f3b11bf9b..5951b9eafa2 100644 +--- a/lib/libshare/os/freebsd/nfs.c ++++ b/lib/libshare/os/freebsd/nfs.c +@@ -228,21 +228,33 @@ nfs_copy_entries(char *filename, const char *mountpoint) + int error = SA_OK; + char *line; + +- /* +- * If the file doesn't exist then there is nothing more +- * we need to do. +- */ + FILE *oldfp = fopen(ZFS_EXPORTS_FILE, "r"); +- if (oldfp == NULL) +- return (SA_OK); +- + FILE *newfp = fopen(filename, "w+"); ++ if (newfp == NULL) { ++ fprintf(stderr, "failed to open %s file: %s", filename, ++ strerror(errno)); ++ fclose(oldfp); ++ return (SA_SYSTEM_ERR); ++ } + fputs(FILE_HEADER, newfp); +- while ((line = zgetline(oldfp, mountpoint)) != NULL) +- fprintf(newfp, "%s\n", line); +- if (ferror(oldfp) != 0) { +- error = ferror(oldfp); ++ ++ /* ++ * The ZFS_EXPORTS_FILE may not exist yet. If that's the ++ * case then just write out the new file. ++ */ ++ if (oldfp != NULL) { ++ while ((line = zgetline(oldfp, mountpoint)) != NULL) ++ fprintf(newfp, "%s\n", line); ++ if (ferror(oldfp) != 0) { ++ error = ferror(oldfp); ++ } ++ if (fclose(oldfp) != 0) { ++ fprintf(stderr, "Unable to close file %s: %s\n", ++ filename, strerror(errno)); ++ error = error != 0 ? error : SA_SYSTEM_ERR; ++ } + } ++ + if (error == 0 && ferror(newfp) != 0) { + error = ferror(newfp); + } +@@ -252,8 +264,6 @@ nfs_copy_entries(char *filename, const char *mountpoint) + filename, strerror(errno)); + error = error != 0 ? error : SA_SYSTEM_ERR; + } +- fclose(oldfp); +- + return (error); + } + +diff --git a/lib/libshare/os/linux/nfs.c b/lib/libshare/os/linux/nfs.c +index a6a9b33d765..1efa321b7bc 100644 +--- a/lib/libshare/os/linux/nfs.c ++++ b/lib/libshare/os/linux/nfs.c +@@ -393,6 +393,14 @@ static char * + nfs_init_tmpfile(void) + { + char *tmpfile = NULL; ++ struct stat sb; ++ ++ if (stat(ZFS_EXPORTS_DIR, &sb) < 0 && ++ mkdir(ZFS_EXPORTS_DIR, 0755) < 0) { ++ fprintf(stderr, "failed to create %s: %s\n", ++ ZFS_EXPORTS_DIR, strerror(errno)); ++ return (NULL); ++ } + + if (asprintf(&tmpfile, "%s%s", ZFS_EXPORTS_FILE, ".XXXXXXXX") == -1) { + fprintf(stderr, "Unable to allocate temporary file\n"); +@@ -481,36 +489,49 @@ nfs_copy_entries(char *filename, const char *mountpoint) + size_t buflen = 0; + int error = SA_OK; + +- /* +- * If the file doesn't exist then there is nothing more +- * we need to do. +- */ + FILE *oldfp = fopen(ZFS_EXPORTS_FILE, "r"); +- if (oldfp == NULL) +- return (SA_OK); +- + FILE *newfp = fopen(filename, "w+"); ++ if (newfp == NULL) { ++ fprintf(stderr, "failed to open %s file: %s", filename, ++ strerror(errno)); ++ fclose(oldfp); ++ return (SA_SYSTEM_ERR); ++ } + fputs(FILE_HEADER, newfp); +- while ((getline(&buf, &buflen, oldfp)) != -1) { +- char *space = NULL; + +- if (buf[0] == '\n' || buf[0] == '#') +- continue; +- +- if ((space = strchr(buf, ' ')) != NULL) { +- int mountpoint_len = strlen(mountpoint); ++ /* ++ * The ZFS_EXPORTS_FILE may not exist yet. If that's the ++ * case then just write out the new file. ++ */ ++ if (oldfp != NULL) { ++ while (getline(&buf, &buflen, oldfp) != -1) { ++ char *space = NULL; + +- if (space - buf == mountpoint_len && +- strncmp(mountpoint, buf, mountpoint_len) == 0) { ++ if (buf[0] == '\n' || buf[0] == '#') + continue; ++ ++ if ((space = strchr(buf, ' ')) != NULL) { ++ int mountpoint_len = strlen(mountpoint); ++ ++ if (space - buf == mountpoint_len && ++ strncmp(mountpoint, buf, ++ mountpoint_len) == 0) { ++ continue; ++ } + } ++ fputs(buf, newfp); + } +- fputs(buf, newfp); +- } + +- if (oldfp != NULL && ferror(oldfp) != 0) { +- error = ferror(oldfp); ++ if (ferror(oldfp) != 0) { ++ error = ferror(oldfp); ++ } ++ if (fclose(oldfp) != 0) { ++ fprintf(stderr, "Unable to close file %s: %s\n", ++ filename, strerror(errno)); ++ error = error != 0 ? error : SA_SYSTEM_ERR; ++ } + } ++ + if (error == 0 && ferror(newfp) != 0) { + error = ferror(newfp); + } +@@ -521,8 +542,6 @@ nfs_copy_entries(char *filename, const char *mountpoint) + filename, strerror(errno)); + error = error != 0 ? error : SA_SYSTEM_ERR; + } +- fclose(oldfp); +- + return (error); + } + +@@ -701,13 +720,5 @@ static const sa_share_ops_t nfs_shareops = { + void + libshare_nfs_init(void) + { +- struct stat sb; +- + nfs_fstype = register_fstype("nfs", &nfs_shareops); +- +- if (stat(ZFS_EXPORTS_DIR, &sb) < 0 && +- mkdir(ZFS_EXPORTS_DIR, 0755) < 0) { +- fprintf(stderr, "failed to create %s: %s\n", +- ZFS_EXPORTS_DIR, strerror(errno)); +- } + } diff --git a/sys-fs/zfs/zfs-2.0.0_rc2.ebuild b/sys-fs/zfs/zfs-2.0.0_rc2-r1.ebuild similarity index 98% rename from sys-fs/zfs/zfs-2.0.0_rc2.ebuild rename to sys-fs/zfs/zfs-2.0.0_rc2-r1.ebuild index d2f00419b0c..1f9d81f16e6 100644 --- a/sys-fs/zfs/zfs-2.0.0_rc2.ebuild +++ b/sys-fs/zfs/zfs-2.0.0_rc2-r1.ebuild @@ -76,7 +76,10 @@ REQUIRED_USE=" RESTRICT="test" -PATCHES=( "${FILESDIR}/bash-completion-sudo.patch" ) +PATCHES=( + "${FILESDIR}/bash-completion-sudo.patch" + "${FILESDIR}/${PV}-exports-d-permissions.patch" +) pkg_setup() { if use kernel_linux && use test-suite; then