* amd/conf.c (gopt_nfs_allow_insecure_port): support function for
authorIon Badulescu <ib42@cs.columbia.edu>
Wed, 21 Jan 2004 04:04:58 +0000 (04:04 +0000)
committerIon Badulescu <ib42@cs.columbia.edu>
Wed, 21 Jan 2004 04:04:58 +0000 (04:04 +0000)
the new "nfs_allow_insecure_port" amd.conf directive

* amd/nfs_prot_svc.c (nfs_program_2): complain about the insecure
port and drop the request only if the "nfs_allow_insecure_port"
option is not set in amd.conf

* doc/am-utils.texi (Global Parameters): documented the new
amd.conf directive "nfs_allow_insecure_port"

* scripts/amd.conf.5 (nfs_allow_insecure_port): ditto

* scripts/amd.conf-sample (nfs_allow_insecure_port): added the
"nfs_allow_insecure_port" directive

ChangeLog
amd/amd.h
amd/conf.c
amd/nfs_prot_svc.c
doc/am-utils.texi
scripts/amd.conf-sample
scripts/amd.conf.5

index d88cebd238d828a3b6322c5a31856b43d7a38840..73cd376b693e3c3d587a3ec5c20a7bc5cb1e532a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2004-01-20  Ion Badulescu  <ionut@moisil.badula.org>
+
+       * amd/conf.c (gopt_nfs_allow_insecure_port): support function for
+       the new "nfs_allow_insecure_port" amd.conf directive
+
+       * amd/nfs_prot_svc.c (nfs_program_2): complain about the insecure
+       port and drop the request only if the "nfs_allow_insecure_port"
+       option is not set in amd.conf
+
+       * doc/am-utils.texi (Global Parameters): documented the new
+       amd.conf directive "nfs_allow_insecure_port"
+
+       * scripts/amd.conf.5 (nfs_allow_insecure_port): ditto
+
+       * scripts/amd.conf-sample (nfs_allow_insecure_port): added the
+       "nfs_allow_insecure_port" directive
+
 2004-01-20  Erez Zadok  <ezk@cs.sunysb.edu>
 
        * doc/am-utils.texi: amd-workers is defunct.
index 860c8173672da7c3e2f5f51042f6dae29db323ea..e5e4e445c790a0f8d5d79dd630477f5360564a1c 100644 (file)
--- a/amd/amd.h
+++ b/amd/amd.h
@@ -38,7 +38,7 @@
  *
  *      %W% (Berkeley) %G%
  *
- * $Id: amd.h,v 1.8.2.7 2004/01/06 03:15:16 ezk Exp $
+ * $Id: amd.h,v 1.8.2.8 2004/01/21 04:04:58 ib42 Exp $
  *
  */
 
@@ -62,6 +62,7 @@
 #define CFM_FULLY_QUALIFIED_HOSTS      0x0100
 #define CFM_BROWSABLE_DIRS_FULL                0x0200 /* allow '/' in readdir() */
 #define CFM_UNMOUNT_ON_EXIT            0x0400 /* when amd finishing */
+#define CFM_NFS_INSECURE_PORT          0x0800
 
 /* some systems (SunOS 4.x) neglect to define the mount null message */
 #ifndef MOUNTPROC_NULL
index 004ee95345bb275c06e5000c27718d62203ce059..90bbdda8cbd79839b56e6cc136847e5ec2ea6232 100644 (file)
@@ -38,7 +38,7 @@
  *
  *      %W% (Berkeley) %G%
  *
- * $Id: conf.c,v 1.7.2.7 2004/01/06 03:15:16 ezk Exp $
+ * $Id: conf.c,v 1.7.2.8 2004/01/21 04:04:58 ib42 Exp $
  *
  */
 
@@ -98,6 +98,7 @@ static int gopt_map_type(const char *val);
 static int gopt_mount_type(const char *val);
 static int gopt_pid_file(const char *val);
 static int gopt_portmap_program(const char *val);
+static int gopt_nfs_allow_insecure_port(const char *val);
 static int gopt_nfs_proto(const char *val);
 static int gopt_nfs_retransmit_counter(const char *val);
 static int gopt_nfs_retry_interval(const char *val);
@@ -156,6 +157,7 @@ static struct _func_map glob_functable[] = {
   {"mount_type",               gopt_mount_type},
   {"pid_file",                 gopt_pid_file},
   {"portmap_program",          gopt_portmap_program},
+  {"nfs_allow_insecure_port",  gopt_nfs_allow_insecure_port},
   {"nfs_proto",                        gopt_nfs_proto},
   {"nfs_retransmit_counter",   gopt_nfs_retransmit_counter},
   {"nfs_retry_interval",       gopt_nfs_retry_interval},
@@ -599,6 +601,22 @@ gopt_portmap_program(const char *val)
 }
 
 
+static int
+gopt_nfs_allow_insecure_port(const char *val)
+{
+  if (STREQ(val, "yes")) {
+    gopt.flags |= CFM_NFS_INSECURE_PORT;
+    return 0;
+  } else if (STREQ(val, "no")) {
+    gopt.flags &= ~CFM_NFS_INSECURE_PORT;
+    return 0;
+  }
+
+  fprintf(stderr, "conf: unknown value to nfs_allow_insecure_port \"%s\"\n", val);
+  return 1;                    /* unknown value */
+}
+
+
 static int
 gopt_nfs_proto(const char *val)
 {
index 3894a971a566d10384ee149d348f14006a5dd1a2..39d1d4562eea568a905c6afc85e62c8efac0ea9e 100644 (file)
@@ -38,7 +38,7 @@
  *
  *      %W% (Berkeley) %G%
  *
- * $Id: nfs_prot_svc.c,v 1.5.2.5 2004/01/06 03:15:16 ezk Exp $
+ * $Id: nfs_prot_svc.c,v 1.5.2.6 2004/01/21 04:04:58 ib42 Exp $
  *
  */
 
@@ -104,7 +104,8 @@ nfs_program_2(struct svc_req *rqstp, SVCXPRT *transp)
   sinp = amu_svc_getcaller(rqstp->rq_xprt);
 #ifdef MNT2_NFS_OPT_RESVPORT
   /* Verify that the request comes from a reserved port */
-  if (ntohs(sinp->sin_port) >= IPPORT_RESERVED) {
+  if (ntohs(sinp->sin_port) >= IPPORT_RESERVED) &&
+      !(gopt.flags & CFM_NFS_INSECURE_PORT)) {
     plog(XLOG_WARNING, "ignoring request from %s:%u, port not reserved",
         inet_dquad(dq, sinp->sin_addr.s_addr),
         ntohs(sinp->sin_port));
index c9fd9a292d766c30d31349f6e12c8a40d345075a..65d1af30cc028d31dc6f15d169dce8861cb632cb 100644 (file)
@@ -38,7 +38,7 @@
 @c
 @c      %W% (Berkeley) %G%
 @c
-@c $Id: am-utils.texi,v 1.21.2.31 2004/01/20 19:04:09 ezk Exp $
+@c $Id: am-utils.texi,v 1.21.2.32 2004/01/21 04:04:58 ib42 Exp $
 @c
 @setfilename am-utils.info
 
@@ -4471,6 +4471,7 @@ The following parameters are applicable to the @samp{[global]} section only.
 * local_domain Parameter::
 * log_file Parameter::
 * log_options Parameter::
+* nfs_allow_insecure_port Parameter::
 * nfs_proto Parameter::
 * nfs_retransmit_counter Parameter::
 * nfs_retry_interval Parameter::
@@ -4699,7 +4700,7 @@ is generally a bad idea to use those reserved for other services such as
 @samp{kern}, @samp{lpr}, @samp{cron}, etc.
 
 @c ----------------------------------------------------------------
-@node log_options Parameter, nfs_proto Parameter, log_file Parameter, Global Parameters
+@node log_options Parameter, nfs_allow_insecure_port Parameter, log_file Parameter, Global Parameters
 @comment  node-name,  next,  previous,  up
 @subsection @t{log_options} Parameter
 @cindex log_options Parameter
@@ -4736,7 +4737,25 @@ warnings
 @end table
 
 @c ----------------------------------------------------------------
-@node nfs_proto Parameter, nfs_retransmit_counter Parameter, log_options Parameter, Global Parameters
+@node nfs_allow_insecure_port Parameter, nfs_proto Parameter, log_options Parameter, Global Parameters
+@comment  node-name,  next,  previous,  up
+@subsection @t{nfs_allow_insecure_port} Parameter
+@cindex nfs_allow_insecure_port Parameter
+
+(type=string, default=@samp{no}).  Normally amd will refuse requests
+coming from unprivileged ports (i.e. ports >= 1024 on Unix systems),
+so that only privileged users and the kernel can send NFS requests to
+it. However, some kernels (certain versions of Darwin, MacOS X, and
+Linux) have bugs that cause them to use unprivileged ports in certain
+situations, which causes amd to stop dead in its tracks. This
+parameter allows amd to operate normally even on such systems, at the
+expense of a slight decrease in the security of its operations. If you
+see messages like ``ignoring request from foo:1234, port not
+reserved'' in your amd log, try enabling this parameter and give it
+another go.
+
+@c ----------------------------------------------------------------
+@node nfs_proto Parameter, nfs_retransmit_counter Parameter, nfs_allow_insecure_port Parameter, Global Parameters
 @comment  node-name,  next,  previous,  up
 @subsection @t{nfs_proto} Parameter
 @cindex nfs_proto Parameter
index 3fbfdb52124be9961f80ee1e91255d1c7770e2de..02ccbdfc345be743e606646d2398b82e12f9f0f6 100644 (file)
@@ -76,6 +76,8 @@ fully_qualified_hosts =               yes | no
 # force NFS version or NFS protocol
 nfs_vers =                     2 | 3
 nfs_proto =                    udp | tcp
+# allow NFS requests from insecure (>=1024) ports
+nfs_allow_insecure_port =      yes | no
 
 ##############################################################################
 # DEFINE AN AMD MOUNT POINT
index 428861d9165d7423f32cd42ccf50e77b53bc8a36..6e6b4ddc4770f5be71afc1e02a1df94a7b55f1ff 100644 (file)
@@ -38,7 +38,7 @@
 .\"
 .\"    %W% (Berkeley) %G%
 .\"
-.\" $Id: amd.conf.5,v 1.7.2.9 2004/01/06 03:15:25 ezk Exp $
+.\" $Id: amd.conf.5,v 1.7.2.10 2004/01/21 04:04:58 ib42 Exp $
 .\"
 .TH AMD.CONF 5 "7 August 1997"
 .SH NAME
@@ -370,6 +370,18 @@ and the
 parameters change the overall retry interval.  Too long an interval gives
 poor interactive response; too short an interval causes excessive retries.
 
+.TP
+.BR nfs_allow_insecure_port " (string, default=no).
+Normally amd will refuse requests coming from unprivileged ports (i.e.
+ports >= 1024 on Unix systems), so that only privileged users and the kernel
+can send NFS requests to it. However, some kernels (certain versions of
+Darwin, MacOS X, and Linux) have bugs that cause them to use unprivileged
+ports in certain situations, which causes amd to stop dead in its
+tracks. This parameter allows amd to operate normally even on such systems,
+at the expense of a slight decrease in the security of its operations. If
+you see messages like "ignoring request from foo:1234, port not reserved"
+in your amd log, try enabling this parameter and give it another go.
+
 .TP
 .BR nfs_proto " (string, default to trying version tcp then udp)"
 By default, amd tries TCP and then UDP.  This option forces the overall NFS