generic-poky/meta/recipes-devtools/unfs-server/unfs-server-2.1+2.2beta47/017-wrs-dynamic-rpc.patch

264 lines
7.9 KiB
Diff

Upstream-Status: Inappropriate [other]
Upstream is not making further releases of this software.
Signed-off-by: Scott Garman <scott.a.garman@intel.com>
# Add the ability to choose alternate RPC ports at runtime and disable
# security so that it can run as a userland process
# Patch origin: Wind River
Index: nfs-server-2.2beta47/auth_init.c
===================================================================
--- nfs-server-2.2beta47.orig/auth_init.c
+++ nfs-server-2.2beta47/auth_init.c
@@ -409,6 +409,7 @@ auth_init(char *fname)
fname = EXPORTSFILE;
auth_file = fname; /* Save for re-initialization */
+#ifdef ROOT_LEVEL_SECURITY
/* Check protection of exports file. */
switch(iCheckAccess(auth_file, EXPORTSOWNERUID, EXPORTSOWNERGID)) {
case FACCESSWRITABLE:
@@ -424,6 +425,7 @@ auth_init(char *fname)
Dprintf(L_ERROR, "exiting because of security violation.\n");
exit(1);
}
+#endif
if ((ef = fopen(fname, "r")) == NULL) {
Dprintf(L_ERROR, "Could not open exports file %s: %s\n",
Index: nfs-server-2.2beta47/nfsd.c
===================================================================
--- nfs-server-2.2beta47.orig/nfsd.c
+++ nfs-server-2.2beta47/nfsd.c
@@ -46,6 +46,7 @@ static char pathbuf_1[NFS_MAXPATHLEN + N
extern char version[];
static char *program_name;
+static int nfs_prog = NFS_PROGRAM;
/*
* Option table
@@ -60,6 +61,7 @@ static struct option longopts[] = {
{ "help", 0, 0, 'h' },
{ "log-transfers", 0, 0, 'l' },
{ "allow-non-root", 0, 0, 'n' },
+ { "prog", required_argument, 0, 'g' },
{ "port", required_argument, 0, 'P' },
{ "promiscuous", 0, 0, 'p' },
{ "re-export", 0, 0, 'r' },
@@ -73,9 +75,10 @@ static struct option longopts[] = {
{ "udp-only", 0, 0, OPT_NOTCP },
{ "loopback-only", 0, 0, OPT_LOOPBACK },
{ "hashed-inodes", 0, 0, 'I' },
+ { "nfs-pid", required_argument, 0, 'N' },
{ NULL, 0, 0, 0 }
};
-static const char * shortopts = "a:d:Ff:hlnP:prR:tvz::";
+static const char * shortopts = "a:d:Ff:g:hlnN:P:prR:tvz::";
/*
* Table of supported versions
@@ -1003,6 +1006,8 @@ main(int argc, char **argv)
int failsafe_level = 0;
int c;
int i, ncopies = 1;
+ char *nfs_pid_file = NULL;
+
program_name = argv[0];
chdir("/");
@@ -1026,9 +1031,15 @@ main(int argc, char **argv)
case 'f':
auth_file = optarg;
break;
+ case 'g':
+ nfs_prog = atoi(optarg);
+ break;
case 'l':
log_transfers = 1;
break;
+ case 'N':
+ nfs_pid_file = strdup(optarg);
+ break;
case 'n':
allow_non_root = 1;
break;
@@ -1114,7 +1125,7 @@ main(int argc, char **argv)
log_open("nfsd", foreground);
/* Initialize RPC stuff */
- rpc_init("nfsd", NFS_PROGRAM, nfsd_versions, nfs_dispatch,
+ rpc_init("nfsd", nfs_prog, nfsd_versions, nfs_dispatch,
nfsport, NFS_MAXDATA);
if (_rpcpmstart) {
@@ -1145,7 +1156,10 @@ main(int argc, char **argv)
/* Initialize the AUTH module. */
auth_init(auth_file);
- setpidpath(_PATH_NFSD_PIDFILE);
+ if (nfs_pid_file == 0)
+ nfs_pid_file = _PATH_NFSD_PIDFILE;
+ setpidpath(nfs_pid_file);
+
if (failsafe_level == 0) {
/* Start multiple copies of the server */
writepid(getpid(), 1);
@@ -1215,9 +1229,11 @@ usage(FILE *fp, int n)
fprintf(fp,
"Usage: %s [-Fhnpv] [-d kind] [-f exports-file] [-P port] [--version]\n"
" [--debug kind] [--exports-file=file] [--port port]\n"
+" [--prog alternate_rpc_port_nubmer]\n"
" [--allow-non-root] [--promiscuous] [--version] [--foreground]\n"
" [--re-export] [--log-transfers] [--public-root path]\n"
" [--no-spoof-trace] [--no-cross-mounts] [--hashed-inodes] [--help]\n"
+" [--nfs-pid file]\n"
, program_name);
exit(n);
}
@@ -1234,7 +1250,7 @@ sigterm(int sig)
static void
terminate(void)
{
- rpc_exit(NFS_PROGRAM, nfsd_versions);
+ rpc_exit(nfs_prog, nfsd_versions);
efs_shutdown();
}
Index: nfs-server-2.2beta47/mountd.c
===================================================================
--- nfs-server-2.2beta47.orig/mountd.c
+++ nfs-server-2.2beta47/mountd.c
@@ -42,6 +42,7 @@ int hashed_inodes; /* dummy */
static void usage(FILE *, int);
static void terminate(void);
static RETSIGTYPE sigterm(int sig);
+int mount_prog = MOUNTPROG;
/*
* Option table for mountd
@@ -55,6 +56,7 @@ static struct option longopts[] =
{ "help", 0, 0, 'h' },
{ "allow-non-root", 0, 0, 'n' },
{ "port", required_argument, 0, 'P' },
+ { "prog", required_argument, 0, 'g' },
{ "promiscous", 0, 0, 'p' },
{ "re-export", 0, 0, 'r' },
{ "no-spoof-trace", 0, 0, 't' },
@@ -63,9 +65,11 @@ static struct option longopts[] =
{ "no-cross-mounts", 0, 0, 'x' },
{ "no-tcp", 0, 0, OPT_NOTCP },
{ "loopback-only", 0, 0, OPT_LOOPBACK },
+ { "mount-pid", required_argument, 0, 'N' },
+ { "rmtab", required_argument, 0, 'R' },
{ NULL, 0, 0, 0 }
};
-static const char * shortopts = "Fd:f:hnpP:rtvz::";
+static const char * shortopts = "Fd:f:g:hnN:pP:rRtvz::";
/*
* Table of supported versions
@@ -318,6 +322,7 @@ main(int argc, char **argv)
int failsafe_level = 0;
int port = 0;
int c;
+ char *mount_pid_file = NULL;
program_name = argv[0];
@@ -340,9 +345,15 @@ main(int argc, char **argv)
case 'f':
auth_file = optarg;
break;
+ case 'g':
+ mount_prog = port = atoi(optarg);
+ break;
case 'n':
allow_non_root = 1;
break;
+ case 'N':
+ mount_pid_file = strdup(optarg);
+ break;
case 'P':
port = atoi(optarg);
if (port <= 0 || port > 65535) {
@@ -354,6 +365,9 @@ main(int argc, char **argv)
case 'p':
promiscuous = 1;
break;
+ case 'R':
+ _PATH_RMTAB = strdup(optarg);
+ break;
case 'r':
re_export = 1;
break;
@@ -401,7 +415,7 @@ main(int argc, char **argv)
log_open("mountd", foreground);
/* Create services and register with portmapper */
- rpc_init("mountd", MOUNTPROG, mountd_versions, mount_dispatch, port, 0);
+ rpc_init("mountd", mount_prog, mountd_versions, mount_dispatch, port, 0);
if (_rpcpmstart) {
/* Always foreground mode */
@@ -422,7 +436,9 @@ main(int argc, char **argv)
auth_init(auth_file);
/* Write pidfile */
- setpidpath(_PATH_MOUNTD_PIDFILE);
+ if (mount_pid_file == 0)
+ mount_pid_file = _PATH_MOUNTD_PIDFILE;
+ setpidpath(mount_pid_file);
writepid(getpid(), 1);
/* Failsafe mode */
@@ -453,7 +469,9 @@ usage(FILE *fp, int n)
program_name);
fprintf(fp, " [--debug kind] [--help] [--allow-non-root]\n");
fprintf(fp, " [--promiscuous] [--version] [--port portnum]\n");
+ fprintf(fp, " [--prog alternate_rpc_port_nubmer]\n");
fprintf(fp, " [--exports-file=file] [--no-cross-mounts]\n");
+ fprintf(fp, " [--mount-pid file] [--rmtab file]\n");
exit(n);
}
@@ -467,7 +485,7 @@ sigterm(int sig)
static void
terminate(void)
{
- rpc_exit(MOUNTPROG, mountd_versions);
+ rpc_exit(mount_prog, mountd_versions);
}
RETSIGTYPE
Index: nfs-server-2.2beta47/rmtab.c
===================================================================
--- nfs-server-2.2beta47.orig/rmtab.c
+++ nfs-server-2.2beta47/rmtab.c
@@ -14,6 +14,8 @@ static char * rmtab_gethost(struct svc_r
static int rmtab_insert(char *, char *);
static void rmtab_file(char);
+char *_PATH_RMTAB = _PATH_RMTAB_VAL;
+
/*
* global top to linklist
*/
Index: nfs-server-2.2beta47/rmtab.h
===================================================================
--- nfs-server-2.2beta47.orig/rmtab.h
+++ nfs-server-2.2beta47/rmtab.h
@@ -11,8 +11,9 @@
* Location of rmtab file. /etc/rmtab is the standard on most systems.
*/
#include <paths.h>
-#ifndef _PATH_RMTAB
-#define _PATH_RMTAB "/etc/rmtab"
+extern char *_PATH_RMTAB;
+#ifndef _PATH_RMTAB_VAL
+#define _PATH_RMTAB_VAL "/etc/rmtab"
#endif
extern void rmtab_add_client(dirpath, struct svc_req *);