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 *) ∓
+}
+
+
+/*
+ * 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