diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2013-11-01 15:37:04 +0100 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2013-11-01 15:43:57 +0100 |
commit | 782e09b9f829c46dcbcdb1afee5f892cd3b5e67c (patch) | |
tree | 1d283b7a87e95f7b071cc355587e9bf88f7cd14c /main/nfs-utils/0001-statd-exit-if-a-statd-is-already-running.patch | |
parent | b20d58f4e643d155ed97a164ecc89b56444c9a8f (diff) | |
download | aports-782e09b9f829c46dcbcdb1afee5f892cd3b5e67c.tar.bz2 aports-782e09b9f829c46dcbcdb1afee5f892cd3b5e67c.tar.xz |
main/nfs-utils: add some patches
Diffstat (limited to 'main/nfs-utils/0001-statd-exit-if-a-statd-is-already-running.patch')
-rw-r--r-- | main/nfs-utils/0001-statd-exit-if-a-statd-is-already-running.patch | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/main/nfs-utils/0001-statd-exit-if-a-statd-is-already-running.patch b/main/nfs-utils/0001-statd-exit-if-a-statd-is-already-running.patch new file mode 100644 index 0000000000..4e8be2fd43 --- /dev/null +++ b/main/nfs-utils/0001-statd-exit-if-a-statd-is-already-running.patch @@ -0,0 +1,126 @@ +From 342446a4a624d4ee8254af859bb7f1de6d268679 Mon Sep 17 00:00:00 2001 +From: Weston Andros Adamson <dros@netapp.com> +Date: Tue, 7 May 2013 11:25:29 -0400 +Subject: [PATCH] statd: exit if a statd is already running + +Moves nfs_probe_statd from mount to nfs support lib to share with statd. + +Acked-by: Chuck Lever <chuck.lever@oracle.com> +Signed-off-by: Weston Andros Adamson <dros@netapp.com> +Signed-off-by: Steve Dickson <steved@redhat.com> +--- + support/include/nfsrpc.h | 5 +++++ + support/nfs/getport.c | 22 ++++++++++++++++++++++ + utils/mount/network.c | 17 ----------------- + utils/statd/statd.c | 7 +++++++ + 4 files changed, 34 insertions(+), 17 deletions(-) + +diff --git a/support/include/nfsrpc.h b/support/include/nfsrpc.h +index a0b80e1..1bfae7a 100644 +--- a/support/include/nfsrpc.h ++++ b/support/include/nfsrpc.h +@@ -156,6 +156,11 @@ extern unsigned long nfs_pmap_getport(const struct sockaddr_in *, + const struct timeval *); + + /* ++ * Use nfs_pmap_getport to see if statd is running locally ++ */ ++extern int nfs_probe_statd(void); ++ ++/* + * Contact a remote RPC service to discover whether it is responding + * to requests. + */ +diff --git a/support/nfs/getport.c b/support/nfs/getport.c +index 3331ad4..081594c 100644 +--- a/support/nfs/getport.c ++++ b/support/nfs/getport.c +@@ -1102,3 +1102,25 @@ unsigned long nfs_pmap_getport(const struct sockaddr_in *sin, + + return port; + } ++ ++static const char *nfs_ns_pgmtbl[] = { ++ "status", ++ NULL, ++}; ++ ++/* ++ * nfs_probe_statd - use nfs_pmap_getport to see if statd is running locally ++ * ++ * Returns non-zero if statd is running locally. ++ */ ++int nfs_probe_statd(void) ++{ ++ struct sockaddr_in addr = { ++ .sin_family = AF_INET, ++ .sin_addr.s_addr = htonl(INADDR_LOOPBACK), ++ }; ++ rpcprog_t program = nfs_getrpcbyname(NSMPROG, nfs_ns_pgmtbl); ++ ++ return nfs_getport_ping((struct sockaddr *)(char *)&addr, sizeof(addr), ++ program, (rpcvers_t)1, IPPROTO_UDP); ++} +diff --git a/utils/mount/network.c b/utils/mount/network.c +index 4be48cd..e2cdcaf 100644 +--- a/utils/mount/network.c ++++ b/utils/mount/network.c +@@ -65,11 +65,6 @@ extern int nfs_mount_data_version; + extern char *progname; + extern int verbose; + +-static const char *nfs_ns_pgmtbl[] = { +- "status", +- NULL, +-}; +- + static const char *nfs_mnt_pgmtbl[] = { + "mount", + "mountd", +@@ -761,18 +756,6 @@ int probe_bothports(clnt_addr_t *mnt_server, clnt_addr_t *nfs_server) + &nfs_server->pmap); + } + +-static int nfs_probe_statd(void) +-{ +- struct sockaddr_in addr = { +- .sin_family = AF_INET, +- .sin_addr.s_addr = htonl(INADDR_LOOPBACK), +- }; +- rpcprog_t program = nfs_getrpcbyname(NSMPROG, nfs_ns_pgmtbl); +- +- return nfs_getport_ping(SAFE_SOCKADDR(&addr), sizeof(addr), +- program, (rpcvers_t)1, IPPROTO_UDP); +-} +- + /** + * start_statd - attempt to start rpc.statd + * +diff --git a/utils/statd/statd.c b/utils/statd/statd.c +index 652546c..8c51bcc 100644 +--- a/utils/statd/statd.c ++++ b/utils/statd/statd.c +@@ -28,6 +28,7 @@ + + #include "statd.h" + #include "nfslib.h" ++#include "nfsrpc.h" + #include "nsm.h" + + /* Socket operations */ +@@ -237,6 +238,12 @@ int main (int argc, char **argv) + /* Set hostname */ + MY_NAME = NULL; + ++ /* Refuse to start if another statd is running */ ++ if (nfs_probe_statd()) { ++ fprintf(stderr, "Statd service already running!\n"); ++ exit(1); ++ } ++ + /* Process command line switches */ + while ((arg = getopt_long(argc, argv, "h?vVFNH:dn:p:o:P:L", longopts, NULL)) != EOF) { + switch (arg) { +-- +1.8.3.2 + |