amfs_error.c revision 51292
1/* 2 * Copyright (c) 1997-1999 Erez Zadok 3 * Copyright (c) 1989 Jan-Simon Pendry 4 * Copyright (c) 1989 Imperial College of Science, Technology & Medicine 5 * Copyright (c) 1989 The Regents of the University of California. 6 * All rights reserved. 7 * 8 * This code is derived from software contributed to Berkeley by 9 * Jan-Simon Pendry at Imperial College, London. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. All advertising materials mentioning features or use of this software 20 * must display the following acknowledgment: 21 * This product includes software developed by the University of 22 * California, Berkeley and its contributors. 23 * 4. Neither the name of the University nor the names of its contributors 24 * may be used to endorse or promote products derived from this software 25 * without specific prior written permission. 26 * 27 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 28 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 31 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 32 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 33 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 35 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 36 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 37 * SUCH DAMAGE. 38 * 39 * %W% (Berkeley) %G% 40 * 41 * $Id: amfs_error.c,v 1.2 1999/01/10 21:53:41 ezk Exp $ 42 * 43 */ 44 45/* 46 * Error file system. 47 * This is used as a last resort catchall if 48 * nothing else worked. EFS just returns lots 49 * of error codes, except for unmount which 50 * always works of course. 51 */ 52 53#ifdef HAVE_CONFIG_H 54# include <config.h> 55#endif /* HAVE_CONFIG_H */ 56#include <am_defs.h> 57#include <amd.h> 58 59static char * amfs_error_match(am_opts *fo); 60static int amfs_error_fmount(mntfs *mf); 61static int amfs_error_fumount(mntfs *mf); 62static void amfs_error_umounted(am_node *mp); 63 64 65/* 66 * Ops structure 67 */ 68am_ops amfs_error_ops = 69{ 70 "error", 71 amfs_error_match, 72 0, /* amfs_error_init */ 73 amfs_auto_fmount, 74 amfs_error_fmount, 75 amfs_auto_fumount, 76 amfs_error_fumount, 77 amfs_error_lookuppn, 78 amfs_error_readdir, 79 0, /* amfs_error_readlink */ 80 0, /* amfs_error_mounted */ 81 amfs_error_umounted, 82 find_amfs_auto_srvr, 83 FS_DISCARD 84}; 85 86 87 88/* 89 * EFS file system always matches 90 */ 91static char * 92amfs_error_match(am_opts *fo) 93{ 94 return strdup("(error-hook)"); 95} 96 97 98static int 99amfs_error_fmount(mntfs *mf) 100{ 101 return ENOENT; 102} 103 104 105static int 106amfs_error_fumount(mntfs *mf) 107{ 108 /* 109 * Always succeed 110 */ 111 return 0; 112} 113 114 115/* 116 * EFS interface to RPC lookup() routine. 117 * Should never get here in the automounter. 118 * If we do then just give an error. 119 */ 120am_node * 121amfs_error_lookuppn(am_node *mp, char *fname, int *error_return, int op) 122{ 123 *error_return = ESTALE; 124 return 0; 125} 126 127 128/* 129 * EFS interface to RPC readdir() routine. 130 * Should never get here in the automounter. 131 * If we do then just give an error. 132 */ 133int 134amfs_error_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, int count) 135{ 136 return ESTALE; 137} 138 139 140/* 141 * umounted() callback for EFS. 142 * 143 * This prevents core-dumps on callbacks to error file-systems from 144 * nfsx_fumount. 145 */ 146static void 147amfs_error_umounted(am_node *mp) 148{ 149 /* nothing to do */ 150} 151