Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/minoura-xpg4dl]: src/dist/am-utils pull up christos's amd patches that d...



details:   https://anonhg.NetBSD.org/src/rev/2eeb44bd1b82
branches:  minoura-xpg4dl
changeset: 486679:2eeb44bd1b82
user:      dogcow <dogcow%NetBSD.org@localhost>
date:      Fri Jun 16 02:10:13 2000 +0000

description:
pull up christos's amd patches that didn't make it into 6.0.3
(derived from diff'ing am-utils 6.0.1s10 and basesrc/usr.sbin/amd)

diffstat:

 dist/am-utils/amd/amq_subr.c     |  524 +++++++++++++++++++++++
 dist/am-utils/amd/srvr_nfs.c     |  869 +++++++++++++++++++++++++++++++++++++++
 dist/am-utils/fsinfo/fsinfo.c    |  289 ++++++++++++
 dist/am-utils/include/amq_defs.h |  158 +++++++
 dist/am-utils/libamu/wire.c      |  504 ++++++++++++++++++++++
 5 files changed, 2344 insertions(+), 0 deletions(-)

diffs (truncated from 2364 to 300 lines):

diff -r 3148e6c80ba9 -r 2eeb44bd1b82 dist/am-utils/amd/amq_subr.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/dist/am-utils/amd/amq_subr.c      Fri Jun 16 02:10:13 2000 +0000
@@ -0,0 +1,524 @@
+/*     $NetBSD: amq_subr.c,v 1.2.4.2 2000/06/16 02:10:13 dogcow Exp $ */
+/*
+ * Copyright (c) 1997-2000 Erez Zadok
+ * Copyright (c) 1990 Jan-Simon Pendry
+ * Copyright (c) 1990 Imperial College of Science, Technology & Medicine
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Jan-Simon Pendry at Imperial College, London.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgment:
+ *      This product includes software developed by the University of
+ *      California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *      %W% (Berkeley) %G%
+ *
+ * Id: amq_subr.c,v 1.6 2000/01/12 16:44:16 ezk Exp 
+ *
+ */
+/*
+ * Auxiliary routines for amq tool
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif /* HAVE_CONFIG_H */
+#include <am_defs.h>
+#include <amd.h>
+
+/* forward definitions */
+bool_t xdr_amq_mount_tree_node(XDR *xdrs, amq_mount_tree *objp);
+bool_t xdr_amq_mount_subtree(XDR *xdrs, amq_mount_tree *objp);
+
+
+voidp
+amqproc_null_1_svc(voidp argp, struct svc_req *rqstp)
+{
+  static char res;
+
+  return (voidp) &res;
+}
+
+
+/*
+ * Return a sub-tree of mounts
+ */
+amq_mount_tree_p *
+amqproc_mnttree_1_svc(voidp argp, struct svc_req *rqstp)
+{
+  static am_node *mp;
+
+  mp = find_ap(*(char **) argp);
+  return (amq_mount_tree_p *) &mp;
+}
+
+
+/*
+ * Unmount a single node
+ */
+voidp
+amqproc_umnt_1_svc(voidp argp, struct svc_req *rqstp)
+{
+  static char res;
+  am_node *mp = find_ap(*(char **) argp);
+
+  if (mp)
+    forcibly_timeout_mp(mp);
+
+  return (voidp) &res;
+}
+
+
+/*
+ * Return global statistics
+ */
+amq_mount_stats *
+amqproc_stats_1_svc(voidp argp, struct svc_req *rqstp)
+{
+  return (amq_mount_stats *) &amd_stats;
+}
+
+
+/*
+ * Return the entire tree of mount nodes
+ */
+amq_mount_tree_list *
+amqproc_export_1_svc(voidp argp, struct svc_req *rqstp)
+{
+  static amq_mount_tree_list aml;
+
+  aml.amq_mount_tree_list_val = (amq_mount_tree_p *) &exported_ap[0];
+  aml.amq_mount_tree_list_len = 1;     /* XXX */
+
+  return &aml;
+}
+
+
+int *
+amqproc_setopt_1_svc(voidp argp, struct svc_req *rqstp)
+{
+  static int rc;
+  amq_setopt *opt = (amq_setopt *) argp;
+
+  rc = 0;
+
+  switch (opt->as_opt) {
+
+  case AMOPT_DEBUG:
+#ifdef DEBUG
+    if (debug_option(opt->as_str))
+#endif /* DEBUG */
+      rc = EINVAL;
+    break;
+
+  case AMOPT_LOGFILE:
+    if (gopt.logfile && opt->as_str
+       && STREQ(gopt.logfile, opt->as_str)) {
+      if (switch_to_logfile(opt->as_str, orig_umask))
+       rc = EINVAL;
+    } else {
+      rc = EACCES;
+    }
+    break;
+
+  case AMOPT_XLOG:
+    if (switch_option(opt->as_str))
+      rc = EINVAL;
+    break;
+
+  case AMOPT_FLUSHMAPC:
+    if (amd_state == Run) {
+      plog(XLOG_INFO, "amq says flush cache");
+      do_mapc_reload = 0;
+      flush_nfs_fhandle_cache((fserver *) 0);
+      flush_srvr_nfs_cache();
+    }
+    break;
+  }
+
+  return &rc;
+}
+
+
+amq_mount_info_list *
+amqproc_getmntfs_1_svc(voidp argp, struct svc_req *rqstp)
+{
+  return (amq_mount_info_list *) &mfhead;      /* XXX */
+}
+
+#ifdef ENABLE_AMQ_MOUNT
+/*
+ * This is code that is vulnerable to IP spoofing attacks.  Unless you
+ * absolutely need it, I suggest you do not enable it
+ * (using configure --enable-amq-mount)
+ */
+static int
+ok_security(struct svc_req *rqstp)
+{
+  struct sockaddr_in *sin = (struct sockaddr_in *) NULL;
+
+  if ((sin = amu_svc_getcaller(rqstp->rq_xprt)) == NULL) {
+    plog(XLOG_ERROR, "amu_svc_getcaller returned NULL");
+    return(0);                 /* assume security is therefore not OK */
+  }
+
+  if (ntohs(sin->sin_port) >= IPPORT_RESERVED ||
+      !(sin->sin_addr.s_addr == htonl(0x7f000001) ||
+       sin->sin_addr.s_addr == myipaddr.s_addr)) {
+    char dq[20];
+    plog(XLOG_INFO, "AMQ request from %s.%d DENIED",
+        inet_dquad(dq, sin->sin_addr.s_addr),
+        ntohs(sin->sin_port));
+    return (0);
+  }
+
+  return (1);
+}
+
+
+int *
+amqproc_mount_1_svc(voidp argp, struct svc_req *rqstp)
+{
+  static int rc = EINVAL;
+  char s[AMQ_STRLEN];
+  char *cp;
+  char dq[20];
+  struct sockaddr_in *sin;
+
+  if ((sin = amu_svc_getcaller(rqstp->rq_xprt)) == NULL) {
+    plog(XLOG_ERROR, "amu_svc_getcaller returned NULL");
+    return &rc;
+  }
+
+  strncpy(s, *(amq_string *) argp, AMQ_STRLEN-1);
+  s[AMQ_STRLEN-1] = '\0';      /* null terminate, to be sure */
+  plog(XLOG_ERROR,
+       "amq requested mount of %s from %s.%d",
+       s, inet_dquad(dq, sin->sin_addr.s_addr),
+       ntohs(sin->sin_port));
+
+  /*
+   * Minimalist security check.
+   */
+  if (!ok_security(rqstp)) {
+    rc = EACCES;
+    return &rc;
+  }
+  /*
+   * Find end of key
+   */
+  for (cp = (char *) s; *cp && (!isascii(*cp) || !isspace(*cp)); cp++) ;
+
+  if (!*cp) {
+    plog(XLOG_INFO, "amqproc_mount: Invalid arguments");
+    rc = EINVAL;
+    return &rc;
+  }
+  *cp++ = '\0';
+
+  /*
+   * Find start of value
+   */
+  while (*cp && isascii(*cp) && isspace(*cp))
+    cp++;
+
+  root_newmap(s, cp, (char *) 0, NULL);
+  rc = mount_auto_node(s, (voidp) root_node);
+  if (rc < 0)
+    return 0;
+  return &rc;
+}
+#else /* not ENABLE_AMQ_MOUNT */
+
+int *
+amqproc_mount_1_svc(voidp argp, struct svc_req *rqstp)
+{
+  static int rc = EINVAL;
+  char *s = *(amq_string *) argp;
+  char dq[20];
+  struct sockaddr_in *sin;
+
+  if ((sin = amu_svc_getcaller(rqstp->rq_xprt)) == NULL) {
+    plog(XLOG_ERROR, "amu_svc_getcaller returned NULL");
+    return &rc;
+  }
+  plog(XLOG_ERROR,
+       "amq requested mount of %s from %s.%d, but code is disabled",
+       s, inet_dquad(dq, sin->sin_addr.s_addr),
+       ntohs(sin->sin_port));
+
+  return &rc;
+}
+#endif /* not ENABLE_AMQ_MOUNT */
+
+
+amq_string *
+amqproc_getvers_1_svc(voidp argp, struct svc_req *rqstp)
+{
+  static amq_string res;
+
+  res = get_version_string();
+  return &res;
+}
+
+
+/* get PID of remote amd */
+int *
+amqproc_getpid_1_svc(voidp argp, struct svc_req *rqstp)
+{
+  static int res;
+



Home | Main Index | Thread Index | Old Index