Compare commits
10 Commits
18a6069664
...
8e32a03f15
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e32a03f15 | ||
|
|
778abc8ace | ||
|
|
648d746c79 | ||
|
|
4da475f783 | ||
|
|
dfb097f032 | ||
|
|
39313d74ff | ||
|
|
65ef7ca891 | ||
|
|
6887026ab9 | ||
|
|
a5c328ae43 | ||
|
|
3f76f86e5d |
40
0003-export-fix-handling-of-error-from-match_fsid.patch
Normal file
40
0003-export-fix-handling-of-error-from-match_fsid.patch
Normal file
@ -0,0 +1,40 @@
|
||||
From 92a0f7d3cc7fc1206e0a763ab737f797b8946ca7 Mon Sep 17 00:00:00 2001
|
||||
From: NeilBrown <neilb@suse.de>
|
||||
Date: Wed, 25 Oct 2023 12:34:45 -0400
|
||||
Subject: [PATCH] export: fix handling of error from match_fsid()
|
||||
|
||||
If match_fsid() returns -1 we shouldn't assume that the path definitely
|
||||
doesn't match the fsid, though it might not.
|
||||
This is a similar situation to where an export is expected to be a mount
|
||||
point, but is found not to be one. So it can be handled the same way,
|
||||
by setting 'dev_missing'.
|
||||
This will only have an effect if no other path matched the fsid, which
|
||||
is what we want.
|
||||
|
||||
The current code results in nothing being exported if any export point,
|
||||
or any mount point beneath a crossmnt export point, fails a 'stat'
|
||||
request, which is too harsh.
|
||||
|
||||
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
---
|
||||
support/export/cache.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/support/export/cache.c b/support/export/cache.c
|
||||
index 19bbba5..e459502 100644
|
||||
--- a/support/export/cache.c
|
||||
+++ b/support/export/cache.c
|
||||
@@ -858,7 +858,8 @@ static void nfsd_fh(int f)
|
||||
case 0:
|
||||
continue;
|
||||
case -1:
|
||||
- goto out;
|
||||
+ dev_missing ++;
|
||||
+ continue;
|
||||
}
|
||||
if (is_ipaddr_client(dom)
|
||||
&& !ipaddr_client_matches(exp, ai))
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
@ -1,44 +0,0 @@
|
||||
From c7e995c8a4a3985d1b315814d29e8d9211d6dc5e Mon Sep 17 00:00:00 2001
|
||||
From: lixiaokeng <lixiaokeng@huawei.com>
|
||||
Date: Tue, 30 Nov 2021 16:38:02 +0800
|
||||
Subject: [PATCH 1/2] fix coredump in bl_add_disk
|
||||
|
||||
The serial->data is not malloced separately, so it can't be freed.
|
||||
Just free(serial).
|
||||
|
||||
Signed-off-by: Lixiaokeng <lixiaokeng@huawei.com>
|
||||
---
|
||||
utils/blkmapd/device-discovery.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/utils/blkmapd/device-discovery.c b/utils/blkmapd/device-discovery.c
|
||||
index f5f9b10..2c50205 100644
|
||||
--- a/utils/blkmapd/device-discovery.c
|
||||
+++ b/utils/blkmapd/device-discovery.c
|
||||
@@ -188,7 +188,6 @@ static void bl_add_disk(char *filepath)
|
||||
|
||||
if (disk && diskpath) {
|
||||
if (serial) {
|
||||
- free(serial->data);
|
||||
free(serial);
|
||||
}
|
||||
return;
|
||||
@@ -229,7 +228,6 @@ static void bl_add_disk(char *filepath)
|
||||
disk->valid_path = path;
|
||||
}
|
||||
if (serial) {
|
||||
- free(serial->data);
|
||||
free(serial);
|
||||
}
|
||||
}
|
||||
@@ -242,7 +240,6 @@ static void bl_add_disk(char *filepath)
|
||||
free(path);
|
||||
}
|
||||
if (serial) {
|
||||
- free(serial->data);
|
||||
free(serial);
|
||||
}
|
||||
return;
|
||||
--
|
||||
2.26.1.windows.1
|
||||
|
||||
76
0004-export-move-cache_open-before-workers-are-forked.patch
Normal file
76
0004-export-move-cache_open-before-workers-are-forked.patch
Normal file
@ -0,0 +1,76 @@
|
||||
From e115a6edfaa07203c6d6d40eba9e4f097efe0cf2 Mon Sep 17 00:00:00 2001
|
||||
From: NeilBrown <neilb@suse.de>
|
||||
Date: Wed, 25 Oct 2023 12:40:24 -0400
|
||||
Subject: [PATCH] export: move cache_open() before workers are forked.
|
||||
|
||||
If each worker has a separate open on a cache channel, then each worker
|
||||
will potentially receive every upcall request resulting in duplicated
|
||||
work.
|
||||
|
||||
A worker will only not see a request that another worker sees if that
|
||||
other worker answers the request before this worker gets a chance to
|
||||
read it.
|
||||
|
||||
To avoid duplicate effort between threads and so get maximum benefit
|
||||
from multiple threads, open the cache channels before forking.
|
||||
|
||||
Note that the kernel provides locking so that only one thread can be
|
||||
reading to writing to any channel at any given moment.
|
||||
|
||||
Fixes: 5fc3bac9e0c3 ("mountd: Ensure we don't share cache file descriptors among processes.")
|
||||
Signed-off-by: NeilBrown <neilb@suse.de>
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
---
|
||||
utils/exportd/exportd.c | 8 ++++++--
|
||||
utils/mountd/mountd.c | 8 ++++++--
|
||||
2 files changed, 12 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/utils/exportd/exportd.c b/utils/exportd/exportd.c
|
||||
index 2dd12cb..6f86644 100644
|
||||
--- a/utils/exportd/exportd.c
|
||||
+++ b/utils/exportd/exportd.c
|
||||
@@ -289,12 +289,16 @@ main(int argc, char **argv)
|
||||
else if (num_threads > MAX_THREADS)
|
||||
num_threads = MAX_THREADS;
|
||||
|
||||
+ /* Open cache channel files BEFORE forking so each upcall is
|
||||
+ * only handled by one thread. Kernel provides locking for both
|
||||
+ * read and write.
|
||||
+ */
|
||||
+ cache_open();
|
||||
+
|
||||
if (num_threads > 1)
|
||||
fork_workers();
|
||||
|
||||
|
||||
- /* Open files now to avoid sharing descriptors among forked processes */
|
||||
- cache_open();
|
||||
v4clients_init();
|
||||
|
||||
/* Process incoming upcalls */
|
||||
diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c
|
||||
index bcf749f..f9c62cd 100644
|
||||
--- a/utils/mountd/mountd.c
|
||||
+++ b/utils/mountd/mountd.c
|
||||
@@ -916,12 +916,16 @@ main(int argc, char **argv)
|
||||
else if (num_threads > MAX_THREADS)
|
||||
num_threads = MAX_THREADS;
|
||||
|
||||
+ /* Open cache channel files BEFORE forking so each upcall is
|
||||
+ * only handled by one thread. Kernel provides locking for both
|
||||
+ * read and write.
|
||||
+ */
|
||||
+ cache_open();
|
||||
+
|
||||
if (num_threads > 1)
|
||||
fork_workers();
|
||||
|
||||
nfsd_path_init();
|
||||
- /* Open files now to avoid sharing descriptors among forked processes */
|
||||
- cache_open();
|
||||
v4clients_init();
|
||||
|
||||
xlog(L_NOTICE, "Version " VERSION " starting");
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
@ -1,35 +0,0 @@
|
||||
From 576d3569c025e829e4ce432103532fcf63808d39 Mon Sep 17 00:00:00 2001
|
||||
From: zhanchengbin <zhanchengbin1@huawei.com>
|
||||
Date: Tue, 6 Sep 2022 09:49:30 +0800
|
||||
Subject: [PATCH] nfs-blkmaped: Fix the error status when nfs_blkmapd stops
|
||||
|
||||
The systemctl stop nfs-blkmap.service will sends the SIGTERM signal
|
||||
to the nfs-blkmap.service first.If the process fails to be stopped,
|
||||
it sends the SIGKILL signal again to kill the process.
|
||||
However, exit(1) is executed in the SIGTERM processing function of
|
||||
nfs-blkmap.service. As a result, systemd receives an error message
|
||||
indicating that nfs-blkmap.service failed.
|
||||
"Active: failed" is displayed when the systemctl status
|
||||
nfs-blkmap.service command is executed.
|
||||
|
||||
Signed-off-by: zhanchengbin <zhanchengbin1@huawei.com>
|
||||
---
|
||||
utils/blkmapd/device-discovery.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/utils/blkmapd/device-discovery.c b/utils/blkmapd/device-discovery.c
|
||||
index 77ebe73..8ca548c 100644
|
||||
--- a/utils/blkmapd/device-discovery.c
|
||||
+++ b/utils/blkmapd/device-discovery.c
|
||||
@@ -462,7 +462,7 @@ static void sig_die(int signal)
|
||||
unlink(PID_FILE);
|
||||
}
|
||||
BL_LOG_ERR("exit on signal(%d)\n", signal);
|
||||
- exit(1);
|
||||
+ exit(0);
|
||||
}
|
||||
static void usage(void)
|
||||
{
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
116
0005-gssd-fix-handling-DNS-lookup-failure.patch
Normal file
116
0005-gssd-fix-handling-DNS-lookup-failure.patch
Normal file
@ -0,0 +1,116 @@
|
||||
From 75b04a9bff709a49f55326b439851822dd630be6 Mon Sep 17 00:00:00 2001
|
||||
From: Olga Kornievskaia <kolga@netapp.com>
|
||||
Date: Mon, 16 Oct 2023 11:45:54 -0400
|
||||
Subject: [PATCH] gssd: fix handling DNS lookup failure
|
||||
|
||||
When the kernel does its first ever lookup for a given server ip it
|
||||
sends down info for server, protocol, etc. On the gssd side as it
|
||||
scans the pipefs structure and sees a new entry it reads that info
|
||||
and creates a clp_info structure. At that time it also does
|
||||
a DNS lookup of the provided ip to name using getnameinfo(),
|
||||
this is saved in clp->servername for all other upcalls that is
|
||||
down under that directory.
|
||||
|
||||
If this 1st getnameinfo() results in a failed resolution for
|
||||
whatever reason (a temporary DNS resolution problem), this cause
|
||||
of all other future upcalls to fail.
|
||||
|
||||
As a fix, this patch proposed to (1) save the server info that's
|
||||
passed only in the initial pipefs new entry creation in the
|
||||
clp_info structure, then (2) for the upcalls, if clp->servername
|
||||
is NULL, then do the DNS lookup again and set all the needed
|
||||
clp_info fields upon successful resolution.
|
||||
|
||||
Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
---
|
||||
utils/gssd/gssd.c | 41 +++++++++++++++++++++++++++++++++++++++++
|
||||
utils/gssd/gssd.h | 6 ++++++
|
||||
2 files changed, 47 insertions(+)
|
||||
|
||||
diff --git a/utils/gssd/gssd.c b/utils/gssd/gssd.c
|
||||
index 833d8e0..ca9b326 100644
|
||||
--- a/utils/gssd/gssd.c
|
||||
+++ b/utils/gssd/gssd.c
|
||||
@@ -365,6 +365,12 @@ gssd_read_service_info(int dirfd, struct clnt_info *clp)
|
||||
|
||||
fail:
|
||||
printerr(0, "ERROR: failed to parse %s/info\n", clp->relpath);
|
||||
+ clp->upcall_address = strdup(address);
|
||||
+ clp->upcall_port = strdup(port);
|
||||
+ clp->upcall_program = program;
|
||||
+ clp->upcall_vers = version;
|
||||
+ clp->upcall_protoname = strdup(protoname);
|
||||
+ clp->upcall_service = strdup(service);
|
||||
free(servername);
|
||||
free(protoname);
|
||||
clp->servicename = NULL;
|
||||
@@ -408,6 +414,16 @@ gssd_free_client(struct clnt_info *clp)
|
||||
free(clp->servicename);
|
||||
free(clp->servername);
|
||||
free(clp->protocol);
|
||||
+ if (!clp->servername) {
|
||||
+ if (clp->upcall_address)
|
||||
+ free(clp->upcall_address);
|
||||
+ if (clp->upcall_port)
|
||||
+ free(clp->upcall_port);
|
||||
+ if (clp->upcall_protoname)
|
||||
+ free(clp->upcall_protoname);
|
||||
+ if (clp->upcall_service)
|
||||
+ free(clp->upcall_service);
|
||||
+ }
|
||||
free(clp);
|
||||
}
|
||||
|
||||
@@ -446,6 +462,31 @@ gssd_clnt_gssd_cb(int UNUSED(fd), short UNUSED(which), void *data)
|
||||
{
|
||||
struct clnt_info *clp = data;
|
||||
|
||||
+ /* if there was a failure to translate IP to name for this server,
|
||||
+ * try again
|
||||
+ */
|
||||
+ if (!clp->servername) {
|
||||
+ if (!gssd_addrstr_to_sockaddr((struct sockaddr *)&clp->addr,
|
||||
+ clp->upcall_address, clp->upcall_port ?
|
||||
+ clp->upcall_port : "")) {
|
||||
+ goto do_upcall;
|
||||
+ }
|
||||
+ clp->servername = gssd_get_servername(clp->upcall_address,
|
||||
+ (struct sockaddr *)&clp->addr, clp->upcall_address);
|
||||
+ if (!clp->servername)
|
||||
+ goto do_upcall;
|
||||
+
|
||||
+ if (asprintf(&clp->servicename, "%s@%s", clp->upcall_service,
|
||||
+ clp->servername) < 0) {
|
||||
+ free(clp->servername);
|
||||
+ clp->servername = NULL;
|
||||
+ goto do_upcall;
|
||||
+ }
|
||||
+ clp->prog = clp->upcall_program;
|
||||
+ clp->vers = clp->upcall_vers;
|
||||
+ clp->protocol = strdup(clp->upcall_protoname);
|
||||
+ }
|
||||
+do_upcall:
|
||||
handle_gssd_upcall(clp);
|
||||
}
|
||||
|
||||
diff --git a/utils/gssd/gssd.h b/utils/gssd/gssd.h
|
||||
index 519dc43..4e070ed 100644
|
||||
--- a/utils/gssd/gssd.h
|
||||
+++ b/utils/gssd/gssd.h
|
||||
@@ -86,6 +86,12 @@ struct clnt_info {
|
||||
int gssd_fd;
|
||||
struct event *gssd_ev;
|
||||
struct sockaddr_storage addr;
|
||||
+ char *upcall_address;
|
||||
+ char *upcall_port;
|
||||
+ int upcall_program;
|
||||
+ int upcall_vers;
|
||||
+ char *upcall_protoname;
|
||||
+ char *upcall_service;
|
||||
};
|
||||
|
||||
struct clnt_upcall_info {
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
@ -1,94 +0,0 @@
|
||||
From 9565ab64e60f8282967e138f43c6057562dc5c27 Mon Sep 17 00:00:00 2001
|
||||
From: zhanchengbin <zhanchengbin1@huawei.com>
|
||||
Date: Sat, 19 Nov 2022 11:50:07 -0500
|
||||
Subject: [PATCH] nfs-blkmapd: PID file read by systemd failed
|
||||
|
||||
When started nfs-blkmap.service, the PID file can't be opened, The
|
||||
cause is that the child process does not create the PID file before
|
||||
the systemd reads the PID file.
|
||||
|
||||
Adding "ExecStartPost=/bin/sleep 0.1" to
|
||||
/usr/lib/systemd/system/nfs-blkmap.service will probably solve this
|
||||
problem, However, there is no guarantee that the above solutions are
|
||||
effective under high cpu pressure.So replace the daemon function with
|
||||
the fork function, and put the behavior of creating the PID file in
|
||||
the parent process to solve the above problems.
|
||||
|
||||
Signed-off-by: zhanchengbin <zhanchengbin1@huawei.com>
|
||||
Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
---
|
||||
utils/blkmapd/device-discovery.c | 48 ++++++++++++++++++++++++++--------------
|
||||
1 file changed, 32 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/utils/blkmapd/device-discovery.c b/utils/blkmapd/device-discovery.c
|
||||
index bd89059..a565fdb 100644
|
||||
--- a/utils/blkmapd/device-discovery.c
|
||||
+++ b/utils/blkmapd/device-discovery.c
|
||||
@@ -504,28 +504,44 @@ int main(int argc, char **argv)
|
||||
if (fg) {
|
||||
openlog("blkmapd", LOG_PERROR, 0);
|
||||
} else {
|
||||
- if (daemon(0, 0) != 0) {
|
||||
- fprintf(stderr, "Daemonize failed\n");
|
||||
- exit(1);
|
||||
+ pid_t pid = fork();
|
||||
+ if (pid < 0) {
|
||||
+ BL_LOG_ERR("fork error\n");
|
||||
+ exit(1);
|
||||
+ } else if (pid != 0) {
|
||||
+ pidfd = open(PID_FILE, O_WRONLY | O_CREAT, 0644);
|
||||
+ if (pidfd < 0) {
|
||||
+ BL_LOG_ERR("Create pid file %s failed\n", PID_FILE);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ if (lockf(pidfd, F_TLOCK, 0) < 0) {
|
||||
+ BL_LOG_ERR("Already running; Exiting!");
|
||||
+ close(pidfd);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+ if (ftruncate(pidfd, 0) < 0)
|
||||
+ BL_LOG_ERR("ftruncate on %s failed: m\n", PID_FILE);
|
||||
+ sprintf(pidbuf, "%d\n", pid);
|
||||
+ if (write(pidfd, pidbuf, strlen(pidbuf)) != (ssize_t)strlen(pidbuf))
|
||||
+ BL_LOG_ERR("write on %s failed: m\n", PID_FILE);
|
||||
+ exit(0);
|
||||
+ }
|
||||
+
|
||||
+ (void)setsid();
|
||||
+ if (chdir("/")) {
|
||||
+ BL_LOG_ERR("chdir error\n");
|
||||
+ }
|
||||
+ int fd = open("/dev/null", O_RDWR, 0);
|
||||
+ if (fd >= 0) {
|
||||
+ (void)dup2(fd, STDIN_FILENO);
|
||||
+ (void)dup2(fd, STDOUT_FILENO);
|
||||
+ (void)dup2(fd, STDERR_FILENO);
|
||||
+
|
||||
+ (void)close(fd);
|
||||
}
|
||||
|
||||
openlog("blkmapd", LOG_PID, 0);
|
||||
- pidfd = open(PID_FILE, O_WRONLY | O_CREAT, 0644);
|
||||
- if (pidfd < 0) {
|
||||
- BL_LOG_ERR("Create pid file %s failed\n", PID_FILE);
|
||||
- exit(1);
|
||||
- }
|
||||
-
|
||||
- if (lockf(pidfd, F_TLOCK, 0) < 0) {
|
||||
- BL_LOG_ERR("Already running; Exiting!");
|
||||
- close(pidfd);
|
||||
- exit(1);
|
||||
- }
|
||||
- if (ftruncate(pidfd, 0) < 0)
|
||||
- BL_LOG_WARNING("ftruncate on %s failed: m\n", PID_FILE);
|
||||
- sprintf(pidbuf, "%d\n", getpid());
|
||||
- if (write(pidfd, pidbuf, strlen(pidbuf)) != (ssize_t)strlen(pidbuf))
|
||||
- BL_LOG_WARNING("write on %s failed: m\n", PID_FILE);
|
||||
}
|
||||
|
||||
signal(SIGINT, sig_die);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
29
0006-nfsidmap-fix-a-memory-leak.patch
Normal file
29
0006-nfsidmap-fix-a-memory-leak.patch
Normal file
@ -0,0 +1,29 @@
|
||||
From 131ec613bab84b7894e428375cc360bb82a336a3 Mon Sep 17 00:00:00 2001
|
||||
From: Steve Dickson <steved@redhat.com>
|
||||
Date: Tue, 23 Jul 2024 12:06:28 -0400
|
||||
Subject: [PATCH] nfsidmap: Fix a memory leak
|
||||
|
||||
Reported-by: Zhang Yaqi <zhangyaqi@kylinos.cn>
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
Reference:https://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commit;h=131ec613bab84b7894e428375cc360bb82a336a3
|
||||
Conflict:no
|
||||
---
|
||||
support/nfsidmap/umich_ldap.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/support/nfsidmap/umich_ldap.c b/support/nfsidmap/umich_ldap.c
|
||||
index 1aa2af4..0f88ba4 100644
|
||||
--- a/support/nfsidmap/umich_ldap.c
|
||||
+++ b/support/nfsidmap/umich_ldap.c
|
||||
@@ -200,6 +200,7 @@ static int set_krb5_ccname(const char *krb5_ccache_name)
|
||||
IDMAP_LOG(5, ("Failed to set creds cache for kerberos, err(%d)",
|
||||
retval));
|
||||
}
|
||||
+ free(env);
|
||||
#endif /* else HAVE_GSS_KRB5_CCACHE_NAME */
|
||||
out:
|
||||
return retval;
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
@ -0,0 +1,39 @@
|
||||
From 92995e0d38dc00e930c562cf936220f83c09d082 Mon Sep 17 00:00:00 2001
|
||||
From: Paulo Andrade <pandrade@redhat.com>
|
||||
Date: Tue, 23 Jul 2024 12:03:30 -0400
|
||||
Subject: [PATCH] rpc-gssd.service has status failed (due to rpc.gssd segfault)
|
||||
|
||||
Ensure strings are not NULL before doing a strdup() in error path.
|
||||
|
||||
Fixes: https://issues.redhat.com/browse/RHEL-43286
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
Reference:https://git.linux-nfs.org/?p=steved/nfs-utils.git;a=commit;h=92995e0d38dc00e930c562cf936220f83c09d082
|
||||
Conflict:no
|
||||
---
|
||||
utils/gssd/gssd.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/utils/gssd/gssd.c b/utils/gssd/gssd.c
|
||||
index d7a2822..01ce7d1 100644
|
||||
--- a/utils/gssd/gssd.c
|
||||
+++ b/utils/gssd/gssd.c
|
||||
@@ -365,12 +365,12 @@ gssd_read_service_info(int dirfd, struct clnt_info *clp)
|
||||
|
||||
fail:
|
||||
printerr(0, "ERROR: failed to parse %s/info\n", clp->relpath);
|
||||
- clp->upcall_address = strdup(address);
|
||||
- clp->upcall_port = strdup(port);
|
||||
+ clp->upcall_address = address ? strdup(address) : NULL;
|
||||
+ clp->upcall_port = port ? strdup(port) : NULL;
|
||||
clp->upcall_program = program;
|
||||
clp->upcall_vers = version;
|
||||
- clp->upcall_protoname = strdup(protoname);
|
||||
- clp->upcall_service = strdup(service);
|
||||
+ clp->upcall_protoname = protoname ? strdup(protoname) : NULL;
|
||||
+ clp->upcall_service = service ? strdup(service) : NULL;
|
||||
free(servername);
|
||||
free(protoname);
|
||||
clp->servicename = NULL;
|
||||
--
|
||||
1.8.3.1
|
||||
32
0008-fixed-a-regression-in-the-junction-code.patch
Normal file
32
0008-fixed-a-regression-in-the-junction-code.patch
Normal file
@ -0,0 +1,32 @@
|
||||
From 7916134e5d9b1641effd3b6d964c806a09cfdcee Mon Sep 17 00:00:00 2001
|
||||
From: Steve Dickson <steved@redhat.com>
|
||||
Date: Thu, 10 Aug 2023 11:57:39 -0400
|
||||
Subject: [PATCH] Fixed a regression in the junction code
|
||||
|
||||
commit cdbef4e9 created a regression in the
|
||||
in the junction code by adding a O_PATH flag
|
||||
to the open() in junction_open_path()
|
||||
|
||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2213669
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
---
|
||||
support/junction/junction.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/support/junction/junction.c b/support/junction/junction.c
|
||||
index 0628bb0..c1ec8ff 100644
|
||||
--- a/support/junction/junction.c
|
||||
+++ b/support/junction/junction.c
|
||||
@@ -63,7 +63,7 @@ junction_open_path(const char *pathname, int *fd)
|
||||
if (pathname == NULL || fd == NULL)
|
||||
return FEDFS_ERR_INVAL;
|
||||
|
||||
- tmp = open(pathname, O_PATH|O_DIRECTORY);
|
||||
+ tmp = open(pathname, O_DIRECTORY);
|
||||
if (tmp == -1) {
|
||||
switch (errno) {
|
||||
case EPERM:
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -0,0 +1,55 @@
|
||||
From 90a23f7c6343bcb1b69c93ceccc14cc06e14d958 Mon Sep 17 00:00:00 2001
|
||||
From: Aram Akhavan <github@aram.nubmail.ca>
|
||||
Date: Sat, 15 Jul 2023 13:21:04 -0400
|
||||
Subject: [PATCH] libnfsidmap: try to get the domain directly from hostname if
|
||||
the DNS lookup fails and always show the log message if the domain can't be
|
||||
determined
|
||||
|
||||
In nfs4_init_name_mapping(), if no domain is specified in the config file, the hostname will be looked up in DNS, and the domain extracted from that.
|
||||
If DNS resolution isn't up at this time (i.e. on idmapd startup), the hardcoded domain in IDMAPD_DEFAULT_DOMAIN is used. This will break id mapping
|
||||
for anyone who doesn't happen to use "localdomain". Previously, the log message indicating this has happened requires -v to be passed, so the
|
||||
"failure" was silent by default.
|
||||
|
||||
Signed-off-by: Aram Akhavan <github@aram.nubmail.ca>
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
---
|
||||
support/nfsidmap/libnfsidmap.c | 16 +++++++++++-----
|
||||
1 file changed, 11 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/support/nfsidmap/libnfsidmap.c b/support/nfsidmap/libnfsidmap.c
|
||||
index 0a912e5..1db24d1 100644
|
||||
--- a/support/nfsidmap/libnfsidmap.c
|
||||
+++ b/support/nfsidmap/libnfsidmap.c
|
||||
@@ -219,10 +219,16 @@ static int domain_from_dns(char **domain)
|
||||
|
||||
if (gethostname(hname, sizeof(hname)) == -1)
|
||||
return -1;
|
||||
- if ((he = gethostbyname(hname)) == NULL)
|
||||
- return -1;
|
||||
- if ((c = strchr(he->h_name, '.')) == NULL || *++c == '\0')
|
||||
- return -1;
|
||||
+ if ((he = gethostbyname(hname)) == NULL) {
|
||||
+ IDMAP_LOG(1, ("libnfsidmap: DNS lookup of hostname failed. Attempting to use domain from hostname as is."));
|
||||
+ if ((c = strchr(hname, '.')) == NULL || *++c == '\0')
|
||||
+ return -1;
|
||||
+ }
|
||||
+ else {
|
||||
+ if ((c = strchr(he->h_name, '.')) == NULL || *++c == '\0')
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Query DNS to see if the _nfsv4idmapdomain TXT record exists
|
||||
* If so use it...
|
||||
@@ -387,7 +393,7 @@ int nfs4_init_name_mapping(char *conffile)
|
||||
dflt = 1;
|
||||
ret = domain_from_dns(&default_domain);
|
||||
if (ret) {
|
||||
- IDMAP_LOG(1, ("libnfsidmap: Unable to determine "
|
||||
+ IDMAP_LOG(0, ("libnfsidmap: Unable to determine "
|
||||
"the NFSv4 domain; Using '%s' as the NFSv4 domain "
|
||||
"which means UIDs will be mapped to the 'Nobody-User' "
|
||||
"user defined in %s",
|
||||
--
|
||||
2.33.0
|
||||
|
||||
Binary file not shown.
BIN
nfs-utils-2.6.3.tar.xz
Normal file
BIN
nfs-utils-2.6.3.tar.xz
Normal file
Binary file not shown.
@ -3,7 +3,7 @@
|
||||
%global _statdpath /var/lib/nfs/statd
|
||||
|
||||
Name: nfs-utils
|
||||
Version: 2.6.2
|
||||
Version: 2.6.3
|
||||
Release: 3
|
||||
Epoch: 2
|
||||
Summary: The Linux NFS userland utility package
|
||||
@ -15,9 +15,14 @@ Source0: https://www.kernel.org/pub/linux/utils/nfs-utils/%{version}/%{name}-%{v
|
||||
Patch0: 0000-systemd-idmapd-require-rpc-pipefs.patch
|
||||
Patch1: 0001-correct-the-statd-path-in-man.patch
|
||||
Patch2: 0002-nfs-utils-set-use-gss-proxy-1-to-enable-gss-proxy-by.patch
|
||||
Patch3: 0003-fix-coredump-in-bl_add_disk.patch
|
||||
Patch4: 0004-nfs-blkmaped-Fix-the-error-status-when-nfs_blkmapd-s.patch
|
||||
Patch5: 0005-nfs-blkmapd-PID-file-read-by-systemd-failed.patch
|
||||
Patch3: 0003-export-fix-handling-of-error-from-match_fsid.patch
|
||||
Patch4: 0004-export-move-cache_open-before-workers-are-forked.patch
|
||||
Patch5: 0005-gssd-fix-handling-DNS-lookup-failure.patch
|
||||
Patch6: 0006-nfsidmap-fix-a-memory-leak.patch
|
||||
Patch7: 0007-rpc-gssd-service-has-status-failed-due-to-segfault.patch
|
||||
Patch8: 0008-fixed-a-regression-in-the-junction-code.patch
|
||||
Patch9: 0009-libnfsidmap-try-to-get-the-domain-directly-from-host.patch
|
||||
|
||||
BuildRequires: libevent-devel,libcap-devel, libtirpc-devel libblkid-devel
|
||||
BuildRequires: krb5-libs >= 1.4 autoconf >= 2.57 openldap-devel >= 2.2
|
||||
BuildRequires: automake, libtool, gcc, device-mapper-devel
|
||||
@ -237,8 +242,8 @@ fi
|
||||
%dir %attr(700,rpcuser,rpcuser) %{_sharedstatedir}/nfs/statd/sm
|
||||
%dir %attr(700,rpcuser,rpcuser) %{_sharedstatedir}/nfs/statd/sm.bak
|
||||
%ghost %attr(644,rpcuser,rpcuser) %{_statdpath}/state
|
||||
%attr(0600,root,root) %config(noreplace) /usr/lib/modprobe.d/50-nfs.conf
|
||||
%{_libexecdir}/nfsrahead
|
||||
%{_udevrulesdir}/60-nfs.rules
|
||||
%{_udevrulesdir}/99-nfs.rules
|
||||
%attr(4755,root,root) /sbin/mount.nfs
|
||||
/sbin/{rpc.statd,nfsdcltrack,osd_login,mount.nfs4,umount.*,nfsdcld}
|
||||
@ -289,6 +294,21 @@ fi
|
||||
%{_mandir}/*/*
|
||||
|
||||
%changelog
|
||||
* Mon Nov 18 2024 zhangjian <zhangjian496@huawei.com> - 2:2.6.3-3
|
||||
- backport bugfix patches from community
|
||||
|
||||
* Tue Sep 10 2024 zhangjian <zhangjian496@huawei.com> - 2:2.6.3-2
|
||||
- backport bugfix patches from community
|
||||
|
||||
* Wed Jan 10 2024 wuguanghao <wuguanghao3@huawei.com> - 2:2.6.3-1
|
||||
- upgrade version to 2.6.3
|
||||
|
||||
* Tue Dec 19 2023 wuguanghao <wuguanghao3@huawei.com> - 2:2.6.2-5
|
||||
- backport bugfix patches from community
|
||||
|
||||
* Wed Mar 22 2023 wuguanghao <wuguanghao3@huawei.com> - 2:2.6.2-4
|
||||
- backport patches from community
|
||||
|
||||
* Mon Nov 21 2022 fangchuang <fangchuangchuang@huawei.com> - 2:2.6.2-3
|
||||
- nfs-blkmapd: PID file read by systemd failed
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user