hlfsd.h revision 38494
1/* 2 * Copyright (c) 1997-1998 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 acknowledgement: 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: hlfs.h,v 1.9 1993/09/13 15:11:00 ezk Exp $ 42 * 43 * HLFSD was written at Columbia University Computer Science Department, by 44 * Erez Zadok <ezk@cs.columbia.edu> and Alexander Dupuy <dupuy@cs.columbia.edu> 45 * It is being distributed under the same terms and conditions as amd does. 46 */ 47 48#ifndef _HLFSD_HLFS_H 49#define _HLFSD_HLFS_H 50 51/* 52 * MACROS AND CONSTANTS: 53 */ 54 55#define HLFSD_VERSION "hlfsd 1.1 (March 4, 1997-1998)" 56#define PERS_SPOOLMODE 0755 57#define OPEN_SPOOLMODE 01777 58#define DOTSTRING "." 59 60/* 61 * ROOTID and SLINKID are the fixed "faked" node IDs (inodes) for 62 * the '.' (also '..') and the one symlink within the hlfs. 63 * They must always be unique, and should never match what a UID 64 * could be. 65 * They used to be -1 and -2, respectively. 66 * 67 * I used to cast these to (uid_t) but it failed to compile 68 * with /opt/SUNWspro/bin/cc because uid_t is long, while struct fattr's 69 * uid field is u_int. Then it failed to compile on some linux systems 70 * which define uid_t to be unsigned short, so I used the lowest common 71 * size which is unsigned short. 72 */ 73#ifdef EXPERIMENTAL_UID_SIZE 74#define UID_SHIFT 30 75# define ROOTID ((1 << UID_SHIFT) - 1) 76# define SLINKID ((1 << UID_SHIFT) - 2) 77# define INVALIDID ((1 << UID_SHIFT) - 3) 78#else /* not EXPERIMENTAL_UID_SIZE */ 79/* 80 * XXX: this will cause problems to systems with UIDs greater than 81 * MAX_UNSIGNED_SHORT-3. 82 */ 83# define ROOTID (((unsigned short) ~0) - 1) 84# define SLINKID (((unsigned short) ~0) - 2) 85# define INVALIDID (((unsigned short) ~0) - 3) 86#endif /* not EXPERIMENTAL_UID_SIZE */ 87 88 89#define DOTCOOKIE 1 90#define DOTDOTCOOKIE 2 91#define SLINKCOOKIE 3 92 93#define ALT_SPOOLDIR "/var/hlfs" /* symlink to use if others fail */ 94#define HOME_SUBDIR ".hlfsdir" /* dirname in user's home dir */ 95#define DEFAULT_DIRNAME "/hlfs/home" 96#define DEFAULT_INTERVAL 900 /* secs b/t re-reads of the password maps */ 97#define DEFAULT_CACHE_INTERVAL 300 /* secs during which assume a link is up */ 98#define DEFAULT_HLFS_GROUP "hlfs" /* Group name for special hlfs_gid */ 99 100#define PROGNAMESZ (MAXHOSTNAMELEN - 5) 101 102#ifdef HAVE_SYSLOG 103# define DEFAULT_LOGFILE "syslog" 104#else /* not HAVE)_SYSLOG */ 105# define DEFAULT_LOGFILE 0 106#endif /* not HAVE)_SYSLOG */ 107 108#define ERRM ": %m" 109#define fatalerror(str) \ 110 (fatal (strcat (strnsave ((str), strlen ((str)) + sizeof (ERRM) - 1), ERRM))) 111 112/* 113 * TYPDEFS: 114 */ 115typedef struct uid2home_t uid2home_t; 116typedef struct username2uid_t username2uid_t; 117 118 119/* 120 * STRUCTURES: 121 */ 122struct uid2home_t { 123 uid_t uid; /* XXX: with or without UID_OFFSET? */ 124 pid_t child; 125 char *home; /* really allocated */ 126 char *uname; /* an xref ptr to username2uid_t->username */ 127 u_long last_access_time; 128 int last_status; /* 0=used $HOME/.hlfsspool; !0=used alt dir */ 129}; 130 131struct username2uid_t { 132 char *username; /* really allocated */ 133 uid_t uid; /* XXX: with or without UID_OFFSET? */ 134 char *home; /* an xref ptr to uid2home_t->home */ 135}; 136 137/* 138 * EXTERNALS: 139 */ 140extern RETSIGTYPE cleanup(int); 141extern RETSIGTYPE interlock(int); 142extern SVCXPRT *nfs_program_2_transp; /* For quick_reply() */ 143extern SVCXPRT *nfsxprt; 144extern char *alt_spooldir; 145extern char *home_subdir; 146extern char *homedir(int); 147extern char *mailbox(int, char *); 148extern char *passwdfile; 149extern char *slinkname; 150extern char mboxfile[]; 151extern gid_t hlfs_gid; 152extern int cache_interval; 153extern int noverify; 154extern int serverpid; 155extern int sys_nerr; 156extern int untab_index(char *username); 157extern am_nfs_fh *root_fhp; 158extern am_nfs_fh root; 159extern nfstime startup; 160extern uid2home_t *plt_search(int); 161extern username2uid_t *untab; /* user name table */ 162extern void fatal(char *); 163extern void plt_init(void); 164extern void hlfsd_init_filehandles(void); 165 166#if defined(DEBUG) || defined(DEBUG_PRINT) 167extern void plt_dump(uid2home_t *, pid_t); 168extern void plt_print(int); 169#endif /* defined(DEBUG) || defined(DEBUG_PRINT) */ 170 171#endif /* _HLFSD_HLFS_H */ 172