Remove portal file system, mount_portal and examples.
authorSascha Wildner <saw@online.de>
Wed, 4 Jan 2017 07:39:55 +0000 (08:39 +0100)
committerSascha Wildner <saw@online.de>
Wed, 4 Jan 2017 07:39:55 +0000 (08:39 +0100)
It has been broken for a long time I think.

Approved-by: dillon
33 files changed:
Makefile_upgrade.inc
UPDATING
etc/defaults/rc.conf
etc/mtree/BSD.usr.dist
sbin/Makefile
sbin/mount/mount.8
sbin/mount_portal/Makefile [deleted file]
sbin/mount_portal/activate.c [deleted file]
sbin/mount_portal/conf.c [deleted file]
sbin/mount_portal/mount_portal.8 [deleted file]
sbin/mount_portal/mount_portal.c [deleted file]
sbin/mount_portal/pathnames.h [deleted file]
sbin/mount_portal/portal.conf [deleted file]
sbin/mount_portal/portald.h [deleted file]
sbin/mount_portal/pt_conf.c [deleted file]
sbin/mount_portal/pt_exec.c [deleted file]
sbin/mount_portal/pt_file.c [deleted file]
sbin/mount_portal/pt_tcp.c [deleted file]
sbin/mount_portal/pt_tcplisten.c [deleted file]
sbin/mount_ufs/mount_ufs.8
share/examples/portal/README [deleted file]
share/examples/portal/portal.conf [deleted file]
sys/boot/dloader/loader-bootp.conf
sys/boot/dloader/loader.conf
sys/conf/files
sys/conf/options
sys/config/LINT64
sys/sys/vfscache.h
sys/vfs/Makefile
sys/vfs/portal/Makefile [deleted file]
sys/vfs/portal/portal.h [deleted file]
sys/vfs/portal/portal_vfsops.c [deleted file]
sys/vfs/portal/portal_vnops.c [deleted file]

index f5c2098..2be2362 100644 (file)
@@ -3178,6 +3178,10 @@ TO_REMOVE+=/usr/share/man/man2/sigvec.2.gz
 TO_REMOVE+=/usr/share/man/man3/efi_set_variables_supported.3.gz
 TO_REMOVE+=/usr/share/man/man9/cpumask.9.gz
 TO_REMOVE+=/usr/share/man/man9/nlookup_set_cred.9.gz
+TO_REMOVE+=/boot/kernel/portal.ko
+TO_REMOVE+=/sbin/mount_portal
+TO_REMOVE+=/usr/share/examples/portal
+TO_REMOVE+=/usr/share/man/man8/mount_portal.8.gz
 
 .if !defined(WANT_INSTALLER)
 TO_REMOVE+=/usr/sbin/dfuibe_installer
index 6d5748d..00f8242 100644 (file)
--- a/UPDATING
+++ b/UPDATING
 +         UPGRADING DRAGONFLY FROM 4.6 TO LATER VERSIONS                +
 +-----------------------------------------------------------------------+
 
+PORTAL FILE SYSTEM REMOVED
+--------------------------
+
+It has been broken for a long time now.
+
 BINUTILS 2.27 REPLACES 2.24, PRIMARY
 ------------------------------------
 
index eb3d8e9..cb71682 100644 (file)
@@ -38,7 +38,7 @@ local_startup="/usr/local/etc/rc.d /usr/pkg/etc/rc.d"
 script_name_sep=" "    # Change if your startup scripts' names contain spaces
 rc_conf_files="/etc/rc.conf /etc/rc.conf.local"
 fsck_y_enable="NO"     # Set to YES to do fsck -y if the initial preen fails.
-netfs_types="nfs:NFS smbfs:SMB portalfs:PORTAL" # Net filesystems.
+netfs_types="nfs:NFS smbfs:SMB" # Net filesystems.
 extra_netfs_types="NO" # List of network extra filesystem types for delayed
                        # mount at startup (or NO).
 devfs_config_files="/etc/defaults/devfs.conf /etc/devfs.conf"
index 4612ade..68c657f 100644 (file)
             ..
             pf
             ..
-            portal
-            ..
             ppi
             ..
             ppp
index 2f61751..0ccc54c 100644 (file)
@@ -59,7 +59,6 @@ SUBDIR=       adjkerntz \
        mount_nfs \
        mount_ntfs \
        mount_null \
-       mount_portal \
        mount_std \
        mount_tmpfs \
        mount_udf \
index e412eea..94066f4 100644 (file)
@@ -416,7 +416,6 @@ have permission to load the module.
 .Xr mount_nfs 8 ,
 .Xr mount_ntfs 8 ,
 .Xr mount_null 8 ,
-.Xr mount_portal 8 ,
 .Xr mount_procfs 8 ,
 .Xr mount_smbfs 8 ,
 .Xr mount_std 8 ,
diff --git a/sbin/mount_portal/Makefile b/sbin/mount_portal/Makefile
deleted file mode 100644 (file)
index e4c1029..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#      From: @(#)Makefile      8.3 (Berkeley) 3/27/94
-# $FreeBSD: src/sbin/mount_portal/Makefile,v 1.10.2.1 2001/04/25 10:58:39 ru Exp $
-
-PROG=  mount_portal
-SRCS=  mount_portal.c activate.c conf.c pt_conf.c \
-       pt_exec.c pt_file.c pt_tcp.c pt_tcplisten.c
-MAN=   mount_portal.8
-
-LDADD= -lutil
-DPADD= ${LIBUTIL}
-
-CFLAGS+=-I${.CURDIR}/../../sys
-
-.include <bsd.prog.mk>
diff --git a/sbin/mount_portal/activate.c b/sbin/mount_portal/activate.c
deleted file mode 100644 (file)
index 68a9be6..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- * All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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. 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.
- *
- *     @(#)activate.c  8.3 (Berkeley) 4/28/95
- *
- * $FreeBSD: src/sbin/mount_portal/activate.c,v 1.7 1999/08/28 00:13:35 peter Exp $
- * $DragonFly: src/sbin/mount_portal/activate.c,v 1.6 2007/05/18 17:05:12 dillon Exp $
- */
-
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/syslog.h>
-#include <sys/uio.h>
-
-#include "portald.h"
-
-/*
- * Scan the providers list and call the
- * appropriate function.
- */
-static int
-activate_argv(struct portal_cred *pcr, char *key, char **v, int so, int *fdp)
-{
-       provider *pr;
-
-       for (pr = providers; pr->pr_match; pr++)
-               if (strcmp(v[0], pr->pr_match) == 0)
-                       return ((*pr->pr_func)(pcr, key, v, so, fdp));
-
-       return (ENOENT);
-}
-
-static int
-get_request(int so, struct portal_cred *pcr, char *key, int klen)
-{
-       struct iovec iov[2];
-       struct msghdr msg;
-       int n;
-
-       iov[0].iov_base = (caddr_t) pcr;
-       iov[0].iov_len = sizeof(*pcr);
-       iov[1].iov_base = key;
-       iov[1].iov_len = klen;
-
-       memset(&msg, 0, sizeof(msg));
-       msg.msg_iov = iov;
-       msg.msg_iovlen = 2;
-
-       n = recvmsg(so, &msg, 0);
-       if (n < 0)
-               return (errno);
-
-       if ((size_t)n <= sizeof(*pcr))
-               return (EINVAL);
-
-       n -= sizeof(*pcr);
-       key[n] = '\0';
-
-       return (0);
-}
-
-static void
-send_reply(int so, int fd, int error)
-{
-       int n;
-       struct iovec iov;
-       struct msghdr msg;
-       struct {
-               struct cmsghdr cmsg;
-               int fd;
-       } ctl;
-
-       /*
-        * Line up error code.  Don't worry about byte ordering
-        * because we must be sending to the local machine.
-        */
-       iov.iov_base = (caddr_t) &error;
-       iov.iov_len = sizeof(error);
-
-       /*
-        * Build a msghdr
-        */
-       memset(&msg, 0, sizeof(msg));
-       msg.msg_iov = &iov;
-       msg.msg_iovlen = 1;
-
-       /*
-        * If there is a file descriptor to send then
-        * construct a suitable rights control message.
-        */
-       if (fd >= 0) {
-               ctl.fd = fd;
-               ctl.cmsg.cmsg_len = sizeof(ctl);
-               ctl.cmsg.cmsg_level = SOL_SOCKET;
-               ctl.cmsg.cmsg_type = SCM_RIGHTS;
-               msg.msg_control = (caddr_t) &ctl;
-               msg.msg_controllen = ctl.cmsg.cmsg_len;
-       }
-
-       /*
-        * Send to kernel...
-        */
-       if ((n = sendmsg(so, &msg, 0)) < 0)
-               syslog(LOG_ERR, "send: %s", strerror(errno));
-#ifdef DEBUG
-       fprintf(stderr, "sent %d bytes\n", n);
-#endif
-       sleep(1);       /*XXX*/
-#ifdef notdef
-       if (shutdown(so, SHUT_RDWR) < 0)
-               syslog(LOG_ERR, "shutdown: %s", strerror(errno));
-#endif
-       /*
-        * Throw away the open file descriptor
-        */
-       close(fd);
-}
-
-void
-activate(qelem *q, int so)
-{
-       struct portal_cred pcred;
-       char key[MAXPATHLEN+1];
-       int error;
-       char **v;
-       int fd = -1;
-
-       /*
-        * Read the key from the socket
-        */
-       error = get_request(so, &pcred, key, sizeof(key));
-       if (error) {
-               syslog(LOG_ERR, "activate: recvmsg: %s", strerror(error));
-               goto drop;
-       }
-
-#ifdef DEBUG
-       fprintf(stderr, "lookup key %s\n", key);
-#endif
-
-       /*
-        * Find a match in the configuration file
-        */
-       v = conf_match(q, key);
-
-       /*
-        * If a match existed, then find an appropriate portal
-        * otherwise simply return ENOENT.
-        */
-       if (v) {
-               error = activate_argv(&pcred, key, v, so, &fd);
-               if (error)
-                       fd = -1;
-               else if (fd < 0)
-                       error = -1;
-       } else {
-               error = ENOENT;
-       }
-
-       if (error >= 0)
-               send_reply(so, fd, error);
-
-drop:;
-       close(so);
-}
diff --git a/sbin/mount_portal/conf.c b/sbin/mount_portal/conf.c
deleted file mode 100644 (file)
index d73def5..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- * All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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. 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.
- *
- *     @(#)conf.c      8.2 (Berkeley) 3/27/94
- *
- * $FreeBSD: src/sbin/mount_portal/conf.c,v 1.8 1999/08/28 00:13:35 peter Exp $
- */
-
-#include <errno.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <regex.h>
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/syslog.h>
-
-#include "portald.h"
-
-#define        ALLOC(ty)       (xmalloc(sizeof(ty)))
-
-typedef struct path path;
-struct path {
-       qelem p_q;              /* 2-way linked list */
-       int p_lno;              /* Line number of this record */
-       char *p_args;           /* copy of arg string (malloc) */
-       char *p_key;            /* Pathname to match (also p_argv[0]) */
-       regex_t p_rx;           /* RE to match against pathname () */
-       int p_rxvalid;          /* non-zero if valid regular expression */
-       int p_argc;             /* number of elements in arg string */
-       char **p_argv;          /* argv[] pointers into arg string (malloc) */
-};
-
-static char *conf_file;                /* XXX for regerror */
-static path *curp;             /* XXX for regerror */
-
-/*
- * Add an element to a 2-way list,
- * just after (pred)
- */
-static void
-ins_que(qelem *elem, qelem *pred)
-{
-       qelem *p = pred->q_forw;
-       elem->q_back = pred;
-       elem->q_forw = p;
-       pred->q_forw = elem;
-       p->q_back = elem;
-}
-
-/*
- * Remove an element from a 2-way list
- */
-static void
-rem_que(qelem *elem)
-{
-       qelem *p = elem->q_forw;
-       qelem *p2 = elem->q_back;
-       p2->q_forw = p;
-       p->q_back = p2;
-}
-
-/*
- * Error checking malloc
- */
-static void *
-xmalloc(unsigned siz)
-{
-       void *p = malloc(siz);
-       if (p)
-               return (p);
-       syslog(LOG_ALERT, "malloc: failed to get %d bytes", siz);
-       exit(1);
-}
-
-/*
- * Insert the path in the list.
- * If there is already an element with the same key then
- * the *second* one is ignored (return 0).  If the key is
- * not found then the path is added to the end of the list
- * and 1 is returned.
- */
-static int
-pinsert(path *p0, qelem *q0)
-{
-       qelem *q;
-
-       if (p0->p_argc == 0)
-               return (0);
-
-       for (q = q0->q_forw; q != q0; q = q->q_forw) {
-               path *p = (path *) q;
-               if (strcmp(p->p_key, p0->p_key) == 0)
-                       return (0);
-       }
-       ins_que(&p0->p_q, q0->q_back);
-       return (1);
-
-}
-
-static path *
-palloc(char *cline, int lno)
-{
-       int c;
-       char *s;
-       char *key;
-       path *p;
-       char **ap;
-
-       /*
-        * Implement comment chars
-        */
-       s = strchr(cline, '#');
-       if (s)
-               *s = 0;
-
-       /*
-        * Do a pass through the string to count the number
-        * of arguments
-        */
-       c = 0;
-       key = strdup(cline);
-       for (s = key; s != NULL; ) {
-               char *val;
-               while ((val = strsep(&s, " \t\n")) != NULL && *val == '\0')
-                       ;
-               if (val)
-                       c++;
-       }
-       c++;
-       free(key);
-
-       if (c <= 1)
-               return (0);
-
-       /*
-        * Now do another pass and generate a new path structure
-        */
-       p = ALLOC(path);
-       p->p_argc = 0;
-       p->p_argv = xmalloc(c * sizeof(char *));
-       p->p_args = strdup(cline);
-       ap = p->p_argv;
-       for (s = p->p_args; s != NULL; ) {
-               char *val;
-               while ((val = strsep(&s, " \t\n")) != NULL && *val == '\0')
-                       ;
-               if (val) {
-                       *ap++ = val;
-                       p->p_argc++;
-               }
-       }
-       *ap = NULL;
-
-#ifdef DEBUG
-       for (c = 0; c < p->p_argc; c++)
-               printf("%sv[%d] = %s\n", c?"\t":"", c, p->p_argv[c]);
-#endif
-
-       p->p_key = p->p_argv[0];
-       if (strpbrk(p->p_key, RE_CHARS)) {
-               int val;
-
-               curp = p;                       /* XXX */
-               val = regcomp(&p->p_rx, p->p_key, REG_EXTENDED | REG_NOSUB);
-               if (val) {
-                       char errbuf[_POSIX2_LINE_MAX];
-                       regerror(val, &p->p_rx, errbuf, sizeof errbuf);
-                       syslog(LOG_ERR, "%s:%d: regcomp %s: %s",
-                              conf_file, curp->p_lno, curp->p_key, errbuf);
-                       regfree(&p->p_rx);
-                       p->p_rxvalid = 0;
-               } else {
-                       p->p_rxvalid = 1;
-               }
-               curp = NULL;                    /* XXX */
-       } else {
-               p->p_rxvalid = 0;
-       }
-       p->p_lno = lno;
-
-       return (p);
-}
-
-/*
- * Free a path structure
- */
-static void
-pfree(path *p)
-{
-       free(p->p_args);
-       if (p->p_rxvalid) {
-               regfree(&p->p_rx);
-       }
-       free((char *) p->p_argv);
-       free((char *) p);
-}
-
-/*
- * Discard all currently held path structures on q0.
- * and add all the ones on xq.
- */
-static void
-preplace(qelem *q0, qelem *xq)
-{
-       /*
-        * While the list is not empty,
-        * take the first element off the list
-        * and free it.
-        */
-       while (q0->q_forw != q0) {
-               qelem *q = q0->q_forw;
-               rem_que(q);
-               pfree((path *) q);
-       }
-       while (xq->q_forw != xq) {
-               qelem *q = xq->q_forw;
-               rem_que(q);
-               ins_que(q, q0);
-       }
-}
-
-/*
- * Read the lines from the configuration file and
- * add them to the list of paths.
- */
-static void
-readfp(qelem *q0, FILE *fp)
-{
-       char cline[LINE_MAX];
-       int nread = 0;
-       qelem q;
-
-       /*
-        * Make a new empty list.
-        */
-       q.q_forw = q.q_back = &q;
-
-       /*
-        * Read the lines from the configuration file.
-        */
-       while (fgets(cline, sizeof(cline), fp)) {
-               path *p = palloc(cline, nread+1);
-               if (p && !pinsert(p, &q))
-                       pfree(p);
-               nread++;
-       }
-
-       /*
-        * If some records were read, then throw
-        * away the old list and replace with the
-        * new one.
-        */
-       if (nread)
-               preplace(q0, &q);
-}
-
-/*
- * Read the configuration file (conf) and replace
- * the existing path list with the new version.
- * If the file is not readable, then no changes take place
- */
-void
-conf_read(qelem *q, char *conf)
-{
-       FILE *fp = fopen(conf, "r");
-       if (fp) {
-               conf_file = conf;               /* XXX */
-               readfp(q, fp);
-               conf_file = NULL;               /* XXX */
-               fclose(fp);
-       } else {
-               syslog(LOG_ERR, "open config file \"%s\": %s", conf, strerror(errno));
-       }
-}
-
-
-char **
-conf_match(qelem *q0, char *key)
-{
-       qelem *q;
-
-       for (q = q0->q_forw; q != q0; q = q->q_forw) {
-               path *p = (path *) q;
-               if (p->p_rxvalid) {
-                       if (!regexec(&p->p_rx, key, 0, 0, 0)) {
-                               return p->p_argv + 1;
-                       }
-               } else {
-                       if (strncmp(p->p_key, key, strlen(p->p_key)) == 0)
-                               return (p->p_argv+1);
-               }
-       }
-
-       return (0);
-}
diff --git a/sbin/mount_portal/mount_portal.8 b/sbin/mount_portal/mount_portal.8
deleted file mode 100644 (file)
index e01ba0d..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-.\"
-.\" Copyright (c) 1993, 1994
-.\"    The Regents of the University of California.  All rights reserved.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software donated to Berkeley by
-.\" Jan-Simon Pendry.
-.\"
-.\" 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. 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.
-.\"
-.\"    @(#)mount_portal.8      8.3 (Berkeley) 3/27/94
-.\" $FreeBSD: src/sbin/mount_portal/mount_portal.8,v 1.8.2.2 2001/12/20 16:41:47 ru Exp $
-.\"
-.Dd March 27, 1994
-.Dt MOUNT_PORTAL 8
-.Os
-.Sh NAME
-.Nm mount_portal
-.Nd mount the portal daemon
-.Sh SYNOPSIS
-.Nm
-.Op Fl o Ar options
-.Ar /etc/portal.conf
-.Ar mount_point
-.Sh DESCRIPTION
-The
-.Nm
-command attaches an instance of the portal daemon
-to the global filesystem namespace.
-The conventional mount point is
-.Pa /p .
-.\" .PA /dev .
-This command is normally executed by
-.Xr mount 8
-at boot time.
-.Pp
-The options are as follows:
-.Bl -tag -width indent
-.It Fl o
-Options are specified with a
-.Fl o
-flag followed by a comma separated string of options.
-See the
-.Xr mount 8
-man page for possible options and their meanings.
-.El
-.Pp
-The portal daemon provides an
-.Em open
-service.
-Objects opened under the portal mount point are
-dynamically created by the portal daemon according
-to rules specified in the named configuration file.
-Using this mechanism allows descriptors such as sockets
-to be made available in the filesystem namespace.
-.Pp
-The portal daemon works by being passed the full pathname
-of the object being opened.
-The daemon creates an appropriate descriptor according
-to the rules in the configuration file, and then passes the descriptor back
-to the calling process as the result of the open system call.
-.Sh NAMESPACE
-By convention, the portal daemon divides the namespace into sub-namespaces,
-each of which handles objects of a particular type.
-.Pp
-The following sub-namespaces are currently implemented:
-.Pa tcplisten ,
-.Pa tcp
-and
-.Pa fs .
-The
-.Pa tcplisten
-namespace takes a slash separated hostname and port and creates a TCP/IP
-socket bound to the given hostname-port pair.
-The hostname may be
-specified as "ANY" to allow any other host to connect to the socket.
-A
-port number of 0 will dynamically allocate a port, this can be
-discovered by calling
-.Xr getsockname 2
-with the returned file descriptor.
-Privileged ports can only be bound to
-by the super-user.
-The
-.Pa tcp
-namespace takes a hostname and a port (slash separated) and
-creates an open TCP/IP connection.
-The
-.Pa fs
-namespace opens the named file, starting back at the root directory.
-This can be used to provide a controlled escape path from
-a chrooted environment.
-.Sh CONFIGURATION FILE
-The configuration file contains a list of rules.
-Each rule takes one line and consists of two or more
-whitespace separated fields.
-A hash (``#'') character causes the remainder of a line to
-be ignored.  Blank lines are ignored.
-.Pp
-The first field is a pathname prefix to match
-against the requested pathname.
-If a match is found, the second field
-tells the daemon what type of object to create.
-Subsequent fields are passed to the creation function.
-.Bd -literal
-# @(#)portal.conf      5.1 (Berkeley) 7/13/92
-tcplisten/     tcplisten tcplisten/
-tcp/           tcp tcp/
-fs/            file fs/
-.Ed
-.Sh FILES
-.Bl -tag -width /p/* -compact
-.It Pa /p/*
-.El
-.Sh SEE ALSO
-.Xr mount 2 ,
-.Xr unmount 2 ,
-.Xr fstab 5 ,
-.Xr mount 8
-.Sh HISTORY
-The
-.Nm
-utility first appeared in
-.Bx 4.4 .
-.Sh CAVEATS
-This filesystem may not be NFS-exported.
diff --git a/sbin/mount_portal/mount_portal.c b/sbin/mount_portal/mount_portal.c
deleted file mode 100644 (file)
index 625463d..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright (c) 1992, 1993, 1994
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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. 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.
- *
- * @(#) Copyright (c) 1992, 1993, 1994 The Regents of the University of California.  All rights reserved.
- * @(#)mount_portal.c  8.6 (Berkeley) 4/26/95
- * $FreeBSD: src/sbin/mount_portal/mount_portal.c,v 1.16 1999/10/09 11:54:11 phk Exp $
- */
-
-#include <sys/param.h>
-#include <sys/wait.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <sys/stat.h>
-#include <sys/syslog.h>
-#include <sys/mount.h>
-
-#include <err.h>
-#include <errno.h>
-#include <mntopts.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sysexits.h>
-#include <unistd.h>
-
-#include "pathnames.h"
-#include "portald.h"
-
-struct mntopt mopts[] = {
-       MOPT_STDOPTS,
-       { NULL, 0, 0, 0 }
-};
-
-static void usage(void) __dead2;
-
-static sig_atomic_t readcf;    /* Set when SIGHUP received */
-
-static void
-sighup(int sig __unused)
-{
-       readcf ++;
-}
-
-static void
-sigchld(int sig __unused)
-{
-       pid_t pid;
-
-       while ((pid = waitpid((pid_t) -1, NULL, WNOHANG)) > 0)
-               ;
-       /* wrtp - waitpid _doesn't_ return 0 when no children! */
-#ifdef notdef
-       if (pid < 0 && errno != ECHILD)
-               syslog(LOG_WARNING, "waitpid: %s", strerror(errno));
-#endif
-}
-
-int
-main(int argc, char **argv)
-{
-       struct portal_args args;
-       struct sockaddr_un un;
-       char *conf;
-       char mountpt[MAXPATHLEN];
-       int mntflags = 0;
-       char tag[32];
-       struct vfsconf vfc;
-       mode_t um;
-
-       qelem q;
-       int rc;
-       int so;
-       int error = 0;
-
-       /*
-        * Crack command line args
-        */
-       int ch;
-
-       while ((ch = getopt(argc, argv, "o:")) != -1) {
-               switch (ch) {
-               case 'o':
-                       getmntopts(optarg, mopts, &mntflags, 0);
-                       break;
-               default:
-                       error = 1;
-                       break;
-               }
-       }
-
-       if (optind != (argc - 2))
-               error = 1;
-
-       if (error)
-               usage();
-
-       /*
-        * Get config file and mount point
-        */
-       conf = argv[optind];
-
-       /* resolve the mountpoint with realpath(3) */
-       checkpath(argv[optind+1], mountpt);
-
-       /*
-        * Construct the listening socket
-        */
-       un.sun_family = AF_UNIX;
-       if (sizeof(_PATH_TMPPORTAL) >= sizeof(un.sun_path)) {
-               errx(EX_SOFTWARE, "portal socket name too long");
-       }
-       strcpy(un.sun_path, _PATH_TMPPORTAL);
-       mktemp(un.sun_path);
-       un.sun_len = strlen(un.sun_path);
-
-       so = socket(AF_UNIX, SOCK_STREAM, 0);
-       if (so < 0) {
-               err(EX_OSERR, "socket");
-       }
-       um = umask(077);
-       unlink(un.sun_path);
-       if (bind(so, (struct sockaddr *) &un, sizeof(un)) < 0)
-               err(1, NULL);
-
-       unlink(un.sun_path);
-       umask(um);
-
-       listen(so, 5);
-
-       args.pa_socket = so;
-       sprintf(tag, "portal:%d", getpid());
-       args.pa_config = tag;
-
-       error = getvfsbyname("portal", &vfc);
-       if (error && vfsisloadable("portal")) {
-               if (vfsload("portal"))
-                       err(EX_OSERR, "vfsload(portal)");
-               endvfsent();
-               error = getvfsbyname("portal", &vfc);
-       }
-       if (error)
-               errx(EX_OSERR, "portal filesystem is not available");
-
-       rc = mount(vfc.vfc_name, mountpt, mntflags, &args);
-       if (rc < 0)
-               err(1, NULL);
-
-       /*
-        * Everything is ready to go - now is a good time to fork
-        */
-#ifndef DEBUG
-       daemon(0, 0);
-#endif
-
-       /*
-        * Start logging (and change name)
-        */
-       openlog("portald", LOG_CONS|LOG_PID, LOG_DAEMON);
-
-       q.q_forw = q.q_back = &q;
-       readcf = 1;
-
-       signal(SIGCHLD, sigchld);
-       signal(SIGHUP, sighup);
-
-       /*
-        * Just loop waiting for new connections and activating them
-        */
-       for (;;) {
-               struct sockaddr_un un2;
-               socklen_t len2 = sizeof(un2);
-               int so2;
-               pid_t pid;
-               fd_set fdset;
-
-               /*
-                * Check whether we need to re-read the configuration file
-                */
-               if (readcf) {
-#ifdef DEBUG
-                       printf ("re-reading configuration file\n");
-#endif
-                       readcf = 0;
-                       conf_read(&q, conf);
-                       continue;
-               }
-
-               /*
-                * Accept a new connection
-                * Will get EINTR if a signal has arrived, so just
-                * ignore that error code
-                */
-               FD_ZERO(&fdset);
-               FD_SET(so, &fdset);
-               rc = select(so+1, &fdset, NULL, NULL, NULL);
-               if (rc < 0) {
-                       if (errno == EINTR)
-                               continue;
-                       syslog(LOG_ERR, "select: %s", strerror(errno));
-                       exit(EX_OSERR);
-               }
-               if (rc == 0)
-                       break;
-               so2 = accept(so, (struct sockaddr *) &un2, &len2);
-               if (so2 < 0) {
-                       /*
-                        * The unmount function does a shutdown on the socket
-                        * which will generated ECONNABORTED on the accept.
-                        */
-                       if (errno == ECONNABORTED)
-                               break;
-                       if (errno != EINTR) {
-                               syslog(LOG_ERR, "accept: %s", strerror(errno));
-                               exit(EX_OSERR);
-                       }
-                       continue;
-               }
-
-               /*
-                * Now fork a new child to deal with the connection
-                */
-       eagain:;
-               switch (pid = fork()) {
-               case -1:
-                       if (errno == EAGAIN) {
-                               sleep(1);
-                               goto eagain;
-                       }
-                       syslog(LOG_ERR, "fork: %s", strerror(errno));
-                       break;
-               case 0:
-                       close(so);
-                       activate(&q, so2);
-                       exit(0);
-               default:
-                       close(so2);
-                       break;
-               }
-       }
-       syslog(LOG_INFO, "%s unmounted", mountpt);
-       exit(0);
-}
-
-static void
-usage(void)
-{
-       fprintf(stderr,
-           "usage: mount_portal [-o options] config mount-point\n");
-       exit(EX_USAGE);
-}
diff --git a/sbin/mount_portal/pathnames.h b/sbin/mount_portal/pathnames.h
deleted file mode 100644 (file)
index 9d4ee17..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- * All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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. 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.
- *
- *     @(#)pathnames.h 8.1 (Berkeley) 6/5/93
- *
- * $FreeBSD: src/sbin/mount_portal/pathnames.h,v 1.5 2000/01/10 09:33:37 kris Exp $
- * $DragonFly: src/sbin/mount_portal/pathnames.h,v 1.2 2003/06/17 04:27:33 dillon Exp $
- */
-
-#include <paths.h>
-
-#define        _PATH_TMPPORTAL  "/tmp/portalXXXXXXXXXX"        /* Scratch socket name */
diff --git a/sbin/mount_portal/portal.conf b/sbin/mount_portal/portal.conf
deleted file mode 100644 (file)
index 6677780..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# @(#)portal.conf      8.1 (Berkeley) 6/5/93
-# $FreeBSD: src/sbin/mount_portal/portal.conf,v 1.4 1999/08/28 00:13:37 peter Exp $
-# $DragonFly: src/sbin/mount_portal/portal.conf,v 1.2 2003/06/17 04:27:33 dillon Exp $
-tcplisten/     tcplisten tcplisten/
-tcp/           tcp tcp/
-fs/            file fs/
-pipe/          pipe
-foo/           exec ./bar bar baz
diff --git a/sbin/mount_portal/portald.h b/sbin/mount_portal/portald.h
deleted file mode 100644 (file)
index af6d48f..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- * All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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. 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.
- *
- *     @(#)portald.h   8.1 (Berkeley) 6/5/93
- *
- * $FreeBSD: src/sbin/mount_portal/portald.h,v 1.5 1999/08/28 00:13:37 peter Exp $
- * $DragonFly: src/sbin/mount_portal/portald.h,v 1.5 2003/11/03 19:51:05 eirikn Exp $
- */
-
-#include <sys/cdefs.h>
-#include <vfs/portal/portal.h>
-
-/*
- * Meta-chars in an RE.  Paths in the config file containing
- * any of these characters will be matched using regexec, other
- * paths will be prefix-matched.
- */
-#define RE_CHARS ".|()[]*+?\\^$"
-
-typedef struct qelem qelem;
-
-struct qelem {
-       qelem *q_forw;
-       qelem *q_back;
-};
-
-typedef struct provider provider;
-struct provider {
-       const char *pr_match;
-       int (*pr_func)(struct portal_cred *,
-                               char *key, char **v, int so, int *fdp);
-};
-extern provider providers[];
-
-/*
- * Portal providers
- */
-extern int portal_exec(struct portal_cred *,
-                               char *key, char **v, int so, int *fdp);
-extern int portal_file(struct portal_cred *,
-                               char *key, char **v, int so, int *fdp);
-extern int portal_tcp(struct portal_cred *,
-                               char *key, char **v, int so, int *fdp);
-extern int portal_tcplisten(struct portal_cred *,
-                               char *key, char **v, int so, int *fdp);
-
-/*
- * Global functions
- */
-extern void activate(qelem *q, int so);
-extern char **conf_match(qelem *q, char *key);
-extern void conf_read(qelem *q, char *conf);
diff --git a/sbin/mount_portal/pt_conf.c b/sbin/mount_portal/pt_conf.c
deleted file mode 100644 (file)
index b59698d..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- * All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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. 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.
- *
- *     @(#)pt_conf.c   8.1 (Berkeley) 6/5/93
- *
- * $FreeBSD: src/sbin/mount_portal/pt_conf.c,v 1.6 1999/08/28 00:13:37 peter Exp $
- * $DragonFly: src/sbin/mount_portal/pt_conf.c,v 1.2 2003/06/17 04:27:33 dillon Exp $
- */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include "portald.h"
-
-provider providers[] = {
-       { "exec",       portal_exec },
-       { "file",       portal_file },
-       { "tcp",        portal_tcp },
-       { "tcplisten",  portal_tcplisten },
-       { 0, 0 }
-};
diff --git a/sbin/mount_portal/pt_exec.c b/sbin/mount_portal/pt_exec.c
deleted file mode 100644 (file)
index e12750d..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- * All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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. 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.
- *
- *     @(#)pt_exec.c   8.1 (Berkeley) 6/5/93
- *
- * $FreeBSD: src/sbin/mount_portal/pt_exec.c,v 1.5 1999/08/28 00:13:37 peter Exp $
- * $DragonFly: src/sbin/mount_portal/pt_exec.c,v 1.4 2005/11/06 12:36:40 swildner Exp $
- */
-
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include "portald.h"
-
-int
-portal_exec(struct portal_cred *pcr __unused, char *key __unused,
-    char **v __unused, int so __unused, int *fdp __unused)
-{
-       return (ENOEXEC);
-}
-
diff --git a/sbin/mount_portal/pt_file.c b/sbin/mount_portal/pt_file.c
deleted file mode 100644 (file)
index 5aaa0d6..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- * All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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. 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.
- *
- *     @(#)pt_file.c   8.3 (Berkeley) 7/3/94
- *
- * $FreeBSD: src/sbin/mount_portal/pt_file.c,v 1.8 1999/08/28 00:13:38 peter Exp $
- * $DragonFly: src/sbin/mount_portal/pt_file.c,v 1.5 2005/11/06 12:36:40 swildner Exp $
- */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/syslog.h>
-
-#include "portald.h"
-
-int
-portal_file(struct portal_cred *pcr, char *key, char **v, int so __unused,
-    int *fdp)
-{
-       int fd;
-       char pbuf[MAXPATHLEN];
-       int error;
-       gid_t gidset[NGROUPS];
-       int i;
-
-       pbuf[0] = '/';
-       strcpy(pbuf+1, key + (v[1] ? strlen(v[1]) : 0));
-
-#ifdef DEBUG
-       printf("path = %s, uid = %d, gid = %d\n", pbuf, pcr->pcr_uid, pcr->pcr_groups[0]);
-       printf ("fflag = %x, oflag = %x\n", pcr->pcr_flag, (pcr->pcr_flag)-1);
-#endif
-
-       for (i = 0; i < pcr->pcr_ngroups; i++)
-               gidset[i] = pcr->pcr_groups[i];
-
-       if (setgroups(pcr->pcr_ngroups, gidset) < 0)
-               return (errno);
-
-       if (seteuid(pcr->pcr_uid) < 0)
-               return (errno);
-
-       /* dmb convert kernel flags to oflags, see <fcntl.h> */
-       fd = open(pbuf, (pcr->pcr_flag)-1, 0777);
-       if (fd < 0)
-               error = errno;
-       else
-               error = 0;
-
-       if (seteuid((uid_t) 0) < 0) {   /* XXX - should reset gidset too */
-               error = errno;
-               syslog(LOG_ERR, "setcred: %s", strerror(error));
-               if (fd >= 0) {
-                       close(fd);
-                       fd = -1;
-               }
-       }
-
-       if (error == 0)
-               *fdp = fd;
-
-#ifdef DEBUG
-       fprintf(stderr, "pt_file returns *fdp = %d, error = %d\n", *fdp, error);
-#endif
-
-       return (error);
-}
diff --git a/sbin/mount_portal/pt_tcp.c b/sbin/mount_portal/pt_tcp.c
deleted file mode 100644 (file)
index 48c6dcd..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 1992, 1993, 1994
- *     The Regents of the University of California.  All rights reserved.
- * All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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. 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.
- *
- *     @(#)pt_tcp.c    8.5 (Berkeley) 4/28/95
- *
- * $FreeBSD: src/sbin/mount_portal/pt_tcp.c,v 1.9 1999/08/28 00:13:38 peter Exp $
- */
-
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/syslog.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-
-#include "portald.h"
-
-/*
- * Key will be tcp/host/port[/"priv"]
- * Create a TCP socket connected to the
- * requested host and port.
- * Some trailing suffix values have special meanings.
- * An unrecognized suffix is an error.
- */
-int
-portal_tcp(struct portal_cred *pcr, char *key, char **v, int kso __unused,
-    int *fdp)
-{
-       char host[MAXHOSTNAMELEN];
-       char port[MAXHOSTNAMELEN];
-       char *p = key + (v[1] ? strlen(v[1]) : 0);
-       char *q;
-       struct hostent *hp;
-       struct servent *sp;
-       struct in_addr **ipp;
-       struct in_addr *ip[2];
-       struct in_addr ina;
-       u_short s_port;
-       int priv = 0;
-       struct sockaddr_in sain;
-
-       q = strchr(p, '/');
-       if (q == NULL || (size_t)(q - p) >= sizeof(host))
-               return (EINVAL);
-       *q = '\0';
-       strcpy(host, p);
-       p = q + 1;
-
-       q = strchr(p, '/');
-       if (q)
-               *q = '\0';
-       if (strlen(p) >= sizeof(port))
-               return (EINVAL);
-       strcpy(port, p);
-       if (q) {
-               p = q + 1;
-               if (strcmp(p, "priv") == 0) {
-                       if (pcr->pcr_uid == 0)
-                               priv = 1;
-                       else
-                               return (EPERM);
-               } else {
-                       return (EINVAL);
-               }
-       }
-
-       hp = gethostbyname(host);
-       if (hp != NULL) {
-               ipp = (struct in_addr **) hp->h_addr_list;
-       } else {
-               ina.s_addr = inet_addr(host);
-               if (ina.s_addr == INADDR_NONE)
-                       return (EINVAL);
-               ip[0] = &ina;
-               ip[1] = NULL;
-               ipp = ip;
-       }
-#ifdef DEBUG
-       printf ("inet address for %s is %s\n", host, inet_ntoa(*ipp[0]));
-#endif
-
-       sp = getservbyname(port, "tcp");
-       if (sp != NULL) {
-               s_port = (u_short)sp->s_port;
-       } else {
-               s_port = strtoul(port, &p, 0);
-               if (s_port == 0 || *p != '\0')
-                       return (EINVAL);
-               s_port = htons(s_port);
-       }
-#ifdef DEBUG
-       printf ("port number for %s is %d\n", port, (int)ntohs(s_port));
-#endif
-
-       memset(&sain, 0, sizeof(sain));
-       sain.sin_len = sizeof(sain);
-       sain.sin_family = AF_INET;
-       sain.sin_port = s_port;
-
-       while (ipp[0]) {
-               int so;
-
-               if (priv)
-                       so = rresvport(NULL);
-               else
-                       so = socket(AF_INET, SOCK_STREAM, 0);
-               if (so < 0) {
-                       syslog(LOG_ERR, "socket: %m");
-                       return (errno);
-               }
-
-               sain.sin_addr = *ipp[0];
-               if (connect(so, (struct sockaddr *) &sain, sizeof(sain)) == 0) {
-                       *fdp = so;
-                       return (0);
-               }
-               close(so);
-
-               ipp++;
-       }
-
-       return (errno);
-}
diff --git a/sbin/mount_portal/pt_tcplisten.c b/sbin/mount_portal/pt_tcplisten.c
deleted file mode 100644 (file)
index e039be9..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *  The Regents of the University of California.  All rights reserved.
- * All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * Modified by Duncan Barclay.
- *
- * 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. 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.
- *
- *  @(#)pt_tcp.c  8.3 (Berkeley) 3/27/94
- *
- * pt_tcp.c,v 1.1.1.1 1994/05/26 06:34:34 rgrimes Exp
- */
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/syslog.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-
-#include "portald.h"
-
-/*
- * Key will be tcplisten/host/port
- *
- * Create a TCP socket bound to the requested host and port.
- * If the host is "ANY" the receving address will be set to INADDR_ANY.
- * If the port is 0 the caller must find out the returned port number
- * using a call to getsockname.
- *
- * XXX!  The owner of the socket will be root rather then the user.  This
- *      may cause remote auth (identd) to return unexpected results.
- *
- */
-int
-portal_tcplisten(struct portal_cred *pcr, char *key, char **v,
-    int kso __unused, int *fdp)
-{
-       char host[MAXHOSTNAMELEN];
-       char port[MAXHOSTNAMELEN];
-       char *p = key + (v[1] ? strlen(v[1]) : 0);
-       char *q;
-       struct hostent *hp;
-       struct servent *sp;
-       struct in_addr **ipp = NULL;
-       struct in_addr *ip[2];
-       struct in_addr ina;
-       u_short s_port;
-       int any = 0;
-       struct sockaddr_in sain;
-
-       q = strchr(p, '/');
-       if (q == NULL || (size_t)(q - p) >= sizeof(host))
-               return (EINVAL);
-       *q = '\0';
-       snprintf(host, sizeof(host), "%s", p);
-       p = q + 1;
-
-       q = strchr(p, '/');
-       if (q)
-               *q = '\0';
-       if (strlen(p) >= sizeof(port))
-               return (EINVAL);
-       snprintf(port, sizeof(port), "%s", p);
-
-       if (strcmp(host, "ANY") == 0) {
-               any = 1;
-       } else {
-               hp = gethostbyname(host);
-               if (hp != NULL) {
-                       ipp = (struct in_addr **) hp->h_addr_list;
-               } else {
-                       ina.s_addr = inet_addr(host);
-                       if (ina.s_addr == INADDR_NONE)
-                               return (EINVAL);
-                       ip[0] = &ina;
-                       ip[1] = NULL;
-                       ipp = ip;
-               }
-       }
-#ifdef DEBUG
-       if (any)
-               printf("INADDR_ANY to be used for hostname\n");
-       else
-               printf("inet address for %s is %s\n", host, inet_ntoa(*ipp[0]));
-#endif
-
-       sp = getservbyname(port, "tcp");
-       if (sp != NULL) {
-               s_port = (u_short) sp->s_port;
-        } else {
-               s_port = strtoul(port, &p, 0);
-               if (*p != '\0')
-                       return (EINVAL);
-               s_port = htons(s_port);
-       }
-       if ((ntohs(s_port) != 0) &&
-           (ntohs(s_port) <= IPPORT_RESERVED) &&
-           (pcr->pcr_uid != 0))
-               return (EPERM);
-#ifdef DEBUG
-       printf("port number for %s is %d\n", port, ntohs(s_port));
-#endif
-
-       memset(&sain, 0, sizeof(sain));
-       sain.sin_len = sizeof(sain);
-       sain.sin_family = AF_INET;
-       sain.sin_port = s_port;
-
-       if (any) {
-               int so;
-               int sock;
-
-               so = socket(AF_INET, SOCK_STREAM, 0);
-               if (so < 0) {
-                       syslog(LOG_ERR, "socket: %m");
-                       return (errno);
-               }
-
-               sain.sin_addr.s_addr = INADDR_ANY;
-               if (bind(so, (struct sockaddr *) &sain, sizeof(sain)) == 0) {
-                       listen(so, 1);
-                       if ((sock = accept(so, NULL, NULL)) == -1) {
-                               syslog(LOG_ERR, "accept: %m");
-                               close(so);
-                               return (errno);
-                       }
-                       *fdp = sock;
-                       close(so);
-                       return (0);
-               }
-               syslog(LOG_ERR, "bind: %m");
-               close(so);
-               return (errno);
-       }
-
-       while (ipp[0]) {
-               int so;
-               int sock;
-
-               so = socket(AF_INET, SOCK_STREAM, 0);
-               if (so < 0) {
-                       syslog(LOG_ERR, "socket: %m");
-                       return (errno);
-               }
-
-               sain.sin_addr = *ipp[0];
-               if (bind(so, (struct sockaddr *) &sain, sizeof(sain)) == 0) {
-                       listen(so, 1);
-                       if ((sock = accept(so, NULL, NULL)) == -1) {
-                               syslog(LOG_ERR, "accept: %m");
-                               close(so);
-                               return (errno);
-                       }
-                       *fdp = sock;
-                       close(so);
-                       return (0);
-               }
-               close(so);
-
-               ipp++;
-       }
-
-       syslog(LOG_ERR, "bind: %m");
-       return (errno);
-
-}
index f47676c..b0bc398 100644 (file)
@@ -408,7 +408,6 @@ have permission to load the module.
 .Xr mount_nfs 8 ,
 .Xr mount_ntfs 8 ,
 .Xr mount_null 8 ,
-.Xr mount_portal 8 ,
 .Xr mount_procfs 8 ,
 .Xr mount_smbfs 8 ,
 .Xr mount_std 8 ,
diff --git a/share/examples/portal/README b/share/examples/portal/README
deleted file mode 100644 (file)
index f3a2690..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-
-This contains a couple of examples for using the portal filing system.
-
-The portal file system provides a way of obtaining a file descriptor
-to a filesystem object (i.e. something that is accessed by open(2),
-pipe(2), socket(2) or socketpair(2)) via the filesystem namespace.
-At present the only file descriptor supported are TCP sockets and
-files.
-
-NOTE!!!! The portal file system is experimental in nature and should
-not be considered secure, use with caution.
-
-First off mount the filesystem using something like:
-
-# mount_portal /usr/share/examples/portal/portal.conf /p
-
-Then you should be able to do things like
-# cat /p/tcp/localhost/daytime
-Sun Nov 22 17:50:09 1998
-(assuming inetd is running the daytime service, by default it is off)
-
-Welcome to FreeBSD!
-
-# mkdir -p /tmp/root
-# cd /tmp/root
-# mkdir bin p
-# cp /bin/sh /bin/cat bin
-# mount_portal /usr/share/examples/portal/portal.conf /tmp/root/p
-# chroot /tmp/root
-# pwd
-/
-# echo *
-bin p
-# cat /etc/motd
-cat: /etc/motd: No such file or directory
-# cat /p/fs/etc/motd
-FreeBSD 2.2.6-RELEASE (COMPUTER) #0: Sat Aug 22 17:11:37 BST 1998
-
-Welcome to FreeBSD!
-
-Finally, a very simple example of the listening server is available,
-fire up two xterms. In the first
-
-xterm-1$ cat /p/tcplisten/ANY/6666
-(the ANY is a wildcard just like using INADDR_ANY, any resolvable host
-can be used).
-
-In the second xterm
-xterm-2$ echo "hello there" >/p/tcp/localhost/6666
-
-You should see the "hello there" string appear on the first terminal.
-
-Unprivilged users can't create servers on privalged ports.
-xterm-1$ cat /p/tcplisten/ANY/666
-cat: /p/tcplisten/ANY/666: Operation not permitted
-
-but root can
-xterm-1# cat /p/tcplisten/ANY/666
-
-In the second
-xterm-2$ echo "hello there" >/p/tcp/localhost/666
-should produce the expected response.
-
-You can also swap the client/server read and write commands etc.
diff --git a/share/examples/portal/portal.conf b/share/examples/portal/portal.conf
deleted file mode 100644 (file)
index aa7e282..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-tcp/           tcp tcp/
-tcplisten/     tcplisten tcplisten/
-fs/            file fs/
index 7322230..07e0f5b 100644 (file)
@@ -108,7 +108,6 @@ msdos_load="NO"                     # FAT-12/16/32
 nfs_load="NO"                  # NFS
 ntfs_load="NO"                 # NTFS
 null_load="NO"                 # Null filesystem
-portal_load="NO"               # Portal filesystem
 procfs_load="NO"               # Process filesystem
 smbfs_load="NO"                        # SMB/CIFS
 udf_load="NO"                  # UDF filesystem
index d85319f..c3cbcaa 100644 (file)
@@ -116,7 +116,6 @@ msdos_load="NO"                     # FAT-12/16/32
 nfs_load="NO"                  # NFS
 ntfs_load="NO"                 # NTFS
 null_load="NO"                 # Null filesystem
-portal_load="NO"               # Portal filesystem
 procfs_load="NO"               # Process filesystem
 smbfs_load="NO"                        # SMB/CIFS
 udf_load="NO"                  # UDF filesystem
index b368f77..d4738ae 100644 (file)
@@ -1275,8 +1275,6 @@ vfs/deadfs/dead_vnops.c   standard
 vfs/fifofs/fifo_vnops.c        standard
 vfs/nullfs/null_vfsops.c       optional nullfs
 vfs/nullfs/null_vnops.c        optional nullfs
-vfs/portal/portal_vfsops.c     optional portal
-vfs/portal/portal_vnops.c      optional portal
 vfs/procfs/procfs_ctl.c        optional procfs
 vfs/procfs/procfs_dbregs.c     standard
 vfs/procfs/procfs_fpregs.c     standard
index 820b624..5d0a8eb 100644 (file)
@@ -127,7 +127,6 @@ MFS         opt_dontuse.h
 MSDOSFS                opt_dontuse.h
 NTFS           opt_dontuse.h
 NULLFS         opt_dontuse.h
-PORTAL         opt_dontuse.h
 PROCFS         opt_dontuse.h
 PUFFS          opt_dontuse.h
 SMBFS          opt_dontuse.h
index 84c3d90..d8e1a7f 100644 (file)
@@ -478,11 +478,6 @@ options            IFPOLL_ENABLE
 # cannot currently be demand-loaded.)  Some people still prefer
 # to statically compile other filesystems as well.
 #
-# NB: The PORTAL filesystem is known to be
-# buggy, and WILL panic your system if you attempt to do anything with
-# it.  It is included here as an incentive for some enterprising
-# soul to sit down and fix it.
-#
 
 # One of these is mandatory:
 options        FFS                     #Fast filesystem
@@ -498,7 +493,6 @@ options     HPFS                    #OS/2 File system
 options        MSDOSFS                 #MS DOS filesystem
 options        NTFS                    #NT filesystem
 options        NULLFS                  #NULL filesystem
-options        PORTAL                  #Portal filesystem
 options        PROCFS                  #Process filesystem
 options                PUFFS                   #Userspace file systems (e.g. ntfs-3g & sshfs)
 options        SMBFS                   #SMB/CIFS filesystem
index 42d294c..c0ec537 100644 (file)
@@ -105,7 +105,7 @@ enum vtype  { VNON, VREG, VDIR, VBLK, VCHR, VLNK, VSOCK, VFIFO, VBAD,
  */
 enum vtagtype  {
        VT_NON, VT_UFS, VT_NFS, VT_MFS, VT_PC, VT_LFS, VT_LOFS, VT_UNUSED7,
-       VT_PORTAL, VT_NULL, VT_UNUSED10, VT_KERNFS, VT_PROCFS, VT_AFS,
+       VT_UNUSED8, VT_NULL, VT_UNUSED10, VT_KERNFS, VT_PROCFS, VT_AFS,
        VT_ISOFS, VT_UNUSED15, VT_MSDOSFS, VT_TFS, VT_VFS, VT_CODA, VT_NTFS,
        VT_HPFS, VT_SMBFS, VT_UDF, VT_EXT2FS, VT_SYNTH,
        VT_HAMMER, VT_HAMMER2, VT_DEVFS, VT_TMPFS, VT_AUTOFS
index 882f933..9438062 100644 (file)
@@ -1,7 +1,7 @@
 # Makefile for vfs modules
 #
 
-SUBDIR=fifofs msdosfs portal nfs procfs puffs \
+SUBDIR=fifofs msdosfs nfs procfs puffs \
        hpfs ntfs smbfs isofs mfs udf \
        nullfs hammer tmpfs autofs
 
diff --git a/sys/vfs/portal/Makefile b/sys/vfs/portal/Makefile
deleted file mode 100644 (file)
index 08a8a3b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# $FreeBSD: src/sys/modules/portal/Makefile,v 1.7 1999/12/12 20:34:09 peter Exp $
-# $DragonFly: src/sys/vfs/portal/Makefile,v 1.4 2004/08/13 17:51:12 dillon Exp $
-
-KMOD=  portal
-SRCS=  portal_vfsops.c portal_vnops.c
-
-.include <bsd.kmod.mk>
diff --git a/sys/vfs/portal/portal.h b/sys/vfs/portal/portal.h
deleted file mode 100644 (file)
index 7d6508a..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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. 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.
- *
- *     @(#)portal.h    8.4 (Berkeley) 1/21/94
- *
- * $FreeBSD: src/sys/miscfs/portal/portal.h,v 1.7 1999/12/29 04:54:45 peter Exp $
- * $DragonFly: src/sys/vfs/portal/portal.h,v 1.4 2004/08/17 18:57:35 dillon Exp $
- */
-
-struct portal_args {
-       char            *pa_config;     /* Config file */
-       int             pa_socket;      /* Socket to server */
-};
-
-struct portal_cred {
-       int             pcr_flag;               /* File open mode */
-       uid_t           pcr_uid;                /* From ucred */
-       short           pcr_ngroups;            /* From ucred */
-       gid_t           pcr_groups[NGROUPS];    /* From ucred */
-};
-
-#ifdef _KERNEL
-struct portalmount {
-       struct vnode    *pm_root;       /* Root node */
-       struct file     *pm_server;     /* Held reference to server socket */
-};
-
-struct portalnode {
-       int             pt_size;        /* Length of Arg */
-       char            *pt_arg;        /* Arg to send to server */
-       int             pt_fileid;      /* cookie */
-};
-
-#define VFSTOPORTAL(mp)        ((struct portalmount *)((mp)->mnt_data))
-#define        VTOPORTAL(vp) ((struct portalnode *)(vp)->v_data)
-
-#define PORTAL_ROOTFILEID      2
-
-#endif /* _KERNEL */
diff --git a/sys/vfs/portal/portal_vfsops.c b/sys/vfs/portal/portal_vfsops.c
deleted file mode 100644 (file)
index 73618a9..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Copyright (c) 1992, 1993, 1995
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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. 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.
- *
- *     @(#)portal_vfsops.c     8.11 (Berkeley) 5/14/95
- *
- * $FreeBSD: src/sys/miscfs/portal/portal_vfsops.c,v 1.26.2.2 2001/07/26 20:37:16 iedowse Exp $
- */
-
-/*
- * Portal Filesystem
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/proc.h>
-#include <sys/filedesc.h>
-#include <sys/file.h>
-#include <sys/vnode.h>
-#include <sys/mount.h>
-#include <sys/malloc.h>
-#include <sys/socket.h>
-#include <sys/socketvar.h>
-#include <sys/protosw.h>
-#include <sys/domain.h>
-#include "portal.h"
-
-extern struct vop_ops portal_vnode_vops;
-
-static MALLOC_DEFINE(M_PORTALFSMNT, "PORTAL mount", "PORTAL mount structure");
-
-static int     portal_mount (struct mount *mp, char *path, caddr_t data,
-                                 struct ucred *cred);
-static int     portal_unmount (struct mount *mp, int mntflags);
-static int     portal_root (struct mount *mp, struct vnode **vpp);
-static int     portal_statfs (struct mount *mp, struct statfs *sbp,
-                               struct ucred *);
-
-/*
- * Mount the per-process file descriptors (/dev/fd)
- */
-static int
-portal_mount(struct mount *mp, char *path, caddr_t data, struct ucred *cred)
-{
-       struct file *fp;
-       struct portal_args args;
-       struct portalmount *fmp;
-       struct socket *so;
-       struct vnode *rvp;
-       struct portalnode *pn;
-       size_t size;
-       int error;
-
-       /*
-        * Update is a no-op
-        */
-       if (mp->mnt_flag & MNT_UPDATE)
-               return (EOPNOTSUPP);
-
-       error = copyin(data, (caddr_t) &args, sizeof(struct portal_args));
-       if (error)
-               return (error);
-
-       KKASSERT(curproc != NULL);
-       error = holdsock(curproc->p_fd, args.pa_socket, &fp);
-       if (error)
-               return (error);
-       so = (struct socket *) fp->f_data;
-       if (so->so_proto->pr_domain->dom_family != AF_UNIX) {
-               fdrop(fp);
-               return (ESOCKTNOSUPPORT);
-       }
-
-       pn = kmalloc(sizeof(struct portalnode), M_TEMP, M_WAITOK);
-
-       fmp = kmalloc(sizeof(struct portalmount), M_PORTALFSMNT, M_WAITOK);     /* XXX */
-
-        
-       vfs_add_vnodeops(mp, &portal_vnode_vops, &mp->mnt_vn_norm_ops);
-
-       error = getnewvnode(VT_PORTAL, mp, &rvp, 0, 0);
-       if (error) {
-               kfree(fmp, M_PORTALFSMNT);
-               kfree(pn, M_TEMP);
-               fdrop(fp);
-               return (error);
-       }
-
-       rvp->v_data = pn;
-       rvp->v_type = VDIR;
-       vsetflags(rvp, VROOT);
-       VTOPORTAL(rvp)->pt_arg = 0;
-       VTOPORTAL(rvp)->pt_size = 0;
-       VTOPORTAL(rvp)->pt_fileid = PORTAL_ROOTFILEID;
-       fmp->pm_root = rvp;
-       fmp->pm_server = fp;
-       fhold(fp);
-
-       mp->mnt_flag |= MNT_LOCAL;
-       mp->mnt_data = (qaddr_t) fmp;
-       vfs_getnewfsid(mp);
-
-       (void)copyinstr(args.pa_config,
-           mp->mnt_stat.f_mntfromname, MNAMELEN - 1, &size);
-       bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
-
-#ifdef notdef
-       bzero(mp->mnt_stat.f_mntfromname, MNAMELEN);
-       bcopy("portal", mp->mnt_stat.f_mntfromname, sizeof("portal"));
-#endif
-       vx_unlock(rvp);
-
-       (void)portal_statfs(mp, &mp->mnt_stat, cred);
-       fdrop(fp);
-       return (0);
-}
-
-static int
-portal_unmount(struct mount *mp, int mntflags)
-{
-       int error, flags = 0;
-
-
-       if (mntflags & MNT_FORCE)
-               flags |= FORCECLOSE;
-
-       /*
-        * Clear out buffer cache.  I don't think we
-        * ever get anything cached at this level at the
-        * moment, but who knows...
-        */
-#ifdef notyet
-       mntflushbuf(mp, 0);
-       if (mntinvalbuf(mp, 1))
-               return (EBUSY);
-#endif
-       /* There is 1 extra root vnode reference (pm_root). */
-       error = vflush(mp, 1, flags);
-       if (error)
-               return (error);
-
-       /*
-        * Shutdown the socket.  This will cause the select in the
-        * daemon to wake up, and then the accept will get ECONNABORTED
-        * which it interprets as a request to go and bury itself.
-        */
-       soshutdown((struct socket *) VFSTOPORTAL(mp)->pm_server->f_data,
-               SHUT_RDWR);
-       /*
-        * Discard reference to underlying file.  Must call closef because
-        * this may be the last reference.
-        */
-       closef(VFSTOPORTAL(mp)->pm_server, NULL);
-       /*
-        * Finally, throw away the portalmount structure
-        */
-       kfree(mp->mnt_data, M_PORTALFSMNT);     /* XXX */
-       mp->mnt_data = 0;
-       return (0);
-}
-
-static int
-portal_root(struct mount *mp, struct vnode **vpp)
-{
-       struct vnode *vp;
-       int error;
-
-       /*
-        * Return locked reference to root.
-        */
-       vp = VFSTOPORTAL(mp)->pm_root;
-       error = vget(vp, LK_EXCLUSIVE | LK_RETRY);
-       if (error == 0)
-               *vpp = vp;
-       return (error);
-}
-
-static int
-portal_statfs(struct mount *mp, struct statfs *sbp, struct ucred *cred)
-{
-       sbp->f_flags = 0;
-       sbp->f_bsize = DEV_BSIZE;
-       sbp->f_iosize = DEV_BSIZE;
-       sbp->f_blocks = 2;              /* 1K to keep df happy */
-       sbp->f_bfree = 0;
-       sbp->f_bavail = 0;
-       sbp->f_files = 1;               /* Allow for "." */
-       sbp->f_ffree = 0;               /* See comments above */
-       if (sbp != &mp->mnt_stat) {
-               sbp->f_type = mp->mnt_vfc->vfc_typenum;
-               bcopy(&mp->mnt_stat.f_fsid, &sbp->f_fsid, sizeof(sbp->f_fsid));
-               bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
-       }
-       return (0);
-}
-
-static struct vfsops portal_vfsops = {
-       .vfs_mount =            portal_mount,
-       .vfs_unmount =          portal_unmount,
-       .vfs_root =             portal_root,
-       .vfs_statfs =           portal_statfs,
-};
-
-VFS_SET(portal_vfsops, portal, VFCF_SYNTHETIC);
-MODULE_VERSION(portal, 1);
diff --git a/sys/vfs/portal/portal_vnops.c b/sys/vfs/portal/portal_vnops.c
deleted file mode 100644 (file)
index 1ab16c5..0000000
+++ /dev/null
@@ -1,580 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software donated to Berkeley by
- * Jan-Simon Pendry.
- *
- * 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. 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.
- *
- *     @(#)portal_vnops.c      8.14 (Berkeley) 5/21/95
- *
- * $FreeBSD: src/sys/miscfs/portal/portal_vnops.c,v 1.38 1999/12/21 06:29:00 chris Exp $
- */
-
-/*
- * Portal Filesystem
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/sysproto.h>
-#include <sys/kernel.h>
-#include <sys/time.h>
-#include <sys/proc.h>
-#include <sys/filedesc.h>
-#include <sys/vnode.h>
-#include <sys/fcntl.h>
-#include <sys/file.h>
-#include <sys/stat.h>
-#include <sys/mount.h>
-#include <sys/malloc.h>
-#include <sys/namei.h>
-#include <sys/mbuf.h>
-#include <sys/resourcevar.h>
-#include <sys/socket.h>
-#include <sys/socketvar.h>
-#include <sys/un.h>
-#include <sys/unpcb.h>
-#include "portal.h"
-
-#include <sys/thread2.h>
-
-static int portal_fileid = PORTAL_ROOTFILEID+1;
-
-static int     portal_badop (void);
-static void    portal_closefd (struct thread *td, int fd);
-static int     portal_connect (struct socket *so, struct socket *so2);
-static int     portal_getattr (struct vop_getattr_args *ap);
-static int     portal_inactive (struct vop_inactive_args *ap);
-static int     portal_lookup (struct vop_old_lookup_args *ap);
-static int     portal_open (struct vop_open_args *ap);
-static int     portal_print (struct vop_print_args *ap);
-static int     portal_readdir (struct vop_readdir_args *ap);
-static int     portal_reclaim (struct vop_reclaim_args *ap);
-static int     portal_setattr (struct vop_setattr_args *ap);
-
-static void
-portal_closefd(struct thread *td, int fd)
-{
-       int error;
-       struct close_args ua;
-
-       ua.fd = fd;
-       error = sys_close(&ua);
-       /*
-        * We should never get an error, and there isn't anything
-        * we could do if we got one, so just print a message.
-        */
-       if (error)
-               kprintf("portal_closefd: error = %d\n", error);
-}
-
-/*
- * vp is the current namei directory
- * cnp is the name to locate in that directory...
- *
- * portal_lookup(struct vnode *a_dvp, struct vnode **a_vpp,
- *              struct componentname *a_cnp)
- */
-static int
-portal_lookup(struct vop_old_lookup_args *ap)
-{
-       struct componentname *cnp = ap->a_cnp;
-       struct vnode **vpp = ap->a_vpp;
-       struct vnode *dvp = ap->a_dvp;
-       char *pname = cnp->cn_nameptr;
-       struct portalnode *pt;
-       int error;
-       struct vnode *fvp = NULL;
-       char *path;
-       int size;
-
-       *vpp = NULLVP;
-
-       if (cnp->cn_nameiop == NAMEI_DELETE || cnp->cn_nameiop == NAMEI_RENAME)
-               return (EROFS);
-
-       if (cnp->cn_namelen == 1 && *pname == '.') {
-               *vpp = dvp;
-               vref(dvp);
-               return (0);
-       }
-
-       /*
-        * Do the MALLOC before the getnewvnode since doing so afterward
-        * might cause a bogus v_data pointer to get dereferenced
-        * elsewhere if MALLOC should block.
-        */
-       pt = kmalloc(sizeof(struct portalnode), M_TEMP, M_WAITOK);
-
-       error = getnewvnode(VT_PORTAL, dvp->v_mount, &fvp, 0, 0);
-       if (error) {
-               kfree(pt, M_TEMP);
-               goto bad;
-       }
-       fvp->v_type = VREG;
-       fvp->v_data = pt;
-
-       /*
-        * Save all of the remaining pathname and
-        * advance the namei next pointer to the end
-        * of the string.
-        */
-       for (size = 0, path = pname; *path; path++)
-               size++;
-       cnp->cn_consume = size - cnp->cn_namelen;
-
-       pt->pt_arg = kmalloc(size+1, M_TEMP, M_WAITOK);
-       pt->pt_size = size+1;
-       bcopy(pname, pt->pt_arg, pt->pt_size);
-       pt->pt_fileid = portal_fileid++;
-
-       *vpp = fvp;
-       vx_unlock(fvp);
-       return (0);
-
-bad:;
-       if (fvp)
-               vrele(fvp);
-       return (error);
-}
-
-static int
-portal_connect(struct socket *so, struct socket *so2)
-{
-       /* from unp_connect, bypassing the namei stuff... */
-       struct socket *so3;
-       struct unpcb *unp2;
-       struct unpcb *unp3;
-
-       if (so2 == NULL)
-               return (ECONNREFUSED);
-
-       if (so->so_type != so2->so_type)
-               return (EPROTOTYPE);
-
-       if ((so2->so_options & SO_ACCEPTCONN) == 0)
-               return (ECONNREFUSED);
-
-       if ((so3 = sonewconn(so2, 0)) == NULL)
-               return (ECONNREFUSED);
-
-       unp2 = so2->so_pcb;
-       unp3 = so3->so_pcb;
-       if (unp2->unp_addr)
-               unp3->unp_addr = (struct sockaddr_un *)
-                       dup_sockaddr((struct sockaddr *)unp2->unp_addr);
-       so2 = so3;
-
-       return (unp_connect2(so, so2));
-}
-
-/*
- * portal_open(struct vnode *a_vp, int a_mode, struct ucred *a_cred,
- *            struct file *a_fp)
- */
-static int
-portal_open(struct vop_open_args *ap)
-{
-       struct socket *so = NULL;
-       struct portalnode *pt;
-       struct thread *td = curthread;
-       struct vnode *vp = ap->a_vp;
-       struct uio auio;
-       struct iovec aiov[2];
-       struct sockbuf sio;
-       int res;
-       struct mbuf *cm = NULL;
-       struct cmsghdr *cmsg;
-       int newfds;
-       int *ip;
-       int fd;
-       int error;
-       int len;
-       struct portalmount *fmp;
-       struct file *fp;
-       struct portal_cred pcred;
-
-       /*
-        * Nothing to do when opening the root node.
-        */
-       if (vp->v_flag & VROOT)
-               return (vop_stdopen(ap));
-
-       /*
-        * Can't be opened unless the caller is set up
-        * to deal with the side effects.  Check for this
-        * by testing whether the p_dupfd has been set.
-        */
-       KKASSERT(td->td_proc);
-       if (td->td_lwp->lwp_dupfd >= 0)
-               return (ENODEV);
-
-       pt = VTOPORTAL(vp);
-       fmp = VFSTOPORTAL(vp->v_mount);
-
-       /*
-        * Create a new socket.
-        */
-       error = socreate(AF_UNIX, &so, SOCK_STREAM, 0, td);
-       if (error)
-               goto bad;
-
-       /*
-        * Reserve some buffer space
-        */
-       res = pt->pt_size + sizeof(pcred) + 512;        /* XXX */
-       error = soreserve(so, res, res, &td->td_proc->p_rlimit[RLIMIT_SBSIZE]);
-       if (error)
-               goto bad;
-
-       /*
-        * Kick off connection
-        */
-       error = portal_connect(so, (struct socket *)fmp->pm_server->f_data);
-       if (error)
-               goto bad;
-
-       /*
-        * Wait for connection to complete
-        */
-       /*
-        * XXX: Since the mount point is holding a reference on the
-        * underlying server socket, it is not easy to find out whether
-        * the server process is still running.  To handle this problem
-        * we loop waiting for the new socket to be connected (something
-        * which will only happen if the server is still running) or for
-        * the reference count on the server socket to drop to 1, which
-        * will happen if the server dies.  Sleep for 5 second intervals
-        * and keep polling the reference count.   XXX.
-        */
-       crit_enter();
-       while ((so->so_state & SS_ISCONNECTING) && so->so_error == 0) {
-               if (fmp->pm_server->f_count == 1) {
-                       error = ECONNREFUSED;
-                       crit_exit();
-                       goto bad;
-               }
-               (void) tsleep((caddr_t) &so->so_timeo, 0, "portalcon", 5 * hz);
-       }
-       crit_exit();
-
-       if (so->so_error) {
-               error = so->so_error;
-               goto bad;
-       }
-
-       /*
-        * Set miscellaneous flags
-        */
-       so->so_rcv.ssb_timeo = 0;
-       so->so_snd.ssb_timeo = 0;
-       atomic_set_int(&so->so_rcv.ssb_flags, SSB_NOINTR);
-       atomic_set_int(&so->so_snd.ssb_flags, SSB_NOINTR);
-
-
-       pcred.pcr_flag = ap->a_mode;
-       pcred.pcr_uid = ap->a_cred->cr_uid;
-       pcred.pcr_ngroups = ap->a_cred->cr_ngroups;
-       bcopy(ap->a_cred->cr_groups, pcred.pcr_groups, NGROUPS * sizeof(gid_t));
-       aiov[0].iov_base = (caddr_t) &pcred;
-       aiov[0].iov_len = sizeof(pcred);
-       aiov[1].iov_base = pt->pt_arg;
-       aiov[1].iov_len = pt->pt_size;
-       auio.uio_iov = aiov;
-       auio.uio_iovcnt = 2;
-       auio.uio_rw = UIO_WRITE;
-       auio.uio_segflg = UIO_SYSSPACE;
-       auio.uio_td = td;
-       auio.uio_offset = 0;
-       auio.uio_resid = aiov[0].iov_len + aiov[1].iov_len;
-
-       error = sosend(so, NULL, &auio, NULL, NULL, 0, td);
-       if (error)
-               goto bad;
-
-       len = sizeof(int);
-       sbinit(&sio, len);
-       do {
-               struct mbuf *m;
-               int flags;
-
-               flags = MSG_WAITALL;
-               error = soreceive(so, NULL, NULL, &sio, &cm, &flags);
-               if (error)
-                       goto bad;
-
-               /*
-                * Grab an error code from the mbuf.
-                */
-               if ((m = sio.sb_mb) != NULL) {
-                       m = m_pullup(m, sizeof(int));   /* Needed? */
-                       if (m) {
-                               error = *(mtod(m, int *));
-                               m_freem(m);
-                       } else {
-                               error = EINVAL;
-                       }
-               } else {
-                       if (cm == NULL) {
-                               error = ECONNRESET;      /* XXX */
-#ifdef notdef
-                               break;
-#endif
-                       }
-               }
-       } while (cm == NULL && sio.sb_cc == 0 && !error);
-
-       if (cm == NULL)
-               goto bad;
-
-       if (auio.uio_resid) {
-               error = 0;
-#ifdef notdef
-               error = EMSGSIZE;
-               goto bad;
-#endif
-       }
-
-       /*
-        * XXX: Break apart the control message, and retrieve the
-        * received file descriptor.  Note that more than one descriptor
-        * may have been received, or that the rights chain may have more
-        * than a single mbuf in it.  What to do?
-        */
-       cmsg = mtod(cm, struct cmsghdr *);
-       newfds = (cmsg->cmsg_len - sizeof(*cmsg)) / sizeof (int);
-       if (newfds == 0) {
-               error = ECONNREFUSED;
-               goto bad;
-       }
-       /*
-        * At this point the rights message consists of a control message
-        * header, followed by a data region containing a vector of
-        * integer file descriptors.  The fds were allocated by the action
-        * of receiving the control message.
-        */
-       ip = (int *) (cmsg + 1);
-       fd = *ip++;
-       if (newfds > 1) {
-               /*
-                * Close extra fds.
-                */
-               int i;
-               kprintf("portal_open: %d extra fds\n", newfds - 1);
-               for (i = 1; i < newfds; i++) {
-                       portal_closefd(td, *ip);
-                       ip++;
-               }
-       }
-
-       /*
-        * Check that the mode the file is being opened for is a subset
-        * of the mode of the existing descriptor.
-        */
-       KKASSERT(td->td_proc);
-       fp = td->td_proc->p_fd->fd_files[fd].fp;
-       if (((ap->a_mode & (FREAD|FWRITE)) | fp->f_flag) != fp->f_flag) {
-               portal_closefd(td, fd);
-               error = EACCES;
-               goto bad;
-       }
-
-       /*
-        * Save the dup fd in the proc structure then return the
-        * special error code (ENXIO) which causes magic things to
-        * happen in vn_open.  The whole concept is, well, hmmm.
-        */
-       td->td_lwp->lwp_dupfd = fd;
-       vop_stdopen(ap);
-       error = ENXIO;
-
-bad:;
-       /*
-        * And discard the control message.
-        */
-       if (cm) {
-               m_freem(cm);
-       }
-
-       if (so) {
-               soshutdown(so, SHUT_RDWR);
-               soclose(so, FNONBLOCK);
-       }
-       return (error);
-}
-
-/*
- * portal_getattr(struct vnode *a_vp, struct vattr *a_vap)
- */
-static int
-portal_getattr(struct vop_getattr_args *ap)
-{
-       struct vnode *vp = ap->a_vp;
-       struct vattr *vap = ap->a_vap;
-
-       bzero(vap, sizeof(*vap));
-       vattr_null(vap);
-       vap->va_uid = 0;
-       vap->va_gid = 0;
-       vap->va_size = DEV_BSIZE;
-       vap->va_blocksize = DEV_BSIZE;
-       nanotime(&vap->va_atime);
-       vap->va_mtime = vap->va_atime;
-       vap->va_ctime = vap->va_mtime;
-       vap->va_gen = 0;
-       vap->va_flags = 0;
-       vap->va_rmajor = VNOVAL;
-       vap->va_rminor = VNOVAL;
-       /* vap->va_qbytes = 0; */
-       vap->va_bytes = 0;
-       /* vap->va_qsize = 0; */
-       if (vp->v_flag & VROOT) {
-               vap->va_type = VDIR;
-               vap->va_mode = S_IRUSR|S_IWUSR|S_IXUSR|
-                               S_IRGRP|S_IWGRP|S_IXGRP|
-                               S_IROTH|S_IWOTH|S_IXOTH;
-               vap->va_nlink = 2;
-               vap->va_fileid = 2;
-       } else {
-               vap->va_type = VREG;
-               vap->va_mode = S_IRUSR|S_IWUSR|
-                               S_IRGRP|S_IWGRP|
-                               S_IROTH|S_IWOTH;
-               vap->va_nlink = 1;
-               vap->va_fileid = VTOPORTAL(vp)->pt_fileid;
-       }
-       return (0);
-}
-
-/*
- * portal_setattr(struct vnode *a_vp, struct vattr *a_vap,
- *               struct ucred *a_cred)
- */
-static int
-portal_setattr(struct vop_setattr_args *ap)
-{
-       /*
-        * Can't mess with the root vnode
-        */
-       if (ap->a_vp->v_flag & VROOT)
-               return (EACCES);
-
-       if (ap->a_vap->va_flags != VNOVAL)
-               return (EOPNOTSUPP);
-
-       return (0);
-}
-
-/*
- * Fake readdir, just return empty directory.
- * It is hard to deal with '.' and '..' so don't bother.
- *
- * portal_readdir(struct vnode *a_vp, struct uio *a_uio,
- *               struct ucred *a_cred, int *a_eofflag,
- *               off_t *a_cookies, int a_ncookies)
- */
-static int
-portal_readdir(struct vop_readdir_args *ap)
-{
-       /*
-        * We don't allow exporting portal mounts, and currently local
-        * requests do not need cookies.
-        */
-       if (ap->a_ncookies)
-               panic("portal_readdir: not hungry");
-
-       return (0);
-}
-
-/*
- * portal_inactive(struct vnode *a_vp)
- */
-static int
-portal_inactive(struct vop_inactive_args *ap)
-{
-       return (0);
-}
-
-/*
- * portal_reclaim(struct vnode *a_vp)
- */
-static int
-portal_reclaim(struct vop_reclaim_args *ap)
-{
-       struct portalnode *pt = VTOPORTAL(ap->a_vp);
-
-       if (pt->pt_arg) {
-               kfree((caddr_t) pt->pt_arg, M_TEMP);
-               pt->pt_arg = 0;
-       }
-       kfree(ap->a_vp->v_data, M_TEMP);
-       ap->a_vp->v_data = 0;
-
-       return (0);
-}
-
-
-/*
- * Print out the contents of a Portal vnode.
- *
- * portal_print(struct vnode *a_vp)
- */
-/* ARGSUSED */
-static int
-portal_print(struct vop_print_args *ap)
-{
-       kprintf("tag VT_PORTAL, portal vnode\n");
-       return (0);
-}
-
-
-/*
- * Portal "should never get here" operation
- */
-static int
-portal_badop(void)
-{
-
-       panic("portal: bad op");
-       /* NOTREACHED */
-}
-
-struct vop_ops portal_vnode_vops = {
-       .vop_default =          vop_defaultop,
-       .vop_access =           (void *)vop_null,
-       .vop_bmap =             (void *)portal_badop,
-       .vop_getattr =          portal_getattr,
-       .vop_inactive =         portal_inactive,
-       .vop_old_lookup =       portal_lookup,
-       .vop_open =             portal_open,
-       .vop_pathconf =         vop_stdpathconf,
-       .vop_print =            portal_print,
-       .vop_readdir =          portal_readdir,
-       .vop_reclaim =          portal_reclaim,
-       .vop_setattr =          portal_setattr
-};
-