diff --git a/Makefile.in b/Makefile.in index d705b82e48..c782499152 100644 --- a/Makefile.in +++ b/Makefile.in @@ -443,7 +443,7 @@ volser_depinstall: pinstall rxgen comerr ${COMPILE_PART1} volser ${COMPILE_DEPINSTALL} ${DEST}/bin/dedebug: dedebug - ${INSTALL} -s $? $@ + ${INSTALL} $? $@ # @@ -722,6 +722,7 @@ clean2: -${COMPILE_PART1} libafsauthent ${COMPILE_CLEAN} -${COMPILE_PART1} shlibafsrpc ${COMPILE_CLEAN} -${COMPILE_PART1} shlibafsauthent ${COMPILE_CLEAN} + -${COMPILE_PART1} platform ${COMPILE_CLEAN} -${COMPILE_PART1} libadmin ${COMPILE_CLEAN} -${COMPILE_PART1} libadmin/adminutil ${COMPILE_CLEAN} -${COMPILE_PART1} libadmin/client ${COMPILE_CLEAN} diff --git a/README b/README index a5cc1f12bf..0d3c04e43c 100644 --- a/README +++ b/README @@ -71,6 +71,30 @@ A. Creating the proper directory structure. or insecure software included with OpenAFS. See README.OBSOLETE and README.SECURITY for more details. + There is an option to control whether or not binaries are stripped + of their symbol table information. All binaries, except for the + 'fileserver' and 'volserver' executables, are stripped by default. + + To prevent stripping, specify the '--disable-strip-binaries' option on + the ./configure command line. + + This option works alongside the existing --enable-debug option to + control how binaries are produced. When --enable-debug is specified, + binaries will not be stripped. This behavior can be modified by + using different combinations of --enable-debug and --enable (or + --disable)-strip-binaries. One can, for example, compile binaries for + debug and strip them anyway. Alternatively, one can compile without + debug and force the binaries to not be stripped. Note that these + combinations are not necessarily useful. + + If neither of these options is specified, the default will be to build + non-debug binaries that are stripped (with the exceptions noted above, + which are never stripped at present). Specifying --enable-debug also + turns on --disable-strip-binaries. These are the most useful settings. + + The two binaries noted above, 'fileserver' and 'volserver' will never + be stripped, regardless of any options given to configure. + There are two modes for directory path handling: "Transarc mode" and "default mode": - In Transarc mode, we retain compatibility with Transarc/IBM AFS tools by putting client configuaration files in /usr/vice/etc, and server diff --git a/README-NT b/README-NT index c2faf8411f..978e2467bf 100644 --- a/README-NT +++ b/README-NT @@ -53,7 +53,7 @@ The following steps describe how to configure Windows 2000/XP: F. Build the binaries G. Install NSIS 2.30 H. Build NSIS Install Package - I. Install Wix 2.0.4310 + I. Install Wix 2.0.5325 J. Build Wix MSI Install Package K. Final Results L. Optional Items @@ -97,8 +97,8 @@ version is supported: The WiX installer requires about 18 MB of storage. The following version is supported: - Wix 2.0.4310.0 - http://prdownloads.sourceforge.net/wix/sources-2.0.4310.0.zip + Wix 2.0.5325.0 + http://prdownloads.sourceforge.net/wix/sources-2.0.5325.0.zip The InstallShield scripts (although not supported) require version 5.5 of InstallShiled. Version 6.0 or higher of InstallShield are not @@ -352,119 +352,9 @@ From the %AFSROOT% directory execute: STEP I. Install Wix MSI Installer -Download the Wix 2.0.2217.0 installer from +Download the Wix 2.0.5325.0 installer from - http://prdownloads.sourceforge.net/wix/sources-2.0.2217.0.zip - -Apply the following patches to the source tree and execute - - make ship - -from the \src\wix directory. - -Index: src/wix/Common.cs -=================================================================== -RCS file: /cvsroot/wix/wix/src/wix/Common.cs,v -retrieving revision 1.7 -diff -w -r1.7 Common.cs -140a141,146 -> public static long GetFileTimeFromDateTime(string dateTime) -> { -> System.DateTime sdt = System.Xml.XmlConvert.ToDateTime(dateTime); -> return sdt.ToFileTime(); -> } -> -Index: src/wix/Compiler.cs -=================================================================== -RCS file: /cvsroot/wix/wix/src/wix/Compiler.cs,v -retrieving revision 1.14 -diff -w -r1.14 Compiler.cs -847c847 -< this.AddRegistryKey(sourceLineNumbers, null, MsiInterop.MsidbRegistryRootClassesRoot, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[!", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context ---- -> this.AddRegistryKey(sourceLineNumbers, null, MsiInterop.MsidbRegistryRootClassesRoot, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[#", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context -2352a2353,2358 -> // if a Value attribute was given by itself, make this a type 19 custom action -> if( sourceBits == 0 && targetBits == MsiInterop.MsidbCustomActionTypeTextData ) -> { -> sourceBits = MsiInterop.MsidbCustomActionTypeSourceFile; -> } -> -3881c3887 -< minDate = attrib.Value; ---- -> minDate = Common.GetFileTimeFromDateTime( attrib.Value ).ToString(); -3884c3890 -< maxDate = attrib.Value; ---- -> maxDate = Common.GetFileTimeFromDateTime( attrib.Value ).ToString(); -8187a8194,8207 -> case "Delete": -> switch (attrib.Value) -> { -> case "install": -> events |= MsiInterop.MsidbServiceControlEventDelete; -> break; -> case "uninstall": -> events |= MsiInterop.MsidbServiceControlEventUninstallDelete; -> break; -> case "both": -> events |= MsiInterop.MsidbServiceControlEventDelete | MsiInterop.MsidbServiceControlEventUninstallDelete; -> break; -> } -> break; -9685a9706 -> -Index: src/wix/Preprocessor.cs -=================================================================== -RCS file: /cvsroot/wix/wix/src/wix/Preprocessor.cs,v -retrieving revision 1.6 -diff -w -r1.6 Preprocessor.cs -274c274 -< context = new IfContext(context.IsTrue & context.Active, this.variables.ContainsKey(reader.Value.Trim()), IfState.If); ---- -> context = new IfContext(context.IsTrue & context.Active, this.IsDefined(reader.Value.Trim()), IfState.If); -279c279 -< context = new IfContext(context.IsTrue & context.Active, !this.variables.ContainsKey(reader.Value.Trim()), IfState.If); ---- -> context = new IfContext(context.IsTrue & context.Active, !this.IsDefined(reader.Value.Trim()), IfState.If); -360a361,362 -> case "error": -> throw new WixPreprocessorException(this.GetCurrentSourceLineNumbers(), this.PreprocessVariables(reader.Value)); -419a422,437 -> /// Returns true if the symbol exists. -> /// -> /// symbol name to check -> /// true if symbol is defined -> private bool IsDefined(string symbol) -> { -> if( symbol.StartsWith("env.") ) -> return Environment.GetEnvironmentVariable(symbol.Substring(4)) != null; -> if( symbol.StartsWith("var.") ) -> return this.variables.ContainsKey(symbol.Substring(4)); -> if( symbol.StartsWith("sys.") ) -> return this.systemVariables.ContainsKey(symbol.Substring(4)); -> return this.variables.ContainsKey(symbol); -> } -> -> /// -Index: src/wix/wix.csproj -=================================================================== -RCS file: /cvsroot/wix/wix/src/wix/wix.csproj,v -retrieving revision 1.4 -diff -w -r1.4 wix.csproj -661a662,666 -> RelPath = "Xsd\wix.xsx" -> DependentUpon = "wix.xsd" -> BuildAction = "None" -> /> -> RelPath = "Xsd\wixloc.xsx" -> DependentUpon = "wixloc.xsd" -> BuildAction = "None" -> /> + http://prdownloads.sourceforge.net/wix/sources-2.0.5325.0.zip STEP J. Build Wix MSI install package diff --git a/README-WIN9X b/README-WIN9X deleted file mode 100644 index a1a28debb0..0000000000 --- a/README-WIN9X +++ /dev/null @@ -1,200 +0,0 @@ -Copyright 2000, International Business Machines Corporation and others. -All Rights Reserved. - -This software has been released under the terms of the IBM Public -License. For details, see the LICENSE file in the top-level source -directory or online at http://www.openafs.org/dl/license10.html - -NOTE: As of the OpenAFS 1.3 release series, Windows 9x platforms are no -longer officially supported. It is not clear whether or not the source -tree will build successfully or not. As far as we know, no one has tried -in a very long time. - -Building Open AFS on Win 95 ---------------------------- - -The Windows 95 Open AFS client consists of two main components: the client -program afsd.exe, which is compiled with the DJGPP compiler and runs in a -DOS virtual machine; and the utility programs, which are built on Windows -NT or 9x using the Microsoft Visual C++ compiler V6.0. - -afsd.exe --------- - -afsd.exe is built using the DJGPP cross-compiler, executed from Linux. -It should also be possible to build it using the native DOS DJGPP compiler, -but we did not try this. You will need to install the following packages -from DJGPP and the Coda project. - -ftp://ftp.coda.cs.cmu.edu/pub/tools/djgpp-2.01_0.93_glibc-1.i386.rpm -ftp://ftp.coda.cs.cmu.edu/pub/tools/djgpp-win95ext-2.01_0.93_glibc-1.i386.rpm -ftp://ftp.coda.cs.cmu.edu/pub/tools/gdb-djgpp-4.16-2.i386.rpm - -You will also need the MMAP.VXD and SOCK.VXD from the Coda project. Source -is available here: -ftp://ftp.coda.cs.cmu.edu/pub/coda/src/win95-coda-5.2.0.zip - -Follow the Coda instructions to build these VXD's, which you can read here: -http://www.coda.cs.cmu.edu/doc/html/coda-howto-6.html#ss6.4 - -Once you have the necessary tools installed, set the following environment -variables: -SYS_NAME: set to i386_djgpp -LINUX_SYS: set to the sysname of the Linux version you are using, e.g., - i386_linux22 - -The makefile expects to build into a platform directory with symlinks -into the source directory. The Perl script "mkdest.pl" in this dir. will -set this up for you. To use it, create a directory under the top-level -dir. (the directory above src) called "i386_djgpp". Then cd to that -directory and type "../src/mkdest.pl " - -Then execute "make -f Makefile.djgpp" from the top-level directory. -(You can create a symlink to src/Makefile.djgpp from this dir.) -The afsd.exe will be built into i386_djgpp/dest/bin. - -Build notes: - - The Makefile.djgpp actually builds Linux versions of the utilities - rxgen, install, compile_et, and util.a. It uses the Linux version - of param.h which it copies to the afs subdirectory of the above - components. You will need to set SYS_NAME to your Linux system name - manually if you want to build these utilities separately. - -Utilities and GUI programs --------------------------- - -The rest of the support programs are built as Win32 executables from a -Windows 9x or NT system. You will need to set the following environment -variables: - -set SYS_NAME=i386_win95 -set AFSDEV_BUILDTYPE=CHECKED (or FREE if you want to skip debugging info.) -set AFSDEV_INCLUDE= -set AFSDEV_LIB= -set AFSDEV_BIN=. -set AFSROOT= - e.g. AFSROOT\SRC is source directory of the build tree -SET _WIN32_IE=0x400 -set OBJ=src or obj, see below -set MSSDK=, see below - -If you are building on a Unix directory exported to Windows through Samba -or AFS, you can create a platform directory named "i386_win95" using the -"mkdest.pl" script as described above (run from a Unix system). This will -only work on a file system that supports symbolic links. If you are using -a platform directory, set the OBJ environment var. to "obj" and create -a symlink "obj" in the top-level dir. that points to "i386_win95/obj". -Otherwise, set OBJ to "src" to build the objects with the sources. - -The environment variable AFSROOT points to the parent of the AFS src -directory. Executables will be built by default in AFSROOT\dest. - -Copy the file src\NTMake9x to the parent of the src directory. You only -need to do this once. If you are building on a local drive, copy -AFSROOT\src\symlink.bat to AFSROOT\. - -Follow the NT build instructions in file "README-NT" to perform the build. -You will be using "NTMake9x" as the top-level makefile, instead of -"NTMakefile". Most of the instructions in "README-NT" apply to the Win9x -build as well. - -Build Notes: - -1) If you are building the Windows 9x AFS Client Control Panel - (win9xpanel), it requires shlwapi.h. This file can be found in the - header files associated with the Windows SDK (95/98 NT or W2000). - -2) You can build the Windows 9x client from a Windows NT or W2000 system. - This requires you to edit AFSROOT\config\NTMakefile.i386_win95. - Change line: DEL = $(AFSROOT)\src\rmbat - to: DEL = -del /q /f - -3) If you build the W2000 client, then switch to building the Windows 95 - client (or vice versa), you should clean the previous build by either: - nmake -f ntmakefile clean -or nmake -f ntmake9x clean - -4) When building the "comerr" component, the makefile now uses the - existing error_table_nt.c file (and touches it so it will be up to date - by default.) If you make changes to the lex or yacc source files and want - to rebuild error_table_nt.c, you can simply delete it and rerun make, - which will cause the file to be built using lex and yacc. Make sure - you have these utilities on your system. - -5) Required DLL's for redistribution - - The AFS Control Panel for Win95/98 requires Microsoft DLL's that can - be installed using: - VC6RedistSetup_enu.exe - This is located at: - http://support.microsoft.com/support/kb/articles/Q259/4/03.ASP - Two Microsoft DLL's must be included at DEST\WinInstall\Config\. - SHLWAPI.DLL - WININET.DLL - These DLL's will not be left on the target machine, there are only - used for installation and removed after installation is complete. - -6) Required changes to configuration file .\src\config\NTMakefile.i386_win95 - -AFSPRODUCT_VERSION - Product version -CELLNAME_DEFAULT - The default AFS cell name -CELLSERVDB_INSTALL - The default name for the CellServDB included in the install script -CELLSERVDB_WEB - The default web address to obtain CellServDB - -For Example: - - .\src\config\NTMakefile.i386_win95 - AFSPRODUCT_VERSION=1.1.1a - CELLNAME_DEFAULT=openafs.org - CELLSERVDB_INSTALL=CellServDB.GrandCentral - CELLSERVDB_WEB=http://grand.central.org/dl/cellservdb/CellServDB - -Version level may be specified in different formats, for example the following -forms all have the same version level; however will be displayed differently: - -AFSPRODUCT_VERSION=1.1.1a -AFSPRODUCT_VERSION=1.1.1 a -AFSPRODUCT_VERSION=1.1.1.1 -AFSPRODUCT_VERSION=1.1.101 - -6) Installation - - First, execute "nmake /f ntmake9x media" to copy all the client - executables and other files to DEST\WinInstall. - - You can then install the client onto a target Windows 9x machine by - executing: - install.bat - For example, - install.bat DEST\WinInstall\ c: \afscli almaden.ibm.com 40000 - - If you do not wish to use the batch file, you can install the client - manually by performing the following steps. - - 1. On the target machine, copy all the files from DEST\WinInstall to the - install location (usually c:\afscli). - 2. Add entries to the target's AUTOEXEC.BAT file as follows: - set AFSCONF=c:\afscli (replace with your install dir.) - path %path%;c:\afscli - 3. Copy the template.reg file to afscli.reg. Replace any references - to c: and afscli with your install location. Double click on the - afscli.reg file to add the registry entries to the target system. - 4. Create the following AFS configuration files in the install dir.: - - ThisCell: - containing the name of your home cell - - cache.info: - containing your cache configuration. For example, - to configure a cache of 40,000 1KB blocks with a disk cache - location of c:\afscache, you would enter in this file: - /afs:c:\afscache;40000 - (The cache location has no effect unless you have enabled - the experimental disk cache support.) - - CellServDB: - the cell server database. You can get the latest version from AFS: - /afs/transarc.com/service/etc/CellServDB.export - 5. Reboot the target machine. - 6. You can now start the client by executing the program WinAfsLoad.exe - from the install directory. - - diff --git a/acinclude.m4 b/acinclude.m4 index 0bc163f14d..8deeaae3f9 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -120,6 +120,9 @@ AC_ARG_ENABLE(optimize-kernel, AC_ARG_ENABLE(debug, [ --enable-debug enable compilation of the user space code with debugging information (defaults to disabled)],, enable_debug="no" ) +AC_ARG_ENABLE(strip-binaries, +[ --disable-strip-binaries disable stripping of symbol information from binaries (defaults to enabled)],, enable_strip_binaries="maybe" +) AC_ARG_ENABLE(optimize, [ --disable-optimize disable optimization for compilation of the user space code (defaults to enabled)],, enable_optimize="yes" ) @@ -350,6 +353,14 @@ else AFS_PARAM_COMMON=param.nbsd20.h AFS_SYSNAME="amd64_nbsd20" ;; + x86_64-*-netbsd*3.[0-8]*) + AFS_PARAM_COMMON=param.nbsd30.h + AFS_SYSNAME="amd64_nbsd30" + ;; + x86_64-*-netbsd*4.[0-8]*) + AFS_PARAM_COMMON=param.nbsd40.h + AFS_SYSNAME="amd64_nbsd40" + ;; powerpc-*-netbsd*2.0*) AFS_PARAM_COMMON=param.nbsd20.h AFS_SYSNAME="ppc_nbsd20" @@ -625,10 +636,16 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) fi LINUX_KERNEL_COMPILE_WORKS + LINUX_KBUILD_USES_EXTRA_CFLAGS + LINUX_HAVE_CURRENT_KERNEL_TIME + LINUX_KMEM_CACHE_INIT + LINUX_HAVE_KMEM_CACHE_T + LINUX_KMEM_CACHE_CREATE_TAKES_DTOR dnl XXX ask about LINUX_KERNEL_HAS_NFSSRV LINUX_KERNEL_HAS_NFSSRV LINUX_CONFIG_H_EXISTS LINUX_COMPLETION_H_EXISTS + LINUX_EXPORTFS_H_EXISTS LINUX_DEFINES_FOR_EACH_PROCESS LINUX_DEFINES_PREV_TASK LINUX_FS_STRUCT_SUPER_HAS_ALLOC_INODE @@ -656,12 +673,15 @@ dnl XXX ask about LINUX_KERNEL_HAS_NFSSRV LINUX_FOP_F_FLUSH_TAKES_FL_OWNER_T LINUX_AOP_WRITEBACK_CONTROL LINUX_FS_STRUCT_FOP_HAS_FLOCK + LINUX_FS_STRUCT_FOP_HAS_SENDFILE + LINUX_FS_STRUCT_FOP_HAS_SPLICE LINUX_KERNEL_LINUX_SYSCALL_H LINUX_KERNEL_LINUX_SEQ_FILE_H LINUX_KERNEL_POSIX_LOCK_FILE_WAIT_ARG LINUX_KERNEL_SELINUX LINUX_KERNEL_SOCK_CREATE LINUX_KERNEL_PAGE_FOLLOW_LINK + LINUX_KEY_TYPE_H_EXISTS LINUX_NEED_RHCONFIG LINUX_RECALC_SIGPENDING_ARG_TYPE LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT @@ -679,6 +699,7 @@ dnl XXX ask about LINUX_KERNEL_HAS_NFSSRV LINUX_GET_SB_HAS_STRUCT_VFSMOUNT LINUX_STATFS_TAKES_DENTRY LINUX_FREEZER_H_EXISTS + LINUX_HAVE_SVC_ADDR_IN if test "x$ac_cv_linux_freezer_h_exists" = "xyes" ; then AC_DEFINE(FREEZER_H_EXISTS, 1, [define if you have linux/freezer.h]) fi @@ -689,6 +710,7 @@ dnl XXX ask about LINUX_KERNEL_HAS_NFSSRV LINUX_GENERIC_FILE_AIO_READ LINUX_INIT_WORK_HAS_DATA LINUX_REGISTER_SYSCTL_TABLE_NOFLAG + LINUX_SYSCTL_TABLE_CHECKING LINUX_EXPORTS_SYS_CHDIR LINUX_EXPORTS_SYS_CLOSE LINUX_EXPORTS_SYS_OPEN @@ -762,6 +784,12 @@ dnl XXX ask about LINUX_KERNEL_HAS_NFSSRV if test "x$ac_cv_linux_config_h_exists" = "xyes" ; then AC_DEFINE(CONFIG_H_EXISTS, 1, [define if config.h exists]) fi + if test "x$ac_cv_linux_exportfs_h_exists" = "xyes"; then + AC_DEFINE(EXPORTFS_H_EXISTS, 1, [define if linux/exportfs.h exists]) + fi + if test "x$ac_cv_linux_key_type_h_exists" = "xyes" ; then + AC_DEFINE(KEY_TYPE_H_EXISTS, 1, [define if key-type.h exists]) + fi if test "x$ac_cv_linux_defines_for_each_process" = "xyes" ; then AC_DEFINE([DEFINED_FOR_EACH_PROCESS], 1, [define if for_each_process defined]) fi @@ -900,17 +928,41 @@ dnl XXX ask about LINUX_KERNEL_HAS_NFSSRV if test "x$ac_cv_linux_fs_struct_fop_has_flock" = "xyes" ; then AC_DEFINE(STRUCT_FILE_OPERATIONS_HAS_FLOCK, 1, [define if your struct file_operations has flock]) fi + if test "x$ac_cv_linux_fs_struct_fop_has_sendfile" = "xyes" ; then + AC_DEFINE(STRUCT_FILE_OPERATIONS_HAS_SENDFILE, 1, [define if your struct file_operations has sendfile]) + fi + if test "x$ac_cv_linux_fs_struct_fop_has_splice" = "xyes" ; then + AC_DEFINE(STRUCT_FILE_OPERATIONS_HAS_SPLICE, 1, [define if your struct file_operations has splice_write and splice_read]) + fi if test "x$ac_cv_linux_register_sysctl_table_noflag" = "xyes" ; then AC_DEFINE(REGISTER_SYSCTL_TABLE_NOFLAG, 1, [define if register_sysctl_table has no insert_at head flag]) fi + if test "x$ac_cv_linux_sysctl_table_checking" = "xyes" ; then + AC_DEFINE(SYSCTL_TABLE_CHECKING, 1, [define if your kernel has sysctl table checking]) + fi if test "x$ac_cv_linux_exports_tasklist_lock" = "xyes" ; then AC_DEFINE(EXPORTED_TASKLIST_LOCK, 1, [define if tasklist_lock exported]) fi + if test "x$ac_cv_linux_have_kmem_cache_t" = "xyes" ; then + AC_DEFINE(HAVE_KMEM_CACHE_T, 1, [define if kmem_cache_t exists]) + fi + if test "x$ac_cv_linux_kmem_cache_init" = "xyes" ; then + AC_DEFINE(KMEM_CACHE_INIT, 1, [define for new kmem_cache init function parameters]) + fi + if test "x$ac_cv_linux_have_current_kernel_time" = "xyes" ; then + AC_DEFINE(HAVE_CURRENT_KERNEL_TIME, 1, [define if current_kernel_time() exists]) + fi + if test "x$ac_cv_linux_have_kmem_cache_t" = "xyes" ; then + AC_DEFINE(KMEM_CACHE_TAKES_DTOR, 1, [define if kmem_cache_create takes a destructor argument]) + fi if test "x$ac_cv_linux_kernel_page_follow_link" = "xyes" -o "x$ac_cv_linux_func_i_put_link_takes_cookie" = "xyes"; then AC_DEFINE(USABLE_KERNEL_PAGE_SYMLINK_CACHE, 1, [define if your kernel has a usable symlink cache API]) else AC_MSG_WARN([your kernel does not have a usable symlink cache API]) fi + if test "x$ac_cv_linux_have_svc_addr_in" = "xyes"; then + AC_DEFINE(HAVE_SVC_ADDR_IN, 1, [define if svc_add_in exists]) + fi : fi esac @@ -1226,7 +1278,7 @@ dnl checks for header files. AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_HEADER_DIRENT -AC_CHECK_HEADERS(stdlib.h string.h unistd.h fcntl.h sys/time.h sys/file.h) +AC_CHECK_HEADERS(stdlib.h string.h unistd.h poll.h fcntl.h sys/time.h sys/file.h) AC_CHECK_HEADERS(netinet/in.h netdb.h sys/fcntl.h sys/mnttab.h sys/mntent.h) AC_CHECK_HEADERS(mntent.h sys/vfs.h sys/param.h sys/fs_types.h sys/fstyp.h) AC_CHECK_HEADERS(sys/mount.h strings.h termios.h signal.h) diff --git a/configure-libafs.in b/configure-libafs.in index 0cde5b0cb1..7fe049d598 100644 --- a/configure-libafs.in +++ b/configure-libafs.in @@ -1,8 +1,11 @@ AC_INIT(src/libafs/Makefile.common.in) -AM_INIT_AUTOMAKE(openafs-libafs,1.5.25) +AM_INIT_AUTOMAKE(openafs-libafs,1.5.28) AC_CONFIG_HEADER(src/config/afsconfig.h) -define(OPENAFS_CONFIGURE_LIBAFS) +MACOS_VERSION=1.5.28 +AC_SUBST(MACOS_VERSION) + +define(OPENAFS_CONFIGURE_LIBAFS) AC_PROG_CC OPENAFS_CONFIGURE_COMMON diff --git a/configure.in b/configure.in index 8ff095236e..0816bfc141 100644 --- a/configure.in +++ b/configure.in @@ -1,9 +1,13 @@ -AC_INIT(openafs,1.5.25) +AC_INIT(openafs,1.5.28) AC_CONFIG_SRCDIR(src/config/stds.h) AM_INIT_AUTOMAKE AC_CONFIG_HEADER(src/config/afsconfig.h) +MACOS_VERSION=1.5.28 + +AC_SUBST(MACOS_VERSION) AC_PROG_CC +AC_CHECK_PROGS(CPP,[/lib/cpp /usr/bin/cpp /usr/ccs/lib/cpp cpp]) OPENAFS_CONFIGURE_COMMON if test -e 'doc/man-pages/Makefile.in' ; then @@ -81,6 +85,10 @@ src/lwp/test/Makefile \ src/mpp/Makefile \ src/null/Makefile \ src/package/Makefile \ +src/packaging/MacOS/OpenAFS.Info.plist \ +src/packaging/MacOS/OpenAFS.info \ +src/packaging/MacOS/buildpkg.sh \ +src/packaging/RedHat/openafs.spec \ src/pam/Makefile \ src/pinstall/Makefile \ src/pinstall/test/Makefile \ diff --git a/doc/man-pages/README b/doc/man-pages/README index 7c8c5b209c..4f789c6127 100644 --- a/doc/man-pages/README +++ b/doc/man-pages/README @@ -78,7 +78,10 @@ Formatting Standards documents common options, and discusses the general use of the suite. Then, each operation code in the suite should have a separate man page, named after the command with the space between the command suite and the - operation code replaced with an underscore. + operation code replaced with an underscore. The NAME section of the + operation man page must also use an underscore (fs_listacl, not fs + listacl) for compatibility with some man programs. The SYNOPSIS section + should, of course, use a space, since that's what the user must type. All man pages must follow the standard layout for man page sections and formatting. The best general reference is the pod2man man page, @@ -199,17 +202,13 @@ Known Problems * The following installed commands have no man pages: copyauth - fs rxstatpeer fs rxstatproc fs setcbaddr - kseal - read_tape restorevol rmtsysd vldb_convert vos clone - vos convertROtoRW - vos copy + vos setfields vos shadow vsys @@ -221,9 +220,6 @@ Known Problems * Some of the documentation in fs getserverprefs needs minor updates to reflect what happens in the dynroot case. - * fs sysname documentation needs to include the possibility of setting - multiple sysnames and the resulting behavior. - * bos listkeys and the KeyFile man page assume that you're using the kaserver. diff --git a/doc/man-pages/pod1/fs_apropos.pod b/doc/man-pages/pod1/fs_apropos.pod index ba0b3d42b8..b626d4c1ce 100644 --- a/doc/man-pages/pod1/fs_apropos.pod +++ b/doc/man-pages/pod1/fs_apropos.pod @@ -1,6 +1,6 @@ =head1 NAME -fs apropos - Displays each help entry containing a keyword string +fs_apropos - Displays each help entry containing a keyword string =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_checkservers.pod b/doc/man-pages/pod1/fs_checkservers.pod index 71fb179ed6..9f6996f642 100644 --- a/doc/man-pages/pod1/fs_checkservers.pod +++ b/doc/man-pages/pod1/fs_checkservers.pod @@ -1,6 +1,6 @@ =head1 NAME -fs checkservers - Displays the status of server machines +fs_checkservers - Displays the status of server machines =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_checkvolumes.pod b/doc/man-pages/pod1/fs_checkvolumes.pod index 3e41e1eb2b..e822b36ca6 100644 --- a/doc/man-pages/pod1/fs_checkvolumes.pod +++ b/doc/man-pages/pod1/fs_checkvolumes.pod @@ -1,6 +1,6 @@ =head1 NAME -fs checkvolumes - Forces the Cache Manager to update volume information +fs_checkvolumes - Forces the Cache Manager to update volume information =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_cleanacl.pod b/doc/man-pages/pod1/fs_cleanacl.pod index 50bf48139d..538076b471 100644 --- a/doc/man-pages/pod1/fs_cleanacl.pod +++ b/doc/man-pages/pod1/fs_cleanacl.pod @@ -1,6 +1,6 @@ =head1 NAME -fs cleanacl - Remove obsolete entries from an ACL +fs_cleanacl - Remove obsolete entries from an ACL =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_copyacl.pod b/doc/man-pages/pod1/fs_copyacl.pod index d11549d5e5..6228ec2ffb 100644 --- a/doc/man-pages/pod1/fs_copyacl.pod +++ b/doc/man-pages/pod1/fs_copyacl.pod @@ -1,6 +1,6 @@ =head1 NAME -fs copyacl - Copies an ACL from a directory to one or more other directories +fs_copyacl - Copies an ACL from a directory to one or more other directories =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_diskfree.pod b/doc/man-pages/pod1/fs_diskfree.pod index 6dc8ad3112..bb8fbdecd3 100644 --- a/doc/man-pages/pod1/fs_diskfree.pod +++ b/doc/man-pages/pod1/fs_diskfree.pod @@ -1,6 +1,6 @@ =head1 NAME -fs diskfree - Shows data about the partition housing a directory or file +fs_diskfree - Shows data about the partition housing a directory or file =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_examine.pod b/doc/man-pages/pod1/fs_examine.pod index 5db1e970d7..26219a47dd 100644 --- a/doc/man-pages/pod1/fs_examine.pod +++ b/doc/man-pages/pod1/fs_examine.pod @@ -1,6 +1,6 @@ =head1 NAME -fs examine - Shows data about the volume containing a directory or file +fs_examine - Shows data about the volume containing a directory or file =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_exportafs.pod b/doc/man-pages/pod1/fs_exportafs.pod index b4d1f31b5f..ecc3d568b0 100644 --- a/doc/man-pages/pod1/fs_exportafs.pod +++ b/doc/man-pages/pod1/fs_exportafs.pod @@ -1,6 +1,6 @@ =head1 NAME -fs exportafs - Configures export of AFS to clients of other file systems +fs_exportafs - Configures export of AFS to clients of other file systems =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_flush.pod b/doc/man-pages/pod1/fs_flush.pod index 3caaecdd57..61ee4dab2e 100644 --- a/doc/man-pages/pod1/fs_flush.pod +++ b/doc/man-pages/pod1/fs_flush.pod @@ -1,6 +1,6 @@ =head1 NAME -fs flush - Forces the Cache Manager to discard a cached file or directory +fs_flush - Forces the Cache Manager to discard a cached file or directory =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_flushall.pod b/doc/man-pages/pod1/fs_flushall.pod index 3fac90f510..107e521158 100644 --- a/doc/man-pages/pod1/fs_flushall.pod +++ b/doc/man-pages/pod1/fs_flushall.pod @@ -1,6 +1,6 @@ =head1 NAME -fs flushall - Force the AFS Cache Manager to discard all data +fs_flushall - Force the AFS Cache Manager to discard all data =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_flushmount.pod b/doc/man-pages/pod1/fs_flushmount.pod index 061c85d08f..b7709695a5 100644 --- a/doc/man-pages/pod1/fs_flushmount.pod +++ b/doc/man-pages/pod1/fs_flushmount.pod @@ -1,6 +1,6 @@ =head1 NAME -fs flushmount - Forces the Cache Manager to discard a mount point +fs_flushmount - Forces the Cache Manager to discard a mount point =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_flushvolume.pod b/doc/man-pages/pod1/fs_flushvolume.pod index be98d162c9..c8ac98175c 100644 --- a/doc/man-pages/pod1/fs_flushvolume.pod +++ b/doc/man-pages/pod1/fs_flushvolume.pod @@ -1,6 +1,6 @@ =head1 NAME -fs flushvolume - Forces the Cache Manager to discard cached data from a volume +fs_flushvolume - Forces the Cache Manager to discard cached data from a volume =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_getcacheparms.pod b/doc/man-pages/pod1/fs_getcacheparms.pod index dde57a3d79..f65be0f051 100644 --- a/doc/man-pages/pod1/fs_getcacheparms.pod +++ b/doc/man-pages/pod1/fs_getcacheparms.pod @@ -1,6 +1,6 @@ =head1 NAME -fs getcacheparms - Displays the current size and usage of the cache +fs_getcacheparms - Displays the current size and usage of the cache =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_getcalleraccess.pod b/doc/man-pages/pod1/fs_getcalleraccess.pod index 56a14f8923..12d96c487b 100644 --- a/doc/man-pages/pod1/fs_getcalleraccess.pod +++ b/doc/man-pages/pod1/fs_getcalleraccess.pod @@ -1,6 +1,6 @@ =head1 NAME -fs getcalleraccess - Show the current user's access to a file or directory +fs_getcalleraccess - Show the current user's access to a file or directory =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_getcellstatus.pod b/doc/man-pages/pod1/fs_getcellstatus.pod index 1d835d6de5..f3fb9a0d5d 100644 --- a/doc/man-pages/pod1/fs_getcellstatus.pod +++ b/doc/man-pages/pod1/fs_getcellstatus.pod @@ -1,6 +1,6 @@ =head1 NAME -fs getcellstatus - Reports whether setuid programs are honored in a cell +fs_getcellstatus - Reports whether setuid programs are honored in a cell =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_getclientaddrs.pod b/doc/man-pages/pod1/fs_getclientaddrs.pod index 692aa57c0d..6dc9abca84 100644 --- a/doc/man-pages/pod1/fs_getclientaddrs.pod +++ b/doc/man-pages/pod1/fs_getclientaddrs.pod @@ -1,6 +1,6 @@ =head1 NAME -fs getclientaddrs - Displays the client interfaces to register +fs_getclientaddrs - Displays the client interfaces to register =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_getcrypt.pod b/doc/man-pages/pod1/fs_getcrypt.pod index a1402f5aa1..f0e24f01b6 100644 --- a/doc/man-pages/pod1/fs_getcrypt.pod +++ b/doc/man-pages/pod1/fs_getcrypt.pod @@ -1,6 +1,6 @@ =head1 NAME -fs getcrypt - Displays the state of encryption for AFS file transfers +fs_getcrypt - Displays the state of encryption for AFS file transfers =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_getserverprefs.pod b/doc/man-pages/pod1/fs_getserverprefs.pod index e59ef3e15d..0bb00c4ef3 100644 --- a/doc/man-pages/pod1/fs_getserverprefs.pod +++ b/doc/man-pages/pod1/fs_getserverprefs.pod @@ -1,6 +1,6 @@ =head1 NAME -fs getserverprefs - Displays preference ranks for file servers or VL servers +fs_getserverprefs - Displays preference ranks for file servers or VL servers =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_help.pod b/doc/man-pages/pod1/fs_help.pod index a0d73a30bd..98ae7ba6d7 100644 --- a/doc/man-pages/pod1/fs_help.pod +++ b/doc/man-pages/pod1/fs_help.pod @@ -1,6 +1,6 @@ =head1 NAME -fs help - Displays help for fs commands +fs_help - Displays help for fs commands =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_listacl.pod b/doc/man-pages/pod1/fs_listacl.pod index 35098cc89c..8537fa161a 100644 --- a/doc/man-pages/pod1/fs_listacl.pod +++ b/doc/man-pages/pod1/fs_listacl.pod @@ -1,6 +1,6 @@ =head1 NAME -fs listacl - Displays ACLs +fs_listacl - Displays ACLs =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_listaliases.pod b/doc/man-pages/pod1/fs_listaliases.pod index 225aa42bfe..46b6395329 100644 --- a/doc/man-pages/pod1/fs_listaliases.pod +++ b/doc/man-pages/pod1/fs_listaliases.pod @@ -1,6 +1,6 @@ =head1 NAME -fs listaliases - Displays the current list of aliases for AFS cells +fs_listaliases - Displays the current list of aliases for AFS cells =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_listcells.pod b/doc/man-pages/pod1/fs_listcells.pod index 513cc0867d..4725a8ef79 100644 --- a/doc/man-pages/pod1/fs_listcells.pod +++ b/doc/man-pages/pod1/fs_listcells.pod @@ -1,6 +1,6 @@ =head1 NAME -fs listcells - Displays the database server machines known to the Cache Manager +fs_listcells - Displays the database server machines known to the Cache Manager =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_listquota.pod b/doc/man-pages/pod1/fs_listquota.pod index 29a20e0202..030736a62c 100644 --- a/doc/man-pages/pod1/fs_listquota.pod +++ b/doc/man-pages/pod1/fs_listquota.pod @@ -1,6 +1,6 @@ =head1 NAME -fs listquota - Displays quota information for a volume +fs_listquota - Displays quota information for a volume =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_lsmount.pod b/doc/man-pages/pod1/fs_lsmount.pod index 9b238da527..d79e6e7ede 100644 --- a/doc/man-pages/pod1/fs_lsmount.pod +++ b/doc/man-pages/pod1/fs_lsmount.pod @@ -1,6 +1,6 @@ =head1 NAME -fs lsmount - Reports the volume for which a directory is the mount point. +fs_lsmount - Reports the volume for which a directory is the mount point. =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_messages.pod b/doc/man-pages/pod1/fs_messages.pod index ee1921d3e3..2a47345fe4 100644 --- a/doc/man-pages/pod1/fs_messages.pod +++ b/doc/man-pages/pod1/fs_messages.pod @@ -1,6 +1,6 @@ =head1 NAME -fs messages - Sets whether the Cache Manager writes log messages +fs_messages - Sets whether the Cache Manager writes log messages =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_mkmount.pod b/doc/man-pages/pod1/fs_mkmount.pod index 4ec5949f93..fd74d9b50f 100644 --- a/doc/man-pages/pod1/fs_mkmount.pod +++ b/doc/man-pages/pod1/fs_mkmount.pod @@ -1,6 +1,6 @@ =head1 NAME -fs mkmount - Creates a mount point for a volume +fs_mkmount - Creates a mount point for a volume =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_newalias.pod b/doc/man-pages/pod1/fs_newalias.pod index 2c56c83ce8..61d304e511 100644 --- a/doc/man-pages/pod1/fs_newalias.pod +++ b/doc/man-pages/pod1/fs_newalias.pod @@ -1,6 +1,6 @@ =head1 NAME -fs newalias - Creates a new alias for a cell +fs_newalias - Creates a new alias for a cell =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_newcell.pod b/doc/man-pages/pod1/fs_newcell.pod index 6e337b48f0..3c56f56824 100644 --- a/doc/man-pages/pod1/fs_newcell.pod +++ b/doc/man-pages/pod1/fs_newcell.pod @@ -1,6 +1,6 @@ =head1 NAME -fs newcell - Changes the kernel-resident list of a cell's database servers +fs_newcell - Changes the kernel-resident list of a cell's database servers =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_quota.pod b/doc/man-pages/pod1/fs_quota.pod index 40b715ff59..63a3d12f92 100644 --- a/doc/man-pages/pod1/fs_quota.pod +++ b/doc/man-pages/pod1/fs_quota.pod @@ -1,6 +1,6 @@ =head1 NAME -fs quota - Displays the quota used in the volume containing a directory or file +fs_quota - Displays the quota used in the volume containing a directory or file =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_rmmount.pod b/doc/man-pages/pod1/fs_rmmount.pod index 306a22b5db..9a68aa5ff9 100644 --- a/doc/man-pages/pod1/fs_rmmount.pod +++ b/doc/man-pages/pod1/fs_rmmount.pod @@ -1,6 +1,6 @@ =head1 NAME -fs rmmount - Removes a mount point +fs_rmmount - Removes a mount point =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_rxstatpeer.pod b/doc/man-pages/pod1/fs_rxstatpeer.pod new file mode 100644 index 0000000000..f7bd5bef14 --- /dev/null +++ b/doc/man-pages/pod1/fs_rxstatpeer.pod @@ -0,0 +1,67 @@ +=head1 NAME + +fs_rxstatpeer - Enables Rx packet logging in the OpenAFS kernel module + +=head1 SYNOPSIS + +=for html +
+ +B [B<-clear>] [B<-disable>] [B<-enable>] [B<-help>] + +=for html +
+ +=head1 DESCRIPTION + +B manipulates some of the Rx protocol counters in the +OpenAFS kernel interface. + +=head1 OPTIONS + +=over 4 + +=item B<-clear> + +Clear the Rx stats for peers in the kernel module. + +=item B<-disable> + +Disable logging of Rx stats for peers in the kernel module. + +=item B<-enable> + +Enable logging of Rx stats for peers in the kernel module. + +=item B<-help> + +Prints the online help for this command. All other valid options are +ignored. + +=back + +=head1 OUTPUT + +This command produces no output other than error messages. + +=head1 EXAMPLES + +Enable Rx Stats for peers: + + % fs rxstatpeer -enable + +=head1 PRIVILEGE REQUIRED + +The issuer must be logged in as the local superuser root. + +=head1 SEE ALSO + +L, +L + +=head1 COPYRIGHT + +Copyright 2007 Jason Edgecombe + +This documentation is covered by the IBM Public License Version 1.0. This +man page was written by Jason Edgecombe for OpenAFS. diff --git a/doc/man-pages/pod1/fs_setacl.pod b/doc/man-pages/pod1/fs_setacl.pod index ec437023ee..fa0562e1ed 100644 --- a/doc/man-pages/pod1/fs_setacl.pod +++ b/doc/man-pages/pod1/fs_setacl.pod @@ -1,6 +1,6 @@ =head1 NAME -fs setacl - Sets the ACL for a directory +fs_setacl - Sets the ACL for a directory =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_setcachesize.pod b/doc/man-pages/pod1/fs_setcachesize.pod index 5c53b5fafe..b0aafd7fc9 100644 --- a/doc/man-pages/pod1/fs_setcachesize.pod +++ b/doc/man-pages/pod1/fs_setcachesize.pod @@ -1,6 +1,6 @@ =head1 NAME -fs setcachesize - Sets the size of the disk cache +fs_setcachesize - Sets the size of the disk cache =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_setcell.pod b/doc/man-pages/pod1/fs_setcell.pod index 0a0963f60f..fb4971fae4 100644 --- a/doc/man-pages/pod1/fs_setcell.pod +++ b/doc/man-pages/pod1/fs_setcell.pod @@ -1,6 +1,6 @@ =head1 NAME -fs setcell - Configures permissions for setuid programs from specified cells +fs_setcell - Configures permissions for setuid programs from specified cells =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_setclientaddrs.pod b/doc/man-pages/pod1/fs_setclientaddrs.pod index e76a05d5a0..213d45160a 100644 --- a/doc/man-pages/pod1/fs_setclientaddrs.pod +++ b/doc/man-pages/pod1/fs_setclientaddrs.pod @@ -1,6 +1,6 @@ =head1 NAME -fs setclientaddrs - Sets the client interfaces to register with the File Server +fs_setclientaddrs - Sets the client interfaces to register with the File Server =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_setcrypt.pod b/doc/man-pages/pod1/fs_setcrypt.pod index 76676f167d..c303b25a82 100644 --- a/doc/man-pages/pod1/fs_setcrypt.pod +++ b/doc/man-pages/pod1/fs_setcrypt.pod @@ -1,6 +1,6 @@ =head1 NAME -fs setcrypt - Enables of disables the encryption of AFS file transfers +fs_setcrypt - Enables of disables the encryption of AFS file transfers =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_setquota.pod b/doc/man-pages/pod1/fs_setquota.pod index 19a0fded02..dfec2998bb 100644 --- a/doc/man-pages/pod1/fs_setquota.pod +++ b/doc/man-pages/pod1/fs_setquota.pod @@ -1,6 +1,6 @@ =head1 NAME -fs setquota - Sets the quota for the volume containing a file or directory +fs_setquota - Sets the quota for the volume containing a file or directory =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_setserverprefs.pod b/doc/man-pages/pod1/fs_setserverprefs.pod index 2a709147f5..9b4c0c3ffd 100644 --- a/doc/man-pages/pod1/fs_setserverprefs.pod +++ b/doc/man-pages/pod1/fs_setserverprefs.pod @@ -1,6 +1,6 @@ =head1 NAME -fs setserverprefs - Sets the preference ranks for file servers or VL servers +fs_setserverprefs - Sets the preference ranks for file servers or VL servers =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_setvol.pod b/doc/man-pages/pod1/fs_setvol.pod index 104faa5ef2..c0fd59ab4f 100644 --- a/doc/man-pages/pod1/fs_setvol.pod +++ b/doc/man-pages/pod1/fs_setvol.pod @@ -1,6 +1,6 @@ =head1 NAME -fs setvol - Set quota and messages for a volume containing a file or directory +fs_setvol - Set quota and messages for a volume containing a file or directory =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_storebehind.pod b/doc/man-pages/pod1/fs_storebehind.pod index 82f1682d86..70e804166d 100644 --- a/doc/man-pages/pod1/fs_storebehind.pod +++ b/doc/man-pages/pod1/fs_storebehind.pod @@ -1,6 +1,6 @@ =head1 NAME -fs storebehind - Enables asynchronous writes to the file server +fs_storebehind - Enables asynchronous writes to the file server =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_sysname.pod b/doc/man-pages/pod1/fs_sysname.pod index de6c9abd6f..b3026a646c 100644 --- a/doc/man-pages/pod1/fs_sysname.pod +++ b/doc/man-pages/pod1/fs_sysname.pod @@ -1,15 +1,15 @@ =head1 NAME -fs sysname - Reports or sets the CPU/operating system type +fs_sysname - Reports or sets the CPU/operating system type =head1 SYNOPSIS =for html
-B S<<< [B<-newsys> >] >>> [B<-help>] +B S<<< [B<-newsys> >]+ >>> [B<-help>] -B S<<< [B<-n> >] >>> [B<-h>] +B S<<< [B<-n> >]+ >>> [B<-h>] =for html
@@ -19,7 +19,7 @@ B S<<< [B<-n> >] >>> [B<-h>] The B command sets or displays the local machine's CPU/operating system type as recorded in kernel memory. The Cache Manager substitutes the string for the I<@sys> variable which can occur in AFS -pathnames; the I and I and I explain how using I<@sys> can simplify cell configuration. It is best to use it sparingly, however, because it can make the effect of changing directories unpredictable. @@ -42,10 +42,14 @@ must verify that the correct string is set for the new identity also. =item B<-newsys> > -Sets the CPU/operating system indicator string for the local machine. If -this argument is omitted, the output displays the current setting -instead. AFS uses a standardized set of strings; consult the I or I. +Sets the CPU/operating system indicator string for the local machine. This +option may be used multiple times in the same invocation, which sets I<@sys> +to an array of values. When I<@sys> contains an array of values, the first +value that matches a path is used. + +If this argument is omitted, the output displays the current setting +instead. AFS uses a standardized set of strings; consult the I or I. =item B<-help> @@ -61,6 +65,10 @@ system type in the following format: Current sysname is '' +When the B<-newsys> argument is included, the output is the following: + + fs: new sysname list set. + =head1 EXAMPLES The following example shows the output produced on a Sun SPARCStation @@ -74,6 +82,18 @@ The following command defines a machine to be a IBM RS/6000 running AIX % fs sysname -newsys rs_aix42 +The following command defines a machine to be Mac OS X PPC and a +custom type 'foo'. The second command queries the new sysname: + + % fs sysname -newsys ppc_darwin_80 -newsys foo + fs: new sysname list set. + % fs sysname + Current sysname list is 'ppc_darwin_80' 'foo' + +If I<@sys> is C, then C will try to change +to the C directory. If the C directory +doesn't exist, then the C directory is tried. + =head1 PRIVILEGE REQUIRED To display the current setting, no privilege is required. To include the @@ -85,9 +105,14 @@ as the local superuser C. L, L -I +I +L -I +I +L + +For the list of assigned standard sysname values, see +L =head1 COPYRIGHT diff --git a/doc/man-pages/pod1/fs_uuid.pod b/doc/man-pages/pod1/fs_uuid.pod new file mode 100644 index 0000000000..9d6a2c1da1 --- /dev/null +++ b/doc/man-pages/pod1/fs_uuid.pod @@ -0,0 +1,81 @@ +=head1 NAME + +fs_uuid - Prints the uuid of the client or generates a new one + +=head1 SYNOPSIS + +=for html +
+ +B [B<-generate>] [B<-help>] + +=for html +
+ +=head1 DESCRIPTION + +B prints the current UUID of an OpenAFS client. It can +optionally force the generation of a new UUID, if needed. The client UUID +is used by the B to differentiate clients with the same IP +address. + +=head1 CAUTIONS + +The B command is only available in OpenAFS versions after 1.4.5 +and 1.5.8. The behavior differs slightly between versions. In OpenAFS +1.4.5 and later, the B<-generate> option is required and the UUID for the +client machine is never printed. OpenAFS versions 1.5.8 and later will +print the UUID. + +=head1 OPTIONS + +=over 4 + +=item B<-generate> + +Generates a new UUID for the cache manager. This is useful if two clients +share the same UUID (if systems were cloned incorrectly, for example). +B<-generate> is optional in OpenAFS versions 1.5.8 and later, but it is +required in OpenAFS versions 1.4.5 and later. + +=item B<-help> + +Prints the online help for this command. All other valid options are +ignored. + +=back + +=head1 OUTPUT + +B prints out the current UUID for the client or the new UUID +if the B<-generate> option is passed to it. + +=head1 EXAMPLES + +There are only two ways to invoke B under 1.5.8 and later: + + % fs uuid + UUID: 8ac66f9308a8e-47d7-80f7-50d0040cddc2 + + % fs uuid -generate + New UUID: 436bd660-1720-429508e470cff38f5c6fb0 + +Here is the only way to invoke B under OpenAFS 1.4.5 and later: + + % fs uuid -generate + New uuid generated. + +=head1 PRIVILEGE REQUIRED + +The issuer must be logged on as the local superuser C. + +=head1 SEE ALSO + +L + +=head1 COPYRIGHT + +Copyright 2007 Jason Edgecombe + +This documentation is covered by the IBM Public License Version 1.0. This +man page was written by Jason Edgecombe for OpenAFS. diff --git a/doc/man-pages/pod1/fs_whereis.pod b/doc/man-pages/pod1/fs_whereis.pod index 1665c60ca3..23dfc75bdb 100644 --- a/doc/man-pages/pod1/fs_whereis.pod +++ b/doc/man-pages/pod1/fs_whereis.pod @@ -1,6 +1,6 @@ =head1 NAME -fs whereis - Reports each file server housing a file or directory +fs_whereis - Reports each file server housing a file or directory =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_whichcell.pod b/doc/man-pages/pod1/fs_whichcell.pod index 101c111b08..56fdfb9b33 100644 --- a/doc/man-pages/pod1/fs_whichcell.pod +++ b/doc/man-pages/pod1/fs_whichcell.pod @@ -1,6 +1,6 @@ =head1 NAME -fs whichcell - Returns the cell to which a file or directory belongs +fs_whichcell - Returns the cell to which a file or directory belongs =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/fs_wscell.pod b/doc/man-pages/pod1/fs_wscell.pod index cfd6898275..a71fa2677b 100644 --- a/doc/man-pages/pod1/fs_wscell.pod +++ b/doc/man-pages/pod1/fs_wscell.pod @@ -1,6 +1,6 @@ =head1 NAME -fs wscell - Returns the name of the cell to which a machine belongs +fs_wscell - Returns the name of the cell to which a machine belongs =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_adduser.pod b/doc/man-pages/pod1/pts_adduser.pod index 671c76e6b0..ac2f332f64 100644 --- a/doc/man-pages/pod1/pts_adduser.pod +++ b/doc/man-pages/pod1/pts_adduser.pod @@ -1,6 +1,6 @@ =head1 NAME -pts adduser - Adds a user or machine to a Protection Database group +pts_adduser - Adds a user or machine to a Protection Database group =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_apropos.pod b/doc/man-pages/pod1/pts_apropos.pod index 89653617e6..9e213710e9 100644 --- a/doc/man-pages/pod1/pts_apropos.pod +++ b/doc/man-pages/pod1/pts_apropos.pod @@ -1,6 +1,6 @@ =head1 NAME -pts apropos - Displays each help entry containing a keyword string +pts_apropos - Displays each help entry containing a keyword string =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_chown.pod b/doc/man-pages/pod1/pts_chown.pod index 397ed0c5e3..cde8b98c26 100644 --- a/doc/man-pages/pod1/pts_chown.pod +++ b/doc/man-pages/pod1/pts_chown.pod @@ -1,6 +1,6 @@ =head1 NAME -pts chown - Changes the owner of a Protection Database entry +pts_chown - Changes the owner of a Protection Database entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_creategroup.pod b/doc/man-pages/pod1/pts_creategroup.pod index 861efe3593..d2886e9541 100644 --- a/doc/man-pages/pod1/pts_creategroup.pod +++ b/doc/man-pages/pod1/pts_creategroup.pod @@ -1,6 +1,6 @@ =head1 NAME -pts creategroup - Creates an (empty) Protection Database group entry +pts_creategroup - Creates an (empty) Protection Database group entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_createuser.pod b/doc/man-pages/pod1/pts_createuser.pod index 1b706daa78..64abd23236 100644 --- a/doc/man-pages/pod1/pts_createuser.pod +++ b/doc/man-pages/pod1/pts_createuser.pod @@ -1,6 +1,6 @@ =head1 NAME -pts createuser - Creates a user or machine entry in the Protection Database +pts_createuser - Creates a user or machine entry in the Protection Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_delete.pod b/doc/man-pages/pod1/pts_delete.pod index b88274be56..6af95427ca 100644 --- a/doc/man-pages/pod1/pts_delete.pod +++ b/doc/man-pages/pod1/pts_delete.pod @@ -1,6 +1,6 @@ =head1 NAME -pts delete - Deletes a Protection Database entry +pts_delete - Deletes a Protection Database entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_examine.pod b/doc/man-pages/pod1/pts_examine.pod index 0a7572756a..068e1eb30c 100644 --- a/doc/man-pages/pod1/pts_examine.pod +++ b/doc/man-pages/pod1/pts_examine.pod @@ -1,6 +1,6 @@ =head1 NAME -pts examine - Displays a Protection Database entry +pts_examine - Displays a Protection Database entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_help.pod b/doc/man-pages/pod1/pts_help.pod index 970c22f093..6a26098fa9 100644 --- a/doc/man-pages/pod1/pts_help.pod +++ b/doc/man-pages/pod1/pts_help.pod @@ -1,6 +1,6 @@ =head1 NAME -pts help - Displays help for pts commands +pts_help - Displays help for pts commands =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_interactive.pod b/doc/man-pages/pod1/pts_interactive.pod index b21ef59ee4..dc9f831b1e 100644 --- a/doc/man-pages/pod1/pts_interactive.pod +++ b/doc/man-pages/pod1/pts_interactive.pod @@ -1,6 +1,6 @@ =head1 NAME -pts interactive - issue multiple multiple pts commands +pts_interactive - issue multiple multiple pts commands =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_listentries.pod b/doc/man-pages/pod1/pts_listentries.pod index 10c8b69039..99b71072c3 100644 --- a/doc/man-pages/pod1/pts_listentries.pod +++ b/doc/man-pages/pod1/pts_listentries.pod @@ -1,6 +1,6 @@ =head1 NAME -pts listentries - Displays all users or groups in the Protection Database +pts_listentries - Displays all users or groups in the Protection Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_listmax.pod b/doc/man-pages/pod1/pts_listmax.pod index 110dc200c1..151ac68c90 100644 --- a/doc/man-pages/pod1/pts_listmax.pod +++ b/doc/man-pages/pod1/pts_listmax.pod @@ -1,6 +1,6 @@ =head1 NAME -pts listmax - Displays the max user id and max group id counters +pts_listmax - Displays the max user id and max group id counters =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_listowned.pod b/doc/man-pages/pod1/pts_listowned.pod index 2d3de80c8b..fc0d464b24 100644 --- a/doc/man-pages/pod1/pts_listowned.pod +++ b/doc/man-pages/pod1/pts_listowned.pod @@ -1,6 +1,6 @@ =head1 NAME -pts listowned - Show the Protection Database groups owned by a user or group +pts_listowned - Show the Protection Database groups owned by a user or group =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_membership.pod b/doc/man-pages/pod1/pts_membership.pod index 36455ebefe..7bacc0b8fc 100644 --- a/doc/man-pages/pod1/pts_membership.pod +++ b/doc/man-pages/pod1/pts_membership.pod @@ -1,6 +1,6 @@ =head1 NAME -pts membership - Displays the membership list for a user or group +pts_membership - Displays the membership list for a user or group =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_quit.pod b/doc/man-pages/pod1/pts_quit.pod index 4f8abfa2ea..844545f79a 100644 --- a/doc/man-pages/pod1/pts_quit.pod +++ b/doc/man-pages/pod1/pts_quit.pod @@ -1,6 +1,6 @@ =head1 NAME -pts quit - Exit from pts interactive mode +pts_quit - Exit from pts interactive mode =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_removeuser.pod b/doc/man-pages/pod1/pts_removeuser.pod index 7012d6066d..eb7bc9f6a9 100644 --- a/doc/man-pages/pod1/pts_removeuser.pod +++ b/doc/man-pages/pod1/pts_removeuser.pod @@ -1,6 +1,6 @@ =head1 NAME -pts removeuser - Removes a user from a Protection Database group +pts_removeuser - Removes a user from a Protection Database group =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_rename.pod b/doc/man-pages/pod1/pts_rename.pod index 72c8ffb938..aef05eab39 100644 --- a/doc/man-pages/pod1/pts_rename.pod +++ b/doc/man-pages/pod1/pts_rename.pod @@ -1,6 +1,6 @@ =head1 NAME -pts rename - Changes the name of a Protection Database entry +pts_rename - Changes the name of a Protection Database entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_setfields.pod b/doc/man-pages/pod1/pts_setfields.pod index 76050c9cef..f530d1026f 100644 --- a/doc/man-pages/pod1/pts_setfields.pod +++ b/doc/man-pages/pod1/pts_setfields.pod @@ -1,6 +1,6 @@ =head1 NAME -pts setfields - Sets privacy flags or quota for a Protection Database entry +pts_setfields - Sets privacy flags or quota for a Protection Database entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_setmax.pod b/doc/man-pages/pod1/pts_setmax.pod index 9a5bce5c51..09df9de1cd 100644 --- a/doc/man-pages/pod1/pts_setmax.pod +++ b/doc/man-pages/pod1/pts_setmax.pod @@ -1,6 +1,6 @@ =head1 NAME -pts setmax - Sets the value of the max group id or max user id counter +pts_setmax - Sets the value of the max group id or max user id counter =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_sleep.pod b/doc/man-pages/pod1/pts_sleep.pod index b781201a13..06d31aad38 100644 --- a/doc/man-pages/pod1/pts_sleep.pod +++ b/doc/man-pages/pod1/pts_sleep.pod @@ -1,6 +1,6 @@ =head1 NAME -pts sleep - pause for time +pts_sleep - pause for time =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/pts_source.pod b/doc/man-pages/pod1/pts_source.pod index 595780b430..11312aaeb7 100644 --- a/doc/man-pages/pod1/pts_source.pod +++ b/doc/man-pages/pod1/pts_source.pod @@ -1,6 +1,6 @@ =head1 NAME -pts source - read pts commands from a file. +pts_source - read pts commands from a file. =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/symlink.pod b/doc/man-pages/pod1/symlink.pod new file mode 100644 index 0000000000..04f8681c47 --- /dev/null +++ b/doc/man-pages/pod1/symlink.pod @@ -0,0 +1,40 @@ +=head1 NAME + +symlink - Introduction to the symlink command suite + +=head1 DESCRIPTION + +The B command creates, lists and removes Unix-style symbolic links +(symlinks) in OpenAFS filespace from a platform that does not support +symlinks, like Windows. The B command is equivalent to +C on a Unix platform. B can manipulate symlinks created +by C on Unix and vice versa. + +=head1 CAUTIONS + +The B commands are only available on Windows platforms. On +other platforms, use the C command. + +=head1 OPTIONS + +=over 4 + +=item B<-help> + +Prints the online help for this command. All other valid options are +ignored. + +=back + +=head1 SEE ALSO + +L, +L, +L + +=head1 COPYRIGHT + +Copyright 2007 Jason Edgecombe + +This documentation is covered by the IBM Public License Version 1.0. This +man page was written by Jason Edgecombe for OpenAFS. diff --git a/doc/man-pages/pod1/symlink_list.pod b/doc/man-pages/pod1/symlink_list.pod new file mode 100644 index 0000000000..a56629d7bf --- /dev/null +++ b/doc/man-pages/pod1/symlink_list.pod @@ -0,0 +1,79 @@ +=head1 NAME + +symlink_list - Show the file to which a symlink points + +=head1 SYNOPSIS + +=for html +
+ +B S<<< [B<-name>] > >>> [B<-help>] + +=for html +
+ +=head1 DESCRIPTION + +The B command shows if a file is a symbolic link and, if so, +shows to which file the link points. + +=head1 CAUTIONS + +The B commands are only available on Windows platforms. On other +platforms, use the B command. + +=head1 OPTIONS + +=over 4 + +=item [B<-name>] > + +Specify one or more symbolic links to list. The C<-name> is optional, but +the file name is not. + +=item B<-help> + +Prints the online help for this command. All other valid options are +ignored. + +=back + +=head1 OUTPUT + +This command prints "'file' is a symlink to 'otherfile'" or "'file' is +not a symlink." + +=head1 EXAMPLES + +Given that file C is a link pointing to file C, the +following commands will list the files: + + % symlink list -name mylink + 'mylink' is a symlink to 'myfile' + + % symlink list mylink + 'mylink' is a symlink to 'myfile' + + % symlink list -name myfile + 'myfile' is not a symlink. + + % symlink list myfile + 'myfile' is not a symlink. + +=head1 PRIVILEGE REQUIRED + +The issuer must have the C (look) and C (read) permissions on the ACL +of the directory that houses the symlink. + +=head1 SEE ALSO + +L, +L, +L + +=head1 COPYRIGHT + +Copyright 2007 Jason Edgecombe + +This documentation is covered by the IBM Public License Version 1.0. This +man page was written by Jason Edgecombe for OpenAFS. diff --git a/doc/man-pages/pod1/symlink_make.pod b/doc/man-pages/pod1/symlink_make.pod new file mode 100644 index 0000000000..d9d57336a2 --- /dev/null +++ b/doc/man-pages/pod1/symlink_make.pod @@ -0,0 +1,76 @@ +=head1 NAME + +symlink_make - Create a symbolic link + +=head1 SYNOPSIS + +=for html +
+ +B S<<< [B<-name>] > >>> + S<<< [B<-to>] > >>> [B<-help>] + +=for html +
+ +=head1 DESCRIPTION + +The B command creates a new symbolic link to a file. The file +to which the link points does not have to exist when the link is created. + +=head1 CAUTIONS + +The B commands are only available on Windows platforms. On other +platforms, use the C command. + +=head1 OPTIONS + +=over 4 + +=item [B<-name>] > + +Specify the name of the new link. B<-name> is optional, but the file name +is not. + +=item [B<-to>] > + +Specify the file to which the new link points. B<-to> is optional, but the +file name is not. + +=item B<-help> + +Prints the online help for this command. All other valid options are +ignored. + +=back + +=head1 OUTPUT + +Prints the online help for this command. All other valid options are +ignored. + +=head1 EXAMPLES + +In order to create a link named C pointing to the file C, +use one of the following commands: + + % symlink make -name mylink -to myfile + % symlink make mylink myfile + +=head1 PRIVILEGE REQUIRED + +The issuer must have the C (look) and C (insert) permissions on the +ACL of the directory that houses the symlink. + +=head1 SEE ALSO + +L, +L, +L + +=head1 COPYRIGHT + +Copyright 2007 Jason Edgecombe + +This documentation is covered by the IBM Public License Version 1.0. This +man page was written by Jason Edgecombe for OpenAFS. diff --git a/doc/man-pages/pod1/symlink_remove.pod b/doc/man-pages/pod1/symlink_remove.pod new file mode 100644 index 0000000000..917b317ea1 --- /dev/null +++ b/doc/man-pages/pod1/symlink_remove.pod @@ -0,0 +1,70 @@ +=head1 NAME + +symlink_remove - Remove a symbolic link. + +=head1 SYNOPSIS + +=for html +
+ +B S<<< [B<-name>] > >>> [B<-help>] + +=for html +
+ +=head1 DESCRIPTION + +The B command removes a symbolic link to a file. + +=head1 CAUTIONS + +The B commands are only available on Windows platforms. On other +platforms, use the B command. + +=head1 OPTIONS + +=over 4 + +=item [B<-name>] > + +Specify one or more symbolic links to remove. The B<-name> is optional, but +the file name is not. + +=item B<-help> + +Prints the online help for this command. All other valid options are +ignored. + +=back + +=head1 OUTPUT + +This command has no output except error and help messages. If the command +is passed a real file instead of a symlink, it prints "symlink: 'file name' +is not a symlink" instead of removing the file. + +=head1 EXAMPLES + +Given that file C is a link pointing to file C, the +following commands will remove the link C: + + % symlink remove -name mylink + % symlink remove mylink + +=head1 PRIVILEGE REQUIRED + +The issuer must have the C (look) and C (delete) permissions on +the ACL of the directory that houses the symlink. + +=head1 SEE ALSO + +L, +L, +L + +=head1 COPYRIGHT + +Copyright 2007 Jason Edgecombe + +This documentation is covered by the IBM Public License Version 1.0. This +man page was written by Jason Edgecombe for OpenAFS. diff --git a/doc/man-pages/pod1/vos.pod b/doc/man-pages/pod1/vos.pod index d81af1031b..1ea17e9911 100644 --- a/doc/man-pages/pod1/vos.pod +++ b/doc/man-pages/pod1/vos.pod @@ -237,7 +237,8 @@ L, L, L, L, -L, +L, +L, L, L, L, diff --git a/doc/man-pages/pod1/vos_addsite.pod b/doc/man-pages/pod1/vos_addsite.pod index ac36e8fa5c..1c4d96131a 100644 --- a/doc/man-pages/pod1/vos_addsite.pod +++ b/doc/man-pages/pod1/vos_addsite.pod @@ -1,6 +1,6 @@ =head1 NAME -vos addsite - Adds a read-only site definition to a volume's VLDB entry +vos_addsite - Adds a read-only site definition to a volume's VLDB entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_apropos.pod b/doc/man-pages/pod1/vos_apropos.pod index dce7bf25b5..a0cce8fce0 100644 --- a/doc/man-pages/pod1/vos_apropos.pod +++ b/doc/man-pages/pod1/vos_apropos.pod @@ -1,6 +1,6 @@ =head1 NAME -vos apropos - Displays each help entry containing a keyword string +vos_apropos - Displays each help entry containing a keyword string =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_backup.pod b/doc/man-pages/pod1/vos_backup.pod index 7de3df8d94..19312dbe7b 100644 --- a/doc/man-pages/pod1/vos_backup.pod +++ b/doc/man-pages/pod1/vos_backup.pod @@ -1,6 +1,6 @@ =head1 NAME -vos backup - Creates a backup volume for a single read/write volume +vos_backup - Creates a backup volume for a single read/write volume =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_backupsys.pod b/doc/man-pages/pod1/vos_backupsys.pod index e430f6d263..8a12c5a61b 100644 --- a/doc/man-pages/pod1/vos_backupsys.pod +++ b/doc/man-pages/pod1/vos_backupsys.pod @@ -1,6 +1,6 @@ =head1 NAME -vos backupsys - Creates a backup volume for several read/write volumes +vos_backupsys - Creates a backup volume for several read/write volumes =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_changeaddr.pod b/doc/man-pages/pod1/vos_changeaddr.pod index 81a703fde3..02d9fb816f 100644 --- a/doc/man-pages/pod1/vos_changeaddr.pod +++ b/doc/man-pages/pod1/vos_changeaddr.pod @@ -1,6 +1,6 @@ =head1 NAME -vos changeaddr - Changes or removes a file server machine's entry in the VLDB +vos_changeaddr - Changes or removes a file server machine's entry in the VLDB =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_changeloc.pod b/doc/man-pages/pod1/vos_changeloc.pod index ff40f92ff6..079d1dc9d7 100644 --- a/doc/man-pages/pod1/vos_changeloc.pod +++ b/doc/man-pages/pod1/vos_changeloc.pod @@ -1,6 +1,6 @@ =head1 NAME -vos changeloc - Change a volume's entry in the VLDB +vos_changeloc - Change a volume's entry in the VLDB =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_convertROtoRW.pod b/doc/man-pages/pod1/vos_convertROtoRW.pod new file mode 100644 index 0000000000..863ea0da81 --- /dev/null +++ b/doc/man-pages/pod1/vos_convertROtoRW.pod @@ -0,0 +1,122 @@ +=head1 NAME + +vos_convertROtoRW - Converts a Read-Only volume into a Read/Write volume + +=head1 SYNOPSIS + +=for html +
+ +B S<<< [B<-server>] > >>> + S<<< [B<-partition>] > >>> + S<<< [B<-id>] > >>> [B<-force>] + S<<< [B<-cell> >] >>> [B<-noauth>] [B<-localauth>] + [B<-verbose>] [B<-encrypt>] [B<-help>] + +=for html +
+ +=head1 DESCRIPTION + +B converts a Read-Only volume into a Read/Write volume +when the original Read/Write volume is no longer available. It's normal use +is to recover the Read/Write volume from a replica after a failed disk, +failed server, or accidental deletion. + +=head1 CAUTIONS + +This command can only be used with namei AFS file servers. If used on an +inode AFS file server, it will fail with an error. + +The command name is case-sensitive. It must be issued with the capital "RO" +and "RW". + +=head1 OPTIONS + +=over 4 + +=item B<-server> > + +Identifies the file server machine that houses the Read-Only volume which +will be converted. Provide the machine's IP address or its host name +(either fully qualified or using an unambiguous abbreviation). For details, +see L. + +=item B<-partition> > + +Identifies the partition on the file server machine that houses the +Read-Only volume which will be converted. Provide the full partition name +(for, example, B) or one of the abbreviated forms described in +L. + +=item B<-id> > + +Specifies either the complete name or volume ID number of a Read/Write +volume. + +=item B<-force> + +Don't ask for confirmation. + +=item B<-cell> > + +Names the cell in which to run the command. Do not combine this argument +with the B<-localauth> flag. For more details, see L. + +=item B<-noauth> + +Assigns the unprivileged identity C to the issuer. Do not +combine this flag with the B<-localauth> flag. For more details, see +L. + +=item B<-localauth> + +Constructs a server ticket using a key from the local +F file. The B command interpreter presents it +to the Volume Server and Volume Location Server during mutual +authentication. Do not combine this flag with the B<-cell> argument or +B<-noauth> flag. For more details, see L. + +=item B<-verbose> + +Produces on the standard output stream a detailed trace of the command's +execution. If this argument is omitted, only warnings and error messages +appear. + +=item B<-encrypt> + +Encrypts the command so that the operation's results are not transmitted +across the network in clear text. + +=item B<-help> + +Prints the online help for this command. All other valid options are +ignored. + +=back + +=head1 EXAMPLES + +The following example converts the read-only volume test3.readonly in +partition vicepb on server1 to a read-write volume: + + % vos convertROtoRW server1 b test3.readonly + +=head1 PRIVILEGE REQUIRED + +The issuer must be listed in the F file on the +machines specified with the B<-toserver> and B<-fromserver> arguments and +on each database server machine. If the B<-localauth> flag is included, +the issuer must instead be logged on to a server machine as the local +superuser C. + +=head1 SEE ALSO + +L + +=head1 COPYRIGHT + +Copyright 2007 Jason Edgecombe + +This documentation is covered by the IBM Public License Version 1.0. This +man page was written by Jason Edgecombe for OpenAFS. diff --git a/doc/man-pages/pod1/vos_copy.pod b/doc/man-pages/pod1/vos_copy.pod new file mode 100644 index 0000000000..1cf7ec69dd --- /dev/null +++ b/doc/man-pages/pod1/vos_copy.pod @@ -0,0 +1,158 @@ +=head1 NAME + +vos_copy - Make a copy of a volume + +=head1 SYNOPSIS + +=for html +
+ +B S<<< [B<-id>] > >>> + S<<< [B<-fromserver>] > >>> + S<<< [B<-frompartition>] > >>> + S<<< [B<-toname>] > >>> + S<<< [B<-toserver>] > >>> + S<<< [B<-topartition>] > >>> + [B<-offline>] [B<-readonly>] [B<-live>] S<<< [B<-cell> >] >>> + [B<-noauth>] [B<-localauth>] [B<-verbose>] [B<-encrypt>] [B<-help>] + +=for html +
+ +=head1 DESCRIPTION + +The B command makes a copy of a volume with a new name. It is +equivalent to B followed by B, but doesn't require +the volume be stored locally by the client. + +=head1 OPTIONS + +=over 4 + +=item [B<-id>] > + +Specifies either the complete name or volume ID number of a read/write +volume. + +=item [B<-fromserver>] > + +Identifies the file server machine where the source volume resides. Provide +the machine's IP address or its host name (either fully qualified or using +an unambiguous abbreviation). For details, see L. + +=item [B<-frompartition>] > + +Names the partition where the source volume resides. Provide the full +partition name (for, example, B) or one of the abbreviated forms +described in L. + +=item [B<-toname>] > + +The complete name of the new volume to create. + +=item [B<-toserver>] > + +Identifies the file server machine to which to copy the volume. Provide +the machine's IP address or its host name (either fully qualified or using +an unambiguous abbreviation). For details, see L. + +=item [B<-topartition>] > + +Names the partition to which to copy the volume. Provide the full partition +name (for, example, B) or one of the abbreviated forms described in +L. + +=item B<-offline> + +Leaves the new volume flagged as off-line in the volume database. + +=item B<-readonly> + +Flags the new volume as read-only in the volume database. + +=item B<-live> + +Copies the live volume without cloning. This is normally not necessary and +causes the volume to be kept locked for longer than the normal copy +mechanism. + +=item B<-localauth> + +Constructs a server ticket using a key from the local +F file. The B command interpreter presents it to +the Volume Server and Volume Location Server during mutual +authentication. Do not combine this flag with the B<-cell> argument or +B<-noauth> flag. For more details, see L. + +=item B<-verbose> + +Produces on the standard output stream a detailed trace of the command's +execution. If this argument is omitted, only warnings and error messages +appear. + +=item B<-encrypt> + +Encrypts the command so that the operation's results are not transmitted +across the network in clear text. + +=item B<-help> + +Prints the online help for this command. All other valid options are +ignored. + +=back + +=head1 OUTPUT + +This command has no output unless C<-verbose> is specified or there is +an error. + +=head1 EXAMPLES + +The following example makes a verbose copy of the C volume named +C in the cell C. The volume and copy both reside on +C of C. + + % vos copy test server1 a test2 server1 a -cell localcell -verbose + Starting transaction on source volume 536870921 ... done + Allocating new volume id for clone of volume 536870921 ... done + Allocating new volume id for copy of volume 536870921 ... done + Cloning source volume 536870921 ... done + Ending the transaction on the source volume 536870921 ... done + Starting transaction on the cloned volume 536870926 ... done + Setting flags on cloned volume 536870926 ... done + Getting status of cloned volume 536870926 ... done + Creating the destination volume 536870927 ... done + Setting volume flags on destination volume 536870927 ... done + Dumping from clone 536870926 on source to volume 536870927 on destination ... done + Ending transaction on cloned volume 536870926 ... done + Starting transaction on source volume 536870921 ... done + Doing the incremental dump from source to destination for volume 536870921 ... done + Setting volume flags on destination volume 536870927 ... done + Ending transaction on destination volume 536870927 ... done + Ending transaction on source volume 536870921 ... done + Starting transaction on the cloned volume 536870926 ... done + Deleting the cloned volume 536870926 ... done + Ending transaction on cloned volume 536870926 ... done + Created the VLDB entry for the volume test2 536870927 + Volume 536870921 copied from server1 /vicepa to test2 on server1 /vicepa + +=head1 PRIVILEGE REQUIRED + +The issuer must be listed in the F file on the +machine specified with the B<-server> argument and on each database server +machine. If the B<-localauth> flag is included, the issuer must instead be +logged on to a server machine as the local superuser C. + +=head1 SEE ALSO + +L, +L, +L + +=head1 COPYRIGHT + +Copyright 2007 Jason Edgecombe + +This documentation is covered by the IBM Public License Version 1.0. This +man page was written by Jason Edgecombe for OpenAFS. diff --git a/doc/man-pages/pod1/vos_create.pod b/doc/man-pages/pod1/vos_create.pod index 7c2b5ed462..b3a98d4c4a 100644 --- a/doc/man-pages/pod1/vos_create.pod +++ b/doc/man-pages/pod1/vos_create.pod @@ -1,6 +1,6 @@ =head1 NAME -vos create - Creates a read/write volume and associated VLDB entry +vos_create - Creates a read/write volume and associated VLDB entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_delentry.pod b/doc/man-pages/pod1/vos_delentry.pod index 854a22a208..b28bb8c3c1 100644 --- a/doc/man-pages/pod1/vos_delentry.pod +++ b/doc/man-pages/pod1/vos_delentry.pod @@ -1,6 +1,6 @@ =head1 NAME -vos delentry - Removes a volume entry from the VLDB. +vos_delentry - Removes a volume entry from the VLDB. =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_dump.pod b/doc/man-pages/pod1/vos_dump.pod index 0686f732c1..8fdbc7110c 100644 --- a/doc/man-pages/pod1/vos_dump.pod +++ b/doc/man-pages/pod1/vos_dump.pod @@ -1,6 +1,6 @@ =head1 NAME -vos dump - Converts a volume into ASCII format and writes it to a file +vos_dump - Converts a volume into ASCII format and writes it to a file =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_examine.pod b/doc/man-pages/pod1/vos_examine.pod index bfc0ae5be8..6f6c33489c 100644 --- a/doc/man-pages/pod1/vos_examine.pod +++ b/doc/man-pages/pod1/vos_examine.pod @@ -1,6 +1,6 @@ =head1 NAME -vos examine - Shows volume header and VLDB entry information for a volume +vos_examine - Shows volume header and VLDB entry information for a volume =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_help.pod b/doc/man-pages/pod1/vos_help.pod index 9eda9c52b4..cb51b2dd5a 100644 --- a/doc/man-pages/pod1/vos_help.pod +++ b/doc/man-pages/pod1/vos_help.pod @@ -1,6 +1,6 @@ =head1 NAME -vos help - Displays help for vos commands +vos_help - Displays help for vos commands =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_listaddrs.pod b/doc/man-pages/pod1/vos_listaddrs.pod index 57ea78bdf9..3e4fbae61c 100644 --- a/doc/man-pages/pod1/vos_listaddrs.pod +++ b/doc/man-pages/pod1/vos_listaddrs.pod @@ -1,6 +1,6 @@ =head1 NAME -vos listaddrs - Displays all VLDB server entries +vos_listaddrs - Displays all VLDB server entries =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_listpart.pod b/doc/man-pages/pod1/vos_listpart.pod index 1498e9727b..e924bd55ff 100644 --- a/doc/man-pages/pod1/vos_listpart.pod +++ b/doc/man-pages/pod1/vos_listpart.pod @@ -1,6 +1,6 @@ =head1 NAME -vos listpart - Displays all AFS partitions on a file server machine +vos_listpart - Displays all AFS partitions on a file server machine =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_listvldb.pod b/doc/man-pages/pod1/vos_listvldb.pod index 9684376664..f9947c62b2 100644 --- a/doc/man-pages/pod1/vos_listvldb.pod +++ b/doc/man-pages/pod1/vos_listvldb.pod @@ -1,6 +1,6 @@ =head1 NAME -vos listvldb - Displays a volume's VLDB entry +vos_listvldb - Displays a volume's VLDB entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_listvol.pod b/doc/man-pages/pod1/vos_listvol.pod index 619c9d2ed0..32d57d57d3 100644 --- a/doc/man-pages/pod1/vos_listvol.pod +++ b/doc/man-pages/pod1/vos_listvol.pod @@ -1,6 +1,6 @@ =head1 NAME -vos listvol - Displays information from a volume header +vos_listvol - Displays information from a volume header =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_lock.pod b/doc/man-pages/pod1/vos_lock.pod index efcaa15654..ef84a5ff19 100644 --- a/doc/man-pages/pod1/vos_lock.pod +++ b/doc/man-pages/pod1/vos_lock.pod @@ -1,6 +1,6 @@ =head1 NAME -vos lock - Locks a VLDB volume entry +vos_lock - Locks a VLDB volume entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_move.pod b/doc/man-pages/pod1/vos_move.pod index 4043481e9c..d52787cbbb 100644 --- a/doc/man-pages/pod1/vos_move.pod +++ b/doc/man-pages/pod1/vos_move.pod @@ -1,6 +1,6 @@ =head1 NAME -vos move - Moves a read/write volume to another site +vos_move - Moves a read/write volume to another site =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_offline.pod b/doc/man-pages/pod1/vos_offline.pod index fd134e81bf..b00a039a6f 100644 --- a/doc/man-pages/pod1/vos_offline.pod +++ b/doc/man-pages/pod1/vos_offline.pod @@ -1,6 +1,6 @@ =head1 NAME -vos offline - Takes a volume offline +vos_offline - Takes a volume offline =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_online.pod b/doc/man-pages/pod1/vos_online.pod index 409af7dcd7..e430a188df 100644 --- a/doc/man-pages/pod1/vos_online.pod +++ b/doc/man-pages/pod1/vos_online.pod @@ -1,6 +1,6 @@ =head1 NAME -vos online - Brings a volume online +vos_online - Brings a volume online =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_partinfo.pod b/doc/man-pages/pod1/vos_partinfo.pod index 2f4959dc6f..c9f37a2ee6 100644 --- a/doc/man-pages/pod1/vos_partinfo.pod +++ b/doc/man-pages/pod1/vos_partinfo.pod @@ -1,6 +1,6 @@ =head1 NAME -vos partinfo - Reports the available and total space on a partition +vos_partinfo - Reports the available and total space on a partition =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_release.pod b/doc/man-pages/pod1/vos_release.pod index 54b5d70574..37a4345ff9 100644 --- a/doc/man-pages/pod1/vos_release.pod +++ b/doc/man-pages/pod1/vos_release.pod @@ -1,6 +1,6 @@ =head1 NAME -vos release - Updates read-only volumes to match the read/write source volume +vos_release - Updates read-only volumes to match the read/write source volume =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_remove.pod b/doc/man-pages/pod1/vos_remove.pod index a776219b88..820006edda 100644 --- a/doc/man-pages/pod1/vos_remove.pod +++ b/doc/man-pages/pod1/vos_remove.pod @@ -1,6 +1,6 @@ =head1 NAME -vos remove - Removes a volume from a site +vos_remove - Removes a volume from a site =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_remsite.pod b/doc/man-pages/pod1/vos_remsite.pod index a2829bd440..e455f8eed1 100644 --- a/doc/man-pages/pod1/vos_remsite.pod +++ b/doc/man-pages/pod1/vos_remsite.pod @@ -1,6 +1,6 @@ =head1 NAME -vos remsite - Removes a read-only site definition from a VLDB entry +vos_remsite - Removes a read-only site definition from a VLDB entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_rename.pod b/doc/man-pages/pod1/vos_rename.pod index 0939facf49..5480acaf06 100644 --- a/doc/man-pages/pod1/vos_rename.pod +++ b/doc/man-pages/pod1/vos_rename.pod @@ -1,6 +1,6 @@ =head1 NAME -vos rename - Renames a volume +vos_rename - Renames a volume =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_restore.pod b/doc/man-pages/pod1/vos_restore.pod index 98162e3ed0..e067b460c4 100644 --- a/doc/man-pages/pod1/vos_restore.pod +++ b/doc/man-pages/pod1/vos_restore.pod @@ -1,6 +1,6 @@ =head1 NAME -vos restore - Converts an ASCII dump file into an AFS volume +vos_restore - Converts an ASCII dump file into an AFS volume =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_size.pod b/doc/man-pages/pod1/vos_size.pod index 8465d9ff96..8259e984dd 100644 --- a/doc/man-pages/pod1/vos_size.pod +++ b/doc/man-pages/pod1/vos_size.pod @@ -1,6 +1,6 @@ =head1 NAME -vos size - Computes the size of a volume dump +vos_size - Computes the size of a volume dump =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_status.pod b/doc/man-pages/pod1/vos_status.pod index 8902bf1db0..61bacef3a9 100644 --- a/doc/man-pages/pod1/vos_status.pod +++ b/doc/man-pages/pod1/vos_status.pod @@ -1,6 +1,6 @@ =head1 NAME -vos status - Reports a Volume Server's status +vos_status - Reports a Volume Server's status =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_syncserv.pod b/doc/man-pages/pod1/vos_syncserv.pod index e6c26b7b93..1367c34823 100644 --- a/doc/man-pages/pod1/vos_syncserv.pod +++ b/doc/man-pages/pod1/vos_syncserv.pod @@ -1,6 +1,6 @@ =head1 NAME -vos syncserv - Verifies VLDB entries that mention a specified site +vos_syncserv - Verifies VLDB entries that mention a specified site =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_syncvldb.pod b/doc/man-pages/pod1/vos_syncvldb.pod index 6b2024aa35..ae3b4a4539 100644 --- a/doc/man-pages/pod1/vos_syncvldb.pod +++ b/doc/man-pages/pod1/vos_syncvldb.pod @@ -1,6 +1,6 @@ =head1 NAME -vos syncvldb - Verifies VLDB entries for volumes residing at specified site +vos_syncvldb - Verifies VLDB entries for volumes residing at specified site =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_unlock.pod b/doc/man-pages/pod1/vos_unlock.pod index 91d86fd080..47b856f7a3 100644 --- a/doc/man-pages/pod1/vos_unlock.pod +++ b/doc/man-pages/pod1/vos_unlock.pod @@ -1,6 +1,6 @@ =head1 NAME -vos unlock - Unlocks a single VLDB entry +vos_unlock - Unlocks a single VLDB entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_unlockvldb.pod b/doc/man-pages/pod1/vos_unlockvldb.pod index f58249ef8c..5c9f8763f7 100644 --- a/doc/man-pages/pod1/vos_unlockvldb.pod +++ b/doc/man-pages/pod1/vos_unlockvldb.pod @@ -1,6 +1,6 @@ =head1 NAME -vos unlockvldb - Unlocks several locked VLDB entries +vos_unlockvldb - Unlocks several locked VLDB entries =head1 SYNOPSIS diff --git a/doc/man-pages/pod1/vos_zap.pod b/doc/man-pages/pod1/vos_zap.pod index 3ee6ea86a3..7a2ed431f7 100644 --- a/doc/man-pages/pod1/vos_zap.pod +++ b/doc/man-pages/pod1/vos_zap.pod @@ -1,6 +1,6 @@ =head1 NAME -vos zap - Removes a volume from its site without writing to the VLDB +vos_zap - Removes a volume from its site without writing to the VLDB =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_adddump.pod b/doc/man-pages/pod8/backup_adddump.pod index d694b8c194..e9a522a5ef 100644 --- a/doc/man-pages/pod8/backup_adddump.pod +++ b/doc/man-pages/pod8/backup_adddump.pod @@ -1,6 +1,6 @@ =head1 NAME -backup adddump - Defines a dump level in the dump hierarchy +backup_adddump - Defines a dump level in the dump hierarchy =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_addhost.pod b/doc/man-pages/pod8/backup_addhost.pod index f48bab8c48..aa3e26a2f8 100644 --- a/doc/man-pages/pod8/backup_addhost.pod +++ b/doc/man-pages/pod8/backup_addhost.pod @@ -1,6 +1,6 @@ =head1 NAME -backup addhost - Adds a Tape Coordinator entry to the Backup Database +backup_addhost - Adds a Tape Coordinator entry to the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_addvolentry.pod b/doc/man-pages/pod8/backup_addvolentry.pod index 9bbb755385..ccf1d6f3ca 100644 --- a/doc/man-pages/pod8/backup_addvolentry.pod +++ b/doc/man-pages/pod8/backup_addvolentry.pod @@ -1,6 +1,6 @@ =head1 NAME -backup addvolentry - Defines a volume entry in a volume set +backup_addvolentry - Defines a volume entry in a volume set =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_addvolset.pod b/doc/man-pages/pod8/backup_addvolset.pod index 1ff05cf5f8..000aaf201a 100644 --- a/doc/man-pages/pod8/backup_addvolset.pod +++ b/doc/man-pages/pod8/backup_addvolset.pod @@ -1,6 +1,6 @@ =head1 NAME -backup addvolset - Creates a new (empty) volume set +backup_addvolset - Creates a new (empty) volume set =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_apropos.pod b/doc/man-pages/pod8/backup_apropos.pod index f13dd9ce3d..060731449a 100644 --- a/doc/man-pages/pod8/backup_apropos.pod +++ b/doc/man-pages/pod8/backup_apropos.pod @@ -1,6 +1,6 @@ =head1 NAME -backup apropos - Displays each help entry containing a keyword string +backup_apropos - Displays each help entry containing a keyword string =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_dbverify.pod b/doc/man-pages/pod8/backup_dbverify.pod index 53359b911e..0ec5db3c92 100644 --- a/doc/man-pages/pod8/backup_dbverify.pod +++ b/doc/man-pages/pod8/backup_dbverify.pod @@ -1,6 +1,6 @@ =head1 NAME -backup dbverify - Checks the integrity of the Backup Database +backup_dbverify - Checks the integrity of the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_deldump.pod b/doc/man-pages/pod8/backup_deldump.pod index d9de9ee9df..2c9643a65e 100644 --- a/doc/man-pages/pod8/backup_deldump.pod +++ b/doc/man-pages/pod8/backup_deldump.pod @@ -1,6 +1,6 @@ =head1 NAME -backup deldump - Deletes a dump level from the Backup Database +backup_deldump - Deletes a dump level from the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_deletedump.pod b/doc/man-pages/pod8/backup_deletedump.pod index a8688b9c08..adc78e8205 100644 --- a/doc/man-pages/pod8/backup_deletedump.pod +++ b/doc/man-pages/pod8/backup_deletedump.pod @@ -1,6 +1,6 @@ =head1 NAME -backup deletedump - Deletes one or more dump records from the Backup Database +backup_deletedump - Deletes one or more dump records from the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_delhost.pod b/doc/man-pages/pod8/backup_delhost.pod index 55be623be2..fac5dbec86 100644 --- a/doc/man-pages/pod8/backup_delhost.pod +++ b/doc/man-pages/pod8/backup_delhost.pod @@ -1,6 +1,6 @@ =head1 NAME -backup delhost - Deletes a Tape Coordinator entry from the Backup Database +backup_delhost - Deletes a Tape Coordinator entry from the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_delvolentry.pod b/doc/man-pages/pod8/backup_delvolentry.pod index c95b691fb9..cb50628027 100644 --- a/doc/man-pages/pod8/backup_delvolentry.pod +++ b/doc/man-pages/pod8/backup_delvolentry.pod @@ -1,6 +1,6 @@ =head1 NAME -backup delvolentry - Deletes a volume entry from a volume set +backup_delvolentry - Deletes a volume entry from a volume set =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_delvolset.pod b/doc/man-pages/pod8/backup_delvolset.pod index ba273e6e63..50939ff04f 100644 --- a/doc/man-pages/pod8/backup_delvolset.pod +++ b/doc/man-pages/pod8/backup_delvolset.pod @@ -1,6 +1,6 @@ =head1 NAME -backup delvolset - Deletes one or more volume sets from the Backup Database +backup_delvolset - Deletes one or more volume sets from the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_diskrestore.pod b/doc/man-pages/pod8/backup_diskrestore.pod index 205493d35a..30f6413011 100644 --- a/doc/man-pages/pod8/backup_diskrestore.pod +++ b/doc/man-pages/pod8/backup_diskrestore.pod @@ -1,6 +1,6 @@ =head1 NAME -backup diskrestore - Restores the entire contents of a partition +backup_diskrestore - Restores the entire contents of a partition =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_dump.pod b/doc/man-pages/pod8/backup_dump.pod index b761f29e15..aa1c95261c 100644 --- a/doc/man-pages/pod8/backup_dump.pod +++ b/doc/man-pages/pod8/backup_dump.pod @@ -1,6 +1,6 @@ =head1 NAME -backup dump - Creates a dump (dumps a volume set at a particular dump level) +backup_dump - Creates a dump (dumps a volume set at a particular dump level) =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_dumpinfo.pod b/doc/man-pages/pod8/backup_dumpinfo.pod index 36aba68a0e..ee12d16c56 100644 --- a/doc/man-pages/pod8/backup_dumpinfo.pod +++ b/doc/man-pages/pod8/backup_dumpinfo.pod @@ -1,6 +1,6 @@ =head1 NAME -backup dumpinfo - Displays a dump record from the Backup Database +backup_dumpinfo - Displays a dump record from the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_help.pod b/doc/man-pages/pod8/backup_help.pod index 081a29da23..58e18de687 100644 --- a/doc/man-pages/pod8/backup_help.pod +++ b/doc/man-pages/pod8/backup_help.pod @@ -1,6 +1,6 @@ =head1 NAME -backup help - Displays help for backup commands +backup_help - Displays help for backup commands =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_interactive.pod b/doc/man-pages/pod8/backup_interactive.pod index 44b4db5ea4..16ee3c0216 100644 --- a/doc/man-pages/pod8/backup_interactive.pod +++ b/doc/man-pages/pod8/backup_interactive.pod @@ -1,6 +1,6 @@ =head1 NAME -backup interactive - Enters interactive mode +backup_interactive - Enters interactive mode =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_jobs.pod b/doc/man-pages/pod8/backup_jobs.pod index 77adb3d2a8..89e5a17f74 100644 --- a/doc/man-pages/pod8/backup_jobs.pod +++ b/doc/man-pages/pod8/backup_jobs.pod @@ -1,6 +1,6 @@ =head1 NAME -backup jobs - Lists pending and running operations in interactive mode +backup_jobs - Lists pending and running operations in interactive mode =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_kill.pod b/doc/man-pages/pod8/backup_kill.pod index 08ae8f3a42..8cc1effc6a 100644 --- a/doc/man-pages/pod8/backup_kill.pod +++ b/doc/man-pages/pod8/backup_kill.pod @@ -1,6 +1,6 @@ =head1 NAME -backup kill - Terminates a pending or running operation +backup_kill - Terminates a pending or running operation =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_labeltape.pod b/doc/man-pages/pod8/backup_labeltape.pod index bf06ffe946..8e9655d6be 100644 --- a/doc/man-pages/pod8/backup_labeltape.pod +++ b/doc/man-pages/pod8/backup_labeltape.pod @@ -1,6 +1,6 @@ =head1 NAME -backup labeltape - Creates the magnetic label on a tape +backup_labeltape - Creates the magnetic label on a tape =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_listdumps.pod b/doc/man-pages/pod8/backup_listdumps.pod index c7f7aa867d..508b04327b 100644 --- a/doc/man-pages/pod8/backup_listdumps.pod +++ b/doc/man-pages/pod8/backup_listdumps.pod @@ -1,6 +1,6 @@ =head1 NAME -backup listdumps - Displays the dump hierarchy from the Backup Database +backup_listdumps - Displays the dump hierarchy from the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_listhosts.pod b/doc/man-pages/pod8/backup_listhosts.pod index c1213af2be..103b288521 100644 --- a/doc/man-pages/pod8/backup_listhosts.pod +++ b/doc/man-pages/pod8/backup_listhosts.pod @@ -1,6 +1,6 @@ =head1 NAME -backup listhosts - Lists Tape Coordinators registered in the Backup Database +backup_listhosts - Lists Tape Coordinators registered in the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_listvolsets.pod b/doc/man-pages/pod8/backup_listvolsets.pod index 92ae5fc940..ffbd288a46 100644 --- a/doc/man-pages/pod8/backup_listvolsets.pod +++ b/doc/man-pages/pod8/backup_listvolsets.pod @@ -1,6 +1,6 @@ =head1 NAME -backup listvolsets - Lists volume set entries from the Backup Database +backup_listvolsets - Lists volume set entries from the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_quit.pod b/doc/man-pages/pod8/backup_quit.pod index e0149426b5..1c356f902a 100644 --- a/doc/man-pages/pod8/backup_quit.pod +++ b/doc/man-pages/pod8/backup_quit.pod @@ -1,6 +1,6 @@ =head1 NAME -backup quit - Leaves interactive mode +backup_quit - Leaves interactive mode =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_readlabel.pod b/doc/man-pages/pod8/backup_readlabel.pod index 55ba261fe1..a317c6b7d6 100644 --- a/doc/man-pages/pod8/backup_readlabel.pod +++ b/doc/man-pages/pod8/backup_readlabel.pod @@ -1,6 +1,6 @@ =head1 NAME -backup readlabel - Reads and displays a tape's label +backup_readlabel - Reads and displays a tape's label =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_restoredb.pod b/doc/man-pages/pod8/backup_restoredb.pod index ba941c6f15..68a2fa2e4f 100644 --- a/doc/man-pages/pod8/backup_restoredb.pod +++ b/doc/man-pages/pod8/backup_restoredb.pod @@ -1,6 +1,6 @@ =head1 NAME -backup restoredb - Restores a saved copy of the Backup Database +backup_restoredb - Restores a saved copy of the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_savedb.pod b/doc/man-pages/pod8/backup_savedb.pod index 6c3d3e03bb..15ee2215f1 100644 --- a/doc/man-pages/pod8/backup_savedb.pod +++ b/doc/man-pages/pod8/backup_savedb.pod @@ -1,6 +1,6 @@ =head1 NAME -backup savedb - Creates a saved copy of the Backup Database +backup_savedb - Creates a saved copy of the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_scantape.pod b/doc/man-pages/pod8/backup_scantape.pod index ee99d1bb8d..a5e1e54edb 100644 --- a/doc/man-pages/pod8/backup_scantape.pod +++ b/doc/man-pages/pod8/backup_scantape.pod @@ -1,6 +1,6 @@ =head1 NAME -backup scantape - Extracts dump information from a tape +backup_scantape - Extracts dump information from a tape =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_setexp.pod b/doc/man-pages/pod8/backup_setexp.pod index fc06956015..7f741419e6 100644 --- a/doc/man-pages/pod8/backup_setexp.pod +++ b/doc/man-pages/pod8/backup_setexp.pod @@ -1,6 +1,6 @@ =head1 NAME -backup setexp - Sets the expiration date for existing dump levels. +backup_setexp - Sets the expiration date for existing dump levels. =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_status.pod b/doc/man-pages/pod8/backup_status.pod index 9ae180eba3..ba8a5ee5e0 100644 --- a/doc/man-pages/pod8/backup_status.pod +++ b/doc/man-pages/pod8/backup_status.pod @@ -1,6 +1,6 @@ =head1 NAME -backup status - Reports a Tape Coordinator's status +backup_status - Reports a Tape Coordinator's status =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_volinfo.pod b/doc/man-pages/pod8/backup_volinfo.pod index c3ac9d3921..d1a55e8dfc 100644 --- a/doc/man-pages/pod8/backup_volinfo.pod +++ b/doc/man-pages/pod8/backup_volinfo.pod @@ -1,6 +1,6 @@ =head1 NAME -backup volinfo - Displays a volume's dump history from the Backup Database +backup_volinfo - Displays a volume's dump history from the Backup Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_volrestore.pod b/doc/man-pages/pod8/backup_volrestore.pod index 4e27a85336..e52896b3ba 100644 --- a/doc/man-pages/pod8/backup_volrestore.pod +++ b/doc/man-pages/pod8/backup_volrestore.pod @@ -1,6 +1,6 @@ =head1 NAME -backup volrestore - Restores one or more volumes +backup_volrestore - Restores one or more volumes =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/backup_volsetrestore.pod b/doc/man-pages/pod8/backup_volsetrestore.pod index f4afd266a2..fcac347401 100644 --- a/doc/man-pages/pod8/backup_volsetrestore.pod +++ b/doc/man-pages/pod8/backup_volsetrestore.pod @@ -1,6 +1,6 @@ =head1 NAME -backup volsetrestore - Restores all volumes in a volume set +backup_volsetrestore - Restores all volumes in a volume set =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_addhost.pod b/doc/man-pages/pod8/bos_addhost.pod index f5888f52c1..00c540ce94 100644 --- a/doc/man-pages/pod8/bos_addhost.pod +++ b/doc/man-pages/pod8/bos_addhost.pod @@ -1,6 +1,6 @@ =head1 NAME -bos addhost - Adds a database server machine to the CellServDB file +bos_addhost - Adds a database server machine to the CellServDB file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_addkey.pod b/doc/man-pages/pod8/bos_addkey.pod index 6bb70e9253..8a066a52ea 100644 --- a/doc/man-pages/pod8/bos_addkey.pod +++ b/doc/man-pages/pod8/bos_addkey.pod @@ -1,6 +1,6 @@ =head1 NAME -bos addkey - Adds a new server encryption key to the KeyFile file +bos_addkey - Adds a new server encryption key to the KeyFile file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_adduser.pod b/doc/man-pages/pod8/bos_adduser.pod index 4ccaab01fb..148ee8d320 100644 --- a/doc/man-pages/pod8/bos_adduser.pod +++ b/doc/man-pages/pod8/bos_adduser.pod @@ -1,6 +1,6 @@ =head1 NAME -bos adduser - Adds a privileged user to the UserList file +bos_adduser - Adds a privileged user to the UserList file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_apropos.pod b/doc/man-pages/pod8/bos_apropos.pod index 916a3749de..cea38e355e 100644 --- a/doc/man-pages/pod8/bos_apropos.pod +++ b/doc/man-pages/pod8/bos_apropos.pod @@ -1,6 +1,6 @@ =head1 NAME -bos apropos - Displays each help entry containing a keyword string +bos_apropos - Displays each help entry containing a keyword string =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_create.pod b/doc/man-pages/pod8/bos_create.pod index b6d55f3b7c..4c3cc5c125 100644 --- a/doc/man-pages/pod8/bos_create.pod +++ b/doc/man-pages/pod8/bos_create.pod @@ -1,6 +1,6 @@ =head1 NAME -bos create - Defines a new process in the BosConfig file and starts it +bos_create - Defines a new process in the BosConfig file and starts it =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_delete.pod b/doc/man-pages/pod8/bos_delete.pod index b73bcb1e3a..9b4d558182 100644 --- a/doc/man-pages/pod8/bos_delete.pod +++ b/doc/man-pages/pod8/bos_delete.pod @@ -1,6 +1,6 @@ =head1 NAME -bos delete - Deletes a server process from the BosConfig file +bos_delete - Deletes a server process from the BosConfig file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_exec.pod b/doc/man-pages/pod8/bos_exec.pod index 0cb71941c3..4cdbe4e63b 100644 --- a/doc/man-pages/pod8/bos_exec.pod +++ b/doc/man-pages/pod8/bos_exec.pod @@ -1,6 +1,6 @@ =head1 NAME -bos exec - Executes a command on a remote server machine +bos_exec - Executes a command on a remote server machine =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_getdate.pod b/doc/man-pages/pod8/bos_getdate.pod index d33398e037..f451778c81 100644 --- a/doc/man-pages/pod8/bos_getdate.pod +++ b/doc/man-pages/pod8/bos_getdate.pod @@ -1,6 +1,6 @@ =head1 NAME -bos getdate - Displays the time stamps on an AFS binary file +bos_getdate - Displays the time stamps on an AFS binary file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_getlog.pod b/doc/man-pages/pod8/bos_getlog.pod index bc986e9b63..75d52eb3ae 100644 --- a/doc/man-pages/pod8/bos_getlog.pod +++ b/doc/man-pages/pod8/bos_getlog.pod @@ -1,6 +1,6 @@ =head1 NAME -bos getlog - Prints a server process's log file +bos_getlog - Prints a server process's log file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_getrestart.pod b/doc/man-pages/pod8/bos_getrestart.pod index 51ff8115ac..11de5daa60 100644 --- a/doc/man-pages/pod8/bos_getrestart.pod +++ b/doc/man-pages/pod8/bos_getrestart.pod @@ -1,6 +1,6 @@ =head1 NAME -bos getrestart - Displays the automatic restart times for server processes +bos_getrestart - Displays the automatic restart times for server processes =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_help.pod b/doc/man-pages/pod8/bos_help.pod index 74478c253a..a338c2b447 100644 --- a/doc/man-pages/pod8/bos_help.pod +++ b/doc/man-pages/pod8/bos_help.pod @@ -1,6 +1,6 @@ =head1 NAME -bos help - Displays help for bos commands +bos_help - Displays help for bos commands =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_install.pod b/doc/man-pages/pod8/bos_install.pod index 08c16d52ad..3b1307b001 100644 --- a/doc/man-pages/pod8/bos_install.pod +++ b/doc/man-pages/pod8/bos_install.pod @@ -1,6 +1,6 @@ =head1 NAME -bos install - Installs a new version of a binary file +bos_install - Installs a new version of a binary file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_listhosts.pod b/doc/man-pages/pod8/bos_listhosts.pod index f4d3f06bdd..9861707425 100644 --- a/doc/man-pages/pod8/bos_listhosts.pod +++ b/doc/man-pages/pod8/bos_listhosts.pod @@ -1,6 +1,6 @@ =head1 NAME -bos listhosts - Displays the contents of the CellServDB file +bos_listhosts - Displays the contents of the CellServDB file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_listkeys.pod b/doc/man-pages/pod8/bos_listkeys.pod index ecb0bf2c8c..11ff9015d4 100644 --- a/doc/man-pages/pod8/bos_listkeys.pod +++ b/doc/man-pages/pod8/bos_listkeys.pod @@ -1,6 +1,6 @@ =head1 NAME -bos listkeys - Displays the server encryption keys from the KeyFile file +bos_listkeys - Displays the server encryption keys from the KeyFile file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_listusers.pod b/doc/man-pages/pod8/bos_listusers.pod index 6b0c1f9f8f..8f3796851a 100644 --- a/doc/man-pages/pod8/bos_listusers.pod +++ b/doc/man-pages/pod8/bos_listusers.pod @@ -1,6 +1,6 @@ =head1 NAME -bos listusers - Lists the privileged users from the UserList file +bos_listusers - Lists the privileged users from the UserList file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_prune.pod b/doc/man-pages/pod8/bos_prune.pod index 0f59596244..b85f96f06c 100644 --- a/doc/man-pages/pod8/bos_prune.pod +++ b/doc/man-pages/pod8/bos_prune.pod @@ -1,6 +1,6 @@ =head1 NAME -bos prune - Removes obsolete files from /usr/afs/bin and /usr/afs/logs +bos_prune - Removes obsolete files from /usr/afs/bin and /usr/afs/logs =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_removehost.pod b/doc/man-pages/pod8/bos_removehost.pod index 1cde179830..eb1410d539 100644 --- a/doc/man-pages/pod8/bos_removehost.pod +++ b/doc/man-pages/pod8/bos_removehost.pod @@ -1,6 +1,6 @@ =head1 NAME -bos removehost - Removes a database server machine from the CellServDB file +bos_removehost - Removes a database server machine from the CellServDB file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_removekey.pod b/doc/man-pages/pod8/bos_removekey.pod index bf08926d45..01e498f5b6 100644 --- a/doc/man-pages/pod8/bos_removekey.pod +++ b/doc/man-pages/pod8/bos_removekey.pod @@ -1,6 +1,6 @@ =head1 NAME -bos removekey - Removes a server encryption key from the KeyFile file +bos_removekey - Removes a server encryption key from the KeyFile file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_removeuser.pod b/doc/man-pages/pod8/bos_removeuser.pod index b3f94414d8..08d9bb277c 100644 --- a/doc/man-pages/pod8/bos_removeuser.pod +++ b/doc/man-pages/pod8/bos_removeuser.pod @@ -1,6 +1,6 @@ =head1 NAME -bos removeuser - Removes a privileged user from the UserList file +bos_removeuser - Removes a privileged user from the UserList file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_restart.pod b/doc/man-pages/pod8/bos_restart.pod index 4dc17b1667..24e66a9d7a 100644 --- a/doc/man-pages/pod8/bos_restart.pod +++ b/doc/man-pages/pod8/bos_restart.pod @@ -1,6 +1,6 @@ =head1 NAME -bos restart - Restarts a server process +bos_restart - Restarts a server process =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_salvage.pod b/doc/man-pages/pod8/bos_salvage.pod index 042dc9b9ef..c9ae4e85f2 100644 --- a/doc/man-pages/pod8/bos_salvage.pod +++ b/doc/man-pages/pod8/bos_salvage.pod @@ -1,6 +1,6 @@ =head1 NAME -bos salvage - Restores internal consistency to a file system or volume +bos_salvage - Restores internal consistency to a file system or volume =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_setauth.pod b/doc/man-pages/pod8/bos_setauth.pod index 6f89b7859e..4ccd9623bc 100644 --- a/doc/man-pages/pod8/bos_setauth.pod +++ b/doc/man-pages/pod8/bos_setauth.pod @@ -1,6 +1,6 @@ =head1 NAME -bos setauth - Sets authorization checking requirements for all server processes +bos_setauth - Sets authorization checking requirements for all server processes =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_setcellname.pod b/doc/man-pages/pod8/bos_setcellname.pod index 6f727dafa9..6d1faefdda 100644 --- a/doc/man-pages/pod8/bos_setcellname.pod +++ b/doc/man-pages/pod8/bos_setcellname.pod @@ -1,6 +1,6 @@ =head1 NAME -bos setcellname - Sets the cell's name in ThisCell and CellServDB +bos_setcellname - Sets the cell's name in ThisCell and CellServDB =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_setrestart.pod b/doc/man-pages/pod8/bos_setrestart.pod index 6110fe8f55..27c18e9e3e 100644 --- a/doc/man-pages/pod8/bos_setrestart.pod +++ b/doc/man-pages/pod8/bos_setrestart.pod @@ -1,6 +1,6 @@ =head1 NAME -bos setrestart - Sets when the BOS Server restarts processes +bos_setrestart - Sets when the BOS Server restarts processes =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_shutdown.pod b/doc/man-pages/pod8/bos_shutdown.pod index 9f30af9ef2..7ccfd6faeb 100644 --- a/doc/man-pages/pod8/bos_shutdown.pod +++ b/doc/man-pages/pod8/bos_shutdown.pod @@ -1,6 +1,6 @@ =head1 NAME -bos shutdown - Stops a process without changing its status flag +bos_shutdown - Stops a process without changing its status flag =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_start.pod b/doc/man-pages/pod8/bos_start.pod index fce2944d83..4be521b52f 100644 --- a/doc/man-pages/pod8/bos_start.pod +++ b/doc/man-pages/pod8/bos_start.pod @@ -1,6 +1,6 @@ =head1 NAME -bos start - Starts a process after setting its status flag +bos_start - Starts a process after setting its status flag =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_startup.pod b/doc/man-pages/pod8/bos_startup.pod index ac10c75b70..7e7a16cf00 100644 --- a/doc/man-pages/pod8/bos_startup.pod +++ b/doc/man-pages/pod8/bos_startup.pod @@ -1,6 +1,6 @@ =head1 NAME -bos startup - Starts a process without changing its status flag +bos_startup - Starts a process without changing its status flag =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_status.pod b/doc/man-pages/pod8/bos_status.pod index 018d58939b..da9088d26e 100644 --- a/doc/man-pages/pod8/bos_status.pod +++ b/doc/man-pages/pod8/bos_status.pod @@ -1,6 +1,6 @@ =head1 NAME -bos status - Displays the status of server processes +bos_status - Displays the status of server processes =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_stop.pod b/doc/man-pages/pod8/bos_stop.pod index da196f22eb..354603c52a 100644 --- a/doc/man-pages/pod8/bos_stop.pod +++ b/doc/man-pages/pod8/bos_stop.pod @@ -1,6 +1,6 @@ =head1 NAME -bos stop - Stops a process after changing its status flag +bos_stop - Stops a process after changing its status flag =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/bos_uninstall.pod b/doc/man-pages/pod8/bos_uninstall.pod index 58ed8502dd..fe20ba5003 100644 --- a/doc/man-pages/pod8/bos_uninstall.pod +++ b/doc/man-pages/pod8/bos_uninstall.pod @@ -1,6 +1,6 @@ =head1 NAME -bos uninstall - Reverts to the former version of a process's binary file +bos_uninstall - Reverts to the former version of a process's binary file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/fileserver.pod b/doc/man-pages/pod8/fileserver.pod index 5b82544a67..c29b07b47a 100644 --- a/doc/man-pages/pod8/fileserver.pod +++ b/doc/man-pages/pod8/fileserver.pod @@ -7,8 +7,7 @@ fileserver - Initializes the File Server component of the fs process =for html
-B S<<< [B<-auditlog> >] >>> - S<<< [B<-d> >] >>> +B S<<< [B<-d> >] >>> S<<< [B<-p> >] >>> S<<< [B<-spare> >] >>> S<<< [B<-pctspare> >] >>> S<<< [B<-b> >] >>> @@ -17,7 +16,7 @@ B S<<< [B<-auditlog> >] >>> S<<< [B<-cb> >] >>> [B<-banner>] [B<-novbc>] S<<< [B<-implicit> >] >>> [B<-readonly>] S<<< [B<-hr> >] >>> - [B<-busyat> n >>>] + S<<< [B<-busyat> n >>>] >>> [B<-nobusy>] S<<< [B<-rxpck> >] >>> [B<-rxdbg>] [B<-rxdbge>] S<<< [B<-rxmaxmtu> >] >>> S<<< [B<-rxbind> >] >>> @@ -48,9 +47,9 @@ file server machine as the local superuser C. The File Server creates the F log file as it initializes, if the file does not already exist. It does not write a -detailed trace by default, but use the B<-d> option to increase the amount -of detail. Use the B command to display the contents of the -log file. +detailed trace by default, but the B<-d> option may be used to +increase the amount of detail. Use the B command to +display the contents of the log file. The command's arguments enable the administrator to control many aspects of the File Server's performance, as detailed in L. By default @@ -68,7 +67,7 @@ machine sizes. The maximum number of lightweight processes (LWPs) the File Server uses to handle requests for data; corresponds to the B<-p> argument. The File -Server always uses a minimum of 32 KB for these processes. +Server always uses a minimum of 32 KB of memory for these processes. =item * @@ -168,6 +167,16 @@ the Protection Server every two hours to recompute host CPSs, implying that it can take that long for changed group memberships to become effective. To change this frequency, use the B<-hr> argument. +The File Server stores volumes in partitions. A partition is a +filesystem or directory on the server machine that is named C +or C where XX is "a" through "z" or "aa" though "zz". The +File Server expects that the /vicepXX directories are each on a +dedicated filesystem. The File Server will only use a /vicepXX if it's +a mountpoint for another filesystem, unless the file +C exists. The data in the partition is a +special format that can only be access using OpenAFS commands or an +OpenAFS client. + The File Server generates the following message when a partition is nearly full: @@ -178,12 +187,12 @@ suites. Provide the command name and all option names in full. =head1 CAUTIONS -Do not use the B<-k> and -w arguments, which are intended for use by the -AFS Development group only. Changing them from their default values can -result in unpredictable File Server behavior. In any case, on many -operating systems the File Server uses native threads rather than the LWP -threads, so using the B<-k> argument to set the number of LWP threads has -no effect. +Do not use the B<-k> and B<-w> arguments, which are intended for use +by the AFS Development group only. Changing them from their default +values can result in unpredictable File Server behavior. In any case, +on many operating systems the File Server uses native threads rather +than the LWP threads, so using the B<-k> argument to set the number of +LWP threads has no effect. Do not specify both the B<-spare> and B<-pctspare> arguments. Doing so causes the File Server to exit, leaving an error message in the @@ -398,10 +407,160 @@ line: -cmd "/usr/afs/bin/fileserver -pctspare 10 \ -L" /usr/afs/bin/volserver /usr/afs/bin/salvager + +=head1 TROUBLESHOOTING + +Sending process signals to the File Server Process can change its +behavior in the following ways: + + Process Signal OS Result + --------------------------------------------------------------------- + + File Server XCPU Unix Prints a list of client IP + Addresses. + + File Server USR2 Windows Prints a list of client IP + Addresses. + + File Server POLL HPUX Prints a list of client IP + Addresses. + + Any server TSTP Any Increases Debug level by a power + of 5 -- 1,5,25,125, etc. + This has the same effect as the + -debug XXX command-line option. + + Any Server HUP Any Resets Debug level to 0 + + File Server TERM Any Run minor instrumentation over + the list of descriptors. + + Other Servers TERM Any Causes the process to quit. + + File Server QUIT Any Causes the File Server to Quit. + Bos Server knows this. + +The basic metric of whether an AFS file server is doing well is the number +of connections waiting for a thread, +which can be found by running the following command: + + % rxdebug | grep waiting_for | wc -l + +Each line returned by C that contains the text "waiting_for" +represents a connection that's waiting for a file server thread. + +If the blocked connection count is ever above 0, the server is having +problems replying to clients in a timely fashion. If it gets above 10, +roughly, there will be noticable slowness by the user. The total number of +connections is a mostly irrelevant number that goes essentially +monotonically for as long as the server has been running and then goes back +down to zero when it's restarted. + +The most common cause of blocked connections rising on a server is some +process somewhere performing an abnormal number of accesses to that server +and its volumes. If multiple servers have a blocked connection count, the +most likely explanation is that there is a volume replicated between those +servers that is absorbing an abnormally high access rate. + +To get an access count on all the volumes on a server, run: + + % vos listvol -long + +and save the output in a file. The results will look like a bunch of B output for each volume on the server. Look for lines like: + + 40065 accesses in the past day (i.e., vnode references) + +and look for volumes with an abnormally high number of accesses. Anything +over 10,000 is fairly high, but some volumes like root.cell and other +volumes close to the root of the cell will have that many hits routinely. +Anything over 100,000 is generally abnormally high. The count resets about +once a day. + +Another approach that can be used to narrow the possibilities for a +replicated volume, when multiple servers are having trouble, is to find all +replicated volumes for that server. Run: + + % vos listvldb -server + +where is one of the servers having problems to refresh the VLDB +cache, and then run: + + % vos listvldb -server -part + +to get a list of all volumes on that server and partition, including every +other server with replicas. + +Once the volume causing the problem has been identified, the best way to +deal with the problem is to move that volume to another server with a low +load or to stop any runaway programs that are accessing that volume +unnecessarily. Often the volume will be enough information to tell what's +going on. + +If you still need additional information about who's hitting that server, +sometimes you can guess at that information from the failed callbacks in the +F log in F on the server, or from the output of: + + % /usr/afsws/etc/rxdebug -rxstats + +but the best way is to turn on debugging output from the file server. +(Warning: This generates a lot of output into FileLog on the AFS server.) +To do this, log on to the AFS server, find the PID of the fileserver +process, and do: + + kill -TSTP + +where is the PID of the file server process. This will raise the +debugging level so that you'll start seeing what people are actually doing +on the server. You can do this up to three more times to get even more +output if needed. To reset the debugging level back to normal, use (The +following command will NOT terminate the file server): + + kill -HUP + +The debugging setting on the File Server should be reset back to normal when +debugging is no longer needed. Otherwise, the AFS server may well fill its +disks with debugging output. + +The lines of the debugging output that are most useful for debugging load +problems are: + + SAFS_FetchStatus, Fid = 2003828163.77154.82248, Host 171.64.15.76 + SRXAFS_FetchData, Fid = 2003828163.77154.82248 + +(The example above is partly truncated to highlight the interesting +information). The Fid identifies the volume and inode within the volume; +the volume is the first long number. So, for example, this was: + + % vos examine 2003828163 + pubsw.matlab61 2003828163 RW 1040060 K On-line + afssvr5.Stanford.EDU /vicepa + RWrite 2003828163 ROnly 2003828164 Backup 2003828165 + MaxQuota 3000000 K + Creation Mon Aug 6 16:40:55 2001 + Last Update Tue Jul 30 19:00:25 2002 + 86181 accesses in the past day (i.e., vnode references) + + RWrite: 2003828163 ROnly: 2003828164 Backup: 2003828165 + number of sites -> 3 + server afssvr5.Stanford.EDU partition /vicepa RW Site + server afssvr11.Stanford.EDU partition /vicepd RO Site + server afssvr5.Stanford.EDU partition /vicepa RO Site + +and from the Host information one can tell what system is accessing that +volume. + +Note that the output of L also includes the access count, so +once the problem has been identified, vos examine can be used to see if the +access count is still increasing. Also remember that you can run vos +examine on the read-only replica (e.g., pubsw.matlab61.readonly) to see the +access counts on the read-only replica on all of the servers that it's +located on. + =head1 PRIVILEGE REQUIRED The issuer must be logged in as the superuser C on a file server -machine to issue the command at a command shell prompt. It is conventional +machine to issue the command at a command shell prompt. It is conventional instead to create and start the process by issuing the B command. @@ -413,7 +572,8 @@ L, L, L, L, -L +L, +L =head1 COPYRIGHT diff --git a/doc/man-pages/pod8/fstrace_apropos.pod b/doc/man-pages/pod8/fstrace_apropos.pod index 777d94b464..f24c8c3785 100644 --- a/doc/man-pages/pod8/fstrace_apropos.pod +++ b/doc/man-pages/pod8/fstrace_apropos.pod @@ -1,6 +1,6 @@ =head1 NAME -fstrace apropos - Displays each help entry containing a keyword string +fstrace_apropos - Displays each help entry containing a keyword string =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/fstrace_clear.pod b/doc/man-pages/pod8/fstrace_clear.pod index b265d39f20..7de9e6bac2 100644 --- a/doc/man-pages/pod8/fstrace_clear.pod +++ b/doc/man-pages/pod8/fstrace_clear.pod @@ -1,6 +1,6 @@ =head1 NAME -fstrace clear - Clears the trace log +fstrace_clear - Clears the trace log =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/fstrace_dump.pod b/doc/man-pages/pod8/fstrace_dump.pod index 59da7a3873..81d659d8b8 100644 --- a/doc/man-pages/pod8/fstrace_dump.pod +++ b/doc/man-pages/pod8/fstrace_dump.pod @@ -1,6 +1,6 @@ =head1 NAME -fstrace dump - Dumps a trace log +fstrace_dump - Dumps a trace log =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/fstrace_help.pod b/doc/man-pages/pod8/fstrace_help.pod index 7c3732fcae..4a5912a373 100644 --- a/doc/man-pages/pod8/fstrace_help.pod +++ b/doc/man-pages/pod8/fstrace_help.pod @@ -1,6 +1,6 @@ =head1 NAME -fstrace help - Displays help for fstrace commands +fstrace_help - Displays help for fstrace commands =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/fstrace_lslog.pod b/doc/man-pages/pod8/fstrace_lslog.pod index 108e01974d..41289cff89 100644 --- a/doc/man-pages/pod8/fstrace_lslog.pod +++ b/doc/man-pages/pod8/fstrace_lslog.pod @@ -1,6 +1,6 @@ =head1 NAME -fstrace lslog - Displays information about a log +fstrace_lslog - Displays information about a log =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/fstrace_lsset.pod b/doc/man-pages/pod8/fstrace_lsset.pod index 34ed0be1a5..4d822acd14 100644 --- a/doc/man-pages/pod8/fstrace_lsset.pod +++ b/doc/man-pages/pod8/fstrace_lsset.pod @@ -1,6 +1,6 @@ =head1 NAME -fstrace lsset - Reports the status of an event set +fstrace_lsset - Reports the status of an event set =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/fstrace_setlog.pod b/doc/man-pages/pod8/fstrace_setlog.pod index ccf9dce6d7..c82962d61f 100644 --- a/doc/man-pages/pod8/fstrace_setlog.pod +++ b/doc/man-pages/pod8/fstrace_setlog.pod @@ -1,6 +1,6 @@ =head1 NAME -fstrace setlog - Sets the size of a trace log +fstrace_setlog - Sets the size of a trace log =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/fstrace_setset.pod b/doc/man-pages/pod8/fstrace_setset.pod index dcb47df495..808e76693d 100644 --- a/doc/man-pages/pod8/fstrace_setset.pod +++ b/doc/man-pages/pod8/fstrace_setset.pod @@ -1,6 +1,6 @@ =head1 NAME -fstrace setset - Sets the status of an event set +fstrace_setset - Sets the status of an event set =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_apropos.pod b/doc/man-pages/pod8/kas_apropos.pod index 27ced0fe27..3a3a1600e8 100644 --- a/doc/man-pages/pod8/kas_apropos.pod +++ b/doc/man-pages/pod8/kas_apropos.pod @@ -1,6 +1,6 @@ =head1 NAME -kas apropos - Displays each help entry containing a keyword string +kas_apropos - Displays each help entry containing a keyword string =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_create.pod b/doc/man-pages/pod8/kas_create.pod index e567eb35d5..4f7491d515 100644 --- a/doc/man-pages/pod8/kas_create.pod +++ b/doc/man-pages/pod8/kas_create.pod @@ -1,6 +1,6 @@ =head1 NAME -kas create - Creates an entry in the Authentication Database +kas_create - Creates an entry in the Authentication Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_delete.pod b/doc/man-pages/pod8/kas_delete.pod index f4288005cf..9596d38605 100644 --- a/doc/man-pages/pod8/kas_delete.pod +++ b/doc/man-pages/pod8/kas_delete.pod @@ -1,6 +1,6 @@ =head1 NAME -kas delete - Deletes an entry from the Authentication Database +kas_delete - Deletes an entry from the Authentication Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_examine.pod b/doc/man-pages/pod8/kas_examine.pod index 1f09c7491b..ea62738c4b 100644 --- a/doc/man-pages/pod8/kas_examine.pod +++ b/doc/man-pages/pod8/kas_examine.pod @@ -1,6 +1,6 @@ =head1 NAME -kas examine - Displays information from an Authentication Database entry +kas_examine - Displays information from an Authentication Database entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_forgetticket.pod b/doc/man-pages/pod8/kas_forgetticket.pod index 6fe84065ec..d9851290fb 100644 --- a/doc/man-pages/pod8/kas_forgetticket.pod +++ b/doc/man-pages/pod8/kas_forgetticket.pod @@ -1,6 +1,6 @@ =head1 NAME -kas forgetticket - Discards all tickets for the issuer +kas_forgetticket - Discards all tickets for the issuer =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_help.pod b/doc/man-pages/pod8/kas_help.pod index 9e4f0cf0ca..a65a6694ea 100644 --- a/doc/man-pages/pod8/kas_help.pod +++ b/doc/man-pages/pod8/kas_help.pod @@ -1,6 +1,6 @@ =head1 NAME -kas help - Displays help for kas commands +kas_help - Displays help for kas commands =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_interactive.pod b/doc/man-pages/pod8/kas_interactive.pod index 8ea2031426..bf7371564f 100644 --- a/doc/man-pages/pod8/kas_interactive.pod +++ b/doc/man-pages/pod8/kas_interactive.pod @@ -1,6 +1,6 @@ =head1 NAME -kas interactive - Enters interactive mode +kas_interactive - Enters interactive mode =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_list.pod b/doc/man-pages/pod8/kas_list.pod index 088993eb7e..59d21ff5bd 100644 --- a/doc/man-pages/pod8/kas_list.pod +++ b/doc/man-pages/pod8/kas_list.pod @@ -1,6 +1,6 @@ =head1 NAME -kas list - Displays all entries in the Authentication Database +kas_list - Displays all entries in the Authentication Database =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_listtickets.pod b/doc/man-pages/pod8/kas_listtickets.pod index 126b3d309e..8661c188f8 100644 --- a/doc/man-pages/pod8/kas_listtickets.pod +++ b/doc/man-pages/pod8/kas_listtickets.pod @@ -1,6 +1,6 @@ =head1 NAME -kas listtickets - Displays all of the issuer's tickets (tokens) +kas_listtickets - Displays all of the issuer's tickets (tokens) =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_noauthentication.pod b/doc/man-pages/pod8/kas_noauthentication.pod index f55f5f84b0..5b34d53b0d 100644 --- a/doc/man-pages/pod8/kas_noauthentication.pod +++ b/doc/man-pages/pod8/kas_noauthentication.pod @@ -1,6 +1,6 @@ =head1 NAME -kas noauthentication - Discards an authenticated identity in interactive mode +kas_noauthentication - Discards an authenticated identity in interactive mode =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_quit.pod b/doc/man-pages/pod8/kas_quit.pod index 3ecd0cedff..ee8eec1137 100644 --- a/doc/man-pages/pod8/kas_quit.pod +++ b/doc/man-pages/pod8/kas_quit.pod @@ -1,6 +1,6 @@ =head1 NAME -kas quit - Leaves interactive mode +kas_quit - Leaves interactive mode =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_setfields.pod b/doc/man-pages/pod8/kas_setfields.pod index cb45b8c7b0..2171a7b569 100644 --- a/doc/man-pages/pod8/kas_setfields.pod +++ b/doc/man-pages/pod8/kas_setfields.pod @@ -1,6 +1,6 @@ =head1 NAME -kas setfields - Sets fields in an Authentication Database entry +kas_setfields - Sets fields in an Authentication Database entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_setpassword.pod b/doc/man-pages/pod8/kas_setpassword.pod index 897424dba1..62839d1127 100644 --- a/doc/man-pages/pod8/kas_setpassword.pod +++ b/doc/man-pages/pod8/kas_setpassword.pod @@ -1,6 +1,6 @@ =head1 NAME -kas setpassword - Changes the key field in an Authentication Database entry +kas_setpassword - Changes the key field in an Authentication Database entry =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_statistics.pod b/doc/man-pages/pod8/kas_statistics.pod index 389429c31f..fff0a6da63 100644 --- a/doc/man-pages/pod8/kas_statistics.pod +++ b/doc/man-pages/pod8/kas_statistics.pod @@ -1,6 +1,6 @@ =head1 NAME -kas statistics - Displays statistics from an Authentication Server process +kas_statistics - Displays statistics from an Authentication Server process =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_stringtokey.pod b/doc/man-pages/pod8/kas_stringtokey.pod index 0f5d00bbae..f9bb7fe2f1 100644 --- a/doc/man-pages/pod8/kas_stringtokey.pod +++ b/doc/man-pages/pod8/kas_stringtokey.pod @@ -1,6 +1,6 @@ =head1 NAME -kas stringtokey - Converts a character string into an octal key +kas_stringtokey - Converts a character string into an octal key =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/kas_unlock.pod b/doc/man-pages/pod8/kas_unlock.pod index df37e613c3..e7c22f54db 100644 --- a/doc/man-pages/pod8/kas_unlock.pod +++ b/doc/man-pages/pod8/kas_unlock.pod @@ -1,6 +1,6 @@ =head1 NAME -kas unlock - Unlocks a locked user account +kas_unlock - Unlocks a locked user account =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/read_tape.pod b/doc/man-pages/pod8/read_tape.pod new file mode 100644 index 0000000000..d3aa433ff6 --- /dev/null +++ b/doc/man-pages/pod8/read_tape.pod @@ -0,0 +1,106 @@ +=head1 NAME + +read_tape - Reads volume dumps from a backup tape to a file + +=head1 SYNOPSIS + +=for html +
+ +B S<<< B<-tape> > >>> + S<<< B<-restore> > >>> + S<<< B<-skip> > >>> + S<<< B<-file> > >>> [B<-scan>] [B<-noask>] [B<-label>] + [B<-vheaders>] [B<-verbose>] [B<-help>] + +=for html +
+ +=head1 DESCRIPTION + +B reads an OpenAFS backup tape and prompts for each dump file to +save. This command does not require any OpenAFS infrastructure. This +command does not need an OpenAFS client or server to be available, which is +not the case with the L command. + +The dump files will be named for the Read/Write name of the volume restored. +After saving each dump file, B or B can be used to +restore the volume into AFS and non-AFS space respectively. + +B reads the tape while skipping the specified number of volumes. +After that, it restores the specified number of volumes. B +doesn't rewind the tape so that it may be used multiple times in succession. + +=head1 OPTIONS + +=over 4 + +=item B<-tape> > + +Specifies the tape device from which to restore. + +=item B<-restore> > + +Specifies the number of volumes to restore from tape. + +=item B<-skip> > + +Specifies the number of volumes to skip before starting the restore. + +=item B<-file> > + +Specifies an alternate name for the restored volume dump file rather than +the default of the volume name. + +=item B<-scan> + +Scans the tape. + +=item B<-noask> + +Doesn't prompt for each volume. + +=item B<-label> + +Displays the full dump label. + +=item B<-vheaders> + +Displays the full volume headers. + +=item B<-verbose> + +Produces on the standard output stream a detailed trace of the command's +execution. If this argument is omitted, only warnings and error messages +appear. + +=item B<-help> + +Prints the online help for this command. All other valid options are +ignored. + +=back + +=head1 EXAMPLES + +The following command will read the third through fifth volumes from +the tape device /dev/tape without prompting: + + % read_tape -tape /dev/tape -skip 2 -restore 3 -noask + +=head1 PRIVILEGE REQUIRED + +The issuer must have access to read and write to the specified tape device. + +=head1 SEE ALSO + +L, +L, +L + +=head1 COPYRIGHT + +Copyright 2007 Jason Edgecombe + +This documentation is covered by the IBM Public License Version 1.0. This +man page was written by Jason Edgecombe for OpenAFS. diff --git a/doc/man-pages/pod8/uss_add.pod b/doc/man-pages/pod8/uss_add.pod index 3babd7b351..0724f95918 100644 --- a/doc/man-pages/pod8/uss_add.pod +++ b/doc/man-pages/pod8/uss_add.pod @@ -1,6 +1,6 @@ =head1 NAME -uss add - Creates a user account +uss_add - Creates a user account =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/uss_apropos.pod b/doc/man-pages/pod8/uss_apropos.pod index e0a8f8e938..1977669400 100644 --- a/doc/man-pages/pod8/uss_apropos.pod +++ b/doc/man-pages/pod8/uss_apropos.pod @@ -1,6 +1,6 @@ =head1 NAME -uss apropos - Displays each help entry containing a keyword string. +uss_apropos - Displays each help entry containing a keyword string. =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/uss_bulk.pod b/doc/man-pages/pod8/uss_bulk.pod index 9fbcbafc9c..6de7bbef4f 100644 --- a/doc/man-pages/pod8/uss_bulk.pod +++ b/doc/man-pages/pod8/uss_bulk.pod @@ -1,6 +1,6 @@ =head1 NAME -uss bulk - Executes multiple uss commands listed in a file +uss_bulk - Executes multiple uss commands listed in a file =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/uss_delete.pod b/doc/man-pages/pod8/uss_delete.pod index 0eb549d2c6..1828bc7186 100644 --- a/doc/man-pages/pod8/uss_delete.pod +++ b/doc/man-pages/pod8/uss_delete.pod @@ -1,6 +1,6 @@ =head1 NAME -uss delete - Deletes a user account +uss_delete - Deletes a user account =head1 SYNOPSIS diff --git a/doc/man-pages/pod8/uss_help.pod b/doc/man-pages/pod8/uss_help.pod index dc309c1eed..b33792667f 100644 --- a/doc/man-pages/pod8/uss_help.pod +++ b/doc/man-pages/pod8/uss_help.pod @@ -1,6 +1,6 @@ =head1 NAME -uss help - Displays help for uss commands +uss_help - Displays help for uss commands =head1 SYNOPSIS diff --git a/doc/txt/winnotes/afs-changes-since-1.2.txt b/doc/txt/winnotes/afs-changes-since-1.2.txt index 10a76cce76..14188796a3 100644 --- a/doc/txt/winnotes/afs-changes-since-1.2.txt +++ b/doc/txt/winnotes/afs-changes-since-1.2.txt @@ -1,3 +1,213 @@ +Since 1.5.27 + * The GiveUpAllCallBacks functionality that was added in 1.5.21 + has been disabled. It has been disabled because it turns out + that the RPC is improperly implemented in all file servers + previous to 1.4.6. The RPC is executed without the proper + locks being held resulting in data corruption and eventual file + server failure. The functionality will be re-enabled in a + a few months. + + * a couple of .readonly Volume Callback optimizations were + implemented: + - Apply most recent volume callback to all stat cache objects + in the volume. This avoids premature callback expirations + and unnecessary FetchStatus calls. + - Add option to permit attempts to renew .readonly Volume + Callbacks on a periodic basis to avoid invalidation of stat + cache data. [Requires daemonCheckVolCBInterval be set to + non-zero number of seconds. 1800 (30 minutes) is suggested.] + + * Adds support for 64-bit data version values. Previous releases + only supported 32-bit values. Larger values sent by the file server + would result in rollover. + + * aklog and asetkey no longer generate an exception if Kerberos for + Windows is not installed. + + * If the LSA authentication functions report a temporary out of memory + condition, fail the current authentication and do not cause the AFS + client service to terminate unexpectedly. + + * When the AFS client service is shutting down, prevent the daemon check + thread from executing additional checks which might attempt to access + discarded locks or unmapped memory. + + * Correct a double free condition in the NIM AFS credentials provider. + + * Add "FollowBackupPath" service parameter registry value. + This provides equivalent functionality to the UNIX afsd -backuptree + option. When set to a non-zero value, normal mount points originating + in a .backup volume will prefer a .backup volume. + +Since 1.5.26 + * Fix NSIS uninstall from the .MSI installer. + + * Add Stack Frame logging for AMD64 + + * Add support for EWOULDBLOCK to cm_Analyze. If the file + server returns EWOULDBLOCK, retry the request every two + seconds for up to the RDRtimeout. + + * Reorganize the order of the includes to ensure that EWOULDBLOCK + is not assigned the same value as EIO. + + * Update CellServDB to GCO Public 25 Oct 2007 + + * Add additional validation and error handling code after + each call to getSlot(). If an invalid slot is returned, + return NONODE. If the invalid slot is returned when + extracting a data node, invalidate the tree. + + * Modify compareKeys() to always perform a case-insensitive + comparison and only perform a case sensistive comparison + if the case-insensitive one matches. This ensures the + ordering is consistently reported. + + * Add lock assertions to ensure that all calls are being + performed with the correct locks being held. There have been + some crash reports that provide stack data that does not appear + to be possible unless there is a race. However, there are no + obvious locations where the race is taking place and the test + suite indicates that all of the correct locks are being held. + We shall see what happens in the field. + + * For consistency replace all calls to findKey in which the range i + s (1,numentries) with calls to getSlot(). + + * Optimize the depth search loop by testing the slot value in the + for statement instead of forcing the loop to be broken later. + + * Reorganize the locking for cm_BeginDirOp and cm_EndDirOp. + There are a number of locations where locks are obtained, dropped, + and reobtained. This reorganization attempts to accomplish several + things: + + (1) be optimistic for the most common case so it will be fast + + (2) add consistency checks after each location where locks are + dropped and re-obtained. If we lose a race in cm_BeginDirOp + and the bplus tree is out of date, retry until we get to a + consistent state that we can use. + + (3) Ensure that all operations take place with the correct locks. + + * One of the issues that has become a serious problem since the + addition of the local directory updates is that although cm_SyncOp + synchronizes operations, it does not preserve the order of requests. + This has always been a problem in that it has been possible for a + request to fail to complete due to its worker thread's bad luck. + When a request takes longer than the Windows SMB Redirector's timeout, + the SMB Redirector tears down the SMB virtual circuit. + + When using the local directory updates it is really important that + the directory update operations complete in the order that they were + sent to the file server. If they don't, then the local directory state + and the file server state will not match and the local directory state + must be discarded which in turn forces a new read of the entire + directory contents over the network. + + This patch adds a new cm_scache_waiter_t object that is used to store + the current thread, buffer, and syncop flags within a waiters queue + on each cm_scache_t object. If a thread is forced to sleep in + cm_SyncOp, upon waking it will check to see if there are any other + threads waiting that are attempting to perform a similar task ahead + of it in the queue. If yes, the thread goes back to sleep. If not, + it goes ahead and enters the cm_SyncOp conflict resolution block. + + This patch has the additional side effect of reducing the number of + competing threads that must obtain the cm_scache_t mutex and process + the cm_SyncOp conflict resolution block. As a result, the overall CPU + utilization of the service and the clock time associated with processing + requests will be reduced. + + * assert that the cm_scache_t mutex is held when calling + buf_ForceDataVersion(). + + * rename findNode to leafNode in bplus_Lookup + + * replace all OutputDebugString calls with osi_LogX calls + + * modify bestMatch to special case the return values for leaf nodes. + If an entry is above or below the values available in the leaf node + return BTLOWER or BTUPPER instead of BTERROR. + + * In insert and delete operations check for BTLOWER/BTUPPER and isleaf, + if true convert to either slot 0 or Max and perform the insertion. + This produces easier to read code when performing lookups. + + * modify lock_AssertXXX macros to call osi_assertx() and provide a + descriptive message. + + * the difference between osi_assert() and osi_assertx() is whether or not + a description is specified as part of the call. When no message is + specified afsd_notifier() is called with a NULL msgp parameter. This + results in a null pointer dereference during the EventLog() call. + + As a result, none of the information describing the assertion is written + to the log file. + + This commit sets a default message for use when no other message is + provided and it replaces all calls to osi_assert with osi_assertx and + adds descriptions. + + * Migrate B+ tree search key into thread local storage + +Since 1.5.25 + * Fix an uninitialized variable in lana_IsLoopback() which + could result in a random determination that a loopback + adapter is not a loopback adapter. This would result in + a computed Netbios service name of %MACHINE%-AFS instead + of AFS. This is a serious problem if the value computed + by the AFS Client Service and the client process pioctl + calls produce different results as it will result in a + communication failure. + + * Fix a crash in the B+ Tree code that results when a file + rename only results in a change of case. + + * Fix the pioctl path parsing. The previous algorithm + broke the current directory of the client into two parts, + the TIDpath which represented the device root and the + relative path. The problem is that this is not sufficient + from proper processing of symlinks and mount points. + + What is required is that the last component of the path + must not have the symlink or mount point be evaluated + whereas symlink and mount point evaluation must be performed + for the rest of the relative path. Therefore, the path is + now split into three parts: TIDpath, intermediate path, + and last component. + + "fs examine" now reports the data of the symlink or mount + point object instead of the target and "symlink list" and + "symlink remove" now works. The "Explorer Shell Extension" + menu now is displayed for symlink objects. + + * More informative symlink.exe error messages. + + * When the cmd.exe "del" command is used to remove a symlink, + not only was the link object removed, but the stat cache + object for the target was marked deleted. This resulted + in cache corruption which would require the destruction + of the cache to correct. + + * Add undocumented registry value, "OfflineReadOnlyIsValid" + which results in cached contents from read only volumes + to be treated as valid when there is no callback registered + and all servers are down or all instances are offline. + + HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters + + * Add documented registry value, "AcceptDottedPrincipalNames" + which is used to permit the acquisition of AFS tokens + using Kerberos v5 principal names which include a dot in + the first component. + + {HKLM\HKCU}\Software\OpenAFS\Client + + * "fs uuid" does not require "AFS Client Administrator" group + membership to display the current UUID value. + Since 1.5.24 * Update NSIS installer to version 2.30 diff --git a/doc/txt/winnotes/afs-issues.txt b/doc/txt/winnotes/afs-issues.txt index 97aa380682..095df49fe9 100644 --- a/doc/txt/winnotes/afs-issues.txt +++ b/doc/txt/winnotes/afs-issues.txt @@ -1,4 +1,4 @@ -This file is a rough list of known issues with the 1.5.23 release of OpenAFS +This file is a rough list of known issues with the 1.5.27 release of OpenAFS on Windows. This list is not complete. There are probably other issues which can be found in the RT database or on the mailing list. diff --git a/src/NTMake9x b/src/NTMake9x deleted file mode 100644 index 6be23b41fb..0000000000 --- a/src/NTMake9x +++ /dev/null @@ -1,332 +0,0 @@ -# Copyright 2000, International Business Machines Corporation and others. -# All Rights Reserved. -# -# This software has been released under the terms of the IBM Public -# License. For details, see the LICENSE file in the top-level source -# directory or online at http://www.openafs.org/dl/license10.html - -# Top level nmake NTMakefile driver for building AFS. -# -# This file simply imposes a reasonable total ordering on the set of -# directories to build; this ordering is of course more strict than the -# partial ordering established by the actual directory dependencies. -# -# When porting a new directory, simply add the directory into the -# dependence chain at the earliest point possible, updating its successor -# appropriately; if the new directory is the last in the chain, then -# update the 'finale' dependency to be the new directory. - - -CD = cd -NTMAKE = nmake /nologo /f ntmakefile install9x -NTMAKELANG = nmake /nologo /f ntmakefile en_install -NTMAKE_HEADERS = nmake /nologo /f ntmakefile install_headers -NTMAKE_LIBUTILS = nmake /nologo /f ntmakefile install_libutils -NTMAKE_OBJS = nmake /nologo /f ntmakefile install_objs -MKDIR = mkdir -OBJ = src - -# Standard install directory. -!IFDEF AFSDEV_DESTDIR -DESTDIR = $(AFSDEV_DESTDIR) -!ELSE -DESTDIR = $(AFSROOT)\DEST -!ENDIF - - -start: -! IF (!EXIST(src)) -! ERROR Execute nmake from directory above src, e.g., afs\3.5. -! ENDIF -! IF (!EXIST($(DESTDIR))) - $(MKDIR) $(DESTDIR) -! ENDIF - -config: start - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -procmgmt_headers: config - echo ***** $@ - $(CD) $(OBJ)\procmgmt - $(NTMAKE_HEADERS) - $(CD) ..\.. - -afsreg_headers: config - echo ***** $@ - $(CD) $(OBJ)\WINNT\afsreg - $(NTMAKE_HEADERS) - $(CD) ..\..\.. - -util: procmgmt_headers afsreg_headers - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -comerr: util - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -cmd: comerr - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -afsreg: cmd - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - -eventlog: afsreg - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - -lwp: eventlog - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -rxgen: lwp - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -des: rxgen - echo ***** $@ -! IF (EXIST($(OBJ)\des\NTMakefile)) - $(CD) $(OBJ)\des - $(NTMAKE) - $(CD) ..\.. -! ELSE - $(CD) $(OBJ)\des_stub - $(NTMAKE) - $(CD) ..\.. -! ENDIF - -rx: des - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -rxstat: rx - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -rxkad: rxstat - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -pthread: rxkad - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - -procmgmt: pthread - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -fsint: procmgmt - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -audit: fsint - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -osi_headers: audit - echo ***** $@ - $(CD) $(OBJ)\WINNT\client_osi - $(NTMAKE_HEADERS) - $(CD) ..\..\.. - -libacl_headers: osi_headers - echo ***** $@ - $(CD) $(OBJ)\libacl - $(NTMAKE_HEADERS) - $(CD) ..\.. - -cm_headers: libacl_headers - echo ***** $@ - $(CD) $(OBJ)\WINNT\afsd - $(NTMAKE_HEADERS) - $(CD) ..\..\.. - -sys: cm_headers - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -afsdobjs: sys - echo ***** $@ - $(CD) $(OBJ)\WINNT\afsd - $(NTMAKE_OBJS) - $(CD) ..\..\.. - -auth: afsdobjs - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -ubik: auth - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -ptserver: ubik - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE_LIBUTILS) - $(CD) ..\.. - -libacl: ptserver - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -kauth: libacl - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -vlserver: kauth - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE_LIBUTILS) - $(CD) ..\.. - -usd: vlserver - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -libafsrpc: usd - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -libafsauthent: libafsrpc - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -libadmin: libafsauthent - echo ***** $@ - $(CD) $(OBJ)\$@ - $(NTMAKE) - $(CD) ..\.. - -client_talocale: libadmin - echo ***** $@ - $(CD) $(OBJ)\WINNT\talocale - $(NTMAKE) - $(CD) ..\..\.. - -client_osi: client_talocale - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - -afsd: client_osi - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE_LIBUTILS) - $(CD) ..\..\.. - -client_cpa: afsd - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - -client_config: client_cpa - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - -client_exp: client_config - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - - -#Leave last echo in - it helps the build reconize the last $(CD) -win9xpanel : - echo ***** $@ - $(CD) $(OBJ)\WINNT\$@ - $(NTMAKE) - $(CD) ..\..\.. - echo ***** End of Build - -install: start client_exp win9xpanel - -install9x: install - -# InstallShield dependencies - -#Leave last echo in - it helps the build reconize the last $(CD) -Win9x:: - echo ***** afs_setup_utils - $(CD) $(OBJ)\WINNT\afs_setup_utils - nmake -f ntmakefile install - $(CD) ..\..\.. - echo ***** Win9x - $(CD) $(OBJ)\WINNT\install\Win9x - nmake /nologo /f NTMakefile isinstall - $(CD) ..\..\..\.. - echo **** End of Install Scripts - -media: Win9x - -# Clean target for obj tree -# Fake the version copy so clean will go through the complete cycle with undefines -clean: start - if not exist .\src\config\NTMakefile.version copy .\src\config\NTMakefile.version-NOCML .\src\config\NTMakefile.version - nmake /nologo /f ntmake9x "NTMAKE = nmake /nologo /f ntmakefile clean" "NTMAKE_HEADERS = nmake /nologo /f ntmakefile clean" "NTMAKE_LIBUTILS = nmake /nologo /f ntmakefile clean" "NTMAKE_OBJS = nmake /nologo /f ntmakefile clean" install - $(CD) $(OBJ)\WINNT\install\Win9x - nmake /nologo /f NTMakefile clean - $(CD) ..\..\..\.. - $(DESTDIR)\BIN\rmbat $(DESTDIR)\include\*.* $(DESTDIR)\include\afs\*.* $(DESTDIR)\include\WINNT\*.* $(DESTDIR)\include\rx\*.* - $(DESTDIR)\BIN\rmbat $(DESTDIR)\LIB\*.LIB $(DESTDIR)\LIB\*.DLL $(DESTDIR)\LIB\AFS\*.LIB - $(DESTDIR)\BIN\rmbat $(DESTDIR)\root.client\usr\vice\etc\*.* - $(CD) $(OBJ)\config - nmake /nologo /f ntmakefile clean_version - $(CD) ..\.. - echo **** End of Clean - -# Language-only build target -lang: - nmake /nologo /f ntmakefile "NTMAKE = nmake /nologo /f ntmakefile lang" "NTMAKE_HEADERS = nmake /nologo /f ntmakefile lang" install diff --git a/src/NTMakefile b/src/NTMakefile index ac8e0d4abc..e8d3af65cd 100644 --- a/src/NTMakefile +++ b/src/NTMakefile @@ -604,7 +604,14 @@ aklog: client_creds $(NTMAKE) $(CD) ..\..\.. -netidmgr_plugin: aklog +xstat: aklog + echo ***** $@ + $(DOCD) $(SRC)\$@ + $(CD) $(SRC)\$@ + $(NTMAKE) + $(CD) ..\.. + +netidmgr_plugin: xstat echo ***** $@ $(DOCD) $(SRC)\WINNT\$@ $(CD) $(SRC)\WINNT\$@ @@ -627,10 +634,11 @@ finale: extra $(DOCD) $(SRC)\$@ $(CD) $(SRC)\$@ $(NTMAKE) - $(CD) ..\.. - echo Build Finished Successfully + $(CD) ..\.. install: finale + echo Build Finished Successfully + # Clean target for obj tree clean: @@ -685,4 +693,3 @@ install-nsis: install NSIS install-wix: install wix - diff --git a/src/TechNotes-WIN9X b/src/TechNotes-WIN9X deleted file mode 100644 index ced7f49e56..0000000000 --- a/src/TechNotes-WIN9X +++ /dev/null @@ -1,154 +0,0 @@ -Win9x AFS Client: Technical Notes ---------------------------------- - -This file gives a technical overview of the Win9x AFS client and describes -the main differences from the NT client. - - -Overview --------- - -The Windows 9x client is based on the Windows NT/2000 client. Like the -NT client, it exports AFS through an SMB interface. Programs access AFS -files by mounting AFS submounts as SMB shares and using the built-in -Windows SMB client to communicate with the AFS client. The AFS client -acts as an SMB server. It runs entirely at user level. - -DOS box implementation and VXD's --------------------------------- - -The main program of the Win9x client, afsd.exe, is implemented as a -32-bit DOS program. It is compiled using the DJGPP compiler and runs in -a Windows 9x DOS virtual machine. This approach was necessary to avoid -a well-known deadlock problem in Windows 9x when the kernel calls up -to a user-level Win32 daemon: the original requesting program grabs the -Win16Mutex before entering the kernel. The request is then passed up to -the daemon, who attempts to service it using network or file I/O calls. -These calls also attempt to obtain the Win16Mutex, which is still being -held by the original requester, so there is a deadlock. - -To avoid this problem, the daemon runs in a DOS box. I/O calls from -a DOS program do not attempt to obtain the Win16Mutex, so the deadlock -is avoided. This approach was discovered by the Coda team at Carnegie -Mellon University and used to implement a Win9x version of their client. -The Win9x AFS client uses the same approach. It also uses the Coda team's -SOCK.VXD which was written to provide network functions to a DOS program. -Sockets functions which call SOCK.VXD were added to the DJGPP library. - -For more information about the Coda team's approach to this problem, see -their paper from Usenix 1999: -http://www.cs.cmu.edu/afs/cs/project/coda/Web/docdir/freenix99.pdf - -Note that the AFS client also requires the Coda team's MMAP.VXD. We are -not actually calling this VXD, but afsd crashes if it is built without -it (i.e., by building with dos-gcc -bw95 instead of -bmmap). Solutions to -this problem welcomed.. - -Netbios functions ------------------ - -The Windows AFS clients communicate with user applications using the -SMB protocol, as described above. SMB communication is done using the -Netbios interface. In Win32, there is a built-in function Netbios() -which accomplishes this. In a DOS program, however, this function is -unavailable. However, Netbios functionality is available in the BIOS -by calling interrupt 0x5c. The NCB (Netbios Control Block) and data -buffer must be in conventional DOS memory, i.e., below 1 MB. This memory -can only be accessed in DJGPP by using the DOS memory access functions: -dosmemget(), dosmemput(), _farpeekX() and _farpokeX(). The Win9x client -uses a separately-allocated DOS memory buffer and copies data to and from -DOS memory for network communication. - -Functions were also added to LWP's iomgr.c to check for the completion -of Netbios requests. The IOMGR now checks for NCB completion in addition -to checking for timer expiration, signal delivery, and performing select() -on file descriptors. - -See the new files: netbios95.c, dosutils95.c, and the various changes -(marked by "#ifdef DJGPP") to smb.c in WINNT/afsd. Also see lwp/iomgr.c. - -Thread functions ----------------- - -Unlike the NT client which uses Win32 thread and locking functions, -the Win9x client uses the LWP package from the AFS source distribution. -An interface layer was added to allow NT and Win9x to make the same calls. -For example, thrd_Create() is now used to create a thread. In NT, this -is just a macro to the Win32 function CreateThread(). In Win9x, it is a -function which calls the LWP function LWP_CreateProcess(). See the new -files osithrd95.c, osithrd95.h, and osithrdnt.h in WINNT/client_osi. - -Configuration parameters ------------------------- - -In DJGPP, it is not feasible to access the system registry, which is -where the NT client stores its configuration info. For the Win9x client, -the Unix approach is followed instead: the local cell is in a file called -"ThisCell", cache configuration is in a file called "cache.info", and -the cell database is stored in "CellServDB" instead of "afsdcell.ini". -Many parameters are passed via the command line to afsd.exe and are -processed just like the Unix clients. - -See the new files afsd_init95.c and afsd95.c in WINNT/afsd. - -Authentication --------------- - -In the functions SetToken() and GetToken(), the NT client sends and -receives the session key using a separate RPC which should use encryption, -rather than including the session key in the pioctl packet. The Win9x -version avoids this RPC and puts the session key back into the pioctl. -This should not be a security issue on Win9x since it is a single-user -machine. (The pioctl packet will not be visible externally.) See files -WINNT/afsd/cm_ioctl.c and auth/ktc_nt.c. - -Persistent (disk) caching -------------------------- - -Disk caching support was added for the 9x client. This has barely been -tested and is still very experimental! In addition, there are numerous -performance issues. It relies on the fact that LWP is a non-preemptive -threads package, so no locking is done to protect shared data structures. -In addition, it uses synchronous I/O to read and write disk files. Since -LWP is a user-level threads package, any calls to normal I/O system calls -like read() or write() will block the entire process. One better approach -would be to add support for local disk file descriptors to the select() -call used by IOMGR, and then to use IOMGR_Select to enqueue I/O requests -to the disk. Currently, the select() function supports only sockets. - -It should be fairly easy to adapt this code for the NT client. See the -implementation in WINNT/afsd/cm_diskcache95.c. To enable this code, -define DISKCACHE95 in WINNT/afsd/Makefile.djgpp. - -Utility programs ----------------- - -The utility programs, such as klog.exe and fs.exe, are Win32 programs and -are built using the Microsoft compiler. Changes to the code for these -files are marked by "#ifdef AFS_WIN95_ENV". - -GUI interface -------------- - -The Win9x client does not use the NT configuration GUI programs in -client_creds and client_cpa (Control Panel Applet.) It uses a separate -GUI program called WinAfsLoad.exe in WINNT/win9xpanel. This program can -start afsd.exe and keep track of submounts and token expiration. - -The Explorer shell extension, which allows right clicking on a file -in Windows Explorer to get an AFS submenu, is supported in Win9x. -See WINNT/client_exp. - -Integrated logon ----------------- - -Integrated logon is not supported in the 9x client. - -Known issues ------------- - -1) The Microsoft linker LINK386.exe causes a deadlock when attempting to -create an executable on an AFS filesystem. Somehow, the linker appears -to be preempting the entire machine so afsd.exe cannot run to service -requests. Solutions to this problem eagerly sought! (This problem does -not seem to occur with the Win9x Coda client.) diff --git a/src/WINNT/afs_setup_utils/afsrm.c b/src/WINNT/afs_setup_utils/afsrm.c index 1761a76fa0..e20dedf9b6 100644 --- a/src/WINNT/afs_setup_utils/afsrm.c +++ b/src/WINNT/afs_setup_utils/afsrm.c @@ -23,7 +23,7 @@ #include "forceremove.h" -static int DoClient34(struct cmd_syndesc *as, char *arock) +static int DoClient34(struct cmd_syndesc *as, void *arock) { DWORD status = Client34Eradicate(FALSE); @@ -40,7 +40,7 @@ SetupCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("client34", DoClient34, 0, + ts = cmd_CreateSyntax("client34", DoClient34, NULL, "remove AFS 3.4a client"); } diff --git a/src/WINNT/afsd/afsd.h b/src/WINNT/afsd/afsd.h index 45b0b065eb..218777fc10 100644 --- a/src/WINNT/afsd/afsd.h +++ b/src/WINNT/afsd/afsd.h @@ -49,8 +49,8 @@ BOOL APIENTRY About(HWND, unsigned int, unsigned int, long); #include "cm_aclent.h" #include "cm_server.h" #include "cm_cell.h" -#include "cm_volume.h" #include "cm_volstat.h" +#include "cm_volume.h" #include "cm_dcache.h" #include "cm_access.h" #include "cm_utils.h" diff --git a/src/WINNT/afsd/afsd_init.c b/src/WINNT/afsd/afsd_init.c index 4b8b488d87..ca8f3148e0 100644 --- a/src/WINNT/afsd/afsd_init.c +++ b/src/WINNT/afsd/afsd_init.c @@ -23,6 +23,9 @@ #include #include "afsd.h" +#ifdef USE_BPLUS +#include "cm_btree.h" +#endif #include #include #include @@ -39,8 +42,13 @@ extern int RXSTATS_ExecuteRequest(struct rx_call *z_call); extern afs_int32 cryptall; extern int cm_enableServerLocks; +extern int cm_followBackupPath; extern int cm_deleteReadOnly; +#ifdef USE_BPLUS extern afs_int32 cm_BPlusTrees; +#endif +extern afs_int32 cm_OfflineROIsValid; +extern afs_int32 cm_giveUpAllCBs; extern const char **smb_ExecutableExtensions; osi_log_t *afsd_logp; @@ -1068,6 +1076,7 @@ int afsd_InitCM(char **reasonP) } afsi_log("CM DeleteReadOnly is %u", cm_deleteReadOnly); +#ifdef USE_BPLUS dummyLen = sizeof(DWORD); code = RegQueryValueEx(parmKey, "BPlusTrees", NULL, NULL, (BYTE *) &dwValue, &dummyLen); @@ -1076,6 +1085,14 @@ int afsd_InitCM(char **reasonP) } afsi_log("CM BPlusTrees is %u", cm_BPlusTrees); + if (cm_BPlusTrees && !cm_InitBPlusDir()) { + cm_BPlusTrees = 0; + afsi_log("CM BPlusTree initialization failure; disabled for this session"); + } +#else + afsi_log("CM BPlusTrees is not supported"); +#endif + if ((RegQueryValueEx( parmKey, "PrefetchExecutableExtensions", 0, ®Type, NULL, &dummyLen) == ERROR_SUCCESS) && (regType == REG_MULTI_SZ)) @@ -1108,6 +1125,30 @@ int afsd_InitCM(char **reasonP) if (!smb_ExecutableExtensions) afsi_log("No PrefetchExecutableExtensions"); + dummyLen = sizeof(DWORD); + code = RegQueryValueEx(parmKey, "OfflineReadOnlyIsValid", NULL, NULL, + (BYTE *) &dwValue, &dummyLen); + if (code == ERROR_SUCCESS) { + cm_OfflineROIsValid = (unsigned short) dwValue; + } + afsi_log("CM OfflineReadOnlyIsValid is %u", cm_deleteReadOnly); + + dummyLen = sizeof(DWORD); + code = RegQueryValueEx(parmKey, "GiveUpAllCallBacks", NULL, NULL, + (BYTE *) &dwValue, &dummyLen); + if (code == ERROR_SUCCESS) { + cm_giveUpAllCBs = (unsigned short) dwValue; + } + afsi_log("CM GiveUpAllCallBacks is %u", cm_giveUpAllCBs); + + dummyLen = sizeof(DWORD); + code = RegQueryValueEx(parmKey, "FollowBackupPath", NULL, NULL, + (BYTE *) &dwValue, &dummyLen); + if (code == ERROR_SUCCESS) { + cm_followBackupPath = (unsigned short) dwValue; + } + afsi_log("CM FollowBackupPath is %u", cm_followBackupPath); + RegCloseKey (parmKey); cacheBlocks = ((afs_uint64)cacheSize * 1024) / blockSize; @@ -1155,7 +1196,7 @@ int afsd_InitCM(char **reasonP) smb_InitIoctl(); cm_InitCallback(); - + code = cm_InitMappedMemory(virtualCache, cm_CachePath, stats, cm_chunkSize, cacheBlocks, blockSize); afsi_log("cm_InitMappedMemory code %x", code); if (code != 0) { @@ -1360,7 +1401,6 @@ int afsd_InitSMB(char **reasonP, void *aMBfunc) void afsd_printStack(HANDLE hThread, CONTEXT *c) { -#if defined(_X86_) HANDLE hProcess = GetCurrentProcess(); int frameNum; #if defined(_AMD64_) @@ -1407,9 +1447,9 @@ void afsd_printStack(HANDLE hThread, CONTEXT *c) #error The STACKFRAME initialization in afsd_printStack() for this platform #error must be properly configured #elif defined(_AMD64_) - s.AddrPC.Offset = 0; + s.AddrPC.Offset = c->Rip; s.AddrPC.Mode = AddrModeFlat; - s.AddrFrame.Offset = 0; + s.AddrFrame.Offset = c->Rbp; s.AddrFrame.Mode = AddrModeFlat; #else s.AddrPC.Offset = c->Eip; @@ -1509,7 +1549,6 @@ void afsd_printStack(HANDLE hThread, CONTEXT *c) SymCleanup(hProcess); GlobalFree(pSym); -#endif /* _X86_ */ } #ifdef _DEBUG @@ -1658,6 +1697,9 @@ LONG __stdcall afsd_ExceptionFilter(EXCEPTION_POINTERS *ep) #endif #if defined(_X86) ep->ContextRecord->Eip++; +#endif +#if defined(_AMD64_) + ep->ContextRecord->Rip++; #endif return EXCEPTION_CONTINUE_EXECUTION; } diff --git a/src/WINNT/afsd/afsd_service.c b/src/WINNT/afsd/afsd_service.c index 30e81d8b21..328e16ece6 100644 --- a/src/WINNT/afsd/afsd_service.c +++ b/src/WINNT/afsd/afsd_service.c @@ -61,6 +61,8 @@ static void afsd_notifier(char *msgp, char *filep, long line) #ifdef AFSIFS int i; #endif + if (!msgp) + msgp = "unspecified assert"; if (filep) LogEvent(EVENTLOG_ERROR_TYPE, MSG_SERVICE_ERROR_STOP_WITH_MSG_AND_LOCATION, diff --git a/src/WINNT/afsd/afskfw.c b/src/WINNT/afsd/afskfw.c index c89585d32e..15548fa1ae 100644 --- a/src/WINNT/afsd/afskfw.c +++ b/src/WINNT/afsd/afskfw.c @@ -161,6 +161,36 @@ KFW_cleanup(void) KFW_cleanup_funcs(); } + +int +KFW_accept_dotted_usernames(void) +{ + HKEY parmKey; + DWORD code, len; + DWORD value = 1; + + code = RegOpenKeyEx(HKEY_CURRENT_USER, AFSREG_USER_OPENAFS_SUBKEY, + 0, KEY_QUERY_VALUE, &parmKey); + if (code == ERROR_SUCCESS) { + len = sizeof(value); + code = RegQueryValueEx(parmKey, "AcceptDottedPrincipalNames", NULL, NULL, + (BYTE *) &value, &len); + RegCloseKey(parmKey); + } + if (code != ERROR_SUCCESS) { + code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_OPENAFS_SUBKEY, + 0, KEY_QUERY_VALUE, &parmKey); + if (code == ERROR_SUCCESS) { + len = sizeof(value); + code = RegQueryValueEx(parmKey, "AcceptDottedPrincipalNames", NULL, NULL, + (BYTE *) &value, &len); + RegCloseKey (parmKey); + } + } + return value; +} + + int KFW_use_krb524(void) { @@ -934,24 +964,27 @@ KFW_AFS_get_cred( char * username, userrealm = strchr(username,'@'); if ( userrealm ) { pname = strdup(username); - userrealm = strchr(pname, '@'); - *userrealm = '\0'; + if (!KFW_accept_dotted_usernames()) { + userrealm = strchr(pname, '@'); + *userrealm = '\0'; - /* handle kerberos iv notation */ - while ( dot = strchr(pname,'.') ) { - *dot = '/'; + /* handle kerberos iv notation */ + while ( dot = strchr(pname,'.') ) { + *dot = '/'; + } + *userrealm++ = '@'; } - *userrealm++ = '@'; } else { pname = malloc(strlen(username) + strlen(realm) + 2); strcpy(pname, username); - /* handle kerberos iv notation */ - while ( dot = strchr(pname,'.') ) { - *dot = '/'; + if (!KFW_accept_dotted_usernames()) { + /* handle kerberos iv notation */ + while ( dot = strchr(pname,'.') ) { + *dot = '/'; + } } - strcat(pname,"@"); strcat(pname,realm); } @@ -2414,19 +2447,21 @@ KFW_AFS_klog( goto skip_krb5_init; } - /* look for client principals which cannot be distinguished - * from Kerberos 4 multi-component principal names - */ - k5data = krb5_princ_component(ctx,client_principal,0); - for ( i=0; ilength; i++ ) { - if ( k5data->data[i] == '.' ) - break; - } - if (i != k5data->length) - { - OutputDebugString("Illegal Principal name contains dot in first component\n"); - rc = KRB5KRB_ERR_GENERIC; - goto cleanup; + if (!KFW_accept_dotted_usernames()) { + /* look for client principals which cannot be distinguished + * from Kerberos 4 multi-component principal names + */ + k5data = krb5_princ_component(ctx,client_principal,0); + for ( i=0; ilength; i++ ) { + if ( k5data->data[i] == '.' ) + break; + } + if (i != k5data->length) + { + OutputDebugString("Illegal Principal name contains dot in first component\n"); + rc = KRB5KRB_ERR_GENERIC; + goto cleanup; + } } i = krb5_princ_realm(ctx, client_principal)->length; diff --git a/src/WINNT/afsd/cklog.c b/src/WINNT/afsd/cklog.c index acbcf61c3f..d3a5177875 100644 --- a/src/WINNT/afsd/cklog.c +++ b/src/WINNT/afsd/cklog.c @@ -22,7 +22,7 @@ #define BAD_ARGUMENT 1 #define KLOGEXIT(code) exit(code) -int CommandProc(); +static int CommandProc(struct cmd_syndesc *, void *); static int zero_argc; static char **zero_argv; @@ -40,7 +40,7 @@ void main (argc, argv) /* Start up sockets */ WSAStartup(0x0101, &WSAjunk); - ts = cmd_CreateSyntax((char *) 0, CommandProc, 0, "obtain Kerberos authentication"); + ts = cmd_CreateSyntax(NULL, CommandProc, NULL, "obtain Kerberos authentication"); #define aXFLAG 0 #define aPRINCIPAL 1 @@ -135,9 +135,8 @@ static int read_pw_string(char *s, int max) return !ok; } -CommandProc (as, arock) - char *arock; - struct cmd_syndesc *as; +static int +CommandProc (struct cmd_syndesc *as, void *arock) { char name[MAXKTCNAMELEN]; char instance[MAXKTCNAMELEN]; diff --git a/src/WINNT/afsd/cm_aclent.c b/src/WINNT/afsd/cm_aclent.c index f7cb725a86..ad14a8abb0 100644 --- a/src/WINNT/afsd/cm_aclent.c +++ b/src/WINNT/afsd/cm_aclent.c @@ -92,9 +92,6 @@ long cm_FindACLCache(cm_scache_t *scp, cm_user_t *userp, afs_uint32 *rightsp) } else { *rightsp = aclp->randomAccess; if (cm_data.aclLRUp != aclp) { - if (cm_data.aclLRUEndp == aclp) - cm_data.aclLRUEndp = (cm_aclent_t *) osi_QPrev(&aclp->q); - /* move to the head of the LRU queue */ osi_QRemoveHT((osi_queue_t **) &cm_data.aclLRUp, (osi_queue_t **) &cm_data.aclLRUEndp, &aclp->q); osi_QAddH((osi_queue_t **) &cm_data.aclLRUp, @@ -123,8 +120,10 @@ static cm_aclent_t *GetFreeACLEnt(cm_scache_t * scp) if (cm_data.aclLRUp == NULL) osi_panic("empty aclent LRU", __FILE__, __LINE__); + if (cm_data.aclLRUEndp == NULL) + osi_panic("inconsistent aclent LRUEndp == NULL", __FILE__, __LINE__); + aclp = cm_data.aclLRUEndp; - cm_data.aclLRUEndp = (cm_aclent_t *) osi_QPrev(&aclp->q); osi_QRemoveHT((osi_queue_t **) &cm_data.aclLRUp, (osi_queue_t **) &cm_data.aclLRUEndp, &aclp->q); if (aclp->backp && scp != aclp->backp) { diff --git a/src/WINNT/afsd/cm_btree.c b/src/WINNT/afsd/cm_btree.c index 26128eb987..b3ad945a43 100644 --- a/src/WINNT/afsd/cm_btree.c +++ b/src/WINNT/afsd/cm_btree.c @@ -66,6 +66,14 @@ static void _pullentry(Nptr node, int entry, int offset); static void _xferentry(Nptr srcNode, int srcEntry, Nptr destNode, int destEntry); static void _setentry(Nptr node, int entry, keyT key, Nptr downNode); +/* access key and data values for B+tree methods */ +/* pass values to getSlot(), descend...() */ +static keyT getfunkey(Tree *B); +static dataT getfundata(Tree *B); +static void setfunkey(Tree *B, keyT v); +static void setfundata(Tree *B, dataT v); + + #ifdef DEBUG_BTREE static int _isRoot(Tree *B, Nptr n) { @@ -114,6 +122,19 @@ static int _isFull(Tree *B, Nptr n) /***********************************************************************\ | B+tree Initialization and Cleanup Routines | \***********************************************************************/ +static DWORD TlsKeyIndex; +static DWORD TlsDataIndex; + +long cm_InitBPlusDir(void) +{ + if ((TlsKeyIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES) + return 0; + + if ((TlsDataIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES) + return 0; + + return 1; +} /******************** Set up B+tree structure **********************/ Tree *initBtree(unsigned int poolsz, unsigned int fanout, KeyCmp keyCmp) @@ -168,14 +189,81 @@ void freeBtree(Tree *B) } +/* access key and data values for B+tree methods */ +/* pass values to getSlot(), descend...() */ +static keyT getfunkey(Tree *B) { + keyT *tlsKey; + + // Retrieve a data pointer for the current thread. + tlsKey = (keyT *) TlsGetValue(TlsKeyIndex); + if (tlsKey == NULL) { + if (GetLastError() != ERROR_SUCCESS) + osi_panic("TlsGetValue failed", __FILE__, __LINE__); + else + osi_panic("get before set", __FILE__, __LINE__); + } + + return *tlsKey; +} + +static dataT getfundata(Tree *B) { + dataT *tlsData; + + // Retrieve a data pointer for the current thread. + tlsData = (dataT *) TlsGetValue(TlsDataIndex); + if (tlsData == NULL) { + if (GetLastError() != ERROR_SUCCESS) + osi_panic("TlsGetValue failed", __FILE__, __LINE__); + else + osi_panic("get before set", __FILE__, __LINE__); + } + + return *tlsData; +} + +static void setfunkey(Tree *B, keyT theKey) { + keyT *tlsKey; + + tlsKey = (keyT *) TlsGetValue(TlsKeyIndex); + if (tlsKey == NULL) { + if (GetLastError() != ERROR_SUCCESS) + osi_panic("TlsGetValue failed", __FILE__, __LINE__); + + tlsKey = malloc(sizeof(keyT)); + + if (!TlsSetValue(TlsKeyIndex, tlsKey)) + osi_panic("TlsSetValue failed", __FILE__, __LINE__); + } + + *tlsKey = theKey; +} + +static void setfundata(Tree *B, dataT theData) { + dataT *tlsData; + + tlsData = (dataT *) TlsGetValue(TlsDataIndex); + if (tlsData == NULL) { + if (GetLastError() != ERROR_SUCCESS) + osi_panic("TlsGetValue failed", __FILE__, __LINE__); + + tlsData = malloc(sizeof(dataT)); + + if (!TlsSetValue(TlsDataIndex, tlsData)) + osi_panic("TlsSetValue failed", __FILE__, __LINE__); + } + + *tlsData = theData; +} + + /***********************************************************************\ -| Find location for data | +| Find leaf node in which data nodes can be found | \***********************************************************************/ /********************** top level lookup **********************/ Nptr bplus_Lookup(Tree *B, keyT key) { - Nptr findNode; + Nptr leafNode; #ifdef DEBUG_BTREE sprintf(B->message, "LOOKUP: key %s.\n", key.name); @@ -183,21 +271,24 @@ Nptr bplus_Lookup(Tree *B, keyT key) #endif setfunkey(B, key); /* set search key */ - findNode = descendToLeaf(B, getroot(B)); /* start search from root node */ + leafNode = descendToLeaf(B, getroot(B)); /* start search from root node */ #ifdef DEBUG_BTREE - if (findNode) { + if (leafNode) { int slot; Nptr dataNode; dataT data; - slot = findKey(B, findNode, 1, numentries(findNode)); - dataNode = getnode(findNode, slot); + slot = getSlot(B, leafNode); + if (slot <= BTERROR) + return NONODE; + + dataNode = getnode(leafNode, slot); data = getdatavalue(dataNode); sprintf(B->message, "LOOKUP: %s found on page %d value (%d.%d.%d).\n", key.name, - getnodenumber(B, findNode), + getnodenumber(B, leafNode), data.fid.volume, data.fid.vnode, data.fid.unique); @@ -206,7 +297,7 @@ Nptr bplus_Lookup(Tree *B, keyT key) OutputDebugString(B->message); #endif - return findNode; + return leafNode; } /********************** `recurse' down B+tree **********************/ @@ -219,12 +310,16 @@ static Nptr descendToLeaf(Tree *B, Nptr curr) memset(prev, 0, sizeof(prev)); - for (depth = 0, slot = getSlot(B, curr); isinternal(curr); depth++, slot = getSlot(B, curr)) { + for (depth = 0, slot = getSlot(B, curr); (slot >= 0) && isinternal(curr); depth++, slot = getSlot(B, curr)) { prev[depth] = curr; if (slot == 0) curr = getfirstnode(curr); - else + else if (slot > 0) curr = getnode(curr, slot); + else /* BTERROR, BTLOWER, BTUPPER */ { + curr = NONODE; + break; + } #ifdef DEBUG_BTREE if ( !isnode(curr) ) DebugBreak(); @@ -260,24 +355,35 @@ static int findKey(Tree *B, Nptr curr, int lo, int hi) #ifdef DEBUG_BTREE if (findslot == BTERROR) { - sprintf(B->message, "Bad key ordering on node %d\n", getnodenumber(B, curr)); - OutputDebugString(B->message); + sprintf(B->message, "FINDKEY: (lo %d hi %d) Bad key ordering on node %d (0x%p)\n", + lo, hi, getnodenumber(B, curr), curr); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); } #endif } else { mid = (lo + hi) >> 1; switch (findslot = bestMatch(B, curr, mid)) { case BTLOWER: /* check lower half of range */ - findslot = findKey(B, curr, lo, mid - 1); /* never in 2-3+trees */ + if (mid > 1) + findslot = findKey(B, curr, lo, mid - 1); /* never in 2-3+trees */ break; case BTUPPER: /* check upper half of range */ - findslot = findKey(B, curr, mid + 1, hi); + if (mid < getfanout(B)) + findslot = findKey(B, curr, mid + 1, hi); break; case BTERROR: - sprintf(B->message, "Bad key ordering on node %d\n", getnodenumber(B, curr)); - OutputDebugString(B->message); + sprintf(B->message, "FINDKEY: (lo %d hi %d) Bad key ordering on node %d (0x%p)\n", + lo, hi, getnodenumber(B, curr), curr); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); } } + + if (isleaf(curr) && findslot == 0) + { + sprintf(B->message, "FINDKEY: (lo %d hi %d) findslot %d is invalid for leaf nodes, bad key ordering on node %d (0x%p)\n", + lo, hi, findslot, getnodenumber(B, curr), curr); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); + } return findslot; } @@ -285,43 +391,54 @@ static int findKey(Tree *B, Nptr curr, int lo, int hi) /************ comparison of key with a target key slot *************/ static int bestMatch(Tree *B, Nptr curr, int slot) { - int diff, comp, findslot; + int diff, comp=2, findslot; diff = comparekeys(B)(getfunkey(B), getkey(curr, slot), 0); - if (diff < 0) { /* also check previous slot */ - if ((slot == 1) || - ((comp = comparekeys(B)(getfunkey(B), getkey(curr, slot - 1), 0)) >= 0)) - { + if (diff == 0) { + findslot = slot; + } else if (diff < 0) { /* also check previous slot */ + if (slot == 1) { + if (isleaf(curr)) + findslot = BTLOWER; /* not found in the tree */ + else + findslot = 0; + } + else if ((comp = comparekeys(B)(getfunkey(B), getkey(curr, slot - 1), 0)) >= 0) { findslot = slot - 1; - } - else if (comp < diff) { + } else if (comp < diff) { findslot = BTERROR; /* inconsistent ordering of keys */ #ifdef DEBUG_BTREE DebugBreak(); #endif - } - else { + } else { findslot = BTLOWER; /* key must be below in node ordering */ } } else { /* or check following slot */ - if ((slot == numentries(curr)) || - ((comp = comparekeys(B)(getfunkey(B), getkey(curr, slot + 1), 0)) < 0)) - { + if (slot == numentries(curr)) { + if (isleaf(curr) && numentries(curr) == getfanout(B)) + findslot = BTUPPER; + else + findslot = slot; + } else if ((comp = comparekeys(B)(getfunkey(B), getkey(curr, slot + 1), 0)) < 0) { findslot = slot; - } - else if (comp == 0) { + } else if (comp == 0) { findslot = slot + 1; - } - else if (comp > diff) { + } else if (comp > diff) { findslot = BTERROR; /* inconsistent ordering of keys */ #ifdef DEBUG_BTREE DebugBreak(); #endif - } - else { + } else { findslot = BTUPPER; /* key must be above in node ordering */ } } + + if (findslot == BTERROR || isleaf(curr) && findslot == 0) + { + sprintf(B->message, "BESTMATCH: node %d (0x%p) slot %d diff %d comp %d findslot %d\n", + getnodenumber(B, curr), curr, slot, diff, comp, findslot); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); + } return findslot; } @@ -338,7 +455,7 @@ void insert(Tree *B, keyT key, dataT data) #ifdef DEBUG_BTREE sprintf(B->message, "INSERT: key %s.\n", key.name); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); #endif setfunkey(B, key); /* set insertion key */ @@ -367,6 +484,16 @@ descendSplit(Tree *B, Nptr curr) setsplitpath(B, curr); /* indicates where nodes must split */ slot = getSlot(B, curr); /* is null only if the root is empty */ + if (slot == BTERROR) + return NONODE; + + if (isleaf(curr)) { + if (slot == BTLOWER) + slot = 0; + else if (slot == BTUPPER) + slot = getfanout(B); + } + if (isinternal(curr)) { /* continue recursion to leaves */ if (slot == 0) downNode = descendSplit(B, getfirstnode(curr)); @@ -402,7 +529,7 @@ insertEntry(Tree *B, Nptr currNode, int slot, Nptr sibling, Nptr downPtr) #ifdef DEBUG_BTREE sprintf(B->message, "INSERT: slot %d, down node %d.\n", slot, getnodenumber(B, downPtr)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); #endif if (sibling == NONODE) { /* no split occurred */ @@ -606,7 +733,7 @@ void delete(Tree *B, keyT key) #ifdef DEBUG_BTREE sprintf(B->message, "DELETE: key %s.\n", key.name); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); #endif setfunkey(B, key); /* set deletion key */ @@ -615,7 +742,7 @@ void delete(Tree *B, keyT key) if (isnode(newNode)) { #ifdef DEBUG_BTREE sprintf(B->message, "DELETE: collapsing node %d", getnodenumber(B, newNode)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); #endif collapseRoot(B, getroot(B), newNode); /* remove root when superfluous */ } @@ -629,7 +756,7 @@ collapseRoot(Tree *B, Nptr oldRoot, Nptr newRoot) #ifdef DEBUG_BTREE sprintf(B->message, "COLLAPSE: old %d, new %d.\n", getnodenumber(B, oldRoot), getnodenumber(B, newRoot)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); showNode(B, "collapseRoot oldRoot", oldRoot); showNode(B, "collapseRoot newRoot", newRoot); #endif @@ -657,7 +784,7 @@ descendBalance(Tree *B, Nptr curr, Nptr left, Nptr right, Nptr lAnc, Nptr rAnc, lAnc ? getnodenumber(B, lAnc) : -1, rAnc ? getnodenumber(B, rAnc) : -1, parent ? getnodenumber(B, parent) : -1); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); #endif if (!isfew(curr)) @@ -666,6 +793,15 @@ descendBalance(Tree *B, Nptr curr, Nptr left, Nptr right, Nptr lAnc, Nptr rAnc, setmergepath(B, curr); /* mark which nodes may need rebalancing */ slot = getSlot(B, curr); + if (slot == BTERROR) + return NONODE; + + if (isleaf(curr)) { + if (slot == BTLOWER) + slot = 0; + else if (slot == BTUPPER) + slot = getfanout(B); + } if (isinternal(curr)) /* set up next recursion call's parameters */ { @@ -733,14 +869,17 @@ descendBalance(Tree *B, Nptr curr, Nptr left, Nptr right, Nptr lAnc, Nptr rAnc, * options. So we must determine if any of the next nodes * are the one we are looking for. */ - Nptr dataNode = newNode; + Nptr prev = newNode; while ( next ) { if (!comparekeys(B)(getfunkey(B), getdatakey(next), EXACT_MATCH)) { /* we found the one to delete */ - getdatanext(dataNode) = getdatanext(next); + getdatanext(prev) = getdatanext(next); putFreeNode(B, next); + break; } + prev = next; + next = getdatanext(next); } /* do not delete the key */ @@ -780,7 +919,7 @@ descendBalance(Tree *B, Nptr curr, Nptr left, Nptr right, Nptr lAnc, Nptr rAnc, if (newMe != NONODE) { /* this node removal doesn't consider duplicates */ #ifdef DEBUG_BTREE sprintf(B->message, "descendBalance DELETE: slot %d, node %d.\n", slot, getnodenumber(B, curr)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); #endif removeEntry(B, curr, slot + (newMe != newNode)); /* removes one of two */ @@ -834,7 +973,7 @@ descendBalance(Tree *B, Nptr curr, Nptr left, Nptr right, Nptr lAnc, Nptr rAnc, #ifdef DEBUG_BTREE sprintf(B->message, "descendBalance returns %d\n", getnodenumber(B, newNode)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); #endif return newNode; } @@ -866,7 +1005,7 @@ merge(Tree *B, Nptr left, Nptr right, Nptr anchor) #ifdef DEBUG_BTREE sprintf(B->message, "MERGE: left %d, right %d.\n", getnodenumber(B, left), getnodenumber(B, right)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); showNode(B, "pre-merge anchor", anchor); showNode(B, "pre-merge left", left); showNode(B, "pre-merge right", right); @@ -880,6 +1019,8 @@ merge(Tree *B, Nptr left, Nptr right, Nptr anchor) #endif setfunkey(B, getkey(right, 1)); /* defined but maybe just deleted */ z = getSlot(B, anchor); /* needs the just calculated key */ + if (z <= BTERROR) + return NONODE; setfunkey(B, getkey(anchor, z)); /* set slot to delete in anchor */ setentry(left, numentries(left), getfunkey(B), getfirstnode(right)); } @@ -924,7 +1065,7 @@ shift(Tree *B, Nptr left, Nptr right, Nptr anchor) getnodenumber(B, left), getnodenumber(B, right), getnodenumber(B, anchor)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); showNode(B, "pre-shift anchor", anchor); showNode(B, "pre-shift left", left); showNode(B, "pre-shift right", right); @@ -937,6 +1078,8 @@ shift(Tree *B, Nptr left, Nptr right, Nptr anchor) x = numentries(left) + y; setfunkey(B, getkey(right, y + 1 - i)); /* set new anchor key value */ z = getSlot(B, anchor); /* find slot in anchor node */ + if (z <= BTERROR) + return NONODE; #ifdef DEBUG_BTREE if (z == 0 && !isroot(anchor)) DebugBreak(); @@ -974,7 +1117,11 @@ shift(Tree *B, Nptr left, Nptr right, Nptr anchor) pushentry(right, z, y); setfunkey(B, getkey(left, x)); /* set new anchor key value */ - z = getSlot(B, anchor) + 1; + z = getSlot(B, anchor); + if (z <= BTERROR) + return NONODE; + z += 1; + if (i) { decentries(left); incentries(right); @@ -1016,7 +1163,7 @@ shift(Tree *B, Nptr left, Nptr right, Nptr anchor) #ifdef DEBUG_BTREE sprintf(B->message, "SHIFT: left %d, right %d.\n", getnodenumber(B, left), getnodenumber(B, right)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); showNode(B, "post-shift anchor", anchor); showNode(B, "post-shift left", left); showNode(B, "post-shift right", right); @@ -1234,61 +1381,61 @@ void showNode(Tree *B, const char * where, Nptr n) int x; sprintf(B->message, "- -- -- -- -- -- -- -- -- -- -- -- -\n"); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| %-20s |\n", where); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| node %6d ", getnodenumber(B, n)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, " magic %4x |\n", getmagic(n)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "- -- -- -- -- -- -- -- -- -- -- -- -\n"); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| flags %1d%1d%1d%1d ", isfew(n), isfull(n), isroot(n), isleaf(n)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| keys = %5d ", numentries(n)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| node = %6d |\n", getnodenumber(B, getfirstnode(n))); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); for (x = 1; x <= numentries(n); x++) { sprintf(B->message, "| entry %6d ", x); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| key = %6s ", getkey(n, x).name); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| node = %6d |\n", getnodenumber(B, getnode(n, x))); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); } sprintf(B->message, "- -- -- -- -- -- -- -- -- -- -- -- -\n"); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); } /****************** B+tree class variable printer ******************/ void showBtree(Tree *B) { sprintf(B->message, "- -- -- -- -- -- -\n"); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| B+tree %10p |\n", (void *) B); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "- -- -- -- -- -- -\n"); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| root %6d |\n", getnodenumber(B, getroot(B))); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| leaf %6d |\n", getnodenumber(B, getleaf(B))); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| fanout %3d |\n", getfanout(B) + 1); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| minfanout %3d |\n", getminfanout(B, getroot(B)) + 1); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| height %3d |\n", gettreeheight(B)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| freenode %6d |\n", getnodenumber(B, getfirstfreenode(B))); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| theKey %6s |\n", getfunkey(B).name); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "| theData %d.%d.%d |\n", getfundata(B).volume, getfundata(B).vnode, getfundata(B).unique); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); sprintf(B->message, "- -- -- -- -- -- -\n"); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); } void @@ -1300,7 +1447,7 @@ listBtreeNodes(Tree *B, const char * parent_desc, Nptr node) if (isntnode(node)) { sprintf(B->message, "%s - NoNode!!!\n"); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); return; } @@ -1310,7 +1457,7 @@ listBtreeNodes(Tree *B, const char * parent_desc, Nptr node) sprintf(B->message, "%s - data node %d (%d.%d.%d)\n", parent_desc, getnodenumber(B, node), data.fid.volume, data.fid.vnode, data.fid.unique); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); return; } else showNode(B, parent_desc, node); @@ -1318,7 +1465,7 @@ listBtreeNodes(Tree *B, const char * parent_desc, Nptr node) if ( isinternal(node) || isroot(node) ) { sprintf(thisnode, "parent %6d", getnodenumber(B , node)); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); for ( i= isinternal(node) ? 0 : 1; i <= numentries(node); i++ ) { listBtreeNodes(B, thisnode, i == 0 ? getfirstnode(node) : getnode(node, i)); } @@ -1336,19 +1483,19 @@ listBtreeValues(Tree *B, Nptr n, int num) for (slot = 1; (n != NONODE) && num && numentries(n); num--) { if (comparekeys(B)(getkey(n, slot),prev, 0) < 0) { sprintf(B->message, "BOMB %8s\n", getkey(n, slot).name); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); DebugBreak(); } prev = getkey(n, slot); data = getdatavalue(getnode(n, slot)); sprintf(B->message, "%8s (%d.%d.%d)\n", prev.name, data.fid.volume, data.fid.vnode, data.fid.unique); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); if (++slot > numentries(n)) n = getnextnode(n), slot = 1; } sprintf(B->message, "\n\n"); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); } /******************** entire B+tree data printer *******************/ @@ -1370,7 +1517,7 @@ findAllBtreeValues(Tree *B) for (slot = 1; (n != NONODE) && num && numentries(n); num--) { if (comparekeys(B)(getkey(n, slot),prev, 0) < 0) { sprintf(B->message,"BOMB %8s\n", getkey(n, slot).name); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); #ifdef DEBUG_BTREE DebugBreak(); #endif @@ -1382,7 +1529,7 @@ findAllBtreeValues(Tree *B) sprintf(B->message,"BOMB %8s cannot be found\n", prev.name); else sprintf(B->message,"BOMB lookup(%8s) finds wrong node\n", prev.name); - OutputDebugString(B->message); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message)); #ifdef DEBUG_BTREE DebugBreak(); #endif @@ -1396,16 +1543,21 @@ findAllBtreeValues(Tree *B) /* * the return must be -1, 0, or 1. stricmp() in MSVC 8.0 * does not return only those values. + * + * the sorting of the tree is by case insensitive sort order + * therefore, unless the strings actually match via a case + * insensitive search do we want to perform the case sensitive + * match. Otherwise, the search order might be considered + * to be inconsistent when the EXACT_MATCH flag is set. */ static int compareKeys(keyT key1, keyT key2, int flags) { int comp; - if (flags & EXACT_MATCH) + comp = stricmp(key1.name, key2.name); + if (comp == 0 && (flags & EXACT_MATCH)) comp = strcmp(key1.name, key2.name); - else - comp = stricmp(key1.name, key2.name); return (comp < 0 ? -1 : (comp > 0 ? 1 : 0)); } @@ -1431,6 +1583,8 @@ cm_BPlusDirLookup(cm_dirOp_t * op, char *entry, cm_fid_t * cfid) goto done; } + lock_AssertAny(&op->scp->dirlock); + QueryPerformanceCounter(&start); leafNode = bplus_Lookup(op->scp->dirBplus, key); @@ -1446,7 +1600,12 @@ cm_BPlusDirLookup(cm_dirOp_t * op, char *entry, cm_fid_t * cfid) * If we have an ambiguous match, return an error. * If we have only one inexact match, return that. */ - slot = findKey(op->scp->dirBplus, leafNode, 1, numentries(leafNode)); + slot = getSlot(op->scp->dirBplus, leafNode); + if (slot <= BTERROR) { + op->scp->dirDataVersion = 0; + rc = (slot == BTERROR ? EINVAL : ENOENT); + goto done; + } firstDataNode = getnode(leafNode, slot); for ( dataNode = firstDataNode; dataNode; dataNode = nextDataNode) { @@ -1505,6 +1664,9 @@ long cm_BPlusDirCreateEntry(cm_dirOp_t * op, char *entry, cm_fid_t * cfid) goto done; } + + lock_AssertWrite(&op->scp->dirlock); + data.fid.cell = cfid->cell; data.fid.volume = cfid->volume; data.fid.vnode = cfid->vnode; @@ -1556,6 +1718,8 @@ int cm_BPlusDirDeleteEntry(cm_dirOp_t * op, char *entry) goto done; } + lock_AssertWrite(&op->scp->dirlock); + QueryPerformanceCounter(&start); bplus_remove_entry++; @@ -1579,7 +1743,12 @@ int cm_BPlusDirDeleteEntry(cm_dirOp_t * op, char *entry) * If we have an ambiguous match, return an error. * If we have only one inexact match, return that. */ - slot = findKey(op->scp->dirBplus, leafNode, 1, numentries(leafNode)); + slot = getSlot(op->scp->dirBplus, leafNode); + if (slot <= BTERROR) { + op->scp->dirDataVersion = 0; + rc = EINVAL; + goto done; + } firstDataNode = getnode(leafNode, slot); for ( dataNode = firstDataNode; dataNode; dataNode = nextDataNode) { @@ -1631,7 +1800,13 @@ int cm_BPlusDirDeleteEntry(cm_dirOp_t * op, char *entry) * If we have an ambiguous match, return an error. * If we have only one inexact match, return that. */ - slot = findKey(op->scp->dirBplus, leafNode, 1, numentries(leafNode)); + slot = getSlot(op->scp->dirBplus, leafNode); + if (slot <= BTERROR) { + op->scp->dirDataVersion = 0; + rc = EINVAL; + goto done; + + } firstDataNode = getnode(leafNode, slot); for ( dataNode = firstDataNode; dataNode; dataNode = nextDataNode) { @@ -1655,11 +1830,11 @@ int cm_BPlusDirDeleteEntry(cm_dirOp_t * op, char *entry) } if (rc != CM_ERROR_AMBIGUOUS_FILENAME) { - if (longname) { - key.name = longname; - delete(op->scp->dirBplus, key); - key.name = entry; - } + if (longname) { + key.name = longname; + delete(op->scp->dirBplus, key); + key.name = entry; + } delete(op->scp->dirBplus, key); } } @@ -1720,7 +1895,9 @@ long cm_BPlusDirBuildTree(cm_scache_t *scp, cm_user_t *userp, cm_req_t* reqp) osi_hyper_t thyper; LARGE_INTEGER start, end; - osi_assert(scp->dirBplus == NULL); + osi_assertx(scp->dirBplus == NULL, "cm_BPlusDirBuildTree called on non-empty tree"); + + lock_AssertWrite(&scp->dirlock); QueryPerformanceCounter(&start); bplus_build_tree++; @@ -1740,6 +1917,9 @@ long cm_BPlusDirBuildTree(cm_scache_t *scp, cm_user_t *userp, cm_req_t* reqp) bplus_build_time += (end.QuadPart - start.QuadPart); +#if 0 + cm_BPlusDirEnumTest(scp, 1); +#endif return rc; } @@ -1799,4 +1979,260 @@ void cm_BPlusDumpStats(void) afsi_log(" Build: %-16I64d", bplus_build_time); afsi_log(" Free: %-16I64d", bplus_free_time); } + +static cm_direnum_t * +cm_BPlusEnumAlloc(afs_uint32 entries) +{ + cm_direnum_t * enump; + size_t size; + + if (entries == 0) + return NULL; + + size = sizeof(cm_direnum_t)+(entries-1)*sizeof(cm_direnum_entry_t); + enump = (cm_direnum_t *)malloc(size); + memset(enump, 0, size); + enump->count = entries; + return enump; +} + +long +cm_BPlusDirEnumerate(cm_scache_t *scp, afs_uint32 locked, + char * maskp, cm_direnum_t **enumpp) +{ + afs_uint32 count = 0, slot, numentries; + Nptr leafNode = NONODE, nextLeafNode; + Nptr firstDataNode, dataNode, nextDataNode; + cm_direnum_t * enump; + long rc = 0; + char buffer[512]; + + osi_Log0(afsd_logp, "cm_BPlusDirEnumerate start"); + + /* Read lock the bplus tree so the data can't change */ + if (!locked) + lock_ObtainRead(&scp->dirlock); + + if (scp->dirBplus == NULL) { + osi_Log0(afsd_logp, "cm_BPlusDirEnumerate No BPlus Tree"); + goto done; + } + + /* Compute the number of entries */ + for (count = 0, leafNode = getleaf(scp->dirBplus); leafNode; leafNode = nextLeafNode) { + + for ( slot = 1, numentries = numentries(leafNode); slot <= numentries; slot++) { + firstDataNode = getnode(leafNode, slot); + + for ( dataNode = firstDataNode; dataNode; dataNode = nextDataNode) { + if (maskp == NULL) { + /* name is in getdatakey(dataNode) */ + if (getdatavalue(dataNode).longname != NULL || + cm_Is8Dot3(getdatakey(dataNode).name)) + count++; + } else { + if (cm_Is8Dot3(getdatakey(dataNode).name) && + smb_V3MatchMask(getdatakey(dataNode).name, maskp, CM_FLAG_CASEFOLD) || + getdatavalue(dataNode).longname == NULL && + smb_V3MatchMask(getdatavalue(dataNode).longname, maskp, CM_FLAG_CASEFOLD)) + count++; + } + nextDataNode = getdatanext(dataNode); + } + } + + nextLeafNode = getnextnode(leafNode); + } + + sprintf(buffer, "BPlusTreeEnumerate count = %d", count); + osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, buffer)); + + /* Allocate the enumeration object */ + enump = cm_BPlusEnumAlloc(count); + if (enump == NULL) { + osi_Log0(afsd_logp, "cm_BPlusDirEnumerate Alloc failed"); + rc = ENOMEM; + goto done; + } + + /* Copy the name and fid for each longname entry into the enumeration */ + for (count = 0, leafNode = getleaf(scp->dirBplus); leafNode; leafNode = nextLeafNode) { + + for ( slot = 1, numentries = numentries(leafNode); slot <= numentries; slot++) { + firstDataNode = getnode(leafNode, slot); + + for ( dataNode = firstDataNode; dataNode; dataNode = nextDataNode) { + char * name; + int hasShortName; + int includeIt = 0; + + if (maskp == NULL) { + if (getdatavalue(dataNode).longname != NULL || + cm_Is8Dot3(getdatakey(dataNode).name)) + { + includeIt = 1; + } + } else { + if (cm_Is8Dot3(getdatakey(dataNode).name) && + smb_V3MatchMask(getdatakey(dataNode).name, maskp, CM_FLAG_CASEFOLD) || + getdatavalue(dataNode).longname == NULL && + smb_V3MatchMask(getdatavalue(dataNode).longname, maskp, CM_FLAG_CASEFOLD)) + { + includeIt = 1; + } + } + + if (includeIt) { + if (getdatavalue(dataNode).longname) { + name = strdup(getdatavalue(dataNode).longname); + hasShortName = 1; + } else { + name = strdup(getdatakey(dataNode).name); + hasShortName = 0; + } + + if (name == NULL) { + osi_Log0(afsd_logp, "cm_BPlusDirEnumerate strdup failed"); + rc = ENOMEM; + goto done; + } + enump->entry[count].name = name; + enump->entry[count].fid = getdatavalue(dataNode).fid; + if (hasShortName) + strncpy(enump->entry[count].shortName, getdatakey(dataNode).name, + sizeof(enump->entry[count].shortName)); + else + enump->entry[count].shortName[0] = '\0'; + count++; + } + nextDataNode = getdatanext(dataNode); + } + } + + nextLeafNode = getnextnode(leafNode); + } + + done: + if (!locked) + lock_ReleaseRead(&scp->dirlock); + + /* if we failed, cleanup any mess */ + if (rc != 0) { + osi_Log0(afsd_logp, "cm_BPlusDirEnumerate rc != 0"); + if (enump) { + for ( count = 0; count < enump->count && enump->entry[count].name; count++ ) { + free(enump->entry[count].name); + } + free(enump); + enump = NULL; + } + } + + osi_Log0(afsd_logp, "cm_BPlusDirEnumerate end"); + *enumpp = enump; + return rc; +} + +long +cm_BPlusDirNextEnumEntry(cm_direnum_t *enump, cm_direnum_entry_t **entrypp) +{ + if (enump == NULL || entrypp == NULL || enump->next > enump->count) { + if (entrypp) + *entrypp = NULL; + osi_Log0(afsd_logp, "cm_BPlusDirNextEnumEntry invalid input"); + return CM_ERROR_INVAL; \ + } + + *entrypp = &enump->entry[enump->next++]; + if ( enump->next == enump->count ) { + osi_Log0(afsd_logp, "cm_BPlusDirNextEnumEntry STOPNOW"); + return CM_ERROR_STOPNOW; + } + else { + osi_Log0(afsd_logp, "cm_BPlusDirNextEnumEntry SUCCESS"); + return 0; + } +} + +long +cm_BPlusDirFreeEnumeration(cm_direnum_t *enump) +{ + afs_uint32 count; + + osi_Log0(afsd_logp, "cm_BPlusDirFreeEnumeration"); + + if (enump) { + for ( count = 0; count < enump->count && enump->entry[count].name; count++ ) { + free(enump->entry[count].name); + } + free(enump); + } + return 0; +} + +long +cm_BPlusDirEnumTest(cm_scache_t * dscp, afs_uint32 locked) +{ + cm_direnum_t * enump = NULL; + cm_direnum_entry_t * entryp; + long code; + + osi_Log0(afsd_logp, "cm_BPlusDirEnumTest start"); + + for (code = cm_BPlusDirEnumerate(dscp, locked, NULL, &enump); code == 0; ) { + code = cm_BPlusDirNextEnumEntry(enump, &entryp); + if (code == 0 || code == CM_ERROR_STOPNOW) { + char buffer[1024]; + cm_scache_t *scp; + char * type = "ScpNotFound"; + afs_uint64 dv = -1; + + scp = cm_FindSCache(&entryp->fid); + if (scp) { + switch (scp->fileType) { + case CM_SCACHETYPE_FILE : + type = "File"; + break; + case CM_SCACHETYPE_DIRECTORY : + type = "Directory"; + break; + case CM_SCACHETYPE_SYMLINK : + type = "Symlink"; + break; + case CM_SCACHETYPE_MOUNTPOINT: + type = "MountPoint"; + break; + case CM_SCACHETYPE_DFSLINK : + type = "Dfs"; + break; + case CM_SCACHETYPE_INVALID : + type = "Invalid"; + break; + default: + type = "Unknown"; + break; + } + + dv = scp->dataVersion; + cm_ReleaseSCache(scp); + } + + sprintf(buffer, "'%s' Fid = (%d,%d,%d,%d) Short = '%s' Type %s DV %I64d", + entryp->name, + entryp->fid.cell, entryp->fid.volume, entryp->fid.vnode, entryp->fid.unique, + entryp->shortName, + type, + dv); + + osi_Log0(afsd_logp, osi_LogSaveString(afsd_logp, buffer)); + } + } + + if (enump) + cm_BPlusDirFreeEnumeration(enump); + + osi_Log0(afsd_logp, "cm_BPlusDirEnumTest end"); + + return 0; +} #endif /* USE_BPLUS */ diff --git a/src/WINNT/afsd/cm_btree.h b/src/WINNT/afsd/cm_btree.h index b157e58c1b..695ee3339f 100644 --- a/src/WINNT/afsd/cm_btree.h +++ b/src/WINNT/afsd/cm_btree.h @@ -107,10 +107,8 @@ typedef struct tree { unsigned int height; /* nodes traversed from root to leaves */ Nptr pool; /* list of all nodes */ Nptr empty; /* list of empty nodes */ - keyT theKey; /* the key value used in tree operations */ - dataT theData; /* data used for insertions/deletions */ union { /* nodes to change in insert and delete */ - Nptr split; + Nptr split; /* protected by scp->dirlock write-lock */ Nptr merge; } branch; KeyCmp keycmp; /* pointer to function comparing two keys */ @@ -145,10 +143,34 @@ long cm_BPlusDirBuildTree(cm_scache_t *scp, cm_user_t *userp, cm_req_t* reqp); void cm_BPlusDumpStats(void); int cm_MemDumpBPlusStats(FILE *outputFile, char *cookie, int lock); + +/******************* directory enumeration operations ****************/ +typedef struct cm_direnum_entry { + char * name; + cm_fid_t fid; + char shortName[13]; +} cm_direnum_entry_t; + +typedef struct cm_direnum { + afs_uint32 count; + afs_uint32 next; + cm_direnum_entry_t entry[1]; +} cm_direnum_t; + +long cm_BPlusDirEnumerate(cm_scache_t *scp, afs_uint32 locked, char *maskp, cm_direnum_t **enumpp); +long cm_BPlusDirNextEnumEntry(cm_direnum_t *enump, cm_direnum_entry_t **entrypp); +long cm_BPlusDirFreeEnumeration(cm_direnum_t *enump); +long cm_BPlusDirEnumTest(cm_scache_t * dscp, afs_uint32 locked); + +long cm_InitBPlusDir(void); + +/************ Statistic Counter ***************************************/ + extern afs_uint32 bplus_free_tree; extern afs_uint32 bplus_dv_error; extern afs_uint64 bplus_free_time; + /************ Accessor Macros *****************************************/ /* low level definition of Nptr value usage */ @@ -227,14 +249,6 @@ extern afs_uint64 bplus_free_time; #define xferentry(j, q, v, z) _xferentry(j, q, v, z) #define setentry(j, q, v, z) _setentry(j, q, v, z) - -/* access key and data values for B+tree methods */ -/* pass values to getSlot(), descend...() */ -#define getfunkey(B) ((B)->theKey) -#define getfundata(B) ((B)->theData) -#define setfunkey(B,v) ((B)->theKey = (v)) -#define setfundata(B,v) ((B)->theData = (v)) - /* define number of B+tree nodes for free node pool */ #define getpoolsize(B) ((B)->poolsize) #define setpoolsize(B,v) ((B)->poolsize = (v)) diff --git a/src/WINNT/afsd/cm_buf.c b/src/WINNT/afsd/cm_buf.c index 84c216c0cd..52658f18e4 100644 --- a/src/WINNT/afsd/cm_buf.c +++ b/src/WINNT/afsd/cm_buf.c @@ -91,7 +91,7 @@ static int buf_ShutdownFlag = 0; void buf_HoldLocked(cm_buf_t *bp) { - osi_assert(bp->magic == CM_BUF_MAGIC); + osi_assertx(bp->magic == CM_BUF_MAGIC,"incorrect cm_buf_t magic"); bp->refCount++; } @@ -107,12 +107,12 @@ void buf_Hold(cm_buf_t *bp) void buf_ReleaseLocked(cm_buf_t *bp) { /* ensure that we're in the LRU queue if our ref count is 0 */ - osi_assert(bp->magic == CM_BUF_MAGIC); + osi_assertx(bp->magic == CM_BUF_MAGIC,"incorrect cm_buf_t magic"); #ifdef DEBUG if (bp->refCount == 0) osi_panic("buf refcount 0",__FILE__,__LINE__);; #else - osi_assert(bp->refCount > 0); + osi_assertx(bp->refCount > 0, "cm_buf_t refCount == 0"); #endif if (--bp->refCount == 0) { if (!(bp->flags & CM_BUF_INLRU)) { @@ -327,8 +327,10 @@ long buf_Init(int newFile, cm_buf_ops_t *opsp, afs_uint64 nbuffers) cm_data.buf_allp = NULL; for (i=0; i= cm_data.bufHeaderBaseAddress && bp < (cm_buf_t *)cm_data.bufDataBaseAddress); - osi_assert(data >= cm_data.bufDataBaseAddress && data < cm_data.bufEndOfData); + osi_assertx(bp >= cm_data.bufHeaderBaseAddress && bp < (cm_buf_t *)cm_data.bufDataBaseAddress, + "invalid cm_buf_t address"); + osi_assertx(data >= cm_data.bufDataBaseAddress && data < cm_data.bufEndOfData, + "invalid cm_buf_t data address"); /* allocate and zero some storage */ memset(bp, 0, sizeof(cm_buf_t)); @@ -482,8 +484,8 @@ void buf_WaitIO(cm_scache_t * scp, cm_buf_t *bp) int release = 0; if (scp) - osi_assert(scp->magic == CM_SCACHE_MAGIC); - osi_assert(bp->magic == CM_BUF_MAGIC); + osi_assertx(scp->magic == CM_SCACHE_MAGIC, "invalid cm_scache_t magic"); + osi_assertx(bp->magic == CM_BUF_MAGIC, "invalid cm_buf_t magic"); while (1) { /* if no IO is happening, we're done */ @@ -595,7 +597,7 @@ long buf_CleanAsyncLocked(cm_buf_t *bp, cm_req_t *reqp) cm_scache_t * scp = NULL; osi_hyper_t offset; - osi_assert(bp->magic == CM_BUF_MAGIC); + osi_assertx(bp->magic == CM_BUF_MAGIC, "invalid cm_buf_t magic"); while ((bp->flags & CM_BUF_DIRTY) == CM_BUF_DIRTY) { isdirty = 1; @@ -675,7 +677,7 @@ void buf_Recycle(cm_buf_t *bp) cm_buf_t *tbp; cm_buf_t *prevBp, *nextBp; - osi_assert(bp->magic == CM_BUF_MAGIC); + osi_assertx(bp->magic == CM_BUF_MAGIC, "invalid cm_buf_t magic"); /* if we get here, we know that the buffer still has a 0 ref count, * and that it is clean and has no currently pending I/O. This is @@ -687,8 +689,9 @@ void buf_Recycle(cm_buf_t *bp) osi_Log3( buf_logp, "buf_Recycle recycles 0x%p, off 0x%x:%08x", bp, bp->offset.HighPart, bp->offset.LowPart); - osi_assert(bp->refCount == 0); - osi_assert(!(bp->flags & (CM_BUF_READING | CM_BUF_WRITING | CM_BUF_DIRTY))); + osi_assertx(bp->refCount == 0, "cm_buf_t refcount != 0"); + osi_assertx(!(bp->flags & (CM_BUF_READING | CM_BUF_WRITING | CM_BUF_DIRTY)), + "incorrect cm_buf_t flags"); lock_AssertWrite(&buf_globalLock); if (bp->flags & CM_BUF_INHASH) { @@ -1036,7 +1039,7 @@ long buf_Get(struct cm_scache *scp, osi_hyper_t *offsetp, cm_buf_t **bufpp) */ if (created) { /* load the page; freshly created pages should be idle */ - osi_assert(!(bp->flags & (CM_BUF_READING | CM_BUF_WRITING))); + osi_assertx(!(bp->flags & (CM_BUF_READING | CM_BUF_WRITING)), "incorrect cm_buf_t flags"); /* start the I/O; may drop lock */ bp->flags |= CM_BUF_READING; @@ -1146,7 +1149,7 @@ long buf_CountFreeList(void) long buf_CleanAsync(cm_buf_t *bp, cm_req_t *reqp) { long code; - osi_assert(bp->magic == CM_BUF_MAGIC); + osi_assertx(bp->magic == CM_BUF_MAGIC, "invalid cm_buf_t magic"); lock_ObtainMutex(&bp->mx); code = buf_CleanAsyncLocked(bp, reqp); @@ -1158,7 +1161,7 @@ long buf_CleanAsync(cm_buf_t *bp, cm_req_t *reqp) /* wait for a buffer's cleaning to finish */ void buf_CleanWait(cm_scache_t * scp, cm_buf_t *bp) { - osi_assert(bp->magic == CM_BUF_MAGIC); + osi_assertx(bp->magic == CM_BUF_MAGIC, "invalid cm_buf_t magic"); lock_ObtainMutex(&bp->mx); if (bp->flags & CM_BUF_WRITING) { @@ -1174,8 +1177,8 @@ void buf_CleanWait(cm_scache_t * scp, cm_buf_t *bp) */ void buf_SetDirty(cm_buf_t *bp, afs_uint32 offset, afs_uint32 length) { - osi_assert(bp->magic == CM_BUF_MAGIC); - osi_assert(bp->refCount > 0); + osi_assertx(bp->magic == CM_BUF_MAGIC, "invalid cm_buf_t magic"); + osi_assertx(bp->refCount > 0, "cm_buf_t refcount 0"); lock_ObtainWrite(&buf_globalLock); if (bp->flags & CM_BUF_DIRTY) { @@ -1425,7 +1428,7 @@ long buf_Truncate(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp, * visible again. */ bufferPos = sizep->LowPart & (cm_data.buf_blockSize - 1); - osi_assert(bufferPos != 0); + osi_assertx(bufferPos != 0, "non-zero bufferPos"); memset(bufp->datap + bufferPos, 0, cm_data.buf_blockSize - bufferPos); } @@ -1547,13 +1550,14 @@ long buf_FlushCleanPages(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp) } /* Must be called with scp->mx held */ -long buf_ForceDataVersion(cm_scache_t * scp, afs_uint32 fromVersion, afs_uint32 toVersion) +long buf_ForceDataVersion(cm_scache_t * scp, afs_uint64 fromVersion, afs_uint64 toVersion) { cm_buf_t * bp; - cm_buf_t * nbp; unsigned int i; int found = 0; + lock_AssertMutex(&scp->mx); + i = BUF_FILEHASH(&scp->fid); lock_ObtainWrite(&buf_globalLock); @@ -1689,7 +1693,7 @@ int cm_DumpBufHashTable(FILE *outputFile, char *cookie, int lock) { StringCbPrintfA(output, sizeof(output), "%s bp=0x%08X, hash=%d, fid (cell=%d, volume=%d, " - "vnode=%d, unique=%d), offset=%x:%08x, dv=%d, " + "vnode=%d, unique=%d), offset=%x:%08x, dv=%I64d, " "flags=0x%x, cmFlags=0x%x, refCount=%d\r\n", cookie, (void *)bp, i, bp->fid.cell, bp->fid.volume, bp->fid.vnode, bp->fid.unique, bp->offset.HighPart, @@ -1707,7 +1711,7 @@ int cm_DumpBufHashTable(FILE *outputFile, char *cookie, int lock) for(bp = cm_data.buf_freeListEndp; bp; bp=(cm_buf_t *) osi_QPrev(&bp->q)) { StringCbPrintfA(output, sizeof(output), "%s bp=0x%08X, fid (cell=%d, volume=%d, " - "vnode=%d, unique=%d), offset=%x:%08x, dv=%d, " + "vnode=%d, unique=%d), offset=%x:%08x, dv=%I64d, " "flags=0x%x, cmFlags=0x%x, refCount=%d\r\n", cookie, (void *)bp, bp->fid.cell, bp->fid.volume, bp->fid.vnode, bp->fid.unique, bp->offset.HighPart, @@ -1723,7 +1727,7 @@ int cm_DumpBufHashTable(FILE *outputFile, char *cookie, int lock) for(bp = cm_data.buf_dirtyListEndp; bp; bp=(cm_buf_t *) osi_QPrev(&bp->q)) { StringCbPrintfA(output, sizeof(output), "%s bp=0x%08X, fid (cell=%d, volume=%d, " - "vnode=%d, unique=%d), offset=%x:%08x, dv=%d, " + "vnode=%d, unique=%d), offset=%x:%08x, dv=%I64d, " "flags=0x%x, cmFlags=0x%x, refCount=%d\r\n", cookie, (void *)bp, bp->fid.cell, bp->fid.volume, bp->fid.vnode, bp->fid.unique, bp->offset.HighPart, diff --git a/src/WINNT/afsd/cm_buf.h b/src/WINNT/afsd/cm_buf.h index f2536f3e3b..1c9b46f780 100644 --- a/src/WINNT/afsd/cm_buf.h +++ b/src/WINNT/afsd/cm_buf.h @@ -78,7 +78,7 @@ typedef struct cm_buf { cm_user_t *userp; /* user who wrote to the buffer last */ /* fields added for the CM; locked by scp->mx */ - afs_uint32 dataVersion; /* data version of this page */ + afs_uint64 dataVersion; /* data version of this page */ afs_uint32 cmFlags; /* flags for cm */ /* syncop state */ @@ -201,7 +201,7 @@ extern long buf_DirtyBuffersExist(cm_fid_t * fidp); extern long buf_CleanDirtyBuffers(cm_scache_t *scp); -extern long buf_ForceDataVersion(cm_scache_t * scp, afs_uint32 fromVersion, afs_uint32 toVersion); +extern long buf_ForceDataVersion(cm_scache_t * scp, afs_uint64 fromVersion, afs_uint64 toVersion); /* error codes */ #define CM_BUF_EXISTS 1 /* buffer exists, and shouldn't */ diff --git a/src/WINNT/afsd/cm_callback.c b/src/WINNT/afsd/cm_callback.c index c296bd5128..a9689ffbd2 100644 --- a/src/WINNT/afsd/cm_callback.c +++ b/src/WINNT/afsd/cm_callback.c @@ -34,6 +34,10 @@ /* read/write lock for all global storage in this module */ osi_rwlock_t cm_callbackLock; +afs_int32 cm_OfflineROIsValid = 0; + +afs_int32 cm_giveUpAllCBs = 0; + #ifdef AFS_FREELANCE_CLIENT extern osi_mutex_t cm_Freelance_Lock; #endif @@ -265,6 +269,11 @@ void cm_RevokeVolumeCallback(struct rx_call *callp, cm_cell_t *cellp, AFSFid *fi cm_CallbackNotifyChange(scp); lock_ObtainWrite(&cm_scacheLock); cm_ReleaseSCacheNoLock(scp); + + if (scp->flags & CM_SCACHEFLAG_PURERO && scp->volp) { + scp->volp->cbExpiresRO = 0; + } + } } /* search one hash bucket */ } /* search all hash buckets */ @@ -482,6 +491,10 @@ SRXAFSCB_InitCallBackState(struct rx_call *callp) cm_CallbackNotifyChange(scp); lock_ObtainWrite(&cm_scacheLock); cm_ReleaseSCacheNoLock(scp); + + if (discarded && (scp->flags & CM_SCACHEFLAG_PURERO) && scp->volp && scp->volp->cbExpiresRO != 0) + scp->volp->cbExpiresRO = 0; + } /* search one hash bucket */ } /* search all hash buckets */ @@ -737,9 +750,12 @@ SRXAFSCB_GetCE(struct rx_call *callp, long index, AFSDBCacheEntry *cep) cep->lock.pid_writer = 0; cep->lock.src_indicator = 0; cep->Length = scp->length.LowPart; - cep->DataVersion = scp->dataVersion; + cep->DataVersion = (afs_uint32)(scp->dataVersion & 0xFFFFFFFF); cep->callback = afs_data_pointer_to_int32(scp->cbServerp); - cep->cbExpires = scp->cbExpires; + if (scp->flags & CM_SCACHEFLAG_PURERO && scp->volp) + cep->cbExpires = scp->volp->cbExpiresRO; + else + cep->cbExpires = scp->cbExpires; cep->refCount = scp->refCount; cep->opens = scp->openReads; cep->writers = scp->openWrites; @@ -848,9 +864,12 @@ SRXAFSCB_GetCE64(struct rx_call *callp, long index, AFSDBCacheEntry64 *cep) #else cep->Length = (afs_int64) scp->length.QuadPart; #endif - cep->DataVersion = scp->dataVersion; + cep->DataVersion = (afs_uint32)(scp->dataVersion & 0xFFFFFFFF); cep->callback = afs_data_pointer_to_int32(scp->cbServerp); - cep->cbExpires = scp->cbExpires; + if (scp->flags & CM_SCACHEFLAG_PURERO && scp->volp) + cep->cbExpires = scp->volp->cbExpiresRO; + else + cep->cbExpires = scp->cbExpires; cep->refCount = scp->refCount; cep->opens = scp->openReads; cep->writers = scp->openWrites; @@ -1418,7 +1437,7 @@ int SRXAFSCB_GetCacheConfig(struct rx_call *callp, #ifndef SIZE_MAX #define SIZE_MAX UINT_MAX #endif - osi_assert(allocsize < SIZE_MAX); + osi_assertx(allocsize < SIZE_MAX, "allocsize >= SIZE_MAX"); #endif *configCount = (afs_uint32)allocsize; config->cacheConfig_val = t_config; @@ -1487,10 +1506,20 @@ int cm_HaveCallback(cm_scache_t *scp) } #endif - if (scp->cbServerp != NULL) + if (scp->cbServerp != NULL) { return 1; - else + } else if (cm_OfflineROIsValid) { + switch (cm_GetVolumeStatus(scp->volp, scp->fid.volume)) { + case vl_offline: + case vl_alldown: + case vl_unknown: + return 1; + default: + return 0; + } + } else { return 0; + } } /* need to detect a broken callback that races with our obtaining a callback. @@ -1517,7 +1546,7 @@ void cm_StartCallbackGrantingCall(cm_scache_t *scp, cm_callbackRequest_t *cbrp) lock_ObtainWrite(&cm_callbackLock); cbrp->callbackCount = cm_callbackCount; cm_activeCallbackGrantingCalls++; - cbrp->startTime = osi_Time(); + cbrp->startTime = time(NULL); cbrp->serverp = NULL; lock_ReleaseWrite(&cm_callbackLock); } @@ -1535,14 +1564,16 @@ void cm_EndCallbackGrantingCall(cm_scache_t *scp, cm_callbackRequest_t *cbrp, cm_racingRevokes_t *nrevp; /* where we'll be next */ int freeFlag; cm_server_t * serverp = NULL; - int discardScp = 0; + int discardScp = 0, discardVolCB = 0; lock_ObtainWrite(&cm_callbackLock); if (flags & CM_CALLBACK_MAINTAINCOUNT) { - osi_assert(cm_activeCallbackGrantingCalls > 0); + osi_assertx(cm_activeCallbackGrantingCalls > 0, + "CM_CALLBACK_MAINTAINCOUNT && cm_activeCallbackGrantingCalls == 0"); } else { - osi_assert(cm_activeCallbackGrantingCalls-- > 0); + osi_assertx(cm_activeCallbackGrantingCalls-- > 0, + "!CM_CALLBACK_MAINTAINCOUNT && cm_activeCallbackGrantingCalls == 0"); } if (cm_activeCallbackGrantingCalls == 0) freeFlag = 1; @@ -1562,6 +1593,8 @@ void cm_EndCallbackGrantingCall(cm_scache_t *scp, cm_callbackRequest_t *cbrp, serverp = cbrp->serverp; } scp->cbExpires = cbrp->startTime + cbp->ExpirationTime; + if (scp->flags & CM_SCACHEFLAG_PURERO && scp->volp) + scp->volp->cbExpiresRO = scp->cbExpires; } else { if (freeFlag) serverp = cbrp->serverp; @@ -1599,6 +1632,10 @@ void cm_EndCallbackGrantingCall(cm_scache_t *scp, cm_callbackRequest_t *cbrp, cbrp->callbackCount, revp->callbackCount, cm_callbackCount); discardScp = 1; + + if ((scp->flags & CM_SCACHEFLAG_PURERO) && scp->volp && + (revp->flags & (CM_RACINGFLAG_CANCELVOL | CM_RACINGFLAG_CANCELALL))) + scp->volp->cbExpiresRO = 0; } if (freeFlag) free(revp); @@ -1810,6 +1847,11 @@ void cm_CheckCBExpiration(void) for (i=0; inextp) { downTime = 0; + if (scp->flags & CM_SCACHEFLAG_PURERO && scp->volp) { + if (scp->volp->cbExpiresRO > scp->cbExpires && scp->cbExpires > 0) + scp->cbExpires = scp->volp->cbExpiresRO; + } + if (scp->cbServerp && scp->cbExpires > 0 && now > scp->cbExpires && (cm_CBServersUp(scp, &downTime) || downTime == 0 || downTime >= scp->cbExpires)) { @@ -1891,6 +1933,9 @@ cm_GiveUpAllCallbacksAllServers(afs_int32 markDown) { cm_server_t *tsp; + if (!cm_giveUpAllCBs) + return; + lock_ObtainWrite(&cm_serverLock); for (tsp = cm_allServersp; tsp; tsp = tsp->allNextp) { cm_GetServerNoLock(tsp); diff --git a/src/WINNT/afsd/cm_callback.h b/src/WINNT/afsd/cm_callback.h index 5f6653f245..eff1a47a1e 100644 --- a/src/WINNT/afsd/cm_callback.h +++ b/src/WINNT/afsd/cm_callback.h @@ -72,4 +72,7 @@ extern void cm_GiveUpAllCallbacks(cm_server_t *tsp, afs_int32 markDown); extern void cm_GiveUpAllCallbacksAllServers(afs_int32 markDown); +extern afs_int32 cm_OfflineROIsValid; + +extern afs_int32 cm_giveUpAllCBs; #endif /* _CM_CALLBACK_H_ENV__ */ diff --git a/src/WINNT/afsd/cm_cell.c b/src/WINNT/afsd/cm_cell.c index 1d93af048b..b22a07d4b5 100644 --- a/src/WINNT/afsd/cm_cell.c +++ b/src/WINNT/afsd/cm_cell.c @@ -359,6 +359,9 @@ void cm_InitCell(int newFile, long maxCells) cellp->cellID = AFS_FAKE_ROOT_CELL_ID; cellp->vlServersp = NULL; cellp->flags = CM_CELLFLAG_FREELANCE; + + cm_AddCellToNameHashTable(cellp); + cm_AddCellToIDHashTable(cellp); #endif } else { for (cellp = cm_data.allCellsp; cellp; cellp=cellp->allNextp) { diff --git a/src/WINNT/afsd/cm_conn.c b/src/WINNT/afsd/cm_conn.c index 074bca09d0..52f0318acc 100644 --- a/src/WINNT/afsd/cm_conn.c +++ b/src/WINNT/afsd/cm_conn.c @@ -44,7 +44,7 @@ afs_int32 cryptall = 0; void cm_PutConn(cm_conn_t *connp) { lock_ObtainWrite(&cm_connLock); - osi_assert(connp->refCount-- > 0); + osi_assertx(connp->refCount-- > 0, "cm_conn_t refcount 0"); lock_ReleaseWrite(&cm_connLock); } @@ -244,7 +244,16 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp, cm_CheckServers(CM_FLAG_CHECKDOWNSERVERS, cellp); retry = 1; } - } + } + + else if (errorCode == UAEWOULDBLOCK || errorCode == EWOULDBLOCK || + errorCode == UAEAGAIN || errorCode == EAGAIN) { + osi_Log0(afsd_logp, "cm_Analyze passed EWOULDBLOCK or EAGAIN."); + if (timeLeft > 5 ) { + thrd_Sleep(1000); + retry = 1; + } + } /* if there is nosuchvolume, then we have a situation in which a * previously known volume no longer has a set of servers @@ -639,6 +648,8 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp, case UAENOENT : s = "UAENOENT"; break; case VICECONNBAD : s = "VICECONNBAD"; break; case VICETOKENDEAD : s = "VICETOKENDEAD"; break; + case WSAEWOULDBLOCK : s = "WSAEWOULDBLOCK"; break; + case UAEWOULDBLOCK : s = "UAEWOULDBLOCK"; break; case CM_ERROR_NOSUCHCELL : s = "CM_ERROR_NOSUCHCELL"; break; case CM_ERROR_NOSUCHVOLUME : s = "CM_ERROR_NOSUCHVOLUME"; break; case CM_ERROR_TIMEDOUT : s = "CM_ERROR_TIMEDOUT"; break; @@ -846,7 +857,7 @@ static void cm_NewRXConnection(cm_conn_t *tcp, cm_ucell_t *ucellp, serviceID = 52; } else { - osi_assert(serverp->type == CM_SERVER_FILE); + osi_assertx(serverp->type == CM_SERVER_FILE, "incorrect server type"); port = htons(7000); serviceID = 1; } @@ -894,7 +905,7 @@ static void cm_NewRXConnection(cm_conn_t *tcp, cm_ucell_t *ucellp, tcp->cryptlevel = rxkad_clear; secObjp = rxnull_NewClientSecurityObject(); } - osi_assert(secObjp != NULL); + osi_assertx(secObjp != NULL, "null rx_securityClass"); tcp->callp = rx_NewConnection(serverp->addr.sin_addr.s_addr, port, serviceID, diff --git a/src/WINNT/afsd/cm_daemon.c b/src/WINNT/afsd/cm_daemon.c index 647a5eac75..45cff1c59a 100644 --- a/src/WINNT/afsd/cm_daemon.c +++ b/src/WINNT/afsd/cm_daemon.c @@ -34,6 +34,7 @@ long cm_daemonCheckDownInterval = 180; long cm_daemonCheckUpInterval = 240; long cm_daemonCheckVolInterval = 3600; long cm_daemonCheckCBInterval = 60; +long cm_daemonCheckVolCBInterval = 0; long cm_daemonCheckLockInterval = 60; long cm_daemonTokenCheckInterval = 180; long cm_daemonCheckOfflineVolInterval = 600; @@ -101,7 +102,7 @@ void cm_BkgDaemon(long parm) } osi_QRemoveHT((osi_queue_t **) &cm_bkgListp, (osi_queue_t **) &cm_bkgListEndp, &rp->q); - osi_assert(cm_bkgQueueCount-- > 0); + osi_assertx(cm_bkgQueueCount-- > 0, "cm_bkgQueueCount 0"); lock_ReleaseWrite(&cm_daemonLock); osi_Log1(afsd_logp,"cm_BkgDaemon processing request 0x%p", rp); @@ -274,6 +275,13 @@ cm_DaemonCheckInit(void) cm_daemonCheckCBInterval = dummy; afsi_log("daemonCheckCBInterval is %d", cm_daemonCheckCBInterval); + dummyLen = sizeof(DWORD); + code = RegQueryValueEx(parmKey, "daemonCheckVolCBInterval", NULL, NULL, + (BYTE *) &dummy, &dummyLen); + if (code == ERROR_SUCCESS) + cm_daemonCheckVolCBInterval = dummy; + afsi_log("daemonCheckVolCBInterval is %d", cm_daemonCheckVolCBInterval); + dummyLen = sizeof(DWORD); code = RegQueryValueEx(parmKey, "daemonCheckLockInterval", NULL, NULL, (BYTE *) &dummy, &dummyLen); @@ -305,6 +313,7 @@ void cm_Daemon(long parm) time_t lastLockCheck; time_t lastVolCheck; time_t lastCBExpirationCheck; + time_t lastVolCBRenewalCheck; time_t lastDownServerCheck; time_t lastUpServerCheck; time_t lastTokenCacheCheck; @@ -344,6 +353,8 @@ void cm_Daemon(long parm) now = osi_Time(); lastVolCheck = now - cm_daemonCheckVolInterval/2 + (rand() % cm_daemonCheckVolInterval); lastCBExpirationCheck = now - cm_daemonCheckCBInterval/2 + (rand() % cm_daemonCheckCBInterval); + if (cm_daemonCheckVolCBInterval) + lastVolCBRenewalCheck = now - cm_daemonCheckVolCBInterval/2 + (rand() % cm_daemonCheckVolCBInterval); lastLockCheck = now - cm_daemonCheckLockInterval/2 + (rand() % cm_daemonCheckLockInterval); lastDownServerCheck = now - cm_daemonCheckDownInterval/2 + (rand() % cm_daemonCheckDownInterval); lastUpServerCheck = now - cm_daemonCheckUpInterval/2 + (rand() % cm_daemonCheckUpInterval); @@ -356,7 +367,10 @@ void cm_Daemon(long parm) */ smb_RestartListeners(); - if (configureFirewall) { + if (daemon_ShutdownFlag == 1) + return; + + if (configureFirewall) { /* Open Microsoft Firewall to allow in port 7001 */ switch (icf_CheckAndAddAFSPorts(AFS_PORTSET_CLIENT)) { case 0: @@ -381,48 +395,79 @@ void cm_Daemon(long parm) now = osi_Time(); /* check down servers */ - if (now > lastDownServerCheck + cm_daemonCheckDownInterval) { + if (now > lastDownServerCheck + cm_daemonCheckDownInterval && + daemon_ShutdownFlag == 0) { lastDownServerCheck = now; osi_Log0(afsd_logp, "cm_Daemon CheckDownServers"); cm_CheckServers(CM_FLAG_CHECKDOWNSERVERS, NULL); + if (daemon_ShutdownFlag == 1) + return; now = osi_Time(); } /* check up servers */ - if (now > lastUpServerCheck + cm_daemonCheckUpInterval) { + if (now > lastUpServerCheck + cm_daemonCheckUpInterval && + daemon_ShutdownFlag == 0) { lastUpServerCheck = now; osi_Log0(afsd_logp, "cm_Daemon CheckUpServers"); cm_CheckServers(CM_FLAG_CHECKUPSERVERS, NULL); + if (daemon_ShutdownFlag == 1) + return; now = osi_Time(); } - if (now > lastVolCheck + cm_daemonCheckVolInterval) { + if (now > lastVolCheck + cm_daemonCheckVolInterval && + daemon_ShutdownFlag == 0) { lastVolCheck = now; cm_RefreshVolumes(); + if (daemon_ShutdownFlag == 1) + return; now = osi_Time(); } - if (now > lastBusyVolCheck + cm_daemonCheckOfflineVolInterval) { + if (cm_daemonCheckVolCBInterval && + now > lastVolCBRenewalCheck + cm_daemonCheckVolCBInterval && + daemon_ShutdownFlag == 0) { + lastVolCBRenewalCheck = now; + cm_VolumeRenewROCallbacks(); + if (daemon_ShutdownFlag == 1) + return; + now = osi_Time(); + } + + if (now > lastBusyVolCheck + cm_daemonCheckOfflineVolInterval && + daemon_ShutdownFlag == 0) { lastVolCheck = now; cm_CheckOfflineVolumes(); + if (daemon_ShutdownFlag == 1) + return; now = osi_Time(); } - if (now > lastCBExpirationCheck + cm_daemonCheckCBInterval) { + if (now > lastCBExpirationCheck + cm_daemonCheckCBInterval && + daemon_ShutdownFlag == 0) { lastCBExpirationCheck = now; cm_CheckCBExpiration(); + if (daemon_ShutdownFlag == 1) + return; now = osi_Time(); } - if (now > lastLockCheck + cm_daemonCheckLockInterval) { + if (now > lastLockCheck + cm_daemonCheckLockInterval && + daemon_ShutdownFlag == 0) { lastLockCheck = now; cm_CheckLocks(); + if (daemon_ShutdownFlag == 1) + return; now = osi_Time(); } - if (now > lastTokenCacheCheck + cm_daemonTokenCheckInterval) { + if (now > lastTokenCacheCheck + cm_daemonTokenCheckInterval && + daemon_ShutdownFlag == 0) { lastTokenCacheCheck = now; cm_CheckTokenCache(now); + if (daemon_ShutdownFlag == 1) + return; now = osi_Time(); } @@ -445,9 +490,9 @@ void cm_Daemon(long parm) } } - thrd_Sleep(30 * 1000); /* sleep 30 seconds */ if (daemon_ShutdownFlag == 1) return; + thrd_Sleep(30 * 1000); /* sleep 30 seconds */ } } @@ -471,21 +516,21 @@ void cm_InitDaemon(int nDaemons) /* creating IP Address Change monitor daemon */ phandle = thrd_Create((SecurityAttrib) 0, 0, (ThreadFunc) cm_IpAddrDaemon, 0, 0, &pid, "cm_IpAddrDaemon"); - osi_assert(phandle != NULL); + osi_assertx(phandle != NULL, "cm_IpAddrDaemon thread creation failure"); thrd_CloseHandle(phandle); #endif /* DJGPP */ /* creating pinging daemon */ phandle = thrd_Create((SecurityAttrib) 0, 0, (ThreadFunc) cm_Daemon, 0, 0, &pid, "cm_Daemon"); - osi_assert(phandle != NULL); + osi_assertx(phandle != NULL, "cm_Daemon thread creation failure"); thrd_CloseHandle(phandle); for(i=0; i < nDaemons; i++) { phandle = thrd_Create((SecurityAttrib) 0, 0, (ThreadFunc) cm_BkgDaemon, 0, 0, &pid, "cm_BkgDaemon"); - osi_assert(phandle != NULL); + osi_assertx(phandle != NULL, "cm_BkgDaemon thread creation failure"); thrd_CloseHandle(phandle); } } diff --git a/src/WINNT/afsd/cm_dcache.c b/src/WINNT/afsd/cm_dcache.c index d551bd557b..cc08c91f65 100644 --- a/src/WINNT/afsd/cm_dcache.c +++ b/src/WINNT/afsd/cm_dcache.c @@ -75,8 +75,8 @@ long cm_BufWrite(void *vscp, osi_hyper_t *offsetp, long length, long flags, cm_bulkIO_t biod; /* bulk IO descriptor */ int require_64bit_ops = 0; - osi_assert(userp != NULL); - osi_assert(scp != NULL); + osi_assertx(userp != NULL, "null cm_user_t"); + osi_assertx(scp != NULL, "null cm_scache_t"); /* now, the buffer may or may not be filled with good data (buf_GetNew * drops lots of locks, and may indeed return a properly initialized @@ -207,7 +207,7 @@ long cm_BufWrite(void *vscp, osi_hyper_t *offsetp, long length, long flags, qdp = biod.bufListEndp; else qdp = (osi_queueData_t *) osi_QPrev(&qdp->q); - osi_assert(qdp != NULL); + osi_assertx(qdp != NULL, "null osi_queueData_t"); bufp = osi_GetQData(qdp); bufferp = bufp->datap; wbytes = nbytes; @@ -1376,7 +1376,7 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *userp if ((bufp->dataVersion == -1 || bufp->dataVersion < scp->dataVersion) && LargeIntegerGreaterThanOrEqualTo(bufp->offset, scp->serverLength)) { - osi_Log3(afsd_logp, "Bad DVs %d, %d or length 0x%x", + osi_Log3(afsd_logp, "Bad DVs %I64d, %I64d or length 0x%x", bufp->dataVersion, scp->dataVersion, biod.length); if (bufp->dataVersion == -1) @@ -1398,7 +1398,7 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *userp } #ifdef DISKCACHE95 - DPRINTF("cm_GetBuffer: fetching data scpDV=%d bufDV=%d scp=%x bp=%x dcp=%x\n", + DPRINTF("cm_GetBuffer: fetching data scpDV=%I64d bufDV=%I64d scp=%x bp=%x dcp=%x\n", scp->dataVersion, bufp->dataVersion, scp, bufp, bufp->dcp); #endif /* DISKCACHE95 */ @@ -1414,7 +1414,7 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *userp afsStatus.FileType = 0x2; afsStatus.LinkCount = scp->linkCount; afsStatus.Length = cm_fakeDirSize; - afsStatus.DataVersion = cm_data.fakeDirVersion; + afsStatus.DataVersion = (afs_uint32)(cm_data.fakeDirVersion & 0xFFFFFFFF); afsStatus.Author = 0x1; afsStatus.Owner = 0x0; afsStatus.CallerAccess = 0x9; @@ -1427,7 +1427,7 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *userp afsStatus.ServerModTime = (afs_uint32)FakeFreelanceModTime; afsStatus.Group = 0; afsStatus.SyncCounter = 0; - afsStatus.dataVersionHigh = 0; + afsStatus.dataVersionHigh = (afs_uint32)(cm_data.fakeDirVersion >> 32); afsStatus.lockCount = 0; afsStatus.Length_hi = 0; afsStatus.errorCode = 0; @@ -1573,7 +1573,7 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *userp * our check above for nbytes being less than * biod.length should ensure this. */ - osi_assert(bufferp != NULL); + osi_assertx(bufferp != NULL, "null cm_buf_t"); /* read rbytes of data */ rbytes = (nbytes > cm_data.buf_blockSize? cm_data.buf_blockSize : nbytes); @@ -1624,7 +1624,7 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *userp * all of the rest of the pages. */ /* bytes fetched */ - osi_assert((bufferp - tbufp->datap) < LONG_MAX); + osi_assertx((bufferp - tbufp->datap) < LONG_MAX, "data >= LONG_MAX"); rbytes = (long) (bufferp - tbufp->datap); /* bytes left to zero */ @@ -1681,7 +1681,9 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *userp qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) { tbufp = osi_GetQData(qdp); - tbufp->dataVersion = afsStatus.DataVersion; + tbufp->dataVersion = afsStatus.dataVersionHigh; + tbufp->dataVersion <<= 32; + tbufp->dataVersion |= afsStatus.DataVersion; #ifdef DISKCACHE95 /* write buffer out to disk cache */ diff --git a/src/WINNT/afsd/cm_dir.c b/src/WINNT/afsd/cm_dir.c index fa05827dee..bf41ab4b8d 100644 --- a/src/WINNT/afsd/cm_dir.c +++ b/src/WINNT/afsd/cm_dir.c @@ -100,7 +100,7 @@ static int cm_DirOpDelBuffer(cm_dirOp_t * op, cm_buf_t * buffer, int flags); static long -cm_DirCheckStatus(cm_dirOp_t * op); +cm_DirCheckStatus(cm_dirOp_t * op, afs_uint32 locked); static long cm_DirReleasePage(cm_dirOp_t * op, cm_buf_t ** bufferpp, int modified); @@ -958,15 +958,15 @@ cm_DirFindItem(cm_dirOp_t * op, } } -/* Begin a sequence of directory operations. scp->mx should be - locked. -*/ +/* Begin a sequence of directory operations. + * Called with scp->mx unlocked. + */ long cm_BeginDirOp(cm_scache_t * scp, cm_user_t * userp, cm_req_t * reqp, afs_uint32 lockType, cm_dirOp_t * op) { long code; - int i, mxheld = 0; + int i, mxheld = 0, haveWrite = 0; osi_Log3(afsd_logp, "Beginning dirOp[0x%p] for scp[0x%p], userp[0x%p]", op, scp, userp); @@ -986,8 +986,16 @@ cm_BeginDirOp(cm_scache_t * scp, cm_user_t * userp, cm_req_t * reqp, op->buffers[i].flags = 0; } - code = cm_DirCheckStatus(op); - + if (lockType == CM_DIRLOCK_WRITE) { + lock_ObtainWrite(&scp->dirlock); + haveWrite = 1; + } else { + lock_ObtainRead(&scp->dirlock); + haveWrite = 0; + } + lock_ObtainMutex(&scp->mx); + mxheld = 1; + code = cm_DirCheckStatus(op, 1); if (code == 0) { op->length = scp->length; op->newLength = op->length; @@ -995,42 +1003,77 @@ cm_BeginDirOp(cm_scache_t * scp, cm_user_t * userp, cm_req_t * reqp, op->newDataVersion = op->dataVersion; #ifdef USE_BPLUS - lock_ObtainRead(&scp->dirlock); if (!cm_BPlusTrees || (scp->dirBplus && scp->dirDataVersion == scp->dataVersion)) { - int mxheld = 0; - + /* we know that haveWrite matches lockType at this point */ switch (lockType) { case CM_DIRLOCK_NONE: - lock_ReleaseRead(&scp->dirlock); + if (haveWrite) + lock_ReleaseWrite(&scp->dirlock); + else + lock_ReleaseRead(&scp->dirlock); break; case CM_DIRLOCK_READ: - /* got it already */ + osi_assert(!haveWrite); break; case CM_DIRLOCK_WRITE: default: - lock_ReleaseRead(&scp->dirlock); - lock_ObtainWrite(&scp->dirlock); + osi_assert(haveWrite); } } else { - lock_ReleaseRead(&scp->dirlock); - lock_ObtainWrite(&scp->dirlock); - if (scp->dirBplus && - scp->dirDataVersion != scp->dataVersion) + if (!(scp->dirBplus && + scp->dirDataVersion == scp->dataVersion)) { - bplus_dv_error++; - bplus_free_tree++; - freeBtree(scp->dirBplus); - scp->dirBplus = NULL; - scp->dirDataVersion = -1; - } + repeat: + if (!haveWrite) { + if (mxheld) { + lock_ReleaseMutex(&scp->mx); + mxheld = 0; + } + lock_ReleaseRead(&scp->dirlock); + lock_ObtainWrite(&scp->dirlock); + haveWrite = 1; + } + if (!mxheld) { + lock_ObtainMutex(&scp->mx); + mxheld = 1; + } + if (scp->dirBplus && + scp->dirDataVersion != scp->dataVersion) + { + bplus_dv_error++; + bplus_free_tree++; + freeBtree(scp->dirBplus); + scp->dirBplus = NULL; + scp->dirDataVersion = -1; + } - if (!scp->dirBplus) { - cm_BPlusDirBuildTree(scp, userp, reqp); - if (scp->dirBplus) - scp->dirDataVersion = scp->dataVersion; + if (!scp->dirBplus) { + if (mxheld) { + lock_ReleaseMutex(&scp->mx); + mxheld = 0; + } + cm_BPlusDirBuildTree(scp, userp, reqp); + if (!mxheld) { + lock_ObtainMutex(&scp->mx); + mxheld = 1; + } + if (op->dataVersion != scp->dataVersion) { + /* We lost the race, therefore we must update the + * dirop state and retry to build the tree. + */ + op->length = scp->length; + op->newLength = op->length; + op->dataVersion = scp->dataVersion; + op->newDataVersion = op->dataVersion; + goto repeat; + } + + if (scp->dirBplus) + scp->dirDataVersion = scp->dataVersion; + } } switch (lockType) { @@ -1044,22 +1087,35 @@ cm_BeginDirOp(cm_scache_t * scp, cm_user_t * userp, cm_req_t * reqp, default: /* got it already */; } + haveWrite = 0; } #else + /* we know that haveWrite matches lockType at this point */ switch (lockType) { case CM_DIRLOCK_NONE: + if (haveWrite) + lock_ReleaseWrite(&scp->dirlock); + else + lock_ReleaseRead(&scp->dirlock); break; case CM_DIRLOCK_READ: - lock_ObtainRead(&scp->dirlock); + osi_assert(!haveWrite); break; case CM_DIRLOCK_WRITE: default: - lock_ObtainWrite(&scp->dirlock); + osi_assert(haveWrite); } #endif op->lockType = lockType; + if (mxheld) + lock_ReleaseMutex(&scp->mx); } else { - + if (haveWrite) + lock_ReleaseWrite(&scp->dirlock); + else + lock_ReleaseRead(&scp->dirlock); + if (mxheld) + lock_ReleaseMutex(&scp->mx); cm_EndDirOp(op); } @@ -1072,11 +1128,13 @@ int cm_CheckDirOpForSingleChange(cm_dirOp_t * op) { long code; + int rc = 0; if (op->scp == NULL) return 0; - code = cm_DirCheckStatus(op); + lock_ObtainMutex(&op->scp->mx); + code = cm_DirCheckStatus(op, 1); if (code == 0 && op->dataVersion == op->scp->dataVersion - 1) { @@ -1086,19 +1144,21 @@ cm_CheckDirOpForSingleChange(cm_dirOp_t * op) op->newDataVersion = op->scp->dataVersion; op->newLength = op->scp->serverLength; - osi_Log0(afsd_logp, "cm_CheckDirOpForSingleChange succeeded"); - - return 1; + rc = 1; } - - osi_Log3(afsd_logp, - "cm_CheckDirOpForSingleChange failed. code=0x%x, old dv=%d, new dv=%d", - code, op->dataVersion, op->scp->dataVersion); - return 0; + lock_ReleaseMutex(&op->scp->mx); + + if (rc) + osi_Log0(afsd_logp, "cm_CheckDirOpForSingleChange succeeded"); + else + osi_Log3(afsd_logp, + "cm_CheckDirOpForSingleChange failed. code=0x%x, old dv=%I64d, new dv=%I64d", + code, op->dataVersion, op->scp->dataVersion); + return rc; } -/* End a sequence of directory operations. Called with op->scp->mx - unlocked.*/ +/* End a sequence of directory operations. + * Called with op->scp->mx unlocked.*/ long cm_EndDirOp(cm_dirOp_t * op) { @@ -1111,14 +1171,10 @@ cm_EndDirOp(cm_dirOp_t * op) op, op->dirtyBufCount); if (op->dirtyBufCount > 0) { - /* we made changes. We should go through the list of buffers - and update the dataVersion for each. */ - code = buf_ForceDataVersion(op->scp, op->dataVersion, op->newDataVersion); - #ifdef USE_BPLUS - /* and update the data version on the B+ tree */ + /* update the data version on the B+ tree */ if (op->scp->dirBplus && - op->scp->dirDataVersion == op->dataVersion) { + op->scp->dirDataVersion == op->dataVersion) { switch (op->lockType) { case CM_DIRLOCK_READ: @@ -1135,6 +1191,12 @@ cm_EndDirOp(cm_dirOp_t * op) op->scp->dirDataVersion = op->newDataVersion; } #endif + + /* we made changes. We should go through the list of buffers + * and update the dataVersion for each. */ + lock_ObtainMutex(&op->scp->mx); + code = buf_ForceDataVersion(op->scp, op->dataVersion, op->newDataVersion); + lock_ReleaseMutex(&op->scp->mx); } switch (op->lockType) { @@ -1203,19 +1265,20 @@ cm_DirOpAddBuffer(cm_dirOp_t * op, cm_buf_t * bufferp) lock_ObtainMutex(&op->scp->mx); /* Make sure we are synchronized. */ + osi_assert(op->lockType != CM_DIRLOCK_NONE); + code = cm_SyncOp(op->scp, bufferp, op->userp, &op->req, PRSFS_LOOKUP, CM_SCACHESYNC_NEEDCALLBACK | - CM_SCACHESYNC_WRITE | + (op->lockType == CM_DIRLOCK_WRITE ? CM_SCACHESYNC_WRITE : CM_SCACHESYNC_READ) | CM_SCACHESYNC_BUFLOCKED); - if (code == 0 && - bufferp->dataVersion != op->dataVersion) { - - osi_Log2(afsd_logp, "cm_DirOpAddBuffer: buffer version mismatch. buf ver = %d. want %d", bufferp->dataVersion, op->dataVersion); + if (code == 0 && bufferp->dataVersion != op->dataVersion) { + osi_Log2(afsd_logp, "cm_DirOpAddBuffer: buffer data version mismatch. buf dv = %I64d. needs %I64d", + bufferp->dataVersion, op->dataVersion); cm_SyncOpDone(op->scp, bufferp, CM_SCACHESYNC_NEEDCALLBACK | - CM_SCACHESYNC_WRITE | + (op->lockType == CM_DIRLOCK_WRITE ? CM_SCACHESYNC_WRITE : CM_SCACHESYNC_READ) | CM_SCACHESYNC_BUFLOCKED); code = CM_ERROR_INVAL; @@ -1315,7 +1378,7 @@ cm_DirOpDelBuffer(cm_dirOp_t * op, cm_buf_t * bufferp, int flags) cm_SyncOpDone(op->scp, bufferp, CM_SCACHESYNC_NEEDCALLBACK | - CM_SCACHESYNC_WRITE); + (op->lockType == CM_DIRLOCK_WRITE ? CM_SCACHESYNC_WRITE : CM_SCACHESYNC_READ)); #ifdef DEBUG osi_assert(bufferp->dataVersion == op->dataVersion); @@ -1371,23 +1434,25 @@ cm_DirOpDelBuffer(cm_dirOp_t * op, cm_buf_t * bufferp, int flags) This should be called before cm_DirGetPage() is called per scp. On entry: - scp->mx unlocked + scp->mx locked state indicated by parameter On exit: - scp->mx unlocked + scp->mx same state as upon entry During: scp->mx may be released */ static long -cm_DirCheckStatus(cm_dirOp_t * op) +cm_DirCheckStatus(cm_dirOp_t * op, afs_uint32 locked) { long code; - lock_ObtainMutex(&op->scp->mx); + if (!locked) + lock_ObtainMutex(&op->scp->mx); code = cm_SyncOp(op->scp, NULL, op->userp, &op->req, PRSFS_LOOKUP, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS); - lock_ReleaseMutex(&op->scp->mx); + if (!locked) + lock_ReleaseMutex(&op->scp->mx); osi_Log2(afsd_logp, "cm_DirCheckStatus for op 0x%p returning code 0x%x", op, code); diff --git a/src/WINNT/afsd/cm_dir.h b/src/WINNT/afsd/cm_dir.h index 37fe27f98f..febebb6f78 100644 --- a/src/WINNT/afsd/cm_dir.h +++ b/src/WINNT/afsd/cm_dir.h @@ -116,15 +116,15 @@ typedef struct cm_dirOp { osi_hyper_t length; /* scp->length at the time cm_BeginDirOp() was called.*/ osi_hyper_t newLength; /* adjusted scp->length */ - afs_uint32 dataVersion; /* scp->dataVersion when + afs_uint64 dataVersion; /* scp->dataVersion when cm_BeginDirOp() was called.*/ - afs_uint32 newDataVersion; /* scp->dataVersion when + afs_uint64 newDataVersion; /* scp->dataVersion when cm_CheckDirOpForSingleChange() was called. */ - afs_uint32 dirtyBufCount; + afs_uint64 dirtyBufCount; - afs_uint32 nBuffers; /* number of buffers below */ + afs_uint64 nBuffers; /* number of buffers below */ cm_dirOpBuffer_t buffers[CM_DIROP_MAXBUFFERS]; } cm_dirOp_t; @@ -186,5 +186,5 @@ cm_DirDumpStats(void); extern int cm_MemDumpDirStats(FILE *outputFile, char *cookie, int lock); -extern afs_int64 dir_enums; +extern afs_uint64 dir_enums; #endif /* __CM_DIR_ENV__ */ diff --git a/src/WINNT/afsd/cm_freelance.c b/src/WINNT/afsd/cm_freelance.c index 78d6568a62..3b2651cba2 100644 --- a/src/WINNT/afsd/cm_freelance.c +++ b/src/WINNT/afsd/cm_freelance.c @@ -169,12 +169,12 @@ void cm_InitFreelance() { /* Start the registry monitor */ phandle = thrd_Create(NULL, 65536, (ThreadFunc) cm_FreelanceChangeNotifier, NULL, 0, &lpid, "cm_FreelanceChangeNotifier"); - osi_assert(phandle != NULL); + osi_assertx(phandle != NULL, "cm_FreelanceChangeNotifier thread create failure"); thrd_CloseHandle(phandle); phandle = thrd_Create(NULL, 65536, (ThreadFunc) cm_FreelanceSymlinkChangeNotifier, NULL, 0, &lpid, "cm_FreelanceSymlinkChangeNotifier"); - osi_assert(phandle != NULL); + osi_assertx(phandle != NULL, "cm_FreelanceSymlinkChangeNotifier thread create failure"); thrd_CloseHandle(phandle); #endif } @@ -1232,23 +1232,23 @@ long cm_FreelanceAddSymlink(char *filename, char *destination, cm_fid_t *fidp) osi_LogSaveString(afsd_logp,destination)); if ( filename[0] == '\0' || destination[0] == '\0' ) - return -1; + return CM_ERROR_INVAL; fullname[0] = '\0'; if (filename[0] == '.') { cm_GetCell_Gen(&filename[1], fullname, CM_FLAG_CREATE); if (stricmp(&filename[1],fullname) == 0) - return -1; + return CM_ERROR_EXISTS; } else { cm_GetCell_Gen(filename, fullname, CM_FLAG_CREATE); if (stricmp(filename,fullname) == 0) - return -1; + return CM_ERROR_EXISTS; } #if !defined(DJGPP) if ( cm_FreelanceMountPointExists(filename) || cm_FreelanceSymlinkExists(filename) ) - return -1; + return CM_ERROR_EXISTS; #endif lock_ObtainMutex(&cm_Freelance_Lock); diff --git a/src/WINNT/afsd/cm_ioctl.c b/src/WINNT/afsd/cm_ioctl.c index dd973efe9a..05800b6c19 100644 --- a/src/WINNT/afsd/cm_ioctl.c +++ b/src/WINNT/afsd/cm_ioctl.c @@ -228,8 +228,15 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, long code; #ifndef AFSIFS cm_scache_t *substRootp = NULL; + cm_scache_t *iscp = NULL; #endif - char * relativePath = ioctlp->inDatap; + char * relativePath; + char * lastComponent = NULL; + afs_uint32 follow = 0; + + relativePath = ioctlp->inDatap; + /* setup the next data value for the caller to use */ + ioctlp->inDatap += (long)strlen(ioctlp->inDatap) + 1;; osi_Log1(afsd_logp, "cm_ParseIoctlPath %s", osi_LogSaveString(afsd_logp,relativePath)); @@ -242,13 +249,16 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, */ TranslateExtendedChars(relativePath); + /* This is usually nothing, but for StatMountPoint it is the file name. */ + TranslateExtendedChars(ioctlp->inDatap); + #ifdef AFSIFS /* we have passed the whole path, including the afs prefix. when the pioctl call is made, we perform an ioctl to afsrdr and it returns the correct (full) path. therefore, there is no drive letter, and the path is absolute. */ code = cm_NameI(cm_data.rootSCachep, relativePath, - CM_FLAG_CASEFOLD, + CM_FLAG_CASEFOLD | follow, userp, "", reqp, scpp); if (code) { @@ -256,6 +266,7 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, return code; } #else /* AFSIFS */ + if (relativePath[0] == relativePath[1] && relativePath[1] == '\\' && !_strnicmp(cm_NetbiosName,relativePath+2,strlen(cm_NetbiosName))) @@ -292,8 +303,22 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, return code; } - code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, - userp, NULL, reqp, scpp); + lastComponent = strrchr(p, '\\'); + if (lastComponent && (lastComponent - p) > 1 &&strlen(lastComponent) > 1) { + *lastComponent = '\0'; + lastComponent++; + + code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, NULL, reqp, &iscp); + if (code == 0) + code = cm_NameI(iscp, lastComponent, CM_FLAG_CASEFOLD | CM_FLAG_NOMOUNTCHASE, + userp, NULL, reqp, scpp); + if (iscp) + cm_ReleaseSCache(iscp); + } else { + code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD, + userp, NULL, reqp, scpp); + } cm_ReleaseSCache(substRootp); if (code) { osi_Log1(afsd_logp,"cm_ParseIoctlPath [2] code 0x%x", code); @@ -325,9 +350,24 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, return code; } - code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, - userp, NULL, reqp, scpp); - if (code) { + lastComponent = strrchr(p, '\\'); + if (lastComponent && (lastComponent - p) > 1 &&strlen(lastComponent) > 1) { + *lastComponent = '\0'; + lastComponent++; + + code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, NULL, reqp, &iscp); + if (code == 0) + code = cm_NameI(iscp, lastComponent, CM_FLAG_CASEFOLD | CM_FLAG_NOMOUNTCHASE, + userp, NULL, reqp, scpp); + if (iscp) + cm_ReleaseSCache(iscp); + } else { + code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD, + userp, NULL, reqp, scpp); + } + + if (code) { cm_ReleaseSCache(substRootp); osi_Log1(afsd_logp,"cm_ParseIoctlPath code [4] 0x%x", code); return code; @@ -342,9 +382,22 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, return code; } - code = cm_NameI(substRootp, relativePath, - CM_FLAG_CASEFOLD, - userp, NULL, reqp, scpp); + lastComponent = strrchr(relativePath, '\\'); + if (lastComponent && (lastComponent - relativePath) > 1 && strlen(lastComponent) > 1) { + *lastComponent = '\0'; + lastComponent++; + + code = cm_NameI(substRootp, relativePath, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, NULL, reqp, &iscp); + if (code == 0) + code = cm_NameI(iscp, lastComponent, CM_FLAG_CASEFOLD | CM_FLAG_NOMOUNTCHASE, + userp, NULL, reqp, scpp); + if (iscp) + cm_ReleaseSCache(iscp); + } else { + code = cm_NameI(substRootp, relativePath, CM_FLAG_CASEFOLD, + userp, NULL, reqp, scpp); + } if (code) { cm_ReleaseSCache(substRootp); osi_Log1(afsd_logp,"cm_ParseIoctlPath [7] code 0x%x", code); @@ -353,13 +406,6 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, } #endif /* AFSIFS */ - /* # of bytes of path */ - code = (long)strlen(ioctlp->inDatap) + 1; - ioctlp->inDatap += code; - - /* This is usually nothing, but for StatMountPoint it is the file name. */ - TranslateExtendedChars(ioctlp->inDatap); - if (substRootp) cm_ReleaseSCache(substRootp); @@ -548,25 +594,32 @@ long cm_IoctlGetACL(smb_ioctl_t *ioctlp, cm_user_t *userp) if (code) return code; /* now make the get acl call */ - fid.Volume = scp->fid.volume; - fid.Vnode = scp->fid.vnode; - fid.Unique = scp->fid.unique; - do { - acl.AFSOpaque_val = ioctlp->outDatap; - acl.AFSOpaque_len = 0; - code = cm_ConnFromFID(&scp->fid, userp, &req, &connp); - if (code) continue; +#ifdef AFS_FREELANCE_CLIENT + if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) { + code = 0; + ioctlp->outDatap[0] ='\0'; + } else +#endif + { + fid.Volume = scp->fid.volume; + fid.Vnode = scp->fid.vnode; + fid.Unique = scp->fid.unique; + do { + acl.AFSOpaque_val = ioctlp->outDatap; + acl.AFSOpaque_len = 0; + code = cm_ConnFromFID(&scp->fid, userp, &req, &connp); + if (code) continue; - callp = cm_GetRxConn(connp); - code = RXAFS_FetchACL(callp, &fid, &acl, &fileStatus, &volSync); - rx_PutConnection(callp); + callp = cm_GetRxConn(connp); + code = RXAFS_FetchACL(callp, &fid, &acl, &fileStatus, &volSync); + rx_PutConnection(callp); - } while (cm_Analyze(connp, userp, &req, &scp->fid, &volSync, NULL, NULL, code)); - code = cm_MapRPCError(code, &req); - cm_ReleaseSCache(scp); - - if (code) return code; + } while (cm_Analyze(connp, userp, &req, &scp->fid, &volSync, NULL, NULL, code)); + code = cm_MapRPCError(code, &req); + cm_ReleaseSCache(scp); + if (code) return code; + } /* skip over return data */ tlen = (int)strlen(ioctlp->outDatap) + 1; ioctlp->outDatap += tlen; @@ -629,28 +682,34 @@ long cm_IoctlSetACL(struct smb_ioctl *ioctlp, struct cm_user *userp) code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp); if (code) return code; - /* now make the get acl call */ - fid.Volume = scp->fid.volume; - fid.Vnode = scp->fid.vnode; - fid.Unique = scp->fid.unique; - do { - acl.AFSOpaque_val = ioctlp->inDatap; - acl.AFSOpaque_len = (u_int)strlen(ioctlp->inDatap)+1; - code = cm_ConnFromFID(&scp->fid, userp, &req, &connp); - if (code) continue; +#ifdef AFS_FREELANCE_CLIENT + if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) { + code = CM_ERROR_NOACCESS; + } else +#endif + { + /* now make the get acl call */ + fid.Volume = scp->fid.volume; + fid.Vnode = scp->fid.vnode; + fid.Unique = scp->fid.unique; + do { + acl.AFSOpaque_val = ioctlp->inDatap; + acl.AFSOpaque_len = (u_int)strlen(ioctlp->inDatap)+1; + code = cm_ConnFromFID(&scp->fid, userp, &req, &connp); + if (code) continue; - callp = cm_GetRxConn(connp); - code = RXAFS_StoreACL(callp, &fid, &acl, &fileStatus, &volSync); - rx_PutConnection(callp); + callp = cm_GetRxConn(connp); + code = RXAFS_StoreACL(callp, &fid, &acl, &fileStatus, &volSync); + rx_PutConnection(callp); - } while (cm_Analyze(connp, userp, &req, &scp->fid, &volSync, NULL, NULL, code)); - code = cm_MapRPCError(code, &req); - - /* invalidate cache info, since we just trashed the ACL cache */ - lock_ObtainMutex(&scp->mx); - cm_DiscardSCache(scp); - lock_ReleaseMutex(&scp->mx); + } while (cm_Analyze(connp, userp, &req, &scp->fid, &volSync, NULL, NULL, code)); + code = cm_MapRPCError(code, &req); + /* invalidate cache info, since we just trashed the ACL cache */ + lock_ObtainMutex(&scp->mx); + cm_DiscardSCache(scp); + lock_ReleaseMutex(&scp->mx); + } cm_ReleaseSCache(scp); return code; @@ -697,12 +756,18 @@ long cm_IoctlFlushVolume(struct smb_ioctl *ioctlp, struct cm_user *userp) code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp); if (code) return code; - volume = scp->fid.volume; - cell = scp->fid.cell; - cm_ReleaseSCache(scp); - - code = cm_FlushVolume(userp, &req, cell, volume); +#ifdef AFS_FREELANCE_CLIENT + if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) { + code = CM_ERROR_NOACCESS; + } else +#endif + { + volume = scp->fid.volume; + cell = scp->fid.cell; + cm_ReleaseSCache(scp); + code = cm_FlushVolume(userp, &req, cell, volume); + } return code; } @@ -717,7 +782,14 @@ long cm_IoctlFlushFile(struct smb_ioctl *ioctlp, struct cm_user *userp) code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp); if (code) return code; - cm_FlushFile(scp, userp, &req); +#ifdef AFS_FREELANCE_CLIENT + if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) { + code = CM_ERROR_NOACCESS; + } else +#endif + { + cm_FlushFile(scp, userp, &req); + } cm_ReleaseSCache(scp); return 0; @@ -744,53 +816,60 @@ long cm_IoctlSetVolumeStatus(struct smb_ioctl *ioctlp, struct cm_user *userp) code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp); if (code) return code; - cellp = cm_FindCellByID(scp->fid.cell); - osi_assert(cellp); +#ifdef AFS_FREELANCE_CLIENT + if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) { + code = CM_ERROR_NOACCESS; + } else +#endif + { + cellp = cm_FindCellByID(scp->fid.cell); + osi_assertx(cellp, "null cm_cell_t"); - if (scp->flags & CM_SCACHEFLAG_RO) { - cm_ReleaseSCache(scp); - return CM_ERROR_READONLY; + if (scp->flags & CM_SCACHEFLAG_RO) { + cm_ReleaseSCache(scp); + return CM_ERROR_READONLY; + } + + code = cm_GetVolumeByID(cellp, scp->fid.volume, userp, &req, + CM_GETVOL_FLAG_CREATE, &tvp); + if (code) { + cm_ReleaseSCache(scp); + return code; + } + cm_PutVolume(tvp); + + /* Copy the junk out, using cp as a roving pointer. */ + cp = ioctlp->inDatap; + memcpy((char *)&volStat, cp, sizeof(AFSFetchVolumeStatus)); + cp += sizeof(AFSFetchVolumeStatus); + StringCbCopyA(volName, sizeof(volName), cp); + cp += strlen(volName)+1; + StringCbCopyA(offLineMsg, sizeof(offLineMsg), cp); + cp += strlen(offLineMsg)+1; + StringCbCopyA(motd, sizeof(motd), cp); + storeStat.Mask = 0; + if (volStat.MinQuota != -1) { + storeStat.MinQuota = volStat.MinQuota; + storeStat.Mask |= AFS_SETMINQUOTA; + } + if (volStat.MaxQuota != -1) { + storeStat.MaxQuota = volStat.MaxQuota; + storeStat.Mask |= AFS_SETMAXQUOTA; + } + + do { + code = cm_ConnFromFID(&scp->fid, userp, &req, &tcp); + if (code) continue; + + callp = cm_GetRxConn(tcp); + code = RXAFS_SetVolumeStatus(callp, scp->fid.volume, + &storeStat, volName, offLineMsg, motd); + rx_PutConnection(callp); + + } while (cm_Analyze(tcp, userp, &req, &scp->fid, NULL, NULL, NULL, code)); + code = cm_MapRPCError(code, &req); } - - code = cm_GetVolumeByID(cellp, scp->fid.volume, userp, &req, - CM_GETVOL_FLAG_CREATE, &tvp); - if (code) { - cm_ReleaseSCache(scp); - return code; - } - cm_PutVolume(tvp); - - /* Copy the junk out, using cp as a roving pointer. */ - cp = ioctlp->inDatap; - memcpy((char *)&volStat, cp, sizeof(AFSFetchVolumeStatus)); - cp += sizeof(AFSFetchVolumeStatus); - StringCbCopyA(volName, sizeof(volName), cp); - cp += strlen(volName)+1; - StringCbCopyA(offLineMsg, sizeof(offLineMsg), cp); - cp += strlen(offLineMsg)+1; - StringCbCopyA(motd, sizeof(motd), cp); - storeStat.Mask = 0; - if (volStat.MinQuota != -1) { - storeStat.MinQuota = volStat.MinQuota; - storeStat.Mask |= AFS_SETMINQUOTA; - } - if (volStat.MaxQuota != -1) { - storeStat.MaxQuota = volStat.MaxQuota; - storeStat.Mask |= AFS_SETMAXQUOTA; - } - - do { - code = cm_ConnFromFID(&scp->fid, userp, &req, &tcp); - if (code) continue; - - callp = cm_GetRxConn(tcp); - code = RXAFS_SetVolumeStatus(callp, scp->fid.volume, - &storeStat, volName, offLineMsg, motd); - rx_PutConnection(callp); - - } while (cm_Analyze(tcp, userp, &req, &scp->fid, NULL, NULL, NULL, code)); - code = cm_MapRPCError(code, &req); - + /* return on failure */ cm_ReleaseSCache(scp); if (code) { @@ -838,20 +917,35 @@ long cm_IoctlGetVolumeStatus(struct smb_ioctl *ioctlp, struct cm_user *userp) code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp); if (code) return code; - Name = volName; - OfflineMsg = offLineMsg; - MOTD = motd; - do { - code = cm_ConnFromFID(&scp->fid, userp, &req, &connp); - if (code) continue; +#ifdef AFS_FREELANCE_CLIENT + if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) { + code = 0; + strncpy(volName, "Freelance.Local.Root", sizeof(volName)); + offLineMsg[0] = '\0'; + strncpy(motd, "Freelance mode in use.", sizeof(motd)); + volStat.Vid = scp->fid.volume; + volStat.MaxQuota = 0; + volStat.BlocksInUse = 100; + volStat.PartBlocksAvail = 0; + volStat.PartMaxBlocks = 100; + } else +#endif + { + Name = volName; + OfflineMsg = offLineMsg; + MOTD = motd; + do { + code = cm_ConnFromFID(&scp->fid, userp, &req, &connp); + if (code) continue; - callp = cm_GetRxConn(connp); - code = RXAFS_GetVolumeStatus(callp, scp->fid.volume, - &volStat, &Name, &OfflineMsg, &MOTD); - rx_PutConnection(callp); + callp = cm_GetRxConn(connp); + code = RXAFS_GetVolumeStatus(callp, scp->fid.volume, + &volStat, &Name, &OfflineMsg, &MOTD); + rx_PutConnection(callp); - } while (cm_Analyze(connp, userp, &req, &scp->fid, NULL, NULL, NULL, code)); - code = cm_MapRPCError(code, &req); + } while (cm_Analyze(connp, userp, &req, &scp->fid, NULL, NULL, NULL, code)); + code = cm_MapRPCError(code, &req); + } cm_ReleaseSCache(scp); if (code) return code; @@ -958,7 +1052,8 @@ long cm_IoctlWhereIs(struct smb_ioctl *ioctlp, struct cm_user *userp) return CM_ERROR_NOSUCHCELL; code = cm_GetVolumeByID(cellp, volume, userp, &req, CM_GETVOL_FLAG_CREATE, &tvp); - if (code) return code; + if (code) + return code; cp = ioctlp->outDatap; @@ -1131,7 +1226,8 @@ long cm_IoctlCheckServers(struct smb_ioctl *ioctlp, struct cm_user *userp) if (haveCell) { /* have cell name, too */ cellp = cm_GetCell(cp, 0); - if (!cellp) return CM_ERROR_NOSUCHCELL; + if (!cellp) + return CM_ERROR_NOSUCHCELL; } else cellp = (cm_cell_t *) 0; if (!cellp && (temp & 2)) { @@ -1663,7 +1759,8 @@ long cm_IoctlCreateMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_InitReq(&req); code = cm_ParseIoctlParent(ioctlp, userp, &req, &dscp, leaf); - if (code) return code; + if (code) + return code; /* Translate chars for the mount point name */ TranslateExtendedChars(leaf); @@ -1688,8 +1785,10 @@ long cm_IoctlCreateMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp) if (code && cm_dnsEnabled) code = cm_SearchCellByDNS(cell, fullCell, &ttl, 0, 0); #endif - if (code) + if (code) { + cm_ReleaseSCache(dscp); return CM_ERROR_NOSUCHCELL; + } StringCbPrintfA(mpInfo, sizeof(mpInfo), "%c%s:%s", *ioctlp->inDatap, fullCell, volume); } else { @@ -2107,7 +2206,8 @@ long cm_IoctlSetToken(struct smb_ioctl *ioctlp, struct cm_user *userp) /* cell name */ cellp = cm_GetCell(tp, CM_FLAG_CREATE); - if (!cellp) return CM_ERROR_NOSUCHCELL; + if (!cellp) + return CM_ERROR_NOSUCHCELL; tp += strlen(tp) + 1; /* user name */ @@ -2759,7 +2859,8 @@ long cm_IoctlDelToken(struct smb_ioctl *ioctlp, struct cm_user *userp) /* cell name is right here */ cellp = cm_GetCell(ioctlp->inDatap, 0); - if (!cellp) return CM_ERROR_NOSUCHCELL; + if (!cellp) + return CM_ERROR_NOSUCHCELL; lock_ObtainMutex(&userp->mx); @@ -3270,42 +3371,50 @@ long cm_IoctlPathAvailability(struct smb_ioctl *ioctlp, struct cm_user *userp) if (code) return code; - volume = scp->fid.volume; +#ifdef AFS_FREELANCE_CLIENT + if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) { + code = 0; + cm_ReleaseSCache(scp); + } else +#endif + { + volume = scp->fid.volume; - cellp = cm_FindCellByID(scp->fid.cell); + cellp = cm_FindCellByID(scp->fid.cell); - cm_ReleaseSCache(scp); + cm_ReleaseSCache(scp); - if (!cellp) - return CM_ERROR_NOSUCHCELL; + if (!cellp) + return CM_ERROR_NOSUCHCELL; - code = cm_GetVolumeByID(cellp, volume, userp, &req, CM_GETVOL_FLAG_CREATE, &tvp); - if (code) - return code; + code = cm_GetVolumeByID(cellp, volume, userp, &req, CM_GETVOL_FLAG_CREATE, &tvp); + if (code) + return code; - if (volume == tvp->rw.ID) - statep = &tvp->rw; - else if (volume == tvp->ro.ID) - statep = &tvp->ro; - else - statep = &tvp->bk; + if (volume == tvp->rw.ID) + statep = &tvp->rw; + else if (volume == tvp->ro.ID) + statep = &tvp->ro; + else + statep = &tvp->bk; - switch (statep->state) { - case vl_online: - case vl_unknown: - code = 0; - break; - case vl_busy: - code = CM_ERROR_ALLBUSY; - break; - case vl_offline: - code = CM_ERROR_ALLOFFLINE; - break; - case vl_alldown: - code = CM_ERROR_ALLDOWN; - break; + switch (statep->state) { + case vl_online: + case vl_unknown: + code = 0; + break; + case vl_busy: + code = CM_ERROR_ALLBUSY; + break; + case vl_offline: + code = CM_ERROR_ALLOFFLINE; + break; + case vl_alldown: + code = CM_ERROR_ALLDOWN; + break; + } + cm_PutVolume(tvp); } - cm_PutVolume(tvp); return code; } diff --git a/src/WINNT/afsd/cm_memmap.h b/src/WINNT/afsd/cm_memmap.h index fc48e8105d..21c9a571ba 100644 --- a/src/WINNT/afsd/cm_memmap.h +++ b/src/WINNT/afsd/cm_memmap.h @@ -46,7 +46,7 @@ typedef struct cm_config_data { cm_fid_t rootFid; cm_scache_t * rootSCachep; cm_scache_t fakeSCache; - afs_uint32 fakeDirVersion; + afs_uint64 fakeDirVersion; cm_aclent_t * aclLRUp; cm_aclent_t * aclLRUEndp; diff --git a/src/WINNT/afsd/cm_scache.c b/src/WINNT/afsd/cm_scache.c index f4138b45c9..8fca3278f5 100644 --- a/src/WINNT/afsd/cm_scache.c +++ b/src/WINNT/afsd/cm_scache.c @@ -38,6 +38,8 @@ osi_rwlock_t cm_scacheLock; /* Dummy scache entry for use with pioctl fids */ cm_scache_t cm_fakeSCache; +osi_queue_t * cm_allFreeWaiters; /* protected by cm_scacheLock */ + #ifdef AFS_FREELANCE_CLIENT extern osi_mutex_t cm_Freelance_Lock; #endif @@ -147,8 +149,8 @@ long cm_RecycleSCache(cm_scache_t *scp, afs_int32 flags) buf_CleanDirtyBuffers(scp); } else { /* look for things that shouldn't still be set */ - osi_assert(scp->bufWritesp == NULL); - osi_assert(scp->bufReadsp == NULL); + osi_assertx(scp->bufWritesp == NULL, "non-null cm_scache_t bufWritesp"); + osi_assertx(scp->bufReadsp == NULL, "non-null cm_scache_t bufReadsp"); } #endif @@ -166,6 +168,7 @@ long cm_RecycleSCache(cm_scache_t *scp, afs_int32 flags) scp->dataVersion = 0; scp->bulkStatProgress = hzero; scp->waitCount = 0; + scp->waitQueueT = NULL; if (scp->cbServerp) { cm_PutServer(scp->cbServerp); @@ -203,6 +206,7 @@ long cm_RecycleSCache(cm_scache_t *scp, afs_int32 flags) scp->serverLock = (-1); scp->exclusiveLocks = 0; scp->sharedLocks = 0; + scp->lockDataVersion = -1; /* not locked, but there can be no references to this guy * while we hold the global refcount lock. @@ -240,7 +244,8 @@ cm_scache_t *cm_GetNewSCache(void) scp; scp = (cm_scache_t *) osi_QPrev(&scp->q)) { - osi_assert(scp >= cm_data.scacheBaseAddress && scp < (cm_scache_t *)cm_data.scacheHashTablep); + osi_assertx(scp >= cm_data.scacheBaseAddress && scp < (cm_scache_t *)cm_data.scacheHashTablep, + "invalid cm_scache_t address"); if (scp->refCount == 0) { if (scp->flags & CM_SCACHEFLAG_DELETED) { @@ -309,7 +314,8 @@ cm_scache_t *cm_GetNewSCache(void) * quota or we have a leak and need to allocate a new one to avoid panicing. */ scp = cm_data.scacheBaseAddress + cm_data.currentSCaches; - osi_assert(scp >= cm_data.scacheBaseAddress && scp < (cm_scache_t *)cm_data.scacheHashTablep); + osi_assertx(scp >= cm_data.scacheBaseAddress && scp < (cm_scache_t *)cm_data.scacheHashTablep, + "invalid cm_scache_t address"); memset(scp, 0, sizeof(cm_scache_t)); scp->magic = CM_SCACHE_MAGIC; lock_InitializeMutex(&scp->mx, "cm_scache_t mutex"); @@ -492,8 +498,14 @@ cm_SuspendSCache(void) lock_ObtainWrite(&cm_scacheLock); for ( scp = cm_data.allSCachesp; scp; scp = scp->allNextp ) { - if (scp->cbServerp) + if (scp->cbServerp) { + if (scp->flags & CM_SCACHEFLAG_PURERO && scp->volp) { + if (scp->volp->cbExpiresRO == scp->cbExpires) { + scp->volp->cbExpiresRO = now+1; + } + } scp->cbExpires = now+1; + } } lock_ReleaseWrite(&cm_scacheLock); } @@ -576,6 +588,7 @@ void cm_InitSCache(int newFile, long maxSCaches) scp->dirBplus = NULL; scp->dirDataVersion = -1; #endif + scp->waitQueueT = NULL; scp->flags &= ~CM_SCACHEFLAG_WAITING; } } @@ -583,6 +596,7 @@ void cm_InitSCache(int newFile, long maxSCaches) cm_freeFileLocks = NULL; cm_lockRefreshCycle = 0; cm_fakeSCacheInit(newFile); + cm_allFreeWaiters = NULL; cm_dnlcInit(newFile); osi_EndOnce(&once); } @@ -633,7 +647,7 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, hash = CM_SCACHE_HASH(fidp); - osi_assert(fidp->cell != 0); + osi_assertx(fidp->cell != 0, "unassigned cell value"); if (fidp->cell== cm_data.rootFid.cell && fidp->volume==cm_data.rootFid.volume && @@ -779,7 +793,7 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, osi_Log1(afsd_logp,"cm_GetSCache (3) outScpp 0x%p", scp); #endif cm_HoldSCacheNoLock(scp); - osi_assert(scp->volp == volp); + osi_assertx(scp->volp == volp, "cm_scache_t volume has unexpected value"); cm_AdjustScacheLRU(scp); lock_ReleaseWrite(&cm_scacheLock); if (volp) @@ -800,7 +814,7 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, } osi_Log2(afsd_logp,"cm_GetNewSCache returns scp 0x%x flags 0x%x", scp, scp->flags); - osi_assert(!(scp->flags & CM_SCACHEFLAG_INHASH)); + osi_assertx(!(scp->flags & CM_SCACHEFLAG_INHASH), "CM_SCACHEFLAG_INHASH set"); #if not_too_dangerous /* dropping the cm_scacheLock allows more than one thread @@ -884,6 +898,69 @@ cm_scache_t * cm_FindSCacheParent(cm_scache_t * scp) return pscp; } +void cm_SyncOpAddToWaitQueue(cm_scache_t * scp, afs_int32 flags, cm_buf_t * bufp) +{ + cm_scache_waiter_t * w; + + lock_ObtainWrite(&cm_scacheLock); + if (cm_allFreeWaiters == NULL) { + w = malloc(sizeof(*w)); + memset(w, 0, sizeof(*w)); + } else { + w = (cm_scache_waiter_t *) cm_allFreeWaiters; + osi_QRemove(&cm_allFreeWaiters, (osi_queue_t *) w); + } + + w->threadId = thrd_Current(); + w->scp = scp; + cm_HoldSCacheNoLock(scp); + w->flags = flags; + w->bufp = bufp; + + osi_QAddT(&scp->waitQueueH, &scp->waitQueueT, (osi_queue_t *) w); + lock_ReleaseWrite(&cm_scacheLock); + + osi_Log2(afsd_logp, "cm_SyncOpAddToWaitQueue : Adding thread to wait queue scp 0x%p w 0x%p", scp, w); +} + +int cm_SyncOpCheckContinue(cm_scache_t * scp, afs_int32 flags, cm_buf_t * bufp) +{ + cm_scache_waiter_t * w; + int this_is_me; + + osi_Log0(afsd_logp, "cm_SyncOpCheckContinue checking for continuation"); + + lock_ObtainRead(&cm_scacheLock); + for (w = (cm_scache_waiter_t *)scp->waitQueueH; + w; + w = (cm_scache_waiter_t *)osi_QNext((osi_queue_t *) w)) { + if (w->flags == flags && w->bufp == bufp) { + break; + } + } + + osi_assertx(w != NULL, "null cm_scache_waiter_t"); + this_is_me = (w->threadId == thrd_Current()); + lock_ReleaseRead(&cm_scacheLock); + + if (!this_is_me) { + osi_Log1(afsd_logp, "cm_SyncOpCheckContinue MISS: Waiter 0x%p", w); + return 0; + } + + osi_Log1(afsd_logp, "cm_SyncOpCheckContinue HIT: Waiter 0x%p", w); + + lock_ObtainWrite(&cm_scacheLock); + osi_QRemoveHT(&scp->waitQueueH, &scp->waitQueueT, (osi_queue_t *) w); + cm_ReleaseSCacheNoLock(scp); + memset(w, 0, sizeof(*w)); + osi_QAdd(&cm_allFreeWaiters, (osi_queue_t *) w); + lock_ReleaseWrite(&cm_scacheLock); + + return 1; +} + + /* synchronize a fetch, store, read, write, fetch status or store status. * Called with scache mutex held, and returns with it held, but temporarily * drops it during the fetch. @@ -950,12 +1027,13 @@ long cm_SyncOp(cm_scache_t *scp, cm_buf_t *bufp, cm_user_t *userp, cm_req_t *req afs_uint32 sleep_scp_flags = 0; afs_uint32 sleep_buf_cmflags = 0; afs_uint32 sleep_scp_bufs = 0; + int wakeupCycle; /* lookup this first */ bufLocked = flags & CM_SCACHESYNC_BUFLOCKED; - if (bufp) - osi_assert(bufp->refCount > 0); + if (bufp) + osi_assertx(bufp->refCount > 0, "cm_buf_t refCount 0"); /* Do the access check. Now we don't really do the access check @@ -1147,7 +1225,7 @@ long cm_SyncOp(cm_scache_t *scp, cm_buf_t *bufp, cm_user_t *userp, cm_req_t *req if (rights) { /* can't check access rights without a callback */ - osi_assert(flags & CM_SCACHESYNC_NEEDCALLBACK); + osi_assertx(flags & CM_SCACHESYNC_NEEDCALLBACK, "!CM_SCACHESYNC_NEEDCALLBACK"); if ((rights & PRSFS_WRITE) && (scp->flags & CM_SCACHEFLAG_RO)) return CM_ERROR_READONLY; @@ -1181,6 +1259,7 @@ long cm_SyncOp(cm_scache_t *scp, cm_buf_t *bufp, cm_user_t *userp, cm_req_t *req if (flags & CM_SCACHESYNC_NOWAIT) return CM_ERROR_WOULDBLOCK; + /* These are used for minidump debugging */ sleep_scp_flags = scp->flags; /* so we know why we slept */ sleep_buf_cmflags = bufp ? bufp->cmFlags : 0; sleep_scp_bufs = (scp->bufReadsp ? 1 : 0) | (scp->bufWritesp ? 2 : 0); @@ -1197,9 +1276,17 @@ long cm_SyncOp(cm_scache_t *scp, cm_buf_t *bufp, cm_user_t *userp, cm_req_t *req scp->flags |= CM_SCACHEFLAG_WAITING; scp->waitCount = scp->waitRequests = 1; } + if (bufLocked) lock_ReleaseMutex(&bufp->mx); - osi_SleepM((LONG_PTR) &scp->flags, &scp->mx); + + cm_SyncOpAddToWaitQueue(scp, flags, bufp); + wakeupCycle = 0; + do { + if (wakeupCycle++ != 0) + lock_ObtainMutex(&scp->mx); + osi_SleepM((LONG_PTR) &scp->flags, &scp->mx); + } while (!cm_SyncOpCheckContinue(scp, flags, bufp)); smb_UpdateServerPriority(); @@ -1238,7 +1325,7 @@ long cm_SyncOp(cm_scache_t *scp, cm_buf_t *bufp, cm_user_t *userp, cm_req_t *req if (bufp) { for(qdp = scp->bufReadsp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) { tbufp = osi_GetQData(qdp); - osi_assert(tbufp != bufp); + osi_assertx(tbufp != bufp, "unexpected cm_buf_t value"); } } @@ -1257,7 +1344,7 @@ long cm_SyncOp(cm_scache_t *scp, cm_buf_t *bufp, cm_user_t *userp, cm_req_t *req if (bufp) { for(qdp = scp->bufWritesp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) { tbufp = osi_GetQData(qdp); - osi_assert(tbufp != bufp); + osi_assertx(tbufp != bufp, "unexpected cm_buf_t value"); } } @@ -1360,7 +1447,7 @@ void cm_SyncOpDone(cm_scache_t *scp, cm_buf_t *bufp, afs_uint32 flags) if (flags & CM_SCACHESYNC_WRITE) { if (bufp) { - osi_assert(bufp->cmFlags & CM_BUF_CMWRITING); + osi_assertx(bufp->cmFlags & CM_BUF_CMWRITING, "!CM_BUF_CMWRITING"); bufp->cmFlags &= ~CM_BUF_CMWRITING; } @@ -1391,6 +1478,8 @@ void cm_MergeStatus(cm_scache_t *dscp, AFSVolSync *volsyncp, cm_user_t *userp, afs_uint32 flags) { + afs_uint64 dataVersion; + // yj: i want to create some fake status for the /afs directory and the // entries under that directory #ifdef AFS_FREELANCE_CLIENT @@ -1401,7 +1490,7 @@ void cm_MergeStatus(cm_scache_t *dscp, statusp->LinkCount = scp->linkCount; statusp->Length = cm_fakeDirSize; statusp->Length_hi = 0; - statusp->DataVersion = cm_data.fakeDirVersion; + statusp->DataVersion = (afs_uint32)(cm_data.fakeDirVersion & 0xFFFFFFFF); statusp->Author = 0x1; statusp->Owner = 0x0; statusp->CallerAccess = 0x9; @@ -1414,7 +1503,7 @@ void cm_MergeStatus(cm_scache_t *dscp, statusp->ServerModTime = FakeFreelanceModTime; statusp->Group = 0; statusp->SyncCounter = 0; - statusp->dataVersionHigh = 0; + statusp->dataVersionHigh = (afs_uint32)(cm_data.fakeDirVersion >> 32); statusp->errorCode = 0; } #endif /* AFS_FREELANCE_CLIENT */ @@ -1450,8 +1539,11 @@ void cm_MergeStatus(cm_scache_t *dscp, scp->flags &= ~CM_SCACHEFLAG_EACCESS; } - if (!(flags & CM_MERGEFLAG_FORCE) - && statusp->DataVersion < (unsigned long) scp->dataVersion) { + dataVersion = statusp->dataVersionHigh; + dataVersion <<= 32; + dataVersion |= statusp->DataVersion; + + if (!(flags & CM_MERGEFLAG_FORCE) && dataVersion < scp->dataVersion) { struct cm_cell *cellp; cellp = cm_FindCellByID(scp->fid.cell); @@ -1466,8 +1558,8 @@ void cm_MergeStatus(cm_scache_t *dscp, if (volp) cm_PutVolume(volp); } - osi_Log3(afsd_logp, "Bad merge, scp %x, scp dv %d, RPC dv %d", - scp, scp->dataVersion, statusp->DataVersion); + osi_Log3(afsd_logp, "Bad merge, scp %x, scp dv %I64d, RPC dv %I64d", + scp, scp->dataVersion, dataVersion); /* we have a number of data fetch/store operations running * concurrently, and we can tell which one executed last at the * server by its mtime. @@ -1544,19 +1636,18 @@ void cm_MergeStatus(cm_scache_t *dscp, cm_AddACLCache(scp, userp, statusp->CallerAccess); } - if ((flags & CM_MERGEFLAG_STOREDATA) && - statusp->DataVersion - scp->dataVersion == 1) { + if ((flags & CM_MERGEFLAG_STOREDATA) && dataVersion - scp->dataVersion == 1) { cm_buf_t *bp; for (bp = cm_data.buf_fileHashTablepp[BUF_FILEHASH(&scp->fid)]; bp; bp=bp->fileHashp) { if (cm_FidCmp(&scp->fid, &bp->fid) == 0 && bp->dataVersion == scp->dataVersion) - bp->dataVersion = statusp->DataVersion; + bp->dataVersion = dataVersion; } } - scp->dataVersion = statusp->DataVersion; + scp->dataVersion = dataVersion; } /* note that our stat cache info is incorrect, so force us eventually @@ -1597,7 +1688,7 @@ void cm_HoldSCacheNoLockDbg(cm_scache_t *scp, char * file, long line) void cm_HoldSCacheNoLock(cm_scache_t *scp) #endif { - osi_assert(scp != 0); + osi_assertx(scp != NULL, "null cm_scache_t"); scp->refCount++; #ifdef DEBUG_REFCOUNT osi_Log2(afsd_logp,"cm_HoldSCacheNoLock scp 0x%p ref %d",scp, scp->refCount); @@ -1611,7 +1702,7 @@ void cm_HoldSCacheDbg(cm_scache_t *scp, char * file, long line) void cm_HoldSCache(cm_scache_t *scp) #endif { - osi_assert(scp != 0); + osi_assertx(scp != NULL, "null cm_scache_t"); lock_ObtainWrite(&cm_scacheLock); scp->refCount++; #ifdef DEBUG_REFCOUNT @@ -1627,10 +1718,10 @@ void cm_ReleaseSCacheNoLockDbg(cm_scache_t *scp, char * file, long line) void cm_ReleaseSCacheNoLock(cm_scache_t *scp) #endif { - osi_assert(scp != NULL); + osi_assertx(scp != NULL, "null cm_scache_t"); if (scp->refCount == 0) osi_Log1(afsd_logp,"cm_ReleaseSCacheNoLock about to panic scp 0x%x",scp); - osi_assert(scp->refCount-- >= 0); + osi_assertx(scp->refCount-- >= 0, "cm_scache_t refCount 0"); #ifdef DEBUG_REFCOUNT osi_Log2(afsd_logp,"cm_ReleaseSCacheNoLock scp 0x%p ref %d",scp,scp->refCount); afsi_log("%s:%d cm_ReleaseSCacheNoLock scp 0x%p ref %d", file, line, scp, scp->refCount); @@ -1643,11 +1734,11 @@ void cm_ReleaseSCacheDbg(cm_scache_t *scp, char * file, long line) void cm_ReleaseSCache(cm_scache_t *scp) #endif { - osi_assert(scp != NULL); + osi_assertx(scp != NULL, "null cm_scache_t"); lock_ObtainWrite(&cm_scacheLock); if (scp->refCount == 0) osi_Log1(afsd_logp,"cm_ReleaseSCache about to panic scp 0x%x",scp); - osi_assert(scp->refCount != 0); + osi_assertx(scp->refCount != 0, "cm_scache_t refCount 0"); scp->refCount--; #ifdef DEBUG_REFCOUNT osi_Log2(afsd_logp,"cm_ReleaseSCache scp 0x%p ref %d",scp,scp->refCount); @@ -1665,7 +1756,7 @@ int cm_FindFileType(cm_fid_t *fidp) hash = CM_SCACHE_HASH(fidp); - osi_assert(fidp->cell != 0); + osi_assertx(fidp->cell != 0, "unassigned cell value"); lock_ObtainWrite(&cm_scacheLock); for (scp=cm_data.scacheHashTablep[hash]; scp; scp=scp->nextp) { @@ -1697,7 +1788,7 @@ int cm_DumpSCache(FILE *outputFile, char *cookie, int lock) for (scp = cm_data.allSCachesp; scp; scp = scp->allNextp) { - sprintf(output, "%s scp=0x%p, fid (cell=%d, volume=%d, vnode=%d, unique=%d) volp=0x%p type=%d dv=%d len=0x%I64x mp='%s' flags=0x%x cb=0x%x refCount=%u\r\n", + sprintf(output, "%s scp=0x%p, fid (cell=%d, volume=%d, vnode=%d, unique=%d) volp=0x%p type=%d dv=%I64d len=0x%I64x mp='%s' flags=0x%x cb=0x%x refCount=%u\r\n", cookie, scp, scp->fid.cell, scp->fid.volume, scp->fid.vnode, scp->fid.unique, scp->volp, scp->fileType, scp->dataVersion, scp->length.QuadPart, scp->mountPointStringp, scp->flags, (unsigned long)scp->cbExpires, scp->refCount); diff --git a/src/WINNT/afsd/cm_scache.h b/src/WINNT/afsd/cm_scache.h index 01b07dbbc7..8bc373912b 100644 --- a/src/WINNT/afsd/cm_scache.h +++ b/src/WINNT/afsd/cm_scache.h @@ -120,7 +120,7 @@ typedef struct cm_scache { cm_prefetch_t prefetch; /* prefetch info structure */ afs_uint32 unixModeBits; /* unix protection mode bits */ afs_uint32 linkCount; /* link count */ - afs_uint32 dataVersion; /* data version */ + afs_uint64 dataVersion; /* data version */ afs_uint32 owner; /* file owner */ afs_uint32 group; /* file owning group */ cm_user_t *creator; /* user, if new file */ @@ -165,7 +165,7 @@ typedef struct cm_scache { */ unsigned long lastRefreshCycle; /* protected with cm_scacheLock * for all scaches. */ - afs_uint32 lockDataVersion; /* dataVersion of the scp at the time + afs_uint64 lockDataVersion; /* dataVersion of the scp at the time the server lock for the scp was asserted for this lock the last time. */ @@ -196,7 +196,7 @@ typedef struct cm_scache { #ifdef USE_BPLUS /* directory B+ tree */ /* only allocated if is directory */ osi_rwlock_t dirlock; /* controls access to dirBplus */ - afs_uint32 dirDataVersion; /* data version represented by dirBplus */ + afs_uint64 dirDataVersion; /* data version represented by dirBplus */ struct tree *dirBplus; /* dirBplus */ #endif @@ -209,6 +209,12 @@ typedef struct cm_scache { /* syncop state */ afs_uint32 waitCount; /* number of threads waiting */ afs_uint32 waitRequests; /* num of thread wait requests */ + osi_queue_t * waitQueueH; /* Queue of waiting threads. + Holds queue of + cm_scache_waiter_t + objects. Protected by + cm_cacheLock. */ + osi_queue_t * waitQueueT; /* locked by cm_scacheLock */ } cm_scache_t; /* mask field - tell what has been modified */ @@ -312,6 +318,15 @@ typedef struct cm_scache { (fidp)->unique)) \ % cm_data.scacheHashTableSize) +typedef struct cm_scache_waiter { + osi_queue_t q; + afs_int32 threadId; + + cm_scache_t *scp; + afs_int32 flags; + void *bufp; +} cm_scache_waiter_t; + #include "cm_conn.h" #include "cm_buf.h" diff --git a/src/WINNT/afsd/cm_server.c b/src/WINNT/afsd/cm_server.c index 870631cf18..24aab7fdff 100644 --- a/src/WINNT/afsd/cm_server.c +++ b/src/WINNT/afsd/cm_server.c @@ -277,13 +277,13 @@ void cm_GetServerNoLock(cm_server_t *serverp) void cm_PutServer(cm_server_t *serverp) { lock_ObtainWrite(&cm_serverLock); - osi_assert(serverp->refCount-- > 0); + osi_assertx(serverp->refCount-- > 0, "cm_server_t refCount 0"); lock_ReleaseWrite(&cm_serverLock); } void cm_PutServerNoLock(cm_server_t *serverp) { - osi_assert(serverp->refCount-- > 0); + osi_assertx(serverp->refCount-- > 0, "cm_server_t refCount 0"); } void cm_SetServerNo64Bit(cm_server_t * serverp, int no64bit) @@ -368,7 +368,7 @@ void cm_SetServerPrefs(cm_server_t * serverp) cm_server_t *cm_NewServer(struct sockaddr_in *socketp, int type, cm_cell_t *cellp) { cm_server_t *tsp; - osi_assert(socketp->sin_family == AF_INET); + osi_assertx(socketp->sin_family == AF_INET, "unexpected socket family"); tsp = malloc(sizeof(*tsp)); if (tsp) { @@ -413,7 +413,7 @@ cm_server_t *cm_FindServer(struct sockaddr_in *addrp, int type) { cm_server_t *tsp; - osi_assert(addrp->sin_family == AF_INET); + osi_assertx(addrp->sin_family == AF_INET, "unexpected socket value"); lock_ObtainWrite(&cm_serverLock); for (tsp = cm_allServersp; tsp; tsp=tsp->allNextp) { diff --git a/src/WINNT/afsd/cm_user.c b/src/WINNT/afsd/cm_user.c index 8102465428..0aff8f6d3c 100644 --- a/src/WINNT/afsd/cm_user.c +++ b/src/WINNT/afsd/cm_user.c @@ -114,7 +114,7 @@ void cm_ReleaseUser(cm_user_t *userp) return; lock_ObtainWrite(&cm_userLock); - osi_assert(userp->refCount-- > 0); + osi_assertx(userp->refCount-- > 0, "cm_user_t refCount 0"); if (userp->refCount == 0) { lock_FinalizeMutex(&userp->mx); for (ucp = userp->cellInfop; ucp; ucp = ncp) { @@ -145,7 +145,7 @@ void cm_HoldUserVCRef(cm_user_t *userp) void cm_ReleaseUserVCRef(cm_user_t *userp) { lock_ObtainMutex(&userp->mx); - osi_assert(userp->vcRefs-- > 0); + osi_assertx(userp->vcRefs-- > 0, "cm_user_t refCount 0"); lock_ReleaseMutex(&userp->mx); } @@ -222,3 +222,20 @@ void cm_CheckTokenCache(time_t now) } lock_ReleaseWrite(&smb_rctLock); } + +#ifdef USE_ROOT_TOKENS +/* + * Service/Parameters/RootTokens// + * -> UseLSA + * -> Keytab (required if UseLSA is 0) + * -> Principal (required if there is more than one principal in the keytab) + * -> Realm (required if realm is not upper-case of + * -> RequireEncryption + */ + +void +cm_RefreshRootTokens(void) +{ + +} +#endif diff --git a/src/WINNT/afsd/cm_utils.c b/src/WINNT/afsd/cm_utils.c index 338f5badaa..1c7de6191b 100644 --- a/src/WINNT/afsd/cm_utils.c +++ b/src/WINNT/afsd/cm_utils.c @@ -14,7 +14,6 @@ #ifndef DJGPP #include #include -#include #ifndef EWOULDBLOCK #define EWOULDBLOCK WSAEWOULDBLOCK #define EINPROGRESS WSAEINPROGRESS @@ -64,6 +63,7 @@ #define EREMOTE WSAEREMOTE #endif /* EWOULDBLOCK */ #endif /* !DJGPP */ +#include #include #include @@ -251,8 +251,9 @@ long cm_MapRPCError(long error, cm_req_t *reqp) error = CM_ERROR_NOTDIR; else if (error == 2) /* ENOENT */ error = CM_ERROR_NOSUCHFILE; - else if (error == 11 /* EAGAIN, most servers */ - || error == 35) /* EAGAIN, Digital UNIX */ + else if (error == 11 /* EAGAIN, most servers */ + || error == 35 /* EAGAIN, Digital UNIX */ + || error == WSAEWOULDBLOCK) error = CM_ERROR_WOULDBLOCK; else if (error == VDISKFULL || error == 28) /* ENOSPC */ diff --git a/src/WINNT/afsd/cm_vnodeops.c b/src/WINNT/afsd/cm_vnodeops.c index a0ef4b4f1c..814aa96a13 100644 --- a/src/WINNT/afsd/cm_vnodeops.c +++ b/src/WINNT/afsd/cm_vnodeops.c @@ -31,6 +31,8 @@ extern void afsi_log(char *pattern, ...); int cm_enableServerLocks = 1; +int cm_followBackupPath = 0; + /* * Case-folding array. This was constructed by inspecting of SMBtrace output. * I do not know anything more about it. @@ -337,7 +339,7 @@ long cm_CheckNTOpen(cm_scache_t *scp, unsigned int desiredAccess, long rights; long code; - osi_assert(ldpp != NULL); + osi_assertx(ldpp != NULL, "null cm_lock_data_t"); *ldpp = NULL; /* Always allow delete; the RPC will tell us if it's OK */ @@ -1050,7 +1052,7 @@ long cm_FollowMountPoint(cm_scache_t *scp, cm_scache_t *dscp, cm_user_t *userp, char mtType; cm_fid_t tfid; size_t vnLength; - int type; + int targetType; if (scp->mountRootFid.cell != 0 && scp->mountRootGen >= cm_data.mountRootGen) { tfid = scp->mountRootFid; @@ -1094,15 +1096,15 @@ long cm_FollowMountPoint(cm_scache_t *scp, cm_scache_t *dscp, cm_user_t *userp, vnLength = strlen(volNamep); if (vnLength >= 8 && strcmp(volNamep + vnLength - 7, ".backup") == 0) - type = BACKVOL; + targetType = BACKVOL; else if (vnLength >= 10 && strcmp(volNamep + vnLength - 9, ".readonly") == 0) - type = ROVOL; + targetType = ROVOL; else - type = RWVOL; + targetType = RWVOL; /* check for backups within backups */ - if (type == BACKVOL + if (targetType == BACKVOL && (scp->flags & (CM_SCACHEFLAG_RO | CM_SCACHEFLAG_PURERO)) == CM_SCACHEFLAG_RO) { code = CM_ERROR_NOSUCHVOLUME; @@ -1132,17 +1134,30 @@ long cm_FollowMountPoint(cm_scache_t *scp, cm_scache_t *dscp, cm_user_t *userp, lock_ReleaseMutex(&volp->mx); scp->mountRootFid.cell = cellp->cellID; + + /* if the mt pt originates in a .backup volume (not a .readonly) + * and FollowBackupPath is active, and if there is a .backup + * volume for the target, then use the .backup of the target + * instead of the read-write. + */ + if (cm_followBackupPath && targetType == RWVOL && + (scp->flags & CM_SCACHEFLAG_RO|CM_SCACHEFLAG_PURERO) == CM_SCACHEFLAG_RO && + volp->bk.ID != 0) { + targetType = BACKVOL; + } /* if the mt pt is in a read-only volume (not just a * backup), and if there is a read-only volume for the - * target, and if this is a type '#' mount point, use + * target, and if this is a targetType '#' mount point, use * the read-only, otherwise use the one specified. */ - if (mtType == '#' && (scp->flags & CM_SCACHEFLAG_PURERO) - && volp->ro.ID != 0 && type == RWVOL) - type = ROVOL; - if (type == ROVOL) + else if (mtType == '#' && targetType == RWVOL && + (scp->flags & CM_SCACHEFLAG_PURERO) && + volp->ro.ID != 0) { + targetType = ROVOL; + } + if (targetType == ROVOL) scp->mountRootFid.volume = volp->ro.ID; - else if (type == BACKVOL) + else if (targetType == BACKVOL) scp->mountRootFid.volume = volp->bk.ID; else scp->mountRootFid.volume = volp->rw.ID; @@ -2286,7 +2301,7 @@ cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp, cm_user_t *userp, osi_Log1(afsd_logp, "cm_TryBulkStat dir 0x%p", dscp); /* should be on a buffer boundary */ - osi_assert((offsetp->LowPart & (cm_data.buf_blockSize - 1)) == 0); + osi_assertx((offsetp->LowPart & (cm_data.buf_blockSize - 1)) == 0, "invalid offset"); memset(&bb, 0, sizeof(bb)); bb.bufOffset = *offsetp; @@ -3905,7 +3920,7 @@ static cm_file_lock_t * cm_GetFileLock(void) { osi_QRemove(&cm_freeFileLocks, &l->q); } else { l = malloc(sizeof(cm_file_lock_t)); - osi_assert(l); + osi_assertx(l, "null cm_file_lock_t"); } memset(l, 0, sizeof(cm_file_lock_t)); @@ -4048,7 +4063,7 @@ long cm_LockCheckPerms(cm_scache_t * scp, rights |= PRSFS_WRITE | PRSFS_LOCK; else { /* hmmkay */ - osi_assert(FALSE); + osi_assertx(FALSE, "invalid lock type"); return 0; } @@ -4257,7 +4272,7 @@ long cm_Lock(cm_scache_t *scp, unsigned char sLockType, osi_Log0(afsd_logp, " attempting to UPGRADE from LockRead to LockWrite."); osi_Log1(afsd_logp, - " dataVersion on scp: %d", scp->dataVersion); + " dataVersion on scp: %I64d", scp->dataVersion); /* we assume at this point (because scp->serverLock was valid) that we had a valid server lock. */ @@ -4292,7 +4307,7 @@ long cm_Lock(cm_scache_t *scp, unsigned char sLockType, newLock = Which; /* am I sane? */ - osi_assert(newLock == LockRead); + osi_assertx(newLock == LockRead, "lock type not read"); code = cm_IntSetLock(scp, userp, newLock, reqp); } @@ -4348,7 +4363,7 @@ long cm_Lock(cm_scache_t *scp, unsigned char sLockType, osi_Log0(afsd_logp, " Data version mismatch while upgrading lock."); osi_Log2(afsd_logp, - " Data versions before=%d, after=%d", + " Data versions before=%I64d, after=%I64d", scp->lockDataVersion, scp->dataVersion); osi_Log1(afsd_logp, @@ -4508,7 +4523,7 @@ long cm_UnlockByKey(cm_scache_t * scp, fileLock->scp->fid.volume, fileLock->scp->fid.vnode, fileLock->scp->fid.unique); - osi_assert(FALSE); + osi_assertx(FALSE, "invalid fid value"); } #endif @@ -4582,7 +4597,7 @@ long cm_UnlockByKey(cm_scache_t * scp, /* since scp->serverLock looked sane, we are going to assume that we have a valid server lock. */ scp->lockDataVersion = scp->dataVersion; - osi_Log1(afsd_logp, " dataVersion on scp = %d", scp->dataVersion); + osi_Log1(afsd_logp, " dataVersion on scp = %I64d", scp->dataVersion); code = cm_IntReleaseLock(scp, userp, reqp); @@ -4604,7 +4619,7 @@ long cm_UnlockByKey(cm_scache_t * scp, we have lost the lock we had during the transition. */ osi_Log0(afsd_logp, "Data version mismatch during lock downgrade"); - osi_Log2(afsd_logp, " Data versions before=%d, after=%d", + osi_Log2(afsd_logp, " Data versions before=%I64d, after=%I64d", scp->lockDataVersion, scp->dataVersion); @@ -4683,7 +4698,7 @@ long cm_Unlock(cm_scache_t *scp, fileLock->scp->fid.volume, fileLock->scp->fid.vnode, fileLock->scp->fid.unique); - osi_assert(FALSE); + osi_assertx(FALSE, "invalid fid value"); } #endif if (!IS_LOCK_DELETED(fileLock) && @@ -4759,7 +4774,7 @@ long cm_Unlock(cm_scache_t *scp, /* Since we already had a lock, we assume that there is a valid server lock. */ scp->lockDataVersion = scp->dataVersion; - osi_Log1(afsd_logp, " dataVersion on scp is %d", scp->dataVersion); + osi_Log1(afsd_logp, " dataVersion on scp is %I64d", scp->dataVersion); /* before we downgrade, make sure that we have enough permissions to get the read lock. */ @@ -4794,7 +4809,7 @@ long cm_Unlock(cm_scache_t *scp, osi_Log0(afsd_logp, "Data version mismatch while downgrading lock"); osi_Log2(afsd_logp, - " Data versions before=%d, after=%d", + " Data versions before=%I64d, after=%I64d", scp->lockDataVersion, scp->dataVersion); @@ -4850,7 +4865,7 @@ static void cm_LockMarkSCacheLost(cm_scache_t * scp) #ifdef DEBUG /* With the current code, we can't lose a lock on a RO scp */ - osi_assert(!(scp->flags & CM_SCACHEFLAG_RO)); + osi_assertx(!(scp->flags & CM_SCACHEFLAG_RO), "CM_SCACHEFLAG_RO unexpected"); #endif /* cm_scacheLock needed because we are modifying fileLock->flags */ @@ -4911,10 +4926,10 @@ void cm_CheckLocks() /* Server locks must have been enabled for us to have received an active non-client-only lock. */ - osi_assert(cm_enableServerLocks); + osi_assertx(cm_enableServerLocks, "!cm_enableServerLocks"); scp = fileLock->scp; - osi_assert(scp != NULL); + osi_assertx(scp != NULL, "null cm_scache_t"); cm_HoldSCacheNoLock(scp); @@ -4931,7 +4946,7 @@ void cm_CheckLocks() fileLock->scp->fid.volume, fileLock->scp->fid.vnode, fileLock->scp->fid.unique); - osi_assert(FALSE); + osi_assertx(FALSE, "invalid fid"); } #endif /* Server locks are extended once per scp per refresh @@ -5032,7 +5047,7 @@ void cm_CheckLocks() "Data version mismatch on scp 0x%p", scp); osi_Log2(afsd_logp, - " Data versions: before=%d, after=%d", + " Data versions: before=%I64d, after=%I64d", scp->lockDataVersion, scp->dataVersion); @@ -5137,7 +5152,7 @@ long cm_RetryLock(cm_file_lock_t *oldFileLock, int client_is_dead) scp = oldFileLock->scp; - osi_assert(scp != NULL); + osi_assertx(scp != NULL, "null cm_scache_t"); lock_ReleaseRead(&cm_scacheLock); lock_ObtainMutex(&scp->mx); @@ -5243,7 +5258,7 @@ long cm_RetryLock(cm_file_lock_t *oldFileLock, int client_is_dead) oldFileLock->flags |= CM_FILELOCK_FLAG_WAITLOCK; } - osi_assert(IS_LOCK_WAITLOCK(oldFileLock)); + osi_assertx(IS_LOCK_WAITLOCK(oldFileLock), "!IS_LOCK_WAITLOCK"); if (force_client_lock || !SERVERLOCKS_ENABLED(scp) || @@ -5315,7 +5330,7 @@ long cm_RetryLock(cm_file_lock_t *oldFileLock, int client_is_dead) if (scp->serverLock == LockRead) { - osi_assert(newLock == LockWrite); + osi_assertx(newLock == LockWrite, "!LockWrite"); osi_Log0(afsd_logp, " Attempting to UPGRADE from LockRead to LockWrite"); @@ -5339,7 +5354,7 @@ long cm_RetryLock(cm_file_lock_t *oldFileLock, int client_is_dead) osi_Log0(afsd_logp, " Data version mismatch while upgrading lock."); osi_Log2(afsd_logp, - " Data versions before=%d, after=%d", + " Data versions before=%I64d, after=%I64d", scp->lockDataVersion, scp->dataVersion); osi_Log1(afsd_logp, @@ -5394,9 +5409,9 @@ long cm_RetryLock(cm_file_lock_t *oldFileLock, int client_is_dead) cm_key_t cm_GenerateKey(unsigned int session_id, unsigned long process_id, unsigned int file_id) { #ifdef DEBUG - osi_assert((process_id & 0xffffffff) == process_id); - osi_assert((session_id & 0xffff) == session_id); - osi_assert((file_id & 0xffff) == file_id); + osi_assertx((process_id & 0xffffffff) == process_id, "unexpected process_id"); + osi_assertx((session_id & 0xffff) == session_id, "unexpected session_id"); + osi_assertx((file_id & 0xffff) == file_id, "unexpected file_id"); #endif return diff --git a/src/WINNT/afsd/cm_vnodeops.h b/src/WINNT/afsd/cm_vnodeops.h index 96c41dee0d..ac9d59f3f4 100644 --- a/src/WINNT/afsd/cm_vnodeops.h +++ b/src/WINNT/afsd/cm_vnodeops.h @@ -14,6 +14,8 @@ extern unsigned int cm_mountRootGen; extern int cm_enableServerLocks; +extern int cm_followBackupPath; + /* parms for attribute setting call */ typedef struct cm_attr { int mask; diff --git a/src/WINNT/afsd/cm_volstat.c b/src/WINNT/afsd/cm_volstat.c index 9cb6cbf79a..25af0c96ec 100644 --- a/src/WINNT/afsd/cm_volstat.c +++ b/src/WINNT/afsd/cm_volstat.c @@ -1,6 +1,29 @@ -/* Copyright 2007 Secure Endpoints Inc. +/* + * Copyright (c) 2007 Secure Endpoints Inc. * - * BSD 2-part License + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Neither the name of the Secure Endpoints Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. */ /* This source file provides the declarations diff --git a/src/WINNT/afsd/cm_volstat.h b/src/WINNT/afsd/cm_volstat.h index 69b30adaed..877d37c702 100644 --- a/src/WINNT/afsd/cm_volstat.h +++ b/src/WINNT/afsd/cm_volstat.h @@ -1,6 +1,29 @@ -/* Copyright 2007 Secure Endpoints Inc. +/* + * Copyright (c) 2007 Secure Endpoints Inc. * - * BSD 2-part License + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Neither the name of the Secure Endpoints Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. */ /* This header file provides the definitions and prototypes @@ -8,6 +31,7 @@ * Notification API */ +enum volstatus {vl_online, vl_busy, vl_offline, vl_alldown, vl_unknown}; extern long cm_VolStatus_Initialization(void); diff --git a/src/WINNT/afsd/cm_volume.c b/src/WINNT/afsd/cm_volume.c index 847510cc72..cafae60f44 100644 --- a/src/WINNT/afsd/cm_volume.c +++ b/src/WINNT/afsd/cm_volume.c @@ -77,7 +77,7 @@ cm_ShutdownVolume(void) cm_VolumeStatusNotification(volp, volp->ro.ID, volp->ro.state, vl_alldown); if (volp->bk.ID) cm_VolumeStatusNotification(volp, volp->bk.ID, volp->bk.state, vl_alldown); - + volp->cbExpiresRO = 0; lock_FinalizeMutex(&volp->mx); } @@ -118,6 +118,7 @@ void cm_InitVolume(int newFile, long maxVols) cm_VolumeStatusNotification(volp, volp->ro.ID, vl_alldown, volp->ro.state); if (volp->bk.ID) cm_VolumeStatusNotification(volp, volp->bk.ID, vl_alldown, volp->bk.state); + volp->cbExpiresRO = 0; } } osi_EndOnce(&once); @@ -188,6 +189,9 @@ long cm_UpdateVolume(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *reqp, enum volstatus rwNewstate = vl_online; enum volstatus roNewstate = vl_online; enum volstatus bkNewstate = vl_online; +#ifdef AFS_FREELANCE_CLIENT + int freelance = 0; +#endif /* clear out old bindings */ if (volp->rw.serversp) @@ -198,8 +202,9 @@ long cm_UpdateVolume(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *reqp, cm_FreeServerList(&volp->bk.serversp, CM_FREESERVERLIST_DELETE); #ifdef AFS_FREELANCE_CLIENT - if ( cellp->cellID == AFS_FAKE_ROOT_CELL_ID && atoi(volp->namep)==AFS_FAKE_ROOT_VOL_ID ) + if ( cellp->cellID == AFS_FAKE_ROOT_CELL_ID && volp->rw.ID == AFS_FAKE_ROOT_VOL_ID ) { + freelance = 1; memset(&vldbEntry, 0, sizeof(vldbEntry)); vldbEntry.flags |= VLF_RWEXISTS; vldbEntry.volumeId[0] = AFS_FAKE_ROOT_VOL_ID; @@ -289,6 +294,11 @@ long cm_UpdateVolume(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *reqp, afs_int32 bkServers_alldown = 1; char name[VL_MAXNAMELEN]; +#ifdef AFS_FREELANCE_CLIENT + if (freelance) + rwServers_alldown = 0; +#endif + switch ( method ) { case 0: flags = vldbEntry.flags; @@ -447,7 +457,7 @@ long cm_UpdateVolume(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *reqp, if ( !tsp->cellp ) tsp->cellp = cellp; - osi_assert(tsp != NULL); + osi_assertx(tsp != NULL, "null cm_server_t"); /* and add it to the list(s). */ /* @@ -596,7 +606,7 @@ long cm_GetVolumeByID(cm_cell_t *cellp, afs_uint32 volumeID, cm_user_t *userp, } #ifdef SEARCH_ALL_VOLUMES - osi_assert(volp == volp2); + osi_assertx(volp == volp2, "unexpected cm_vol_t"); #endif lock_ReleaseRead(&cm_volumeLock); @@ -631,7 +641,7 @@ long cm_GetVolumeByID(cm_cell_t *cellp, afs_uint32 volumeID, cm_user_t *userp, /* otherwise, we didn't find it so consult the VLDB */ sprintf(volNameString, "%u", volumeID); code = cm_GetVolumeByName(cellp, volNameString, userp, reqp, - flags, outVolpp); + flags, outVolpp); return code; } @@ -681,7 +691,7 @@ long cm_GetVolumeByName(struct cm_cell *cellp, char *volumeNamep, } #ifdef SEARCH_ALL_VOLUMES - osi_assert(volp2 == volp); + osi_assertx(volp2 == volp, "unexpected cm_vol_t"); #endif if (!volp && (flags & CM_GETVOL_FLAG_CREATE)) { @@ -759,6 +769,7 @@ long cm_GetVolumeByName(struct cm_cell *cellp, char *volumeNamep, volp->rw.state = volp->ro.state = volp->bk.state = vl_unknown; volp->rw.nextp = volp->ro.nextp = volp->bk.nextp = NULL; volp->rw.flags = volp->ro.flags = volp->bk.flags = 0; + volp->cbExpiresRO = 0; cm_AddVolumeToNameHashTable(volp); lock_ReleaseWrite(&cm_volumeLock); } @@ -847,7 +858,7 @@ void cm_ForceUpdateVolume(cm_fid_t *fidp, cm_user_t *userp, cm_req_t *reqp) } #ifdef SEARCH_ALL_VOLUMES - osi_assert(volp == volp2); + osi_assertx(volp == volp2, "unexpected cm_vol_t"); #endif lock_ReleaseRead(&cm_volumeLock); @@ -908,7 +919,7 @@ cm_serverRef_t **cm_GetVolServers(cm_volume_t *volp, afs_uint32 volume) void cm_PutVolume(cm_volume_t *volp) { lock_ObtainWrite(&cm_volumeLock); - osi_assert(volp->refCount-- > 0); + osi_assertx(volp->refCount-- > 0, "cm_volume_t refCount 0"); lock_ReleaseWrite(&cm_volumeLock); } @@ -947,7 +958,7 @@ void cm_RefreshVolumes(void) lock_ReleaseMutex(&volp->mx); lock_ObtainWrite(&cm_volumeLock); - osi_assert(volp->refCount-- > 0); + osi_assertx(volp->refCount-- > 0, "cm_volume_t refCount 0"); } lock_ReleaseWrite(&cm_volumeLock); @@ -1103,7 +1114,7 @@ void cm_CheckOfflineVolumes(void) cm_CheckOfflineVolume(volp, 0); lock_ObtainWrite(&cm_volumeLock); - osi_assert(volp->refCount-- > 0); + osi_assertx(volp->refCount-- > 0, "cm_volume_t refCount 0"); } lock_ReleaseWrite(&cm_volumeLock); } @@ -1196,7 +1207,7 @@ void cm_ChangeRankVolume(cm_server_t *tsp) lock_ReleaseMutex(&volp->mx); lock_ObtainWrite(&cm_volumeLock); - osi_assert(volp->refCount-- > 0); + osi_assertx(volp->refCount-- > 0, "cm_volume_t refCount 0"); } lock_ReleaseWrite(&cm_volumeLock); } @@ -1475,3 +1486,52 @@ void cm_VolumeStatusNotification(cm_volume_t * volp, afs_uint32 volID, enum vols cm_VolStatus_Change_Notification(volp->cellp->cellID, volID, new); } + +enum volstatus cm_GetVolumeStatus(cm_volume_t *volp, afs_uint32 volID) +{ + if (volp->rw.ID == volID) { + return volp->rw.state; + } else if (volp->ro.ID == volID) { + return volp->ro.state; + } else if (volp->bk.ID == volID) { + return volp->bk.state; + } else { + return vl_unknown; + } +} + +/* Renew .readonly volume callbacks that are more than + * 30 minutes old. (A volume callback is issued for 2 hours.) + */ +void +cm_VolumeRenewROCallbacks(void) +{ + cm_volume_t * volp; + time_t minexp = time(NULL) + 90 * 60; + + lock_ObtainRead(&cm_volumeLock); + for (volp = cm_data.allVolumesp; volp; volp=volp->allNextp) { + if ( volp->cbExpiresRO > 0 && volp->cbExpiresRO < minexp) { + cm_req_t req; + cm_fid_t fid; + cm_scache_t * scp; + + fid.cell = volp->cellp->cellID; + fid.volume = volp->ro.ID; + fid.vnode = 1; + fid.unique = 1; + + cm_InitReq(&req); + + lock_ReleaseRead(&cm_volumeLock); + if (cm_GetSCache(&fid, &scp, cm_rootUserp, &req) == 0) { + lock_ObtainMutex(&scp->mx); + cm_GetCallback(scp, cm_rootUserp, &req, 1); + lock_ReleaseMutex(&scp->mx); + cm_ReleaseSCache(scp); + } + lock_ObtainRead(&cm_volumeLock); + } + } + lock_ReleaseRead(&cm_volumeLock); +} diff --git a/src/WINNT/afsd/cm_volume.h b/src/WINNT/afsd/cm_volume.h index 791fb267b1..61b84d551d 100644 --- a/src/WINNT/afsd/cm_volume.h +++ b/src/WINNT/afsd/cm_volume.h @@ -14,8 +14,6 @@ #define CM_VOLUME_MAGIC ('V' | 'O' <<8 | 'L'<<16 | 'M'<<24) -enum volstatus {vl_online, vl_busy, vl_offline, vl_alldown, vl_unknown}; - typedef struct cm_vol_state { afs_uint32 ID; /* by mx */ struct cm_volume *nextp; /* volumeIDHashTable; by cm_volumeLock */ @@ -39,6 +37,7 @@ typedef struct cm_volume { osi_mutex_t mx; afs_uint32 flags; /* by mx */ afs_uint32 refCount; /* by cm_volumeLock */ + time_t cbExpiresRO; /* latest RO expiration time; by cm_scacheLock */ } cm_volume_t; #define CM_VOLUMEFLAG_RESET 1 /* reload this info on next use */ @@ -118,4 +117,7 @@ extern void cm_UpdateVolumeStatus(cm_volume_t *volp, afs_uint32 volID); extern void cm_VolumeStatusNotification(cm_volume_t * volp, afs_uint32 volID, enum volstatus old, enum volstatus new); +extern enum volstatus cm_GetVolumeStatus(cm_volume_t *volp, afs_uint32 volID); + +extern void cm_VolumeRenewROCallbacks(void); #endif /* __CM_VOLUME_H_ENV__ */ diff --git a/src/WINNT/afsd/cunlog.c b/src/WINNT/afsd/cunlog.c index fb40184431..49a82f861b 100644 --- a/src/WINNT/afsd/cunlog.c +++ b/src/WINNT/afsd/cunlog.c @@ -15,9 +15,8 @@ #include #include -CommandProc (as, arock) - char *arock; - struct cmd_syndesc *as; +static int +CommandProc (struct cmd_syndesc *as, void *arock) { afs_int32 code, ecode=0; struct ktc_principal server; @@ -55,7 +54,7 @@ main(argc, argv) WSAStartup(0x0101, &WSAjunk); - ts = cmd_CreateSyntax((char *) 0, CommandProc, 0, "Release Kerberos authentication"); + ts = cmd_CreateSyntax(NULL, CommandProc, NULL, "Release Kerberos authentication"); cmd_AddParm(ts, "-cell", CMD_LIST, CMD_OPTIONAL, "cell name"); code = cmd_Dispatch(argc, argv); diff --git a/src/WINNT/afsd/fs.c b/src/WINNT/afsd/fs.c index 5302eb1f8a..9ca8b7dacb 100644 --- a/src/WINNT/afsd/fs.c +++ b/src/WINNT/afsd/fs.c @@ -50,17 +50,17 @@ static char tspace[1024]; static struct ubik_client *uclient; -static int GetClientAddrsCmd(struct cmd_syndesc *asp, char *arock); -static int SetClientAddrsCmd(struct cmd_syndesc *asp, char *arock); -static int FlushMountCmd(struct cmd_syndesc *asp, char *arock); -static int RxStatProcCmd(struct cmd_syndesc *asp, char *arock); -static int RxStatPeerCmd(struct cmd_syndesc *asp, char *arock); +static int GetClientAddrsCmd(struct cmd_syndesc *asp, void *arock); +static int SetClientAddrsCmd(struct cmd_syndesc *asp, void *arock); +static int FlushMountCmd(struct cmd_syndesc *asp, void *arock); +static int RxStatProcCmd(struct cmd_syndesc *asp, void *arock); +static int RxStatPeerCmd(struct cmd_syndesc *asp, void *arock); extern struct cmd_syndesc *cmd_CreateSyntax(); -static int MemDumpCmd(struct cmd_syndesc *asp, char *arock); -static int CSCPolicyCmd(struct cmd_syndesc *asp, char *arock); -static int MiniDumpCmd(struct cmd_syndesc *asp, char *arock); +static int MemDumpCmd(struct cmd_syndesc *asp, void *arock); +static int CSCPolicyCmd(struct cmd_syndesc *asp, void *arock); +static int MiniDumpCmd(struct cmd_syndesc *asp, void *arock); static char pn[] = "fs"; static int rxInitDone = 0; @@ -873,7 +873,7 @@ static BOOL IsAdmin (void) } static int -SetACLCmd(struct cmd_syndesc *as, char *arock) +SetACLCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -1003,7 +1003,7 @@ SetACLCmd(struct cmd_syndesc *as, char *arock) } static int -CopyACLCmd(struct cmd_syndesc *as, char *arock) +CopyACLCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -1179,7 +1179,7 @@ CleanAcl(struct Acl *aa, char *fname) /* clean up an acl to not have bogus entries */ static int -CleanACLCmd(struct cmd_syndesc *as, char *arock) +CleanACLCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct Acl *ta = 0; @@ -1266,7 +1266,7 @@ CleanACLCmd(struct cmd_syndesc *as, char *arock) } static int -ListACLCmd(struct cmd_syndesc *as, char *arock) +ListACLCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct Acl *ta = 0; @@ -1332,7 +1332,7 @@ ListACLCmd(struct cmd_syndesc *as, char *arock) } static int -FlushAllCmd(struct cmd_syndesc *as, char *arock) +FlushAllCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -1347,7 +1347,7 @@ FlushAllCmd(struct cmd_syndesc *as, char *arock) } static int -FlushVolumeCmd(struct cmd_syndesc *as, char *arock) +FlushVolumeCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -1369,7 +1369,7 @@ FlushVolumeCmd(struct cmd_syndesc *as, char *arock) } static int -FlushCmd(struct cmd_syndesc *as, char *arock) +FlushCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -1397,7 +1397,7 @@ FlushCmd(struct cmd_syndesc *as, char *arock) /* all this command does is repackage its args and call SetVolCmd */ static int -SetQuotaCmd(struct cmd_syndesc *as, char *arock) { +SetQuotaCmd(struct cmd_syndesc *as, void *arock) { struct cmd_syndesc ts; /* copy useful stuff from our command slot; we may later have to reorder */ @@ -1406,7 +1406,7 @@ SetQuotaCmd(struct cmd_syndesc *as, char *arock) { } static int -SetVolCmd(struct cmd_syndesc *as, char *arock) { +SetVolCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; struct cmd_item *ti; @@ -1482,7 +1482,7 @@ struct VenusFid { #endif /* WIN32 */ static int -ExamineCmd(struct cmd_syndesc *as, char *arock) +ExamineCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -1563,7 +1563,7 @@ ExamineCmd(struct cmd_syndesc *as, char *arock) } static int -ListQuotaCmd(struct cmd_syndesc *as, char *arock) +ListQuotaCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -1595,7 +1595,7 @@ ListQuotaCmd(struct cmd_syndesc *as, char *arock) } static int -WhereIsCmd(struct cmd_syndesc *as, char *arock) +WhereIsCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -1634,7 +1634,7 @@ WhereIsCmd(struct cmd_syndesc *as, char *arock) static int -DiskFreeCmd(struct cmd_syndesc *as, char *arock) +DiskFreeCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -1665,7 +1665,7 @@ DiskFreeCmd(struct cmd_syndesc *as, char *arock) } static int -QuotaCmd(struct cmd_syndesc *as, char *arock) +QuotaCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -1697,7 +1697,7 @@ QuotaCmd(struct cmd_syndesc *as, char *arock) } static int -ListMountCmd(struct cmd_syndesc *as, char *arock) +ListMountCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -1849,7 +1849,7 @@ ListMountCmd(struct cmd_syndesc *as, char *arock) } static int -MakeMountCmd(struct cmd_syndesc *as, char *arock) +MakeMountCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; char *cellName, *volName, *tmpName; @@ -1994,7 +1994,7 @@ MakeMountCmd(struct cmd_syndesc *as, char *arock) * tp: Set to point to the actual name of the mount point to nuke. */ static int -RemoveMountCmd(struct cmd_syndesc *as, char *arock) { +RemoveMountCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code=0; struct ViceIoctl blob; struct cmd_item *ti; @@ -2070,7 +2070,7 @@ RemoveMountCmd(struct cmd_syndesc *as, char *arock) { */ static int -CheckServersCmd(struct cmd_syndesc *as, char *arock) +CheckServersCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -2176,7 +2176,7 @@ CheckServersCmd(struct cmd_syndesc *as, char *arock) } static int -MessagesCmd(struct cmd_syndesc *as, char *arock) +MessagesCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code=0; struct ViceIoctl blob; @@ -2219,7 +2219,7 @@ MessagesCmd(struct cmd_syndesc *as, char *arock) } static int -CheckVolumesCmd(struct cmd_syndesc *as, char *arock) +CheckVolumesCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -2237,7 +2237,7 @@ CheckVolumesCmd(struct cmd_syndesc *as, char *arock) } static int -SetCacheSizeCmd(struct cmd_syndesc *as, char *arock) +SetCacheSizeCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -2281,7 +2281,7 @@ SetCacheSizeCmd(struct cmd_syndesc *as, char *arock) } static int -GetCacheParmsCmd(struct cmd_syndesc *as, char *arock) +GetCacheParmsCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -2306,7 +2306,7 @@ GetCacheParmsCmd(struct cmd_syndesc *as, char *arock) } static int -ListCellsCmd(struct cmd_syndesc *as, char *arock) +ListCellsCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; afs_int32 i, j, *lp, magic, size; @@ -2366,7 +2366,7 @@ ListCellsCmd(struct cmd_syndesc *as, char *arock) #ifndef WIN32 static int -ListAliasesCmd(struct cmd_syndesc *as, char *arock) +ListAliasesCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code, i; char *tp, *aliasName, *realName; @@ -2396,7 +2396,7 @@ ListAliasesCmd(struct cmd_syndesc *as, char *arock) } static int -CallBackRxConnCmd(struct cmd_syndesc *as, char *arock) +CallBackRxConnCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -2436,7 +2436,7 @@ CallBackRxConnCmd(struct cmd_syndesc *as, char *arock) #endif /* WIN32 */ static int -NewCellCmd(struct cmd_syndesc *as, char *arock) +NewCellCmd(struct cmd_syndesc *as, void *arock) { #ifndef WIN32 afs_int32 code, linkedstate=0, size=0, *lp; @@ -2533,7 +2533,7 @@ NewCellCmd(struct cmd_syndesc *as, char *arock) #ifndef WIN32 static int -NewAliasCmd(struct cmd_syndesc *as, char *arock) +NewAliasCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -2569,7 +2569,7 @@ NewAliasCmd(struct cmd_syndesc *as, char *arock) #endif /* WIN32 */ static int -WhichCellCmd(struct cmd_syndesc *as, char *arock) +WhichCellCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct cmd_item *ti; @@ -2593,7 +2593,7 @@ WhichCellCmd(struct cmd_syndesc *as, char *arock) } static int -WSCellCmd(struct cmd_syndesc *as, char *arock) +WSCellCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -2616,7 +2616,7 @@ WSCellCmd(struct cmd_syndesc *as, char *arock) /* static int -PrimaryCellCmd(struct cmd_syndesc *as, char *arock) +PrimaryCellCmd(struct cmd_syndesc *as, void *arock) { fprintf(stderr,"This command is obsolete, as is the concept of a primary token.\n"); return 0; @@ -2624,7 +2624,7 @@ PrimaryCellCmd(struct cmd_syndesc *as, char *arock) */ static int -MonitorCmd(struct cmd_syndesc *as, char *arock) +MonitorCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -2684,7 +2684,7 @@ MonitorCmd(struct cmd_syndesc *as, char *arock) } static int -SysNameCmd(struct cmd_syndesc *as, char *arock) +SysNameCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -2754,7 +2754,7 @@ SysNameCmd(struct cmd_syndesc *as, char *arock) } static char *exported_types[] = {"null", "nfs", ""}; -static int ExportAfsCmd(struct cmd_syndesc *as, char *arock) +static int ExportAfsCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -2857,7 +2857,7 @@ static int ExportAfsCmd(struct cmd_syndesc *as, char *arock) static int -GetCellCmd(struct cmd_syndesc *as, char *arock) +GetCellCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -2906,7 +2906,7 @@ GetCellCmd(struct cmd_syndesc *as, char *arock) return error; } -static int SetCellCmd(struct cmd_syndesc *as, char *arock) +static int SetCellCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -3193,7 +3193,7 @@ static BOOL IsWindowsNT (void) #ifdef WIN32 static int -SetPrefCmd(struct cmd_syndesc *as, char * arock) +SetPrefCmd(struct cmd_syndesc *as, void * arock) { FILE *infd; afs_int32 code; @@ -3283,7 +3283,7 @@ SetPrefCmd(struct cmd_syndesc *as, char * arock) } #else static int -SetPrefCmd(struct cmd_syndesc *as, char *arock) +SetPrefCmd(struct cmd_syndesc *as, void *arock) { FILE *infd; afs_int32 code; @@ -3389,7 +3389,7 @@ SetPrefCmd(struct cmd_syndesc *as, char *arock) #ifdef WIN32 static int -GetPrefCmd(struct cmd_syndesc *as, char *arock) +GetPrefCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct cmd_item *ti; @@ -3460,7 +3460,7 @@ GetPrefCmd(struct cmd_syndesc *as, char *arock) } #else static int -GetPrefCmd(struct cmd_syndesc *as, char *arock) +GetPrefCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct cmd_item *ti; @@ -3531,7 +3531,7 @@ GetPrefCmd(struct cmd_syndesc *as, char *arock) #endif /* WIN32 */ static int -UuidCmd(struct cmd_syndesc *asp, char *arock) +UuidCmd(struct cmd_syndesc *asp, void *arock) { long code; long inValue; @@ -3539,19 +3539,18 @@ UuidCmd(struct cmd_syndesc *asp, char *arock) struct ViceIoctl blob; char * uuidstring = NULL; -#ifdef WIN32 - if ( !IsAdmin() ) { - fprintf (stderr,"Permission denied: requires AFS Client Administrator access.\n"); - return EACCES; - } -#else - if (geteuid()) { - fprintf (stderr, "Permission denied: requires root access.\n"); - return EACCES; - } -#endif - if (asp->parms[0].items) { +#ifdef WIN32 + if ( !IsAdmin() ) { + fprintf (stderr,"Permission denied: requires AFS Client Administrator access.\n"); + return EACCES; + } +#else + if (geteuid()) { + fprintf (stderr, "Permission denied: requires root access.\n"); + return EACCES; + } +#endif inValue = 1; /* generate new UUID */ } else { inValue = 0; /* just show the current UUID */ @@ -3581,7 +3580,7 @@ UuidCmd(struct cmd_syndesc *asp, char *arock) } static int -TraceCmd(struct cmd_syndesc *asp, char *arock) +TraceCmd(struct cmd_syndesc *asp, void *arock) { long code; struct ViceIoctl blob; @@ -3643,7 +3642,7 @@ static void sbusage(void) /* fs sb -kbytes 9999 -files *.o -default 64 */ static int -StoreBehindCmd(struct cmd_syndesc *as, char *arock) +StoreBehindCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code = 0; struct ViceIoctl blob; @@ -3750,7 +3749,7 @@ StoreBehindCmd(struct cmd_syndesc *as, char *arock) } static afs_int32 -SetCryptCmd(struct cmd_syndesc *as, char *arock) +SetCryptCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code = 0, flag; struct ViceIoctl blob; @@ -3783,7 +3782,7 @@ SetCryptCmd(struct cmd_syndesc *as, char *arock) } static afs_int32 -GetCryptCmd(struct cmd_syndesc *as, char *arock) +GetCryptCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code = 0, flag; struct ViceIoctl blob; @@ -3811,7 +3810,7 @@ GetCryptCmd(struct cmd_syndesc *as, char *arock) } static int -MemDumpCmd(struct cmd_syndesc *asp, char *arock) +MemDumpCmd(struct cmd_syndesc *asp, void *arock) { long code; struct ViceIoctl blob; @@ -3856,7 +3855,7 @@ MemDumpCmd(struct cmd_syndesc *asp, char *arock) } static int -MiniDumpCmd(struct cmd_syndesc *asp, char *arock) +MiniDumpCmd(struct cmd_syndesc *asp, void *arock) { BOOL success = 0; SERVICE_STATUS status; @@ -3897,7 +3896,7 @@ MiniDumpCmd(struct cmd_syndesc *asp, char *arock) } static int -CSCPolicyCmd(struct cmd_syndesc *asp, char *arock) +CSCPolicyCmd(struct cmd_syndesc *asp, void *arock) { struct cmd_item *ti; char *share = NULL; @@ -4011,7 +4010,7 @@ CSCPolicyCmd(struct cmd_syndesc *asp, char *arock) #ifndef WIN32 /* get clients interface addresses */ static int -GetClientAddrsCmd(struct cmd_syndesc *as, char *arock) +GetClientAddrsCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct cmd_item *ti; @@ -4057,7 +4056,7 @@ GetClientAddrsCmd(struct cmd_syndesc *as, char *arock) } static int -SetClientAddrsCmd(struct cmd_syndesc *as, char *arock) +SetClientAddrsCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code, addr; struct cmd_item *ti; @@ -4131,7 +4130,7 @@ SetClientAddrsCmd(struct cmd_syndesc *as, char *arock) } static int -FlushMountCmd(struct cmd_syndesc *as, char *arock) +FlushMountCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct ViceIoctl blob; @@ -4248,7 +4247,7 @@ FlushMountCmd(struct cmd_syndesc *as, char *arock) #endif /* WIN32 */ static int -RxStatProcCmd(struct cmd_syndesc *as, char *arock) +RxStatProcCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; afs_int32 flags = 0; @@ -4282,7 +4281,7 @@ RxStatProcCmd(struct cmd_syndesc *as, char *arock) } static int -RxStatPeerCmd(struct cmd_syndesc *as, char *arock) +RxStatPeerCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; afs_int32 flags = 0; @@ -4348,32 +4347,32 @@ main(int argc, char **argv) osi_Init(); #ifndef WIN32 - ts = cmd_CreateSyntax("getclientaddrs", GetClientAddrsCmd, 0, + ts = cmd_CreateSyntax("getclientaddrs", GetClientAddrsCmd, NULL, "get client network interface addresses"); cmd_CreateAlias(ts, "gc"); - ts = cmd_CreateSyntax("setclientaddrs", SetClientAddrsCmd, 0, + ts = cmd_CreateSyntax("setclientaddrs", SetClientAddrsCmd, NULL, "set client network interface addresses"); cmd_AddParm(ts, "-address", CMD_LIST, CMD_OPTIONAL | CMD_EXPANDS, "client network interfaces"); cmd_CreateAlias(ts, "sc"); #endif /* WIN32 */ - ts = cmd_CreateSyntax("setserverprefs", SetPrefCmd, 0, "set server ranks"); + ts = cmd_CreateSyntax("setserverprefs", SetPrefCmd, NULL, "set server ranks"); cmd_AddParm(ts, "-servers", CMD_LIST, CMD_OPTIONAL|CMD_EXPANDS, "fileserver names and ranks"); cmd_AddParm(ts, "-vlservers", CMD_LIST, CMD_OPTIONAL|CMD_EXPANDS, "VL server names and ranks"); cmd_AddParm(ts, "-file", CMD_SINGLE, CMD_OPTIONAL, "input from named file"); cmd_AddParm(ts, "-stdin", CMD_FLAG, CMD_OPTIONAL, "input from stdin"); cmd_CreateAlias(ts, "sp"); - ts = cmd_CreateSyntax("getserverprefs", GetPrefCmd, 0, "get server ranks"); + ts = cmd_CreateSyntax("getserverprefs", GetPrefCmd, NULL, "get server ranks"); cmd_AddParm(ts, "-file", CMD_SINGLE, CMD_OPTIONAL, "output to named file"); cmd_AddParm(ts, "-numeric", CMD_FLAG, CMD_OPTIONAL, "addresses only"); cmd_AddParm(ts, "-vlservers", CMD_FLAG, CMD_OPTIONAL, "VL servers"); /* cmd_AddParm(ts, "-cell", CMD_FLAG, CMD_OPTIONAL, "cellname"); */ cmd_CreateAlias(ts, "gp"); - ts = cmd_CreateSyntax("setacl", SetACLCmd, 0, "set access control list"); + ts = cmd_CreateSyntax("setacl", SetACLCmd, NULL, "set access control list"); cmd_AddParm(ts, "-dir", CMD_LIST, 0, "directory"); cmd_AddParm(ts, "-acl", CMD_LIST, 0, "access list entries"); cmd_AddParm(ts, "-clear", CMD_FLAG, CMD_OPTIONAL, "clear access list"); @@ -4383,17 +4382,17 @@ main(int argc, char **argv) cmd_AddParm(ts, "-if", CMD_FLAG, CMD_OPTIONAL, "initial file acl (DFS only)"); cmd_CreateAlias(ts, "sa"); - ts = cmd_CreateSyntax("listacl", ListACLCmd, 0, "list access control list"); + ts = cmd_CreateSyntax("listacl", ListACLCmd, NULL, "list access control list"); cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path"); parm_listacl_id = ts->nParms; cmd_AddParm(ts, "-id", CMD_FLAG, CMD_OPTIONAL, "initial directory acl"); cmd_AddParm(ts, "-if", CMD_FLAG, CMD_OPTIONAL, "initial file acl"); cmd_CreateAlias(ts, "la"); - ts = cmd_CreateSyntax("cleanacl", CleanACLCmd, 0, "clean up access control list"); + ts = cmd_CreateSyntax("cleanacl", CleanACLCmd, NULL, "clean up access control list"); cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path"); - ts = cmd_CreateSyntax("copyacl", CopyACLCmd, 0, "copy access control list"); + ts = cmd_CreateSyntax("copyacl", CopyACLCmd, NULL, "copy access control list"); cmd_AddParm(ts, "-fromdir", CMD_SINGLE, 0, "source directory (or DFS file)"); cmd_AddParm(ts, "-todir", CMD_LIST, 0, "destination directory (or DFS file)"); cmd_AddParm(ts, "-clear", CMD_FLAG, CMD_OPTIONAL, "first clear dest access list"); @@ -4403,16 +4402,16 @@ main(int argc, char **argv) cmd_CreateAlias(ts, "ca"); - ts = cmd_CreateSyntax("flush", FlushCmd, 0, "flush file from cache"); + ts = cmd_CreateSyntax("flush", FlushCmd, NULL, "flush file from cache"); cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path"); #ifndef WIN32 - ts = cmd_CreateSyntax("flushmount", FlushMountCmd, 0, + ts = cmd_CreateSyntax("flushmount", FlushMountCmd, NULL, "flush mount symlink from cache"); cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path"); #endif - ts = cmd_CreateSyntax("setvol", SetVolCmd, 0, "set volume status"); + ts = cmd_CreateSyntax("setvol", SetVolCmd, NULL, "set volume status"); cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path"); cmd_AddParm(ts, "-max", CMD_SINGLE, CMD_OPTIONAL, "disk space quota in 1K units"); #ifdef notdef @@ -4422,29 +4421,29 @@ main(int argc, char **argv) cmd_AddParm(ts, "-offlinemsg", CMD_SINGLE, CMD_OPTIONAL, "offline message"); cmd_CreateAlias(ts, "sv"); - ts = cmd_CreateSyntax("messages", MessagesCmd, 0, "control Cache Manager messages"); + ts = cmd_CreateSyntax("messages", MessagesCmd, NULL, "control Cache Manager messages"); cmd_AddParm(ts, "-show", CMD_SINGLE, CMD_OPTIONAL, "[user|console|all|none]"); - ts = cmd_CreateSyntax("examine", ExamineCmd, 0, "display file/volume status"); + ts = cmd_CreateSyntax("examine", ExamineCmd, NULL, "display file/volume status"); cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path"); cmd_CreateAlias(ts, "lv"); cmd_CreateAlias(ts, "listvol"); - ts = cmd_CreateSyntax("listquota", ListQuotaCmd, 0, "list volume quota"); + ts = cmd_CreateSyntax("listquota", ListQuotaCmd, NULL, "list volume quota"); cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path"); cmd_CreateAlias(ts, "lq"); - ts = cmd_CreateSyntax("diskfree", DiskFreeCmd, 0, "show server disk space usage"); + ts = cmd_CreateSyntax("diskfree", DiskFreeCmd, NULL, "show server disk space usage"); cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path"); cmd_CreateAlias(ts, "df"); - ts = cmd_CreateSyntax("quota", QuotaCmd, 0, "show volume quota usage"); + ts = cmd_CreateSyntax("quota", QuotaCmd, NULL, "show volume quota usage"); cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path"); - ts = cmd_CreateSyntax("lsmount", ListMountCmd, 0, "list mount point"); + ts = cmd_CreateSyntax("lsmount", ListMountCmd, NULL, "list mount point"); cmd_AddParm(ts, "-dir", CMD_LIST, 0, "directory"); - ts = cmd_CreateSyntax("mkmount", MakeMountCmd, 0, "make mount point"); + ts = cmd_CreateSyntax("mkmount", MakeMountCmd, NULL, "make mount point"); cmd_AddParm(ts, "-dir", CMD_SINGLE, 0, "directory"); cmd_AddParm(ts, "-vol", CMD_SINGLE, 0, "volume name"); cmd_AddParm(ts, "-cell", CMD_SINGLE, CMD_OPTIONAL, "cell name"); @@ -4459,31 +4458,31 @@ main(int argc, char **argv) */ - ts = cmd_CreateSyntax("rmmount", RemoveMountCmd, 0, "remove mount point"); + ts = cmd_CreateSyntax("rmmount", RemoveMountCmd, NULL, "remove mount point"); cmd_AddParm(ts, "-dir", CMD_LIST, 0, "directory"); - ts = cmd_CreateSyntax("checkservers", CheckServersCmd, 0, "check local cell's servers"); + ts = cmd_CreateSyntax("checkservers", CheckServersCmd, NULL, "check local cell's servers"); cmd_AddParm(ts, "-cell", CMD_SINGLE, CMD_OPTIONAL, "cell to check"); cmd_AddParm(ts, "-all", CMD_FLAG, CMD_OPTIONAL, "check all cells"); cmd_AddParm(ts, "-fast", CMD_FLAG, CMD_OPTIONAL, "just list, don't check"); cmd_AddParm(ts,"-interval",CMD_SINGLE,CMD_OPTIONAL,"seconds between probes"); - ts = cmd_CreateSyntax("checkvolumes", CheckVolumesCmd,0, "check volumeID/name mappings"); + ts = cmd_CreateSyntax("checkvolumes", CheckVolumesCmd, NULL, "check volumeID/name mappings"); cmd_CreateAlias(ts, "checkbackups"); - ts = cmd_CreateSyntax("setcachesize", SetCacheSizeCmd, 0, "set cache size"); + ts = cmd_CreateSyntax("setcachesize", SetCacheSizeCmd, NULL, "set cache size"); cmd_AddParm(ts, "-blocks", CMD_SINGLE, CMD_OPTIONAL, "size in 1K byte blocks (0 => reset)"); cmd_CreateAlias(ts, "cachesize"); cmd_AddParm(ts, "-reset", CMD_FLAG, CMD_OPTIONAL, "reset size back to boot value"); - ts = cmd_CreateSyntax("getcacheparms", GetCacheParmsCmd, 0, "get cache usage info"); + ts = cmd_CreateSyntax("getcacheparms", GetCacheParmsCmd, NULL, "get cache usage info"); - ts = cmd_CreateSyntax("listcells", ListCellsCmd, 0, "list configured cells"); + ts = cmd_CreateSyntax("listcells", ListCellsCmd, NULL, "list configured cells"); cmd_AddParm(ts, "-numeric", CMD_FLAG, CMD_OPTIONAL, "addresses only"); - ts = cmd_CreateSyntax("setquota", SetQuotaCmd, 0, "set volume quota"); + ts = cmd_CreateSyntax("setquota", SetQuotaCmd, NULL, "set volume quota"); cmd_AddParm(ts, "-path", CMD_SINGLE, CMD_OPTIONAL, "dir/file path"); cmd_AddParm(ts, "-max", CMD_SINGLE, 0, "max quota in kbytes"); #ifdef notdef @@ -4491,7 +4490,7 @@ main(int argc, char **argv) #endif cmd_CreateAlias(ts, "sq"); - ts = cmd_CreateSyntax("newcell", NewCellCmd, 0, "configure new cell"); + ts = cmd_CreateSyntax("newcell", NewCellCmd, NULL, "configure new cell"); #ifndef WIN32 cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "cell name"); cmd_AddParm(ts, "-servers", CMD_LIST, CMD_REQUIRED, "primary servers"); @@ -4508,46 +4507,46 @@ main(int argc, char **argv) cmd_AddParm(ts, "-vlport", CMD_SINGLE, CMD_OPTIONAL, "cell's vldb server port"); #endif - ts = cmd_CreateSyntax("newalias", NewAliasCmd, 0, + ts = cmd_CreateSyntax("newalias", NewAliasCmd, NULL, "configure new cell alias"); cmd_AddParm(ts, "-alias", CMD_SINGLE, 0, "alias name"); cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "real name of cell"); #endif - ts = cmd_CreateSyntax("whichcell", WhichCellCmd, 0, "list file's cell"); + ts = cmd_CreateSyntax("whichcell", WhichCellCmd, NULL, "list file's cell"); cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path"); - ts = cmd_CreateSyntax("whereis", WhereIsCmd, 0, "list file's location"); + ts = cmd_CreateSyntax("whereis", WhereIsCmd, NULL, "list file's location"); cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path"); - ts = cmd_CreateSyntax("wscell", WSCellCmd, 0, "list workstation's cell"); + ts = cmd_CreateSyntax("wscell", WSCellCmd, NULL, "list workstation's cell"); /* ts = cmd_CreateSyntax("primarycell", PrimaryCellCmd, 0, "obsolete (listed primary cell)"); */ - ts = cmd_CreateSyntax("monitor", MonitorCmd, 0, "set cache monitor host address"); + ts = cmd_CreateSyntax("monitor", MonitorCmd, NULL, "set cache monitor host address"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_OPTIONAL, "host name or 'off'"); cmd_CreateAlias(ts, "mariner"); - ts = cmd_CreateSyntax("getcellstatus", GetCellCmd, 0, "get cell status"); + ts = cmd_CreateSyntax("getcellstatus", GetCellCmd, NULL, "get cell status"); cmd_AddParm(ts, "-cell", CMD_LIST, 0, "cell name"); - ts = cmd_CreateSyntax("setcell", SetCellCmd, 0, "set cell status"); + ts = cmd_CreateSyntax("setcell", SetCellCmd, NULL, "set cell status"); cmd_AddParm(ts, "-cell", CMD_LIST, 0, "cell name"); cmd_AddParm(ts, "-suid", CMD_FLAG, CMD_OPTIONAL, "allow setuid programs"); cmd_AddParm(ts, "-nosuid", CMD_FLAG, CMD_OPTIONAL, "disallow setuid programs"); - ts = cmd_CreateSyntax("flushall", FlushAllCmd, 0, "flush all data"); + ts = cmd_CreateSyntax("flushall", FlushAllCmd, NULL, "flush all data"); - ts = cmd_CreateSyntax("flushvolume", FlushVolumeCmd, 0, "flush all data in volume"); + ts = cmd_CreateSyntax("flushvolume", FlushVolumeCmd, NULL, "flush all data in volume"); cmd_AddParm(ts, "-path", CMD_LIST, CMD_OPTIONAL, "dir/file path"); - ts = cmd_CreateSyntax("sysname", SysNameCmd, 0, "get/set sysname (i.e. @sys) value"); + ts = cmd_CreateSyntax("sysname", SysNameCmd, NULL, "get/set sysname (i.e. @sys) value"); cmd_AddParm(ts, "-newsys", CMD_LIST, CMD_OPTIONAL, "new sysname"); - ts = cmd_CreateSyntax("exportafs", ExportAfsCmd, 0, "enable/disable translators to AFS"); + ts = cmd_CreateSyntax("exportafs", ExportAfsCmd, NULL, "enable/disable translators to AFS"); cmd_AddParm(ts, "-type", CMD_SINGLE, 0, "exporter name"); cmd_AddParm(ts, "-start", CMD_SINGLE, CMD_OPTIONAL, "start/stop translator ('on' or 'off')"); cmd_AddParm(ts, "-convert", CMD_SINGLE, CMD_OPTIONAL, "convert from afs to unix mode ('on or 'off')"); @@ -4555,57 +4554,57 @@ main(int argc, char **argv) cmd_AddParm(ts, "-submounts", CMD_SINGLE, CMD_OPTIONAL, "allow nfs mounts to subdirs of /afs/.. ('on' or 'off')"); - ts = cmd_CreateSyntax("storebehind", StoreBehindCmd, 0, + ts = cmd_CreateSyntax("storebehind", StoreBehindCmd, NULL, "store to server after file close"); cmd_AddParm(ts, "-kbytes", CMD_SINGLE, CMD_OPTIONAL, "asynchrony for specified names"); cmd_AddParm(ts, "-files", CMD_LIST, CMD_OPTIONAL, "specific pathnames"); cmd_AddParm(ts, "-allfiles", CMD_SINGLE, CMD_OPTIONAL, "new default (KB)"); cmd_CreateAlias(ts, "sb"); - ts = cmd_CreateSyntax("setcrypt", SetCryptCmd, 0, "set cache manager encryption flag"); + ts = cmd_CreateSyntax("setcrypt", SetCryptCmd, NULL, "set cache manager encryption flag"); cmd_AddParm(ts, "-crypt", CMD_SINGLE, 0, "on or off"); - ts = cmd_CreateSyntax("getcrypt", GetCryptCmd, 0, "get cache manager encryption flag"); + ts = cmd_CreateSyntax("getcrypt", GetCryptCmd, NULL, "get cache manager encryption flag"); - ts = cmd_CreateSyntax("rxstatproc", RxStatProcCmd, 0, + ts = cmd_CreateSyntax("rxstatproc", RxStatProcCmd, NULL, "Manage per process RX statistics"); cmd_AddParm(ts, "-enable", CMD_FLAG, CMD_OPTIONAL, "Enable RX stats"); cmd_AddParm(ts, "-disable", CMD_FLAG, CMD_OPTIONAL, "Disable RX stats"); cmd_AddParm(ts, "-clear", CMD_FLAG, CMD_OPTIONAL, "Clear RX stats"); - ts = cmd_CreateSyntax("rxstatpeer", RxStatPeerCmd, 0, + ts = cmd_CreateSyntax("rxstatpeer", RxStatPeerCmd, NULL, "Manage per peer RX statistics"); cmd_AddParm(ts, "-enable", CMD_FLAG, CMD_OPTIONAL, "Enable RX stats"); cmd_AddParm(ts, "-disable", CMD_FLAG, CMD_OPTIONAL, "Disable RX stats"); cmd_AddParm(ts, "-clear", CMD_FLAG, CMD_OPTIONAL, "Clear RX stats"); #ifndef WIN32 - ts = cmd_CreateSyntax("setcbaddr", CallBackRxConnCmd, 0, "configure callback connection address"); + ts = cmd_CreateSyntax("setcbaddr", CallBackRxConnCmd, NULL, "configure callback connection address"); cmd_AddParm(ts, "-addr", CMD_SINGLE, CMD_OPTIONAL, "host name or address"); #endif - ts = cmd_CreateSyntax("trace", TraceCmd, 0, "enable or disable CM tracing"); + ts = cmd_CreateSyntax("trace", TraceCmd, NULL, "enable or disable CM tracing"); cmd_AddParm(ts, "-on", CMD_FLAG, CMD_OPTIONAL, "enable tracing"); cmd_AddParm(ts, "-off", CMD_FLAG, CMD_OPTIONAL, "disable tracing"); cmd_AddParm(ts, "-reset", CMD_FLAG, CMD_OPTIONAL, "reset log contents"); cmd_AddParm(ts, "-dump", CMD_FLAG, CMD_OPTIONAL, "dump log contents"); cmd_CreateAlias(ts, "tr"); - ts = cmd_CreateSyntax("uuid", UuidCmd, 0, "manage the UUID for the cache manager"); + ts = cmd_CreateSyntax("uuid", UuidCmd, NULL, "manage the UUID for the cache manager"); cmd_AddParm(ts, "-generate", CMD_FLAG, CMD_OPTIONAL, "generate a new UUID"); - ts = cmd_CreateSyntax("memdump", MemDumpCmd, 0, "dump memory allocs in debug builds"); + ts = cmd_CreateSyntax("memdump", MemDumpCmd, NULL, "dump memory allocs in debug builds"); cmd_AddParm(ts, "-begin", CMD_FLAG, CMD_OPTIONAL, "set a memory checkpoint"); cmd_AddParm(ts, "-end", CMD_FLAG, CMD_OPTIONAL, "dump memory allocs"); - ts = cmd_CreateSyntax("cscpolicy", CSCPolicyCmd, 0, "change client side caching policy for AFS shares"); + ts = cmd_CreateSyntax("cscpolicy", CSCPolicyCmd, NULL, "change client side caching policy for AFS shares"); cmd_AddParm(ts, "-share", CMD_SINGLE, CMD_OPTIONAL, "AFS share"); cmd_AddParm(ts, "-manual", CMD_FLAG, CMD_OPTIONAL, "manual caching of documents"); cmd_AddParm(ts, "-programs", CMD_FLAG, CMD_OPTIONAL, "automatic caching of programs and documents"); cmd_AddParm(ts, "-documents", CMD_FLAG, CMD_OPTIONAL, "automatic caching of documents"); cmd_AddParm(ts, "-disable", CMD_FLAG, CMD_OPTIONAL, "disable caching"); - ts = cmd_CreateSyntax("minidump", MiniDumpCmd, 0, "Generate MiniDump of current service state"); + ts = cmd_CreateSyntax("minidump", MiniDumpCmd, NULL, "Generate MiniDump of current service state"); code = cmd_Dispatch(argc, argv); diff --git a/src/WINNT/afsd/lanahelper.cpp b/src/WINNT/afsd/lanahelper.cpp index 8610b1d415..f99f11d29b 100644 --- a/src/WINNT/afsd/lanahelper.cpp +++ b/src/WINNT/afsd/lanahelper.cpp @@ -450,6 +450,7 @@ extern "C" BOOL lana_IsLoopback(lana_number_t lana, BOOL reset) rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE,AFSREG_CLT_SVC_PARAM_SUBKEY,0,KEY_READ,&hkConfig); if (rv == ERROR_SUCCESS) { + dummyLen = sizeof(regLana); rv = RegQueryValueEx(hkConfig, szForceLanaLoopback, NULL, NULL, (LPBYTE) ®Lana, &dummyLen); RegCloseKey(hkConfig); diff --git a/src/WINNT/afsd/sample/token.c b/src/WINNT/afsd/sample/token.c index ae384ca053..305c0e8a1a 100644 --- a/src/WINNT/afsd/sample/token.c +++ b/src/WINNT/afsd/sample/token.c @@ -18,7 +18,7 @@ #define KABADARGUMENT 1 #define KLOGEXIT(code) exit(code) -int CommandProc(); +int CommandProc(struct cmd_syndesc *, void *); static int zero_argc; static char **zero_argv; @@ -36,7 +36,7 @@ void main (argc, argv) /* Start up sockets */ WSAStartup(0x0101, &WSAjunk); - ts = cmd_CreateSyntax((char *) 0, CommandProc, 0, "obtain Kerberos authentication"); + ts = cmd_CreateSyntax(NULL, CommandProc, NULL, "obtain Kerberos authentication"); #define aXFLAG 0 #define aPRINCIPAL 1 @@ -131,9 +131,8 @@ static int read_pw_string(char *s, int max) return !ok; } -CommandProc (as, arock) - char *arock; - struct cmd_syndesc *as; +int +CommandProc (struct cmd_syndesc *as, void *arock) { char name[MAXKTCNAMELEN]; char defaultCell[256]; diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index 77f40de55b..8597476fd8 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -12,7 +12,10 @@ #ifndef DJGPP #include +#pragma warning(push) +#pragma warning(disable: 4005) #include +#pragma warning(pop) #else #include #include @@ -879,7 +882,7 @@ void smb_DosUTimeFromUnixTime(afs_uint32 *dosUTimep, time_t unixTime) { time_t diff_t = unixTime - smb_localZero; #if defined(DEBUG) && !defined(_USE_32BIT_TIME_T) - osi_assert(diff_t < _UI32_MAX); + osi_assertx(diff_t < _UI32_MAX, "time_t > _UI32_MAX"); #endif *dosUTimep = (afs_uint32)diff_t; } @@ -933,7 +936,7 @@ smb_vc_t *smb_FindVC(unsigned short lsn, int flags, int lana) */ NTSTATUS nts = STATUS_UNSUCCESSFUL, ntsEx = STATUS_UNSUCCESSFUL; MSV1_0_LM20_CHALLENGE_REQUEST lsaReq; - PMSV1_0_LM20_CHALLENGE_RESPONSE lsaResp; + PMSV1_0_LM20_CHALLENGE_RESPONSE lsaResp = NULL; ULONG lsaRespSize = 0; lsaReq.MessageType = MsV1_0Lm20ChallengeRequest; @@ -945,13 +948,25 @@ smb_vc_t *smb_FindVC(unsigned short lsn, int flags, int lana) &lsaResp, &lsaRespSize, &ntsEx); - if (nts != STATUS_SUCCESS) + if (nts != STATUS_SUCCESS || ntsEx != STATUS_SUCCESS) { osi_Log4(smb_logp,"MsV1_0Lm20ChallengeRequest failure: nts 0x%x ntsEx 0x%x respSize is %u needs %u", nts, ntsEx, sizeof(lsaReq), lsaRespSize); - osi_assert(nts == STATUS_SUCCESS); /* this had better work! */ + afsi_log("MsV1_0Lm20ChallengeRequest failure: nts 0x%x ntsEx 0x%x respSize %u", + nts, ntsEx, lsaRespSize); + } + osi_assertx(nts == STATUS_SUCCESS, "LsaCallAuthenticationPackage failed"); /* this had better work! */ - memcpy(vcp->encKey, lsaResp->ChallengeToClient, MSV1_0_CHALLENGE_LENGTH); - LsaFreeReturnBuffer(lsaResp); + if (ntsEx == STATUS_SUCCESS) { + memcpy(vcp->encKey, lsaResp->ChallengeToClient, MSV1_0_CHALLENGE_LENGTH); + LsaFreeReturnBuffer(lsaResp); + } else { + /* + * This will cause the subsequent authentication to fail but + * that is better than us dereferencing a NULL pointer and + * crashing. + */ + memset(vcp->encKey, 0, MSV1_0_CHALLENGE_LENGTH); + } } else memset(vcp->encKey, 0, MSV1_0_CHALLENGE_LENGTH); @@ -1194,14 +1209,14 @@ void smb_ReleaseTID(smb_tid_t *tidp) userp = NULL; lock_ObtainWrite(&smb_rctLock); - osi_assert(tidp->refCount-- > 0); + osi_assertx(tidp->refCount-- > 0, "smb_tid_t refCount 0"); if (tidp->refCount == 0 && (tidp->delete)) { ltpp = &tidp->vcp->tidsp; for(tp = *ltpp; tp; ltpp = &tp->nextp, tp = *ltpp) { if (tp == tidp) break; } - osi_assert(tp != NULL); + osi_assertx(tp != NULL, "null smb_tid_t"); *ltpp = tp->nextp; lock_FinalizeMutex(&tidp->mx); userp = tidp->userp; /* remember to drop ref later */ @@ -1303,7 +1318,7 @@ void smb_ReleaseUsername(smb_username_t *unp) time_t now = osi_Time(); lock_ObtainWrite(&smb_rctLock); - osi_assert(unp->refCount-- > 0); + osi_assertx(unp->refCount-- > 0, "smb_username_t refCount 0"); if (unp->refCount == 0 && !(unp->flags & SMB_USERNAMEFLAG_AFSLOGON) && (unp->flags & SMB_USERNAMEFLAG_LOGOFF)) { lupp = &usernamesp; @@ -1311,7 +1326,7 @@ void smb_ReleaseUsername(smb_username_t *unp) if (up == unp) break; } - osi_assert(up != NULL); + osi_assertx(up != NULL, "null smb_username_t"); *lupp = up->nextp; up->nextp = NULL; /* do not remove this */ lock_FinalizeMutex(&unp->mx); @@ -1339,14 +1354,14 @@ void smb_ReleaseUID(smb_user_t *uidp) smb_username_t *unp = NULL; lock_ObtainWrite(&smb_rctLock); - osi_assert(uidp->refCount-- > 0); + osi_assertx(uidp->refCount-- > 0, "smb_user_t refCount 0"); if (uidp->refCount == 0) { lupp = &uidp->vcp->usersp; for(up = *lupp; up; lupp = &up->nextp, up = *lupp) { if (up == uidp) break; } - osi_assert(up != NULL); + osi_assertx(up != NULL, "null smb_user_t"); *lupp = up->nextp; lock_FinalizeMutex(&uidp->mx); unp = uidp->unp; @@ -1563,7 +1578,7 @@ void smb_ReleaseFID(smb_fid_t *fidp) lock_ObtainMutex(&fidp->mx); lock_ObtainWrite(&smb_rctLock); - osi_assert(fidp->refCount-- > 0); + osi_assertx(fidp->refCount-- > 0, "smb_fid_t refCount 0"); if (fidp->refCount == 0 && (fidp->delete)) { vcp = fidp->vcp; fidp->vcp = NULL; @@ -2060,7 +2075,7 @@ void smb_ReleaseDirSearchNoLock(smb_dirSearch_t *dsp) cm_scache_t *scp = NULL; lock_ObtainMutex(&dsp->mx); - osi_assert(dsp->refCount-- > 0); + osi_assertx(dsp->refCount-- > 0, "cm_scache_t refCount 0"); if (dsp->refCount == 0 && (dsp->flags & SMB_DIRSEARCH_DELETE)) { if (&dsp->q == (osi_queue_t *) smb_lastDirSearchp) smb_lastDirSearchp = (smb_dirSearch_t *) osi_QPrev(&smb_lastDirSearchp->q); @@ -2262,7 +2277,7 @@ static smb_packet_t *GetPacket(void) tbp->dos_pkt_sel = tb_sel; #endif /* DJGPP */ } - osi_assert(tbp->magic == SMB_PACKETMAGIC); + osi_assertx(tbp->magic == SMB_PACKETMAGIC, "invalid smb_packet_t magic"); return tbp; } @@ -2316,7 +2331,7 @@ static NCB *GetNCB(void) tbp->magic = SMB_NCBMAGIC; } - osi_assert(tbp->magic == SMB_NCBMAGIC); + osi_assertx(tbp->magic == SMB_NCBMAGIC, "invalid smb_packet_t magic"); memset(&tbp->ncb, 0, sizeof(NCB)); ncbp = &tbp->ncb; @@ -2329,7 +2344,7 @@ static NCB *GetNCB(void) void smb_FreePacket(smb_packet_t *tbp) { smb_vc_t * vcp = NULL; - osi_assert(tbp->magic == SMB_PACKETMAGIC); + osi_assertx(tbp->magic == SMB_PACKETMAGIC, "invalid smb_packet_t magic"); lock_ObtainWrite(&smb_globalLock); tbp->nextp = smb_packetFreeListp; @@ -2357,7 +2372,7 @@ static void FreeNCB(NCB *bufferp) smb_ncb_t *tbp; tbp = (smb_ncb_t *) bufferp; - osi_assert(tbp->magic == SMB_NCBMAGIC); + osi_assertx(tbp->magic == SMB_NCBMAGIC, "invalid smb_packet_t magic"); lock_ObtainWrite(&smb_globalLock); tbp->nextp = smb_ncbFreeListp; @@ -3674,7 +3689,7 @@ void smb_WaitingLocksDaemon() if (wl->state == SMB_WAITINGLOCKSTATE_DONE) continue; - osi_assert(wl->state != SMB_WAITINGLOCKSTATE_ERROR); + osi_assertx(wl->state != SMB_WAITINGLOCKSTATE_ERROR, "!SMB_WAITINGLOCKSTATE_ERROR"); /* wl->state is either _DONE or _WAITING. _ERROR would no longer be on the queue. */ @@ -3981,11 +3996,11 @@ long smb_ReceiveCoreSearchVolume(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t /* pull pathname and stat block out of request */ tp = smb_GetSMBData(inp, NULL); pathp = smb_ParseASCIIBlock(tp, (char **) &tp); - osi_assert(pathp != NULL); + osi_assertx(pathp != NULL, "null path"); if (smb_StoreAnsiFilenames) OemToChar(pathp,pathp); statBlockp = smb_ParseVblBlock(tp, (char **) &tp, &statLen); - osi_assert(statBlockp != NULL); + osi_assertx(statBlockp != NULL, "null statBlock"); if (statLen == 0) { statBlockp = initStatBlock; statBlockp[0] = 8; @@ -4645,7 +4660,7 @@ long smb_ReceiveCoreSearchDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *ou * Deduct for them and fill in the length field. */ temp -= 3; /* deduct vbl block info */ - osi_assert(temp == (43 * returnedNames)); + osi_assertx(temp == (43 * returnedNames), "unexpected data length"); origOp[1] = (char)(temp & 0xff); origOp[2] = (char)((temp>>8) & 0xff); if (returnedNames == 0) @@ -5141,7 +5156,7 @@ long smb_ReceiveCoreOpen(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) } fidp = smb_FindFID(vcp, 0, SMB_FLAG_CREATE); - osi_assert(fidp); + osi_assertx(fidp, "null smb_fid_t"); /* save a pointer to the vnode */ fidp->scp = scp; @@ -6046,6 +6061,7 @@ long smb_CloseFID(smb_vc_t *vcp, smb_fid_t *fidp, cm_user_t *userp, cm_scache_t *dscp = NULL; char *pathp = NULL; cm_scache_t * scp = NULL; + cm_scache_t *delscp = NULL; int deleted = 0; int nullcreator = 0; @@ -6153,8 +6169,14 @@ long smb_CloseFID(smb_vc_t *vcp, smb_fid_t *fidp, cm_user_t *userp, char *fullPathp; lock_ReleaseMutex(&fidp->mx); - smb_FullName(dscp, scp, pathp, &fullPathp, userp, &req); - if (scp->fileType == CM_SCACHETYPE_DIRECTORY) { + + code = cm_Lookup(dscp, pathp, CM_FLAG_NOMOUNTCHASE, userp, &req, &delscp); + if (code) { + cm_HoldSCache(scp); + delscp = scp; + } + smb_FullName(dscp, delscp, pathp, &fullPathp, userp, &req); + if (delscp->fileType == CM_SCACHETYPE_DIRECTORY) { code = cm_RemoveDir(dscp, fullPathp, userp, &req); if (code == 0) { deleted = 1; @@ -6192,8 +6214,8 @@ long smb_CloseFID(smb_vc_t *vcp, smb_fid_t *fidp, cm_user_t *userp, fidp->NTopen_pathp = NULL; fidp->flags &= ~SMB_FID_NTOPEN; } else { - osi_assert(fidp->NTopen_dscp == NULL); - osi_assert(fidp->NTopen_pathp == NULL); + osi_assertx(fidp->NTopen_dscp == NULL, "null NTopen_dsc"); + osi_assertx(fidp->NTopen_pathp == NULL, "null NTopen_path"); } if (fidp->NTopen_wholepathp) { @@ -6210,16 +6232,20 @@ long smb_CloseFID(smb_vc_t *vcp, smb_fid_t *fidp, cm_user_t *userp, if (dscp) cm_ReleaseSCache(dscp); - if (scp) { - if (deleted || nullcreator) { - lock_ObtainMutex(&scp->mx); - if (nullcreator && scp->creator == userp) - scp->creator = NULL; + if (delscp) { + if (deleted) { + lock_ObtainMutex(&delscp->mx); if (deleted) - scp->flags |= CM_SCACHEFLAG_DELETED; - lock_ReleaseMutex(&scp->mx); + delscp->flags |= CM_SCACHEFLAG_DELETED; + lock_ReleaseMutex(&delscp->mx); } + cm_ReleaseSCache(delscp); + } + + if (scp) { lock_ObtainMutex(&scp->mx); + if (nullcreator && scp->creator == userp) + scp->creator = NULL; scp->flags &= ~CM_SCACHEFLAG_SMB_FID; lock_ReleaseMutex(&scp->mx); cm_ReleaseSCache(scp); @@ -7481,7 +7507,7 @@ long smb_ReceiveCoreCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) /* now all we have to do is open the file itself */ fidp = smb_FindFID(vcp, 0, SMB_FLAG_CREATE); - osi_assert(fidp); + osi_assertx(fidp, "null smb_fid_t"); cm_HoldUser(userp); @@ -7893,7 +7919,7 @@ void smb_ClientWaiter(void *parmp) { /* this is fatal - log as much as possible */ osi_Log1(smb_logp, "Fatal: NCBevents idx [ %d ] out of range.\n", idx); - osi_assert(0); + osi_assertx(0, "invalid index"); } thrd_ResetEvent(NCBevents[idx]); @@ -7951,7 +7977,7 @@ void smb_ServerWaiter(void *parmp) { /* this is fatal - log as much as possible */ osi_Log1(smb_logp, "Fatal: session idx [ %d ] out of range.\n", idx_session); - osi_assert(0); + osi_assertx(0, "invalid index"); } /* Get an NCB */ @@ -7995,7 +8021,7 @@ void smb_ServerWaiter(void *parmp) { /* this is fatal - log as much as possible */ osi_Log1(smb_logp, "Fatal: idx_NCB [ %d ] out of range.\n", idx_NCB); - osi_assert(0); + osi_assertx(0, "invalid index"); } /* Link them together */ @@ -8104,7 +8130,7 @@ void smb_Server(VOID *parmp) { /* this is fatal - log as much as possible */ osi_Log1(smb_logp, "Fatal: idx_NCB %d out of range.\n", idx_NCB); - osi_assert(0); + osi_assertx(0, "invalid index"); } ncbp = NCBs[idx_NCB]; @@ -8360,7 +8386,7 @@ void InitNCBslot(int idx) int i; char eventName[MAX_PATH]; - osi_assert( idx < (sizeof(NCBs) / sizeof(NCBs[0])) ); + osi_assertx( idx < (sizeof(NCBs) / sizeof(NCBs[0])), "invalid index" ); NCBs[idx] = GetNCB(); sprintf(eventName,"NCBavails[%d]", idx); @@ -8657,8 +8683,8 @@ void smb_Listener(void *parmp) * we should probably want to wait for a session to be freed in case * we run out. */ - osi_assert(session < SESSION_MAX - 1); - osi_assert(numNCBs < NCB_MAX - 1); /* if we pass this test we can allocate one more */ + osi_assertx(session < SESSION_MAX - 1, "invalid session"); + osi_assertx(numNCBs < NCB_MAX - 1, "invalid numNCBs"); /* if we pass this test we can allocate one more */ lock_ObtainMutex(&vcp->mx); vcp->session = session; @@ -8888,7 +8914,7 @@ int smb_NetbiosInit(void) } } - osi_assert(lana_list.length >= 0); + osi_assertx(lana_list.length >= 0, "empty lana list"); if (!lana_found) { afsi_log("No valid LANA numbers found!"); lana_list.length = 0; @@ -8928,7 +8954,7 @@ void smb_StartListeners() continue; phandle = thrd_Create(NULL, 65536, (ThreadFunc) smb_Listener, (void*)lana_list.lana[i], 0, &lpid, "smb_Listener"); - osi_assert(phandle != NULL); + osi_assertx(phandle != NULL, "smb_Listener thread creation failure"); thrd_CloseHandle(phandle); } } @@ -9383,30 +9409,30 @@ void smb_Init(osi_log_t *logp, int useV3, #ifndef DJGPP phandle = thrd_Create(NULL, 65536, (ThreadFunc) smb_ClientWaiter, NULL, 0, &lpid, "smb_ClientWaiter"); - osi_assert(phandle != NULL); + osi_assertx(phandle != NULL, "smb_ClientWaiter thread creation failure"); thrd_CloseHandle(phandle); #endif /* !DJGPP */ phandle = thrd_Create(NULL, 65536, (ThreadFunc) smb_ServerWaiter, NULL, 0, &lpid, "smb_ServerWaiter"); - osi_assert(phandle != NULL); + osi_assertx(phandle != NULL, "smb_ServerWaiter thread creation failure"); thrd_CloseHandle(phandle); for (i=0; i +#pragma warning(push) +#pragma warning(disable: 4005) #include #define SECURITY_WIN32 #include #include +#pragma warning(pop) #endif /* !DJGPP */ #include #include @@ -2300,13 +2303,13 @@ long smb_ReceiveTran2Open(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op) /* don't create if not found */ if (dscp) cm_ReleaseSCache(dscp); - osi_assert(scp == NULL); + osi_assertx(scp == NULL, "null cm_scache_t"); cm_ReleaseUser(userp); smb_FreeTran2Packet(outp); return CM_ERROR_NOSUCHFILE; } else { - osi_assert(dscp != NULL && scp == NULL); + osi_assertx(dscp != NULL && scp == NULL, "null dsc || non-null sc"); openAction = 2; /* created file */ setAttr.mask = CM_ATTRMASK_CLIENTMODTIME; smb_UnixTimeFromSearchTime(&setAttr.clientModTime, dosTime); @@ -2379,7 +2382,7 @@ long smb_ReceiveTran2Open(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op) /* now all we have to do is open the file itself */ fidp = smb_FindFID(vcp, 0, SMB_FLAG_CREATE); - osi_assert(fidp); + osi_assertx(fidp, "null smb_fid_t"); cm_HoldUser(userp); lock_ObtainMutex(&fidp->mx); @@ -3967,7 +3970,6 @@ smb_ApplyV3DirListPatches(cm_scache_t *dscp, return code; } -#ifndef USE_OLD_MATCHING // char table for case insensitive comparison char mapCaseTable[256]; @@ -4091,145 +4093,6 @@ int smb_V3MatchMask(char *namep, char *maskp, int flags) return retval; } -#else /* USE_OLD_MATCHING */ -/* do a case-folding search of the star name mask with the name in namep. - * Return 1 if we match, otherwise 0. - */ -int smb_V3MatchMask(char *namep, char *maskp, int flags) -{ - unsigned char tcp1, tcp2; /* Pattern characters */ - unsigned char tcn1; /* Name characters */ - int sawDot = 0, sawStar = 0, req8dot3 = 0; - char *starNamep, *starMaskp; - static char nullCharp[] = {0}; - int casefold = flags & CM_FLAG_CASEFOLD; - - /* make sure we only match 8.3 names, if requested */ - req8dot3 = (flags & CM_FLAG_8DOT3); - if (req8dot3 && !cm_Is8Dot3(namep)) - return 0; - - /* loop */ - while (1) { - /* Next pattern character */ - tcp1 = *maskp++; - - /* Next name character */ - tcn1 = *namep; - - if (tcp1 == 0) { - /* 0 - end of pattern */ - if (tcn1 == 0) - return 1; - else - return 0; - } - else if (tcp1 == '.' || tcp1 == '"') { - if (sawDot) { - if (tcn1 == '.') { - namep++; - continue; - } else - return 0; - } - else { - /* - * first dot in pattern; - * must match dot or end of name - */ - sawDot = 1; - if (tcn1 == 0) - continue; - else if (tcn1 == '.') { - sawStar = 0; - namep++; - continue; - } - else - return 0; - } - } - else if (tcp1 == '?') { - if (tcn1 == 0 || tcn1 == '.') - return 0; - namep++; - continue; - } - else if (tcp1 == '>') { - if (tcn1 != 0 && tcn1 != '.') - namep++; - continue; - } - else if (tcp1 == '*' || tcp1 == '<') { - tcp2 = *maskp++; - if (tcp2 == 0) - return 1; - else if ((req8dot3 && tcp2 == '.') || tcp2 == '"') { - while (req8dot3 && tcn1 != '.' && tcn1 != 0) - tcn1 = *++namep; - if (tcn1 == 0) { - if (sawDot) - return 0; - else - continue; - } - else { - namep++; - continue; - } - } - else { - /* - * pattern character after '*' is not null or - * period. If it is '?' or '>', we are not - * going to understand it. If it is '*' or - * '<', we are going to skip over it. None of - * these are likely, I hope. - */ - /* skip over '*' and '<' */ - while (tcp2 == '*' || tcp2 == '<') - tcp2 = *maskp++; - - /* skip over characters that don't match tcp2 */ - while (req8dot3 && tcn1 != '.' && tcn1 != 0 && - ((casefold && cm_foldUpper[tcn1] != cm_foldUpper[tcp2]) || - (!casefold && tcn1 != tcp2))) - tcn1 = *++namep; - - /* No match */ - if ((req8dot3 && tcn1 == '.') || tcn1 == 0) - return 0; - - /* Remember where we are */ - sawStar = 1; - starMaskp = maskp; - starNamep = namep; - - namep++; - continue; - } - } - else { - /* tcp1 is not a wildcard */ - if ((casefold && cm_foldUpper[tcn1] == cm_foldUpper[tcp1]) || - (!casefold && tcn1 == tcp1)) { - /* they match */ - namep++; - continue; - } - /* if trying to match a star pattern, go back */ - if (sawStar) { - maskp = starMaskp - 2; - namep = starNamep + 1; - sawStar = 0; - continue; - } - /* that's all */ - return 0; - } - } -} -#endif /* USE_OLD_MATCHING */ /* smb_ReceiveTran2SearchDir implements both * Tran2_Find_First and Tran2_Find_Next @@ -4286,7 +4149,7 @@ long smb_T2SearchDirSingle(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op cm_InitReq(&req); eos = 0; - osi_assert(p->opcode == 1); + osi_assertx(p->opcode == 1, "invalid opcode"); /* find first; obtain basic parameters from request */ @@ -4734,9 +4597,10 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t /* we only failover if we see a CM_ERROR_NOSUCHFILE */ if (code != CM_ERROR_NOSUCHFILE) { #ifdef USE_BPLUS + /* unless we are using the BPlusTree */ if (code == CM_ERROR_BPLUS_NOMATCH) code = CM_ERROR_NOSUCHFILE; -#endif +#endif /* USE_BPLUS */ return code; } } @@ -4748,7 +4612,7 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t strcpy(dsp->mask, maskp); /* and save mask */ } else { - osi_assert(p->opcode == 2); + osi_assertx(p->opcode == 2, "invalid opcode"); /* find next; obtain basic parameters from request or open dir file */ dsp = smb_FindDirSearch(p->parmsp[0]); maxCount = p->parmsp[1]; @@ -5115,34 +4979,35 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t /* compute offset of cookie representing next entry */ nextEntryCookie = curOffset.LowPart + (CM_DIR_CHUNKSIZE * numDirChunks); + if (dep->fid.vnode == 0) + goto nextEntry; /* This entry is not in use */ + /* Need 8.3 name? */ NeedShortName = 0; - if (infoLevel == SMB_FIND_FILE_BOTH_DIRECTORY_INFO - && dep->fid.vnode != 0 - && !cm_Is8Dot3(dep->name)) { + if (infoLevel == SMB_FIND_FILE_BOTH_DIRECTORY_INFO && + !cm_Is8Dot3(dep->name)) { cm_Gen8Dot3Name(dep, shortName, &shortNameEnd); NeedShortName = 1; } osi_Log4(smb_logp, "T2 search dir vn %u uniq %u name %s (%s)", dep->fid.vnode, dep->fid.unique, - osi_LogSaveString(smb_logp, dep->name), + osi_LogSaveString(smb_logp, dep->name), NeedShortName ? osi_LogSaveString(smb_logp, shortName) : ""); /* When matching, we are using doing a case fold if we have a wildcard mask. * If we get a non-wildcard match, it's a lookup for a specific file. */ - if (dep->fid.vnode != 0 && - (smb_V3MatchMask(dep->name, maskp, (starPattern? CM_FLAG_CASEFOLD : 0)) || - (NeedShortName && - smb_V3MatchMask(shortName, maskp, CM_FLAG_CASEFOLD)))) { - + if (smb_V3MatchMask(dep->name, maskp, (starPattern? CM_FLAG_CASEFOLD : 0)) || + (NeedShortName && smb_V3MatchMask(shortName, maskp, CM_FLAG_CASEFOLD))) + { /* Eliminate entries that don't match requested attributes */ if (smb_hideDotFiles && !(dsp->attribute & SMB_ATTR_HIDDEN) && smb_IsDotFile(dep->name)) { osi_Log0(smb_logp, "T2 search dir skipping hidden"); goto nextEntry; /* no hidden files */ } + if (!(dsp->attribute & SMB_ATTR_DIRECTORY)) /* no directories */ { /* We have already done the cm_TryBulkStat above */ @@ -5151,15 +5016,15 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t fid.vnode = ntohl(dep->fid.vnode); fid.unique = ntohl(dep->fid.unique); fileType = cm_FindFileType(&fid); - /*osi_Log2(smb_logp, "smb_ReceiveTran2SearchDir: file %s " - "has filetype %d", dep->name, - fileType);*/ - if (fileType == CM_SCACHETYPE_DIRECTORY || - fileType == CM_SCACHETYPE_MOUNTPOINT || - fileType == CM_SCACHETYPE_DFSLINK || - fileType == CM_SCACHETYPE_INVALID) + /* osi_Log2(smb_logp, "smb_ReceiveTran2SearchDir: file %s " + * "has filetype %d", dep->name, fileType); + */ + if ( fileType == CM_SCACHETYPE_DIRECTORY || + fileType == CM_SCACHETYPE_MOUNTPOINT || + fileType == CM_SCACHETYPE_DFSLINK || + fileType == CM_SCACHETYPE_INVALID) osi_Log0(smb_logp, "T2 search dir skipping directory or bad link"); - goto nextEntry; + goto nextEntry; } /* finally check if this name will fit */ @@ -5179,9 +5044,9 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t ohbytes += 4; /* if resume key required */ } - if (infoLevel != SMB_INFO_STANDARD - && infoLevel != SMB_FIND_FILE_DIRECTORY_INFO - && infoLevel != SMB_FIND_FILE_NAMES_INFO) + if ( infoLevel != SMB_INFO_STANDARD && + infoLevel != SMB_FIND_FILE_DIRECTORY_INFO && + infoLevel != SMB_FIND_FILE_NAMES_INFO) ohbytes += 4; /* EASIZE */ /* add header to name & term. null */ @@ -5190,7 +5055,7 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t /* now, we round up the record to a 4 byte alignment, * and we make sure that we have enough room here for * even the aligned version (so we don't have to worry - * about an * overflow when we pad things out below). + * about an overflow when we pad things out below). * That's the reason for the alignment arithmetic below. */ if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO) @@ -5200,8 +5065,8 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t if (orbytes + bytesInBuffer + align > maxReturnData) { osi_Log1(smb_logp, "T2 dir search exceed max return data %d", maxReturnData); - break; - } + break; + } /* this is one of the entries to use: it is not deleted * and it matches the star pattern we're looking for. @@ -5255,8 +5120,7 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t */ if (infoLevel != SMB_FIND_FILE_NAMES_INFO) { curPatchp = malloc(sizeof(*curPatchp)); - osi_QAdd((osi_queue_t **) &dirListPatchesp, - &curPatchp->q); + osi_QAdd((osi_queue_t **) &dirListPatchesp, &curPatchp->q); curPatchp->dptr = op; if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO) curPatchp->dptr += 8; @@ -5291,13 +5155,12 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t } } /* if we're including this name */ else if (!starPattern && - !foundInexact && - dep->fid.vnode != 0 && - smb_V3MatchMask(dep->name, maskp, CM_FLAG_CASEFOLD)) { + !foundInexact && + smb_V3MatchMask(dep->name, maskp, CM_FLAG_CASEFOLD)) { /* We were looking for exact matches, but here's an inexact one*/ foundInexact = 1; } - + nextEntry: /* and adjust curOffset to be where the new cookie is */ thyper.HighPart = 0; @@ -5326,8 +5189,7 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t /* apply and free last set of patches; if not doing a star match, this * will be empty, but better safe (and freeing everything) than sorry. */ - code2 = smb_ApplyV3DirListPatches(scp, &dirListPatchesp, infoLevel, userp, - &req); + code2 = smb_ApplyV3DirListPatches(scp, &dirListPatchesp, infoLevel, userp, &req); /* now put out the final parameters */ if (returnedNames == 0) @@ -5615,7 +5477,7 @@ long smb_ReceiveV3OpenX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) return CM_ERROR_NOSUCHFILE; } else { - osi_assert(dscp != NULL); + osi_assertx(dscp != NULL, "null cm_scache_t"); osi_Log1(smb_logp, "smb_ReceiveV3OpenX creating file %s", osi_LogSaveString(smb_logp, lastNamep)); openAction = 2; /* created file */ @@ -5670,7 +5532,7 @@ long smb_ReceiveV3OpenX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) /* now all we have to do is open the file itself */ fidp = smb_FindFID(vcp, 0, SMB_FLAG_CREATE); - osi_assert(fidp); + osi_assertx(fidp, "null smb_fid_t"); cm_HoldUser(userp); lock_ObtainMutex(&fidp->mx); @@ -5893,7 +5755,7 @@ long smb_ReceiveV3LockingX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) wlRequest = malloc(sizeof(smb_waitingLockRequest_t)); - osi_assert(wlRequest != NULL); + osi_assertx(wlRequest != NULL, "null wlRequest"); wlRequest->vcp = vcp; smb_HoldVC(vcp); @@ -5924,7 +5786,7 @@ long smb_ReceiveV3LockingX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) wLock = malloc(sizeof(smb_waitingLock_t)); - osi_assert(wLock != NULL); + osi_assertx(wLock != NULL, "null smb_waitingLock_t"); wLock->key = tkey; wLock->LOffset = tOffset; @@ -5938,7 +5800,7 @@ long smb_ReceiveV3LockingX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) wLock = malloc(sizeof(smb_waitingLock_t)); - osi_assert(wLock != NULL); + osi_assertx(wLock != NULL, "null smb_waitingLock_t"); wLock->key = key; wLock->LOffset = LOffset; @@ -6930,7 +6792,7 @@ long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) code = 0; while (code == 0 && scp->fileType == CM_SCACHETYPE_SYMLINK) { targetScp = 0; - osi_assert(dscp != NULL); + osi_assertx(dscp != NULL, "null cm_scache_t"); code = cm_EvaluateSymLink(dscp, scp, &targetScp, userp, &req); if (code == 0) { /* we have a more accurate file to use (the @@ -6970,7 +6832,7 @@ long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) free(realPathp); return CM_ERROR_NOSUCHFILE; } else if (realDirFlag == 0 || realDirFlag == -1) { - osi_assert(dscp != NULL); + osi_assertx(dscp != NULL, "null cm_scache_t"); osi_Log1(smb_logp, "smb_ReceiveNTCreateX creating file %s", osi_LogSaveString(smb_logp, lastNamep)); openAction = 2; /* created file */ @@ -7028,7 +6890,7 @@ long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) /* create directory */ if ( !treeCreate ) treeStartp = lastNamep; - osi_assert(dscp != NULL); + osi_assertx(dscp != NULL, "null cm_scache_t"); osi_Log1(smb_logp, "smb_ReceiveNTCreateX creating directory [%s]", osi_LogSaveString(smb_logp, treeStartp)); openAction = 2; /* created directory */ @@ -7164,7 +7026,7 @@ long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) /* open the file itself */ fidp = smb_FindFID(vcp, 0, SMB_FLAG_CREATE); - osi_assert(fidp); + osi_assertx(fidp, "null smb_fid_t"); /* save a reference to the user */ cm_HoldUser(userp); @@ -7702,7 +7564,7 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out return CM_ERROR_NOSUCHFILE; } else if (realDirFlag == 0 || realDirFlag == -1) { - osi_assert(dscp != NULL); + osi_assertx(dscp != NULL, "null cm_scache_t"); osi_Log1(smb_logp, "smb_ReceiveNTTranCreate creating file %s", osi_LogSaveString(smb_logp, lastNamep)); openAction = 2; /* created file */ @@ -7753,7 +7615,7 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out } } else { /* create directory */ - osi_assert(dscp != NULL); + osi_assertx(dscp != NULL, "null cm_scache_t"); osi_Log1(smb_logp, "smb_ReceiveNTTranCreate creating directory %s", osi_LogSaveString(smb_logp, lastNamep)); @@ -7831,7 +7693,7 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out /* open the file itself */ fidp = smb_FindFID(vcp, 0, SMB_FLAG_CREATE); - osi_assert(fidp); + osi_assertx(fidp, "null smb_fid_t"); /* save a reference to the user */ cm_HoldUser(userp); diff --git a/src/WINNT/afsd/smb_ioctl.c b/src/WINNT/afsd/smb_ioctl.c index de4c0cfd70..115ece27b8 100644 --- a/src/WINNT/afsd/smb_ioctl.c +++ b/src/WINNT/afsd/smb_ioctl.c @@ -343,7 +343,7 @@ long smb_IoctlV3Read(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_pack uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0); userp = smb_GetUserFromUID(uidp); - osi_assert(userp != 0); + osi_assertx(userp != NULL, "null cm_user_t"); iop->uidp = uidp; if (uidp && uidp->unp) { osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s", diff --git a/src/WINNT/afsd/symlink.c b/src/WINNT/afsd/symlink.c index ebe6ca2710..9917e959ad 100644 --- a/src/WINNT/afsd/symlink.c +++ b/src/WINNT/afsd/symlink.c @@ -269,8 +269,8 @@ char *apath; { } -static ListLinkCmd(as) -register struct cmd_syndesc *as; { +static ListLinkCmd(register struct cmd_syndesc *as, void *arock) +{ register afs_int32 code; struct ViceIoctl blob; int error; @@ -420,8 +420,8 @@ register struct cmd_syndesc *as; { return error; } -static MakeLinkCmd(as) -register struct cmd_syndesc *as; { +static MakeLinkCmd(register struct cmd_syndesc *as, void *arock) +{ register afs_int32 code; struct ViceIoctl blob; char * parent; @@ -484,8 +484,8 @@ register struct cmd_syndesc *as; { * symlink (or ``.'' if none is provided) * tp: Set to point to the actual name of the symlink to nuke. */ -static RemoveLinkCmd(as) -register struct cmd_syndesc *as; { +static RemoveLinkCmd(register struct cmd_syndesc *as, void *arock) +{ register afs_int32 code=0; struct ViceIoctl blob; register struct cmd_item *ti; @@ -589,14 +589,14 @@ char **argv; { osi_Init(); - ts = cmd_CreateSyntax("list", ListLinkCmd, 0, "list symlink"); + ts = cmd_CreateSyntax("list", ListLinkCmd, NULL, "list symlink"); cmd_AddParm(ts, "-name", CMD_LIST, 0, "name"); - ts = cmd_CreateSyntax("make", MakeLinkCmd, 0, "make symlink"); + ts = cmd_CreateSyntax("make", MakeLinkCmd, NULL, "make symlink"); cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name"); cmd_AddParm(ts, "-to", CMD_SINGLE, 0, "target"); - ts = cmd_CreateSyntax("remove", RemoveLinkCmd, 0, "remove symlink"); + ts = cmd_CreateSyntax("remove", RemoveLinkCmd, NULL, "remove symlink"); cmd_AddParm(ts, "-name", CMD_LIST, 0, "name"); cmd_CreateAlias(ts, "rm"); @@ -620,8 +620,12 @@ void Die(code, filename) else fprintf(stderr,"%s: Invalid argument.\n", pn); } else if (code == ENOENT) { - if (filename) fprintf(stderr,"%s: File '%s' doesn't exist\n", pn, filename); - else fprintf(stderr,"%s: no such file returned\n", pn); + if (filename) fprintf(stderr,"%s: File '%s' doesn't exist.\n", pn, filename); + else fprintf(stderr,"%s: no such file returned.\n", pn); + } + else if (code == EEXIST) { + if (filename) fprintf(stderr,"%s: File '%s' already exists.\n", pn, filename); + else fprintf(stderr,"%s: the specified file already exists.\n", pn); } else if (code == EROFS) fprintf(stderr,"%s: You can not change a backup or readonly volume\n", pn); else if (code == EACCES || code == EPERM) { diff --git a/src/WINNT/afsreg/test/regman.c b/src/WINNT/afsreg/test/regman.c index 454128885a..b97c709aee 100644 --- a/src/WINNT/afsreg/test/regman.c +++ b/src/WINNT/afsreg/test/regman.c @@ -35,7 +35,7 @@ static char* whoami; -static int DoVptList(struct cmd_syndesc *as, char *arock) +static int DoVptList(struct cmd_syndesc *as, void *arock) { struct vpt_iter vpiter; struct vptab vpentry; @@ -51,7 +51,7 @@ static int DoVptList(struct cmd_syndesc *as, char *arock) return 0; } -static int DoVptAdd(struct cmd_syndesc *as, char *arock) +static int DoVptAdd(struct cmd_syndesc *as, void *arock) { char *vpName, *vpDev; struct vptab vpentry; @@ -79,7 +79,7 @@ static int DoVptAdd(struct cmd_syndesc *as, char *arock) return 0; } -static int DoVptDel(struct cmd_syndesc *as, char *arock) +static int DoVptDel(struct cmd_syndesc *as, void *arock) { char *vpName; @@ -98,7 +98,7 @@ static int DoVptDel(struct cmd_syndesc *as, char *arock) } -static int DoDirGet(struct cmd_syndesc *as, char *arock) +static int DoDirGet(struct cmd_syndesc *as, void *arock) { char *buf; @@ -115,7 +115,7 @@ static int DoDirGet(struct cmd_syndesc *as, char *arock) } -static int DoDirSet(struct cmd_syndesc *as, char *arock) +static int DoDirSet(struct cmd_syndesc *as, void *arock) { long status; HKEY key; @@ -143,7 +143,7 @@ static int DoDirSet(struct cmd_syndesc *as, char *arock) } -static int DoBosCfg(struct cmd_syndesc *as, char *arock) +static int DoBosCfg(struct cmd_syndesc *as, void *arock) { char bosSvcPath[AFSDIR_PATH_MAX]; SC_HANDLE scmHandle, svcHandle; @@ -213,7 +213,7 @@ static int DoBosCfg(struct cmd_syndesc *as, char *arock) } -static int DoBosDel(struct cmd_syndesc *as, char *arock) +static int DoBosDel(struct cmd_syndesc *as, void *arock) { int rc = 0; SC_HANDLE scmHandle, svcHandle; @@ -258,7 +258,7 @@ static int DoBosDel(struct cmd_syndesc *as, char *arock) return (rc); } -static int DoVersionGet(struct cmd_syndesc *as, char *arock) +static int DoVersionGet(struct cmd_syndesc *as, void *arock) { unsigned major, minor, patch; @@ -286,15 +286,15 @@ SetupVptCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("vptlist", DoVptList, 0, + ts = cmd_CreateSyntax("vptlist", DoVptList, NULL, "list vice partition table"); - ts = cmd_CreateSyntax("vptadd", DoVptAdd, 0, + ts = cmd_CreateSyntax("vptadd", DoVptAdd, NULL, "add entry to vice partition table"); cmd_AddParm(ts, "-partition", CMD_SINGLE, CMD_REQUIRED, "partition name"); cmd_AddParm(ts, "-dev", CMD_SINGLE, CMD_REQUIRED, "device name"); - ts = cmd_CreateSyntax("vptdel", DoVptDel, 0, + ts = cmd_CreateSyntax("vptdel", DoVptDel, NULL, "remove entry from vice partition table"); cmd_AddParm(ts, "-partition", CMD_SINGLE, CMD_REQUIRED, "partition name"); } @@ -304,10 +304,10 @@ SetupDirCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("dirget", DoDirGet, 0, + ts = cmd_CreateSyntax("dirget", DoDirGet, NULL, "display the AFS server installation directory"); - ts = cmd_CreateSyntax("dirset", DoDirSet, 0, + ts = cmd_CreateSyntax("dirset", DoDirSet, NULL, "set the AFS server installation directory"); cmd_AddParm(ts, "-path", CMD_SINGLE, CMD_REQUIRED, "directory path"); } @@ -317,11 +317,11 @@ SetupBosCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("boscfg", DoBosCfg, 0, + ts = cmd_CreateSyntax("boscfg", DoBosCfg, NULL, "configure the AFS BOS control service"); cmd_AddParm(ts, "-path", CMD_SINGLE, CMD_OPTIONAL, "service binary path"); - ts = cmd_CreateSyntax("bosdel", DoBosDel, 0, + ts = cmd_CreateSyntax("bosdel", DoBosDel, NULL, "delete (unconfigure) the AFS BOS control service"); } @@ -330,7 +330,7 @@ SetupVersionCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("version", DoVersionGet, 0, + ts = cmd_CreateSyntax("version", DoVersionGet, NULL, "display AFS version information"); } diff --git a/src/WINNT/aklog/NTMakefile b/src/WINNT/aklog/NTMakefile index 337f974a1a..bf0be13be3 100644 --- a/src/WINNT/aklog/NTMakefile +++ b/src/WINNT/aklog/NTMakefile @@ -49,13 +49,15 @@ EXELIBS = \ OTHERLIBS = \ ..\kfw\lib\$(CPU)\krb5_64.lib \ ..\kfw\lib\$(CPU)\comerr64.lib \ - dnsapi.lib mpr.lib + dnsapi.lib mpr.lib delayimp.lib +LINKOPTS = /DELAYLOAD:krb5_64.dll /DELAYLOAD:comerr64.dll !else OTHERLIBS = \ ..\kfw\lib\$(CPU)\krbv4w32.lib \ ..\kfw\lib\$(CPU)\krb5_32.lib \ ..\kfw\lib\$(CPU)\comerr32.lib \ - dnsapi.lib mpr.lib + dnsapi.lib mpr.lib delayimp.lib +LINKOPTS = /DELAYLOAD:krbv4w32.dll /DELAYLOAD:krb5_32.dll /DELAYLOAD:comerr32.dll !endif afscflags = -I..\kfw\inc\krb5 -I..\kfw\inc\krb4 $(afscflags) @@ -68,12 +70,12 @@ $(ASETKEYOBJS): $$(@B).c ############################################################################ $(AKLOG) : $(AKLOGOBJS) $(EXELIBS) $(OUT)\aklog.res - $(EXECONLINK) $(EXELIBS) $(OTHERLIBS) + $(EXECONLINK) $(EXELIBS) $(OTHERLIBS) $(LINKOPTS) $(_VC_MANIFEST_EMBED_EXE) $(EXEPREP) $(ASETKEY) : $(ASETKEYOBJS) $(EXELIBS) $(OUT)\asetkey.res - $(EXECONLINK) $(EXELIBS) $(OTHERLIBS) + $(EXECONLINK) $(EXELIBS) $(OTHERLIBS) $(LINKOPTS) $(_VC_MANIFEST_EMBED_EXE) $(EXEPREP) diff --git a/src/WINNT/aklog/aklog.c b/src/WINNT/aklog/aklog.c index ded352f99b..d57b962641 100644 --- a/src/WINNT/aklog/aklog.c +++ b/src/WINNT/aklog/aklog.c @@ -13,6 +13,34 @@ * or implied warranty. */ +/* + * Copyright (c) 2007 Secure Endpoints Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Neither the name of the Secure Endpoints Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ + #ifndef _WIN64 #define HAVE_KRB4 #endif @@ -145,6 +173,7 @@ get_cellconfig_callback(void *cellconfig, struct sockaddr_in *addrp, char *namep #define AKLOG_TOKEN 5 #define AKLOG_BADPATH 6 #define AKLOG_MISC 7 +#define AKLOG_KFW_NOT_INSTALLED 8 #ifndef NULL #define NULL 0 @@ -1369,6 +1398,40 @@ static void usage(void) exit(AKLOG_USAGE); } +void +validate_krb5_availability(void) +{ +#ifndef _WIN64 +#define KRB5LIB "krb5_32.dll" +#else +#define KRB5LIB "krb5_64.dll" +#endif + HINSTANCE h = LoadLibrary(KRB5LIB); + if (h) + FreeLibrary(h); + else { + fprintf(stderr, "Kerberos for Windows library %s is not available.\n", KRB5LIB); + exit(AKLOG_KFW_NOT_INSTALLED); + } +} + +void +validate_krb4_availability(void) +{ +#ifdef HAVE_KRB4 + HINSTANCE h = LoadLibrary("krbv4w32.dll"); + if (h) + FreeLibrary(h); + else { + fprintf(stderr, "Kerberos for Windows library krbv4w32.dll is not available.\n"); + exit(AKLOG_KFW_NOT_INSTALLED); + } +#else + fprintf(stderr, "Kerberos v4 is not available in this build of aklog.\n"); + exit(AKLOG_USAGE); +#endif +} + int main(int argc, char *argv[]) { int status = AKLOG_SUCCESS; @@ -1542,6 +1605,11 @@ int main(int argc, char *argv[]) } } + if (usev5) + validate_krb5_availability(); + else + validate_krb4_availability(); + if(usev5) krb5_init_context(&context); diff --git a/src/WINNT/aklog/aklog.rc b/src/WINNT/aklog/aklog.rc index 720ed3b318..7c1833a2b0 100644 --- a/src/WINNT/aklog/aklog.rc +++ b/src/WINNT/aklog/aklog.rc @@ -9,7 +9,7 @@ /* Define VERSIONINFO resource */ -#define AFS_VERINFO_FILE_DESCRIPTION "AFS File Server Command" +#define AFS_VERINFO_FILE_DESCRIPTION "AFS Token from Kerberos Ticket Granting Ticket" #define AFS_VERINFO_NAME "aklog" #define AFS_VERINFO_FILENAME "aklog.exe" diff --git a/src/WINNT/aklog/asetkey.c b/src/WINNT/aklog/asetkey.c index 7f99770ef6..63449558a7 100644 --- a/src/WINNT/aklog/asetkey.c +++ b/src/WINNT/aklog/asetkey.c @@ -5,9 +5,37 @@ * * Updated for Kerberos 5 */ +/* + * Copyright (c) 2007 Secure Endpoints Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Neither the name of the Secure Endpoints Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. + */ #include +#include #include #include @@ -19,6 +47,23 @@ #endif /* !PRE_AFS35 */ #include +void +validate_krb5_availability(void) +{ +#ifndef _WIN64 +#define KRB5LIB "krb5_32.dll" +#else +#define KRB5LIB "krb5_64.dll" +#endif + HINSTANCE h = LoadLibrary(KRB5LIB); + if (h) + FreeLibrary(h); + else { + fprintf(stderr, "Kerberos for Windows library %s is not available.\n", KRB5LIB); + exit(2); + } +} + int main(int argc, char **argv) { @@ -26,6 +71,8 @@ main(int argc, char **argv) register long code; const char *confdir; + validate_krb5_availability(); + if (argc == 1) { printf("asetkey: usage is 'setkey options, e.g.\n"); printf(" asetkey add \n"); diff --git a/src/WINNT/client_osi/osibasel.h b/src/WINNT/client_osi/osibasel.h index 633ee84c9e..5fd2d73a81 100644 --- a/src/WINNT/client_osi/osibasel.h +++ b/src/WINNT/client_osi/osibasel.h @@ -121,12 +121,12 @@ extern void osi_BaseInit(void); /* and friendly macros */ -#define lock_AssertRead(x) osi_assert(lock_GetRWLockState(x) & OSI_RWLOCK_READHELD) +#define lock_AssertRead(x) osi_assertx(lock_GetRWLockState(x) & OSI_RWLOCK_READHELD, "!OSI_RWLOCK_READHELD") -#define lock_AssertWrite(x) osi_assert(lock_GetRWLockState(x) & OSI_RWLOCK_WRITEHELD) +#define lock_AssertWrite(x) osi_assertx(lock_GetRWLockState(x) & OSI_RWLOCK_WRITEHELD, "!OSI_RWLOCK_WRITEHELD") -#define lock_AssertAny(x) osi_assert(lock_GetRWLockState(x) != 0) +#define lock_AssertAny(x) osi_assertx(lock_GetRWLockState(x) != 0, "!(OSI_RWLOCK_READHELD | OSI_RWLOCK_WRITEHELD)") -#define lock_AssertMutex(x) osi_assert(lock_GetMutexState(x) & OSI_MUTEX_HELD) +#define lock_AssertMutex(x) osi_assertx(lock_GetMutexState(x) & OSI_MUTEX_HELD, "!OSI_MUTEX_HELD") #endif /*_OSIBASEL_H_ENV_ */ diff --git a/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm b/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm index 274fcc49e7..104ee7101d 100644 --- a/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm +++ b/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm @@ -18,7 +18,7 @@ w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} -OpenAFS for Windows 1.5.25 Release Notes +OpenAFS for Windows 1.5.28 Release Notes -OpenAFS for Windows 1.5.25 Release Notes +OpenAFS for Windows 1.5.28 Release Notes Jeffrey Altman 3 - 802 + 930 2006-11-29T17:26:00Z 2007-06-22T13:42:00Z 1 - 17762 - 101245 + 18300 + 104312 Secure Endpoints Inc. - 843 - 237 - 118770 - 11.8132 + 869 + 244 + 122368 + 11.9999  

diff --git a/src/WINNT/doc/install/Documentation/en_US/html/index.htm b/src/WINNT/doc/install/Documentation/en_US/html/index.htm index dd230e0a1b..6023e3a2e3 100755 --- a/src/WINNT/doc/install/Documentation/en_US/html/index.htm +++ b/src/WINNT/doc/install/Documentation/en_US/html/index.htm @@ -57,7 +57,7 @@ p

OpenAFS for Windows

-

Version 1.5.25

+

Version 1.5.28

 

@@ -80,7 +80,7 @@ revised documentation to replace it at the current time.

·         OpenAFS for Windows 1.5.25 +href="ReleaseNotes/relnotes-frames.htm">OpenAFS for Windows 1.5.28 Release Notes

diff --git a/src/WINNT/eventlog/NTMakefile b/src/WINNT/eventlog/NTMakefile index 87c81774e7..fc6bb22221 100644 --- a/src/WINNT/eventlog/NTMakefile +++ b/src/WINNT/eventlog/NTMakefile @@ -72,6 +72,7 @@ de_DE: clean:: $(DEL) $(LIBFILE) $(CD) lang + $(DEL) AFS_component_version_number.h if exist $(NTLANG) $(NTLANG) en_US $(MAKECMD) /nologo /f NTMakefile clean if exist $(NTLANG) $(NTLANG) ja_JP $(MAKECMD) /nologo /f NTMakefile clean if exist $(NTLANG) $(NTLANG) ko_KR $(MAKECMD) /nologo /f NTMakefile clean @@ -85,5 +86,5 @@ clean:: mkdir: -mkdir $(OUT)\lang cd lang - nmake /nologo /f ntmakefile SRC=$(SRC) OBJ=$(OBJ) mkdir + $(MAKECMD) /nologo /f NTMakefile SRC=$(SRC) OBJ=$(OBJ) mkdir cd .. diff --git a/src/WINNT/eventlog/lang/NTMakefile b/src/WINNT/eventlog/lang/NTMakefile index 7bfda80d2b..e711a3ef2d 100644 --- a/src/WINNT/eventlog/lang/NTMakefile +++ b/src/WINNT/eventlog/lang/NTMakefile @@ -75,3 +75,4 @@ clean:: $(DEL) $(LANGNAME)\event.h $(DEL) $(LANGNAME)\event.rc $(DEL) $(LANGNAME)\MSG*.bin + $(DEL) AFS_component_version_number.h diff --git a/src/WINNT/eventlog/lang/de_DE/event.rc b/src/WINNT/eventlog/lang/de_DE/event.rc deleted file mode 100644 index 5c78f913ff..0000000000 --- a/src/WINNT/eventlog/lang/de_DE/event.rc +++ /dev/null @@ -1,2 +0,0 @@ -LANGUAGE 0x1,0x0 -1 11 MSG000001.bin diff --git a/src/WINNT/eventlog/lang/en_US/event.rc b/src/WINNT/eventlog/lang/en_US/event.rc deleted file mode 100644 index 116522b7d4..0000000000 --- a/src/WINNT/eventlog/lang/en_US/event.rc +++ /dev/null @@ -1,2 +0,0 @@ -LANGUAGE 0x9,0x1 -1 11 MSG00001.bin diff --git a/src/WINNT/eventlog/lang/es_ES/event.rc b/src/WINNT/eventlog/lang/es_ES/event.rc deleted file mode 100644 index 116522b7d4..0000000000 --- a/src/WINNT/eventlog/lang/es_ES/event.rc +++ /dev/null @@ -1,2 +0,0 @@ -LANGUAGE 0x9,0x1 -1 11 MSG00001.bin diff --git a/src/WINNT/eventlog/lang/ja_JP/event.rc b/src/WINNT/eventlog/lang/ja_JP/event.rc deleted file mode 100644 index 5c78f913ff..0000000000 --- a/src/WINNT/eventlog/lang/ja_JP/event.rc +++ /dev/null @@ -1,2 +0,0 @@ -LANGUAGE 0x1,0x0 -1 11 MSG000001.bin diff --git a/src/WINNT/eventlog/lang/ko_KR/event.rc b/src/WINNT/eventlog/lang/ko_KR/event.rc deleted file mode 100644 index 5c78f913ff..0000000000 --- a/src/WINNT/eventlog/lang/ko_KR/event.rc +++ /dev/null @@ -1,2 +0,0 @@ -LANGUAGE 0x1,0x0 -1 11 MSG000001.bin diff --git a/src/WINNT/eventlog/lang/pt_BR/event.rc b/src/WINNT/eventlog/lang/pt_BR/event.rc deleted file mode 100644 index 116522b7d4..0000000000 --- a/src/WINNT/eventlog/lang/pt_BR/event.rc +++ /dev/null @@ -1,2 +0,0 @@ -LANGUAGE 0x9,0x1 -1 11 MSG00001.bin diff --git a/src/WINNT/eventlog/lang/zh_CN/event.rc b/src/WINNT/eventlog/lang/zh_CN/event.rc deleted file mode 100644 index 116522b7d4..0000000000 --- a/src/WINNT/eventlog/lang/zh_CN/event.rc +++ /dev/null @@ -1,2 +0,0 @@ -LANGUAGE 0x9,0x1 -1 11 MSG00001.bin diff --git a/src/WINNT/eventlog/lang/zh_TW/event.rc b/src/WINNT/eventlog/lang/zh_TW/event.rc deleted file mode 100644 index 5c78f913ff..0000000000 --- a/src/WINNT/eventlog/lang/zh_TW/event.rc +++ /dev/null @@ -1,2 +0,0 @@ -LANGUAGE 0x1,0x0 -1 11 MSG000001.bin diff --git a/src/WINNT/install/InstallShield5/Build.tsb b/src/WINNT/install/InstallShield5/Build.tsb deleted file mode 100644 index ff9fe01226..0000000000 --- a/src/WINNT/install/InstallShield5/Build.tsb +++ /dev/null @@ -1,66 +0,0 @@ -[] -Value= -KeyType=4 - -[] -Value= -KeyType=4 - -[] -Value= -KeyType=4 - -[] -Value= -KeyType=4 - -[] -Value= -KeyType=4 - -[] -Value= -KeyType=4 - -[Data] -Key0= -Key1= -Key2= -Key3= -Key4= -Key5= -Key10= -Key6= -Key11= -Key7= -Key8= -Key9= - -[] -Value= -KeyType=4 - -[] -Value= -KeyType=4 - -[General] -Type=TEXTSUB -Version=1.10.000 - -[] -Value= -KeyType=4 - -[] -Value= -KeyType=4 - -[] -Value= -KeyType=4 - -[] -Value= -KeyType=4 - diff --git a/src/WINNT/install/InstallShield5/BuildSetup.bat b/src/WINNT/install/InstallShield5/BuildSetup.bat deleted file mode 100644 index 330df822ea..0000000000 --- a/src/WINNT/install/InstallShield5/BuildSetup.bat +++ /dev/null @@ -1,37 +0,0 @@ -@echo off -rem Copyright 2000, International Business Machines Corporation and others. -rem All Rights Reserved. -rem -rem This software has been released under the terms of the IBM Public -rem License. For details, see the LICENSE file in the top-level source -rem directory or online at http://www.openafs.org/dl/license10.html - -rem This file runs the IS5 command line tools to create the OpenAFS setup media. - -echo Building the setup media... - -Set SavePath=%Path% - -Path %IS5ROOT%\Program;%PATH% - -ISbuild -p"%AFSROOT%\src\WINNT\install\InstallShield5" -m"OpenAFS" - -if not exist "Media\OpenAFS\Disk Images\disk1" goto nocopylicense -mkdir "Media\OpenAFS\Disk Images\disk1\License" -copy ..\..\license\lang\*.rtf "Media\OpenAFS\Disk Images\disk1\License" -:nocopylicense - -If errorlevel 1 goto BuildErrorOccurred - -rem Skip over the error handling and exit - Goto Done - -rem Report the build error; then exit -:BuildErrorOccurred - Echo Error on build; media not built. - -:Done -rem Restore the search path - Path=%SavePath% - Set SavePath= - diff --git a/src/WINNT/install/InstallShield5/CompileScript.bat b/src/WINNT/install/InstallShield5/CompileScript.bat deleted file mode 100644 index 33baf9f2a2..0000000000 --- a/src/WINNT/install/InstallShield5/CompileScript.bat +++ /dev/null @@ -1,37 +0,0 @@ -@echo off -rem Copyright 2000, International Business Machines Corporation and others. -rem All Rights Reserved. -rem -rem This software has been released under the terms of the IBM Public -rem License. For details, see the LICENSE file in the top-level source -rem directory or online at http://www.openafs.org/dl/license10.html - -rem This file runs the IS5 command line compiler to compile the setup script. - -echo. -echo Compiling the setup script... -echo. -echo NOTE: Ignore "Function defined but never called" warnings -echo. - -Set SavePath=%Path% - -Path %IS5ROOT%\Program;%PATH% - -Compile -I%IS5ROOT%\Include "Script Files\setup.rul" - -If errorlevel 1 goto CompilerErrorOccurred - -rem Skip over the error handling and exit - Goto Done - -rem Report the compiler error then exit -:CompilerErrorOccurred - Echo Error on compile; media not built. - Goto Done - -:Done -rem Restore the search path - Path=%SavePath% - Set SavePath= - diff --git a/src/WINNT/install/InstallShield5/CreateGeneratedFiles.bat b/src/WINNT/install/InstallShield5/CreateGeneratedFiles.bat deleted file mode 100644 index 25df3c728d..0000000000 --- a/src/WINNT/install/InstallShield5/CreateGeneratedFiles.bat +++ /dev/null @@ -1,20 +0,0 @@ -@echo off -rem Copyright 2000, International Business Machines Corporation and others. -rem All Rights Reserved. -rem -rem This software has been released under the terms of the IBM Public -rem License. For details, see the LICENSE file in the top-level source -rem directory or online at http://www.openafs.org/dl/license10.html - -rem This file generates IS5 files that contain hard coded paths. We must -rem generate these so the paths are correct for each person doing a build. - -echo Generating IS files that contain paths... - -call GenIS5.ipr.bat -cd File Groups -rem This next file must run using cmd.exe -cmd /c GenFileGroups.bat -cd ..\Media\OpenAFS -call GenDefault.mda.bat -cd ..\.. diff --git a/src/WINNT/install/InstallShield5/CreateISDirTree.bat b/src/WINNT/install/InstallShield5/CreateISDirTree.bat deleted file mode 100644 index d5cbb7e63b..0000000000 --- a/src/WINNT/install/InstallShield5/CreateISDirTree.bat +++ /dev/null @@ -1,74 +0,0 @@ -@echo off -rem Copyright 2000, International Business Machines Corporation and others. -rem All Rights Reserved. -rem -rem This software has been released under the terms of the IBM Public -rem License. For details, see the LICENSE file in the top-level source -rem directory or online at http://www.openafs.org/dl/license10.html - -rem This file creates the IS5 directory tree. We couldn't check it into cml -rem because the directory names contain spaces. - -echo Creating the IS dir tree... - -if not exist "Component Definitions" mkdir "Component Definitions" -if not exist "File Groups" mkdir "File Groups" -if not exist Media mkdir Media -if not exist "Media\OpenAFS" mkdir "Media\OpenAFS" -if not exist "Registry Entries" mkdir "Registry Entries" -if not exist "Script Files" mkdir "Script Files" -if not exist "Setup Files" mkdir "Setup Files" - -if not exist "Registry Entries" mkdir "Registry Entries" -if not exist "Script Files" mkdir "Script Files" -if not exist "Setup Files" mkdir "Setup Files" - -set sub1=Uncompressed Files -call :gencomp -set sub1=Compressed Files -call :gencomp -goto shell - -:gencomp -if not exist "Setup Files\%sub1%" mkdir "Setup Files\%sub1%" -set sub2=Language Independent -call :gencomp2 -set sub2=0009-English -call :gencomp2 -set sub2=0007-German -call :gencomp2 -set sub2=0011-Japanese -call :gencomp2 -set sub2=0012-Korean -call :gencomp2 -set sub2=0416-Portuguese (Brazilian) -call :gencomp2 -set sub2=0404-Chinese (Taiwan) -call :gencomp2 -set sub2=000a-Spanish -call :gencomp2 -set sub2=0804-Chinese (PRC) -call :gencomp2 -goto :eof - -:gencomp2 -rem echo ]%sub1%] ]%sub2%] -if not exist "Setup Files\%sub1%\%sub2%" mkdir "Setup Files\%sub1%\%sub2%" -if not exist "Setup Files\%sub1%\%sub2%\OS Independent" mkdir "Setup Files\%sub1%\%sub2%\OS Independent" -if not exist "Setup Files\%sub1%\%sub2%\Intel 32" mkdir "Setup Files\%sub1%\%sub2%\Intel 32" -goto :eof - -:shell -if not exist "Shell Objects" mkdir "Shell Objects" -if not exist "String Tables" mkdir "String Tables" -if not exist "String Tables\0009-English" mkdir "String Tables\0009-English" -if not exist "String Tables\0011-Japanese" mkdir "String Tables\0011-Japanese" -if not exist "String Tables\0012-Korean" mkdir "String Tables\0012-Korean" -if not exist "String Tables\0404-Chinese (Taiwan)" mkdir "String Tables\0404-Chinese (Taiwan)" -if not exist "String Tables\0804-Chinese (PRC)" mkdir "String Tables\0804-Chinese (PRC)" -if not exist "String Tables\0007-German" mkdir "String Tables\0007-German" -if not exist "String Tables\0416-Portuguese (Brazilian)" mkdir "String Tables\0416-Portuguese (Brazilian)" -if not exist "String Tables\000a-Spanish" mkdir "String Tables\000a-Spanish" -if not exist "Text Substitutions" mkdir "Text Substitutions" - -:eof \ No newline at end of file diff --git a/src/WINNT/install/InstallShield5/Default.cdf b/src/WINNT/install/InstallShield5/Default.cdf deleted file mode 100644 index fa6800896e..0000000000 --- a/src/WINNT/install/InstallShield5/Default.cdf +++ /dev/null @@ -1,2920 +0,0 @@ -[Documentation\Simp_Chinese] -COMMENT= -COMPRESSIFSEPARATE=No -DEFSELECTION=Yes -DESCRIPTION= -DISK=ANYDISK -DISPLAYTEXT= -ENCRYPT=No -FILENEED=STANDARD -FTPLOCATION= -HTTPLOCATION= -IMAGE= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -member0=Documentation\Simp_Chinese\Cmd_Ref -member1=Documentation\Simp_Chinese\Sys_Admin_Guide -member2=Documentation\Simp_Chinese\Doc_Misc -MISC= -PASSWORD= -required0=Readme\Simp_Chinese -SELECTED=Yes -STATUS= -TARGET= -TARGETDIRCDROM= -TARGETHIDDEN=General Application Destination -UNINSTALLABLE=Yes -VISIBLE=No - -[Documentation\Japanese\Cmd_Ref] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\CmdRef -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Cmd_Ref_Japanese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\CmdRef - -[Readme\Simp_Chinese\Install_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\InstallGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Install_Guide_Simp_Chinese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\InstallGd - -[Readme\Japanese\Release_Notes] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\ReleaseNotes -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Release_Notes_Japanese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation - -[Readme\English\Release_Notes] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\ReleaseNotes -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Release_Notes_English_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation - -[Client\Client_WinDir] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=CLIENT -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Client_WinDir_Files -requiredby0=Client -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Documentation\English\Sys_Admin_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\SysAdminGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Sys_Admin_Guide_English_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\SysAdminGd - -[Server] -required0=Readme -SELECTED=Yes -FILENEED=STANDARD -required1=Server\Server_Program -HTTPLOCATION= -STATUS=SERVER -required2=Server\Server_Common -UNINSTALLABLE=Yes -TARGET= -required3=Server\Server_WinDir -required4=Server\Server_System32 -member0=Server\Server_Program -FTPLOCATION= -member1=Server\Server_Common -VISIBLE=Yes -DESCRIPTION= -member2=Server\Server_WinDir -member3=Server\Server_System32 -DISPLAYTEXT=AFS Server -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Control_Center\Control_Center_System32] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=CCENTER -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Control_Center_System32_Files -requiredby0=Control_Center -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=Windows Operating System\Windows System Folder - -[Readme\Korean\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_Korean_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Components] -component0=Client\Client_WinDir -component1=Readme\English\Release_Notes -component2=Readme\Japanese\Release_Notes -component3=Readme\Simp_Chinese\Install_Guide -component4=Documentation\Japanese\Cmd_Ref -component5=Documentation\Simp_Chinese -component6=Readme\Korean\Doc_Misc -component7=Control_Center\Control_Center_System32 -component8=Server -component9=Documentation\English\Sys_Admin_Guide -component10=Documentation\English\Doc_Misc -component11=Readme\Japanese\Doc_Misc -component12=Control_Center -component13=Client\Client_System32 -component14=Server\Server_Program -component15=Light_Client\Win98\Light_Client_Common -component16=Control_Center\Control_Center_Program -component17=Documentation\English\Cmd_Ref -component18=Documentation\Japanese\Sys_Admin_Guide -component19=Documentation\Trad_Chinese -component20=Light_Client\Win95\Light95_Client_Common -component21=Client\Client_Program\Client_Headers -component22=Languages\Lang_Japanese -component23=Control_Center\Control_Center_Common -component24=Readme\English\Install_Guide -component25=Readme\Japanese\Install_Guide -component26=Readme\Simp_Chinese -component27=Documentation\Japanese -component28=Documentation\Simp_Chinese\Doc_Misc -component29=Documentation\Trad_Chinese\Doc_Misc -component30=Light_Client -component31=Server\Server_WinDir -component32=Readme\English -component33=Readme\Japanese -component34=Documentation\Korean\Cmd_Ref -component35=Light_Client\Win95 -component36=Client\Client_Program\Client_Sample -component37=Documentation\Korean\Doc_Misc -component38=Readme\Simp_Chinese\Doc_Misc -component39=Readme\Trad_Chinese\Doc_Misc -component40=Client\Client_Common -component41=Client\Client_Program -component42=Light_Client\Win95\Light95_Client_System32 -component43=Languages\Lang_Simp_Chinese -component44=Client -component45=Readme\Korean\Release_Notes -component46=Documentation\Simp_Chinese\Cmd_Ref -component47=Documentation\Simp_Chinese\Sys_Admin_Guide -component48=Light_Client\Win98 -component49=Readme\Trad_Chinese -component50=Readme\Trad_Chinese\Release_Notes -component51=Documentation\Trad_Chinese\Cmd_Ref -component52=Readme\English\Doc_Misc -component53=Languages\Lang_English -component54=Readme\Korean -component55=Client\Client_Program\Client_Headers\Client_Main_Headers -component56=Documentation\Japanese\Doc_Misc -component57=Languages -component58=Readme\Simp_Chinese\Release_Notes -component59=Server\Server_System32 -component60=Server\Server_Common -component61=Documentation\Trad_Chinese\Sys_Admin_Guide -component62=Light_Client\Win98\Light_Client_System32 -component63=Light_Client\Win98\Light_Client_WinDir -component64=Readme -component65=Readme\Korean\Install_Guide -component66=Documentation\Korean -component67=Languages\Lang_Trad_Chinese -component68=Light_Client\Win98\Light_Client_Program -component69=Light_Client\Win95\Light95_Client_WinDir -component70=Light_Client\Win95\Light95_Client_Program -component71=Client\Client_Program\Client_Headers\Client_Rx_Headers -component72=Control_Center\Control_Center_WinDir -component73=Readme\Trad_Chinese\Install_Guide -component74=Documentation\English -component75=Documentation\Korean\Sys_Admin_Guide -component76=Client\Client_Program\Client_Headers\Client_Afs_Headers -component77=Documentation -component78=Languages\Lang_Korean -component79=Readme\German\Release_Notes -component80=Documentation\German\Cmd_Ref -component81=Readme\German\Doc_Misc -component82=Documentation\German\Sys_Admin_Guide -component83=Languages\Lang_German -component84=Readme\German\Install_Guide -component85=Documentation\German -component86=Readme\German -component87=Documentation\German\Doc_Misc -component88=Readme\Spanish\Release_Notes -component89=Documentation\Spanish\Cmd_Ref -component90=Readme\Spanish\Doc_Misc -component91=Documentation\Spanish\Sys_Admin_Guide -component92=Languages\Lang_Spanish -component93=Readme\Spanish\Install_Guide -component94=Documentation\Spanish -component95=Readme\Spanish -component96=Documentation\Spanish\Doc_Misc -component97=Readme\Portuguese\Release_Notes -component98=Documentation\Portuguese\Cmd_Ref -component99=Readme\Portuguese\Doc_Misc -component100=Documentation\Portuguese\Sys_Admin_Guide -component101=Languages\Lang_Portuguese -component102=Readme\Portuguese\Install_Guide -component103=Documentation\Portuguese -component104=Readme\Portuguese -component105=Documentation\Portuguese\Doc_Misc - -[SetupTypeItem-AFS Control Center] -Comment= -item0=Control_Center\Control_Center_System32 -item1=Control_Center\Control_Center_Common -item2=Control_Center\Control_Center_WinDir -Descrip=Allows easy administration of the AFS Distributed File System. -DisplayText=AFS Control Center - -[Server\Server_Program] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=SERVER -UNINSTALLABLE=Yes -TARGET=\Server\usr\afs\bin -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Server_Program_Files -requiredby0=Server -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Server\usr\afs\bin - -[Client\Client_System32] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=CLIENT -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Client_System32_Files -requiredby0=Client -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=Windows Operating System\Windows System Folder - -[Control_Center] -required0=Readme -SELECTED=Yes -FILENEED=STANDARD -required1=Control_Center\Control_Center_Program -HTTPLOCATION= -STATUS=CCENTER -required2=Control_Center\Control_Center_Common -UNINSTALLABLE=Yes -TARGET= -required3=Control_Center\Control_Center_WinDir -required4=Control_Center\Control_Center_System32 -member0=Control_Center\Control_Center_Program -FTPLOCATION= -member1=Control_Center\Control_Center_Common -VISIBLE=Yes -DESCRIPTION= -member2=Control_Center\Control_Center_WinDir -member3=Control_Center\Control_Center_System32 -DISPLAYTEXT=AFS Control Center -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Readme\Japanese\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_Japanese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Documentation\English\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_English_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[TopComponents] -component0=Server -component1=Client -component2=Light_Client -component3=Control_Center -component4=Readme -component5=Languages -component6=Documentation - -[SetupTypeItem-AFS Server] -Comment= -item0=Server\Server_System32 -Descrip=Allows this computer to host files that will be shared via the AFS file space. This product automatically includes both the AFS Client and the AFS Server. -DisplayText=AFS Server (includes Client and Control Center) - -[SetupType] -setuptype0=AFS Control Center -setuptype1=AFS Server -setuptype2=AFS Client - -[Documentation\Trad_Chinese] -COMMENT= -COMPRESSIFSEPARATE=No -DEFSELECTION=Yes -DESCRIPTION= -DISK=ANYDISK -DISPLAYTEXT= -ENCRYPT=No -FILENEED=STANDARD -FTPLOCATION= -HTTPLOCATION= -IMAGE= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -member0=Documentation\Trad_Chinese\Cmd_Ref -member1=Documentation\Trad_Chinese\Sys_Admin_Guide -member2=Documentation\Trad_Chinese\Doc_Misc -MISC= -PASSWORD= -required0=Readme\Trad_Chinese -SELECTED=Yes -STATUS= -TARGET= -TARGETDIRCDROM= -TARGETHIDDEN=General Application Destination -UNINSTALLABLE=Yes -VISIBLE=No - -[Documentation\Japanese\Sys_Admin_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\SysAdminGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Sys_Admin_Guide_Japanese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\SysAdminGd - -[Documentation\English\Cmd_Ref] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\CmdRef -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Cmd_Ref_English_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\CmdRef - -[Control_Center\Control_Center_Program] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=CCENTER -UNINSTALLABLE=Yes -TARGET=\Control Center -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Control_Center_Program_Files -requiredby0=Control_Center -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Control Center - -[Light_Client\Win98\Light_Client_Common] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LIGHT -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Light_Client_Common_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Documentation\Japanese] -required0=Readme\Japanese -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -member0=Documentation\Japanese\Cmd_Ref -VISIBLE=No -DESCRIPTION= -member1=Documentation\Japanese\Sys_Admin_Guide -member2=Documentation\Japanese\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Readme\Simp_Chinese] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -member0=Readme\Simp_Chinese\Release_Notes -FTPLOCATION= -member1=Readme\Simp_Chinese\Install_Guide -VISIBLE=No -DESCRIPTION= -member2=Readme\Simp_Chinese\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -requiredby0=Documentation\Simp_Chinese -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Readme\Japanese\Install_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\InstallGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Install_Guide_Japanese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\InstallGd - -[Readme\English\Install_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\InstallGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Install_Guide_English_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\InstallGd - -[Control_Center\Control_Center_Common] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=CCENTER -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Control_Center_Common_Files -requiredby0=Control_Center -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Languages\Lang_Japanese] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LANGUAGE -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Lang_Japanese_files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Client\Client_Program\Client_Headers] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=HEADERS -UNINSTALLABLE=Yes -TARGET=\Client\Program\Include -member0=Client\Client_Program\Client_Headers\Client_Afs_Headers -FTPLOCATION= -member1=Client\Client_Program\Client_Headers\Client_Rx_Headers -VISIBLE=No -DESCRIPTION= -member2=Client\Client_Program\Client_Headers\Client_Main_Headers -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Client\Program\Include - -[Light_Client\Win95\Light95_Client_Common] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LIGHT -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Light95_Client_Common_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Documentation\Korean\Cmd_Ref] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\CmdRef -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Cmd_Ref_Korean_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\CmdRef - -[Readme\Japanese] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -member0=Readme\Japanese\Release_Notes -FTPLOCATION= -member1=Readme\Japanese\Install_Guide -VISIBLE=No -DESCRIPTION= -member2=Readme\Japanese\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -requiredby0=Documentation\Japanese -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Readme\English] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -member0=Readme\English\Release_Notes -FTPLOCATION= -member1=Readme\English\Install_Guide -VISIBLE=No -DESCRIPTION= -member2=Readme\English\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -requiredby0=Documentation\English -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Server\Server_WinDir] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=SERVER -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Server_WinDir_Files -requiredby0=Server -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=Windows Operating System - -[Light_Client] -required0=Readme -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LIGHT -UNINSTALLABLE=Yes -TARGET= -member0=Light_Client\Win95 -FTPLOCATION= -member1=Light_Client\Win98 -VISIBLE=Yes -DESCRIPTION= -DISPLAYTEXT=AFS Light -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Documentation\Trad_Chinese\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_Trad_Chinese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Documentation\Simp_Chinese\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_Simp_Chinese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Client\Client_Program] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=CLIENT -UNINSTALLABLE=Yes -TARGET=\Client\Program -member0=Client\Client_Program\Client_Headers -FTPLOCATION= -member1=Client\Client_Program\Client_Sample -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Client_Program_Files -requiredby0=Client -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Client\Program - -[Client\Client_Common] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=CLIENT -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Client_Common_Files -requiredby0=Client -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Readme\Trad_Chinese\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_Trad_Chinese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Readme\Simp_Chinese\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_Simp_Chinese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Documentation\Korean\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_Korean_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Client\Client_Program\Client_Sample] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Client\Program\Sample -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Client_Sample_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Client\Program\Sample - -[Light_Client\Win95] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -member0=Light_Client\Win95\Light95_Client_Program -FTPLOCATION= -member1=Light_Client\Win95\Light95_Client_Common -VISIBLE=Yes -DESCRIPTION= -member2=Light_Client\Win95\Light95_Client_WinDir -member3=Light_Client\Win95\Light95_Client_System32 -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=ALWAYSOVERWRITE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Light_Client\Win95\Light95_Client_System32] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT=Installing AFS Light... -IMAGE= -DEFSELECTION=Yes -filegroup0=Light95_Client_System32_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=Windows Operating System\Windows System Folder - -[Documentation\Simp_Chinese\Sys_Admin_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\SysAdminGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Sys_Admin_Guide_Simp_Chinese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\SysAdminGd - -[Documentation\Simp_Chinese\Cmd_Ref] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\CmdRef -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Cmd_Ref_Simp_Chinese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\CmdRef - -[Readme\Korean\Release_Notes] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\ReleaseNotes -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Release_Notes_Korean_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation - -[Client] -required0=Readme -SELECTED=Yes -FILENEED=STANDARD -required1=Client\Client_Common -HTTPLOCATION= -STATUS=CLIENT -required2=Client\Client_WinDir -UNINSTALLABLE=Yes -TARGET= -required3=Client\Client_System32 -required4=Client\Client_Program -member0=Client\Client_Program -FTPLOCATION= -member1=Client\Client_Common -VISIBLE=Yes -DESCRIPTION= -member2=Client\Client_WinDir -member3=Client\Client_System32 -DISPLAYTEXT=AFS Client -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Languages\Lang_Simp_Chinese] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LANGUAGE -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Lang_Simp_Chinese_files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Documentation\Trad_Chinese\Cmd_Ref] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\CmdRef -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Cmd_Ref_Trad_Chinese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\CmdRef - -[Readme\Trad_Chinese\Release_Notes] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\ReleaseNotes -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Release_Notes_Trad_Chinese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation - -[Readme\Trad_Chinese] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -member0=Readme\Trad_Chinese\Release_Notes -FTPLOCATION= -member1=Readme\Trad_Chinese\Install_Guide -VISIBLE=No -DESCRIPTION= -member2=Readme\Trad_Chinese\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -requiredby0=Documentation\Trad_Chinese -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Light_Client\Win98] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -member0=Light_Client\Win98\Light_Client_Program -FTPLOCATION= -member1=Light_Client\Win98\Light_Client_Common -VISIBLE=Yes -DESCRIPTION= -member2=Light_Client\Win98\Light_Client_WinDir -member3=Light_Client\Win98\Light_Client_System32 -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=ALWAYSOVERWRITE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Readme\Korean] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -member0=Readme\Korean\Release_Notes -FTPLOCATION= -member1=Readme\Korean\Install_Guide -VISIBLE=No -DESCRIPTION= -member2=Readme\Korean\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -requiredby0=Documentation\Korean -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Languages\Lang_English] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LANGUAGE -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Lang_English_files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Readme\English\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_English_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[SetupTypeItem-AFS Client] -Comment= -Descrip=Allows access to the AFS file space. -DisplayText=AFS Client - -[Readme\Simp_Chinese\Release_Notes] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\ReleaseNotes -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Release_Notes_Simp_Chinese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation - -[Languages] -COMMENT= -COMPRESSIFSEPARATE=No -DEFSELECTION=Yes -DESCRIPTION= -DISK=ANYDISK -DISPLAYTEXT= -ENCRYPT=No -FILENEED=STANDARD -FTPLOCATION= -HTTPLOCATION= -IMAGE= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -member0=Languages\Lang_English -member1=Languages\Lang_Simp_Chinese -member2=Languages\Lang_Trad_Chinese -member3=Languages\Lang_Korean -member4=Languages\Lang_Japanese -member5=Languages\Lang_German -member6=Languages\Lang_Spanish -member7=Languages\Lang_Portuguese -MISC= -PASSWORD= -SELECTED=Yes -STATUS= -TARGET=\Common -TARGETDIRCDROM= -TARGETHIDDEN=General Application Destination\Common -UNINSTALLABLE=Yes -VISIBLE=No - -[Documentation\Japanese\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_Japanese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Client\Client_Program\Client_Headers\Client_Main_Headers] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Client\Program\Include -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Client_Main_Header_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Client\Program\Include - -[Info] -Type=CompDef -Version=1.00.000 -Name= - -[Documentation\Trad_Chinese\Sys_Admin_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\SysAdminGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Sys_Admin_Guide_Trad_Chinese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\SysAdminGd - -[Server\Server_Common] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=SERVER -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Server_Common_Files -requiredby0=Server -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Server\Server_System32] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=SERVER -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Server_System32_Files -requiredby0=Server -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=Windows Operating System\Windows System Folder - -[Languages\Lang_Trad_Chinese] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LANGUAGE -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Lang_Trad_Chinese_files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Documentation\Korean] -required0=Readme\Korean -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -member0=Documentation\Korean\Cmd_Ref -VISIBLE=No -DESCRIPTION= -member1=Documentation\Korean\Sys_Admin_Guide -member2=Documentation\Korean\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Readme\Korean\Install_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\InstallGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Install_Guide_Korean_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\InstallGd - -[Readme] -COMMENT= -COMPRESSIFSEPARATE=No -DEFSELECTION=Yes -DESCRIPTION= -DISK=ANYDISK -DISPLAYTEXT= -ENCRYPT=No -FILENEED=STANDARD -FTPLOCATION= -HTTPLOCATION= -IMAGE= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -member0=Readme\English -member1=Readme\Japanese -member2=Readme\Korean -member3=Readme\Trad_Chinese -member4=Readme\Simp_Chinese -member5=Readme\German -member6=Readme\Spanish -member7=Readme\Portuguese -MISC= -PASSWORD= -requiredby0=Server -requiredby1=Client -requiredby2=Light_Client -requiredby3=Control_Center -requiredby4=Documentation -SELECTED=Yes -STATUS= -TARGET=\Documentation -TARGETDIRCDROM= -TARGETHIDDEN=General Application Destination\Documentation -UNINSTALLABLE=Yes -VISIBLE=No - -[Light_Client\Win98\Light_Client_WinDir] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LIGHT -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Light_Client_WinDir_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Light_Client\Win98\Light_Client_System32] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LIGHT -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Light_Client_System32_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=Windows Operating System\Windows System Folder - -[Documentation\Korean\Sys_Admin_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\SysAdminGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Sys_Admin_Guide_Korean_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\SysAdminGd - -[Documentation\English] -required0=Readme\English -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -member0=Documentation\English\Cmd_Ref -VISIBLE=No -DESCRIPTION= -member1=Documentation\English\Sys_Admin_Guide -member2=Documentation\English\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Readme\Trad_Chinese\Install_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\InstallGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Install_Guide_Trad_Chinese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\InstallGd - -[Control_Center\Control_Center_WinDir] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=CCENTER -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Control_Center_WinDir_Files -requiredby0=Control_Center -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Client\Client_Program\Client_Headers\Client_Rx_Headers] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Client\Program\Include\rx -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Client_Rx_Header_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Client\Program\Include\rx - -[Light_Client\Win95\Light95_Client_Program] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LIGHT -UNINSTALLABLE=Yes -TARGET=\Client\Program -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Light95_Client_Program_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Client\Program - -[Light_Client\Win95\Light95_Client_WinDir] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LIGHT -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Light95_Client_WinDir_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=Windows Operating System - -[Light_Client\Win98\Light_Client_Program] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LIGHT -UNINSTALLABLE=Yes -TARGET=\Client\Program -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Light_Client_Program_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Client\Program - -[Languages\Lang_Korean] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LANGUAGE -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Lang_Korean_files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Documentation] -COMMENT= -COMPRESSIFSEPARATE=No -DEFSELECTION=Yes -DESCRIPTION= -DISK=ANYDISK -DISPLAYTEXT=AFS Supplemental Documentation -ENCRYPT=No -filegroup0=Doc_Files -FILENEED=STANDARD -FTPLOCATION= -HTTPLOCATION= -IMAGE= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -member0=Documentation\English -member1=Documentation\Japanese -member2=Documentation\Korean -member3=Documentation\Trad_Chinese -member4=Documentation\Simp_Chinese -member5=Documentation\German -member6=Documentation\Spanish -member7=Documentation\Portuguese -MISC= -PASSWORD= -required0=Readme -SELECTED=Yes -STATUS=DOCS -TARGET=\Documentation -TARGETDIRCDROM= -TARGETHIDDEN=General Application Destination\Documentation -UNINSTALLABLE=Yes -VISIBLE=Yes - -[Client\Client_Program\Client_Headers\Client_Afs_Headers] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Client\Program\Include\afs -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Client_Afs_Header_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Client\Program\Include\afs - -[Documentation\German\Cmd_Ref] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\CmdRef -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Cmd_Ref_German_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\CmdRef - -[Readme\German\Release_Notes] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\ReleaseNotes -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Release_Notes_German_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation - -[Readme\German\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_German_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Documentation\German\Sys_Admin_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\SysAdminGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Sys_Admin_Guide_German_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\SysAdminGd - -[Documentation\German] -required0=Readme\German -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -member0=Documentation\German\Cmd_Ref -VISIBLE=No -DESCRIPTION= -member1=Documentation\German\Sys_Admin_Guide -member2=Documentation\German\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Readme\German\Install_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\InstallGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Install_Guide_German_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\InstallGd - -[Languages\Lang_German] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LANGUAGE -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Lang_German_files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Readme\German] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -member0=Readme\German\Release_Notes -FTPLOCATION= -member1=Readme\German\Install_Guide -VISIBLE=No -DESCRIPTION= -member2=Readme\German\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -requiredby0=Documentation\German -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Documentation\German\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_German_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Documentation\Spanish\Cmd_Ref] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\CmdRef -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Cmd_Ref_Spanish_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\CmdRef - -[Readme\Spanish\Release_Notes] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\ReleaseNotes -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Release_Notes_Spanish_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation - -[Readme\Spanish\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_Spanish_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Documentation\Spanish\Sys_Admin_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\SysAdminGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Sys_Admin_Guide_Spanish_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\SysAdminGd - -[Documentation\Spanish] -required0=Readme\Spanish -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -member0=Documentation\Spanish\Cmd_Ref -VISIBLE=No -DESCRIPTION= -member1=Documentation\Spanish\Sys_Admin_Guide -member2=Documentation\Spanish\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Readme\Spanish\Install_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\InstallGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Install_Guide_Spanish_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\InstallGd - -[Languages\Lang_Spanish] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LANGUAGE -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Lang_Spanish_files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Readme\Spanish] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -member0=Readme\Spanish\Release_Notes -FTPLOCATION= -member1=Readme\Spanish\Install_Guide -VISIBLE=No -DESCRIPTION= -member2=Readme\Spanish\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -requiredby0=Documentation\Spanish -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Documentation\Spanish\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_Spanish_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Documentation\Portuguese\Cmd_Ref] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\CmdRef -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Cmd_Ref_Portuguese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\CmdRef - -[Readme\Portuguese\Release_Notes] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\ReleaseNotes -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Release_Notes_Portuguese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation - -[Readme\Portuguese\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_Portuguese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - -[Documentation\Portuguese\Sys_Admin_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\SysAdminGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Sys_Admin_Guide_Portuguese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\SysAdminGd - -[Documentation\Portuguese] -required0=Readme\Portuguese -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -FTPLOCATION= -member0=Documentation\Portuguese\Cmd_Ref -VISIBLE=No -DESCRIPTION= -member1=Documentation\Portuguese\Sys_Admin_Guide -member2=Documentation\Portuguese\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Readme\Portuguese\Install_Guide] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html\InstallGd -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Install_Guide_Portuguese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html\InstallGd - -[Languages\Lang_Portuguese] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS=LANGUAGE -UNINSTALLABLE=Yes -TARGET=\Common -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Lang_Portuguese_files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Common - -[Readme\Portuguese] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET= -member0=Readme\Portuguese\Release_Notes -FTPLOCATION= -member1=Readme\Portuguese\Install_Guide -VISIBLE=No -DESCRIPTION= -member2=Readme\Portuguese\Doc_Misc -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -requiredby0=Documentation\Portuguese -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination - -[Documentation\Portuguese\Doc_Misc] -SELECTED=Yes -FILENEED=STANDARD -HTTPLOCATION= -STATUS= -UNINSTALLABLE=Yes -TARGET=\Documentation\Html -FTPLOCATION= -VISIBLE=No -DESCRIPTION= -DISPLAYTEXT= -IMAGE= -DEFSELECTION=Yes -filegroup0=Doc_Misc_Portuguese_Files -COMMENT= -INCLUDEINBUILD=Yes -INSTALLATION=NEWERVERSION\NEWERDATE -COMPRESSIFSEPARATE=No -MISC= -ENCRYPT=No -DISK=ANYDISK -TARGETDIRCDROM= -PASSWORD= -TARGETHIDDEN=General Application Destination\Documentation\Html - diff --git a/src/WINNT/install/InstallShield5/Default.fdf b/src/WINNT/install/InstallShield5/Default.fdf deleted file mode 100644 index 7aec33570e..0000000000 --- a/src/WINNT/install/InstallShield5/Default.fdf +++ /dev/null @@ -1,1102 +0,0 @@ -[Lang_Trad_Chinese_files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Control_Center_WinDir_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Control_Center_Program_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Server_Common_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Server_Program_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[FileGroups] -group0=Light95_Client_Common_Files -group1=Server_Program_Files -group2=Server_Common_Files -group3=Control_Center_Program_Files -group4=Control_Center_WinDir_Files -group5=Lang_Trad_Chinese_files -group6=Sys_Admin_Guide_Trad_Chinese_Files -group7=Sys_Admin_Guide_English_Files -group8=Release_Notes_Trad_Chinese_Files -group9=Client_System32_Files -group10=Light_Client_System32_Files -group11=Client_Main_Header_Files -group12=Install_Guide_Japanese_Files -group13=Light95_Client_WinDir_Files -group14=Light95_Client_Program_Files -group15=Release_Notes_English_Files -group16=Server_WinDir_Files -group17=Client_Program_Files -group18=Release_Notes_Japanese_Files -group19=Lang_English_files -group20=Sys_Admin_Guide_Japanese_Files -group21=Cmd_Ref_Simp_Chinese_Files -group22=Doc_Files -group23=Client_Common_Files -group24=Control_Center_System32_Files -group25=Lang_Japanese_files -group26=Doc_Misc_Trad_Chinese_Files -group27=Client_Sample_Files -group28=Release_Notes_Korean_Files -group29=Install_Guide_Trad_Chinese_Files -group30=Lang_Simp_Chinese_files -group31=Light95_Client_System32_Files -group32=Sys_Admin_Guide_Simp_Chinese_Files -group33=Cmd_Ref_Korean_Files -group34=Release_Notes_Simp_Chinese_Files -group35=Install_Guide_English_Files -group36=Cmd_Ref_Japanese_Files -group37=Doc_Misc_English_Files -group38=Doc_Misc_Japanese_Files -group39=Server_System32_Files -group40=Client_WinDir_Files -group41=Light_Client_Common_Files -group42=Client_Rx_Header_Files -group43=Sys_Admin_Guide_Korean_Files -group44=Install_Guide_Korean_Files -group45=Light_Client_Program_Files -group46=Control_Center_Common_Files -group47=Doc_Misc_Korean_Files -group48=Lang_Korean_files -group49=Cmd_Ref_Trad_Chinese_Files -group50=Doc_Misc_Simp_Chinese_Files -group51=Client_Afs_Header_Files -group52=Install_Guide_Simp_Chinese_Files -group53=Cmd_Ref_English_Files -group54=Light_Client_WinDir_Files -group55=Doc_Misc_German_Files -group56=Cmd_Ref_German_Files -group57=Lang_German_files -group58=Sys_Admin_Guide_German_Files -group59=Release_Notes_German_Files -group60=Install_Guide_German_Files -group61=Doc_Misc_Spanish_Files -group62=Cmd_Ref_Spanish_Files -group63=Lang_Spanish_files -group64=Sys_Admin_Guide_Spanish_Files -group65=Release_Notes_Spanish_Files -group66=Install_Guide_Spanish_Files -group67=Doc_Misc_Portuguese_Files -group68=Cmd_Ref_Portuguese_Files -group69=Lang_Portuguese_files -group70=Sys_Admin_Guide_Portuguese_Files -group71=Release_Notes_Portuguese_Files -group72=Install_Guide_Portuguese_Files - -[Light95_Client_Common_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Sys_Admin_Guide_English_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Sys_Admin_Guide_Trad_Chinese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Light_Client_System32_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Client_System32_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Release_Notes_Trad_Chinese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Install_Guide_Japanese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Client_Main_Header_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Client_Program_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Server_WinDir_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Release_Notes_English_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Light95_Client_Program_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Light95_Client_WinDir_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Lang_English_files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Release_Notes_Japanese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Cmd_Ref_Simp_Chinese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Sys_Admin_Guide_Japanese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Client_Sample_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Doc_Misc_Trad_Chinese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Lang_Japanese_files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Control_Center_System32_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Client_Common_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Doc_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Lang_Simp_Chinese_files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Install_Guide_Trad_Chinese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Release_Notes_Korean_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Cmd_Ref_Korean_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Sys_Admin_Guide_Simp_Chinese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Light95_Client_System32_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Doc_Misc_Japanese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Doc_Misc_English_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Cmd_Ref_Japanese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Install_Guide_English_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Release_Notes_Simp_Chinese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Light_Client_Common_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Client_WinDir_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Server_System32_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Install_Guide_Korean_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Sys_Admin_Guide_Korean_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Client_Rx_Header_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Info] -Type=FileGrp -Version=1.00.000 -Name= - -[Doc_Misc_Korean_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Control_Center_Common_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Light_Client_Program_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Lang_Korean_files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Doc_Misc_Simp_Chinese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Cmd_Ref_Trad_Chinese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Light_Client_WinDir_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM=0000000000000000 -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Cmd_Ref_English_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Install_Guide_Simp_Chinese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Client_Afs_Header_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Install_Guide_German_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Release_Notes_German_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Sys_Admin_Guide_German_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Lang_German_files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Doc_Misc_German_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Cmd_Ref_German_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Install_Guide_Spanish_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Release_Notes_Spanish_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Sys_Admin_Guide_Spanish_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Lang_Spanish_files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Doc_Misc_Spanish_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Cmd_Ref_Spanish_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Install_Guide_Portuguese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Release_Notes_Portuguese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Sys_Admin_Guide_Portuguese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - -[Lang_Portuguese_files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Doc_Misc_Portuguese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=Yes -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=Yes -MISC= - -[Cmd_Ref_Portuguese_Files] -SELFREGISTERING=No -HTTPLOCATION= -LANGUAGE= -OPERATINGSYSTEM= -FTPLOCATION= -FILETYPE=No -INFOTYPE=Standard -COMMENT= -COMPRESS=Yes -COMPRESSDLL= -POTENTIALLY=No -MISC= - diff --git a/src/WINNT/install/InstallShield5/Default.fgl b/src/WINNT/install/InstallShield5/Default.fgl deleted file mode 100644 index e434a5a102..0000000000 --- a/src/WINNT/install/InstallShield5/Default.fgl +++ /dev/null @@ -1,156 +0,0 @@ -[\] -DISPLAYTEXT=Common Files Folder -TYPE=TEXTSUBFIXED -fulldirectory= - -[\Client\Program\Sample] -DISPLAYTEXT= -TYPE=FOLDER -fulldirectory= - -[\] -DISPLAYTEXT=Windows System Folder -TYPE=TEXTSUBFIXED -fulldirectory= - -[USERDEFINED] -DISPLAYTEXT=Script-defined Folders -TYPE=USERSTART -fulldirectory= - -[] -DISPLAYTEXT=Program Files Folder -SubDir0=\ -TYPE=TEXTSUBFIXED -fulldirectory= - -[] -DISPLAYTEXT=General Application Destination -SubDir0=\Client -SubDir1=\Server -TYPE=TEXTSUBFIXED -SubDir2=\Control Center -SubDir3=\Common -fulldirectory= -SubDir4=\Documentation - -[\Documentation\Html\BackupCmdRef] -DISPLAYTEXT= -TYPE=FOLDER -fulldirectory= - -[\Documentation] -DISPLAYTEXT= -SubDir0=\Documentation\Html -TYPE=FOLDER -fulldirectory= - -[\Documentation\Html\InstallGd] -DISPLAYTEXT= -TYPE=FOLDER -fulldirectory= - -[\Client\Program\Include] -DISPLAYTEXT= -SubDir0=\Client\Program\Include\afs -SubDir1=\Client\Program\Include\rx -TYPE=FOLDER -fulldirectory= - -[\Client\Program\Include\afs] -DISPLAYTEXT= -TYPE=FOLDER -fulldirectory= - -[\Client\Program\Include\rx] -DISPLAYTEXT= -TYPE=FOLDER -fulldirectory= - -[\Client\Program] -DISPLAYTEXT= -SubDir0=\Client\Program\Include -SubDir1=\Client\Program\Sample -TYPE=FOLDER -fulldirectory= - -[] -DISPLAYTEXT=Windows Operating System -SubDir0=\ -TYPE=TEXTSUBFIXED -fulldirectory= - -[\Server] -DISPLAYTEXT= -SubDir0=\Server\usr -TYPE=FOLDER -fulldirectory= - -[TopDir] -SubDir0= -SubDir1= -SubDir2= -SubDir3=USERDEFINED - -[\Documentation\Html\CmdRef] -DISPLAYTEXT= -TYPE=FOLDER -fulldirectory= - -[\Server\usr] -DISPLAYTEXT= -SubDir0=\Server\usr\afs -TYPE=FOLDER -fulldirectory= - -[\Client\Help] -DISPLAYTEXT= -TYPE=FOLDER -fulldirectory= - -[\Server\usr\afs\bin] -DISPLAYTEXT= -TYPE=FOLDER -fulldirectory= - -[\Documentation\Html\SysAdminGd] -DISPLAYTEXT= -TYPE=FOLDER -fulldirectory= - -[\Documentation\Html] -DISPLAYTEXT= -SubDir0=\Documentation\Html\InstallGd -SubDir1=\Documentation\Html\BackupCmdRef -TYPE=FOLDER -SubDir2=\Documentation\Html\CmdRef -SubDir3=\Documentation\Html\SysAdminGd -fulldirectory= - -[General] -Type=FILELIST -Version=1.00.000 - -[\Control Center] -DISPLAYTEXT= -TYPE=FOLDER -fulldirectory= - -[\Common] -DISPLAYTEXT= -TYPE=FOLDER -fulldirectory= - -[\Server\usr\afs] -DISPLAYTEXT= -SubDir0=\Server\usr\afs\bin -TYPE=FOLDER -fulldirectory= - -[\Client] -DISPLAYTEXT= -SubDir0=\Client\Program -SubDir1=\Client\Help -TYPE=FOLDER -fulldirectory= - diff --git a/src/WINNT/install/InstallShield5/Default.shell b/src/WINNT/install/InstallShield5/Default.shell deleted file mode 100644 index a3035620b0..0000000000 --- a/src/WINNT/install/InstallShield5/Default.shell +++ /dev/null @@ -1,154 +0,0 @@ -[Shortcut0] -Target=\Client\Program\afscreds.exe -Parameters=/show -ShortcutKey= -SeparateMemorySpace=No -Run=Normal Window -FileGroup=Client_Program_Files -Replace=Yes -IconIndex= -StartIn= -InternetShortcut=No -IconFile=\Client\Program\afscreds.exe -Comments= -DisplayText=Authentication - -[Shortcut1] -Target=\Control Center\TaAfsServerManager.exe -Parameters= -ShortcutKey= -SeparateMemorySpace=No -Run=Normal Window -FileGroup=Control_Center_Program_Files -Replace=Yes -IconIndex= -StartIn= -InternetShortcut=No -IconFile=\Control Center\TaAfsServerManager.exe -Comments= -DisplayText=Server Manager - -[Folder4] -Type=Common -Comments= -DisplayText= - -[Shortcut2] -Target=\Server\usr\afs\bin\afssvrcfg.exe -Parameters=/wizard -ShortcutKey= -SeparateMemorySpace=No -Run=Normal Window -FileGroup=Server_Program_Files -Replace=Yes -IconIndex= -StartIn= -InternetShortcut=No -IconFile=\Server\usr\afs\bin\afssvrcfg.exe -Comments= -DisplayText=Configuration Wizard - -[Folder5] -Type=Common -Comments= -DisplayText=Client - -[Folder6] -Type=Common -Comments= -DisplayText=Server - -[Shortcut3] -Target=\Control Center\TaAfsAccountManager.exe -Parameters= -ShortcutKey= -SeparateMemorySpace=No -Run=Normal Window -FileGroup=Control_Center_Program_Files -Replace=Yes -IconIndex= -StartIn= -InternetShortcut=No -IconFile=\Control Center\TaAfsAccountManager.exe -Comments= -DisplayText=Account Manager - -[Folder7] -Type=Common -Comments= -DisplayText=Control Center - -[Shortcut4] -Target= -Parameters= -ShortcutKey= -SeparateMemorySpace=No -Run=Normal Window -IconIndex= -Replace=Yes -FileGroup=Client_Program_Files -StartIn= -IconFile= -InternetShortcut=No -DisplayText=AFS Client Help -Comments= - -[Folder8] -Type=Common -Comments= -DisplayText=Light - -[Shortcut5] -Target=\Client\Program\afscreds.exe -Parameters=/show -ShortcutKey= -SeparateMemorySpace=No -Run=Normal Window -IconIndex= -Replace=Yes -FileGroup=Light_Client_Program_Files -StartIn= -IconFile=\Client\Program\afscreds.exe -InternetShortcut=No -DisplayText=Authentication -Comments= - -[Shortcut6] -Target= -Parameters= -ShortcutKey= -SeparateMemorySpace=No -Run=Normal Window -IconIndex= -Replace=Yes -FileGroup=Light_Client_Program_Files -StartIn= -IconFile= -InternetShortcut=No -DisplayText=AFS Light Help -Comments= - -[Data] -Shortcut0=Folder5\Authentication -Folder3= -Shortcut1=Folder7\Server Manager -Folder4=Folder2\User Specified - default is Transarc AFS -Shortcut2=Folder6\Config Wizard -Folder5=Folder4\Client -Group0=Main -Folder6=Folder4\Server -Group1=Startup -Shortcut3=Folder7\Account Manager -Folder7=Folder4\Control_Center -Shortcut4=Folder5\AFS Client Help -Folder8=Folder4\Light -Shortcut5=Folder8\Authentication -Shortcut6=Folder8\AFS Light Help -Folder0= -Folder1= -Folder2= - -[Info] -Type=ShellObject -Version=1.00.000 - diff --git a/src/WINNT/install/InstallShield5/Default.shl b/src/WINNT/install/InstallShield5/Default.shl deleted file mode 100644 index 310191c804..0000000000 --- a/src/WINNT/install/InstallShield5/Default.shl +++ /dev/null @@ -1,454 +0,0 @@ -[DEFAULT_INSTALL_DIR] -Comment= - -[NOTHING_SELECTED_MSG] -Comment= - -[DOWNGRADE_LIGHT_CLIENT_MSG] -Comment= - -[SETUP_FINISHED_MSG] -Comment= - -[TITLE_MAIN] -Comment= - -[SEVERE_DIALOG_TITLE] -Comment= - -[UPGRADE_CLIENT_MSG] -Comment= - -[PRODUCT_VERSION_MINOR] -Comment= - -[CONFIGURING_AFS_CLIENT_SERVICE] -Comment= - -[PRODUCT_NAME_CC] -Comment= - -[PRODUCT_NAME_SERVER] -Comment= - -[UPGRADE_CC_MSG] -Comment= - -[DOWNGRADE_SERVER_MSG] -Comment= - -[UNINST_DISPLAY_NAME_LIGHT_CLIENT] -Comment= - -[PRODUCT_NAME_LIGHT_CLIENT] -Comment= - -[ERROR_COMPONENT] -Comment= - -[COMPANY_NAME] -Comment= - -[REINSTALL_CLIENT_MSG] -Comment= - -[DOWNGRADE_CC_MSG] -Comment= - -[UNINST_DISPLAY_NAME_DOCS] -Comment= - -[UNINST_KEY_SERVER] -Comment= - -[VIEW_README_PROMPT_MSG] -Comment= - -[INSTALL_LIGHT_CLIENT_MSG] -Comment= - -[PRODUCT_VERSION_TITLE] -Comment= - -[UNINST_DISPLAY_NAME_CC] -Comment= - -[ERROR_FILEGROUP] -Comment= - -[ERROR_MOVEDATA] -Comment= - -[CONFIGURING_AFS_SERVER_SERVICE] -Comment= - -[CLIENT_DESC] -Comment= - -[SET_NETWORK_PROVIDER_ERROR] -Comment= - -[PRODUCT_VERSION_MAJOR] -Comment= - -[UNINST_DISPLAY_NAME_SERVER] -Comment= - -[SETUPUTILS_NOT_FOUND] -Comment= - -[LIGHT_CLIENT_ALREADY_INSTALLED_MSG] -Comment= - -[SETUP_TYPE_MSG] -Comment= - -[PRODUCT_KEY_SERVER] -Comment= - -[Language] -Lang0=0009 -CurrentLang=0 - -[INSTALL_SERVER_MSG] -Comment= - -[REINSTALL_LIGHT_CLIENT_MSG] -Comment= - -[PRODUCT_NAME_DOCS] -Comment= - -[PRODUCT_KEY_DOCS] -Comment= - -[TITLE_CAPTIONBAR] -Comment= - -[CONFIG_FILE_MAN_EXT_ERROR] -Comment= - -[CONFIGURING_AFS_CREDS_ERROR] -Comment= - -[UPGRADE_SERVER_MSG] -Comment= - -[PRODUCT_VERSION_RELEASE_TYPE] -Comment= - -[AFS_CLIENT_SERVICE_INSTALL_ERROR] -Comment= - -[CLIENT_TITLE] -Comment= - -[PRODUCT_KEY_CC] -Comment= - -[AFS_SERVER_SERVICE_INSTALL_ERROR] -Comment= - -[LIGHT_CLIENT_DESC] -Comment= - -[CLIENT_FILE_MAN_EXT_ENTRY_NAME] -Comment= - -[INSTALL_CC_MSG] -Comment= - -[REINSTALL_CC_MSG] -Comment= - -[PRODUCT_NAME_CLIENT] -Comment= - -[Data] -Entry0=ERROR_VGARESOLUTION -Entry1=TITLE_MAIN -Entry2=TITLE_CAPTIONBAR -Entry3=UNINST_KEY_SERVER -Entry4=UNINST_DISPLAY_NAME_SERVER -Entry5=COMPANY_NAME -Entry6=PRODUCT_NAME_SERVER -Entry7=PRODUCT_VERSION_MAJOR -Entry8=PRODUCT_KEY_SERVER -Entry9=ERROR_MOVEDATA -Entry10=ERROR_UNINSTSETUP -Entry11=ERROR_COMPONENT -Entry12=ERROR_FILEGROUP -Entry13=ERROR_FILE -Entry14=FOLDER_NAME -Entry15=DEFAULT_INSTALL_DIR -Entry16=PRODUCT_NAME_CLIENT -Entry17=PRODUCT_NAME_CC -Entry18=PRODUCT_VERSION_TITLE -Entry19=PRODUCT_VERSION_MINOR -Entry20=PRODUCT_KEY_CLIENT -Entry21=PRODUCT_KEY_CC -Entry22=UNINST_KEY_CLIENT -Entry23=UNINST_KEY_CC -Entry24=UNINST_DISPLAY_NAME_CLIENT -Entry25=UNINST_DISPLAY_NAME_CC -Entry26=PRODUCT_NAME -Entry27=SETUP_TYPE_MSG -Entry28=NOTHING_SELECTED_MSG -Entry29=SEVERE_DIALOG_TITLE -Entry30=VIEW_README_PROMPT_MSG -Entry31=SERVER_NEEDS_CLIENT_MSG -Entry32=AFS_SERVER_SERVICE_INSTALL_ERROR -Entry33=CONFIGURING_AFS_SERVER_SERVICE -Entry34=SETUPUTILS_NOT_FOUND -Entry35=ADD_PATH_ERROR -Entry36=CLIENT_DESC -Entry37=LIGHT_CLIENT_DESC -Entry38=PRODUCT_NAME_LIGHT_CLIENT -Entry39=PRODUCT_VERSION_PATCH_LEVEL -Entry40=PRODUCT_KEY_LIGHT_CLIENT -Entry41=UNINST_KEY_LIGHT_CLIENT -Entry42=UNINST_DISPLAY_NAME_LIGHT_CLIENT -Entry43=CLIENT_TITLE -Entry44=LIGHT_CLIENT_TITLE -Entry45=SET_NETWORK_PROVIDER_ERROR -Entry46=CONFIGURING_AFS_CLIENT_SERVICE -Entry47=AFS_CLIENT_SERVICE_INSTALL_ERROR -Entry48=CONFIG_FILE_MAN_EXT_ERROR -Entry49=CLIENT_FILE_MAN_EXT_ENTRY_NAME -Entry50=CONFIGURING_AFS_CREDS -Entry51=CONFIGURING_AFS_CREDS_ERROR -Entry52=CANT_INSTALL_BOTH_CLIENTS_MSG -Entry53=MUST_BE_AN_ADMIN_MSG -Entry54=PRODUCT_NAME_DOCS -Entry55=PRODUCT_VERSION_RELEASE_TYPE -Entry56=UNINST_DISPLAY_NAME_DOCS -Entry57=UNINST_KEY_DOCS -Entry58=INSTALL_CLIENT_MSG -Entry59=INSTALL_SERVER_MSG -Entry60=INSTALL_CC_MSG -Entry61=INSTALL_LIGHT_CLIENT_MSG -Entry62=UPGRADE_CLIENT_MSG -Entry63=UPGRADE_SERVER_MSG -Entry64=UPGRADE_CC_MSG -Entry65=UPGRADE_LIGHT_CLIENT_MSG -Entry66=REINSTALL_CLIENT_MSG -Entry67=REINSTALL_SERVER_MSG -Entry68=REINSTALL_CC_MSG -Entry69=REINSTALL_LIGHT_CLIENT_MSG -Entry70=DOWNGRADE_CLIENT_MSG -Entry71=DOWNGRADE_SERVER_MSG -Entry72=DOWNGRADE_CC_MSG -Entry73=DOWNGRADE_LIGHT_CLIENT_MSG -Entry74=WSPP_FOLDER_NAME -Entry75=DOWNGRADE_DOCS_MSG -Entry76=INSTALL_DOCS_MSG -Entry77=REINSTALL_DOCS_MSG -Entry78=UPGRADE_DOCS_MSG -Entry79=PRODUCT_KEY_DOCS -Entry80=SETUP_FINISHED_MSG -Entry81=LIGHT_CLIENT_ALREADY_INSTALLED_MSG -Entry82=REINSTALL_PREP_MSG -Entry83=UPGRADE_PREP_MSG -Entry84=DOWNGRADE_PREP_MSG -Entry85=NON_UPGRADABLE_SOFTWARE_INSTALLED_ERROR_MSG -Entry86=APPS_NOT_SAME_VERSION -Entry87=PRODUCT_VERSION_BETA_LEVEL -Entry88=STATUS_INSTALLING_CLIENT -Entry89=STATUS_INSTALLING_SERVER -Entry90=STATUS_INSTALLING_CCENTER -Entry91=STATUS_INSTALLING_LIGHT -Entry92=STATUS_INSTALLING_HEADERS -Entry93=STATUS_INSTALLING_DOCS -Entry94=STATUS_INSTALLING_LANGUAGE -Entry95=DOCUMENTATION_ITEM_NAME -Entry96=CFG_WIZARD_ITEM_NAME -Entry97=CREDS_TOOL_ITEM_NAME -Entry98=CLIENT_HELP_ITEM_NAME -Entry99=LIGHT_CLIENT_HELP_ITEM_NAME -Entry100=SERVER_MANAGER_ITEM_NAME -Entry101=ACCT_MANAGER_ITEM_NAME -Entry102=SERVER_GROUP_NAME -Entry103=CLIENT_GROUP_NAME -Entry104=CCENTER_GROUP_NAME -Entry105=LIGHT_GROUP_NAME -Entry106=CELLNAME_DEFAULT -Entry107=WELCOME_MESSAGE -Entry108=CELLSERVDB_WEB -Entry109=CELLSERVDB_INSTALL -Entry110=CELLSERVDB_CONFIGNAME - -[CONFIGURING_AFS_CREDS] -Comment= - -[DOWNGRADE_DOCS_MSG] -Comment= - -[INSTALL_DOCS_MSG] -Comment= - -[PRODUCT_KEY_LIGHT_CLIENT] -Comment= - -[FOLDER_NAME] -Comment= - -[ERROR_FILE] -Comment= - -[ERROR_VGARESOLUTION] -Comment= - -[REINSTALL_SERVER_MSG] -Comment= - -[DOWNGRADE_CLIENT_MSG] -Comment= - -[PRODUCT_VERSION_BETA_LEVEL] -Comment= - -[UNINST_KEY_CC] -Comment= - -[UNINST_KEY_CLIENT] -Comment= - -[UPGRADE_DOCS_MSG] -Comment= - -[DOWNGRADE_PREP_MSG] -Comment= - -[PRODUCT_VERSION_PATCH_LEVEL] -Comment= - -[NON_UPGRADABLE_SOFTWARE_INSTALLED_ERROR_MSG] -Comment= - -[UNINST_KEY_LIGHT_CLIENT] -Comment= - -[CANT_INSTALL_BOTH_CLIENTS_MSG] -Comment= - -[UPGRADE_LIGHT_CLIENT_MSG] -Comment= - -[UNINST_KEY_DOCS] -Comment= - -[UNINST_DISPLAY_NAME_CLIENT] -Comment= - -[General] -Type=STRINGTABLE -Version=1.00.000 - -[REINSTALL_DOCS_MSG] -Comment= - -[UPGRADE_PREP_MSG] -Comment= - -[MUST_BE_AN_ADMIN_MSG] -Comment= - -[LIGHT_CLIENT_TITLE] -Comment= - -[PRODUCT_NAME] -Comment= - -[PRODUCT_KEY_CLIENT] -Comment= - -[ERROR_UNINSTSETUP] -Comment= - -[ADD_PATH_ERROR] -Comment= - -[SERVER_NEEDS_CLIENT_MSG] -Comment= - -[INSTALL_CLIENT_MSG] -Comment= - -[WSPP_FOLDER_NAME] -Comment= - -[REINSTALL_PREP_MSG] -Comment= - -[APPS_NOT_SAME_VERSION] -Comment= - -[STATUS_INSTALLING_CLIENT] -Comment= - -[STATUS_INSTALLING_SERVER] -Comment= - -[STATUS_INSTALLING_CCENTER] -Comment= - -[STATUS_INSTALLING_LIGHT] -Comment= - -[STATUS_INSTALLING_HEADERS] -Comment= - -[STATUS_INSTALLING_DOCS] -Comment= - -[STATUS_INSTALLING_LANGUAGE] -Comment= - -[DOCUMENTATION_ITEM_NAME] -Comment= - -[CFG_WIZARD_ITEM_NAME] -Comment= - -[CREDS_TOOL_ITEM_NAME] -Comment= - -[CLIENT_HELP_ITEM_NAME] -Comment= - -[LIGHT_CLIENT_HELP_ITEM_NAME] -Comment= - -[SERVER_MANAGER_ITEM_NAME] -Comment= - -[ACCT_MANAGER_ITEM_NAME] -Comment= - -[SERVER_GROUP_NAME] -Comment= - -[CLIENT_GROUP_NAME] -Comment= - -[CCENTER_GROUP_NAME] -Comment= - -[LIGHT_GROUP_NAME] -Comment= - -[CELLNAME_DEFAULT] -Comment=Default Cell name - -[WELCOME_MESSAGE] -Comment=Display in Welcome Box - -[CELLSERVDB_WEB] -Comment=Web address to load cellservdb - -[CELLSERVDB_INSTALL] -Comment=Source file for installable Cellservdb - -[CELLSERVDB_CONFIGNAME] -Comment=Cellservdb file name - diff --git a/src/WINNT/install/InstallShield5/Default.txt b/src/WINNT/install/InstallShield5/Default.txt deleted file mode 100644 index 0ae6a45936..0000000000 --- a/src/WINNT/install/InstallShield5/Default.txt +++ /dev/null @@ -1,269 +0,0 @@ -[Client:HKCR:CLSID\{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}\InprocServer32] -(Default)=S,\Client\Program\afs_shl_ext.dll ----Comment---= -ThreadingModel=S,Apartment - -[Client:HKCR:*\shellex\ContextMenuHandlers\AFS Client Shell Extension] -(Default)=S,{DC515C27-6CAC-11D1-BAE7-00C04FD140D2} ----Comment---= - -[WinNT_Client_NoUninstall:HKLM:SOFTWARE\Microsoft\Windows NT\CurrentVersion\File Manager\AddOns] -(Default)=S, ----Comment---= -AFS Client FME=S,\Client\Program\afs_fme.dll - -[Server] ----Comment---= ----FileGroup---= -HKLM0=Software\TransarcCorporation\AFS Server\CurrentVersion -HKLM1=System\CurrentControlSet\Services\EventLog\Application\AFS Service -HKLM2=Software\TransarcCorporation\AFS Server -HKLM3=Software\TransarcCorporation\AFS Server\%1.%2 %3.%4 - -[Server:HKLM:System\CurrentControlSet\Services\EventLog\Application\AFS Service] ----Comment---= -(Default)=S, -EventMessageFile=S, -TypesSupported=N,7 - -[Control_Center] ----Comment---= ----FileGroup---= -HKLM0=Software\TransarcCorporation\AFS Control Center\CurrentVersion -HKLM1=Software\TransarcCorporation\AFS Control Center -HKLM2=Software\TransarcCorporation\AFS Control Center\%1.%2 %3.%4 - -[Light_Client:HKLM:SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters] -(Default)=S, ----Comment---= -Gateway=S, - -[Client:HKLM:SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon] ----Comment---= -(Default)=S, - -[Client_NoUninstall] ----Comment---= ----FileGroup---= -HKLM0=SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved - -[Control_Center:HKLM:Software\TransarcCorporation\AFS Control Center] -(Default)=S, ----Comment---= - -[Client_NoUninstall:HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved] ----Comment---= -(Default)=S, -{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}=S,AFS Client Shell Extension - -[Server:HKLM:Software\TransarcCorporation\AFS Server\%1.%2 %3.%4] -Revision=N,0 -PatchLevel=N,%3%4 -(Default)=S, ----Comment---= -MajorVersion=N,%1 -InstallDateString=S, -PathName=S,\Server -BetaLevel=N,1 -Software Type=S,File System -MinorVersion=N,%2 -ReleaseType=S, -VersionString=S,%5 -Description=S,AFS Server for Windows NT - -[Light_Client] ----Comment---= ----FileGroup---= -HKLM0=SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters - -[Control_Center:HKLM:Software\TransarcCorporation\AFS Control Center\CurrentVersion] -Revision=N,0 -PatchLevel=N,%3%4 -(Default)=S, ----Comment---= -MajorVersion=N,%1 -InstallDateString=S, -PathName=S,\Control Center -BetaLevel=N,1 -Software Type=S,File System -MinorVersion=N,%2 -ReleaseType=S, -VersionString=S,%5 -Description=S,AFS Control Center for Windows NT - -[Docs:HKLM:Software\TransarcCorporation\AFS Supplemental Documentation\%1.%2 %3.%4] -Revision=N,0 -PatchLevel=N,%3%4 -(Default)=S, ----Comment---= -MajorVersion=N,%1 -InstallDateString=S, -PathName=S,\Documentation -BetaLevel=N,1 -Software Type=S,File System -MinorVersion=N,%2 -ReleaseType=S, -VersionString=S,%5 -Description=S,AFS System Administration Documentation - -[Full_Client:HKLM:SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters] -(Default)=S, ----Comment---= -IsGateway=N,0 - -[Docs] ----Comment---= ----FileGroup---= -HKLM0=Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion -HKLM1=Software\TransarcCorporation\AFS Supplemental Documentation -HKLM2=Software\TransarcCorporation\AFS Supplemental Documentation\%1.%2 %3.%4 - -[Server:HKLM:Software\TransarcCorporation\AFS Server] -(Default)=S, ----Comment---= - -[Client] ----Comment---= ----FileGroup---= -HKLM0=Software\TransarcCorporation\AFS Client\CurrentVersion -HKLM1=Software\TransarcCorporation\AFS Client -HKLM2=Software\TransarcCorporation\AFS Client\%1.%2 %3.%4 -HKCR0=CLSID\{DC515C27-6CAC-11D1-BAE7-00C04FD140D2} -HKLM3=SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon -HKCR1=CLSID\{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}\InprocServer32 -HKLM4=SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters -HKCR2=*\shellex\ContextMenuHandlers\AFS Client Shell Extension -HKLM5=SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider -HKCR3=FOLDER\shellex\ContextMenuHandlers\AFS Client Shell Extension - -[Data] -Set0=Server -Set1=Client -Set2=Control_Center -Set3=Client_NoUninstall -Set4=WinNT_Client_NoUninstall -Set5=Light_Client -Set6=Full_Client -Set7=Docs - -[Docs:HKLM:Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion] -Revision=N,0 -PatchLevel=N,%3%4 -(Default)=S, ----Comment---= -MajorVersion=N,%1 -InstallDateString=S, -PathName=S,\Documentation -BetaLevel=N,1 -Software Type=S,File System -MinorVersion=N,%2 -ReleaseType=S, -VersionString=S,%5 -Description=S,AFS System Administration Documentation - -[Full_Client] ----Comment---= ----FileGroup---= -HKLM0=SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters - -[Client:HKLM:Software\TransarcCorporation\AFS Client\CurrentVersion] -Revision=N,0 -PatchLevel=N,%3%4 -(Default)=S, ----Comment---= -Title=S, -MajorVersion=N,%1 -InstallDateString=S, -PathName=S,\Client -BetaLevel=N,1 -Software Type=S,File System -MinorVersion=N,%2 -ReleaseType=S, -VersionString=S,%5 -Description=S, - -[Client:HKLM:Software\TransarcCorporation\AFS Client] -(Default)=S, ----Comment---= - -[WinNT_Client_NoUninstall:HKLM:SOFTWARE\Microsoft\Windows NT\Current Version\File Manager\AddOns] ----Comment---= -(Default)=S, -AFS Client FME=S,\Client\Program\afs_fme.dll - -[Client:HKLM:SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider] ----Comment---= -(Default)=S, -Class=N,2 -LogonOptions=N,0 -Name=S,TransarcAFSDaemon -LogonScript=S,\Client\Program\afscreds.exe -:%s -x -ProviderPath=S, -AuthentProviderPath=S, - -[WinNT_Client_NoUninstall] ----Comment---= ----FileGroup---= -HKLM0=SOFTWARE\Microsoft\Windows NT\CurrentVersion\File Manager\AddOns - -[Client:HKCR:FOLDER\shellex\ContextMenuHandlers\AFS Client Shell Extension] -(Default)=S,{DC515C27-6CAC-11D1-BAE7-00C04FD140D2} ----Comment---= - -[General] -Type=REGISTRYDATA -Version=1.00.000 - -[Client:HKLM:Software\TransarcCorporation\AFS Client\%1.%2 %3.%4] -Revision=N,0 -PatchLevel=N,%3%4 -(Default)=S, ----Comment---= -Title=S, -MajorVersion=N,%1 -InstallDateString=S, -PathName=S,\Client -BetaLevel=N,1 -Software Type=S,File System -MinorVersion=N,%2 -ReleaseType=S, -VersionString=S,%5 -Description=S, - -[Server:HKLM:Software\TransarcCorporation\AFS Server\CurrentVersion] -Revision=N,0 -PatchLevel=N,%3%4 -(Default)=S, ----Comment---= -MajorVersion=N,%1 -InstallDateString=S, -PathName=S,\Server -BetaLevel=N,1 -Software Type=S,File System -MinorVersion=N,%2 -ReleaseType=S, -VersionString=S,%5 -Description=S,AFS Server for Windows NT - -[Control_Center:HKLM:Software\TransarcCorporation\AFS Control Center\%1.%2 %3.%4] -Revision=N,0 -PatchLevel=N,%3%4 -(Default)=S, ----Comment---= -MajorVersion=N,%1 -InstallDateString=S, -PathName=S,\Control Center -BetaLevel=N,1 -Software Type=S,File System -MinorVersion=N,%2 -ReleaseType=S, -VersionString=S,%5 -Description=S,AFS Control Center for Windows NT - -[Docs:HKLM:Software\TransarcCorporation\AFS Supplemental Documentation] -(Default)=S, ----Comment---= - -[Client:HKCR:CLSID\{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}] -(Default)=S,AFS Client Shell Extension ----Comment---= diff --git a/src/WINNT/install/InstallShield5/DelISDirTree.bat b/src/WINNT/install/InstallShield5/DelISDirTree.bat deleted file mode 100644 index e282466007..0000000000 --- a/src/WINNT/install/InstallShield5/DelISDirTree.bat +++ /dev/null @@ -1,162 +0,0 @@ -@echo off -rem Copyright 2000, International Business Machines Corporation and others. -rem All Rights Reserved. -rem -rem This software has been released under the terms of the IBM Public -rem License. For details, see the LICENSE file in the top-level source -rem directory or online at http://www.openafs.org/dl/license10.html - -rem This file deletes the IS5 dir tree. First it will delete all the files we -rem know about. Then it will delete the IS5 dirs. For dirs that contain -rem output files that we don't care about, we deltree them. For all other dirs -rem we use rmdir, and if IS5 added some file to one of those dirs, it will fail -rem to delete. We can then look at the dir and see if the file needs to be added -rem to CML. - -rem First delete all the files we know about. - -del "Component Definitions\Default.cdf" -del "Component Definitions\Default.fgl" -del "File Groups\Default.fdf" -del "File Groups\GenFileGroups.bat" -del "File Groups\Server_Program_Files.fgl" -del "File Groups\Server_Common_Files.fgl" -del "File Groups\Server_WinDir_Files.fgl" -del "File Groups\Server_System32_Files.fgl" -del "File Groups\Client_Program_Files.fgl" -del "File Groups\Client_Common_Files.fgl" -del "File Groups\Client_WinDir_Files.fgl" -del "File Groups\Client_System32_Files.fgl" -del "File Groups\Client_Afs_Header_Files.fgl" -del "File Groups\Client_Rx_Header_Files.fgl" -del "File Groups\Client_Main_Header_Files.fgl" -del "File Groups\Client_Sample_Files.fgl" -del "File Groups\Light_Client_Program_Files.fgl" -del "File Groups\Light_Client_Common_Files.fgl" -del "File Groups\Light_Client_WinDir_Files.fgl" -del "File Groups\Light_Client_System32_Files.fgl" -del "File Groups\Light95_Client_Program_Files.fgl" -del "File Groups\Light95_Client_Common_Files.fgl" -del "File Groups\Light95_Client_WinDir_Files.fgl" -del "File Groups\Light95_Client_System32_Files.fgl" -del "File Groups\Control_Center_Program_Files.fgl" -del "File Groups\Control_Center_Common_Files.fgl" -del "File Groups\Control_Center_WinDir_Files.fgl" -del "File Groups\Control_Center_System32_Files.fgl" -del "File Groups\Cmd_Ref_English_Files.fgl" -del "File Groups\Install_Guide_English_Files.fgl" -del "File Groups\Release_Notes_English_Files.fgl" -del "File Groups\Sys_Admin_Guide_English_Files.fgl" -del "File Groups\Cmd_Ref_Japanese_Files.fgl" -del "File Groups\Install_Guide_Japanese_Files.fgl" -del "File Groups\Release_Notes_Japanese_Files.fgl" -del "File Groups\Sys_Admin_Guide_Japanese_Files.fgl" -del "File Groups\Cmd_Ref_Korean_Files.fgl" -del "File Groups\Install_Guide_Korean_Files.fgl" -del "File Groups\Release_Notes_Korean_Files.fgl" -del "File Groups\Sys_Admin_Guide_Korean_Files.fgl" -del "File Groups\Cmd_Ref_Trad_Chinese_Files.fgl" -del "File Groups\Install_Guide_Trad_Chinese_Files.fgl" -del "File Groups\Release_Notes_Trad_Chinese_Files.fgl" -del "File Groups\Sys_Admin_Guide_Trad_Chinese_Files.fgl" -del "File Groups\Cmd_Ref_Simp_Chinese_Files.fgl" -del "File Groups\Install_Guide_Simp_Chinese_Files.fgl" -del "File Groups\Release_Notes_Simp_Chinese_Files.fgl" -del "File Groups\Sys_Admin_Guide_Simp_Chinese_Files.fgl" -del "File Groups\Doc_Misc_English_Files.fgl" -del "File Groups\Doc_Misc_Japanese_Files.fgl" -del "File Groups\Doc_Misc_Korean_Files.fgl" -del "File Groups\Doc_Misc_Trad_Chinese_Files.fgl" -del "File Groups\Doc_Misc_Simp_Chinese_Files.fgl" -del "File Groups\Doc_Files.fgl" -del "File Groups\Lang_English_Files.fgl" -del "File Groups\Lang_Simp_Chinese_Files.fgl" -del "File Groups\Lang_Trad_Chinese_Files.fgl" -del "File Groups\Lang_Korean_Files.fgl" -del "File Groups\Lang_Japanese_Files.fgl" -del "Media\Transarc AFS\GenDefault.mda.bat" -del "Registry Entries\Default.rge" -del "Script Files\setup.rul" -del "Setup Files\Uncompressed Files\Language Independent\OS Independent\setup.bmp" -del "Setup Files\Compressed Files\Language Independent\OS Independent\InstallUtils.dll" -del "Setup Files\Compressed Files\Language Independent\OS Independent\afs_setup_utils_*.dll" -del "Shell Objects\Default.shl" -del "String Tables\Default.shl" -del "String Tables\0009-English\value.shl" -del "String Tables\0011-Japanese\value.shl" -del "String Tables\0012-Korean\value.shl" -del "String Tables\0404-Chinese (Taiwan)\value.shl" -del "String Tables\0804-Chinese (PRC)\value.shl" -del "String Tables\0007-German\value.shl" -del "String Tables\0416-Portuguese (Brazilian)\value.shl" -del "String Tables\000a-Spanish\value.shl" -del "Text Substitutions\Build.tsb" -del "Text Substitutions\Setup.tsb" -del "File Groups\Cmd_Ref_German_Files.fgl" -del "File Groups\Install_Guide_German_Files.fgl" -del "File Groups\Release_Notes_German_Files.fgl" -del "File Groups\Sys_Admin_Guide_German_Files.fgl" -del "File Groups\Doc_Misc_German_Files.fgl" -del "File Groups\Lang_German_Files.fgl" -del "File Groups\Cmd_Ref_Spanish_Files.fgl" -del "File Groups\Install_Guide_Spanish_Files.fgl" -del "File Groups\Release_Notes_Spanish_Files.fgl" -del "File Groups\Sys_Admin_Guide_Spanish_Files.fgl" -del "File Groups\Doc_Misc_Spanish_Files.fgl" -del "File Groups\Lang_Spanish_Files.fgl" -del "File Groups\Cmd_Ref_Portuguese_Files.fgl" -del "File Groups\Install_Guide_Portuguese_Files.fgl" -del "File Groups\Release_Notes_Portuguese_Files.fgl" -del "File Groups\Sys_Admin_Guide_Portuguese_Files.fgl" -del "File Groups\Doc_Misc_Portuguese_Files.fgl" -del "File Groups\Lang_Portuguese_Files.fgl" -del InstallShield5.ipr - - -rem Now delete the directories. - -rmdir /s /q "Setup Files\Compressed Files\0009-English" -rmdir /s /q "Setup Files\Compressed Files\0011-Japanese" -rmdir /s /q "Setup Files\Compressed Files\0012-Korean" -rmdir /s /q "Setup Files\Compressed Files\0404-Chinese (Taiwan)" -rmdir /s /q "Setup Files\Compressed Files\0804-Chinese (PRC)" -rmdir /s /q "Setup Files\Compressed Files\0007-German" -rmdir /s /q "Setup Files\Compressed Files\0416-Portuguese (Brazilian)" -rmdir /s /q "Setup Files\Compressed Files\000a-Spanish" - -rmdir /s /q "Setup Files\Uncompressed Files\0009-English" -rmdir /s /q "Setup Files\Uncompressed Files\0011-Japanese" -rmdir /s /q "Setup Files\Uncompressed Files\0012-Korean" -rmdir /s /q "Setup Files\Uncompressed Files\0404-Chinese (Taiwan)" -rmdir /s /q "Setup Files\Uncompressed Files\0804-Chinese (PRC)" -rmdir /s /q "Setup Files\Uncompressed Files\0007-German" -rmdir /s /q "Setup Files\Uncompressed Files\0416-Portuguese (Brazilian)" -rmdir /s /q "Setup Files\Uncompressed Files\000a-Spanish" - -rmdir "Component Definitions" -rmdir "File Groups" -rmdir /s /q "Media\Transarc AFS" -rmdir Media -rmdir "Registry Entries" -rmdir /s /q "Script Files" -rmdir "Setup Files\Uncompressed Files\Language Independent\OS Independent" -rmdir "Setup Files\Uncompressed Files\Language Independent" -rmdir "Setup Files\Uncompressed Files" -rmdir "Setup Files\Compressed Files\Language Independent\OS Independent" -rmdir "Setup Files\Compressed Files\Language Independent" -rmdir "Setup Files\Compressed Files" -rmdir "Setup Files" -rmdir "Shell Objects" -rmdir "String Tables\0009-English" -rmdir "String Tables\0011-Japanese" -rmdir "String Tables\0012-Korean" -rmdir "String Tables\0404-Chinese (Taiwan)" -rmdir "String Tables\0804-Chinese (PRC)" -rmdir "String Tables\0007-German" -rmdir "String Tables\0416-Portuguese (Brazilian)" -rmdir "String Tables\000a-Spanish" -rmdir "String Tables" -rmdir "Text Substitutions" - - - diff --git a/src/WINNT/install/InstallShield5/GatherFiles.bat b/src/WINNT/install/InstallShield5/GatherFiles.bat deleted file mode 100644 index 1c3bd5634b..0000000000 --- a/src/WINNT/install/InstallShield5/GatherFiles.bat +++ /dev/null @@ -1,44 +0,0 @@ -@echo off -rem Copyright 2000, International Business Machines Corporation and others. -rem All Rights Reserved. -rem -rem This software has been released under the terms of the IBM Public -rem License. For details, see the LICENSE file in the top-level source -rem directory or online at http://www.openafs.org/dl/license10.html - -rem This file copies the IS5 files from the IS5 dirs to the CMl dir. - - -copy "Component Definitions\Default.cdf" . -copy "Component Definitions\Default.fgl" . - -copy "File Groups\Default.fdf" . -copy "File Groups\GenFileGroups.bat" . - -copy "Media\OpenAFS\GenDefault.mda.bat" . - -copy "Registry Entries\Default.rge" . - -copy "Script Files\setup.rul" . - -copy "Setup Files\Uncompressed Files\Language Independent\OS Independent\setup.bmp" . - - -copy "Setup Files\Uncompressed Files\Language Independent\OS Independent\_isuser.dll" . - -copy "Shell Objects\Default.shl" .\Default.shell - -copy "String Tables\Default.shl" . - -copy "String Tables\0009-English\value.shl" lang\en_US -copy "String Tables\0011-Japanese\value.shl" lang\ja_JP -copy "String Tables\0012-Korean\value.shl" lang\ko_KR -copy "String Tables\0404-Chinese (Taiwan)\value.shl" lang\zh_TW -copy "String Tables\0804-Chinese (PRC)\value.shl" lang\zh_CN -copy "String Tables\0007-German\value.shl" lang\de_DE -copy "String Tables\0416-Portuguese (Brazilian)\value.shl" lang\pt_BR -copy "String Tables\000a-Spanish\value.shl" lang\es_ES - -copy "Text Substitutions\Build.tsb" . -copy "Text Substitutions\Setup.tsb" . - diff --git a/src/WINNT/install/InstallShield5/GenDefault.mda.bat b/src/WINNT/install/InstallShield5/GenDefault.mda.bat deleted file mode 100644 index 9f4db547b3..0000000000 --- a/src/WINNT/install/InstallShield5/GenDefault.mda.bat +++ /dev/null @@ -1,66 +0,0 @@ -@echo off -rem Copyright 2000, International Business Machines Corporation and others. -rem All Rights Reserved. -rem -rem This software has been released under the terms of the IBM Public -rem License. For details, see the LICENSE file in the top-level source -rem directory or online at http://www.openafs.org/dl/license10.html - -rem -------------- default.mda -------------------------------------------- - -echo [Platforms] > default.mda -echo key0=0000000000010000 >> default.mda -echo count=1 >> default.mda -echo. >> default.mda -echo [Filter] >> default.mda -echo LANGUAGEDEFAULT=0009 >> default.mda -echo. >> default.mda -echo [GeneralInfo] >> default.mda -echo MEDIATYPE=CDROM >> default.mda -echo DATAASFILES=No >> default.mda -echo BUILDTYPE=Full >> default.mda -echo BuildLocation=Media\OpenAFS >> default.mda -echo BREAKBYTOPCOMPONENT=No >> default.mda -echo REFRESH_DATAFILES=Yes >> default.mda -echo REFRESH_SPLASH=Yes >> default.mda -echo BUILDSIZE= >> default.mda -echo Name=OpenAFS for Windows >> default.mda -echo REVIEWREPORT=No >> default.mda -echo REFRESH_IFILES=Yes >> default.mda -echo PASSWORD= >> default.mda -echo. >> default.mda -echo [SetupInfo] >> default.mda -echo ENABLELANGDLG=Yes >> default.mda -echo ALTERNATEISDELETENAME= >> default.mda -echo APPLICATIONNAME=OpenAFS for Windows >> default.mda -echo HIDESTATUSBAR=No >> default.mda -echo WIN32SENABLE=No >> default.mda -echo. >> default.mda -echo [InstallDateInfo] >> default.mda -echo TYPE=BUILDTIME >> default.mda -echo TIME= >> default.mda -echo DATE= >> default.mda -echo. >> default.mda -echo [FileInstallDateInfo] >> default.mda -echo TYPE=ORIGINAL >> default.mda -echo TIME= >> default.mda -echo DATE= >> default.mda -echo. >> default.mda -echo [Languages] >> default.mda -echo key0=0009 >> default.mda -echo key1=0416 >> default.mda -echo key2=0804 >> default.mda -echo key3=0404 >> default.mda -echo key4=0007 >> default.mda -echo key5=0011 >> default.mda -echo key6=0012 >> default.mda -echo key7=000a >> default.mda -echo count=8 >> default.mda -echo. >> default.mda -echo [TagFileInfo] >> default.mda -echo PRODUCTCATEGORY=System Tool >> default.mda -echo APPLICATIONNAME=OpenAFS for Windows >> default.mda -echo COMPANYNAME=OpenAFS >> default.mda -echo VERSION=1.00.000 >> default.mda -echo INFO=http://www.openafs.org >> default.mda - diff --git a/src/WINNT/install/InstallShield5/GenFileGroups.bat b/src/WINNT/install/InstallShield5/GenFileGroups.bat deleted file mode 100644 index 59d6a648ed..0000000000 --- a/src/WINNT/install/InstallShield5/GenFileGroups.bat +++ /dev/null @@ -1,1418 +0,0 @@ -@echo off -rem Copyright 2000, International Business Machines Corporation and others. -rem All Rights Reserved. -rem -rem This software has been released under the terms of the IBM Public -rem License. For details, see the LICENSE file in the top-level source -rem directory or online at http://www.openafs.org/dl/license10.html - -set IS5_DEST=%AFSROOT%\DEST -set IS5_WINNT=%AFSROOT%\src\WINNT -set IS5_HELP=%AFSROOT%\src\WINNT\doc\help -set IS5_INCL=%AFSROOT%\DEST\include -set IS5_DOCROOT=%AFSROOT%\src\WINNT\doc - -rem -------------- Client_Program_Files.fgl ---------------------------- - -echo [TopDir] > Client_Program_Files.fgl -echo file0=%IS5_DEST%\root.client\usr\vice\etc\afsshare.exe >> Client_Program_Files.fgl -echo file1=%IS5_DEST%\include\afs\cm_config.h >> Client_Program_Files.fgl -echo file2=%IS5_DEST%\root.client\usr\vice\etc\libosi.dll >> Client_Program_Files.fgl -echo file3=%IS5_DEST%\include\afs\kautils.h >> Client_Program_Files.fgl -echo file4=%IS5_DEST%\root.client\usr\vice\etc\libafsconf.dll >> Client_Program_Files.fgl -echo file5=%IS5_DEST%\root.client\usr\vice\etc\klog.exe >> Client_Program_Files.fgl -echo file6=%IS5_DEST%\root.client\usr\vice\etc\tokens.exe >> Client_Program_Files.fgl -echo file7=%IS5_DEST%\root.client\usr\vice\etc\unlog.exe >> Client_Program_Files.fgl -echo file8=%IS5_DEST%\root.client\usr\vice\etc\fs.exe >> Client_Program_Files.fgl -echo file9=%IS5_DEST%\lib\libafsconf.lib >> Client_Program_Files.fgl -echo file10=%IS5_DEST%\lib\afsauthent.lib >> Client_Program_Files.fgl -echo file11=%IS5_DEST%\root.client\usr\vice\etc\afscreds.exe >> Client_Program_Files.fgl -echo file12=%IS5_DEST%\root.client\usr\vice\etc\afs_shl_ext.dll >> Client_Program_Files.fgl -echo file13=%IS5_DEST%\include\afs\auth.h >> Client_Program_Files.fgl -echo file14=%IS5_DEST%\root.client\usr\vice\etc\afsd_service.exe >> Client_Program_Files.fgl -echo file15=%IS5_DEST%\root.client\usr\vice\etc\afslogon.dll >> Client_Program_Files.fgl -echo file16=%IS5_DEST%\root.client\usr\vice\etc\symlink.exe >> Client_Program_Files.fgl -echo file17=%IS5_DEST%\bin\kpasswd.exe >> Client_Program_Files.fgl -echo file18=%IS5_DEST%\root.server\usr\afs\bin\pts.exe >> Client_Program_Files.fgl -echo file19=%IS5_DEST%\root.server\usr\afs\bin\bos.exe >> Client_Program_Files.fgl -echo file20=%IS5_DEST%\root.server\usr\afs\bin\kas.exe >> Client_Program_Files.fgl -echo file21=%IS5_DEST%\root.server\usr\afs\bin\vos.exe >> Client_Program_Files.fgl -echo file22=%IS5_DEST%\root.server\usr\afs\bin\udebug.exe >> Client_Program_Files.fgl -echo file23=%IS5_DEST%\bin\translate_et.exe >> Client_Program_Files.fgl -echo file24=%IS5_DEST%\etc\rxdebug.exe >> Client_Program_Files.fgl -echo file25=%IS5_DEST%\etc\backup.exe >> Client_Program_Files.fgl -echo file26=%IS5_DEST%\root.server\usr\afs\bin\ClientUninst.dll >> Client_Program_Files.fgl -echo. >> Client_Program_Files.fgl -echo [General] >> Client_Program_Files.fgl -echo Type=FILELIST >> Client_Program_Files.fgl -echo Version=1.00.000 >> Client_Program_Files.fgl - - -rem -------------- Client_Common_Files.fgl ----------------------------- - -echo [TopDir] > Client_Common_Files.fgl -echo file0=%IS5_DEST%\root.client\usr\vice\etc\afs_config.exe >> Client_Common_Files.fgl -echo file1=%IS5_DEST%\lib\afsrpc.dll >> Client_Common_Files.fgl -echo file2=%IS5_DEST%\lib\afsauthent.dll >> Client_Common_Files.fgl -echo file3=%IS5_DEST%\lib\afspthread.dll >> Client_Common_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\afsprocmgmt.dll >> Client_Common_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib.dll >> Client_Common_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\afsadminutil.dll >> Client_Common_Files.fgl -echo file7=%IS5_DEST%\root.server\usr\afs\bin\afsclientadmin.dll >> Client_Common_Files.fgl -echo file8=%IS5_DEST%\root.server\usr\afs\bin\afsvosadmin.dll >> Client_Common_Files.fgl -echo. >> Client_Common_Files.fgl -echo [General] >> Client_Common_Files.fgl -echo Type=FILELIST >> Client_Common_Files.fgl -echo Version=1.00.000 >> Client_Common_Files.fgl - - -rem -------------- Client_WinDir_Files.fgl ----------------------------- - -echo [TopDir] > Client_WinDir_Files.fgl -rem echo file0=%IS5_DEST%\root.client\usr\vice\etc\afsdcell.ini >> Client_WinDir_Files.fgl -echo. >> Client_WinDir_Files.fgl -echo [General] >> Client_WinDir_Files.fgl -echo Type=FILELIST >> Client_WinDir_Files.fgl -echo Version=1.00.000 >> Client_WinDir_Files.fgl - - -rem -------------- Client_System32_Files.fgl --------------------------- - -echo [TopDir] > Client_System32_Files.fgl -echo file0=%IS5_DEST%\root.client\usr\vice\etc\afs_cpa.cpl >> Client_System32_Files.fgl -echo file1=%MSVCDIR%\REDIST\Msvcrt.dll >> Client_System32_Files.fgl -echo file2=%MSVCDIR%\REDIST\Mfc42.dll >> Client_System32_Files.fgl -echo. >> Client_System32_Files.fgl -echo [General] >> Client_System32_Files.fgl -echo Type=FILELIST >> Client_System32_Files.fgl -echo Version=1.00.000 >> Client_System32_Files.fgl - - -rem -------------- Light_Client_Program_Files.fgl ---------------------- - -echo [TopDir] > Light_Client_Program_Files.fgl -echo file0=%IS5_DEST%\root.client\usr\vice\etc\afsshare.exe >> Light_Client_Program_Files.fgl -echo file1=%IS5_DEST%\include\afs\cm_config.h >> Light_Client_Program_Files.fgl -echo file2=%IS5_DEST%\root.client\usr\vice\etc\libosi.dll >> Light_Client_Program_Files.fgl -echo file3=%IS5_DEST%\include\afs\kautils.h >> Light_Client_Program_Files.fgl -echo file4=%IS5_DEST%\root.client\usr\vice\etc\libafsconf.dll >> Light_Client_Program_Files.fgl -echo file5=%IS5_DEST%\root.client\usr\vice\etc\klog.exe >> Light_Client_Program_Files.fgl -echo file6=%IS5_DEST%\root.client\usr\vice\etc\tokens.exe >> Light_Client_Program_Files.fgl -echo file7=%IS5_DEST%\root.client\usr\vice\etc\unlog.exe >> Light_Client_Program_Files.fgl -echo file8=%IS5_DEST%\root.client\usr\vice\etc\fs.exe >> Light_Client_Program_Files.fgl -echo file9=%IS5_DEST%\lib\libafsconf.lib >> Light_Client_Program_Files.fgl -echo file10=%IS5_DEST%\lib\afsauthent.lib >> Light_Client_Program_Files.fgl -echo file11=%IS5_DEST%\root.client\usr\vice\etc\afscreds.exe >> Light_Client_Program_Files.fgl -echo file12=%IS5_DEST%\root.client\usr\vice\etc\afs_shl_ext.dll >> Light_Client_Program_Files.fgl -echo file13=%IS5_DEST%\root.client\usr\vice\etc\unlog.exe >> Light_Client_Program_Files.fgl -echo file14=%IS5_DEST%\include\afs\auth.h >> Light_Client_Program_Files.fgl -echo file15=%IS5_DEST%\root.client\usr\vice\etc\afslog95.dll >> Light_Client_Program_Files.fgl -echo file16=%IS5_DEST%\root.client\usr\vice\etc\symlink.exe >> Light_Client_Program_Files.fgl -echo file17=%IS5_DEST%\bin\kpasswd.exe >> Light_Client_Program_Files.fgl -echo file18=%IS5_DEST%\root.server\usr\afs\bin\pts.exe >> Light_Client_Program_Files.fgl -echo file19=%IS5_DEST%\root.server\usr\afs\bin\bos.exe >> Light_Client_Program_Files.fgl -echo file20=%IS5_DEST%\root.server\usr\afs\bin\kas.exe >> Light_Client_Program_Files.fgl -echo file21=%IS5_DEST%\root.server\usr\afs\bin\vos.exe >> Light_Client_Program_Files.fgl -echo file22=%IS5_DEST%\root.server\usr\afs\bin\udebug.exe >> Light_Client_Program_Files.fgl -echo file23=%IS5_DEST%\bin\translate_et.exe >> Light_Client_Program_Files.fgl -echo file24=%IS5_DEST%\etc\rxdebug.exe >> Light_Client_Program_Files.fgl -echo file25=%IS5_DEST%\etc\backup.exe >> Light_Client_Program_Files.fgl -echo file26=%IS5_DEST%\root.server\usr\afs\bin\LightClientUninst.dll >> Light_Client_Program_Files.fgl -echo. >> Light_Client_Program_Files.fgl -echo [General] >> Light_Client_Program_Files.fgl -echo Type=FILELIST >> Light_Client_Program_Files.fgl -echo Version=1.00.000 >> Light_Client_Program_Files.fgl - - -rem -------------- Light_Client_Common_Files.fgl ----------------------- - -echo [TopDir] > Light_Client_Common_Files.fgl -echo file0=%IS5_DEST%\root.client\usr\vice\etc\afs_config.exe >> Light_Client_Common_Files.fgl -echo file1=%IS5_DEST%\lib\afsrpc.dll >> Light_Client_Common_Files.fgl -echo file2=%IS5_DEST%\lib\afsauthent.dll >> Light_Client_Common_Files.fgl -echo file3=%IS5_DEST%\lib\afspthread.dll >> Light_Client_Common_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\afsprocmgmt.dll >> Light_Client_Common_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib.dll >> Light_Client_Common_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\afsadminutil.dll >> Light_Client_Common_Files.fgl -echo file7=%IS5_DEST%\root.server\usr\afs\bin\afsclientadmin.dll >> Light_Client_Common_Files.fgl -echo file8=%IS5_DEST%\root.server\usr\afs\bin\afsvosadmin.dll >> Light_Client_Common_Files.fgl -echo. >> Light_Client_Common_Files.fgl -echo [General] >> Light_Client_Common_Files.fgl -echo Type=FILELIST >> Light_Client_Common_Files.fgl -echo Version=1.00.000 >> Light_Client_Common_Files.fgl - - -rem -------------- Light_Client_WinDir_Files.fgl ----------------------- - -echo [TopDir] > Light_Client_WinDir_Files.fgl -rem echo file0=%IS5_DEST%\root.client\usr\vice\etc\afsdcell.ini >> Light_Client_WinDir_Files.fgl -echo. >> Light_Client_WinDir_Files.fgl -echo [General] >> Light_Client_WinDir_Files.fgl -echo Type=FILELIST >> Light_Client_WinDir_Files.fgl -echo Version=1.00.000 >> Light_Client_WinDir_Files.fgl - - -rem -------------- Light_Client_System32_Files.fgl --------------------- - -echo [TopDir] > Light_Client_System32_Files.fgl -echo file0=%MSVCDIR%\REDIST\Msvcrt.dll >> Light_Client_System32_Files.fgl -echo file1=%MSVCDIR%\REDIST\Mfc42.dll >> Light_Client_System32_Files.fgl -echo file2=%IS5_DEST%\root.client\usr\vice\etc\afs_cpa.cpl >> Light_Client_System32_Files.fgl -echo. >> Light_Client_System32_Files.fgl -echo [General] >> Light_Client_System32_Files.fgl -echo Type=FILELIST >> Light_Client_System32_Files.fgl -echo Version=1.00.000 >> Light_Client_System32_Files.fgl - - -rem -------------- Light95_Client_Program_Files.fgl ---------------------- - -echo [TopDir] > Light95_Client_Program_Files.fgl -echo file0=%IS5_DEST%\root.client\usr\vice\etc\libosi.dll >> Light95_Client_Program_Files.fgl -echo file1=%IS5_DEST%\root.client\usr\vice\etc\libafsconf.dll >> Light95_Client_Program_Files.fgl -echo file2=%IS5_DEST%\root.client\usr\vice\etc\fs.exe >> Light95_Client_Program_Files.fgl -echo file3=%IS5_DEST%\root.client\usr\vice\etc\afscreds.exe >> Light95_Client_Program_Files.fgl -echo file4=%IS5_DEST%\root.client\usr\vice\etc\afs_shl_ext.dll >> Light95_Client_Program_Files.fgl -echo file5=%IS5_DEST%\root.client\usr\vice\etc\afslog95.dll >> Light95_Client_Program_Files.fgl -echo file6=%IS5_DEST%\root.client\usr\vice\etc\symlink.exe >> Light95_Client_Program_Files.fgl -echo file7=%IS5_DEST%\root.server\usr\afs\bin\LightClientUninst.dll >> Light95_Client_Program_Files.fgl -echo file8=%IS5_DEST%\bin\kpasswd.exe >> Light95_Client_Program_Files.fgl -echo. >> Light95_Client_Program_Files.fgl -echo [General] >> Light95_Client_Program_Files.fgl -echo Type=FILELIST >> Light95_Client_Program_Files.fgl -echo Version=1.00.000 >> Light95_Client_Program_Files.fgl - - -rem -------------- Light95_Client_Common_Files.fgl ----------------------- - -echo [TopDir] > Light95_Client_Common_Files.fgl -echo file0=%IS5_DEST%\root.client\usr\vice\etc\afs_config.exe >> Light95_Client_Common_Files.fgl -echo file1=%IS5_DEST%\lib\afsrpc.dll >> Light95_Client_Common_Files.fgl -echo file2=%IS5_DEST%\lib\afsauthent.dll >> Light95_Client_Common_Files.fgl -echo file3=%IS5_DEST%\lib\win95\afspthread.dll >> Light95_Client_Common_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib.dll >> Light95_Client_Common_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\afsadminutil.dll >> Light95_Client_Common_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\afsclientadmin.dll >> Light95_Client_Common_Files.fgl -echo. >> Light95_Client_Common_Files.fgl -echo [General] >> Light95_Client_Common_Files.fgl -echo Type=FILELIST >> Light95_Client_Common_Files.fgl -echo Version=1.00.000 >> Light95_Client_Common_Files.fgl - - -rem -------------- Light95_Client_WinDir_Files.fgl ----------------------- - -echo [TopDir] > Light95_Client_WinDir_Files.fgl -rem echo file0=%IS5_DEST%\root.client\usr\vice\etc\afsdcell.ini >> Light95_Client_WinDir_Files.fgl -echo. >> Light95_Client_WinDir_Files.fgl -echo [General] >> Light95_Client_WinDir_Files.fgl -echo Type=FILELIST >> Light95_Client_WinDir_Files.fgl -echo Version=1.00.000 >> Light95_Client_WinDir_Files.fgl - - -rem -------------- Light95_Client_System32_Files.fgl --------------------- - -echo [TopDir] > Light95_Client_System32_Files.fgl -echo file0=%MSVCDIR%\REDIST\Msvcrt.dll >> Light95_Client_System32_Files.fgl -echo file1=%MSVCDIR%\REDIST\Mfc42.dll >> Light95_Client_System32_Files.fgl -echo file2=%IS5_DEST%\root.client\usr\vice\etc\afs_cpa.cpl >> Light95_Client_System32_Files.fgl -echo. >> Light95_Client_System32_Files.fgl -echo [General] >> Light95_Client_System32_Files.fgl -echo Type=FILELIST >> Light95_Client_System32_Files.fgl -echo Version=1.00.000 >> Light95_Client_System32_Files.fgl - - -rem -------------- Server_Program_Files.fgl ---------------------------- - -echo [TopDir] > Server_Program_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\vlserver.exe >> Server_Program_Files.fgl -echo file1=%IS5_DEST%\root.server\usr\afs\bin\volinfo.exe >> Server_Program_Files.fgl -echo file2=%IS5_DEST%\root.server\usr\afs\bin\volserver.exe >> Server_Program_Files.fgl -echo file3=%IS5_DEST%\root.server\usr\afs\bin\afskill.exe >> Server_Program_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\afssvrcfg.exe >> Server_Program_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\bosctlsvc.exe >> Server_Program_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\bosserver.exe >> Server_Program_Files.fgl -echo file7=%IS5_DEST%\root.server\usr\afs\bin\buserver.exe >> Server_Program_Files.fgl -echo file8=%IS5_DEST%\root.server\usr\afs\bin\fileserver.exe >> Server_Program_Files.fgl -echo file9=%IS5_DEST%\etc\fms.exe >> Server_Program_Files.fgl -echo file10=%IS5_DEST%\etc\butc.exe >> Server_Program_Files.fgl -echo file11=%IS5_DEST%\root.server\usr\afs\bin\kaserver.exe >> Server_Program_Files.fgl -echo file12=%IS5_DEST%\root.server\usr\afs\bin\ptserver.exe >> Server_Program_Files.fgl -echo file13=%IS5_DEST%\root.server\usr\afs\bin\salvager.exe >> Server_Program_Files.fgl -echo file14=%IS5_DEST%\root.server\usr\afs\bin\upclient.exe >> Server_Program_Files.fgl -echo file15=%IS5_DEST%\root.server\usr\afs\bin\upserver.exe >> Server_Program_Files.fgl -echo file16=%IS5_DEST%\root.server\usr\afs\bin\ServerUninst.dll >> Server_Program_Files.fgl -echo. >> Server_Program_Files.fgl -echo [General] >> Server_Program_Files.fgl -echo Type=FILELIST >> Server_Program_Files.fgl -echo Version=1.00.000 >> Server_Program_Files.fgl - - -rem -------------- Server_Common_Files.fgl ----------------------------- - -echo [TopDir] > Server_Common_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\afsbosadmin.dll >> Server_Common_Files.fgl -echo file1=%IS5_DEST%\root.server\usr\afs\bin\afscfgadmin.dll >> Server_Common_Files.fgl -echo file2=%IS5_DEST%\root.server\usr\afs\bin\afsclientadmin.dll >> Server_Common_Files.fgl -echo file3=%IS5_DEST%\root.server\usr\afs\bin\afskasadmin.dll >> Server_Common_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\afsptsadmin.dll >> Server_Common_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\afsvosadmin.dll >> Server_Common_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\afsadminutil.dll >> Server_Common_Files.fgl -echo file7=%IS5_DEST%\lib\afsrpc.dll >> Server_Common_Files.fgl -echo file8=%IS5_DEST%\lib\afsauthent.dll >> Server_Common_Files.fgl -echo file9=%IS5_DEST%\lib\afspthread.dll >> Server_Common_Files.fgl -echo file10=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib.dll >> Server_Common_Files.fgl -echo file11=%IS5_DEST%\root.server\usr\afs\bin\afsprocmgmt.dll >> Server_Common_Files.fgl -echo. >> Server_Common_Files.fgl -echo [General] >> Server_Common_Files.fgl -echo Type=FILELIST >> Server_Common_Files.fgl -echo Version=1.00.000 >> Server_Common_Files.fgl - - -rem -------------- Server_WinDir_Files.fgl ----------------------------- - -echo [TopDir] > Server_WinDir_Files.fgl -echo. >> Server_WinDir_Files.fgl -echo [General] >> Server_WinDir_Files.fgl -echo Type=FILELIST >> Server_WinDir_Files.fgl -echo Version=1.00.000 >> Server_WinDir_Files.fgl - - -rem -------------- Server_System32_Files.fgl --------------------------- - -echo [TopDir] > Server_System32_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\afsserver.cpl >> Server_System32_Files.fgl -echo file1=%MSVCDIR%\REDIST\Msvcrt.dll >> Server_System32_Files.fgl -echo. >> Server_System32_Files.fgl -echo [General] >> Server_System32_Files.fgl -echo Type=FILELIST >> Server_System32_Files.fgl -echo Version=1.00.000 >> Server_System32_Files.fgl - - -rem -------------- Control_Center_Program_Files.fgl -------------------- - -echo [TopDir] > Control_Center_Program_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\TaAfsServerManager.exe >> Control_Center_Program_Files.fgl -echo file1=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAdmSvr.exe >> Control_Center_Program_Files.fgl -echo file2=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAccountManager.exe >> Control_Center_Program_Files.fgl -echo file3=%IS5_DEST%\root.server\usr\afs\bin\CCUninst.dll >> Control_Center_Program_Files.fgl -echo. >> Control_Center_Program_Files.fgl -echo [General] >> Control_Center_Program_Files.fgl -echo Type=FILELIST >> Control_Center_Program_Files.fgl -echo Version=1.00.000 >> Control_Center_Program_Files.fgl - - -rem -------------- Control_Center_Common_Files.fgl --------------------- - -echo [TopDir] > Control_Center_Common_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\afsbosadmin.dll >> Control_Center_Common_Files.fgl -echo file1=%IS5_DEST%\root.server\usr\afs\bin\afscfgadmin.dll >> Control_Center_Common_Files.fgl -echo file2=%IS5_DEST%\root.server\usr\afs\bin\afsclientadmin.dll >> Control_Center_Common_Files.fgl -echo file3=%IS5_DEST%\root.server\usr\afs\bin\afskasadmin.dll >> Control_Center_Common_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\afsptsadmin.dll >> Control_Center_Common_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\afsvosadmin.dll >> Control_Center_Common_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\afsadminutil.dll >> Control_Center_Common_Files.fgl -echo file7=%IS5_DEST%\lib\afsrpc.dll >> Control_Center_Common_Files.fgl -echo file8=%IS5_DEST%\lib\afsauthent.dll >> Control_Center_Common_Files.fgl -echo file9=%IS5_DEST%\lib\afspthread.dll >> Control_Center_Common_Files.fgl -echo file10=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib.dll >> Control_Center_Common_Files.fgl -echo file11=%IS5_DEST%\root.client\usr\vice\etc\afs_config.exe >> Control_Center_Common_Files.fgl -echo. >> Control_Center_Common_Files.fgl -echo [General] >> Control_Center_Common_Files.fgl -echo Type=FILELIST >> Control_Center_Common_Files.fgl -echo Version=1.00.000 >> Control_Center_Common_Files.fgl - - -rem -------------- Control_Center_WinDir_Files.fgl --------------------- - -echo [TopDir] > Control_Center_WinDir_Files.fgl -rem echo file0=%IS5_DEST%\root.client\usr\vice\etc\afsdcell.ini >> Control_Center_Windir_Files.fgl -echo. >> Control_Center_WinDir_Files.fgl -echo [General] >> Control_Center_WinDir_Files.fgl -echo Type=FILELIST >> Control_Center_WinDir_Files.fgl -echo Version=1.00.000 >> Control_Center_WinDir_Files.fgl - - -rem -------------- Control_Center_System32_Files.fgl-------------------- - -echo [TopDir] > Control_Center_System32_Files.fgl -echo file0=%IS5_DEST%\root.client\usr\vice\etc\afs_cpa.cpl >> Control_Center_System32_Files.fgl -echo file1=%MSVCDIR%\REDIST\Msvcrt.dll >> Control_Center_System32_Files.fgl -echo. >> Control_Center_System32_Files.fgl -echo [General] >> Control_Center_System32_Files.fgl -echo Type=FILELIST >> Control_Center_System32_Files.fgl -echo Version=1.00.000 >> Control_Center_System32_Files.fgl - - -rem -------------- Generate the Release Notes file groups --------------- - -rem English -set FILEGROUP=Release_Notes_English_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\en_US -call :Generate_Release_Notes_File_Group - -rem Japanese -set FILEGROUP=Release_Notes_Japanese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\ja_JP -call :Generate_Release_Notes_File_Group - -rem Korean -set FILEGROUP=Release_Notes_Korean_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\ko_KR -call :Generate_Release_Notes_File_Group - -rem Trad_Chinese -set FILEGROUP=Release_Notes_Trad_Chinese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\zh_TW -call :Generate_Release_Notes_File_Group - -rem Simp_Chinese -set FILEGROUP=Release_Notes_Simp_Chinese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\zh_CN -call :Generate_Release_Notes_File_Group - -rem German -set FILEGROUP=Release_Notes_German_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\de_DE -call :Generate_Empty_File_Group - -rem Spanish -set FILEGROUP=Release_Notes_Spanish_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\es_ES -call :Generate_Empty_File_Group - -rem Portuguese -set FILEGROUP=Release_Notes_Portuguese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\pt_BR -call :Generate_Release_Notes_File_Group - -goto Install_Guide_Files - -:Generate_Release_Notes_File_Group -echo [TopDir] > %FILEGROUP% -echo file0=%IS5_DOC%\README.txt >> %FILEGROUP% -echo file1=%IS5_DOC%\html\ReleaseNotes\awrns000.htm >> %FILEGROUP% -echo file2=%IS5_DOC%\html\ReleaseNotes\awrns002.htm >> %FILEGROUP% -echo file3=%IS5_DOC%\html\ReleaseNotes\awrns003.htm >> %FILEGROUP% -echo file4=%IS5_DOC%\html\ReleaseNotes\awrns004.htm >> %FILEGROUP% -echo file5=%IS5_DOC%\html\ReleaseNotes\awrns005.htm >> %FILEGROUP% -echo file6=%IS5_DOC%\html\ReleaseNotes\awrns006.htm >> %FILEGROUP% -echo file7=%IS5_DOC%\html\ReleaseNotes\awrns007.htm >> %FILEGROUP% -echo. >> %FILEGROUP% -echo [General] >> %FILEGROUP% -echo Type=FILELIST >> %FILEGROUP% -echo Version=1.00.000 >> %FILEGROUP% -goto :EOF - -:Generate_Empty_File_Group -echo [TopDir] > %FILEGROUP% -echo. >> %FILEGROUP% -echo [General] >> %FILEGROUP% -echo Type=FILELIST >> %FILEGROUP% -echo Version=1.00.000 >> %FILEGROUP% -goto :EOF - - -rem -------------- Generate the Install Guide file groups --------------- - -:Install_Guide_Files - -rem English -set FILEGROUP=Install_Guide_English_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\en_US\Html -call :Generate_Install_Guide_File_Group - -rem Japanese -set FILEGROUP=Install_Guide_Japanese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\ja_JP\Html -call :Generate_Install_Guide_File_Group - -rem Korean -set FILEGROUP=Install_Guide_Korean_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\ko_KR\Html -call :Generate_Install_Guide_File_Group - -rem Trad_Chinese -set FILEGROUP=Install_Guide_Trad_Chinese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\zh_TW\Html -call :Generate_Install_Guide_File_Group - -rem Simp_Chinese -set FILEGROUP=Install_Guide_Simp_Chinese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\zh_CN\Html -call :Generate_Install_Guide_File_Group - -rem German -set FILEGROUP=Install_Guide_German_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\de_DE\Html -call :Generate_Install_Guide_File_Group - -rem Spanish -set FILEGROUP=Install_Guide_Spanish_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\es_ES\Html -call :Generate_Install_Guide_File_Group - -rem Portuguese -set FILEGROUP=Install_Guide_Portuguese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\pt_BR\Html -call :Generate_Install_Guide_File_Group - -goto Sys_Admin_Guide_Files - -:Generate_Install_Guide_File_Group -echo [TopDir] > %FILEGROUP% -echo file0=%IS5_DOC%\InstallGd\awqbg000.htm >> %FILEGROUP% -echo file1=%IS5_DOC%\InstallGd\awqbg002.htm >> %FILEGROUP% -echo file2=%IS5_DOC%\InstallGd\awqbg003.htm >> %FILEGROUP% -echo file3=%IS5_DOC%\InstallGd\awqbg004.htm >> %FILEGROUP% -echo. >> %FILEGROUP% -echo [General] >> %FILEGROUP% -echo Type=FILELIST >> %FILEGROUP% -echo Version=1.00.000 >> %FILEGROUP% -goto :EOF - - -rem -------------- Generate the Sys Admin Guide file groups ------------- - -:Sys_Admin_Guide_Files - -rem English -set FILEGROUP=Sys_Admin_Guide_English_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\en_US\Html -call :Generate_Sys_Admin_Guide_File_Group - -rem Japanese -set FILEGROUP=Sys_Admin_Guide_Japanese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\ja_JP\Html -call :Generate_Sys_Admin_Guide_File_Group - -rem Korean -set FILEGROUP=Sys_Admin_Guide_Korean_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\ko_KR\Html -call :Generate_Sys_Admin_Guide_File_Group - -rem Trad_Chinese -set FILEGROUP=Sys_Admin_Guide_Trad_Chinese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\zh_TW\Html -call :Generate_Empty_File_Group - -rem Simp_Chinese -set FILEGROUP=Sys_Admin_Guide_Simp_Chinese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\zh_CN\Html -call :Generate_Empty_File_Group - -rem German -set FILEGROUP=Sys_Admin_Guide_German_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\de_DE\Html -call :Generate_Empty_File_Group - -rem Spanish -set FILEGROUP=Sys_Admin_Guide_Spanish_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\es_ES\Html -call :Generate_Empty_File_Group - -rem Portuguese -set FILEGROUP=Sys_Admin_Guide_Portuguese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\pt_BR\Html -call :Generate_Empty_File_Group - -goto Cmd_Ref_Files - -:Generate_Sys_Admin_Guide_File_Group -echo [TopDir] > %FILEGROUP% -echo file0=%IS5_DOC%\SysAdminGd\auagd000.htm >> %FILEGROUP% -echo file1=%IS5_DOC%\SysAdminGd\auagd002.htm >> %FILEGROUP% -echo file2=%IS5_DOC%\SysAdminGd\auagd003.htm >> %FILEGROUP% -echo file3=%IS5_DOC%\SysAdminGd\auagd004.htm >> %FILEGROUP% -echo file4=%IS5_DOC%\SysAdminGd\auagd005.htm >> %FILEGROUP% -echo file5=%IS5_DOC%\SysAdminGd\auagd006.htm >> %FILEGROUP% -echo file6=%IS5_DOC%\SysAdminGd\auagd007.htm >> %FILEGROUP% -echo file7=%IS5_DOC%\SysAdminGd\auagd008.htm >> %FILEGROUP% -echo file8=%IS5_DOC%\SysAdminGd\auagd009.htm >> %FILEGROUP% -echo file9=%IS5_DOC%\SysAdminGd\auagd010.htm >> %FILEGROUP% -echo file10=%IS5_DOC%\SysAdminGd\auagd011.htm >> %FILEGROUP% -echo file11=%IS5_DOC%\SysAdminGd\auagd012.htm >> %FILEGROUP% -echo file12=%IS5_DOC%\SysAdminGd\auagd013.htm >> %FILEGROUP% -echo file13=%IS5_DOC%\SysAdminGd\auagd014.htm >> %FILEGROUP% -echo file14=%IS5_DOC%\SysAdminGd\auagd015.htm >> %FILEGROUP% -echo file15=%IS5_DOC%\SysAdminGd\auagd016.htm >> %FILEGROUP% -echo file16=%IS5_DOC%\SysAdminGd\auagd017.htm >> %FILEGROUP% -echo file17=%IS5_DOC%\SysAdminGd\auagd018.htm >> %FILEGROUP% -echo file18=%IS5_DOC%\SysAdminGd\auagd019.htm >> %FILEGROUP% -echo file19=%IS5_DOC%\SysAdminGd\auagd020.htm >> %FILEGROUP% -echo file20=%IS5_DOC%\SysAdminGd\auagd021.htm >> %FILEGROUP% -echo file21=%IS5_DOC%\SysAdminGd\auagd022.htm >> %FILEGROUP% -echo file22=%IS5_DOC%\SysAdminGd\auagd023.htm >> %FILEGROUP% -echo file23=%IS5_DOC%\SysAdminGd\auagd024.htm >> %FILEGROUP% -echo file24=%IS5_DOC%\SysAdminGd\auagd025.htm >> %FILEGROUP% -echo file25=%IS5_DOC%\SysAdminGd\auagd026.htm >> %FILEGROUP% -echo file26=%IS5_DOC%\SysAdminGd\vnode.gif >> %FILEGROUP% -echo file27=%IS5_DOC%\SysAdminGd\fserver1.gif >> %FILEGROUP% -echo file28=%IS5_DOC%\SysAdminGd\fserver2.gif >> %FILEGROUP% -echo file29=%IS5_DOC%\SysAdminGd\overview.gif >> %FILEGROUP% -echo file30=%IS5_DOC%\SysAdminGd\scout1.gif >> %FILEGROUP% -echo file31=%IS5_DOC%\SysAdminGd\scout2.gif >> %FILEGROUP% -echo file32=%IS5_DOC%\SysAdminGd\scout3.gif >> %FILEGROUP% -echo file33=%IS5_DOC%\SysAdminGd\scout4.gif >> %FILEGROUP% -echo file34=%IS5_DOC%\SysAdminGd\cachmgr.gif >> %FILEGROUP% -echo. >> %FILEGROUP% -echo [General] >> %FILEGROUP% -echo Type=FILELIST >> %FILEGROUP% -echo Version=1.00.000 >> %FILEGROUP% -goto :EOF - -rem -------------- Generate the Cmd Ref file groups --------------------- - -:Cmd_Ref_Files - -rem English -set FILEGROUP=Cmd_Ref_English_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\en_US\Html -call :Generate_Cmd_Ref_File_Group - -rem Japanese -set FILEGROUP=Cmd_Ref_Japanese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\ja_JP\Html -call :Generate_Cmd_Ref_File_Group - -rem Korean -set FILEGROUP=Cmd_Ref_Korean_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\ko_KR\Html -call :Generate_Empty_File_Group - -rem Trad_Chinese -set FILEGROUP=Cmd_Ref_Trad_Chinese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\zh_TW\Html -call :Generate_Empty_File_Group - -rem Simp_Chinese -set FILEGROUP=Cmd_Ref_Simp_Chinese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\zh_CN\Html -call :Generate_Empty_File_Group - -rem German -set FILEGROUP=Cmd_Ref_German_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\de_DE\Html -call :Generate_Empty_File_Group - -rem Spanish -set FILEGROUP=Cmd_Ref_Spanish_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\es_ES\Html -call :Generate_Empty_File_Group - -rem Portuguese -set FILEGROUP=Cmd_Ref_Portuguese_Files.fgl -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\pt_BR\Html -call :Generate_Empty_File_Group - -goto Doc_Misc_Files - -:Generate_Cmd_Ref_File_Group -echo [TopDir] > %FILEGROUP% -echo file0=%IS5_DOC%\CmdRef\auarf000.htm >> %FILEGROUP% -echo file1=%IS5_DOC%\CmdRef\auarf002.htm >> %FILEGROUP% -echo file2=%IS5_DOC%\CmdRef\auarf003.htm >> %FILEGROUP% -echo file3=%IS5_DOC%\CmdRef\auarf004.htm >> %FILEGROUP% -echo file4=%IS5_DOC%\CmdRef\auarf005.htm >> %FILEGROUP% -echo file5=%IS5_DOC%\CmdRef\auarf006.htm >> %FILEGROUP% -echo file6=%IS5_DOC%\CmdRef\auarf007.htm >> %FILEGROUP% -echo file7=%IS5_DOC%\CmdRef\auarf008.htm >> %FILEGROUP% -echo file8=%IS5_DOC%\CmdRef\auarf009.htm >> %FILEGROUP% -echo file9=%IS5_DOC%\CmdRef\auarf010.htm >> %FILEGROUP% -echo file10=%IS5_DOC%\CmdRef\auarf011.htm >> %FILEGROUP% -echo file11=%IS5_DOC%\CmdRef\auarf012.htm >> %FILEGROUP% -echo file12=%IS5_DOC%\CmdRef\auarf013.htm >> %FILEGROUP% -echo file13=%IS5_DOC%\CmdRef\auarf014.htm >> %FILEGROUP% -echo file14=%IS5_DOC%\CmdRef\auarf015.htm >> %FILEGROUP% -echo file15=%IS5_DOC%\CmdRef\auarf016.htm >> %FILEGROUP% -echo file16=%IS5_DOC%\CmdRef\auarf017.htm >> %FILEGROUP% -echo file17=%IS5_DOC%\CmdRef\auarf018.htm >> %FILEGROUP% -echo file18=%IS5_DOC%\CmdRef\auarf019.htm >> %FILEGROUP% -echo file19=%IS5_DOC%\CmdRef\auarf020.htm >> %FILEGROUP% -echo file20=%IS5_DOC%\CmdRef\auarf021.htm >> %FILEGROUP% -echo file21=%IS5_DOC%\CmdRef\auarf022.htm >> %FILEGROUP% -echo file22=%IS5_DOC%\CmdRef\auarf023.htm >> %FILEGROUP% -echo file23=%IS5_DOC%\CmdRef\auarf024.htm >> %FILEGROUP% -echo file24=%IS5_DOC%\CmdRef\auarf025.htm >> %FILEGROUP% -echo file25=%IS5_DOC%\CmdRef\auarf026.htm >> %FILEGROUP% -echo file26=%IS5_DOC%\CmdRef\auarf027.htm >> %FILEGROUP% -echo file27=%IS5_DOC%\CmdRef\auarf028.htm >> %FILEGROUP% -echo file28=%IS5_DOC%\CmdRef\auarf029.htm >> %FILEGROUP% -echo file29=%IS5_DOC%\CmdRef\auarf030.htm >> %FILEGROUP% -echo file30=%IS5_DOC%\CmdRef\auarf031.htm >> %FILEGROUP% -echo file31=%IS5_DOC%\CmdRef\auarf032.htm >> %FILEGROUP% -echo file32=%IS5_DOC%\CmdRef\auarf033.htm >> %FILEGROUP% -echo file33=%IS5_DOC%\CmdRef\auarf034.htm >> %FILEGROUP% -echo file34=%IS5_DOC%\CmdRef\auarf035.htm >> %FILEGROUP% -echo file35=%IS5_DOC%\CmdRef\auarf036.htm >> %FILEGROUP% -echo file36=%IS5_DOC%\CmdRef\auarf037.htm >> %FILEGROUP% -echo file37=%IS5_DOC%\CmdRef\auarf038.htm >> %FILEGROUP% -echo file38=%IS5_DOC%\CmdRef\auarf039.htm >> %FILEGROUP% -echo file39=%IS5_DOC%\CmdRef\auarf040.htm >> %FILEGROUP% -echo file40=%IS5_DOC%\CmdRef\auarf041.htm >> %FILEGROUP% -echo file41=%IS5_DOC%\CmdRef\auarf042.htm >> %FILEGROUP% -echo file42=%IS5_DOC%\CmdRef\auarf043.htm >> %FILEGROUP% -echo file43=%IS5_DOC%\CmdRef\auarf044.htm >> %FILEGROUP% -echo file44=%IS5_DOC%\CmdRef\auarf045.htm >> %FILEGROUP% -echo file45=%IS5_DOC%\CmdRef\auarf046.htm >> %FILEGROUP% -echo file46=%IS5_DOC%\CmdRef\auarf047.htm >> %FILEGROUP% -echo file47=%IS5_DOC%\CmdRef\auarf048.htm >> %FILEGROUP% -echo file48=%IS5_DOC%\CmdRef\auarf049.htm >> %FILEGROUP% -echo file49=%IS5_DOC%\CmdRef\auarf050.htm >> %FILEGROUP% -echo file50=%IS5_DOC%\CmdRef\auarf051.htm >> %FILEGROUP% -echo file51=%IS5_DOC%\CmdRef\auarf052.htm >> %FILEGROUP% -echo file52=%IS5_DOC%\CmdRef\auarf053.htm >> %FILEGROUP% -echo file53=%IS5_DOC%\CmdRef\auarf054.htm >> %FILEGROUP% -echo file54=%IS5_DOC%\CmdRef\auarf055.htm >> %FILEGROUP% -echo file55=%IS5_DOC%\CmdRef\auarf056.htm >> %FILEGROUP% -echo file56=%IS5_DOC%\CmdRef\auarf057.htm >> %FILEGROUP% -echo file57=%IS5_DOC%\CmdRef\auarf058.htm >> %FILEGROUP% -echo file58=%IS5_DOC%\CmdRef\auarf059.htm >> %FILEGROUP% -echo file59=%IS5_DOC%\CmdRef\auarf060.htm >> %FILEGROUP% -echo file60=%IS5_DOC%\CmdRef\auarf061.htm >> %FILEGROUP% -echo file61=%IS5_DOC%\CmdRef\auarf062.htm >> %FILEGROUP% -echo file62=%IS5_DOC%\CmdRef\auarf063.htm >> %FILEGROUP% -echo file63=%IS5_DOC%\CmdRef\auarf064.htm >> %FILEGROUP% -echo file64=%IS5_DOC%\CmdRef\auarf065.htm >> %FILEGROUP% -echo file65=%IS5_DOC%\CmdRef\auarf066.htm >> %FILEGROUP% -echo file66=%IS5_DOC%\CmdRef\auarf067.htm >> %FILEGROUP% -echo file67=%IS5_DOC%\CmdRef\auarf068.htm >> %FILEGROUP% -echo file68=%IS5_DOC%\CmdRef\auarf069.htm >> %FILEGROUP% -echo file69=%IS5_DOC%\CmdRef\auarf070.htm >> %FILEGROUP% -echo file70=%IS5_DOC%\CmdRef\auarf071.htm >> %FILEGROUP% -echo file71=%IS5_DOC%\CmdRef\auarf072.htm >> %FILEGROUP% -echo file72=%IS5_DOC%\CmdRef\auarf073.htm >> %FILEGROUP% -echo file73=%IS5_DOC%\CmdRef\auarf074.htm >> %FILEGROUP% -echo file74=%IS5_DOC%\CmdRef\auarf075.htm >> %FILEGROUP% -echo file75=%IS5_DOC%\CmdRef\auarf076.htm >> %FILEGROUP% -echo file76=%IS5_DOC%\CmdRef\auarf077.htm >> %FILEGROUP% -echo file77=%IS5_DOC%\CmdRef\auarf078.htm >> %FILEGROUP% -echo file78=%IS5_DOC%\CmdRef\auarf079.htm >> %FILEGROUP% -echo file79=%IS5_DOC%\CmdRef\auarf080.htm >> %FILEGROUP% -echo file80=%IS5_DOC%\CmdRef\auarf081.htm >> %FILEGROUP% -echo file81=%IS5_DOC%\CmdRef\auarf082.htm >> %FILEGROUP% -echo file82=%IS5_DOC%\CmdRef\auarf083.htm >> %FILEGROUP% -echo file83=%IS5_DOC%\CmdRef\auarf084.htm >> %FILEGROUP% -echo file84=%IS5_DOC%\CmdRef\auarf085.htm >> %FILEGROUP% -echo file85=%IS5_DOC%\CmdRef\auarf086.htm >> %FILEGROUP% -echo file86=%IS5_DOC%\CmdRef\auarf087.htm >> %FILEGROUP% -echo file87=%IS5_DOC%\CmdRef\auarf088.htm >> %FILEGROUP% -echo file88=%IS5_DOC%\CmdRef\auarf089.htm >> %FILEGROUP% -echo file89=%IS5_DOC%\CmdRef\auarf090.htm >> %FILEGROUP% -echo file90=%IS5_DOC%\CmdRef\auarf091.htm >> %FILEGROUP% -echo file91=%IS5_DOC%\CmdRef\auarf092.htm >> %FILEGROUP% -echo file92=%IS5_DOC%\CmdRef\auarf093.htm >> %FILEGROUP% -echo file93=%IS5_DOC%\CmdRef\auarf094.htm >> %FILEGROUP% -echo file94=%IS5_DOC%\CmdRef\auarf095.htm >> %FILEGROUP% -echo file95=%IS5_DOC%\CmdRef\auarf096.htm >> %FILEGROUP% -echo file96=%IS5_DOC%\CmdRef\auarf097.htm >> %FILEGROUP% -echo file97=%IS5_DOC%\CmdRef\auarf098.htm >> %FILEGROUP% -echo file98=%IS5_DOC%\CmdRef\auarf099.htm >> %FILEGROUP% -echo file99=%IS5_DOC%\CmdRef\auarf100.htm >> %FILEGROUP% -echo file100=%IS5_DOC%\CmdRef\auarf101.htm >> %FILEGROUP% -echo file101=%IS5_DOC%\CmdRef\auarf102.htm >> %FILEGROUP% -echo file102=%IS5_DOC%\CmdRef\auarf103.htm >> %FILEGROUP% -echo file103=%IS5_DOC%\CmdRef\auarf104.htm >> %FILEGROUP% -echo file104=%IS5_DOC%\CmdRef\auarf105.htm >> %FILEGROUP% -echo file105=%IS5_DOC%\CmdRef\auarf106.htm >> %FILEGROUP% -echo file106=%IS5_DOC%\CmdRef\auarf107.htm >> %FILEGROUP% -echo file107=%IS5_DOC%\CmdRef\auarf108.htm >> %FILEGROUP% -echo file108=%IS5_DOC%\CmdRef\auarf109.htm >> %FILEGROUP% -echo file109=%IS5_DOC%\CmdRef\auarf110.htm >> %FILEGROUP% -echo file110=%IS5_DOC%\CmdRef\auarf111.htm >> %FILEGROUP% -echo file111=%IS5_DOC%\CmdRef\auarf112.htm >> %FILEGROUP% -echo file112=%IS5_DOC%\CmdRef\auarf113.htm >> %FILEGROUP% -echo file113=%IS5_DOC%\CmdRef\auarf114.htm >> %FILEGROUP% -echo file114=%IS5_DOC%\CmdRef\auarf115.htm >> %FILEGROUP% -echo file115=%IS5_DOC%\CmdRef\auarf116.htm >> %FILEGROUP% -echo file116=%IS5_DOC%\CmdRef\auarf117.htm >> %FILEGROUP% -echo file117=%IS5_DOC%\CmdRef\auarf118.htm >> %FILEGROUP% -echo file118=%IS5_DOC%\CmdRef\auarf119.htm >> %FILEGROUP% -echo file119=%IS5_DOC%\CmdRef\auarf120.htm >> %FILEGROUP% -echo file120=%IS5_DOC%\CmdRef\auarf121.htm >> %FILEGROUP% -echo file121=%IS5_DOC%\CmdRef\auarf122.htm >> %FILEGROUP% -echo file122=%IS5_DOC%\CmdRef\auarf123.htm >> %FILEGROUP% -echo file123=%IS5_DOC%\CmdRef\auarf124.htm >> %FILEGROUP% -echo file124=%IS5_DOC%\CmdRef\auarf125.htm >> %FILEGROUP% -echo file125=%IS5_DOC%\CmdRef\auarf126.htm >> %FILEGROUP% -echo file126=%IS5_DOC%\CmdRef\auarf127.htm >> %FILEGROUP% -echo file127=%IS5_DOC%\CmdRef\auarf128.htm >> %FILEGROUP% -echo file128=%IS5_DOC%\CmdRef\auarf129.htm >> %FILEGROUP% -echo file129=%IS5_DOC%\CmdRef\auarf130.htm >> %FILEGROUP% -echo file130=%IS5_DOC%\CmdRef\auarf131.htm >> %FILEGROUP% -echo file131=%IS5_DOC%\CmdRef\auarf132.htm >> %FILEGROUP% -echo file132=%IS5_DOC%\CmdRef\auarf133.htm >> %FILEGROUP% -echo file133=%IS5_DOC%\CmdRef\auarf134.htm >> %FILEGROUP% -echo file134=%IS5_DOC%\CmdRef\auarf135.htm >> %FILEGROUP% -echo file135=%IS5_DOC%\CmdRef\auarf136.htm >> %FILEGROUP% -echo file136=%IS5_DOC%\CmdRef\auarf137.htm >> %FILEGROUP% -echo file137=%IS5_DOC%\CmdRef\auarf138.htm >> %FILEGROUP% -echo file138=%IS5_DOC%\CmdRef\auarf139.htm >> %FILEGROUP% -echo file139=%IS5_DOC%\CmdRef\auarf140.htm >> %FILEGROUP% -echo file140=%IS5_DOC%\CmdRef\auarf141.htm >> %FILEGROUP% -echo file141=%IS5_DOC%\CmdRef\auarf142.htm >> %FILEGROUP% -echo file142=%IS5_DOC%\CmdRef\auarf143.htm >> %FILEGROUP% -echo file143=%IS5_DOC%\CmdRef\auarf144.htm >> %FILEGROUP% -echo file144=%IS5_DOC%\CmdRef\auarf145.htm >> %FILEGROUP% -echo file145=%IS5_DOC%\CmdRef\auarf146.htm >> %FILEGROUP% -echo file146=%IS5_DOC%\CmdRef\auarf147.htm >> %FILEGROUP% -echo file147=%IS5_DOC%\CmdRef\auarf148.htm >> %FILEGROUP% -echo file148=%IS5_DOC%\CmdRef\auarf149.htm >> %FILEGROUP% -echo file149=%IS5_DOC%\CmdRef\auarf150.htm >> %FILEGROUP% -echo file150=%IS5_DOC%\CmdRef\auarf151.htm >> %FILEGROUP% -echo file151=%IS5_DOC%\CmdRef\auarf152.htm >> %FILEGROUP% -echo file152=%IS5_DOC%\CmdRef\auarf153.htm >> %FILEGROUP% -echo file153=%IS5_DOC%\CmdRef\auarf154.htm >> %FILEGROUP% -echo file154=%IS5_DOC%\CmdRef\auarf155.htm >> %FILEGROUP% -echo file155=%IS5_DOC%\CmdRef\auarf156.htm >> %FILEGROUP% -echo file156=%IS5_DOC%\CmdRef\auarf157.htm >> %FILEGROUP% -echo file157=%IS5_DOC%\CmdRef\auarf158.htm >> %FILEGROUP% -echo file158=%IS5_DOC%\CmdRef\auarf159.htm >> %FILEGROUP% -echo file159=%IS5_DOC%\CmdRef\auarf160.htm >> %FILEGROUP% -echo file160=%IS5_DOC%\CmdRef\auarf161.htm >> %FILEGROUP% -echo file161=%IS5_DOC%\CmdRef\auarf162.htm >> %FILEGROUP% -echo file162=%IS5_DOC%\CmdRef\auarf163.htm >> %FILEGROUP% -echo file163=%IS5_DOC%\CmdRef\auarf164.htm >> %FILEGROUP% -echo file164=%IS5_DOC%\CmdRef\auarf165.htm >> %FILEGROUP% -echo file165=%IS5_DOC%\CmdRef\auarf166.htm >> %FILEGROUP% -echo file166=%IS5_DOC%\CmdRef\auarf167.htm >> %FILEGROUP% -echo file167=%IS5_DOC%\CmdRef\auarf168.htm >> %FILEGROUP% -echo file168=%IS5_DOC%\CmdRef\auarf169.htm >> %FILEGROUP% -echo file169=%IS5_DOC%\CmdRef\auarf170.htm >> %FILEGROUP% -echo file170=%IS5_DOC%\CmdRef\auarf171.htm >> %FILEGROUP% -echo file171=%IS5_DOC%\CmdRef\auarf172.htm >> %FILEGROUP% -echo file172=%IS5_DOC%\CmdRef\auarf173.htm >> %FILEGROUP% -echo file173=%IS5_DOC%\CmdRef\auarf174.htm >> %FILEGROUP% -echo file174=%IS5_DOC%\CmdRef\auarf175.htm >> %FILEGROUP% -echo file175=%IS5_DOC%\CmdRef\auarf176.htm >> %FILEGROUP% -echo file176=%IS5_DOC%\CmdRef\auarf177.htm >> %FILEGROUP% -echo file177=%IS5_DOC%\CmdRef\auarf178.htm >> %FILEGROUP% -echo file178=%IS5_DOC%\CmdRef\auarf179.htm >> %FILEGROUP% -echo file179=%IS5_DOC%\CmdRef\auarf180.htm >> %FILEGROUP% -echo file180=%IS5_DOC%\CmdRef\auarf181.htm >> %FILEGROUP% -echo file181=%IS5_DOC%\CmdRef\auarf182.htm >> %FILEGROUP% -echo file182=%IS5_DOC%\CmdRef\auarf183.htm >> %FILEGROUP% -echo file183=%IS5_DOC%\CmdRef\auarf184.htm >> %FILEGROUP% -echo file184=%IS5_DOC%\CmdRef\auarf185.htm >> %FILEGROUP% -echo file185=%IS5_DOC%\CmdRef\auarf186.htm >> %FILEGROUP% -echo file186=%IS5_DOC%\CmdRef\auarf187.htm >> %FILEGROUP% -echo file187=%IS5_DOC%\CmdRef\auarf188.htm >> %FILEGROUP% -echo file188=%IS5_DOC%\CmdRef\auarf189.htm >> %FILEGROUP% -echo file189=%IS5_DOC%\CmdRef\auarf190.htm >> %FILEGROUP% -echo file190=%IS5_DOC%\CmdRef\auarf191.htm >> %FILEGROUP% -echo file191=%IS5_DOC%\CmdRef\auarf192.htm >> %FILEGROUP% -echo file192=%IS5_DOC%\CmdRef\auarf193.htm >> %FILEGROUP% -echo file193=%IS5_DOC%\CmdRef\auarf194.htm >> %FILEGROUP% -echo file194=%IS5_DOC%\CmdRef\auarf195.htm >> %FILEGROUP% -echo file195=%IS5_DOC%\CmdRef\auarf196.htm >> %FILEGROUP% -echo file196=%IS5_DOC%\CmdRef\auarf197.htm >> %FILEGROUP% -echo file197=%IS5_DOC%\CmdRef\auarf198.htm >> %FILEGROUP% -echo file198=%IS5_DOC%\CmdRef\auarf199.htm >> %FILEGROUP% -echo file199=%IS5_DOC%\CmdRef\auarf200.htm >> %FILEGROUP% -echo file200=%IS5_DOC%\CmdRef\auarf201.htm >> %FILEGROUP% -echo file201=%IS5_DOC%\CmdRef\auarf202.htm >> %FILEGROUP% -echo file202=%IS5_DOC%\CmdRef\auarf203.htm >> %FILEGROUP% -echo file203=%IS5_DOC%\CmdRef\auarf204.htm >> %FILEGROUP% -echo file204=%IS5_DOC%\CmdRef\auarf205.htm >> %FILEGROUP% -echo file205=%IS5_DOC%\CmdRef\auarf206.htm >> %FILEGROUP% -echo file206=%IS5_DOC%\CmdRef\auarf207.htm >> %FILEGROUP% -echo file207=%IS5_DOC%\CmdRef\auarf208.htm >> %FILEGROUP% -echo file208=%IS5_DOC%\CmdRef\auarf209.htm >> %FILEGROUP% -echo file209=%IS5_DOC%\CmdRef\auarf210.htm >> %FILEGROUP% -echo file210=%IS5_DOC%\CmdRef\auarf211.htm >> %FILEGROUP% -echo file211=%IS5_DOC%\CmdRef\auarf212.htm >> %FILEGROUP% -echo file212=%IS5_DOC%\CmdRef\auarf213.htm >> %FILEGROUP% -echo file213=%IS5_DOC%\CmdRef\auarf214.htm >> %FILEGROUP% -echo file214=%IS5_DOC%\CmdRef\auarf215.htm >> %FILEGROUP% -echo file215=%IS5_DOC%\CmdRef\auarf216.htm >> %FILEGROUP% -echo file216=%IS5_DOC%\CmdRef\auarf217.htm >> %FILEGROUP% -echo file217=%IS5_DOC%\CmdRef\auarf218.htm >> %FILEGROUP% -echo file218=%IS5_DOC%\CmdRef\auarf219.htm >> %FILEGROUP% -echo file219=%IS5_DOC%\CmdRef\auarf220.htm >> %FILEGROUP% -echo file220=%IS5_DOC%\CmdRef\auarf221.htm >> %FILEGROUP% -echo file221=%IS5_DOC%\CmdRef\auarf222.htm >> %FILEGROUP% -echo file222=%IS5_DOC%\CmdRef\auarf223.htm >> %FILEGROUP% -echo file223=%IS5_DOC%\CmdRef\auarf224.htm >> %FILEGROUP% -echo file224=%IS5_DOC%\CmdRef\auarf225.htm >> %FILEGROUP% -echo file225=%IS5_DOC%\CmdRef\auarf226.htm >> %FILEGROUP% -echo file226=%IS5_DOC%\CmdRef\auarf227.htm >> %FILEGROUP% -echo file227=%IS5_DOC%\CmdRef\auarf228.htm >> %FILEGROUP% -echo file228=%IS5_DOC%\CmdRef\auarf229.htm >> %FILEGROUP% -echo file229=%IS5_DOC%\CmdRef\auarf230.htm >> %FILEGROUP% -echo file230=%IS5_DOC%\CmdRef\auarf231.htm >> %FILEGROUP% -echo file231=%IS5_DOC%\CmdRef\auarf232.htm >> %FILEGROUP% -echo file232=%IS5_DOC%\CmdRef\auarf233.htm >> %FILEGROUP% -echo file233=%IS5_DOC%\CmdRef\auarf234.htm >> %FILEGROUP% -echo file234=%IS5_DOC%\CmdRef\auarf235.htm >> %FILEGROUP% -echo file235=%IS5_DOC%\CmdRef\auarf236.htm >> %FILEGROUP% -echo file236=%IS5_DOC%\CmdRef\auarf237.htm >> %FILEGROUP% -echo file237=%IS5_DOC%\CmdRef\auarf238.htm >> %FILEGROUP% -echo file238=%IS5_DOC%\CmdRef\auarf239.htm >> %FILEGROUP% -echo file239=%IS5_DOC%\CmdRef\auarf240.htm >> %FILEGROUP% -echo file240=%IS5_DOC%\CmdRef\auarf241.htm >> %FILEGROUP% -echo file241=%IS5_DOC%\CmdRef\auarf242.htm >> %FILEGROUP% -echo file242=%IS5_DOC%\CmdRef\auarf243.htm >> %FILEGROUP% -echo file243=%IS5_DOC%\CmdRef\auarf244.htm >> %FILEGROUP% -echo file244=%IS5_DOC%\CmdRef\auarf245.htm >> %FILEGROUP% -echo file245=%IS5_DOC%\CmdRef\auarf246.htm >> %FILEGROUP% -echo file246=%IS5_DOC%\CmdRef\auarf247.htm >> %FILEGROUP% -echo file247=%IS5_DOC%\CmdRef\auarf248.htm >> %FILEGROUP% -echo file248=%IS5_DOC%\CmdRef\auarf249.htm >> %FILEGROUP% -echo file249=%IS5_DOC%\CmdRef\auarf250.htm >> %FILEGROUP% -echo file250=%IS5_DOC%\CmdRef\auarf251.htm >> %FILEGROUP% -echo file251=%IS5_DOC%\CmdRef\auarf252.htm >> %FILEGROUP% -echo file252=%IS5_DOC%\CmdRef\auarf253.htm >> %FILEGROUP% -echo file253=%IS5_DOC%\CmdRef\auarf254.htm >> %FILEGROUP% -echo file254=%IS5_DOC%\CmdRef\auarf255.htm >> %FILEGROUP% -echo file255=%IS5_DOC%\CmdRef\auarf256.htm >> %FILEGROUP% -echo file256=%IS5_DOC%\CmdRef\auarf257.htm >> %FILEGROUP% -echo file257=%IS5_DOC%\CmdRef\auarf258.htm >> %FILEGROUP% -echo file258=%IS5_DOC%\CmdRef\auarf259.htm >> %FILEGROUP% -echo file259=%IS5_DOC%\CmdRef\auarf260.htm >> %FILEGROUP% -echo file260=%IS5_DOC%\CmdRef\auarf261.htm >> %FILEGROUP% -echo file261=%IS5_DOC%\CmdRef\auarf262.htm >> %FILEGROUP% -echo file262=%IS5_DOC%\CmdRef\auarf263.htm >> %FILEGROUP% -echo file263=%IS5_DOC%\CmdRef\auarf264.htm >> %FILEGROUP% -echo file264=%IS5_DOC%\CmdRef\auarf265.htm >> %FILEGROUP% -echo file265=%IS5_DOC%\CmdRef\auarf266.htm >> %FILEGROUP% -echo file266=%IS5_DOC%\CmdRef\auarf267.htm >> %FILEGROUP% -echo file267=%IS5_DOC%\CmdRef\auarf268.htm >> %FILEGROUP% -echo file268=%IS5_DOC%\CmdRef\auarf269.htm >> %FILEGROUP% -echo file269=%IS5_DOC%\CmdRef\auarf270.htm >> %FILEGROUP% -echo file270=%IS5_DOC%\CmdRef\auarf271.htm >> %FILEGROUP% -echo file271=%IS5_DOC%\CmdRef\auarf272.htm >> %FILEGROUP% -echo file272=%IS5_DOC%\CmdRef\auarf273.htm >> %FILEGROUP% -echo file273=%IS5_DOC%\CmdRef\auarf274.htm >> %FILEGROUP% -echo file274=%IS5_DOC%\CmdRef\auarf275.htm >> %FILEGROUP% -echo file275=%IS5_DOC%\CmdRef\auarf276.htm >> %FILEGROUP% -echo file276=%IS5_DOC%\CmdRef\auarf277.htm >> %FILEGROUP% -echo file277=%IS5_DOC%\CmdRef\auarf278.htm >> %FILEGROUP% -echo file278=%IS5_DOC%\CmdRef\auarf279.htm >> %FILEGROUP% -echo file279=%IS5_DOC%\CmdRef\auarf280.htm >> %FILEGROUP% -echo file280=%IS5_DOC%\CmdRef\auarf281.htm >> %FILEGROUP% -echo file281=%IS5_DOC%\CmdRef\auarf282.htm >> %FILEGROUP% -echo file282=%IS5_DOC%\CmdRef\auarf283.htm >> %FILEGROUP% -echo file283=%IS5_DOC%\CmdRef\auarf284.htm >> %FILEGROUP% -echo. >> %FILEGROUP% -echo [General] >> %FILEGROUP% -echo Type=FILELIST >> %FILEGROUP% -echo Version=1.00.000 >> %FILEGROUP% -goto :EOF - -rem -------------- Generate the Doc Misc file groups -------------------- - -:Doc_Misc_Files - -rem English -set FILEGROUP=Doc_Misc_English_Files.fgl -set IS5_LANG=en_US -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\en_US\Html -call :Generate_Doc_Misc_File_Group -copy %AFSROOT%\src\WINNT\license\lang\%IS5_LANG%.rtf %AFSROOT%\src\WINNT\install\InstallShield5\lang\%IS5_LANG%\license.rtf - -rem Japanese -set FILEGROUP=Doc_Misc_Japanese_Files.fgl -set IS5_LANG=ja_JP -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\ja_JP\Html -call :Generate_Doc_Misc_File_Group -copy %AFSROOT%\src\WINNT\license\lang\%IS5_LANG%.rtf %AFSROOT%\src\WINNT\install\InstallShield5\lang\%IS5_LANG%\license.rtf - -rem Korean -set FILEGROUP=Doc_Misc_Korean_Files.fgl -set IS5_LANG=ko_KR -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\ko_KR\Html -call :Generate_Doc_Misc_File_Group -copy %AFSROOT%\src\WINNT\license\lang\%IS5_LANG%.rtf %AFSROOT%\src\WINNT\install\InstallShield5\lang\%IS5_LANG%\license.rtf - -rem Trad_Chinese -set FILEGROUP=Doc_Misc_Trad_Chinese_Files.fgl -set IS5_LANG=zh_TW -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\zh_TW\Html -call :Generate_Doc_Misc_File_Group -copy %AFSROOT%\src\WINNT\license\lang\%IS5_LANG%.rtf %AFSROOT%\src\WINNT\install\InstallShield5\lang\%IS5_LANG%\license.rtf - -rem Simp_Chinese -set FILEGROUP=Doc_Misc_Simp_Chinese_Files.fgl -set IS5_LANG=zh_CN -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\zh_CN\Html -call :Generate_Doc_Misc_File_Group -copy %AFSROOT%\src\WINNT\license\lang\%IS5_LANG%.rtf %AFSROOT%\src\WINNT\install\InstallShield5\lang\%IS5_LANG%\license.rtf - -rem German -set FILEGROUP=Doc_Misc_German_Files.fgl -set IS5_LANG=de_DE -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\de_DE\Html -call :Generate_Doc_Misc_File_Group -copy %AFSROOT%\src\WINNT\license\lang\%IS5_LANG%.rtf %AFSROOT%\src\WINNT\install\InstallShield5\lang\%IS5_LANG%\license.rtf - -rem Spanish -set FILEGROUP=Doc_Misc_Spanish_Files.fgl -set IS5_LANG=es_ES -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\es_ES\Html -call :Generate_Doc_Misc_File_Group -copy %AFSROOT%\src\WINNT\license\lang\%IS5_LANG%.rtf %AFSROOT%\src\WINNT\install\InstallShield5\lang\%IS5_LANG%\license.rtf - -rem Portuguese -set FILEGROUP=Doc_Misc_Portuguese_Files.fgl -set IS5_LANG=pt_BR -set IS5_DOC=%IS5_DOCROOT%\install\Documentation\pt_BR\Html -call :Generate_Doc_Misc_File_Group -copy %AFSROOT%\src\WINNT\license\lang\%IS5_LANG%.rtf %AFSROOT%\src\WINNT\install\InstallShield5\lang\%IS5_LANG%\license.rtf - -goto Doc_Files - -:Generate_Doc_Misc_File_Group -echo [TopDir] > %FILEGROUP% -echo file0=%IS5_DOC%\banner.gif >> %FILEGROUP% -echo file1=%IS5_DOC%\books.gif >> %FILEGROUP% -echo file2=%IS5_DOC%\bot.gif >> %FILEGROUP% -echo file3=%IS5_DOC%\index.gif >> %FILEGROUP% -echo file4=%IS5_DOC%\index.htm >> %FILEGROUP% -echo file5=%IS5_DOC%\next.gif >> %FILEGROUP% -echo file6=%IS5_DOC%\prev.gif >> %FILEGROUP% -echo file7=%IS5_DOC%\toc.gif >> %FILEGROUP% -echo file8=%IS5_DOC%\top.gif >> %FILEGROUP% -echo file9=%AFSROOT%\src\WINNT\install\InstallShield5\lang\%IS5_LANG%\license.rtf >> %FILEGROUP% -echo. >> %FILEGROUP% -echo [General] >> %FILEGROUP% -echo Type=FILELIST >> %FILEGROUP% -echo Version=1.00.000 >> %FILEGROUP% -goto :EOF - -rem -------------- Doc_Files.fgl ------------------------------ - -:Doc_Files -echo [TopDir] > Doc_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\DocsUninst.dll >> Doc_Files.fgl -echo. >> Doc_Files.fgl -echo [General] >> Doc_Files.fgl -echo Type=FILELIST >> Doc_Files.fgl -echo Version=1.00.000 >> Doc_Files.fgl - - -rem -------------- Lang_English_Files.fgl ------------------------------ - -echo [TopDir] > Lang_English_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\afseventmsg_1033.dll >> Lang_English_Files.fgl -echo file1=%IS5_DEST%\root.server\usr\afs\bin\afs_setup_utils_1033.dll >> Lang_English_Files.fgl -echo file2=%IS5_DEST%\root.server\usr\afs\bin\afsserver_1033.dll >> Lang_English_Files.fgl -echo file3=%IS5_DEST%\root.server\usr\afs\bin\afssvrcfg_1033.dll >> Lang_English_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAccountManager_1033.dll >> Lang_English_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib_1033.dll >> Lang_English_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\TaAfsServerManager_1033.dll >> Lang_English_Files.fgl -echo file7=%IS5_DEST%\root.client\usr\vice\etc\afscreds_1033.dll >> Lang_English_Files.fgl -echo file8=%IS5_DEST%\root.client\usr\vice\etc\afs_config_1033.dll >> Lang_English_Files.fgl -echo file9=%IS5_DEST%\root.client\usr\vice\etc\afs_cpa_1033.dll >> Lang_English_Files.fgl -echo file10=%IS5_DEST%\root.client\usr\vice\etc\afs_shl_ext_1033.dll >> Lang_English_Files.fgl -echo file11=%IS5_HELP%\en_US\afs-nt.hlp >> Lang_English_Files.fgl -echo file12=%IS5_HELP%\en_US\afs-nt.cnt >> Lang_English_Files.fgl -echo file13=%IS5_HELP%\en_US\taafssvrmgr.cnt >> Lang_English_Files.fgl -echo file14=%IS5_HELP%\en_US\taafssvrmgr.hlp >> Lang_English_Files.fgl -echo file15=%IS5_HELP%\en_US\taafsusrmgr.cnt >> Lang_English_Files.fgl -echo file16=%IS5_HELP%\en_US\taafsusrmgr.hlp >> Lang_English_Files.fgl -echo file17=%IS5_HELP%\en_US\afs-cc.cnt >> Lang_English_Files.fgl -echo file18=%IS5_HELP%\en_US\afs-cc.hlp >> Lang_English_Files.fgl -echo file19=%IS5_HELP%\en_US\afs-light.cnt >> Lang_English_Files.fgl -echo file20=%IS5_HELP%\en_US\afs-light.hlp >> Lang_English_Files.fgl -echo file21=%IS5_HELP%\en_US\taafscfg.cnt >> Lang_English_Files.fgl -echo file22=%IS5_HELP%\en_US\taafscfg.hlp >> Lang_English_Files.fgl -echo. >> Lang_English_Files.fgl -echo [General] >> Lang_English_Files.fgl -echo Type=FILELIST >> Lang_English_Files.fgl -echo Version=1.00.000 >> Lang_English_Files.fgl - - -rem -------------- Lang_Simp_Chinese_Files.fgl ------------------------- - -echo [TopDir] > Lang_Simp_Chinese_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\afseventmsg_2052.dll >> Lang_Simp_Chinese_Files.fgl -echo file1=%IS5_DEST%\root.server\usr\afs\bin\afs_setup_utils_2052.dll >> Lang_Simp_Chinese_Files.fgl -echo file2=%IS5_DEST%\root.server\usr\afs\bin\afsserver_2052.dll >> Lang_Simp_Chinese_Files.fgl -echo file3=%IS5_DEST%\root.server\usr\afs\bin\afssvrcfg_2052.dll >> Lang_Simp_Chinese_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAccountManager_2052.dll >> Lang_Simp_Chinese_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib_2052.dll >> Lang_Simp_Chinese_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\TaAfsServerManager_2052.dll >> Lang_Simp_Chinese_Files.fgl -echo file7=%IS5_DEST%\root.client\usr\vice\etc\afscreds_2052.dll >> Lang_Simp_Chinese_Files.fgl -echo file8=%IS5_DEST%\root.client\usr\vice\etc\afs_config_2052.dll >> Lang_Simp_Chinese_Files.fgl -echo file9=%IS5_DEST%\root.client\usr\vice\etc\afs_cpa_2052.dll >> Lang_Simp_Chinese_Files.fgl -echo file10=%IS5_DEST%\root.client\usr\vice\etc\afs_shl_ext_2052.dll >> Lang_Simp_Chinese_Files.fgl -echo file11=%IS5_HELP%\zh_CN\afs-nt.hlp >> Lang_Simp_Chinese_Files.fgl -echo file12=%IS5_HELP%\zh_CN\afs-nt.cnt >> Lang_Simp_Chinese_Files.fgl -echo file13=%IS5_HELP%\zh_CN\taafssvrmgr.cnt >> Lang_Simp_Chinese_Files.fgl -echo file14=%IS5_HELP%\zh_CN\taafssvrmgr.hlp >> Lang_Simp_Chinese_Files.fgl -echo file15=%IS5_HELP%\zh_CN\taafsusrmgr.cnt >> Lang_Simp_Chinese_Files.fgl -echo file16=%IS5_HELP%\zh_CN\taafsusrmgr.hlp >> Lang_Simp_Chinese_Files.fgl -echo file17=%IS5_HELP%\zh_CN\afs-cc.cnt >> Lang_Simp_Chinese_Files.fgl -echo file18=%IS5_HELP%\zh_CN\afs-cc.hlp >> Lang_Simp_Chinese_Files.fgl -echo file19=%IS5_HELP%\zh_CN\afs-light.cnt >> Lang_Simp_Chinese_Files.fgl -echo file20=%IS5_HELP%\zh_CN\afs-light.hlp >> Lang_Simp_Chinese_Files.fgl -echo file21=%IS5_HELP%\zh_CN\taafscfg.cnt >> Lang_Simp_Chinese_Files.fgl -echo file22=%IS5_HELP%\zh_CN\taafscfg.hlp >> Lang_Simp_Chinese_Files.fgl -echo. >> Lang_Simp_Chinese_Files.fgl -echo [General] >> Lang_Simp_Chinese_Files.fgl -echo Type=FILELIST >> Lang_Simp_Chinese_Files.fgl -echo Version=1.00.000 >> Lang_Simp_Chinese_Files.fgl - - -rem -------------- Lang_Trad_Chinese_Files.fgl ------------------------- - -echo [TopDir] > Lang_Trad_Chinese_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\afseventmsg_1028.dll >> Lang_Trad_Chinese_Files.fgl -echo file1=%IS5_DEST%\root.server\usr\afs\bin\afs_setup_utils_1028.dll >> Lang_Trad_Chinese_Files.fgl -echo file2=%IS5_DEST%\root.server\usr\afs\bin\afsserver_1028.dll >> Lang_Trad_Chinese_Files.fgl -echo file3=%IS5_DEST%\root.server\usr\afs\bin\afssvrcfg_1028.dll >> Lang_Trad_Chinese_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAccountManager_1028.dll >> Lang_Trad_Chinese_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib_1028.dll >> Lang_Trad_Chinese_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\TaAfsServerManager_1028.dll >> Lang_Trad_Chinese_Files.fgl -echo file7=%IS5_DEST%\root.client\usr\vice\etc\afscreds_1028.dll >> Lang_Trad_Chinese_Files.fgl -echo file8=%IS5_DEST%\root.client\usr\vice\etc\afs_config_1028.dll >> Lang_Trad_Chinese_Files.fgl -echo file9=%IS5_DEST%\root.client\usr\vice\etc\afs_cpa_1028.dll >> Lang_Trad_Chinese_Files.fgl -echo file10=%IS5_DEST%\root.client\usr\vice\etc\afs_shl_ext_1028.dll >> Lang_Trad_Chinese_Files.fgl -echo file11=%IS5_HELP%\zh_TW\afs-nt.hlp >> Lang_Trad_Chinese_Files.fgl -echo file12=%IS5_HELP%\zh_TW\afs-nt.cnt >> Lang_Trad_Chinese_Files.fgl -echo file13=%IS5_HELP%\zh_TW\taafssvrmgr.cnt >> Lang_Trad_Chinese_Files.fgl -echo file14=%IS5_HELP%\zh_TW\taafssvrmgr.hlp >> Lang_Trad_Chinese_Files.fgl -echo file15=%IS5_HELP%\zh_TW\taafsusrmgr.cnt >> Lang_Trad_Chinese_Files.fgl -echo file16=%IS5_HELP%\zh_TW\taafsusrmgr.hlp >> Lang_Trad_Chinese_Files.fgl -echo file17=%IS5_HELP%\zh_TW\afs-cc.cnt >> Lang_Trad_Chinese_Files.fgl -echo file18=%IS5_HELP%\zh_TW\afs-cc.hlp >> Lang_Trad_Chinese_Files.fgl -echo file19=%IS5_HELP%\zh_TW\afs-light.cnt >> Lang_Trad_Chinese_Files.fgl -echo file20=%IS5_HELP%\zh_TW\afs-light.hlp >> Lang_Trad_Chinese_Files.fgl -echo file21=%IS5_HELP%\zh_TW\taafscfg.cnt >> Lang_Trad_Chinese_Files.fgl -echo file22=%IS5_HELP%\zh_TW\taafscfg.hlp >> Lang_Trad_Chinese_Files.fgl -echo. >> Lang_Trad_Chinese_Files.fgl -echo [General] >> Lang_Trad_Chinese_Files.fgl -echo Type=FILELIST >> Lang_Trad_Chinese_Files.fgl -echo Version=1.00.000 >> Lang_Trad_Chinese_Files.fgl - - -rem -------------- Lang_Korean_Files.fgl ------------------------------- - -echo [TopDir] > Lang_Korean_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\afseventmsg_1042.dll >> Lang_Korean_Files.fgl -echo file1=%IS5_DEST%\root.server\usr\afs\bin\afs_setup_utils_1042.dll >> Lang_Korean_Files.fgl -echo file2=%IS5_DEST%\root.server\usr\afs\bin\afsserver_1042.dll >> Lang_Korean_Files.fgl -echo file3=%IS5_DEST%\root.server\usr\afs\bin\afssvrcfg_1042.dll >> Lang_Korean_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAccountManager_1042.dll >> Lang_Korean_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib_1042.dll >> Lang_Korean_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\TaAfsServerManager_1042.dll >> Lang_Korean_Files.fgl -echo file7=%IS5_DEST%\root.client\usr\vice\etc\afscreds_1042.dll >> Lang_Korean_Files.fgl -echo file8=%IS5_DEST%\root.client\usr\vice\etc\afs_config_1042.dll >> Lang_Korean_Files.fgl -echo file9=%IS5_DEST%\root.client\usr\vice\etc\afs_cpa_1042.dll >> Lang_Korean_Files.fgl -echo file10=%IS5_DEST%\root.client\usr\vice\etc\afs_shl_ext_1042.dll >> Lang_Korean_Files.fgl -echo file11=%IS5_HELP%\ko_KR\afs-nt.hlp >> Lang_Korean_Files.fgl -echo file12=%IS5_HELP%\ko_KR\afs-nt.cnt >> Lang_Korean_Files.fgl -echo file13=%IS5_HELP%\ko_KR\taafssvrmgr.cnt >> Lang_Korean_Files.fgl -echo file14=%IS5_HELP%\ko_KR\taafssvrmgr.hlp >> Lang_Korean_Files.fgl -echo file15=%IS5_HELP%\ko_KR\taafsusrmgr.cnt >> Lang_Korean_Files.fgl -echo file16=%IS5_HELP%\ko_KR\taafsusrmgr.hlp >> Lang_Korean_Files.fgl -echo file17=%IS5_HELP%\ko_KR\afs-cc.cnt >> Lang_Korean_Files.fgl -echo file18=%IS5_HELP%\ko_KR\afs-cc.hlp >> Lang_Korean_Files.fgl -echo file19=%IS5_HELP%\ko_KR\afs-light.cnt >> Lang_Korean_Files.fgl -echo file20=%IS5_HELP%\ko_KR\afs-light.hlp >> Lang_Korean_Files.fgl -echo file21=%IS5_HELP%\ko_KR\taafscfg.cnt >> Lang_Korean_Files.fgl -echo file22=%IS5_HELP%\ko_KR\taafscfg.hlp >> Lang_Korean_Files.fgl -echo. >> Lang_Korean_Files.fgl -echo [General] >> Lang_Korean_Files.fgl -echo Type=FILELIST >> Lang_Korean_Files.fgl -echo Version=1.00.000 >> Lang_Korean_Files.fgl - - -rem -------------- Lang_Japanese_Files.fgl ----------------------------- - -echo [TopDir] > Lang_Japanese_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\afseventmsg_1041.dll >> Lang_Japanese_Files.fgl -echo file1=%IS5_DEST%\root.server\usr\afs\bin\afs_setup_utils_1041.dll >> Lang_Japanese_Files.fgl -echo file2=%IS5_DEST%\root.server\usr\afs\bin\afsserver_1041.dll >> Lang_Japanese_Files.fgl -echo file3=%IS5_DEST%\root.server\usr\afs\bin\afssvrcfg_1041.dll >> Lang_Japanese_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAccountManager_1041.dll >> Lang_Japanese_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib_1041.dll >> Lang_Japanese_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\TaAfsServerManager_1041.dll >> Lang_Japanese_Files.fgl -echo file7=%IS5_DEST%\root.client\usr\vice\etc\afscreds_1041.dll >> Lang_Japanese_Files.fgl -echo file8=%IS5_DEST%\root.client\usr\vice\etc\afs_config_1041.dll >> Lang_Japanese_Files.fgl -echo file9=%IS5_DEST%\root.client\usr\vice\etc\afs_cpa_1041.dll >> Lang_Japanese_Files.fgl -echo file10=%IS5_DEST%\root.client\usr\vice\etc\afs_shl_ext_1041.dll >> Lang_Japanese_Files.fgl -echo file11=%IS5_HELP%\ja_JP\afs-nt.hlp >> Lang_Japanese_Files.fgl -echo file12=%IS5_HELP%\ja_JP\afs-nt.cnt >> Lang_Japanese_Files.fgl -echo file13=%IS5_HELP%\ja_JP\taafssvrmgr.cnt >> Lang_Japanese_Files.fgl -echo file14=%IS5_HELP%\ja_JP\taafssvrmgr.hlp >> Lang_Japanese_Files.fgl -echo file15=%IS5_HELP%\ja_JP\taafsusrmgr.cnt >> Lang_Japanese_Files.fgl -echo file16=%IS5_HELP%\ja_JP\taafsusrmgr.hlp >> Lang_Japanese_Files.fgl -echo file17=%IS5_HELP%\ja_JP\afs-cc.cnt >> Lang_Japanese_Files.fgl -echo file18=%IS5_HELP%\ja_JP\afs-cc.hlp >> Lang_Japanese_Files.fgl -echo file19=%IS5_HELP%\ja_JP\afs-light.cnt >> Lang_Japanese_Files.fgl -echo file20=%IS5_HELP%\ja_JP\afs-light.hlp >> Lang_Japanese_Files.fgl -echo file21=%IS5_HELP%\ja_JP\taafscfg.cnt >> Lang_Japanese_Files.fgl -echo file22=%IS5_HELP%\ja_JP\taafscfg.hlp >> Lang_Japanese_Files.fgl -echo. >> Lang_Japanese_Files.fgl -echo [General] >> Lang_Japanese_Files.fgl -echo Type=FILELIST >> Lang_Japanese_Files.fgl -echo Version=1.00.000 >> Lang_Japanese_Files.fgl - - -rem -------------- Lang_German_Files.fgl ----------------------------- - -echo [TopDir] > Lang_German_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\afseventmsg_1032.dll >> Lang_German_Files.fgl -echo file1=%IS5_DEST%\root.server\usr\afs\bin\afs_setup_utils_1032.dll >> Lang_German_Files.fgl -echo file2=%IS5_DEST%\root.server\usr\afs\bin\afsserver_1032.dll >> Lang_German_Files.fgl -echo file3=%IS5_DEST%\root.server\usr\afs\bin\afssvrcfg_1032.dll >> Lang_German_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAccountManager_1032.dll >> Lang_German_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib_1032.dll >> Lang_German_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\TaAfsServerManager_1032.dll >> Lang_German_Files.fgl -echo file7=%IS5_DEST%\root.client\usr\vice\etc\afscreds_1032.dll >> Lang_German_Files.fgl -echo file8=%IS5_DEST%\root.client\usr\vice\etc\afs_config_1032.dll >> Lang_German_Files.fgl -echo file9=%IS5_DEST%\root.client\usr\vice\etc\afs_cpa_1032.dll >> Lang_German_Files.fgl -echo file10=%IS5_DEST%\root.client\usr\vice\etc\afs_shl_ext_1032.dll >> Lang_German_Files.fgl -echo file11=%IS5_HELP%\de_DE\afs-nt.hlp >> Lang_German_Files.fgl -echo file12=%IS5_HELP%\de_DE\afs-nt.cnt >> Lang_German_Files.fgl -echo file13=%IS5_HELP%\de_DE\taafssvrmgr.cnt >> Lang_German_Files.fgl -echo file14=%IS5_HELP%\de_DE\taafssvrmgr.hlp >> Lang_German_Files.fgl -echo file15=%IS5_HELP%\de_DE\taafsusrmgr.cnt >> Lang_German_Files.fgl -echo file16=%IS5_HELP%\de_DE\taafsusrmgr.hlp >> Lang_German_Files.fgl -echo file17=%IS5_HELP%\de_DE\afs-cc.cnt >> Lang_German_Files.fgl -echo file18=%IS5_HELP%\de_DE\afs-cc.hlp >> Lang_German_Files.fgl -echo file19=%IS5_HELP%\de_DE\afs-light.cnt >> Lang_German_Files.fgl -echo file20=%IS5_HELP%\de_DE\afs-light.hlp >> Lang_German_Files.fgl -echo file21=%IS5_HELP%\de_DE\taafscfg.cnt >> Lang_German_Files.fgl -echo file22=%IS5_HELP%\de_DE\taafscfg.hlp >> Lang_German_Files.fgl -echo. >> Lang_German_Files.fgl -echo [General] >> Lang_German_Files.fgl -echo Type=FILELIST >> Lang_German_Files.fgl -echo Version=1.00.000 >> Lang_German_Files.fgl - - -rem -------------- Lang_Spanish_Files.fgl ----------------------------- - -echo [TopDir] > Lang_Spanish_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\afseventmsg_1034.dll >> Lang_Spanish_Files.fgl -echo file1=%IS5_DEST%\root.server\usr\afs\bin\afs_setup_utils_1034.dll >> Lang_Spanish_Files.fgl -echo file2=%IS5_DEST%\root.server\usr\afs\bin\afsserver_1034.dll >> Lang_Spanish_Files.fgl -echo file3=%IS5_DEST%\root.server\usr\afs\bin\afssvrcfg_1034.dll >> Lang_Spanish_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAccountManager_1034.dll >> Lang_Spanish_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib_1034.dll >> Lang_Spanish_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\TaAfsServerManager_1034.dll >> Lang_Spanish_Files.fgl -echo file7=%IS5_DEST%\root.client\usr\vice\etc\afscreds_1034.dll >> Lang_Spanish_Files.fgl -echo file8=%IS5_DEST%\root.client\usr\vice\etc\afs_config_1034.dll >> Lang_Spanish_Files.fgl -echo file9=%IS5_DEST%\root.client\usr\vice\etc\afs_cpa_1034.dll >> Lang_Spanish_Files.fgl -echo file10=%IS5_DEST%\root.client\usr\vice\etc\afs_shl_ext_1034.dll >> Lang_Spanish_Files.fgl -echo file11=%IS5_HELP%\es_ES\afs-nt.hlp >> Lang_Spanish_Files.fgl -echo file12=%IS5_HELP%\es_ES\afs-nt.cnt >> Lang_Spanish_Files.fgl -echo file13=%IS5_HELP%\es_ES\taafssvrmgr.cnt >> Lang_Spanish_Files.fgl -echo file14=%IS5_HELP%\es_ES\taafssvrmgr.hlp >> Lang_Spanish_Files.fgl -echo file15=%IS5_HELP%\es_ES\taafsusrmgr.cnt >> Lang_Spanish_Files.fgl -echo file16=%IS5_HELP%\es_ES\taafsusrmgr.hlp >> Lang_Spanish_Files.fgl -echo file17=%IS5_HELP%\es_ES\afs-cc.cnt >> Lang_Spanish_Files.fgl -echo file18=%IS5_HELP%\es_ES\afs-cc.hlp >> Lang_Spanish_Files.fgl -echo file19=%IS5_HELP%\es_ES\afs-light.cnt >> Lang_Spanish_Files.fgl -echo file20=%IS5_HELP%\es_ES\afs-light.hlp >> Lang_Spanish_Files.fgl -echo file21=%IS5_HELP%\es_ES\taafscfg.cnt >> Lang_Spanish_Files.fgl -echo file22=%IS5_HELP%\es_ES\taafscfg.hlp >> Lang_Spanish_Files.fgl -echo. >> Lang_Spanish_Files.fgl -echo [General] >> Lang_Spanish_Files.fgl -echo Type=FILELIST >> Lang_Spanish_Files.fgl -echo Version=1.00.000 >> Lang_Spanish_Files.fgl - - -rem -------------- Lang_Portuguese_Files.fgl ----------------------------- - -echo [TopDir] > Lang_Portuguese_Files.fgl -echo file0=%IS5_DEST%\root.server\usr\afs\bin\afseventmsg_1046.dll >> Lang_Portuguese_Files.fgl -echo file1=%IS5_DEST%\root.server\usr\afs\bin\afs_setup_utils_1046.dll >> Lang_Portuguese_Files.fgl -echo file2=%IS5_DEST%\root.server\usr\afs\bin\afsserver_1046.dll >> Lang_Portuguese_Files.fgl -echo file3=%IS5_DEST%\root.server\usr\afs\bin\afssvrcfg_1046.dll >> Lang_Portuguese_Files.fgl -echo file4=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAccountManager_1046.dll >> Lang_Portuguese_Files.fgl -echo file5=%IS5_DEST%\root.server\usr\afs\bin\TaAfsAppLib_1046.dll >> Lang_Portuguese_Files.fgl -echo file6=%IS5_DEST%\root.server\usr\afs\bin\TaAfsServerManager_1046.dll >> Lang_Portuguese_Files.fgl -echo file7=%IS5_DEST%\root.client\usr\vice\etc\afscreds_1046.dll >> Lang_Portuguese_Files.fgl -echo file8=%IS5_DEST%\root.client\usr\vice\etc\afs_config_1046.dll >> Lang_Portuguese_Files.fgl -echo file9=%IS5_DEST%\root.client\usr\vice\etc\afs_cpa_1046.dll >> Lang_Portuguese_Files.fgl -echo file10=%IS5_DEST%\root.client\usr\vice\etc\afs_shl_ext_1046.dll >> Lang_Portuguese_Files.fgl -echo file11=%IS5_HELP%\pt_BR\afs-nt.hlp >> Lang_Portuguese_Files.fgl -echo file12=%IS5_HELP%\pt_BR\afs-nt.cnt >> Lang_Portuguese_Files.fgl -echo file13=%IS5_HELP%\pt_BR\taafssvrmgr.cnt >> Lang_Portuguese_Files.fgl -echo file14=%IS5_HELP%\pt_BR\taafssvrmgr.hlp >> Lang_Portuguese_Files.fgl -echo file15=%IS5_HELP%\pt_BR\taafsusrmgr.cnt >> Lang_Portuguese_Files.fgl -echo file16=%IS5_HELP%\pt_BR\taafsusrmgr.hlp >> Lang_Portuguese_Files.fgl -echo file17=%IS5_HELP%\pt_BR\afs-cc.cnt >> Lang_Portuguese_Files.fgl -echo file18=%IS5_HELP%\pt_BR\afs-cc.hlp >> Lang_Portuguese_Files.fgl -echo file19=%IS5_HELP%\pt_BR\afs-light.cnt >> Lang_Portuguese_Files.fgl -echo file20=%IS5_HELP%\pt_BR\afs-light.hlp >> Lang_Portuguese_Files.fgl -echo file21=%IS5_HELP%\pt_BR\taafscfg.cnt >> Lang_Portuguese_Files.fgl -echo file22=%IS5_HELP%\pt_BR\taafscfg.hlp >> Lang_Portuguese_Files.fgl -echo. >> Lang_Portuguese_Files.fgl -echo [General] >> Lang_Portuguese_Files.fgl -echo Type=FILELIST >> Lang_Portuguese_Files.fgl -echo Version=1.00.000 >> Lang_Portuguese_Files.fgl - - -rem -------------- Client_Afs_Header_Files.fgl -------------------------- - -echo [TopDir] > Client_Afs_Header_Files.fgl -echo file0=%IS5_INCL%\afs\afs_args.h >> Client_Afs_Header_Files.fgl -echo file1=%IS5_INCL%\afs\debug.h >> Client_Afs_Header_Files.fgl -echo file2=%IS5_INCL%\afs\param.h >> Client_Afs_Header_Files.fgl -echo file3=%IS5_INCL%\afs\afs_sysnames.h >> Client_Afs_Header_Files.fgl -echo file4=%IS5_INCL%\afs\permit_xprt.h >> Client_Afs_Header_Files.fgl -echo file5=%IS5_INCL%\afs\stds.h >> Client_Afs_Header_Files.fgl -echo file6=%IS5_INCL%\afs\icl.h >> Client_Afs_Header_Files.fgl -echo file7=%IS5_INCL%\afs\procmgmt.h >> Client_Afs_Header_Files.fgl -echo file8=%IS5_INCL%\afs\afsutil.h >> Client_Afs_Header_Files.fgl -echo file9=%IS5_INCL%\afs\assert.h >> Client_Afs_Header_Files.fgl -echo file10=%IS5_INCL%\afs\dirent.h >> Client_Afs_Header_Files.fgl -echo file11=%IS5_INCL%\afs\errors.h >> Client_Afs_Header_Files.fgl -echo file12=%IS5_INCL%\afs\itc.h >> Client_Afs_Header_Files.fgl -echo file13=%IS5_INCL%\afs\vice.h >> Client_Afs_Header_Files.fgl -echo file14=%IS5_INCL%\afs\pthread_glock.h >> Client_Afs_Header_Files.fgl -echo file15=%IS5_INCL%\afs\errmap_nt.h >> Client_Afs_Header_Files.fgl -echo file16=%IS5_INCL%\afs\dirpath.h >> Client_Afs_Header_Files.fgl -echo file17=%IS5_INCL%\afs\ktime.h >> Client_Afs_Header_Files.fgl -echo file18=%IS5_INCL%\afs\fileutil.h >> Client_Afs_Header_Files.fgl -echo file19=%IS5_INCL%\afs\secutil_nt.h >> Client_Afs_Header_Files.fgl -echo file20=%IS5_INCL%\afs\com_err.h >> Client_Afs_Header_Files.fgl -echo file21=%IS5_INCL%\afs\error_table.h >> Client_Afs_Header_Files.fgl -echo file22=%IS5_INCL%\afs\mit-sipb-cr.h >> Client_Afs_Header_Files.fgl -echo file23=%IS5_INCL%\afs\cmd.h >> Client_Afs_Header_Files.fgl -echo file24=%IS5_INCL%\afs\rxgen_consts.h >> Client_Afs_Header_Files.fgl -echo file25=%IS5_INCL%\afs\afsint.h >> Client_Afs_Header_Files.fgl -echo file26=%IS5_INCL%\afs\afscbint.h >> Client_Afs_Header_Files.fgl -echo file27=%IS5_INCL%\afs\audit.h >> Client_Afs_Header_Files.fgl -echo file28=%IS5_INCL%\afs\acl.h >> Client_Afs_Header_Files.fgl -echo file29=%IS5_INCL%\afs\prs_fs.h >> Client_Afs_Header_Files.fgl -echo file30=%IS5_INCL%\afs\afsd.h >> Client_Afs_Header_Files.fgl -echo file31=%IS5_INCL%\afs\cm.h >> Client_Afs_Header_Files.fgl -echo file32=%IS5_INCL%\afs\cm_buf.h >> Client_Afs_Header_Files.fgl -echo file33=%IS5_INCL%\afs\cm_cell.h >> Client_Afs_Header_Files.fgl -echo file34=%IS5_INCL%\afs\cm_config.h >> Client_Afs_Header_Files.fgl -echo file35=%IS5_INCL%\afs\cm_conn.h >> Client_Afs_Header_Files.fgl -echo file36=%IS5_INCL%\afs\cm_ioctl.h >> Client_Afs_Header_Files.fgl -echo file37=%IS5_INCL%\afs\cm_scache.h >> Client_Afs_Header_Files.fgl -echo file38=%IS5_INCL%\afs\cm_server.h >> Client_Afs_Header_Files.fgl -echo file39=%IS5_INCL%\afs\cm_user.h >> Client_Afs_Header_Files.fgl -echo file40=%IS5_INCL%\afs\cm_utils.h >> Client_Afs_Header_Files.fgl -echo file41=%IS5_INCL%\afs\fs_utils.h >> Client_Afs_Header_Files.fgl -echo file42=%IS5_INCL%\afs\krb.h >> Client_Afs_Header_Files.fgl -echo file43=%IS5_INCL%\afs\krb_prot.h >> Client_Afs_Header_Files.fgl -echo file44=%IS5_INCL%\afs\smb.h >> Client_Afs_Header_Files.fgl -echo file45=%IS5_INCL%\afs\smb3.h >> Client_Afs_Header_Files.fgl -echo file46=%IS5_INCL%\afs\smb_iocons.h >> Client_Afs_Header_Files.fgl -echo file47=%IS5_INCL%\afs\smb_ioctl.h >> Client_Afs_Header_Files.fgl -echo file48=%IS5_INCL%\afs\afsrpc.h >> Client_Afs_Header_Files.fgl -echo file49=%IS5_INCL%\afs\afssyscalls.h >> Client_Afs_Header_Files.fgl -echo file50=%IS5_INCL%\afs\pioctl_nt.h >> Client_Afs_Header_Files.fgl -echo file51=%IS5_INCL%\afs\auth.h >> Client_Afs_Header_Files.fgl -echo file52=%IS5_INCL%\afs\cellconfig.h >> Client_Afs_Header_Files.fgl -echo file53=%IS5_INCL%\afs\keys.h >> Client_Afs_Header_Files.fgl -echo file54=%IS5_INCL%\afs\ptserver.h >> Client_Afs_Header_Files.fgl -echo file55=%IS5_INCL%\afs\ptint.h >> Client_Afs_Header_Files.fgl -echo file56=%IS5_INCL%\afs\pterror.h >> Client_Afs_Header_Files.fgl -echo file57=%IS5_INCL%\afs\ptclient.h >> Client_Afs_Header_Files.fgl -echo file58=%IS5_INCL%\afs\prserver.h >> Client_Afs_Header_Files.fgl -echo file59=%IS5_INCL%\afs\print.h >> Client_Afs_Header_Files.fgl -echo file60=%IS5_INCL%\afs\prerror.h >> Client_Afs_Header_Files.fgl -echo file61=%IS5_INCL%\afs\prclient.h >> Client_Afs_Header_Files.fgl -echo file62=%IS5_INCL%\afs\kautils.h >> Client_Afs_Header_Files.fgl -echo file63=%IS5_INCL%\afs\kauth.h >> Client_Afs_Header_Files.fgl -echo file64=%IS5_INCL%\afs\kaport.h >> Client_Afs_Header_Files.fgl -echo file65=%IS5_INCL%\afs\vl_opcodes.h >> Client_Afs_Header_Files.fgl -echo file66=%IS5_INCL%\afs\vlserver.h >> Client_Afs_Header_Files.fgl -echo file67=%IS5_INCL%\afs\vldbint.h >> Client_Afs_Header_Files.fgl -echo file68=%IS5_INCL%\afs\usd.h >> Client_Afs_Header_Files.fgl -echo file69=%IS5_INCL%\afs\bubasics.h >> Client_Afs_Header_Files.fgl -echo file70=%IS5_INCL%\afs\butc.h >> Client_Afs_Header_Files.fgl -echo file71=%IS5_INCL%\afs\bumon.h >> Client_Afs_Header_Files.fgl -echo file72=%IS5_INCL%\afs\butm.h >> Client_Afs_Header_Files.fgl -echo file73=%IS5_INCL%\afs\tcdata.h >> Client_Afs_Header_Files.fgl -echo file74=%IS5_INCL%\afs\budb.h >> Client_Afs_Header_Files.fgl -echo file75=%IS5_INCL%\afs\budb_errs.h >> Client_Afs_Header_Files.fgl -echo file76=%IS5_INCL%\afs\budb_client.h >> Client_Afs_Header_Files.fgl -echo file77=%IS5_INCL%\afs\dir.h >> Client_Afs_Header_Files.fgl -echo file78=%IS5_INCL%\afs\fssync.h >> Client_Afs_Header_Files.fgl -echo file79=%IS5_INCL%\afs\ihandle.h >> Client_Afs_Header_Files.fgl -echo file80=%IS5_INCL%\afs\nfs.h >> Client_Afs_Header_Files.fgl -echo file81=%IS5_INCL%\afs\ntops.h >> Client_Afs_Header_Files.fgl -echo file82=%IS5_INCL%\afs\partition.h >> Client_Afs_Header_Files.fgl -echo file83=%IS5_INCL%\afs\viceinode.h >> Client_Afs_Header_Files.fgl -echo file84=%IS5_INCL%\afs\vnode.h >> Client_Afs_Header_Files.fgl -echo file85=%IS5_INCL%\afs\volume.h >> Client_Afs_Header_Files.fgl -echo file86=%IS5_INCL%\afs\voldefs.h >> Client_Afs_Header_Files.fgl -echo file87=%IS5_INCL%\afs\volser.h >> Client_Afs_Header_Files.fgl -echo file88=%IS5_INCL%\afs\volint.h >> Client_Afs_Header_Files.fgl -echo file89=%IS5_INCL%\afs\fs_stats.h >> Client_Afs_Header_Files.fgl -echo file90=%IS5_INCL%\afs\bosint.h >> Client_Afs_Header_Files.fgl -echo file91=%IS5_INCL%\afs\bnode.h >> Client_Afs_Header_Files.fgl -echo. >> Client_Afs_Header_Files.fgl -echo [General] >> Client_Afs_Header_Files.fgl -echo Type=FILELIST >> Client_Afs_Header_Files.fgl -echo Version=1.00.000 >> Client_Afs_Header_Files.fgl - - -rem -------------- Client_Rx_Header_Files.fgl --------------------------- - -echo [TopDir] > Client_Rx_Header_Files.fgl -echo file0=%IS5_INCL%\rx\rx.h >> Client_Rx_Header_Files.fgl -echo file1=%IS5_INCL%\rx\rx_packet.h >> Client_Rx_Header_Files.fgl -echo file2=%IS5_INCL%\rx\rx_user.h >> Client_Rx_Header_Files.fgl -echo file3=%IS5_INCL%\rx\rx_event.h >> Client_Rx_Header_Files.fgl -echo file4=%IS5_INCL%\rx\rx_queue.h >> Client_Rx_Header_Files.fgl -echo file5=%IS5_INCL%\rx\rx_globals.h >> Client_Rx_Header_Files.fgl -echo file6=%IS5_INCL%\rx\rx_clock.h >> Client_Rx_Header_Files.fgl -echo file7=%IS5_INCL%\rx\rx_misc.h >> Client_Rx_Header_Files.fgl -echo file8=%IS5_INCL%\rx\rx_multi.h >> Client_Rx_Header_Files.fgl -echo file9=%IS5_INCL%\rx\rx_null.h >> Client_Rx_Header_Files.fgl -echo file10=%IS5_INCL%\rx\rx_lwp.h >> Client_Rx_Header_Files.fgl -echo file11=%IS5_INCL%\rx\rx_pthread.h >> Client_Rx_Header_Files.fgl -echo file12=%IS5_INCL%\rx\rx_xmit_nt.h >> Client_Rx_Header_Files.fgl -echo file13=%IS5_INCL%\rx\xdr.h >> Client_Rx_Header_Files.fgl -echo file14=%IS5_INCL%\rx\rxkad.h >> Client_Rx_Header_Files.fgl -echo. >> Client_Rx_Header_Files.fgl -echo [General] >> Client_Rx_Header_Files.fgl -echo Type=FILELIST >> Client_Rx_Header_Files.fgl -echo Version=1.00.000 >> Client_Rx_Header_Files.fgl - - -rem -------------- Client_Main_Header_Files.fgl ------------------------- - -echo [TopDir] > Client_Main_Header_Files.fgl -echo file0=%IS5_INCL%\lock.h >> Client_Main_Header_Files.fgl -echo file1=%IS5_INCL%\lwp.h >> Client_Main_Header_Files.fgl -echo file2=%IS5_INCL%\preempt.h >> Client_Main_Header_Files.fgl -echo file3=%IS5_INCL%\timer.h >> Client_Main_Header_Files.fgl -echo file4=%IS5_INCL%\des.h >> Client_Main_Header_Files.fgl -echo file5=%IS5_INCL%\des_conf.h >> Client_Main_Header_Files.fgl -echo file6=%IS5_INCL%\mit-cpyright.h >> Client_Main_Header_Files.fgl -echo file7=%IS5_INCL%\des_odd.h >> Client_Main_Header_Files.fgl -echo file8=%IS5_INCL%\crypt.h >> Client_Main_Header_Files.fgl -echo file9=%IS5_INCL%\pthread.h >> Client_Main_Header_Files.fgl -echo file10=%IS5_INCL%\dbrpc.h >> Client_Main_Header_Files.fgl -echo file11=%IS5_INCL%\basic.h >> Client_Main_Header_Files.fgl -echo file12=%IS5_INCL%\osidebug.h >> Client_Main_Header_Files.fgl -echo file13=%IS5_INCL%\osiltype.h >> Client_Main_Header_Files.fgl -echo file14=%IS5_INCL%\osistatl.h >> Client_Main_Header_Files.fgl -echo file15=%IS5_INCL%\trylock.h >> Client_Main_Header_Files.fgl -echo file16=%IS5_INCL%\main.h >> Client_Main_Header_Files.fgl -echo file17=%IS5_INCL%\osibasel.h >> Client_Main_Header_Files.fgl -echo file18=%IS5_INCL%\osifd.h >> Client_Main_Header_Files.fgl -echo file19=%IS5_INCL%\osiqueue.h >> Client_Main_Header_Files.fgl -echo file20=%IS5_INCL%\osiutils.h >> Client_Main_Header_Files.fgl -echo file21=%IS5_INCL%\osi.h >> Client_Main_Header_Files.fgl -echo file22=%IS5_INCL%\osidb.h >> Client_Main_Header_Files.fgl -echo file23=%IS5_INCL%\osilog.h >> Client_Main_Header_Files.fgl -echo file24=%IS5_INCL%\osisleep.h >> Client_Main_Header_Files.fgl -echo file25=%IS5_INCL%\perf.h >> Client_Main_Header_Files.fgl -echo file26=%IS5_INCL%\ubik.h >> Client_Main_Header_Files.fgl -echo file27=%IS5_INCL%\ubik_int.h >> Client_Main_Header_Files.fgl -echo. >> Client_Main_Header_Files.fgl -echo [General] >> Client_Main_Header_Files.fgl -echo Type=FILELIST >> Client_Main_Header_Files.fgl -echo Version=1.00.000 >> Client_Main_Header_Files.fgl - - -rem -------------- Client_Sample_Files.fgl ------------------------------ - -echo [TopDir] > Client_Sample_Files.fgl -echo file0=%IS5_WINNT%\afsd\sample\token.c >> Client_Sample_Files.fgl -echo. >> Client_Sample_Files.fgl -echo [General] >> Client_Sample_Files.fgl -echo Type=FILELIST >> Client_Sample_Files.fgl -echo Version=1.00.000 >> Client_Sample_Files.fgl - -:EOF diff --git a/src/WINNT/install/InstallShield5/GenIS5.ipr.bat b/src/WINNT/install/InstallShield5/GenIS5.ipr.bat deleted file mode 100644 index 312e22a0a7..0000000000 --- a/src/WINNT/install/InstallShield5/GenIS5.ipr.bat +++ /dev/null @@ -1,67 +0,0 @@ -@echo off -rem Copyright 2000, International Business Machines Corporation and others. -rem All Rights Reserved. -rem -rem This software has been released under the terms of the IBM Public -rem License. For details, see the LICENSE file in the top-level source -rem directory or online at http://www.openafs.org/dl/license10.html - -echo [Language] > InstallShield5.ipr -echo LanguageSupport0=0009 >> InstallShield5.ipr -echo LanguageSupport1=0416 >> InstallShield5.ipr -echo LanguageSupport2=0804 >> InstallShield5.ipr -echo LanguageSupport3=0404 >> InstallShield5.ipr -echo LanguageSupport4=0007 >> InstallShield5.ipr -echo LanguageSupport5=0011 >> InstallShield5.ipr -echo LanguageSupport6=0012 >> InstallShield5.ipr -echo LanguageSupport7=000a >> InstallShield5.ipr -echo. >> InstallShield5.ipr -echo [OperatingSystem] >> InstallShield5.ipr -echo OSSupport=0000000000010000 >> InstallShield5.ipr -echo. >> InstallShield5.ipr -echo [Data] >> InstallShield5.ipr -echo CurrentMedia=OpenAFS >> InstallShield5.ipr -echo set_mifserial= >> InstallShield5.ipr -echo ProductName=OpenAFS for Windows >> InstallShield5.ipr -echo CurrentComponentDef=Default.cdf >> InstallShield5.ipr -echo set_dlldebug=No >> InstallShield5.ipr -echo AppExe= >> InstallShield5.ipr -echo DevEnvironment=Microsoft Visual C++ >> InstallShield5.ipr -echo set_mif=No >> InstallShield5.ipr -echo set_testmode=No >> InstallShield5.ipr -echo Instructions=Instructions.txt >> InstallShield5.ipr -echo EmailAddresss= >> InstallShield5.ipr -echo SummaryText= >> InstallShield5.ipr -echo Department= >> InstallShield5.ipr -echo Type=Generic Application >> InstallShield5.ipr -echo Author= >> InstallShield5.ipr -echo HomeURL= >> InstallShield5.ipr -echo InstallRoot=. >> InstallShield5.ipr -echo set_level=Level 3 >> InstallShield5.ipr -echo InstallationGUID=c982a6e4-4252-11d2-852e-0000b459dea3 >> InstallShield5.ipr -echo Version=1.00.000 >> InstallShield5.ipr -echo set_miffile=Status.mif >> InstallShield5.ipr -echo set_args= >> InstallShield5.ipr -echo set_maxerr=50 >> InstallShield5.ipr -echo Notes=Notes.txt >> InstallShield5.ipr -echo CurrentFileGroupDef=Default.fdf >> InstallShield5.ipr -echo set_dllcmdline= >> InstallShield5.ipr -echo set_warnaserr=No >> InstallShield5.ipr -echo Copyright= >> InstallShield5.ipr -echo set_preproc= >> InstallShield5.ipr -echo Category= >> InstallShield5.ipr -echo CurrentPlatform= >> InstallShield5.ipr -echo set_compileb4build=No >> InstallShield5.ipr -echo set_crc=Yes >> InstallShield5.ipr -echo set_maxwarn=50 >> InstallShield5.ipr -echo Description=Description.txt >> InstallShield5.ipr -echo CompanyName=OpenAFS >> InstallShield5.ipr -echo CurrentLanguage=English >> InstallShield5.ipr -echo. >> InstallShield5.ipr -echo [MediaInfo] >> InstallShield5.ipr -echo mediadata0=OpenAFS/Media\OpenAFS >> InstallShield5.ipr -echo. >> InstallShield5.ipr -echo [General] >> InstallShield5.ipr -echo Type=INSTALLMAIN >> InstallShield5.ipr -echo Version=1.20.000 >> InstallShield5.ipr - diff --git a/src/WINNT/install/InstallShield5/HowToSetTheVersion.txt b/src/WINNT/install/InstallShield5/HowToSetTheVersion.txt deleted file mode 100755 index 70537ce794..0000000000 --- a/src/WINNT/install/InstallShield5/HowToSetTheVersion.txt +++ /dev/null @@ -1,30 +0,0 @@ -Copyright 2000, International Business Machines Corporation and others. -All Rights Reserved. -This software has been released under the terms of the IBM Public -License. For details, see the LICENSE file in the top-level source -directory or online at http://www.openafs.org/dl/license10.html -HOW TO SET THE AFS FOR WINDOWS VERSION INFORMATION - -Set AFSPRODUCT_VERSION in the following files: -src\config\NTMakefile.i386_win95 -src\config\NTMakefile.i386_nt40 - -The format of this variable should be -x.y.z.p or x.y.z p - -x= major verson (1-9) -y= minor verson (1-9) -z.p= patch level z=(1-9) p=(1-99 or a-z) - -For example: -AFSPRODUCT_VERSION=1.1.1 a -AFSPRODUCT_VERSION=1.1.1.1 -AFSPRODUCT_VERSION=1.1.101 -AFSPRODUCT_VERSION=1.1.1a - -These examples represent different forms of the same version. -However the version will be displayed to the user as they are shown! - - - - diff --git a/src/WINNT/install/InstallShield5/NTMakefile b/src/WINNT/install/InstallShield5/NTMakefile deleted file mode 100644 index 1323794028..0000000000 --- a/src/WINNT/install/InstallShield5/NTMakefile +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright 2000, International Business Machines Corporation and others. -# All Rights Reserved. -# -# This software has been released under the terms of the IBM Public -# License. For details, see the LICENSE file in the top-level source -# directory or online at http://www.openafs.org/dl/license10.html - -RELDIR=WINNT\install\InstallShield5 -!INCLUDE ..\..\..\config\NTMakefile.$(SYS_NAME) -!INCLUDE ..\..\..\config\NTMakefile.version - -# Install comments -# Don't use '=' in the following strings! -# WELCOMEMESSAGE=Display during installation process -# AFSBUILDCOMMENTS=Displayed in properity page for install file -# CELLSERVDB_CONFIGNAME = name of configuration file (ThisCell) - -CELLSERVDB_CONFIGNAME=afsdcell.ini -WELCOMEMESSAGE=Default Configuration Information:\nBuild:*DatE* *TimE* Ver:$(AFSPRODUCT_VERSION)\nCellname:$(CELLNAME_DEFAULT)\nCellSrvDB:$(CELLSERVDB_INSTALL) -AFSBUILDCOMMENTS=Build:*DatE* *TimE* CellServDB:$(CELLSERVDB_INSTALL) - -#CHECK which OS we are using to avoid using the wrong options -!IF (([$(DESTDIR)\bin\util_cr.exe _ xp w2])==1) -XCOPY= xcopy /s/e/y -!ELSE -XCOPY= xcopy /s/e -!ENDIF - -############################################################################ - -prep: AFS_component_version_number.txt - $(DESTDIR)\bin\util_cr.exe } "$(AFSPRODUCT_VERSION)" ".\lang\en_US\value.txt" "$(OUT)\lang\en_US\value.shl" - $(DESTDIR)\bin\util_cr.exe } "$(AFSPRODUCT_VERSION)" "default.txt" "default.rge" - $(DESTDIR)\bin\util_cr.exe @ "$(OUT)\lang\en_US\value.shl" "[DATA] CELLSERVDB_CONFIGNAME=$(CELLSERVDB_CONFIGNAME)" - $(DESTDIR)\bin\util_cr.exe @ "$(OUT)\lang\en_US\value.shl" "[DATA] CELLNAME_DEFAULT=$(CELLNAME_DEFAULT)" - $(DESTDIR)\bin\util_cr.exe @ "$(OUT)\lang\en_US\value.shl" "[DATA] CELLSERVDB_INSTALL=$(CELLSERVDB_INSTALL)" - $(DESTDIR)\bin\util_cr.exe @ "$(OUT)\lang\en_US\value.shl" "[DATA] CELLSERVDB_WEB=$(CELLSERVDB_WEB)" -!IF "$(WELCOMEMESSAGE)" != "" - $(DESTDIR)\bin\util_cr.exe @ "$(OUT)\lang\en_US\value.shl" "[DATA] WELCOME_MESSAGE=$(WELCOMEMESSAGE)" -!ENDIF -! IF ((EXIST("$(ISWEB)")) &&("$(ISWEB)"!="")) - $(DESTDIR)\bin\util_cr.exe @ "$(OUT)\packageweb.pfw" "[Options] Version=$(AFSPRODUCT_VERSION)" - $(DESTDIR)\bin\util_cr.exe @ "$(OUT)\packageweb.pfw" "[Options] Comments=$(AFSBUILDCOMMENTS)" - $(DESTDIR)\bin\util_cr.exe @ "$(OUT)\packageweb.pfw" "[Options] ApplicationName=AFSforWindows" - $(DESTDIR)\bin\util_cr.exe @ "$(OUT)\packageweb.pfw" "[Options] Company=Open AFS" - $(DESTDIR)\bin\util_cr.exe @ "$(OUT)\packageweb.pfw" "[Options] Title=Open AFS for Windows" - $(DESTDIR)\bin\util_cr.exe @ "$(OUT)\packageweb.pfw" "[Options] OutputSpec="$(DESTDIR)\WinInstall\PackageWeb\AFSforWindows.exe" -! ENDIF - CreateISDirTree.bat - ScatterFiles.bat - CreateGeneratedFiles.bat - CompileScript.bat - $(COPY) $(SYSTEMROOT)\SYSTEM32\wininet.dll ".\Setup Files\Compressed Files\0009-English\Intel 32\." - $(COPY) $(SYSTEMROOT)\SYSTEM32\shlwapi.dll ".\Setup Files\Compressed Files\0009-English\Intel 32\." - $(COPY) $(DESTDIR)\WinInstall\Config\_isuser.dll ".\Setup Files\Compressed Files\0009-English\Intel 32\." - $(COPY) $(DESTDIR)\WinInstall\Config\getwebdll.dll ".\Setup Files\Compressed Files\0009-English\Intel 32\." - $(COPY) $(DESTDIR)\WinInstall\Config\$(CELLSERVDB_INSTALL) ".\Setup Files\Compressed Files\0009-English\Intel 32\$(CELLSERVDB_CONFIGNAME)" - $(DESTDIR)\bin\util_cr.exe ~ ".\Setup Files\Compressed Files\0009-English\Intel 32\$(CELLSERVDB_CONFIGNAME)" - $(DESTDIR)\bin\util_cr.exe ~ ".\Setup Files\Compressed Files\0009-English\Intel 32\_ISUSER.DLL" - $(DESTDIR)\bin\util_cr.exe ~ ".\Setup Files\Compressed Files\0009-English\Intel 32\shlwapi.DLL" - $(DESTDIR)\bin\util_cr.exe ~ ".\Setup Files\Compressed Files\0009-English\Intel 32\wininet.DLL" - $(DESTDIR)\bin\util_cr.exe ~ ".\Setup Files\Compressed Files\0009-English\Intel 32\GETWEBDLL.DLL" - -build: - BuildSetup.bat -!IF ((EXIST("$(ISWEB)")) &&("$(ISWEB)"!="")) -! IF (!EXIST($(DESTDIR)\Wininstall\PackageWeb)) - $(MKDIR) $(DESTDIR)\Wininstall\PackageWeb -! ENDIF - $(DEL) /q $(DESTDIR)\Wininstall\PackageWeb\*.* - $(ISWEB)\Pftwwiz.exe $(SRT)PackageWeb.pfw -s -a -!ENDIF - $(XCOPY) Media\OpenAFS\DiskIm~1\disk1\*.* $(DESTDIR)\WinInstall - copy AFS_component_version_number.txt $(DESTDIR)\WinInstall\Version.txt - $(DEL) /q "Media\OpenAFS\Disk Images\disk1\*.*" -install: prep build - -mkdir: diff --git a/src/WINNT/install/InstallShield5/PackageWeb.pfw b/src/WINNT/install/InstallShield5/PackageWeb.pfw deleted file mode 100644 index ca9a7a5f7e..0000000000 --- a/src/WINNT/install/InstallShield5/PackageWeb.pfw +++ /dev/null @@ -1,267 +0,0 @@ -[PackageForTheWeb] -Version=2.0 - -[Options] -Title=OpenAFS for Windows -Company=OpenAFS -CompanyEMail=openafs-info@openafs.org -BasePath=.\Media\OpenAFS\Disk Images -ImportPath=.\Media\OpenAFS -UseRTF=0 -SaveFiles=0 -SubFolders=1 -ApplicationName=AFSforWindows -Description= -Comments=Build:11/07/01 10:26 CellServDB: -Notice= -Version=1.2.2 a -OutputSpec=Y:\DEST\WinInstall\PackageWeb\AFSforWindows.exe -GUIDs=0 -Type=2 -Compress=1 -Sign=0 -Transfer=0 -Files=33 - -[Engine] -Setup=Disk1\Setup.exe - -[Web Page] -Generate=1 -Template= -MSClient= -NClient= - -[Runtime] -Welcome= -License= -Prompt= -Password= -DefaultPath= -Language=English -WindowStyle=0 -Options=19 -Execute=Disk1\Setup.exe -CmdLine=/SMS - -[Extension] -Server= -Calls=0 - -[Code Signing] -CompanyURL= -SpecFile= -KeyFile= -Method=0 - -; ~~~~~~~~~~ File Section ~~~~~~~~~~~ -[SubFolders] -Count=10 -Folder1=Disk1 -Folder2=Disk1\setupdir\0009 -Folder3=Disk1\setupdir\0416 -Folder4=Disk1\setupdir\0804 -Folder5=Disk1\setupdir\0404 -Folder6=Disk1\setupdir\0007 -Folder7=Disk1\setupdir\0011 -Folder8=Disk1\setupdir\0012 -Folder9=Disk1\setupdir\000a -Folder10=Disk1\License - -[File 1] -Name=_ISDel.exe -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=589825 -Disk=0 - -[File 2] -Name=Setup.exe -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=589825 -Disk=0 - -[File 3] -Name=_inst32i.ex_ -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=524289 -Disk=0 - -[File 4] -Name=os.dat -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=1 -Disk=0 - -[File 5] -Name=lang.dat -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=1 -Disk=0 - -[File 6] -Name=_Setup.dll -Path=.\Media\OpenAFS\Disk Images\Disk1\setupdir\0009\ -Flags=655377 -Disk=0 - -[File 7] -Name=_Setup.dll -Path=.\Media\OpenAFS\Disk Images\Disk1\setupdir\0416\ -Flags=655377 -Disk=0 - -[File 8] -Name=_Setup.dll -Path=.\Media\OpenAFS\Disk Images\Disk1\setupdir\0804\ -Flags=655377 -Disk=0 - -[File 9] -Name=_Setup.dll -Path=.\Media\OpenAFS\Disk Images\Disk1\setupdir\0404\ -Flags=655377 -Disk=0 - -[File 10] -Name=_Setup.dll -Path=.\Media\OpenAFS\Disk Images\Disk1\setupdir\0007\ -Flags=655377 -Disk=0 - -[File 11] -Name=_Setup.dll -Path=.\Media\OpenAFS\Disk Images\Disk1\setupdir\0011\ -Flags=655377 -Disk=0 - -[File 12] -Name=_Setup.dll -Path=.\Media\OpenAFS\Disk Images\Disk1\setupdir\0012\ -Flags=655377 -Disk=0 - -[File 13] -Name=_Setup.dll -Path=.\Media\OpenAFS\Disk Images\Disk1\setupdir\000a\ -Flags=655377 -Disk=0 - -[File 14] -Name=setup.ins -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=1 -Disk=0 - -[File 15] -Name=_sys1.hdr -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=2097153 -Disk=0 - -[File 16] -Name=_sys1.cab -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=2097153 -Disk=0 - -[File 17] -Name=_user1.hdr -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=2097153 -Disk=0 - -[File 18] -Name=_user1.cab -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=2097153 -Disk=0 - -[File 19] -Name=DATA.TAG -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=1 -Disk=0 - -[File 20] -Name=SETUP.INI -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=1 -Disk=0 - -[File 21] -Name=setup.lid -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=1 -Disk=0 - -[File 22] -Name=setup.bmp -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=1 -Disk=0 - -[File 23] -Name=data1.hdr -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=2097153 -Disk=0 - -[File 24] -Name=data1.cab -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=2097153 -Disk=0 - -[File 25] -Name=layout.bin -Path=.\Media\OpenAFS\Disk Images\Disk1\ -Flags=1 -Disk=0 - -[File 26] -Name=en_US.rtf -Path=.\Media\OpenAFS\Disk Images\Disk1\License\ -Flags=1 -Disk=0 - -[File 27] -Name=ja_JP.rtf -Path=.\Media\OpenAFS\Disk Images\Disk1\License\ -Flags=1 -Disk=0 - -[File 28] -Name=ko_KR.rtf -Path=.\Media\OpenAFS\Disk Images\Disk1\License\ -Flags=1 -Disk=0 - -[File 29] -Name=zh_CN.rtf -Path=.\Media\OpenAFS\Disk Images\Disk1\License\ -Flags=1 -Disk=0 - -[File 30] -Name=zh_TW.rtf -Path=.\Media\OpenAFS\Disk Images\Disk1\License\ -Flags=1 -Disk=0 - -[File 31] -Name=pt_BR.rtf -Path=.\Media\OpenAFS\Disk Images\Disk1\License\ -Flags=1 -Disk=0 - -[File 32] -Name=es_ES.rtf -Path=.\Media\OpenAFS\Disk Images\Disk1\License\ -Flags=1 -Disk=0 - -[File 33] -Name=de_DE.rtf -Path=.\Media\OpenAFS\Disk Images\Disk1\License\ -Flags=1 -Disk=0 diff --git a/src/WINNT/install/InstallShield5/README.TXT b/src/WINNT/install/InstallShield5/README.TXT deleted file mode 100755 index fd223405fd..0000000000 --- a/src/WINNT/install/InstallShield5/README.TXT +++ /dev/null @@ -1,94 +0,0 @@ -Copyright 2000, International Business Machines Corporation and others. -All Rights Reserved. - -This software has been released under the terms of the IBM Public -License. For details, see the LICENSE file in the top-level source -directory or online at http://www.openafs.org/dl/license10.html - -HOW TO USE THIS MESS - -TO EDIT THE IS5 FILES - -If you need to modify the InstallShield project files, follow these steps: - -0) Go to the src dir version of the install files. - -1) Run the batch file CreateISDirs.bat - This will create the directories that IS needs. We can't store these - dirs in CML because the directory names contain spaces. - -2) Run the batch file ScatterFiles.bat - This will copy the IS files that are in the main install dir to the - appropriate IS dirs. - -3) Run the batch file CreateGeneratedFiles.bat - This will run other batch files that will generate certain IS files that - we can't use directly. This is because the IS IDE puts paths in those - files that are relative to the machine the IDE is running on. If some - other person doing a build used a different drive mapping to get at the - build tree, the IS build would fail. These batch files will generate the - IS files such that the paths will be relative to the person doing the - build. - -4) Run InstallShield and load the InstallShield5.ipr project file. - It is called InstallShield5.ipr, and not something more appropriate like - TransarcAFS.ipr, because IS requires that the project name match the - name of the directory in which the project lives. - -5) Do whatever it is you need to do to the IS5 project. - -6) CML edit the files in the main install dir. - -7) If you changed the file groups, you must go into the File Groups dir and - modify the GenFileGroups.bat file. If you changed an existing file group, - then you must make the change again in the batch file. If you have deleted - a file group, then you must delete it from the batch file. If you added a - group, then add it to the batch file. - -7) Run the batch file GatherFiles.bat. - This will get all the IS5 files out of their IS5 dirs and copy them into - the main install dir. - -8) If you have added or deleted file groups, edit the batch file DelISDirTree.bat. - It removes the file group files, so modify its list to match what currently - is in use. - -9) Run the batch file DelISDirTree.bat. - This will delete all of the IS dirs. Some of the dirs, like the media build - report dirs, are always removed. Most other dirs are removed only if they - are empty. Any dirs not removed after running the batch file contain files - that we previously didn't know about, so IS had some reason to create them - for the first time. You will have to determine if the file should be added - to cml. If it should be added, then check to see if it contains path names. - If it does, then you must create a batch file to generate this new file. - Look at GenFileGroups.bat for an example of how to do that. In either case - you have a new file to add to the build tree, either the new file IS made or - your batch file that generates the IS file. Copy this file to the main - install dir (rename it if it clashes with a file already there), and modify - ScatterFiles.bat, GatherFiles.bat, and DelISDirTree.bat to include the new - file. - - Also, if you had to create a batch file to generate the IS file, then modify - CreateGeneratedFiles.bat to include a call to your batch file. - -10) Do a cml close. If you want to diff the IS5 files, do so only on the setup.rul - file. IS5 reoriganizes most other files more or less randomly each time - they are saved. It's easist to just edit all the files and then check in all - of them. However, if you know IS well and you know which files your changes - have affected, then only check in those files. - - - -HOW TO BUILD THE SETUP PROJECT - -0) Go to the obj dir version of the install files. - -1) To build the distribution type: - nmake /f NTMakfile install - - If the build fails, you may not have the environment variable IS5ROOT - defined. Define it and try again. - - If it still fails, then you're on your own. Use your excellent debugging - skills to fix the problem. - diff --git a/src/WINNT/install/InstallShield5/ScatterFiles.bat b/src/WINNT/install/InstallShield5/ScatterFiles.bat deleted file mode 100644 index 4f2ae6e657..0000000000 --- a/src/WINNT/install/InstallShield5/ScatterFiles.bat +++ /dev/null @@ -1,47 +0,0 @@ -@echo off -rem Copyright 2000, International Business Machines Corporation and others. -rem All Rights Reserved. -rem -rem This software has been released under the terms of the IBM Public -rem License. For details, see the LICENSE file in the top-level source -rem directory or online at http://www.openafs.org/dl/license10.html - -rem This file copies the IS5 files from the CML dir to the IS5 dirs. - -echo Populating the IS dir tree... - -copy Default.cdf "Component Definitions" -copy Default.fgl "Component Definitions" - -copy Default.fdf "File Groups" -copy GenFileGroups.bat "File Groups" - -copy GenDefault.mda.bat "Media\OpenAFS" - -copy Default.rge "Registry Entries" - -copy setup.rul "Script Files" - -rem Only copy this file when NOT doing a WSPP build -if not defined AFSBLD_IS_WSPP copy setup.bmp "Setup Files\Uncompressed Files\Language Independent\OS Independent" -if not defined AFSBLD_IS_WSPP copy _isuser.dll "Setup Files\Uncompressed Files\Language Independent\OS Independent" - -copy %AFSROOT%\DEST\root.server\usr\afs\bin\InstallUtils.dll "Setup Files\Compressed Files\Language Independent\OS Independent" -copy %AFSROOT%\DEST\root.server\usr\afs\bin\afs_setup_utils_*.dll "Setup Files\Compressed Files\Language Independent\OS Independent" - -copy Default.shell "Shell Objects\Default.shl" - -copy Default.shl "String Tables" - -copy lang\en_US\value.shl "String Tables\0009-English" -copy lang\ja_JP\value.shl "String Tables\0011-Japanese" -copy lang\ko_KR\value.shl "String Tables\0012-Korean" -copy lang\zh_TW\value.shl "String Tables\0404-Chinese (Taiwan)" -copy lang\zh_CN\value.shl "String Tables\0804-Chinese (PRC)" -copy lang\de_DE\value.shl "String Tables\0007-German" -copy lang\pt_BR\value.shl "String Tables\0416-Portuguese (Brazilian)" -copy lang\es_ES\value.shl "String Tables\000a-Spanish" - -copy Build.tsb "Text Substitutions" -copy Setup.tsb "Text Substitutions" - diff --git a/src/WINNT/install/InstallShield5/Setup.tsb b/src/WINNT/install/InstallShield5/Setup.tsb deleted file mode 100644 index e5a3252493..0000000000 --- a/src/WINNT/install/InstallShield5/Setup.tsb +++ /dev/null @@ -1,131 +0,0 @@ -[] -KeyType=3 -Value= - -[] -KeyType=3 -Value= - -[] -KeyType=3 -Value= - -[] -KeyType=4 -Value= - -[] -KeyType=4 -Value= - -[] -KeyType=4 -Value= - -[] -Value= -KeyType=3 - -[] -KeyType=3 -Value= - -[] -KeyType=4 -Value= - -[] -KeyType=4 -Value= - -[] -KeyType=4 -Value= - -[] -Value= -KeyType=3 - -[] -KeyType=4 -Value= - -[] -KeyType=4 -Value= - -[Data] -Key18= -Key19= -Key0= -Key1= -Key2= -Key3= -Key4= -Key20= -Key10= -Key5= -Key21= -Key22= -Key11= -Key6= -Key12= -Key7= -Key23= -Key24= -Key13= -Key8= -Key14= -Key9= -Key15= -Key16= -Key17= - -[] -KeyType=4 -Value= - -[] -KeyType=3 -Value= - -[] -KeyType=3 -Value= - -[] -KeyType=4 -Value= - -[] -KeyType=4 -Value= - -[General] -Type=TEXTSUB -Version=1.10.000 - -[] -KeyType=4 -Value= - -[] -KeyType=4 -Value= - -[] -KeyType=3 -Value= - -[] -KeyType=4 -Value= - -[] -KeyType=4 -Value= - -[] -Value= -KeyType=3 - diff --git a/src/WINNT/install/InstallShield5/afsdcell.ini b/src/WINNT/install/InstallShield5/afsdcell.ini deleted file mode 100644 index 6d43dc846f..0000000000 --- a/src/WINNT/install/InstallShield5/afsdcell.ini +++ /dev/null @@ -1,483 +0,0 @@ ->grand.central.org #GCO Public CellServDB 11 May 2004 -18.7.14.88 #grand-opening.mit.edu -128.2.191.224 #penn.central.org ->wu-wien.ac.at #University of Economics, Vienna, Austria -137.208.3.33 #afsdb1.wu-wien.ac.at -137.208.7.4 #afsdb2.wu-wien.ac.at -137.208.7.7 #afsdb3.wu-wien.ac.at ->hephy.at #hephy-vienna -193.170.243.10 #mowgli.oeaw.ac.at -193.170.243.12 #baloo.oeaw.ac.at -193.170.243.14 #akela.oeaw.ac.at ->itp.tugraz.at #Institute for Theoretical Physics, TU Graz, Austria -129.27.157.6 #fubphsv2.tu-graz.ac.at -129.27.161.7 #faepsv01.tu-graz.ac.at -129.27.161.15 #faepsv02.tu-graz.ac.at ->cern.ch #European Laboratory for Particle Physics, Geneva -137.138.128.148 #afsdb1.cern.ch -137.138.246.50 #afsdb3.cern.ch -137.138.246.51 #afsdb2.cern.ch ->ams.cern.ch #AMS Experiment -137.138.206.77 #pcamsf2.cern.ch -137.138.206.123 #pcamsf4.cern.ch ->ethz.ch #Swiss Federal Inst. of Tech. - Zurich, Switzerland -129.132.97.19 #amalthea.ethz.ch -129.132.97.27 #nethzafs-001.ethz.ch -129.132.115.3 #himalia.ethz.ch -129.132.115.37 #nethzafs-005.ethz.ch -129.132.115.38 #nethzafs-006.ethz.ch ->psi.ch #Paul Scherrer Institut - Villigen, Switzerland -129.129.16.10 #afs1.psi.ch -129.129.16.11 #afs2.psi.ch ->extundo.com #Simon Josefsson's cell -195.42.214.241 #slipsten.extundo.com ->mekinok.com #Mekinok, Inc. -4.36.43.98 #loggerhead.mekinok.com ->membrain.com #membrain.com -66.93.118.125 #stormy -130.85.24.11 #weasel -130.85.24.13 #straykitten ->midnightlinux.com #Midnight Linux, Pittsburgh PA -66.93.62.18 #romulus.midnihtlinux.com -66.93.62.20 #yar.midnightlinux.com ->setfilepointer.com #SetFilePointer.com -63.224.10.2 #hamlet.SetFilePointer.com -63.224.10.4 #troilus.SetFilePointer.com ->sodre.cx #Sodre.cx -128.8.140.165 #greed.sodre.cx ->desy.de #Deutsches Elektronen-Synchrotron -131.169.40.62 #vayu.desy.de -131.169.244.60 #solar00.desy.de ->gppc.de #GPP Chemnitz mbH -213.187.92.33 #gpp1.gppc.de -213.187.92.34 #paulchen.gppc.de -213.187.92.35 #lotus.gppc.de ->ifh.de #DESY Zeuthen -141.34.22.10 #romulus.ifh.de -141.34.22.11 #remus.ifh.de -141.34.22.29 #hekate.ifh.de ->lrz-muenchen.de #Leibniz Computing Centre, Germany -129.187.10.36 #afs1.lrz-muenchen.de -129.187.10.56 #afs3.lrz-muenchen.de -129.187.10.57 #afs2.lrz-muenchen.de ->ipp-garching.mpg.de #Institut fuer Plasmaphysik -130.183.9.5 #afs-db1.rzg.mpg.de -130.183.100.10 #afs-db2.aug.ipp-garching.mpg.de -130.183.100.23 #afs-db3.aug.ipp-garching.mpg.de ->mpe.mpg.de #MPE cell -130.183.130.7 #irafs1.mpe-garching.mpg.de -130.183.134.20 #irafs2.mpe-garching.mpg.de ->i1.informatik.rwth-aachen.de #Informatik I, RWTH Aachen -137.226.244.79 #remus.informatik.rwth-aachen.de ->tu-chemnitz.de #Technische Universitaet Chemnitz, Germany -134.109.2.1 #zuse.hrz.tu-chemnitz.de -134.109.2.15 #phoenix.hrz.tu-chemnitz.de -134.109.200.7 #aetius.hrz.tu-chemnitz.de ->e18.ph.tum.de #Experimental Physics, TU Munich, Germany -129.187.154.223 #hamlet.e18.physik.tu-muenchen.de ->uni-bonn.de #Cell name -131.220.14.198 #work15-eth.rhrz.uni-bonn.de -131.220.14.203 #node03-en2.rhrz.uni-bonn.de -131.220.14.205 #node05.rhrz.uni-bonn.de ->uni-freiburg.de #Albert-Ludwigs-Universitat Freiburg -132.230.6.235 #sv6.ruf.uni-freiburg.de -132.230.6.236 #sv7.ruf.uni-freiburg.de -132.230.6.237 #sv8.ruf.uni-freiburg.de ->physik.uni-freiburg.de #institute of physics, university Freiburg, Germany -132.230.77.16 #hepafs.physik.uni-freiburg.de ->urz.uni-heidelberg.de #Uni Heidelberg (Rechenzentrum) -129.206.119.10 #afsdb.urz.uni-heidelberg.de -129.206.119.16 #afsdb1.urz.uni-heidelberg.de -129.206.119.17 #afsdb2.urz.uni-heidelberg.de ->uni-hohenheim.de #University of Hohenheim -144.41.2.2 #rs13.serv.uni-hohenheim.de -144.41.2.3 #rs14.serv.uni-hohenheim.de -144.41.2.4 #rs15.serv.uni-hohenheim.de ->rz.uni-jena.de #Rechenzentrum University of Jena, Germany -141.35.2.160 #lc00.rz.uni-jena.de -141.35.7.9 #fsuj01.rz.uni-jena.de -141.35.7.10 #zaphod.rz.uni-jena ->meteo.uni-koeln.de #Univ. of Cologne - Inst. for Geophysics & Meteorology -134.95.144.22 #afs1.meteo.uni-koeln.de -134.95.144.24 #afs2.meteo.uni-koeln.de ->rrz.uni-koeln.de #University of Cologne - Reg Comp Center -134.95.19.3 #afsdb1.rrz.uni-koeln.de -134.95.19.30 #fileserv3.rrz.uni-koeln.de -134.95.67.97 #afs.thp.uni-koeln.de -134.95.140.190 #rzkbserv.rrz.uni-koeln.de ->physik.uni-mainz.de #institute of physics, university Mainz, Germany -134.93.130.93 #hardy.physik.uni-mainz.de ->uni-mannheim.de #Uni Mannheim (Rechenzentrum) -134.155.50.165 #afsdbx.uni-mannheim.de -134.155.50.166 #afsdby.uni-mannheim.de -134.155.50.167 #afsdbz.uni-mannheim.de ->physik.uni-wuppertal.de #Physics department of Bergische Universität Wuppertal -132.195.104.3 #afs1.physik.uni-wuppertal.de -132.195.104.230 #afs2.physik.uni-wuppertal.de ->ies.auc.dk #Aalborg Univ., Inst. of Electronic Systems, Denmark -130.225.51.73 #afsdb1.kom.auc.dk -130.225.51.74 #afsdb2.kom.auc.dk -130.225.51.85 #afsdb3.kom.auc.dk ->hep.caltech.edu #CalTech High Energy Physics -131.215.126.150 #afs.hep.caltech.edu ->andrew.cmu.edu #Carnegie Mellon University - Computing Services Cell -128.2.10.2 #vice2.fs.andrew.cmu.edu -128.2.10.7 #vice7.fs.andrew.cmu.edu -128.2.10.11 #vice11.fs.andrew.cmu.edu -128.2.10.28 #vice28.fs.andrew.cmu.edu -128.2.32.44 #new-vice12.fs.andrew.cmu.edu ->club.cc.cmu.edu #Carnegie Mellon University Computer Club -128.2.4.131 #yttrium.club.cc.cmu.edu -128.2.4.132 #zirconium.club.cc.cmu.edu ->chem.cmu.edu #Carnegie Mellon University - Chemistry Dept. -128.2.40.134 #afs.chem.cmu.edu -128.2.40.140 #afs2.chem.cmu.edu ->cs.cmu.edu #Carnegie Mellon University - School of Comp. Sci. -128.2.194.178 #cherry.srv.cs.cmu.edu -128.2.194.179 #pumpkin.srv.cs.cmu.edu -128.2.194.180 #strawberry.srv.cs.cmu.edu ->ece.cmu.edu #Carnegie Mellon University - Elec. Comp. Eng. Dept. -128.2.129.7 #porok.ece.cmu.edu -128.2.129.8 #vicio.ece.cmu.edu -128.2.129.9 #e-xing.ece.cmu.edu ->scotch.ece.cmu.edu #CMU ECE CALCM research group -128.2.134.82 #lagavulin.ece.cmu.edu ->msc.cornell.edu #Cornell University Materials Science Center -128.84.231.242 #miranda.ccmr.cornell.edu -128.84.241.35 #co.ccmr.cornell.edu -128.84.249.78 #dax.ccmr.cornell.edu ->dbic.dartmouth.edu #Dartmouth Brain Imaging Center -129.170.30.143 #dbicafs1.dartmouth.edu -129.170.30.144 #dbicafs2.dartmouth.edu -129.170.30.145 #dbicafs3.dartmouth.edu ->northstar.dartmouth.edu #Dartmouth College Research Computing -129.170.16.22 #halley.dartmouth.edu -129.170.16.42 #oort.dartmouth.edu -129.170.16.43 #cygnusx1.dartmouth.edu ->iastate.edu #Iowa State University -129.186.1.243 #afsdb-1.iastate.edu -129.186.6.243 #afsdb-2.iastate.edu -129.186.142.243 #afsdb-3.iastate.edu ->athena.mit.edu #MIT/Athena cell -18.7.1.66 #paris.mit.edu. -18.7.1.74 #chimera.mit.edu. -18.158.0.37 #prill.mit.edu. ->dev.mit.edu #MIT/IS Development cell -18.7.1.70 #wham.mit.edu. -18.7.15.89 #rattle.mit.edu. -18.7.15.93 #hum.mit.edu. ->net.mit.edu #MIT/Network Group cell -18.7.7.73 #gracie.mit.edu -18.7.21.95 #george.mit.edu ->sipb.mit.edu #MIT/SIPB cell -18.181.0.19 #reynelda.mit.edu. -18.181.0.22 #rosebud.mit.edu. -18.181.0.23 #ronald-ann.mit.edu. ->msu.edu #Michigan State University Main Cell -35.9.7.10 #afsdb0.cl.msu.edu ->nd.edu #University of Notre Dame -129.74.223.17 #john.helios.nd.edu -129.74.223.33 #lizardo.helios.nd.edu -129.74.223.65 #buckaroo.helios.nd.edu ->pitt.edu #University of Pittsburgh -136.142.8.15 #afs09.srv.cis.pitt.edu -136.142.8.20 #afs10.srv.cis.pitt.edu -136.142.8.21 #afs11.srv.cis.pitt.edu ->cs.pitt.edu #University of Pittsburgh - Computer Science -130.49.220.11 #afs01.cs.pitt.edu -130.49.220.12 #afs02.cs.pitt.edu -130.49.220.13 #afs03.cs.pitt.edu ->psc.edu #PSC (Pittsburgh Supercomputing Center) -128.182.59.182 #shaggy.psc.edu -128.182.66.184 #velma.psc.edu -128.182.66.185 #daphne.psc.edu ->scoobydoo.psc.edu #PSC Test Cell -128.182.59.181 #scooby.psc.edu ->cede.psu.edu #Penn State - Center for Engr. Design & Entrepeneurship -146.186.218.10 #greenly.cede.psu.edu -146.186.218.60 #b50.cede.psu.edu -146.186.218.246 #stalin.cede.psu.edu ->rose-hulman.edu #Rose-Hulman Institute of Technology -137.112.7.11 #afs1.rose-hulman.edu -137.112.7.12 #afs2.rose-hulman.edu -137.112.7.13 #afs3.rose-hulman.edu ->cs.rose-hulman.edu #Rose-Hulman CS Department -137.112.40.10 #galaxy.cs.rose-hulman.edu ->rpi.edu #Rensselaer Polytechnic Institute -128.113.22.11 #saul.server.rpi.edu -128.113.22.12 #joab.server.rpi.edu -128.113.22.13 #korah.server.rpi.edu -128.113.22.14 #achan.server.rpi.edu ->hep.sc.edu #University of South Carolina, Dept. of Physics -129.252.78.77 #cpeven.physics.sc.edu ->cs.stanford.edu #Stanford University Computer Science Department -171.64.64.10 #cs-afs-1.Stanford.EDU -171.64.64.66 #cs-afs-2.stanford.edu -171.64.64.69 #cs-afs-3.stanford.edu ->ir.stanford.edu #Stanford University -171.64.7.222 #afsdb1.stanford.edu -171.64.7.234 #afsdb2.stanford.edu -171.64.7.246 #afsdb3.stanford.edu ->slac.stanford.edu #Stanford Linear Accelerator Center -134.79.18.25 #afsdb1.slac.stanford.edu -134.79.18.26 #afsdb2.slac.stanford.edu -134.79.18.27 #afsdb3.slac.stanford.edu ->cats.ucsc.edu #UC Santa Cruz, Comm. and Tech. Services, California U.S.A -128.114.129.14 #elan.ucsc.edu -128.114.129.15 #ichabod.ucsc.edu -128.114.129.18 #maneki.ucsc.edu ->acm.uiuc.edu #ACM at the University of Illinois -128.174.251.8 #alnitak.acm.uiuc.edu -128.174.251.9 #alnilam.acm.uiuc.edu -128.174.251.10 #mintaka.acm.uiuc.edu ->ncsa.uiuc.edu #University of Illinois -141.142.3.5 #congo.ncsa.uiuc.edu -141.142.3.8 #nile.ncsa.uiuc.edu -141.142.230.19 #jinx.ncsa.uiuc.edu ->umbc.edu #University of Maryland, Baltimore County -130.85.24.23 #db2.afs.umbc.edu -130.85.24.87 #db3.afs.umbc.edu -130.85.24.101 #db1.afs.umbc.edu ->glue.umd.edu #University of Maryland - Project Glue -128.8.70.11 #olmec.umd.edu -128.8.73.3 #babylon.umd.edu -129.2.128.53 #egypt.umd.edu ->wam.umd.edu #University of Maryland Network WAM Project -128.8.70.9 #csc-srv.wam.umd.edu -128.8.73.9 #pg2-srv.wam.umd.edu -129.2.128.54 #avw-srv.wam.umd.edu ->umich.edu #University of Michigan - Campus -141.211.1.32 #fear.ifs.umich.edu -141.211.1.33 #surprise.ifs.umich.edu -141.211.1.34 #ruthless.ifs.umich.edu ->atlas.umich.edu #ATLAS group cell in physics at University of Michigan -141.211.43.102 #linat02.grid.umich.edu -141.211.43.106 #linat06.grid.umich.edu -141.211.43.109 #atgrid.grid.umich.edu ->citi.umich.edu #Center for Information Technology Integration -141.211.133.5 #babylon.citi.umich.edu ->lsa.umich.edu #University of Michigan - College of LS&A -141.211.54.132 #curtis.admin.lsa.umich.edu -141.211.61.23 #zee.admin.lsa.umich.edu -141.211.68.15 #marshall.lsa.umich.edu ->math.lsa.umich.edu #University of Michigan - Math Department -141.211.61.40 #ike.math.lsa.umich.edu -141.211.61.41 #clark.math.lsa.umich.edu -141.211.61.42 #nimitz.math.lsa.umich.edu ->umr.edu #University of Missouri - Rolla -131.151.1.59 #afsdb1.umr.edu -131.151.1.70 #afsdb3.umr.edu -131.151.1.146 #afsdb2.umr.edu ->physics.unc.edu #Univ. of NC at Chapel Hill, Dept. of Physics -152.2.5.2 #valerian.physics.unc.edu -152.2.5.3 #augustus.physics.unc.edu -152.2.7.67 #nerva.astro.unc.edu ->uncc.edu #University of NC at Charlotte Mosaic AFS Cell -152.15.10.70 #as-sm1.uncc.edu -152.15.13.7 #as-sm2.uncc.edu -152.15.30.27 #fs-kenn3.uncc.edu ->eng.utah.edu #University of Utah - Engineering -155.99.222.9 #lenny.eng.utah.edu -155.99.222.10 #carl.eng.utah.edu ->cs.uwm.edu #University of Wisconsin--Milwaukee -129.89.38.124 #solomons.cs.uwm.edu ->cs.wisc.edu #Univ. of Wisconsin-Madison, Computer Sciences Dept. -128.105.132.14 #timon.cs.wisc.edu -128.105.132.15 #pumbaa.cs.wisc.edu -128.105.132.16 #zazu.cs.wisc.edu ->engr.wisc.edu #University of Wisconsin-Madison, College of Engineering -144.92.13.14 #larry.cae.wisc.edu -144.92.13.15 #curly.cae.wisc.edu -144.92.13.16 #moe.cae.wisc.edu ->hep.wisc.edu #University of Wisconsin -- High Energy Physics -128.104.28.219 #anise.physics.wisc.edu ->physics.wisc.edu #Univ. of Wisconsin-Madison, Physics Department -128.104.220.51 #bubbles.physics.wisc.edu -128.104.220.52 #buttercup.physics.wisc.edu -128.104.220.53 #blossom.physics.wisc.edu ->ifca.unican.es #Instituto de Fisica de Cantabria (IFCA), Santander, Spain -193.144.209.20 #gridwall.ifca.unican.es ->ific.uv.es #Instituto de Fisica Corpuscular, Valencia, Spain -147.156.163.11 #alpha.ific.uv.es ->biocenter.helsinki.fi #University of Helsinki, Institute of Biotechnology -128.214.58.174 #afsdb1.biocenter.helsinki.fi -128.214.88.114 #afsdb2.biocenter.helsinki.fi ->dapnia.saclay.cea.fr #CEA DAPNIA -132.166.32.7 #dphrsg.saclay.cea.fr -132.166.32.12 #dphrsl.saclay.cea.fr ->in2p3.fr #IN2P3 production cell -134.158.232.11 #ccafsdb1.in2p3.fr -134.158.232.12 #ccafsdb2.in2p3.fr -134.158.232.13 #ccafsdb3.in2p3.fr ->anl.gov #Argonne National Laboratory -146.137.96.33 #arteus.ctd.anl.gov -146.137.162.88 #agamemnon.ctd.anl.gov -146.137.194.80 #antenor.ctd.anl.gov ->rhic.bnl.gov #Relativistic Heavy Ion Collider -130.199.6.51 #rafs03.rcf.bnl.gov -130.199.6.52 #rafs02.rcf.bnl.gov -130.199.6.69 #rafs01.rcf.bnl.gov ->usatlas.bnl.gov #US Atlas Tier 1 Facility at BNL -130.199.48.32 #aafs01.usatlas.bnl.gov -130.199.48.33 #aafs02.usatlas.bnl.gov -130.199.48.34 #aafs03.usatlas.bnl.gov ->fnal.gov #Fermi National Acclerator Laboratory -131.225.68.1 #fsus01.fnal.gov -131.225.68.4 #fsus03.fnal.gov -131.225.68.14 #fsus04.fnal.gov ->ic-afs.arc.nasa.gov #Code IC, Ames Research Center -128.102.105.62 #udanax.arc.nasa.gov ->nersc.gov #National Energy Research Supercomputer Center -128.55.128.250 #mars.nersc.gov -128.55.128.252 #alfred.nersc.gov -128.55.128.254 #lurch.nersc.gov ->caspur.it #CASPUR Inter-University Computing Consortium, Rome -193.204.5.45 #pomodoro.caspur.it -193.204.5.46 #banana.caspur.it -193.204.5.50 #maslo.caspur.it ->fusione.it #Assoz. FUSIONE/Euratom, ENEA, Frascati-Italy -192.107.90.2 #fusafs1.frascati.enea.it -192.107.90.3 #fusafs2.frascati.enea.it -192.107.90.4 #fusafs3.frascati.enea.it ->icemb.it #ICEMB, Universita' La Sapienza - Rome - Italy -193.204.6.130 #icembfs.caspur.it ->infn.it #Istituto Nazionale di Fisica Nucleare (INFN), Italia -131.154.1.7 #afs3.infn.it -141.108.3.252 #afs1.infn.it -192.84.134.75 #afs2.infn.it ->kloe.infn.it #INFN, KLOE experiment at Laboratori di Frascati -192.135.25.111 #kloeafs1.lnf.infn.it -192.135.25.112 #kloeafs2.lnf.infn.it ->le.infn.it #INFN, Sezione di Lecce -192.84.152.40 #afs01.le.infn.it -192.84.152.148 #afs02.le.infn.it ->lnf.infn.it #INFN, Laboratori Nazionali di Frascati -193.206.84.121 #afs1.lnf.infn.it -193.206.84.122 #afs2.lnf.infn.it -193.206.84.123 #afs3.lnf.infn.it ->lngs.infn.it #INFN, Laboratori Nazionali di Gran Sasso -192.84.135.21 #rsgs05.lngs.infn.it ->pi.infn.it #INFN, Sezione di Pisa -131.114.134.26 #unknownhost.pi.infn.it -192.84.133.50 #aix1.pi.infn.it ->psm.it #Progetto San Marco, Universita' di Roma-1 -151.100.1.65 #atlante.psm.uniroma1.it ->tgrid.it #CASPUR-CILEA-CINECA Grid Cell -193.204.5.33 #cccgrid.caspur.it ->ictp.trieste.it #The Abdus Salam International Centre for Theoretical Physics (IC -140.105.16.8 #fs1.ictp.trieste.it -140.105.16.9 #fs2.ictp.trieste.it ->ing.uniroma1.it #Universita' La Sapienza, Fac. Ingeneria -151.100.85.253 #alfa.ing.uniroma1.it ->vn.uniroma3.it #University of Rome 3, Area Vasca Navale -193.204.161.136 #alfa.dia.uniroma3.it -193.204.161.137 #beta.dia.uniroma3.it -193.204.161.138 #gamma.dia.uniroma3.it ->italia #Italian public AFS cell -193.204.5.9 #afs.caspur.it ->cmf.nrl.navy.mil #Naval Research Lab - CCS -134.207.10.68 #picard.cmf.nrl.navy.mil -134.207.10.69 #riker.cmf.nrl.navy.mil -134.207.10.70 #kirk.cmf.nrl.navy.mil ->lcp.nrl.navy.mil #Naval Research Lab - Lab for Computational Physics -132.250.114.2 #afs1.lcp.nrl.navy.mil -132.250.114.4 #afs2.lcp.nrl.navy.mil -132.250.114.6 #afs3.lcp.nrl.navy.mil ->es.net #Energy Sciences Net -198.128.3.21 #fs1.es.net -198.128.3.22 #fs2.es.net -198.128.3.23 #fs3.es.net ->laroia.net #Laroia Networks -66.66.102.254 #supercore.laroia.net ->sinenomine.net #Sine Nomine Associates -66.92.236.139 #afs.sinenomine.net ->slackers.net #The Slackers' Network -63.201.48.27 #alexandria.slackers.net ->nikhef.nl #The Dutch National Institute for High Energy Physics -192.16.185.26 #afs1.nikhef.nl -192.16.185.27 #afs2.nikhef.nl ->1ts.org #KCR/private Karl Ramm, Cambridge, MA -4.36.43.102 #dol-guldur.1ts.org ->bazquux.org #Baz Quux Organization -66.207.142.196 #baxquux.org ->coed.org #Adam Pennington's Cell -66.93.61.184 #vice1.coed.org -128.2.4.163 #vice3.coed.org ->dementia.org #Dementia Unlimited -128.2.12.45 #alycia.dementia.org -128.2.120.216 #meredith.dementia.org ->idahofuturetruck.org #University of Idaho hybrid vehicle development -12.18.238.210 #dsle210.fsr.net ->nimlabs.org #Nimlabs, Ink. Cell. -18.238.1.103 #olfin.nimlabs.org -18.238.1.105 #caerbanog.nimlabs.org ->nomh.org #nomh.org -204.29.154.12 #iota.nomh.org ->oc7.org #The OC7 Project -128.2.6.107 #vice3.oc7.org -128.2.122.140 #vice2.oc7.org ->openafs.org #OpenAFS Project -128.2.13.199 #new-virtue.openafs.org -128.2.121.218 #virtue.openafs.org -130.237.48.87 #andrew.e.kth.se -130.237.48.107 #onyx.e.kth.se ->e.kth.se #Royal Institute of Technology, Elektro -130.237.32.145 #sonen.e.kth.se -130.237.48.7 #anden.e.kth.se -130.237.48.244 #fadern.e.kth.se ->hallf.kth.se #Royal Institute of Technology, HALLF -130.237.24.141 #rasmus13.hallf.kth.se -130.237.24.152 #rasmus3.hallf.kth.se -130.237.24.177 #rasmus29.hallf.kth.se ->isk.kth.se #Royal Institute of Technology, ISK -130.237.202.12 #afsdb2.isk.kth.se -130.237.206.13 #afsdb1.isk.kth.se -130.237.209.141 #afsdb3.isk.kth.se ->it.kth.se #Royal Institute of Technology, IT -130.237.212.15 #ptah.it.kth.se -130.237.212.16 #toth.it.kth.se -130.237.215.7 #isis.it.kth.se ->md.kth.se #Royal Institute of Technology, MMK -130.237.57.68 #trinity.md.kth.se -130.237.57.72 #morpheus.md.kth.se -130.237.67.230 #neo.speech.kth.se ->mech.kth.se #Royal Institute of Technology, MECH -130.237.233.142 #matterhorn.mech.kth.se -130.237.233.143 #castor.mech.kth.se -130.237.233.144 #pollux.mech.kth.se ->nada.kth.se #Royal Institute of Technology, NADA -130.237.222.20 #kosmos.nada.kth.se -130.237.223.12 #sputnik.nada.kth.se -130.237.224.78 #mir.nada.kth.se -130.237.227.23 #gagarin.nada.kth.se -130.237.228.28 #laika.nada.kth.se ->pdc.kth.se #Royal Institute of Technology, PDC -130.237.232.29 #crab.pdc.kth.se -130.237.232.112 #anna.pdc.kth.se -130.237.232.114 #hokkigai.pdc.kth.se ->stacken.kth.se #Stacken Computer Club -130.237.234.3 #milko.stacken.kth.se -130.237.234.43 #hot.stacken.kth.se -130.237.237.230 #fishburger.stacken.kth.se ->syd.kth.se #Royal Institute of Technology, KTH-Syd -130.237.83.23 #afs.haninge.kth.se ->physto.se #Physics department Stockholm University -130.237.205.36 #sysafs1.physto.se -130.237.205.72 #sysafs2.physto.se ->sanchin.se #Sanchin Consulting AB, Sweden -192.195.148.10 #sesan.sanchin.se ->su.se #Stockholm University -130.237.162.81 #afsdb1.su.se -130.237.162.82 #afsdb2.su.se ->f9.ijs.si #F9, Jozef Stefan Institue -194.249.156.1 #brenta.ijs.si ->p-ng.si #Nova Gorica Polytechnic -193.2.120.2 #solkan.p-ng.si ->phy.bris.ac.uk #Bristol University - phyics -137.222.58.9 #afs1.phy.bris.ac.uk ->hep.man.ac.uk #Manchester HEP -194.36.2.3 #afs1.hep.man.ac.uk -194.36.2.4 #afs2.hep.man.ac.uk -194.36.2.5 #afs3.hep.man.ac.uk ->rl.ac.uk #Rutherford Appleton Lab, England -130.246.183.164 #wallace.cc.rl.ac.uk diff --git a/src/WINNT/install/InstallShield5/setup.rul b/src/WINNT/install/InstallShield5/setup.rul deleted file mode 100644 index 0cb572c8a3..0000000000 --- a/src/WINNT/install/InstallShield5/setup.rul +++ /dev/null @@ -1,3578 +0,0 @@ - -// -// Copyright 2000, International Business Machines Corporation and others. -// All Rights Reserved. -// -// This software has been released under the terms of the IBM Public -// License. For details, see the LICENSE file in the top-level source -// directory or online at http://www.openafs.org/dl/license10.html -// - - -// Include header files - - #include "sdlang.h" - #include "sddialog.h" - - -////////////////////// string defines //////////////////////////// - - // If the user places a file with this name in the same directory as - // the setup files, only the client component will be available for - // install. The contents of this file are not used. - #define ALLOW_ONLY_CLIENT_FLAG_FILENAME "setup.co" - - // The release types - #define RELEASE_TYPE_GA "GA" - #define RELEASE_TYPE_BETA "Beta" - - // Client logon dll names - #define FULL_CLIENT_LOGON_DLL "Client\\PROGRAM\\afslogon.dll" - #define LIGHT_CLIENT_LOGON_DLL "Client\\PROGRAM\\afslog95.dll" - - // Uninstall log file names for each component - #define SERVER_UNINST_LOGFILE_NAME "Server_Uninst.isu" - #define CLIENT_UNINST_LOGFILE_NAME "Client_Uninst.isu" - #define LIGHT_CLIENT_UNINST_LOGFILE_NAME "Light_Client_Uninst.isu" - #define CC_UNINST_LOGFILE_NAME "CC_Uninst.isu" - #define DOCS_UNINST_LOGFILE_NAME "Docs_Uninst.isu" - - // Uninstall dll names for each component - #define SERVER_UNINST_DLL_NAME "ServerUninst.dll" - #define CLIENT_UNINST_DLL_NAME "ClientUninst.dll" - #define CC_UNINST_DLL_NAME "CCUninst.dll" - #define LIGHT_CLIENT_UNINST_DLL_NAME "LightClientUninst.dll" - #define DOCS_UNINST_DLL_NAME "DocsUninst.dll" - - // These are the components the user sees - #define CLIENT_COMP_NAME "Client" - #define LIGHT_CLIENT_COMP_NAME "Light_Client" - #define SERVER_COMP_NAME "Server" - #define CC_COMP_NAME "Control_Center" - - // Light Client platform components - #define LIGHT95_CLIENT_COMP_NAME "Light_Client\\Win95" - #define LIGHT98_CLIENT_COMP_NAME "Light_Client\\Win98" - - // This is added to autoexec.bat on Win95 systems - #define LIGHT95_CLIENT_PROTSEQ "AFS_RPC_PROTSEQ=ncacn_ip_tcp" - - // Language components - #define LANG_COMP_NAME "Languages" - #define LANG_ENGLISH_COMP_NAME "Languages\\Lang_English" - #define LANG_SIMP_CHINESE_COMP_NAME "Languages\\Lang_Simp_Chinese" - #define LANG_TRAD_CHINESE_COMP_NAME "Languages\\Lang_Trad_Chinese" - #define LANG_KOREAN_COMP_NAME "Languages\\Lang_Korean" - #define LANG_JAPANESE_COMP_NAME "Languages\\Lang_Japanese" - #define LANG_GERMAN_COMP_NAME "Languages\\Lang_German" - #define LANG_SPANISH_COMP_NAME "Languages\\Lang_Spanish" - #define LANG_PORTUGUESE_COMP_NAME "Languages\\Lang_Portuguese" - - // Documentation components - #define DOCS_COMP_NAME "Documentation" - #define DOCS_ENGLISH_COMP_NAME "Documentation\\English" - #define DOCS_JAPANESE_COMP_NAME "Documentation\\Japanese" - #define DOCS_KOREAN_COMP_NAME "Documentation\\Korean" - #define DOCS_SIMP_CHINESE_COMP_NAME "Documentation\\Simp_Chinese" - #define DOCS_TRAD_CHINESE_COMP_NAME "Documentation\\Trad_Chinese" - #define DOCS_GERMAN_COMP_NAME "Documentation\\German" - #define DOCS_SPANISH_COMP_NAME "Documentation\\Spanish" - #define DOCS_PORTUGUESE_COMP_NAME "Documentation\\Portuguese" - - // Readme files components - #define README_COMP_NAME "Readme" - #define README_ENGLISH_COMP_NAME "Readme\\English" - #define README_JAPANESE_COMP_NAME "Readme\\Japanese" - #define README_KOREAN_COMP_NAME "Readme\\Korean" - #define README_SIMP_CHINESE_COMP_NAME "Readme\\Simp_Chinese" - #define README_TRAD_CHINESE_COMP_NAME "Readme\\Trad_Chinese" - #define README_GERMAN_COMP_NAME "Readme\\German" - #define README_SPANISH_COMP_NAME "Readme\\Spanish" - #define README_PORTUGUESE_COMP_NAME "Readme\\Portuguese" - - // License filenames - #define LICENSE_ENGLISH_FILENAME "License\\en_US.rtf" - #define LICENSE_JAPANESE_FILENAME "License\\ja_JP.rtf" - #define LICENSE_KOREAN_FILENAME "License\\ko_KR.rtf" - #define LICENSE_SIMP_CHINESE_FILENAME "License\\zh_CN.rtf" - #define LICENSE_TRAD_CHINESE_FILENAME "License\\zh_TW.rtf" - #define LICENSE_GERMAN_FILENAME "License\\de_DE.rtf" - #define LICENSE_SPANISH_FILENAME "License\\es_ES.rtf" - #define LICENSE_PORTUGUESE_FILENAME "License\\pt_BR.rtf" - - #define SETUP_UTILS_DLL_PATH "InstallUtils.dll" - - // Some registry keys - #define MSUNINSTALL_KEY "\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall" - #define COMPANY_REG_KEY "Software\\TransarcCorporation\\" - #define CONFIG_INFO_KEY "Software\\AfsPreservedConfigInfo" - - #define CLIENT_SERVICE_NAME "TransarcAFSDaemon" - - // Client help file names - #define CLIENT_HELP_FILE_NAME "Common\\afs-nt.hlp" - #define LIGHT_CLIENT_HELP_FILE_NAME "Common\\afs-light.hlp" - - #define MAX_STRING_LEN 512 - - // Install actions - #define ACTION_NONE 0 - #define ACTION_INSTALL 1 - #define ACTION_REINSTALL 2 - #define ACTION_UPGRADE 3 - #define ACTION_DOWNGRADE 4 - - // Documenation start menu info - #define DOCUMENTATION_CMD_PATH "Documentation\\Html\\index.htm" - #define DOCUMENTATION_ARGS "" - - #define DOCUMENTATION_LICENSE_PATH "Documentation\\Html\\license.rtf" - - // Application start menu info - #define CFG_WIZARD_CMD_PATH "Server\\usr\\afs\\bin\\afssvrcfg.exe" - #define CFG_WIZARD_ARGS "/wizard" - #define CREDS_TOOL_CMD_PATH "Client\\Program\\afscreds.exe" - #define CREDS_TOOL_ARGS "/show" - #define CLIENT_HELP_CMD_PATH "Common\\afs-nt.hlp" - #define CLIENT_HELP_ARGS "" - #define LIGHT_CLIENT_HELP_CMD_PATH "Common\\afs-light.hlp" - #define LIGHT_CLIENT_HELP_ARGS "" - #define SERVER_MANAGER_CMD_PATH "Control Center\\TaAfsServerManager.exe" - #define SERVER_MANAGER_ARGS "" - #define ACCT_MANAGER_CMD_PATH "Control Center\\TaAfsAccountManager.exe" - #define ACCT_MANAGER_ARGS "" - - #define CELLSERVDB_FILENAME "afsdcell.ini" - - #define SERVER 1 - #define CLIENT 2 - #define LCLIENT 4 - #define CC 8 - #define DOCS 16 - - - -//////////////////// installation declarations /////////////////// - -typedef VERINFO -begin - int nMajorVersion; - int nMinorVersion; - int nPatchLevel; - int nBetaLevel; - string szReleaseType[32]; - string szTitle[32]; -end; - - -// NOTE: There is a problem with the IS registry set functionality in that if -// you specify to write a value under an existing key, at uninstall time -// not just the value will be removed, but the KEY AND ALL ITS SUBKEYS -// will also be removed. So the registry sets can only be used to -// create entries in the registry that are for values under keys that -// we create. -// -// There are some values that we need to create that live under existing -// NT keys, so when we create them we must turn off logging. The -// szNoLogRegistrySets tell us which to create without logging. - -typedef APPINFO -begin - string szCompName[64]; - string szCompanyName[64]; - string szProductName[128]; - VERINFO Ver; // Version of this product - VERINFO iVer; // Verison of this product that is already installed - string szProductKey[128]; - BOOL bUseUninstDLL; - string szUninstDllName[64]; - string szUninstLogfileName[64]; - string szUninstKey[128]; - string szAppPath[256]; // Below TARGETDIR - string szBinPath[256]; // Path to binaries and uninstall dll - BOOL bAddToPath; // TRUE if bin path should be added to path env var - string szUninstDisplayName[128]; - string szRegistrySets[256]; // Comma separated list of registry sets to install - string szNoLogRegistrySets[256]; // Comma separated list of registry sets to install without logging - int nInstallAction; - BOOL bInstallSucceeded; -end; - - - -// ----- DLL function prototypes ----- - - -// ----- DLL prototypes ----- - - // your DLL prototypes - prototype int InstallUtils.InstallServerService(string); - prototype int InstallUtils.InstallClientService(string); - prototype int InstallUtils.AddToPath(string); - prototype int InstallUtils.AddToNetworkProviderOrder(string); - prototype int InstallUtils.CheckIfAdmin(); - prototype int InstallUtils.SetSilentMode(); - prototype int InstallUtils.WriteToInstallErrorLog(string); - prototype int InstallUtils.RestoreConfigInfo(int); - prototype int InstallUtils.Eradicate34Client(); - prototype int InstallUtils.Upgrade34ClientConfigInfo(); - prototype int InstallUtils.IsWin98(); - prototype int InstallUtils.ShowLicense(string,string); - - -// ---- script function prototypes ----- - - // generated by the Project Wizard - prototype ShowDialogs(); - prototype MoveFileData(); - prototype HandleMoveDataError( NUMBER ); - prototype ProcessBeforeDataMove(APPINFO POINTER); - prototype ProcessAfterDataMove(); - prototype SetupRegistry(); - prototype CleanUpInstall(); - prototype SetupInstall(); - prototype SetupScreen(); - prototype CheckRequirements(); - prototype DialogShowSdWelcome(); - prototype DialogShowSdAskDestPath(); - prototype DialogShowSdSetupType(); - prototype DialogShowSdSelectFolder(); - prototype DialogShowSdFinishReboot(); - - // your script function prototypes - prototype FixTargetPaths(); - prototype SetupAppInfo(); - prototype LocalizeComponents(); - prototype LocalizeComponentStatusText (STRING); - prototype InstallApp(APPINFO POINTER); - prototype DialogShowSdAskComponentDialog(); - prototype ShowIsSelected(string); - prototype ShowSelectedComponents(); - prototype ConfigClientService(); - prototype ConfigServerService(); - prototype AddPath(string); - prototype AddBinPaths(); - prototype ConfigUninstallDLL(APPINFO POINTER); - prototype CreateServerDirs(); - prototype SetUserVars(); - prototype SetNetworkProviderOrder(); - prototype CreateRegistrySets(string); - prototype ConfigAfsCreds(); - prototype GetLicenseFilename(BYREF string); - prototype GetNlsComps(BYREF string, BYREF string, BYREF string, BYREF string); - prototype DetectInstalledComponents(); - prototype IsAppInstalled(APPINFO POINTER); - prototype ProcessCompsOnCmdLn(string); - prototype ParseCommandLine(); - prototype GetVersionNumber(string); - prototype GetInstallAction(string, BOOL, string, string, string, string, APPINFO POINTER); - prototype GetInstallActions(); - prototype ClientSelectedOrInstalled(); - prototype RenameUninstDll(APPINFO POINTER); - prototype RemoveInstalledBits(string); - prototype PrepareForWSPPInstall(); - prototype CreateStartMenuEntries(); - prototype ShowError(string, int); - prototype GetDateTimeString(BYREF string); - prototype OnlyInstallingDocs(); - prototype CreateDirs(); - prototype AddShortCut(string, string, string, string); - prototype CheckCopyCellServDB(); - prototype RestorePreviousConfigs(); - prototype RemoveCurrentVersion(APPINFO POINTER); - prototype DoesConfigInfoExist(APPINFO POINTER); - prototype UnselectComps(); - prototype AnyNonUpgradableSoftwareInstalled(); - prototype RemoveAllCurrentVersions(); - prototype AppVersionOk(BOOL, BOOL, APPINFO POINTER); - prototype SetupVerInfo(APPINFO POINTER, string, string, string, string, string, string, BOOL); - prototype NotUpgradable(APPINFO POINTER); - prototype CompareVersions(APPINFO POINTER); - - // ----- global variables ------ - - // generated by the Project Wizard - BOOL bWin95, bWin98, bWinNT, bIsShellExplorer, bInstallAborted, bIs32BitSetup; - STRING svDir; - STRING svName, svCompany, svSerial; - STRING svDefGroup; - STRING szAppPath; - STRING svSetupType; - NUMBER nResult; - - // your global variables - APPINFO appFullClient; - APPINFO appLightClient; - APPINFO appServer; - APPINFO appControlCenter; - APPINFO appDocs; - APPINFO POINTER pApp; - - BOOL bFullClientSel, bServerSel, bCcSel, bLightClientSel, bDocsSel; - string szCommonBinPath; - string szCodePage; - BOOL bClientInstalled, bServerInstalled, bCcInstalled, bLightClientInstalled, bDocsInstalled; - string szLangComp, szReadmeComp, szDocsComp; - - // WSPP support vars - BOOL bWSPPInstall; - BOOL bPreinstallReplace; - - -//////////////////////////////////////////////////////////////////////////////// -// -// Function Name: Template -// -// Description: This dialog will show a dialog template which can be -// used for creating any user-defined dialog with the -// Windows 95 look and feel. -// Comments: -// -//////////////////////////////////////////////////////////////////////////////// - -number nvSection,nFileIsLocked; -STRING szTemp,szCellName; - -#define IDC_HOMEPATH 301 -#define IDC_ROOTPATH 302 -#define IDC_HOMEDRIVELIST 1007 -#define IDC_ROOTDRIVELIST 1008 -#define IDC_ENABLEROOT 1010 -#define IDC_ENABLEHOME 1011 -#define IDC_INSTALL 1011 -#define IDC_WEB 1016 -#define IDC_CHECK_INSTALL 1018 -#define IDC_CHECK_WEB 1019 -#define IDC_CHECK_BROWSEFILE 1020 -#define IDC_CHECK_PREVIOUSFILE 1021 -#define IDC_PREVIOUSFILE 1024 -#define IDC_BROWSE 1025 -#define IDC_BROWSEFILE 1026 -#define DLG_TEMPLATE 13029 -#define DLG_DRIVEPATH 13030 -#define DLG_CELLSERVDB 13031 -#define IDC_PATH 13032 - -prototype Logit(STRING); -function Logit(szMsg) -HWND handle; -begin - return; - OpenFileMode(FILE_MODE_APPEND); - if (OpenFile (handle, "y:\\dest", "silent.log") < 0) then - CreateFile(handle,"y:\\dest", "silent.log"); - endif; - WriteLine(handle,szMsg); - CloseFile(handle); -end; - -prototype Logitn(STRING,NUMBER); -function Logitn(szMsg,i) -HWND handle; -STRING sz; -begin - Sprintf(sz,szMsg,i); - Logit(sz); -end; -prototype INT GetWebDll.BrowseFile(NUMBER,BYREF STRING,BYREF STRING,NUMBER); -prototype INT GetWebDll.GetWebPage(BYREF STRING,BYREF STRING,BYREF STRING); -prototype INT GetWebDll.GetUserLogon(BYREF STRING); -prototype SetCellServDB(STRING,BYREF NUMBER,BYREF STRING,BYREF STRING,BYREF STRING,BYREF STRING); -prototype FormErrorMessage(NUMBER,BYREF STRING); -prototype SetHomeRoot( STRING,BYREF STRING,BYREF STRING,BYREF STRING,BYREF STRING ); -prototype BOOL getWebCellSrvDB(STRING,STRING); - -prototype BOOL GetDefaultDrive(BYREF NUMBER); -function GetDefaultDrive(listAv) - NUMBER listAc; - NUMBER I,nResult; - STRING item,iitem; -begin - listAc = ListCreate (STRINGLIST); - Enable (STATUS); - SetStatusWindow (50, "Scaning for available Drives..."); - nResult=GetValidDrivesList (listAc, -1,-1); - SetStatusWindow (100, "Completed."); - Delay (2); - if (nResult<0) then - SetStatusWindow(0, ""); - MessageBox ("Scan Drive Error" , SEVERE); - abort; - endif; - SetStatusWindow(0, ""); - listAv = ListCreate (STRINGLIST); - ListAddString(listAv,"None:",AFTER); - ListGetFirstString(listAc, iitem); - for I=67 to 90 - Sprintf(item,"%c",I); - nResult=ListFindString(listAc,item); - if nResult==END_OF_LIST then - ListAddString(listAv,item+":",AFTER); - endif; - ListGetNextString(listAc,iitem); - endfor; - ListDestroy(listAc); - return TRUE; -end; - -function FormErrorMessage(nResult,szResult) -begin - switch(nResult) - case COPY_ERR_CREATEDIR: - szResult=TARGETDIR+ "could not be created. Make sure that you have access rights to the target drive."; - case COPY_ERR_MEMORY: - szResult="The function was unable to allocate the memory required to complete the copy file process. Terminate as many running applications as possible to free memory."; - case COPY_ERR_NODISKSPACE: - szResult="The function could not find enough disk space on "+TARGETDIR+" to copy the files. Free disk space on the target drive."; - case COPY_ERR_OPENINPUT: - szResult="The function was unable to open the input file in "+SRCDIR+". Make sure the source file is a valid filename and that both the source file and target directory exist."; - case COPY_ERR_OPENOUTPUT: - szResult="The function was unable to copy the requested file."; - case COPY_ERR_TARGETREADONLY: - szResult="The file in "+TARGETDIR+" is read-only. Remove the read-only attribute from the target file and try again."; - default: - szResult="Unknown error"; - endswitch; -end; - -function getWebCellSrvDB(szDefaultWeb,szDestFile) - NUMBER nResult; - STRING szFile,szErrMsg,szURL; -begin - szErrMsg=" "; - Enable (STATUS); - SetStatusWindow (50, "Now Downloading CellServDB file..."); - CreateDir(TARGETDIR); - nResult=GetWebPage(szErrMsg,szDestFile,szDefaultWeb); - SetStatusWindow (100, "Downloading completed."); - Delay (2); - if (nResult!=0) then - SetStatusWindow(0, ""); - MessageBox (szErrMsg, INFORMATION); - return FALSE; - endif; - // setup default status - SetStatusWindow(0, ""); - return TRUE; -end; - -// Transfer file to CELLSERVDB -prototype BOOL InstallCellServDB(NUMBER,STRING,STRING); -function InstallCellServDB(DefaultItem,szDefaultWeb,szDefaultBrowse) -STRING szFile,svErrorMessage; -begin - switch (DefaultItem) - case IDC_CHECK_WEB: - nResult=getWebCellSrvDB(szDefaultWeb,TARGETDIR^@CELLSERVDB_CONFIGNAME); - case IDC_CHECK_BROWSEFILE: - // open file and copy to area - ParsePath(szFile,szDefaultBrowse,PATH); - SRCDIR=szFile; - ParsePath(szFile,szDefaultBrowse,FILENAME); - nResult=CopyFile ( szFile ,@CELLSERVDB_CONFIGNAME ); - if nResult < 0 then - if nResult = -1 then - MessageBox ( "CopyFile failed with error code -1!", WARNING ); - else - FormErrorMessage(nResult,svErrorMessage); - SprintfBox ( WARNING, "", - "CopyFile failed!\n\nError code: %ld\nMessage text: %s", - nResult, svErrorMessage ); - endif; - nResult=FALSE; - else - nResult=TRUE; - endif; - case IDC_CHECK_INSTALL: //need to delete because install will never overwrite - SRCDIR=SUPPORTDIR; - nResult=CopyFile (@CELLSERVDB_CONFIGNAME,@CELLSERVDB_CONFIGNAME ); - if nResult < 0 then - if nResult = -1 then - MessageBox ( "CopyFile failed with error code -1!", WARNING ); - else - FormErrorMessage(nResult,svErrorMessage); - SprintfBox ( WARNING, "", - "CopyFile failed!\n\nError code: %ld\nMessage text: %s", - nResult, svErrorMessage ); - endif; - nResult=FALSE; - else - nResult=TRUE; - endif; - case IDC_CHECK_PREVIOUSFILE: - nResult=TRUE;// work is done, it will use previous file - default: - nResult=TRUE; - ; - endswitch; - return nResult; -end; - -// Return TRUE if silent mode active -prototype BOOL SilentSetCellServDB(STRING,NUMBER,NUMBER,NUMBER,BYREF STRING,BYREF STRING); -function SilentSetCellServDB(szDlg,option,nResult,DefaultItem,szDefaultWeb,szDefaultBrowse) -STRING svSection,szTemp; -NUMBER nTemp; -begin - switch (option) - case 0: //READ function - if (MODE!=SILENTMODE) then - return FALSE; - endif; - SdMakeName( svSection, szDlg, "", nvSection ); - SilentReadData( svSection, "Result", DATA_NUMBER,szTemp,nResult); - if (nResult!=NEXT) then - return TRUE; - endif; - SilentReadData( svSection, "DefaultItem", DATA_NUMBER,szTemp,DefaultItem); - SilentReadData( svSection, "szDefaultWeb", DATA_STRING, szDefaultWeb,nTemp); - SilentReadData( svSection, "szDefaultBrowse", DATA_STRING,szDefaultBrowse,nTemp ); - if (InstallCellServDB(DefaultItem,szDefaultWeb,szDefaultBrowse)==FALSE) then - nResult=CANCEL; - else - nResult=NEXT; - endif; - return TRUE; - default: //write - SdMakeName( svSection, szDlg, "", nvSection ); - SilentWriteData( svSection, "Result", DATA_NUMBER,szTemp, nResult ); - SilentWriteData( svSection, "DefaultItem", DATA_NUMBER,szTemp, DefaultItem ); - SilentWriteData( svSection, "szDefaultWeb", DATA_STRING, szDefaultWeb,nTemp ); - SilentWriteData( svSection, "szDefaultBrowse", DATA_STRING, szDefaultBrowse,nTemp ); - return TRUE; - endswitch; -end; - -function SetCellServDB( szTitle,DefaultItem,szPreviousInstall,szDefaultWeb,szDefaultBrowse,szDefaultInstall) -STRING szDlg, szTemp,szResult[256],svErrorMessage,szFile,svSection; -NUMBER bDone, nId, nMessage, nTemp,AvailableDrives,nResult; -INT hwndDlg,hwndItem; - -begin - szDlg = "DLG_CELLSERVDB"; - // record data produced by this dialog - if SilentSetCellServDB(szDlg,0,nResult,DefaultItem,szDefaultWeb,szDefaultBrowse) then - return nResult; - endif; - - // ensure general initialization is complete - if (!bSdInit) then - SdInit(); - endif; - - if (EzDefineDialog( szDlg, "", "", - DLG_CELLSERVDB ) = DLG_ERR) then - return -1; - endif; - - // Loop in dialog until the user selects a standard button - Disable(LOGGING); - VarSave(SRCTARGETDIR); - TARGETDIR=WINDIR; - doagain: - bDone = FALSE; - - while (!bDone) - - nId = WaitOnDialog( szDlg ); - hwndDlg = CmdGetHwndDlg( szDlg ); - - switch(nId) - - case DLG_INIT: - // Initialize List Control - // set file - CtrlSetState (szDlg, DefaultItem,BUTTON_CHECKED); - if !Is(FILE_EXISTS,szPreviousInstall) then - hwndItem = GetDlgItem( hwndDlg, IDC_CHECK_PREVIOUSFILE ); - EnableWindow( hwndItem, FALSE); - endif; - hwndItem = GetDlgItem( hwndDlg, IDC_PREVIOUSFILE ); - EnableWindow( hwndItem, DefaultItem==IDC_CHECK_PREVIOUSFILE); - hwndItem = GetDlgItem( hwndDlg, IDC_BROWSEFILE ); - EnableWindow( hwndItem, DefaultItem==IDC_CHECK_BROWSEFILE); - hwndItem = GetDlgItem( hwndDlg, IDC_BROWSE ); - EnableWindow( hwndItem, DefaultItem==IDC_CHECK_BROWSEFILE); - hwndItem = GetDlgItem( hwndDlg, IDC_WEB ); - EnableWindow( hwndItem, DefaultItem==IDC_CHECK_WEB); - hwndItem = GetDlgItem( hwndDlg, IDC_INSTALL ); - EnableWindow( hwndItem, DefaultItem==IDC_CHECK_INSTALL); - CtrlSetText (szDlg, IDC_PREVIOUSFILE, szPreviousInstall); - CtrlSetText (szDlg, IDC_BROWSEFILE, szDefaultBrowse); - CtrlSetText (szDlg, IDC_WEB, szDefaultWeb); - CtrlSetText (szDlg, IDC_INSTALL, szDefaultInstall); - - SdGeneralInit( szDlg, hwndDlg, STYLE_NORMAL, szSdProduct ); - - //This function sets the caption for old style dialogs or - //sets the text in the top banner area of win2k style dialogs -// SdSetDlgTitle(szDlg, hwndDlg, szTitle); //Version 6.0 only - - case OK: - nId = NEXT; - bDone = TRUE; - - case BACK: - nId = BACK; - bDone = TRUE; - - case DLG_ERR: - SdError( -1, "DLG_CELLSERVDB" ); - nId = -1; - bDone = TRUE; - - case DLG_CLOSE: - SdCloseDlg( hwndDlg, nId, bDone ); - - case IDC_BROWSE: - szResult=szDefaultBrowse; - szTitle="Select file to be used for CellServDB"; - nResult=BrowseFile(hwndDlg,szTitle,szResult,256); - CtrlSetText (szDlg, IDC_BROWSEFILE, szResult); - szDefaultBrowse=szResult; - - case IDC_CHECK_BROWSEFILE: - hwndItem = GetDlgItem( hwndDlg, IDC_BROWSEFILE ); - EnableWindow( hwndItem, TRUE); - hwndItem = GetDlgItem( hwndDlg, IDC_BROWSE ); - EnableWindow( hwndItem, TRUE); - CtrlSetState (szDlg, DefaultItem,BUTTON_UNCHECKED); - CtrlSetState (szDlg, nId,BUTTON_CHECKED); - switch (DefaultItem) - case IDC_CHECK_WEB: - hwndItem = GetDlgItem( hwndDlg, IDC_WEB ); - EnableWindow( hwndItem, FALSE); - case IDC_CHECK_PREVIOUSFILE: - hwndItem = GetDlgItem( hwndDlg, IDC_PREVIOUSFILE ); - EnableWindow( hwndItem, FALSE); - case IDC_CHECK_INSTALL: - hwndItem = GetDlgItem( hwndDlg, IDC_INSTALL); - EnableWindow( hwndItem, FALSE); - default: - ; - endswitch; - DefaultItem=nId; - case IDC_CHECK_INSTALL: - hwndItem = GetDlgItem( hwndDlg, IDC_INSTALL ); - EnableWindow( hwndItem, TRUE); - CtrlSetState (szDlg, DefaultItem,BUTTON_UNCHECKED); - CtrlSetState (szDlg, nId,BUTTON_CHECKED); - switch (DefaultItem) - case IDC_CHECK_BROWSEFILE: - hwndItem = GetDlgItem( hwndDlg, IDC_BROWSE ); - EnableWindow( hwndItem, FALSE); - hwndItem = GetDlgItem( hwndDlg, IDC_BROWSEFILE ); - EnableWindow( hwndItem, FALSE); - case IDC_CHECK_WEB: - hwndItem = GetDlgItem( hwndDlg, IDC_WEB ); - EnableWindow( hwndItem, FALSE); - case IDC_CHECK_PREVIOUSFILE: - hwndItem = GetDlgItem( hwndDlg, IDC_PREVIOUSFILE ); - EnableWindow( hwndItem, FALSE); - default: - ; - endswitch; - DefaultItem=nId; - case IDC_CHECK_WEB: - hwndItem = GetDlgItem( hwndDlg, IDC_WEB ); - EnableWindow( hwndItem, TRUE); - CtrlSetState (szDlg, DefaultItem,BUTTON_UNCHECKED); - CtrlSetState (szDlg, nId,BUTTON_CHECKED); - switch (DefaultItem) - case IDC_CHECK_BROWSEFILE: - hwndItem = GetDlgItem( hwndDlg, IDC_BROWSE ); - EnableWindow( hwndItem, FALSE); - hwndItem = GetDlgItem( hwndDlg, IDC_BROWSEFILE ); - EnableWindow( hwndItem, FALSE); - case IDC_CHECK_INSTALL: - hwndItem = GetDlgItem( hwndDlg, IDC_INSTALL); - EnableWindow( hwndItem, FALSE); - case IDC_CHECK_PREVIOUSFILE: - hwndItem = GetDlgItem( hwndDlg, IDC_PREVIOUSFILE ); - EnableWindow( hwndItem, FALSE); - default: - ; - endswitch; - DefaultItem=nId; - case IDC_CHECK_PREVIOUSFILE: - hwndItem = GetDlgItem( hwndDlg, IDC_PREVIOUSFILE ); - EnableWindow( hwndItem, TRUE); - CtrlSetState (szDlg, DefaultItem,BUTTON_UNCHECKED); - CtrlSetState (szDlg, nId,BUTTON_CHECKED); - switch (DefaultItem) - case IDC_CHECK_BROWSEFILE: - hwndItem = GetDlgItem( hwndDlg, IDC_BROWSE ); - EnableWindow( hwndItem, FALSE); - hwndItem = GetDlgItem( hwndDlg, IDC_BROWSEFILE ); - EnableWindow( hwndItem, FALSE); - case IDC_CHECK_INSTALL: - hwndItem = GetDlgItem( hwndDlg, IDC_INSTALL); - EnableWindow( hwndItem, FALSE); - case IDC_CHECK_WEB: - hwndItem = GetDlgItem( hwndDlg, IDC_WEB ); - EnableWindow( hwndItem, FALSE); - default: - ; - endswitch; - DefaultItem=nId; - default: - // check standard handling - if (SdIsStdButton( nId ) && SdDoStdButton( nId )) then - bDone = TRUE; - endif; - endswitch; - - endwhile; - - CtrlGetText (szDlg, IDC_BROWSEFILE, szDefaultBrowse); - CtrlGetText (szDlg, IDC_WEB, szDefaultWeb); - if (nId != NEXT) then - return nId; - endif; - if InstallCellServDB(DefaultItem,szDefaultWeb,szDefaultBrowse)==FALSE then - goto doagain; - endif; - EndDialog( szDlg ); - ReleaseDialog( szDlg ); - VarRestore(SRCTARGETDIR); - Enable(LOGGING); - SdUnInit( ); - // record data produced by this dialog - SilentSetCellServDB(szDlg,1,nId,DefaultItem,szDefaultWeb,szDefaultBrowse); - return nId; -end; - -//////////////////////////////////////////////////////////////////////////////// -// -// Function Name: Template -// -// Description: This dialog will show a dialog template which can be -// used for creating any user-defined dialog with the -// Windows 95 look and feel. -// Comments: -// -//////////////////////////////////////////////////////////////////////////////// - -prototype BOOL GetUser(BYREF STRING); - -function GetUser(sUser) - NUMBER nResult; -begin - sUser=" "; - nResult=GetUserLogon(sUser); - if (nResult!=1) then - sUser=""; - endif; - return (nResult==1); -end; - - -prototype BOOL SetDriveMaps(STRING,STRING,STRING,STRING,STRING); -function SetDriveMaps(szPath,szRootDrive,szRootPath,szHomeDrive,szHomePath) -HWND handle; -begin - VarSave(SRCTARGETDIR); - DeleteFile("afsdsbmt.ini"); - VarRestore(SRCTARGETDIR); - CreateFile(handle, szPath, "afsdsbmt.ini"); - WriteLine(handle, "[AFS Submounts]"); - if (StrLength(szRootDrive)==2) then - WriteLine(handle, "all="+szRootPath); - endif; - if (StrLength(szHomeDrive)==2) then - WriteLine(handle, "home=" + szHomePath); - endif; - WriteLine(handle, "[AFS Mappings]"); - if (StrLength(szRootDrive)>0) then - WriteLine(handle, szRootDrive+"="+szRootPath); - endif; - if (StrLength(szHomeDrive)>0) then - WriteLine(handle, szHomeDrive+"="+szHomePath); - endif; - CloseFile(handle); -end; - -// Return TRUE if silent mode active -prototype BOOL SilentSetHomeRoot(STRING,NUMBER,NUMBER,BYREF STRING,BYREF STRING,BYREF STRING,BYREF STRING); -function SilentSetHomeRoot(szDlg,option,nResult,szRootDrive,szRootPath,szHomeDrive,szHomePath) -STRING svSection,szTemp,szTPath,szTShare,szTDrive,szLogname; -NUMBER nTemp,nCount,I; -HWND handle; -begin - Logitn("SilentSetHomeRoot option=%i",option); - switch (option) - case 0: //READ function - if (MODE!=SILENTMODE) then - return FALSE; - endif; // this section is a little more complicated, allowing installation of n mappings - SdMakeName( svSection, szDlg, "", nvSection ); - Logit("SdMakeName="+svSection); - SilentReadData( svSection, "Result", DATA_NUMBER,szTemp,nResult); - Logitn("nResult=%i",nResult); - if (nResult!=NEXT) then - return TRUE; - endif; - Logit("Do count"); - SilentReadData( svSection, "Count", DATA_NUMBER, szTemp,nCount); - Logitn("nCount=%i",nCount); - if nCount==0 then - return TRUE; - endif; - VarSave(SRCTARGETDIR); - TARGETDIR=WINDIR; - DeleteFile("afsdsbmt.ini"); - VarRestore(SRCTARGETDIR); - CreateFile(handle, WINDIR, "afsdsbmt.ini"); - WriteLine(handle, "[AFS Submounts]"); - for I=0 to nCount-1 - Logitn("I=%i",I); - Sprintf(szTemp,"Path_%i",I); - Logit("Path="+szTemp); - SilentReadData( svSection, szTemp, DATA_STRING, szTPath,nTemp); - Logit("TPath="+szTPath); - if (szTPath % "%LOGINNAME%") then - //Replace loginname with actual loging name - nTemp=StrFind(szTPath,"%LOGINNAME%"); - StrSub(szTemp,szTPath,nTemp+11,StrLength(szTPath)); - StrSub(szTPath,szTPath,0,nTemp); - if (GetUser(szLogname)) then - szTPath=szTPath+szLogname+szTemp; - endif; - endif; - Sprintf(szTemp,"Share_%i",I); - SilentReadData( svSection, szTemp, DATA_STRING, szTShare,nTemp); - WriteLine(handle, szTShare+"="+szTPath); - endfor; - WriteLine(handle, "[AFS Mappings]"); - for I=0 to nCount-1 - Sprintf(szTemp,"Drive_%i",I); - SilentReadData( svSection, szTemp, DATA_STRING, szTDrive,nTemp); - Sprintf(szTemp,"Path_%i",I); - SilentReadData( svSection, szTemp, DATA_STRING, szTPath,nTemp); - if (szTPath % "%LOGINNAME%") then - //Replace loginname with actual loging name - nTemp=StrFind(szTPath,"%LOGINNAME%"); - StrSub(szTemp,szTPath,nTemp+11,StrLength(szTPath)); - StrSub(szTPath,szTPath,0,nTemp); - if (GetUser(szLogname)) then - szTPath=szTPath+szLogname+szTemp; - endif; - endif; - WriteLine(handle, szTDrive+"="+szTPath); - endfor; - CloseFile(handle); - nResult=NEXT; - return TRUE; - default: //write - SdMakeName( svSection, szDlg, "", nvSection ); - nCount=0; - SilentWriteData( svSection, "Result", DATA_NUMBER,szTemp, nResult ); - if (StrLength(szRootDrive)==2) then - Sprintf(szTemp,"Drive_%i",nCount); - SilentWriteData( svSection,szTemp, DATA_STRING,szRootDrive, nTemp );//root drive - Sprintf(szTemp,"Path_%i",nCount); - SilentWriteData( svSection,szTemp, DATA_STRING,szRootPath, nTemp );//root drive - Sprintf(szTemp,"Share_%i",nCount); - SilentWriteData( svSection,szTemp, DATA_STRING,"all", nTemp );//root drive - nCount++; - endif; - if (StrLength(szHomeDrive)==2) then - Sprintf(szTemp,"Drive_%i",nCount); - SilentWriteData( svSection,szTemp, DATA_STRING,szHomeDrive, nTemp );//root drive - Sprintf(szTemp,"Path_%i",nCount); - SilentWriteData( svSection,szTemp, DATA_STRING,szHomePath, nTemp );//root drive - Sprintf(szTemp,"Share_%i",nCount); - SilentWriteData( svSection,szTemp, DATA_STRING,"home", nTemp );//root drive - nCount++; - endif; - SilentWriteData( svSection, "Count", DATA_NUMBER,szTemp, nCount ); // only two can be defined through Dialog box - SetDriveMaps(WINDIR,szRootDrive,szRootPath,szHomeDrive,szHomePath); - return TRUE; - endswitch; -end; - -function SetHomeRoot( szTitle,szRootDrive,szRootPath,szHomeDrive,szHomePath ) - -STRING szDlg, szTemp,svSection; -NUMBER bDone, nId, nMessage, nTemp,AvailableDrives,nResult; -INT hwndDlg,hwndItem,hwndItem2; - -begin - szDlg = "DLG_DRIVEPATH"; - - // record data produced by this dialog - Logit("SetHomeRoot"); - if SilentSetHomeRoot(szDlg,0,nResult,szRootDrive,szRootPath,szHomeDrive,szHomePath ) then - return nResult; - endif; - - GetDefaultDrive(AvailableDrives); - // ensure general initialization is complete - if (!bSdInit) then - SdInit(); - endif; - - if (EzDefineDialog( szDlg, "", "", - DLG_DRIVEPATH ) = DLG_ERR) then - return -1; - endif; - - // Loop in dialog until the user selects a standard button - bDone = FALSE; - - while (!bDone) - - nId = WaitOnDialog( szDlg ); - - switch(nId) - - case DLG_INIT: - hwndDlg = CmdGetHwndDlg( szDlg ); - // Initialize List Control - nResult=CtrlSetList( szDlg, IDC_HOMEDRIVELIST, AvailableDrives ); - if (nResult != 0) then - // Handle error from CtrlSetList. - MessageBox ("Unable to create folder name list.", SEVERE); - bDone = TRUE; - endif; - if (CtrlSetCurSel(szDlg,IDC_HOMEDRIVELIST,szHomeDrive)!=0) then - szHomeDrive="None:"; - CtrlSetCurSel(szDlg,IDC_HOMEDRIVELIST,szHomeDrive); - endif; - - nResult=CtrlSetList( szDlg, IDC_ROOTDRIVELIST, AvailableDrives ); - if (nResult != 0) then - // Handle error from CtrlSetList. - MessageBox ("Unable to create folder name list.", SEVERE); - bDone = TRUE; - endif; - if (CtrlSetCurSel(szDlg,IDC_ROOTDRIVELIST,szRootDrive)!=0) then - szRootDrive="None:"; - CtrlSetCurSel(szDlg,IDC_ROOTDRIVELIST,szRootDrive); - endif; - - nResult=CtrlSetText( szDlg, IDC_ROOTPATH,szRootPath ); - if (nResult != 0) then - MessageBox ("Unable to create szRootPath.", SEVERE); - bDone = TRUE; - endif; - nResult=CtrlSetText( szDlg, IDC_HOMEPATH,szHomePath ); - if (nResult != 0) then - MessageBox ("Unable to create szHomePath.", SEVERE); - bDone = TRUE; - endif; - - CtrlSetState (szDlg, IDC_ENABLEHOME,BUTTON_CHECKED); - CtrlSetState (szDlg, IDC_ENABLEROOT,BUTTON_CHECKED); - SdGeneralInit( szDlg, hwndDlg, STYLE_NORMAL, szSdProduct ); - - //This function sets the caption for old style dialogs or - //sets the text in the top banner area of win2k style dialogs - case OK: - if (szRootDrive!=szHomeDrive) then - nId = NEXT; - bDone = TRUE; - else - MessageBox("Home and Root drives cannot be the same",WARNING); - endif; - - case BACK: - nId = BACK; - bDone = TRUE; - - case DLG_ERR: - SdError( -1, "DLG_DRIVEPATH" ); - nId = -1; - bDone = TRUE; - - case DLG_CLOSE: - SdCloseDlg( hwndDlg, nId, bDone ); - - case IDC_ENABLEROOT: - - hwndItem = GetDlgItem( hwndDlg, IDC_ROOTDRIVELIST );//get handle of control in custom dialog box - hwndItem2 = GetDlgItem( hwndDlg, IDC_ROOTPATH );//get handle of control in custom dialog box - if (CtrlGetState (szDlg, nId)==BUTTON_CHECKED) then - EnableWindow( hwndItem2, TRUE); - EnableWindow( hwndItem, TRUE); - else - EnableWindow( hwndItem2, FALSE); - EnableWindow( hwndItem, FALSE); - endif; - case IDC_ENABLEHOME: - hwndItem = GetDlgItem( hwndDlg, IDC_HOMEDRIVELIST );//get handle of control in custom dialog box - hwndItem2 = GetDlgItem( hwndDlg, IDC_HOMEPATH );//get handle of control in custom dialog box - if (CtrlGetState (szDlg, nId)==BUTTON_CHECKED) then - EnableWindow( hwndItem2, TRUE); - EnableWindow( hwndItem, TRUE); - else - EnableWindow( hwndItem2, FALSE); - EnableWindow( hwndItem, FALSE); - endif; - - case IDC_HOMEDRIVELIST: - ; - case IDC_ROOTDRIVELIST: - ; - case IDC_HOMEPATH: - CtrlGetText (szDlg, nId,szHomePath); - - case IDC_ROOTPATH: - CtrlGetText (szDlg, nId,szRootPath); - - default: - // check standard handling - if (SdIsStdButton( nId ) && SdDoStdButton( nId )) then - bDone = TRUE; - endif; - endswitch; - - endwhile; - - CtrlGetCurSel (szDlg, nId, szRootDrive); - if (CtrlGetState (szDlg, IDC_ENABLEROOT)==BUTTON_UNCHECKED) then - szRootDrive="None:"; - endif; - CtrlGetCurSel (szDlg, nId, szHomeDrive); - if (CtrlGetState (szDlg, IDC_ENABLEHOME)==BUTTON_UNCHECKED) then - szHomeDrive="None:"; - endif; - EndDialog( szDlg ); - ReleaseDialog( szDlg ); - - SdUnInit( ); - - // record data produced by this dialog - if (nId==NEXT) then - SilentSetHomeRoot(szDlg,1,nId,szRootDrive,szRootPath,szHomeDrive,szHomePath ); - endif; - ListDestroy (AvailableDrives); - return nId; - -end; - - -// ---- script function prototypes ----- - - - // your script function prototypes - - - -/////////////////////////////////////////////////////////////////////////////// -// -// MAIN PROGRAM -// -// The setup begins here by hiding the visible setup -// window. This is done to allow all the titles, images, etc. to -// be established before showing the main window. The setup is -// then performed in a series of calls to script defined functions, -// with error checking at each step. -// -/////////////////////////////////////////////////////////////////////////////// -program - Logit("Begin"); - nvSection=0; - Disable( BACKGROUND ); - if (UseDLL(SUPPORTDIR ^ SETUP_UTILS_DLL_PATH) < 0) then - ShowError(@SETUPUTILS_NOT_FOUND, SEVERE); - bInstallAborted = TRUE; - goto end_install; - endif; - Logit("UseDLL1"); - ChangeDirectory (SUPPORTDIR); - if (UseDLL("GetWebDLL.dll") != 0) then - MessageBox ("DLL failed.\n\nCouldn't load"+SUPPORTDIR^"GetWebDLL.dll", INFORMATION); - abort; - endif; - Logit("UseDLL2"); - - SetupInstall(); - Logit("SetupInstall"); - - CheckRequirements(); - Logit("CheckRequirements"); - - ParseCommandLine(); - Logit("ParseCommandLine"); - - SetupAppInfo(); - Logit("SetupAppInfo"); - - LocalizeComponents(); - Logit("LocalizeComponents"); - - DetectInstalledComponents(); - Logit("DetectInstalledComponents"); - - // Can't upgrade, downgrade, or reinstall the light client, so if it is - // already installed, we must abort. This is because on Win9x, we can't - // move in-use files, and so we can't silently uninstall the light client, - // which upgrade, downgrade, and reinstall require. - if (bLightClientInstalled && !bWinNT) then - ShowError(@LIGHT_CLIENT_ALREADY_INSTALLED_MSG, SEVERE); - bInstallAborted = TRUE; - goto end_install; - endif; - - if (AnyNonUpgradableSoftwareInstalled()) then - ShowError(@NON_UPGRADABLE_SOFTWARE_INSTALLED_ERROR_MSG, SEVERE); - bInstallAborted = TRUE; - goto end_install; - endif; - - GetInstallActions(); - - if (bWSPPInstall) then - SetSilentMode(); // Tells the InstallUtils dll to run silently - PrepareForWSPPInstall(); - else - // Ask user what to install - SetupScreen(); - if (ShowDialogs()<0) goto end_install; - endif; - - // The AFS path must not contain spaces. AFS code will break if it does. - LongPathToShortPath(TARGETDIR); - - // Determine which comps to install to get the proper NLS files. - GetNlsComps(szLangComp, szReadmeComp, szDocsComp, szCodePage); - - SetUserVars(); - - CreateDirs(); - - // Uninstall current versions before we install - RemoveAllCurrentVersions(); - - // Install the Client - if (bFullClientSel) then - RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE); - Enable(LOGGING); - if RegDBSetKeyValueEx ("SYSTEM\\CurrentControlSet\\Services\\NetBT\\Parameters" - ,"SmbDeviceEnabled", REGDB_NUMBER, "0", 8) < 0 then - MessageBox ("RegDBCreateKeyEx failed.", SEVERE); - abort; - endif; - pApp = &appFullClient; - if (InstallApp(pApp) < 0) goto end_install; - endif; - if RegDBSetKeyValueEx("SYSTEM\\CurrentControlSet\\Services\\TransarcAFSDaemon\\Parameters","Cell", REGDB_STRING, szCellName, -1) < 0 then - MessageBox ("RegDBCreateKeyEx failed.", SEVERE); - abort; - endif; - // Install the Light Client - if (bLightClientSel) then - pApp = &appLightClient; - if (InstallApp(pApp) < 0) goto end_install; - if (bWin95) then - EzBatchAddString(LIGHT95_CLIENT_PROTSEQ, "", AFTER | REPLACE); - endif; - endif; - - // Install the Server - if (bServerSel) then - pApp = &appServer; - if (InstallApp(pApp) < 0) goto end_install; - CreateServerDirs(); - endif; - - // Install the Control Center - if (bCcSel) then - pApp = &appControlCenter; - if (InstallApp(pApp) < 0) goto end_install; - endif; - - // Install the Docs - if (bDocsSel) then - appDocs.szCompName = szDocsComp; - pApp = &appDocs; - if (InstallApp(pApp) < 0) goto end_install; - endif; - - // If we installed the server, then configure the bos service - if (bServerSel) then - if (ConfigServerService() < 0) goto end_install; - endif; - - // If we installed the full client, then configure the client service - // and add the NetworkProviderOrder value. - if (bFullClientSel) then - if (ConfigClientService() < 0) goto end_install; - // I'm commenting out the line below. This will result in integrated - // login being off after an install. If you want it to be on after an - // install, then uncomment the line. - // if (SetNetworkProviderOrder() < 0) goto end_install; - endif; - - if (bFullClientSel || bLightClientSel) then - ConfigAfsCreds(); - endif; - - RestorePreviousConfigs(); - - AddPath(szCommonBinPath); - - // If not only installing docs, then set BATCH_INSTALL to true, - // which will cause setup to want to reboot the computer. - if (OnlyInstallingDocs() == FALSE) then - BATCH_INSTALL = TRUE; - endif; - - CreateStartMenuEntries(); - -// if (bFullClientSel || bLightClientSel || bCcSel) then -// CheckCopyCellServDB(); -// endif; - - end_install: - - UnUseDLL(SUPPORTDIR^"GetWebDLL.dll"); - UnUseDLL(SUPPORTDIR ^ SETUP_UTILS_DLL_PATH); - - CleanUpInstall(); - - // If an unrecoverable error occurred, clean up - // the partial installation. Otherwise, exit normally. - if (bInstallAborted) then - abort; - endif; - -endprogram - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: ShowDialogs -// -// Purpose: This function manages the display and navigation of -// the standard dialogs that exist in a setup. -// -/////////////////////////////////////////////////////////////////////////////// -function ShowDialogs() - NUMBER nResult,handle; - STRING szTargetLicense; - STRING szSourceLicense; - STRING sRootDrive,sHomeDrive,userID,rootPath,homePath; - NUMBER DefaultItem; - STRING szDefaultWeb,szDefaultBrowse,szDefaultInstall,szPreviousInstall; - STRING szResult[256],svResult; -begin - Dlg_Start: - // beginning of dialogs label - Dlg_SdWelcome: - nResult = DialogShowSdWelcome(); - if (nResult = BACK) goto Dlg_Start; - - Dlg_License: -// szTargetLicense = DOCUMENTATION_LICENSE_PATH; -// GetLicenseFilename (szSourceLicense); -// Logit("ShowLicense"); -// Disable( DIALOGCACHE ); -// if (MODE!=SILENTMODE) then -// nResult = ShowLicense(szTargetLicense,szSourceLicense); -// if (nResult = 0) then -// abort; -// endif; -// Enable( DIALOGCACHE ); -// endif; - if (nResult = BACK) goto Dlg_Start; - Dlg_SdCompDlg: - nResult = DialogShowSdAskComponentDialog(); - Logit("DialogShowSdAskComponentDialog"); - if (nResult = BACK) goto Dlg_License; - - Dlg_SdSelectFolder: - nResult = DialogShowSdSelectFolder(); - Logit("DialogShowSdSelectFolder"); - if (nResult = BACK) goto Dlg_SdCompDlg; - if (bFullClientSel || bLightClientSel) then - szDefaultWeb=@CELLSERVDB_WEB; - szDefaultBrowse=TARGETDIR^"*"; - szDefaultInstall=@CELLSERVDB_INSTALL; - szPreviousInstall=WINDIR^@CELLSERVDB_CONFIGNAME; - if (Is(FILE_EXISTS,szPreviousInstall)) then - DefaultItem=IDC_CHECK_PREVIOUSFILE; - else - DefaultItem=IDC_CHECK_INSTALL; - endif; - Dlg_SdSelectCellServDB: - Logit("SetCellServDB-next"); - nResult =SetCellServDB("Select AFS Cell Data base (afsdcell.ini)" - ,DefaultItem - ,szPreviousInstall - ,szDefaultWeb - ,szDefaultBrowse - ,szDefaultInstall); - Logit("SetCellServDB"); - if (nResult=BACK) goto Dlg_SdSelectFolder; - Dlg_SdSelectCellName: - nResult=SdShowDlgEdit1 ("Select AFS Cell Name","A valid cell name should be entered here.\nIf you don't know your cell name, you may enter one after installation using the AFS Control Center.","Enter Cell Name:", szCellName); - if (nResult = BACK) goto Dlg_SdSelectCellName; - if (Is(FILE_EXISTS, WINDIR^"afsdsbmt.ini")) then - Logit("AskYesNo next"); - if (AskYesNo("Previous Drive Mapping Configuration already exist.\n\nPress Yes to keep previous configuration\nPress No to change previous configuration.",YES)=YES) then - return 0; - endif; - endif; - userID=" "; - GetUser(userID); - sRootDrive="Z:"; - sHomeDrive="U:"; - rootPath="/"; - homePath = "/afs/" + szCellName + "/u/" + userID; - nResult=SetHomeRoot( "Home and Root Drive Assignment\nThese drives will be mapped each time AFS is connected!",sRootDrive,rootPath,sHomeDrive,homePath ); - Logit("SetHomeRoot"); - if (nResult = BACK) goto Dlg_SdSelectCellServDB; - endif; - Logit("ShowDialogs-done"); - return 0; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: NotUpgradable -// -// Purpose: This function will return TRUE if the passed in version is not -// upgradable. -// -/////////////////////////////////////////////////////////////////////////////// -function NotUpgradable(pApp) -begin - // The 3.5 beta is not upgradable -// if ((pApp->iVer.nMajorVersion = 3) && (pApp->iVer.nMinorVersion = 5) && (pApp->iVer.nPatchLevel = 0) && (pApp->iVer.szReleaseType = RELEASE_TYPE_BETA)) then -// return TRUE; -// endif; - - return FALSE; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: AnyNonUpgradableSoftwareInstalled -// -// Purpose: This function will return TRUE if any non-upgradable software is -// installed. -// -/////////////////////////////////////////////////////////////////////////////// -function AnyNonUpgradableSoftwareInstalled() -begin - if (NotUpgradable(&appFullClient) || - NotUpgradable(&appServer) || - NotUpgradable(&appControlCenter) || - NotUpgradable(&appLightClient) || - NotUpgradable(&appDocs)) - then - return TRUE; - endif; - - return FALSE; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: UnselectComps -// -// Purpose: This function unselects all of the componenets so that we can -// completely control what gets installed. We will select each -// component at the time when we want to install it. -// -/////////////////////////////////////////////////////////////////////////////// -function UnselectComps() -begin - ComponentSelectItem(MEDIA, SERVER_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, CLIENT_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, LIGHT_CLIENT_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, CC_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, DOCS_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, LANG_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, LANG_ENGLISH_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, LANG_SIMP_CHINESE_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, LANG_TRAD_CHINESE_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, LANG_KOREAN_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, LANG_JAPANESE_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, LANG_GERMAN_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, LANG_SPANISH_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, LANG_PORTUGUESE_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, README_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, README_ENGLISH_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, README_JAPANESE_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, README_KOREAN_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, README_SIMP_CHINESE_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, README_TRAD_CHINESE_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, README_GERMAN_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, README_SPANISH_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, README_PORTUGUESE_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, DOCS_ENGLISH_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, DOCS_JAPANESE_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, DOCS_KOREAN_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, DOCS_SIMP_CHINESE_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, DOCS_TRAD_CHINESE_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, DOCS_GERMAN_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, DOCS_SPANISH_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, DOCS_PORTUGUESE_COMP_NAME, FALSE); -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: DoesConfigInfoExist -// -// Purpose: This function determines if config info exists for an app. -// -/////////////////////////////////////////////////////////////////////////////// -function DoesConfigInfoExist(pApp) -begin - RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); - - if (RegDBKeyExist(CONFIG_INFO_KEY ^ pApp->szProductName) = 1) then - return TRUE; - endif; - - return FALSE; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: RestorePreviousConfigs -// -// Purpose: This function restores config info for the apps we just installed. -// -/////////////////////////////////////////////////////////////////////////////// -function RestorePreviousConfigs() -begin - if (appServer.bInstallSucceeded && DoesConfigInfoExist(&appServer)) then - RestoreConfigInfo(SERVER); - endif; - - if (appFullClient.bInstallSucceeded) then - if (appFullClient.iVer.szTitle = "3.4a") then - Upgrade34ClientConfigInfo(); - elseif (DoesConfigInfoExist(&appFullClient) = TRUE) then - RestoreConfigInfo(CLIENT); - endif; - endif; - - if (appLightClient.bInstallSucceeded && DoesConfigInfoExist(&appLightClient)) then - RestoreConfigInfo(LCLIENT); - endif; - - // Only restore control center info if client not installed - if (appControlCenter.bInstallSucceeded && !bClientInstalled && !appFullClient.bInstallSucceeded - && DoesConfigInfoExist(&appControlCenter)) - then - RestoreConfigInfo(CC); - endif; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: OnlyInstallingDocs -// -// Purpose: This function determines if only the doc files are being installed. -// -/////////////////////////////////////////////////////////////////////////////// -function OnlyInstallingDocs() -begin - if (!bServerSel && !bFullClientSel && !bLightClientSel && !bCcSel && bDocsSel) then - return TRUE; - endif; - - return FALSE; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: CreateDirs -// -// Purpose: This function creates directories that we don't want IS to make. -// -/////////////////////////////////////////////////////////////////////////////// -function CreateDirs() -begin - // Turn off logging. It shouldn't be on when this func is called, but we - // turn it off anyway just to make sure. We turn it off so that IS won't - // try to delete the dirs we are about to make during an uninstall. If - // we don't do this, then the first app installed that uses one of these - // dirs will think that it owns that dir and won't know that other apps - // are sharing it. - Disable(LOGGING); - - // Create the target dir and the shared dirs - CreateDir(TARGETDIR); - CreateDir(TARGETDIR ^ "Documentation"); - CreateDir(TARGETDIR ^ "Documentation\\Html"); - CreateDir(TARGETDIR ^ "Documentation\\Html\\InstallGd"); - CreateDir(TARGETDIR ^ "Documentation\\Html\\ReleaseNotes"); - - // We need to manually create the Server dir so that if we have to leave - // it behind during an uninstall (so that config info is preserved), IS - // won't complain that it can't be deleted. - if (bServerSel) then - CreateDir(TARGETDIR ^ "Server\\usr\\afs\\bin"); - endif; - - // Docs don't use the common dir - if (OnlyInstallingDocs() = FALSE) then - CreateDir(TARGETDIR ^ "Common"); - endif; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: PrepareForWSPPInstall -// -// Purpose: This function decides what to install when doing a WSPP install. -// -/////////////////////////////////////////////////////////////////////////////// -function PrepareForWSPPInstall() -begin - SHELL_OBJECT_FOLDER = @WSPP_FOLDER_NAME; - - // Never install the Docs during a WSPP install - appDocs.nInstallAction = ACTION_NONE; - - // If we have been told to replace any preinstalled software, then set - // our reinstall mechanism in motion. - if (bPreinstallReplace) then - if (bCcInstalled && bCcSel) then - appControlCenter.nInstallAction = ACTION_REINSTALL; - endif; - if (bClientInstalled && bFullClientSel) then - appFullClient.nInstallAction = ACTION_REINSTALL; - endif; - if (bServerInstalled && bServerSel) then - appServer.nInstallAction = ACTION_REINSTALL; - endif; - if (bLightClientInstalled && bLightClientSel) then - appLightClient.nInstallAction = ACTION_REINSTALL; - endif; - else - // If we have been told to not install something that is already - // installed, then do just that. - if (bCcInstalled && bCcSel) then - bCcSel = FALSE; - endif; - if (bClientInstalled && bFullClientSel) then - bFullClientSel = FALSE; - endif; - if (bServerInstalled && bServerSel) then - bServerSel = FALSE; - endif; - if (bLightClientInstalled && bLightClientSel) then - bLightClientSel = FALSE; - endif; - endif; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: RemoveCurrentVersion -// -// Purpose: This function removes the currently installed version of the app. -// It provides a message to the user so they know what is going on. -// -/////////////////////////////////////////////////////////////////////////////// -function RemoveCurrentVersion(pApp) - string szMsg; - string szFormat; -begin - szFormat = ""; - - switch(pApp->nInstallAction) - case ACTION_REINSTALL: szFormat = @REINSTALL_PREP_MSG; - case ACTION_UPGRADE: szFormat = @UPGRADE_PREP_MSG; - case ACTION_DOWNGRADE: szFormat = @DOWNGRADE_PREP_MSG; - endswitch; - - if (szFormat == "") then - return; - endif; - - Sprintf(szMsg, szFormat, pApp->szProductName); - - if (!bWSPPInstall) then - SdShowMsg(szMsg, TRUE); - endif; - - RemoveInstalledBits(pApp->szProductName); - - if (!bWSPPInstall) then - SdShowMsg(szMsg, FALSE); - endif; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: RemoveAllCurrentVersions -// -// Purpose: This function removes the current install of all apps that are -// begin reinstalled, upgraded, or downgraded. -// -/////////////////////////////////////////////////////////////////////////////// -function RemoveAllCurrentVersions() -begin - if (bFullClientSel) then - RemoveCurrentVersion(&appFullClient); - endif; - - if (bServerSel) then - RemoveCurrentVersion(&appServer); - endif; - - if (bCcSel) then - RemoveCurrentVersion(&appControlCenter); - endif; - - if (bLightClientSel) then - RemoveCurrentVersion(&appLightClient); - endif; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: InstallApp -// -// Purpose: This function installs an application that is part of a suite. -// -/////////////////////////////////////////////////////////////////////////////// -function InstallApp(pApp) - NUMBER nResult; -begin - if (pApp->nInstallAction = ACTION_NONE) then - return 0; - endif; - - // Start fresh with nothing selected - UnselectComps(); - - // Select the comps we want to install. We will install the passed in app - // as well as the comps that are shared by all the apps. Because of weird - // IS stuff, the app comp must be selected last else IS will autoselect - // things we don't want. - ComponentSelectItem(MEDIA, szReadmeComp, TRUE); - - // Lang comps are shared by all apps except the docs app - if (pApp != &appDocs) then - ComponentSelectItem(MEDIA, szLangComp, TRUE); - endif; - - // Select the app's component - ComponentSelectItem(MEDIA, pApp->szCompName, TRUE); - -// MessageBox("Install app: " + pApp->szCompName, INFORMATION); - - nResult = ProcessBeforeDataMove(pApp); - if (nResult < 0) goto error; - - nResult = MoveFileData(); - if (nResult < 0) goto error; - - nResult = ProcessAfterDataMove(); - if (nResult < 0) goto error; - - nResult = CreateRegistrySets(pApp->szRegistrySets); - if (nResult < 0) goto error; - - Disable(LOGGING); - - nResult = CreateRegistrySets(pApp->szNoLogRegistrySets); - if (nResult < 0) goto error; - - nResult = ConfigUninstallDLL(pApp); - if (nResult < 0) goto error; - - AddPath(pApp->szBinPath); - - // Now unselect it again - ComponentSelectItem(MEDIA, pApp->szCompName, FALSE); - - pApp->bInstallSucceeded = TRUE; - - return 0; - -error: - return nResult; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: ProcessBeforeDataMove -// -// Purpose: This function performs any necessary operations prior to the -// actual file transfer. -// -/////////////////////////////////////////////////////////////////////////////// -function ProcessBeforeDataMove(pApp) - STRING svLogFile; - NUMBER nResult; -begin - // Create app information and App Paths registry keys. - InstallationInfo(pApp->szCompanyName, pApp->szProductName, pApp->Ver.szTitle, pApp->szProductKey); - - svLogFile = pApp->szUninstLogfileName; - - // Create the uninstall reg key and open the log file - nResult = DeinstallStart(TARGETDIR, svLogFile, pApp->szUninstKey, 0 ); - if (nResult < 0) then - ShowError( @ERROR_UNINSTSETUP, WARNING ); - endif; - - szAppPath = pApp->szAppPath; - - // Fill in reg values for this apps reg key and uninstall reg key - RegDBSetItem( REGDB_APPPATH, szAppPath ); - RegDBSetItem( REGDB_APPPATH_DEFAULT, szAppPath ^ pApp->szProductKey); - RegDBSetItem( REGDB_UNINSTALL_NAME, pApp->szUninstDisplayName); - - return 0; -end; - - -/* -function ShowIsSelected(comp) - number nSel; - string str; -begin - nSel = ComponentIsItemSelected(MEDIA , comp); - if (nSel) then - str = comp + " is selected."; - MessageBox(str, INFORMATION); - else - str = comp + " is not selected."; - endif; -end; - - -function ShowSelectedComponents() -begin - // Visible components - ShowIsSelected(CLIENT_COMP_NAME); - ShowIsSelected(LIGHT_CLIENT_COMP_NAME); - ShowIsSelected(SERVER_COMP_NAME); - ShowIsSelected(CC_COMP_NAME); - ShowIsSelected(DOCS_COMP_NAME); - - // Language components - ShowIsSelected(LANG_COMP_NAME); - ShowIsSelected(LANG_ENGLISH_COMP_NAME); - ShowIsSelected(LANG_SIMP_CHINESE_COMP_NAME); - ShowIsSelected(LANG_TRAD_CHINESE_COMP_NAME); - ShowIsSelected(LANG_KOREAN_COMP_NAME); - ShowIsSelected(LANG_JAPANESE_COMP_NAME); - ShowIsSelected(LANG_GERMAN_COMP_NAME); - ShowIsSelected(LANG_SPANISH_COMP_NAME); - ShowIsSelected(LANG_PORTUGUESE_COMP_NAME); - - // Documentation components - ShowIsSelected(DOCS_ENGLISH_COMP_NAME); - ShowIsSelected(DOCS_JAPANESE_COMP_NAME); - ShowIsSelected(DOCS_KOREAN_COMP_NAME); - ShowIsSelected(DOCS_SIMP_CHINESE_COMP_NAME); - ShowIsSelected(DOCS_TRAD_CHINESE_COMP_NAME); - ShowIsSelected(DOCS_GERMAN_COMP_NAME); - ShowIsSelected(DOCS_SPANISH_COMP_NAME); - ShowIsSelected(DOCS_PORTUGUESE_COMP_NAME); - - // Readme files components - ShowIsSelected(README_COMP_NAME); - ShowIsSelected(README_ENGLISH_COMP_NAME); - ShowIsSelected(README_JAPANESE_COMP_NAME); - ShowIsSelected(README_KOREAN_COMP_NAME); - ShowIsSelected(README_SIMP_CHINESE_COMP_NAME); - ShowIsSelected(README_TRAD_CHINESE_COMP_NAME); - ShowIsSelected(README_GERMAN_COMP_NAME); - ShowIsSelected(README_SPANISH_COMP_NAME); - ShowIsSelected(README_PORTUGUESE_COMP_NAME); -end; -*/ - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: MoveFileData -// -// Purpose: This function handles the file transfer for -// the setup. -// -/////////////////////////////////////////////////////////////////////////////// -function MoveFileData() - NUMBER nResult, nDisk; - -begin - if (!bWSPPInstall) then - Enable( INDVFILESTATUS ); - SetStatusWindow( 0, "" ); - Disable( DIALOGCACHE ); - Enable( STATUS ); - StatusUpdate( ON, 100 ); - endif; - - nResult = ComponentMoveData( MEDIA, nDisk, 0 ); - - // Reinit this call so the progress indicator resets - ComponentMoveData("", nDisk, 0); - - HandleMoveDataError( nResult ); - - Disable( STATUS ); - - return nResult; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: HandleMoveDataError -// -// Purpose: This function handles the error (if any) during the file transfer -// operation. -// -/////////////////////////////////////////////////////////////////////////////// -function HandleMoveDataError( nResult ) - STRING szErrMsg, svComponent , svFileGroup , svFile; - string szMsg; -begin - svComponent = ""; - svFileGroup = ""; - svFile = ""; - - switch (nResult) - case 0: - return 0; - default: - ComponentError ( MEDIA , svComponent , svFileGroup , svFile , nResult ); - szErrMsg = @ERROR_MOVEDATA + "\n\n" + - @ERROR_COMPONENT + " " + svComponent + "\n" + - @ERROR_FILEGROUP + " " + svFileGroup + "\n" + - @ERROR_FILE + " " + svFile; - Sprintf(szMsg, szErrMsg, nResult); - ShowError(szMsg, SEVERE); - bInstallAborted = TRUE; - return nResult; - endswitch; - -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: ProcessAfterDataMove -// -// Purpose: This function performs any necessary operations needed after -// all files have been transferred. -// -/////////////////////////////////////////////////////////////////////////////// -function ProcessAfterDataMove() - STRING szReferenceFile; - -begin - - // TO DO : update self-registered files and other processes that - // should be performed after the files have been transferred. - - // DeinstallSetReference specifies a file to be checked before - // uninstallation. If the file is in use, uninstallation will not proceed. - -// szReferenceFile = svDir ^ pApp->szProductKey; // TO DO : If your file is in a - // subfolder of svDir add that here - -// DeinstallSetReference( szReferenceFile ); - - return 0; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: CleanUpInstall -// -// Purpose: This cleans up the setup. Anything that should -// be released or deleted at the end of the setup should -// be done here. -// -/////////////////////////////////////////////////////////////////////////////// -function CleanUpInstall() - -begin - if (bInstallAborted) then - return 0; - endif; - - if (!bWSPPInstall) then - DialogShowSdFinishReboot(); - endif; - - if (BATCH_INSTALL) then // ensure locked files are properly transferred - CommitSharedFiles(0); - endif; - - return 0; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: GetLicenseFilename -// -// Purpose: This will determine the full path to the appropriate-language -// license on the CD. Will default to English if the locale cannot -// be determined. -// -/////////////////////////////////////////////////////////////////////////////// -function GetLicenseFilename(szLicense) - number MajorLanguage; -begin - MajorLanguage = SELECTED_LANGUAGE & 255; - - switch(MajorLanguage) - case ISLANG_CHINESE: - if (SELECTED_LANGUAGE == ISLANG_CHINESE_TAIWAN) then - szLicense = SRCDIR ^ LICENSE_TRAD_CHINESE_FILENAME; - else - szLicense = SRCDIR ^ LICENSE_SIMP_CHINESE_FILENAME; - endif; - - case ISLANG_KOREAN: - szLicense = SRCDIR ^ LICENSE_KOREAN_FILENAME; - - case ISLANG_JAPANESE: - szLicense = SRCDIR ^ LICENSE_JAPANESE_FILENAME; - - case ISLANG_GERMAN: - szLicense = SRCDIR ^ LICENSE_GERMAN_FILENAME; - - case ISLANG_PORTUGUESE: - szLicense = SRCDIR ^ LICENSE_PORTUGUESE_FILENAME; - - case ISLANG_SPANISH: - szLicense = SRCDIR ^ LICENSE_SPANISH_FILENAME; - - default: - szLicense = SRCDIR ^ LICENSE_ENGLISH_FILENAME; - - endswitch; - - return 0; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: GetLanguageComp -// -// Purpose: This will determine which language the locale is set to. Uses -// this info to determine which lang, readme, and doc comps to -// install. Will default to English if the locale cannot be -// determined. -// -/////////////////////////////////////////////////////////////////////////////// -function GetNlsComps(szLangComp, szReadmeComp, szDocsComp, szCodePage) - number MajorLanguage; -begin - MajorLanguage = SELECTED_LANGUAGE & 255; - - switch(MajorLanguage) - case ISLANG_CHINESE: - if (SELECTED_LANGUAGE == ISLANG_CHINESE_TAIWAN) then - szLangComp = LANG_TRAD_CHINESE_COMP_NAME; - szReadmeComp = README_TRAD_CHINESE_COMP_NAME; - szDocsComp = DOCS_TRAD_CHINESE_COMP_NAME; - szCodePage = "1028"; - else - szLangComp = LANG_SIMP_CHINESE_COMP_NAME; - szReadmeComp = README_SIMP_CHINESE_COMP_NAME; - szDocsComp = DOCS_SIMP_CHINESE_COMP_NAME; - szCodePage = "2052"; - endif; - - case ISLANG_KOREAN: - szLangComp = LANG_KOREAN_COMP_NAME; - szReadmeComp = README_KOREAN_COMP_NAME; - szDocsComp = DOCS_KOREAN_COMP_NAME; - szCodePage = "1042"; - - case ISLANG_JAPANESE: - szLangComp = LANG_JAPANESE_COMP_NAME; - szReadmeComp = README_JAPANESE_COMP_NAME; - szDocsComp = DOCS_JAPANESE_COMP_NAME; - szCodePage = "1041"; - - case ISLANG_GERMAN: - szLangComp = LANG_GERMAN_COMP_NAME; - szReadmeComp = README_GERMAN_COMP_NAME; - szDocsComp = DOCS_GERMAN_COMP_NAME; - szCodePage = "1032"; - - case ISLANG_PORTUGUESE: - szLangComp = LANG_PORTUGUESE_COMP_NAME; - szReadmeComp = README_PORTUGUESE_COMP_NAME; - szDocsComp = DOCS_PORTUGUESE_COMP_NAME; - szCodePage = "1046"; - - case ISLANG_SPANISH: - szLangComp = LANG_SPANISH_COMP_NAME; - szReadmeComp = README_SPANISH_COMP_NAME; - szDocsComp = DOCS_SPANISH_COMP_NAME; - szCodePage = "1034"; - - default: - szLangComp = LANG_ENGLISH_COMP_NAME; - szReadmeComp = README_ENGLISH_COMP_NAME; - szDocsComp = DOCS_ENGLISH_COMP_NAME; - szCodePage = "1033"; - - endswitch; - - return 0; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: SetupVerInfo -// -// Purpose: This will initialize the VERINFO structures for a product. -// -/////////////////////////////////////////////////////////////////////////////// -function SetupVerInfo(pApp, szMajor, szMinor, szPatchLevel, szBetaLevel, szReleaseType, szTitle, bInstalledVerInfo) - int nMajor; - int nMinor; - int nPatchLevel; - int nBetaLevel; -begin - StrToNum(nMajor, szMajor); - StrToNum(nMinor, szMinor); - StrToNum(nPatchLevel, szPatchLevel); - StrToNum(nBetaLevel, szBetaLevel); - - if (bInstalledVerInfo) then - pApp->iVer.nMajorVersion = nMajor; - pApp->iVer.nMinorVersion = nMinor; - pApp->iVer.nPatchLevel = nPatchLevel; - pApp->iVer.nBetaLevel = nBetaLevel; - pApp->iVer.szReleaseType = szReleaseType; - pApp->iVer.szTitle = szTitle; - else - pApp->Ver.nMajorVersion = nMajor; - pApp->Ver.nMinorVersion = nMinor; - pApp->Ver.nPatchLevel = nPatchLevel; - pApp->Ver.nBetaLevel = nBetaLevel; - pApp->Ver.szReleaseType = szReleaseType; - pApp->Ver.szTitle = szTitle; - endif; -end; - - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: FixTargetPaths -// -// Purpose: This function updates the CommonBinPath and app paths if you -// choose to install to a different directory -// -/////////////////////////////////////////////////////////////////////////////// -function FixTargetPaths() -begin - // The AFS path must not contain spaces. AFS code will break if it does. - LongPathToShortPath(TARGETDIR); - - szCommonBinPath = TARGETDIR ^ "Common"; - - // Full Client - appFullClient.szAppPath = TARGETDIR ^ "Client"; - appFullClient.szBinPath = TARGETDIR ^ "Client\\Program"; - - // Light Client - appLightClient.szAppPath = TARGETDIR ^ "Client"; - appLightClient.szBinPath = TARGETDIR ^ "Client\\Program"; - - // Server - appServer.szAppPath = TARGETDIR ^ "Server"; - appServer.szBinPath = TARGETDIR ^ "Server\\usr\\afs\\bin"; - - // Control Center - appControlCenter.szAppPath = TARGETDIR ^ "Control Center"; - appControlCenter.szBinPath = TARGETDIR ^ "Control Center"; - - // Docs - appDocs.szAppPath = TARGETDIR ^ "Documentation"; - appDocs.szBinPath = TARGETDIR ^ "Documentation"; -end; - - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: SetupAppInfo -// -// Purpose: This will initialize the APPINFO structures for each product -// that we can install. -// -/////////////////////////////////////////////////////////////////////////////// -function SetupAppInfo() -int n; -begin - szCommonBinPath = TARGETDIR ^ "Common"; - - // Full Client - appFullClient.szCompName = CLIENT_COMP_NAME; // Component name - appFullClient.szCompanyName = @COMPANY_NAME; - appFullClient.szProductName = @PRODUCT_NAME_CLIENT; - appFullClient.szProductKey = @PRODUCT_KEY_CLIENT; - appFullClient.bUseUninstDLL = TRUE; - appFullClient.szUninstDllName = CLIENT_UNINST_DLL_NAME; - appFullClient.szUninstLogfileName = CLIENT_UNINST_LOGFILE_NAME; - appFullClient.szUninstKey = @UNINST_KEY_CLIENT; - appFullClient.szAppPath = TARGETDIR ^ "Client"; - appFullClient.szBinPath = TARGETDIR ^ "Client\\Program"; - appFullClient.bAddToPath = TRUE; - appFullClient.szUninstDisplayName = @UNINST_DISPLAY_NAME_CLIENT; - appFullClient.szRegistrySets = "Client,Full_Client"; - appFullClient.szNoLogRegistrySets = "Client_NoUninstall,WinNT_Client_NoUninstall"; - appFullClient.bInstallSucceeded = FALSE; - SetupVerInfo(&appFullClient, @PRODUCT_VERSION_MAJOR, @PRODUCT_VERSION_MINOR, @PRODUCT_VERSION_PATCH_LEVEL, @PRODUCT_VERSION_BETA_LEVEL, @PRODUCT_VERSION_RELEASE_TYPE, @PRODUCT_VERSION_TITLE, FALSE); - - // Light Client - if (bWin95) then - appLightClient.szCompName = LIGHT95_CLIENT_COMP_NAME; - elseif (bWin98) then - appLightClient.szCompName = LIGHT98_CLIENT_COMP_NAME; - endif; - appLightClient.szCompanyName = @COMPANY_NAME; - appLightClient.szProductName = @PRODUCT_NAME_LIGHT_CLIENT; - appLightClient.szProductKey = @PRODUCT_KEY_LIGHT_CLIENT; - appLightClient.bUseUninstDLL = TRUE; - appLightClient.szUninstDllName = LIGHT_CLIENT_UNINST_DLL_NAME; - appLightClient.szUninstLogfileName = LIGHT_CLIENT_UNINST_LOGFILE_NAME; - appLightClient.szUninstKey = @UNINST_KEY_LIGHT_CLIENT; - appLightClient.szAppPath = TARGETDIR ^ "Client"; - appLightClient.szBinPath = TARGETDIR ^ "Client\\Program"; - appLightClient.bAddToPath = TRUE; - appLightClient.szUninstDisplayName = @UNINST_DISPLAY_NAME_LIGHT_CLIENT; - appLightClient.szRegistrySets = "Client,LightClient"; - appLightClient.szNoLogRegistrySets = "Client_NoUninstall"; - appLightClient.bInstallSucceeded = FALSE; - SetupVerInfo(&appLightClient, @PRODUCT_VERSION_MAJOR, @PRODUCT_VERSION_MINOR, @PRODUCT_VERSION_PATCH_LEVEL, @PRODUCT_VERSION_BETA_LEVEL, @PRODUCT_VERSION_RELEASE_TYPE, @PRODUCT_VERSION_TITLE, FALSE); - - // Server - appServer.szCompName = SERVER_COMP_NAME; - appServer.szCompanyName = @COMPANY_NAME; - appServer.szProductName = @PRODUCT_NAME_SERVER; - appServer.szProductKey = @PRODUCT_KEY_SERVER; - appServer.bUseUninstDLL = TRUE; - appServer.szUninstDllName = SERVER_UNINST_DLL_NAME; - appServer.szUninstLogfileName = SERVER_UNINST_LOGFILE_NAME; - appServer.szUninstKey = @UNINST_KEY_SERVER; - appServer.szAppPath = TARGETDIR ^ "Server"; - appServer.szBinPath = TARGETDIR ^ "Server\\usr\\afs\\bin"; - appServer.bAddToPath = TRUE; - appServer.szUninstDisplayName = @UNINST_DISPLAY_NAME_SERVER; - appServer.szRegistrySets = "Server"; - appServer.szNoLogRegistrySets = ""; - appServer.bInstallSucceeded = FALSE; - SetupVerInfo(&appServer, @PRODUCT_VERSION_MAJOR, @PRODUCT_VERSION_MINOR, @PRODUCT_VERSION_PATCH_LEVEL, @PRODUCT_VERSION_BETA_LEVEL, @PRODUCT_VERSION_RELEASE_TYPE, @PRODUCT_VERSION_TITLE, FALSE); - - // Control Center - appControlCenter.szCompName = CC_COMP_NAME; - appControlCenter.szCompanyName = @COMPANY_NAME; - appControlCenter.szProductName = @PRODUCT_NAME_CC; - appControlCenter.szProductKey = @PRODUCT_KEY_CC; - appControlCenter.bUseUninstDLL = TRUE; - appControlCenter.szUninstDllName = CC_UNINST_DLL_NAME; - appControlCenter.szUninstLogfileName = CC_UNINST_LOGFILE_NAME; - appControlCenter.szUninstKey = @UNINST_KEY_CC; - appControlCenter.szAppPath = TARGETDIR ^ "Control Center"; - appControlCenter.szBinPath = TARGETDIR ^ "Control Center"; - appControlCenter.bAddToPath = TRUE; - appControlCenter.szUninstDisplayName = @UNINST_DISPLAY_NAME_CC; - appControlCenter.szRegistrySets = "Control_Center"; - appControlCenter.szNoLogRegistrySets = ""; - appControlCenter.bInstallSucceeded = FALSE; - SetupVerInfo(&appControlCenter, @PRODUCT_VERSION_MAJOR, @PRODUCT_VERSION_MINOR, @PRODUCT_VERSION_PATCH_LEVEL, @PRODUCT_VERSION_BETA_LEVEL, @PRODUCT_VERSION_RELEASE_TYPE, @PRODUCT_VERSION_TITLE, FALSE); - - // Docs - appDocs.szCompName = DOCS_COMP_NAME; - appDocs.szCompanyName = @COMPANY_NAME; - appDocs.szProductName = @PRODUCT_NAME_DOCS; - appDocs.szProductKey = @PRODUCT_KEY_DOCS; - appDocs.bUseUninstDLL = TRUE; - appDocs.szUninstDllName = DOCS_UNINST_DLL_NAME; - appDocs.szUninstLogfileName = DOCS_UNINST_LOGFILE_NAME; - appDocs.szUninstKey = @UNINST_KEY_DOCS; - appDocs.szAppPath = TARGETDIR ^ "Documentation"; - appDocs.szBinPath = TARGETDIR ^ "Documentation"; - appDocs.bAddToPath = FALSE; - appDocs.szUninstDisplayName = @UNINST_DISPLAY_NAME_DOCS; - appDocs.szRegistrySets = "Docs"; - appDocs.szNoLogRegistrySets = ""; - appDocs.bInstallSucceeded = FALSE; - SetupVerInfo(&appDocs, @PRODUCT_VERSION_MAJOR, @PRODUCT_VERSION_MINOR, @PRODUCT_VERSION_PATCH_LEVEL, @PRODUCT_VERSION_BETA_LEVEL, @PRODUCT_VERSION_RELEASE_TYPE, @PRODUCT_VERSION_TITLE, FALSE); -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: SetupInstall -// -// Purpose: This will initialize the setup. Any general initialization -// needed for the installation should be performed here. -// -/////////////////////////////////////////////////////////////////////////////// -function SetupInstall() -begin - Enable( CORECOMPONENTHANDLING ); - - szCellName=@CELLNAME_DEFAULT; - bInstallAborted = FALSE; - - // Create list of end user selections to be displayed by DialogShowSdStartCopy() - - svDir = PROGRAMFILES ^ @DEFAULT_INSTALL_DIR; - - TARGETDIR = svDir; - - SdProductName( @PRODUCT_NAME ); - - Enable( DIALOGCACHE ); - - SetDialogTitle(DLG_ASK_YESNO, @TITLE_CAPTIONBAR); - SetDialogTitle(DLG_MSG_INFORMATION, @TITLE_CAPTIONBAR); - SetDialogTitle(DLG_MSG_WARNING, @TITLE_CAPTIONBAR); - SetDialogTitle(DLG_MSG_SEVERE, @TITLE_CAPTIONBAR); - SetDialogTitle(DLG_USER_CAPTION, @TITLE_CAPTIONBAR); -end; - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: SetupScreen -// -// Purpose: This function establishes the screen look. This includes -// colors, fonts, and text to be displayed. -// -/////////////////////////////////////////////////////////////////////////////// -function SetupScreen() -begin - Enable( FULLWINDOWMODE ); - SetTitle( @TITLE_MAIN, 24, WHITE ); - - SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION ); // Caption bar text. - - Enable( BACKGROUND ); - - Delay( 1 ); -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: CheckRequirements -// -// Purpose: This function checks all minimum requirements for the -// application being installed. If any fail, then the user -// is informed and the setup is terminated. -// -/////////////////////////////////////////////////////////////////////////////// -function CheckRequirements() - NUMBER nvDx, nvDy, nvResult; - STRING svResult; -begin - bWinNT = FALSE; - bWin95 = FALSE; - bWin98 = FALSE; - bIsShellExplorer = FALSE; - - // Check screen resolution. - GetExtents( nvDx, nvDy ); - - if (nvDy < 480) then - ShowError( @ERROR_VGARESOLUTION, WARNING ); - abort; - endif; - - // set 'setup' operation mode - bIs32BitSetup = TRUE; - GetSystemInfo( ISTYPE, nvResult, svResult ); - if (nvResult = 16) then - bIs32BitSetup = FALSE; // running 16-bit setup - return 0; // no additional information required - endif; - - // --- 32-bit testing after this point --- - - // Determine the target system's operating system. - GetSystemInfo( OS, nvResult, svResult ); - - if (nvResult = IS_WINDOWSNT) then - // Running Windows NT. - bWinNT = TRUE; - - // If the user is not an admin, then abort - if (CheckIfAdmin() = -1) then - ShowError(@MUST_BE_AN_ADMIN_MSG, SEVERE); - abort; - endif; - - // Check to see if the shell being used is EXPLORER shell. - if (GetSystemInfo( OSMAJOR, nvResult, svResult ) = 0) then - if (nvResult >= 4) then - bIsShellExplorer = TRUE; - endif; - endif; - - elseif (nvResult = IS_WINDOWS95) then - // IS puts us here even for Win98 - if (IsWin98() = 0) then - bWin98 = TRUE; - else - bWin95 = TRUE; - endif; - - bIsShellExplorer = TRUE; - endif; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: DialogShowSdWelcome -// -// Purpose: This function handles the standard welcome dialog. -// -// -/////////////////////////////////////////////////////////////////////////////// -function DialogShowSdWelcome() - NUMBER nResult; - STRING szTitle, szMsg; - -begin - - szTitle = ""; - szMsg = @WELCOME_MESSAGE; - nResult = SdWelcome( szTitle, szMsg ); - - return nResult; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: DialogShowSdAskDestPath -// -// Purpose: This function asks the user for the destination folder. -// -/////////////////////////////////////////////////////////////////////////////// -function DialogShowSdAskDestPath() - NUMBER nResult; - STRING szTitle, szMsg; - -begin - - szTitle = ""; - szMsg = ""; - nResult = SdAskDestPath( szTitle, szMsg, svDir, 0 ); - - TARGETDIR = svDir; - FixTargetPaths(); - - return nResult; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: GetVersionNumber -// -// Purpose: This function converts a version number string into an integer. -// -/////////////////////////////////////////////////////////////////////////////// -function GetVersionNumber(szVerion) - int nVersion; - int nMajorVersion; - int nMinorVersion; - string szVer[64]; -begin - // This code assumes a majorversion.minorversion format. - szVer = szVerion; - - // This will get everything up to the '.' - StrToNum(nMajorVersion, szVer); - - // Delete the part of the string we just converted - StrSub(szVer, szVer, StrFind(szVer, ".") + 1, 64); - - // Now convert the part after the '.' - StrToNum(nMinorVersion, szVer); - - // Turn in into a single number - nVersion = (nMajorVersion * 10) + nMinorVersion; - - return nVersion; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: CompareVersions -// -// Purpose: This function compares an apps two version info structures and -// determines if one is greater than the other, or if they are equal. -// -/////////////////////////////////////////////////////////////////////////////// -function CompareVersions(pApp) - int nResult; -begin - // Compare major versions - nResult = pApp->Ver.nMajorVersion - pApp->iVer.nMajorVersion; - if (nResult > 0) then return 1; endif; - if (nResult < 0) then return -1; endif; - - // Major versions are equal, move on to minor versions - nResult = pApp->Ver.nMinorVersion - pApp->iVer.nMinorVersion; - if (nResult > 0) then return 1; endif; - if (nResult < 0) then return -1; endif; - - // Minor versions are equal, move on to patch level. - nResult = pApp->Ver.nPatchLevel - pApp->iVer.nPatchLevel; - if (nResult > 0) then return 1; endif; - if (nResult < 0) then return -1; endif; - - // Patch levels are equal, move on to release type. - if ((pApp->Ver.szReleaseType = RELEASE_TYPE_GA) && (pApp->iVer.szReleaseType = RELEASE_TYPE_BETA)) then return 1; endif; - if ((pApp->Ver.szReleaseType = RELEASE_TYPE_BETA) && (pApp->iVer.szReleaseType = RELEASE_TYPE_GA)) then return -1; endif; - - // Release types are equal. Special handling now required: - - // If this is a GA release, then there is no more info to look at, and the versions are equal. - if (pApp->Ver.szReleaseType = RELEASE_TYPE_GA) then return 0; endif; - - // We have a Beta release, so we still have some info to check. Compare the beta release levels. - nResult = pApp->Ver.nBetaLevel - pApp->iVer.nBetaLevel; - if (nResult > 0) then return 1; endif; - if (nResult < 0) then return -1; endif; - - // Beta versions are equal. - return 0; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: GetInstallAction -// -// Purpose: This function decides what install action to perform for a -// component and sets the display name accordingly. -// -/////////////////////////////////////////////////////////////////////////////// -function GetInstallAction(szCompName, bInstalled, szInstallMsg, szUpgradeMsg, szDowngradeMsg, szReinstallMsg, pApp) - string szDisplayName; - string szVerMsg; - int nResult; -begin - szVerMsg = ""; - - if (bInstalled) then - nResult = CompareVersions(pApp); - - if (nResult = 0) then - szDisplayName = szReinstallMsg; - pApp->nInstallAction = ACTION_REINSTALL; - - elseif (nResult > 0) then - szDisplayName = szUpgradeMsg; - pApp->nInstallAction = ACTION_UPGRADE; - Sprintf(szVerMsg, " %s", pApp->iVer.szTitle); - - else // Trying to install old version on top of new version - szDisplayName = szDowngradeMsg; - pApp->nInstallAction = ACTION_DOWNGRADE; - Sprintf(szVerMsg, " %s", pApp->iVer.szTitle); - endif; - else - szDisplayName = szInstallMsg; - pApp->nInstallAction = ACTION_INSTALL; - endif; - - szDisplayName = szDisplayName + szVerMsg; - - ComponentSetData(MEDIA, szCompName, COMPONENT_FIELD_DISPLAYNAME, 0, szDisplayName); - - return TRUE; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: GetInstallActions -// -// Purpose: This function decides what install action to perform for each -// component and sets the display name accordingly. -// -/////////////////////////////////////////////////////////////////////////////// -function GetInstallActions() -begin - // Decide what to do for each component and then set the display names appropriately - GetInstallAction(CLIENT_COMP_NAME, bClientInstalled, @INSTALL_CLIENT_MSG, @UPGRADE_CLIENT_MSG, @DOWNGRADE_CLIENT_MSG, @REINSTALL_CLIENT_MSG, &appFullClient); - GetInstallAction(SERVER_COMP_NAME, bServerInstalled, @INSTALL_SERVER_MSG, @UPGRADE_SERVER_MSG, @DOWNGRADE_SERVER_MSG, @REINSTALL_SERVER_MSG, &appServer); - GetInstallAction(CC_COMP_NAME, bCcInstalled, @INSTALL_CC_MSG, @UPGRADE_CC_MSG, @DOWNGRADE_CC_MSG, @REINSTALL_CC_MSG, &appControlCenter); - GetInstallAction(LIGHT_CLIENT_COMP_NAME, bLightClientInstalled, @INSTALL_LIGHT_CLIENT_MSG, @UPGRADE_LIGHT_CLIENT_MSG, @DOWNGRADE_LIGHT_CLIENT_MSG, @REINSTALL_LIGHT_CLIENT_MSG, &appLightClient); - GetInstallAction(DOCS_COMP_NAME, bDocsInstalled, @INSTALL_DOCS_MSG, @UPGRADE_DOCS_MSG, @DOWNGRADE_DOCS_MSG, @REINSTALL_DOCS_MSG, &appDocs); -end; - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: ClientSelectedOrInstalled -// -// Purpose: This function checks whether or not the client is selected or if -// it is already installed. -// -/////////////////////////////////////////////////////////////////////////////// -function ClientSelectedOrInstalled() -begin - if (bFullClientSel || bClientInstalled) then - return TRUE; - endif; - - return FALSE; -end; - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: AppVersionOk -// -// Purpose: This function determines if a given app will have the correct -// version after installation. -// -/////////////////////////////////////////////////////////////////////////////// -function AppVersionOk(bInstalled, bSel, pApp) - BOOL bOk; -begin - // Here's the logic of this: - // - // 1) If the app is not installed and - // a) it's not being installed, then this app doesn't affect the version - // restrictions, so return true - // b) it will be installed, then it will get the version which this - // installer installs, so the version will be ok - // - // 2) If the app is installed and - // a) the app is selected for reinstall, upgrade, or downgrade, then the - // newly installed version will be the version this installer installs, - // and so the version will be ok - // b) the app is not selected for reinstall, upgrade, or downgrade, then - // the version is ok only if the app's current version matches the - // the version of this installer - - bOk = !bInstalled || bSel || (CompareVersions(pApp) = 0); - - return bOk; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: DialogShowSdAskComponentDialog -// -// Purpose: This function asks the user which components to install -// and what the destination folder should be. -// -/////////////////////////////////////////////////////////////////////////////// -function DialogShowSdAskComponentDialog() - NUMBER nResult; - STRING szTitle, szMsg, szComponent, szFilename; - BOOL bClient, bServer, bCc, bDocs, bVersionsOK; -begin - - szTitle = ""; - szMsg = ""; - szComponent = ""; - - // If running WinNT hide the Light Client component. If the user wants to only - // allow client installs, then hide all but the Client component as well. If not - // running on NT, then hide all but the Light Client component. - if (bWinNT) then - ComponentSetData(MEDIA, LIGHT_CLIENT_COMP_NAME, COMPONENT_FIELD_VISIBLE, FALSE, ""); - ComponentSelectItem(MEDIA, LIGHT_CLIENT_COMP_NAME, FALSE); - - if (FindFile(SRCDIR, ALLOW_ONLY_CLIENT_FLAG_FILENAME, szFilename) = 0) then - ComponentSetData(MEDIA, SERVER_COMP_NAME, COMPONENT_FIELD_VISIBLE, FALSE, ""); - ComponentSetData(MEDIA, CC_COMP_NAME, COMPONENT_FIELD_VISIBLE, FALSE, ""); - ComponentSetData(MEDIA, DOCS_COMP_NAME, COMPONENT_FIELD_VISIBLE, FALSE, ""); - ComponentSelectItem(MEDIA, DOCS_COMP_NAME, FALSE); - endif; - ComponentSelectItem(MEDIA, SERVER_COMP_NAME, FALSE); - if (@CELLNAME_DEFAULT % ".") then - ComponentSelectItem(MEDIA, CC_COMP_NAME, FALSE); - else - ComponentSelectItem(MEDIA, CC_COMP_NAME, TRUE); - endif; -else - ComponentSetData(MEDIA, CLIENT_COMP_NAME, COMPONENT_FIELD_VISIBLE, FALSE, ""); - ComponentSetData(MEDIA, SERVER_COMP_NAME, COMPONENT_FIELD_VISIBLE, FALSE, ""); - ComponentSetData(MEDIA, CC_COMP_NAME, COMPONENT_FIELD_VISIBLE, FALSE, ""); - ComponentSetData(MEDIA, DOCS_COMP_NAME, COMPONENT_FIELD_VISIBLE, FALSE, ""); - - ComponentSelectItem(MEDIA, SERVER_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, CLIENT_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, CC_COMP_NAME, FALSE); - ComponentSelectItem(MEDIA, DOCS_COMP_NAME, FALSE); - endif; - -retry: - nResult = SdComponentDialog(szTitle, szMsg, svDir, szComponent); - - // Enforce selection rules - something must be selected and - // the client must be selected if the server is. However, take into - // account if it is already installed. - bFullClientSel = ComponentIsItemSelected(MEDIA , CLIENT_COMP_NAME); - bLightClientSel = ComponentIsItemSelected(MEDIA , LIGHT_CLIENT_COMP_NAME); - bServerSel = ComponentIsItemSelected(MEDIA , SERVER_COMP_NAME); - bCcSel = ComponentIsItemSelected(MEDIA , CC_COMP_NAME); - bDocsSel = ComponentIsItemSelected(MEDIA , DOCS_COMP_NAME); - - if (!bFullClientSel && !bLightClientSel && !bServerSel && !bCcSel && !bDocsSel) then - ShowError(@NOTHING_SELECTED_MSG, SEVERE); - goto retry; - endif; - - if (bServerSel && !ClientSelectedOrInstalled()) then - ShowError(@SERVER_NEEDS_CLIENT_MSG, SEVERE); - goto retry; - endif; - - // Also, if upgrading or downgrading, all apps must be at the same version level. - // We won't upgrade one app to a higer version than another, and we won't downgrade - // one app to a lowel version than another. All must be at the same level when the - // install program is done. This is necessary because the apps share some files. - if (!bWinNT) then - bVersionsOK = TRUE; - else - bClient = AppVersionOk(bClientInstalled, bFullClientSel, &appFullClient); - bServer = AppVersionOk(bServerInstalled, bServerSel, &appServer); - bCc = AppVersionOk(bCcInstalled, bCcSel, &appControlCenter); - bDocs = AppVersionOk(bDocsInstalled, bDocsSel, &appDocs); - bVersionsOK = bClient && bServer && bCc && bDocs; - endif; - - if (!bVersionsOK) then - ShowError(@APPS_NOT_SAME_VERSION, SEVERE); - goto retry; - endif; - - TARGETDIR = svDir; - FixTargetPaths(); - - return nResult; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: DialogShowSdSetupType -// -// Purpose: This function displays the standard setup type dialog. -// -/////////////////////////////////////////////////////////////////////////////// -function DialogShowSdSetupType() - NUMBER nResult, nType; - STRING szTitle, szMsg, szReserved; - -begin - - if (svSetupType == "") then - svSetupType = "AFS Server"; - endif; - - szTitle = ""; - szMsg = @SETUP_TYPE_MSG; - szReserved = ""; - - nResult = SdSetupTypeEx(szTitle, szMsg, szReserved, svSetupType, 0); - - return nResult; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: DialogShowSdSelectFolder -// -// Purpose: This function displays the standard folder selection dialog. -// -// -/////////////////////////////////////////////////////////////////////////////// -function DialogShowSdSelectFolder() - NUMBER nResult; - STRING szTitle, szMsg; -begin - if (SHELL_OBJECT_FOLDER = "") then - SHELL_OBJECT_FOLDER = @FOLDER_NAME; - endif; - - // We are going to force the user to use the default folder name. This is - // because we create the folder unlogged, and must therefore remove it - // ourselves in our uninstall dll (which we do because IS doesn't handle - // removing them correctly). Therefore, we must know the name of the - // folder so we can remove it during uninstall. Also, the user can install - // the AFS components during several executions of the install program, - // and we don't want to allow them to pick a different folder each time. - // We could solve these problems in code but we don't have time, so we - // are going to force them to use our default folder name. - return 0; - - szTitle = ""; - szMsg = ""; - nResult = SdSelectFolder( szTitle, szMsg, SHELL_OBJECT_FOLDER); - - return nResult; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: DialogShowSdFinishReboot -// -// Purpose: This function will show the last dialog of the product. -// It will allow the user to reboot and/or show some readme text. -// -/////////////////////////////////////////////////////////////////////////////// -function DialogShowSdFinishReboot() - NUMBER nResult, nDefOptions; - STRING szTitle, szMsg1, szMsg2, szOption1, szOption2; - NUMBER bOpt1, bOpt2; -begin - if (!BATCH_INSTALL) then - bOpt1 = FALSE; - bOpt2 = FALSE; - szMsg1 = @SETUP_FINISHED_MSG; - szMsg2 = ""; - szOption1 = ""; - szOption2 = ""; - szTitle = ""; - nResult = SdFinish(szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2 ); - return 0; - endif; - - nDefOptions = SYS_BOOTMACHINE; - szTitle = ""; - szMsg1 = ""; - szMsg2 = ""; - nResult = SdFinishReboot( szTitle, szMsg1, nDefOptions, szMsg2, 0 ); - - return nResult; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: ConfigServerService -// -// Purpose: This function will configure the AFS Server bos service via the -// SCM. -// -/////////////////////////////////////////////////////////////////////////////// -function ConfigServerService() - STRING szMsg; - BOOL bError; - number nStatus; -begin - bError = TRUE; - - if (!bWSPPInstall) then - szMsg = @CONFIGURING_AFS_SERVER_SERVICE; - SdShowMsg(szMsg, TRUE); - endif; - - nStatus = RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); - if (nStatus < 0) goto error; - - nStatus = InstallServerService(TARGETDIR ^ "\\Server\\usr\\afs\\bin\\bosctlsvc.exe"); - if (nStatus < 0) goto error; - - bError = FALSE; - -error: - if (!bWSPPInstall) then - SdShowMsg(szMsg, FALSE); - endif; - - if (bError) then - Sprintf(szMsg, @AFS_SERVER_SERVICE_INSTALL_ERROR, nStatus); - ShowError(szMsg, SEVERE); - bInstallAborted = TRUE; - return -1; - endif; - - return 0; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: ConfigClientService -// -// Purpose: This function will configure the AFS Client service via the SCM. -// -/////////////////////////////////////////////////////////////////////////////// -function ConfigClientService() - STRING szMsg; - BOOL bError; - number nStatus; -begin - bError = TRUE; - - if (!bWSPPInstall) then - szMsg = @CONFIGURING_AFS_CLIENT_SERVICE; - SdShowMsg(szMsg, TRUE); - endif; - - nStatus = RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); - if (nStatus < 0) goto error; - - nStatus = InstallClientService(TARGETDIR ^ "\\Client\\Program\\afsd_service.exe"); - if (nStatus < 0) goto error; - - bError = FALSE; - -error: - if (!bWSPPInstall) then - SdShowMsg(szMsg, FALSE); - endif; - - if (bError) then - Sprintf(szMsg, @AFS_CLIENT_SERVICE_INSTALL_ERROR, nStatus); - ShowError(szMsg, SEVERE); - bInstallAborted = TRUE; - return -1; - endif; - - return 0; -end; - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: AddPath -// -// Purpose: This function will add the specified path to the system PATH -// environment variable. -// -/////////////////////////////////////////////////////////////////////////////// -function AddPath(szPath) -begin - LongPathToShortPath(szPath); - if (bWin98 || bWin95) then - if (EzBatchAddPath ("Path", szPath, "", AFTER) < 0) then - ShowError(@ADD_PATH_ERROR, WARNING); - endif; - else - if (AddToPath(szPath) < 0) then - ShowError(@ADD_PATH_ERROR, WARNING); - endif; - endif; - return 0; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: ConfigUninstallDLL -// -// Purpose: This function will modify the uninstall entry for these products -// to use an uninstall dll. -// -/////////////////////////////////////////////////////////////////////////////// -function ConfigUninstallDLL(pApp) - string svValue; - NUMBER nStatus; -begin - if (!pApp->bUseUninstDLL) then - return 0; - endif; - - nStatus = RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); - if (nStatus < 0) goto error; - - svValue = UNINST + " -c\"" + pApp->szBinPath ^ pApp->szUninstDllName + "\" -f\"" + TARGETDIR ^ pApp->szUninstLogfileName + "\""; - - nStatus = RegDBSetKeyValueEx(MSUNINSTALL_KEY ^ pApp->szProductName, "UninstallString", REGDB_STRING, svValue, -1); - if (nStatus < 0) goto error; - - return 0; - -error: - return nStatus; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: CreateServerDirs -// -// Purpose: This function will create directories that the server programs -// need. The creation of these is not logged, and so they will be -// deleted by the uninstall dll. -// -/////////////////////////////////////////////////////////////////////////////// -function CreateServerDirs() -begin - CreateDir(TARGETDIR ^ "\\Server\\usr\\afs\\logs"); - CreateDir(TARGETDIR ^ "\\Server\\usr\\afs\\etc"); - CreateDir(TARGETDIR ^ "\\Server\\usr\\afs\\local"); -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: GetDateTimeString() -// -// Purpose: This function will return a string containing the current date -// and time. -// -/////////////////////////////////////////////////////////////////////////////// -function GetDateTimeString(szDateTime) - STRING szDate, szTime; - NUMBER nDate, nTime; -begin - GetSystemInfo(DATE, nDate, szDate); - GetSystemInfo(TIME, nTime, szTime); - - szDateTime = szDate + " " + szTime; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: SetUserVars() -// -// Purpose: This function will set at runtime values for user defined variables -// we set up in the Registry Entries GUI tool. -// -/////////////////////////////////////////////////////////////////////////////// -function SetUserVars() - number nStatus; - string szInstallDate; - string szDesc; - string szTitle; - string szReleaseType; -begin - // Set the install date variable's value - GetDateTimeString(szInstallDate); - - ComponentSetTarget(MEDIA, "", szInstallDate); - - // Set the proper client logon dll - if (bFullClientSel) then - ComponentSetTarget(MEDIA, "", TARGETDIR ^ FULL_CLIENT_LOGON_DLL); - elseif (bLightClientSel) then - ComponentSetTarget(MEDIA, "", TARGETDIR ^ LIGHT_CLIENT_LOGON_DLL); - endif; - - // Set the client description and title values - if (bFullClientSel || bLightClientSel) then - - if (bFullClientSel) then - szDesc = @CLIENT_DESC; - szTitle = @CLIENT_TITLE; - else - szDesc = @LIGHT_CLIENT_DESC; - szTitle = @LIGHT_CLIENT_TITLE; - endif; - - ComponentSetTarget(MEDIA, "", szDesc); - ComponentSetTarget(MEDIA, "", szTitle); - endif; - - if (bServerSel) then - ComponentSetTarget(MEDIA, "", TARGETDIR ^ "Common\\afseventmsg_" + szCodePage + ".dll"); - endif; - - szReleaseType = @PRODUCT_VERSION_RELEASE_TYPE; - ComponentSetTarget(MEDIA, "", szReleaseType); - -done: - return nStatus; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: SetNetworkProviderOrder() -// -// Purpose: This function will add the AFS Client service name to the -// ProviderOrder value of the -// HKLM\SYSTEM\CurrentControlSet\ControlNetworkProvider\Order key. -// It makes a call to the setup dll to do this. -/////////////////////////////////////////////////////////////////////////////// -function SetNetworkProviderOrder() - int nStatus; -begin - nStatus = AddToNetworkProviderOrder(CLIENT_SERVICE_NAME); - if (nStatus < 0) then - ShowError(@SET_NETWORK_PROVIDER_ERROR, SEVERE); - endif; - - return nStatus; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: CreateRegistrySets() -// -// Purpose: This function will create the registry entries for each resgistry -// set in the passed in string. The string must be a comma separated -// list of registry sets created using the IS Registry Entries GUI. -// -/////////////////////////////////////////////////////////////////////////////// -function CreateRegistrySets(szRegistrySets) - int nRegSetListID; - int nResult; - string szRegSet; -begin - nRegSetListID = ListCreate(STRINGLIST); - - StrGetTokens(nRegSetListID, szRegistrySets, ","); - - nResult = ListGetFirstString(nRegSetListID, szRegSet); - while (nResult != END_OF_LIST) -// MessageBox(szRegSet, INFORMATION); - CreateRegistrySet(szRegSet); - nResult = ListGetNextString(nRegSetListID, szRegSet); - endwhile; - - ListDestroy(nRegSetListID); -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: ConfigAfsCreds() -// -// Purpose: This function will config the AFS Client Credentials tool. -// -/////////////////////////////////////////////////////////////////////////////// -function ConfigAfsCreds() -int nResult; -begin - nResult = LaunchAppAndWait(TARGETDIR ^ "Client\\Program\\afscreds.exe", "/install", WAIT); - if (nResult < 0) then - ShowError(@CONFIGURING_AFS_CREDS_ERROR, INFORMATION); - endif; - - return nResult; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: IsAppInstalled -// -// Purpose: This function will determine if an app is installed, and if it is, -// will set its iVer info. -// -/////////////////////////////////////////////////////////////////////////////// -function IsAppInstalled(pApp) -int nResult; -int nSize; -int nType; -string szKey; -string szMajorVersion, szMinorVersion, szPatchLevel, szBetaLevel, szReleaseType, szTitle; -begin - nResult = RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); - if (nResult < 0) goto error; - - szKey = COMPANY_REG_KEY ^ pApp->szProductName ^ "CurrentVersion"; - - nResult = RegDBGetKeyValueEx(szKey, "MajorVersion", nType, szMajorVersion, nSize); - if (nResult < 0) goto error; - - nResult = RegDBGetKeyValueEx(szKey, "MinorVersion", nType, szMinorVersion, nSize); - if (nResult < 0) goto error; - - nResult = RegDBGetKeyValueEx(szKey, "PatchLevel", nType, szPatchLevel, nSize); - if (nResult < 0) goto error; - - nResult = RegDBGetKeyValueEx(szKey, "BetaLevel", nType, szBetaLevel, nSize); - // It's ok for this to fail. Pre-3.5 3.32 releases did not use this. - - nResult = RegDBGetKeyValueEx(szKey, "VersionString", nType, szTitle, nSize); - if (nResult < 0) goto error; - - nResult = RegDBGetKeyValueEx(szKey, "ReleaseType", nType, szReleaseType, nSize); - if (nResult < 0) then - if ((pApp->szProductName = "AFS Client") && (szTitle = "3.4a")) then - // This value won't exist for 3.4a clients - szReleaseType = RELEASE_TYPE_GA; - else - // This value won't exist for any 3.5 beta versions - szReleaseType = RELEASE_TYPE_BETA; - endif; - endif; - - SetupVerInfo(pApp, szMajorVersion, szMinorVersion, szPatchLevel, szBetaLevel, szReleaseType, szTitle, TRUE); - - return TRUE; - -error: - return FALSE; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: LocalizeComponents() -// -// Purpose: This function updates all components to use localized text -// in their status fields as appropriate -// -/////////////////////////////////////////////////////////////////////////////// -function LocalizeComponents() -begin - LocalizeComponentStatusText ("Client\\Client_Common"); - LocalizeComponentStatusText ("Client\\Client_Program\\Client_Headers\\Client_Afs_Headers"); - LocalizeComponentStatusText ("Client\\Client_Program\\Client_Headers\\Client_Main_Headers"); - LocalizeComponentStatusText ("Client\\Client_Program\\Client_Headers\\Client_Rx_Headers"); - LocalizeComponentStatusText ("Client\\Client_Program\\Client_Headers"); - LocalizeComponentStatusText ("Client\\Client_Program\\Client_Sample"); - LocalizeComponentStatusText ("Client\\Client_Program"); - LocalizeComponentStatusText ("Client\\Client_System32"); - LocalizeComponentStatusText ("Client\\Client_WinDir"); - LocalizeComponentStatusText ("Client"); - LocalizeComponentStatusText ("Components"); - LocalizeComponentStatusText ("Control_Center\\Control_Center_Common"); - LocalizeComponentStatusText ("Control_Center\\Control_Center_Program"); - LocalizeComponentStatusText ("Control_Center\\Control_Center_System32"); - LocalizeComponentStatusText ("Control_Center\\Control_Center_WinDir"); - LocalizeComponentStatusText ("Control_Center"); - LocalizeComponentStatusText ("Documentation\\English\\Cmd_Ref"); - LocalizeComponentStatusText ("Documentation\\English\\Doc_Misc"); - LocalizeComponentStatusText ("Documentation\\English\\Sys_Admin_Guide"); - LocalizeComponentStatusText ("Documentation\\English"); - LocalizeComponentStatusText ("Documentation\\German\\Cmd_Ref"); - LocalizeComponentStatusText ("Documentation\\German\\Doc_Misc"); - LocalizeComponentStatusText ("Documentation\\German\\Sys_Admin_Guide"); - LocalizeComponentStatusText ("Documentation\\German"); - LocalizeComponentStatusText ("Documentation\\Japanese\\Cmd_Ref"); - LocalizeComponentStatusText ("Documentation\\Japanese\\Doc_Misc"); - LocalizeComponentStatusText ("Documentation\\Japanese\\Sys_Admin_Guide"); - LocalizeComponentStatusText ("Documentation\\Japanese"); - LocalizeComponentStatusText ("Documentation\\Korean\\Cmd_Ref"); - LocalizeComponentStatusText ("Documentation\\Korean\\Doc_Misc"); - LocalizeComponentStatusText ("Documentation\\Korean\\Sys_Admin_Guide"); - LocalizeComponentStatusText ("Documentation\\Korean"); - LocalizeComponentStatusText ("Documentation\\Portuguese\\Cmd_Ref"); - LocalizeComponentStatusText ("Documentation\\Portuguese\\Doc_Misc"); - LocalizeComponentStatusText ("Documentation\\Portuguese\\Sys_Admin_Guide"); - LocalizeComponentStatusText ("Documentation\\Portuguese"); - LocalizeComponentStatusText ("Documentation\\Simp_Chinese\\Cmd_Ref"); - LocalizeComponentStatusText ("Documentation\\Simp_Chinese\\Doc_Misc"); - LocalizeComponentStatusText ("Documentation\\Simp_Chinese\\Sys_Admin_Guide"); - LocalizeComponentStatusText ("Documentation\\Simp_Chinese"); - LocalizeComponentStatusText ("Documentation\\Spanish\\Cmd_Ref"); - LocalizeComponentStatusText ("Documentation\\Spanish\\Doc_Misc"); - LocalizeComponentStatusText ("Documentation\\Spanish\\Sys_Admin_Guide"); - LocalizeComponentStatusText ("Documentation\\Spanish"); - LocalizeComponentStatusText ("Documentation\\Trad_Chinese\\Cmd_Ref"); - LocalizeComponentStatusText ("Documentation\\Trad_Chinese\\Doc_Misc"); - LocalizeComponentStatusText ("Documentation\\Trad_Chinese\\Sys_Admin_Guide"); - LocalizeComponentStatusText ("Documentation\\Trad_Chinese"); - LocalizeComponentStatusText ("Documentation"); - LocalizeComponentStatusText ("Info"); - LocalizeComponentStatusText ("Languages\\Lang_English"); - LocalizeComponentStatusText ("Languages\\Lang_German"); - LocalizeComponentStatusText ("Languages\\Lang_Japanese"); - LocalizeComponentStatusText ("Languages\\Lang_Korean"); - LocalizeComponentStatusText ("Languages\\Lang_Portuguese"); - LocalizeComponentStatusText ("Languages\\Lang_Simp_Chinese"); - LocalizeComponentStatusText ("Languages\\Lang_Spanish"); - LocalizeComponentStatusText ("Languages\\Lang_Trad_Chinese"); - LocalizeComponentStatusText ("Languages"); - LocalizeComponentStatusText ("Light_Client\\Win95\\Light95_Client_Common"); - LocalizeComponentStatusText ("Light_Client\\Win95\\Light95_Client_Program"); - LocalizeComponentStatusText ("Light_Client\\Win95\\Light95_Client_System32"); - LocalizeComponentStatusText ("Light_Client\\Win95\\Light95_Client_WinDir"); - LocalizeComponentStatusText ("Light_Client\\Win95"); - LocalizeComponentStatusText ("Light_Client\\Win98\\Light_Client_Common"); - LocalizeComponentStatusText ("Light_Client\\Win98\\Light_Client_Program"); - LocalizeComponentStatusText ("Light_Client\\Win98\\Light_Client_System32"); - LocalizeComponentStatusText ("Light_Client\\Win98\\Light_Client_WinDir"); - LocalizeComponentStatusText ("Light_Client\\Win98"); - LocalizeComponentStatusText ("Light_Client"); - LocalizeComponentStatusText ("Readme\\English\\Doc_Misc"); - LocalizeComponentStatusText ("Readme\\English\\Install_Guide"); - LocalizeComponentStatusText ("Readme\\English\\Release_Notes"); - LocalizeComponentStatusText ("Readme\\English"); - LocalizeComponentStatusText ("Readme\\German\\Doc_Misc"); - LocalizeComponentStatusText ("Readme\\German\\Install_Guide"); - LocalizeComponentStatusText ("Readme\\German\\Release_Notes"); - LocalizeComponentStatusText ("Readme\\German"); - LocalizeComponentStatusText ("Readme\\Japanese\\Doc_Misc"); - LocalizeComponentStatusText ("Readme\\Japanese\\Install_Guide"); - LocalizeComponentStatusText ("Readme\\Japanese\\Release_Notes"); - LocalizeComponentStatusText ("Readme\\Japanese"); - LocalizeComponentStatusText ("Readme\\Korean\\Doc_Misc"); - LocalizeComponentStatusText ("Readme\\Korean\\Install_Guide"); - LocalizeComponentStatusText ("Readme\\Korean\\Release_Notes"); - LocalizeComponentStatusText ("Readme\\Korean"); - LocalizeComponentStatusText ("Readme\\Portuguese\\Doc_Misc"); - LocalizeComponentStatusText ("Readme\\Portuguese\\Install_Guide"); - LocalizeComponentStatusText ("Readme\\Portuguese\\Release_Notes"); - LocalizeComponentStatusText ("Readme\\Portuguese"); - LocalizeComponentStatusText ("Readme\\Simp_Chinese\\Doc_Misc"); - LocalizeComponentStatusText ("Readme\\Simp_Chinese\\Install_Guide"); - LocalizeComponentStatusText ("Readme\\Simp_Chinese\\Release_Notes"); - LocalizeComponentStatusText ("Readme\\Simp_Chinese"); - LocalizeComponentStatusText ("Readme\\Spanish\\Doc_Misc"); - LocalizeComponentStatusText ("Readme\\Spanish\\Install_Guide"); - LocalizeComponentStatusText ("Readme\\Spanish\\Release_Notes"); - LocalizeComponentStatusText ("Readme\\Spanish"); - LocalizeComponentStatusText ("Readme\\Trad_Chinese\\Doc_Misc"); - LocalizeComponentStatusText ("Readme\\Trad_Chinese\\Install_Guide"); - LocalizeComponentStatusText ("Readme\\Trad_Chinese\\Release_Notes"); - LocalizeComponentStatusText ("Readme\\Trad_Chinese"); - LocalizeComponentStatusText ("Readme"); - LocalizeComponentStatusText ("Server\\Server_Common"); - LocalizeComponentStatusText ("Server\\Server_Program"); - LocalizeComponentStatusText ("Server\\Server_System32"); - LocalizeComponentStatusText ("Server\\Server_WinDir"); - LocalizeComponentStatusText ("Server"); -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: LocalizeComponentStatusText() -// -// Purpose: This function updates one component to use localized text -// in its status fields as appropriate -// -/////////////////////////////////////////////////////////////////////////////// -function LocalizeComponentStatusText (svComponent) - NUMBER dwResult; - STRING svOriginal; - STRING svLocalized; -begin - ComponentGetData (MEDIA, svComponent, COMPONENT_FIELD_STATUS, dwResult, svOriginal); - - if (svOriginal == "CLIENT") then - svLocalized = @STATUS_INSTALLING_CLIENT; - elseif (svOriginal == "SERVER") then - svLocalized = @STATUS_INSTALLING_SERVER; - elseif (svOriginal == "CCENTER") then - svLocalized = @STATUS_INSTALLING_CCENTER; - elseif (svOriginal == "LIGHT") then - svLocalized = @STATUS_INSTALLING_LIGHT; - elseif (svOriginal == "HEADERS") then - svLocalized = @STATUS_INSTALLING_HEADERS; - elseif (svOriginal == "DOCS") then - svLocalized = @STATUS_INSTALLING_DOCS; - elseif (svOriginal == "LANGUAGE") then - svLocalized = @STATUS_INSTALLING_LANGUAGE; - else - svLocalized = ""; - endif; - - ComponentSetData(MEDIA, svComponent, COMPONENT_FIELD_STATUS, 0, svLocalized); -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: DetectInstalledComponents() -// -// Purpose: This function will detect if any of our components is already -// installed. -// -/////////////////////////////////////////////////////////////////////////////// -function DetectInstalledComponents() -begin - if (bWinNT) then - bClientInstalled = IsAppInstalled(&appFullClient); - bServerInstalled = IsAppInstalled(&appServer); - bCcInstalled = IsAppInstalled(&appControlCenter); - bDocsInstalled = IsAppInstalled(&appDocs); - else - // The light client uses the client's registry entries. There is a light - // client entry, but it contains nothing under it. IS makes it but we - // don't use it. - bLightClientInstalled = IsAppInstalled(&appLightClient); - endif; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: ParseCommandLine -// -// Purpose: This function parses the command line to set up a silent install -// -/////////////////////////////////////////////////////////////////////////////// -function ParseCommandLine() - NUMBER nResult; - STRING szTemp, szResult[MAX_STRING_LEN], szParms; - LIST listParms; -begin - bWSPPInstall = FALSE; - bPreinstallReplace = FALSE; - - szParms = CMDLINE; - - // Need a list to hold the parms - listParms = ListCreate(STRINGLIST); - - // Break parms into semicolon separated tokens and put into list - if (StrGetTokens(listParms, szParms, ";") = 0 ) then - nResult = ListGetFirstString(listParms, szResult); - - // Do until the end of the list - while (nResult != END_OF_LIST) - if (StrFind(szResult, "DIR=") > -1 ) then - nResult = StrSub(szTemp, szResult, 4, MAX_STRING_LEN); - TARGETDIR = szTemp + "\\AFS"; - - elseif (StrFind(szResult, "P=") > -1 ) then - nResult = StrSub(szTemp, szResult, StrFind(szResult, "P=") + 2, 1); - if (StrFind(szTemp, "Y") > -1 ) then - bPreinstallReplace = TRUE; - endif; - - elseif (StrFind(szResult, "C=") > -1 ) then - ProcessCompsOnCmdLn(szResult); - endif; - - nResult = ListGetNextString(listParms, szResult); - endwhile; - endif; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: ProcessCompsOnCmdLn -// -// Purpose: This function puts the components in a list and -// checks for setup types on the command line. -// -// -/////////////////////////////////////////////////////////////////////////////// -function ProcessCompsOnCmdLn(szParms) - NUMBER nResult, nIndex; - STRING szComp; -begin - bWSPPInstall = TRUE; - - // Strip c= off cmdln string - nResult = StrSub(szParms, szParms, StrFind(szParms, "C=") + 2, StrLength(szParms) - 2); - - // Get each component from the cmd line - while (StrLength(szParms)) - nIndex = StrSub(szComp, szParms, 0, StrFind(szParms, ",")); - if (!nIndex) then // if comma not found then last item in list - szComp = szParms; - nIndex = StrLength(szComp); // for extracting this string - endif; - - if (StrFind(szComp, "Client") > -1) then - bFullClientSel = TRUE; - elseif (StrFind(szComp, "Server") > -1) then - bServerSel = TRUE; - elseif (StrFind(szComp, "ControlCtr") > -1) then - bCcSel = TRUE; - endif; - - // Delete component from the command line string - StrSub(szParms, szParms, nIndex + 1, StrLength(szParms)); - endwhile; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: RemoveInstalledBits -// -// Purpose: This function silently uninstalls a product. -// -/////////////////////////////////////////////////////////////////////////////// -function RemoveInstalledBits(szProductName) - int nStatus; - int nType; - string szValue[MAX_STRING_LEN]; - string szProgram[256]; - string szCmdLine[128]; - int nSize; - int nIndex; -begin - // Check for a special case - version 3.4a of the AFS Client - if ((szProductName = "AFS Client") && (appFullClient.iVer.szTitle = "3.4a")) then - return Eradicate34Client(); - endif; - - nStatus = RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE); - if (nStatus < 0) goto error; - - nStatus = RegDBGetKeyValueEx(MSUNINSTALL_KEY ^ szProductName, "UninstallString", nType, szValue, nSize); - if (nStatus < 0) goto error; - - nIndex = StrFind(szValue, " "); - if (nIndex < 0) goto error; - - StrSub(szProgram, szValue, 0, nIndex); - StrSub(szCmdLine, szValue, nIndex + 1, 128); - - // Make the uninstall run silently - szCmdLine = szCmdLine + " -a"; - - nStatus = LaunchAppAndWait(szProgram, szCmdLine, WAIT); - if (nStatus < 0) goto error; - - return 0; - -error: - return nStatus; -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: AddShortCut -// -// Purpose: Adds a short cut to the start menu. -// -/////////////////////////////////////////////////////////////////////////////// -function AddShortCut(szFolder, szName, szCmdPath, szArgs) - int result; - string szCmd; -begin - szCmdPath = TARGETDIR ^ szCmdPath; - LongPathToQuote(szCmdPath, TRUE); - - szCmd = szCmdPath + " " + szArgs; - - nResult = AddFolderIcon(SHELL_OBJECT_FOLDER ^ szFolder, szName, szCmd, "", "", 0, "", REPLACE); - - return nResult; -end; - - - - - - - - - - - - - - - - - - - - - - - - - - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: CreateStartMenuEntries -// -// Purpose: This function creates start menu entries for our apps. -// -/////////////////////////////////////////////////////////////////////////////// -function CreateStartMenuEntries() -begin - if (bServerSel) then - AddShortCut(@SERVER_GROUP_NAME, @CFG_WIZARD_ITEM_NAME, CFG_WIZARD_CMD_PATH, CFG_WIZARD_ARGS); - endif; - - if (bFullClientSel) then - AddShortCut(@CLIENT_GROUP_NAME, @CREDS_TOOL_ITEM_NAME, CREDS_TOOL_CMD_PATH, CREDS_TOOL_ARGS); - AddShortCut(@CLIENT_GROUP_NAME, @CLIENT_HELP_ITEM_NAME, CLIENT_HELP_CMD_PATH, CLIENT_HELP_ARGS); - endif; - - if (bCcSel) then - AddShortCut(@CCENTER_GROUP_NAME, @SERVER_MANAGER_ITEM_NAME, SERVER_MANAGER_CMD_PATH, SERVER_MANAGER_ARGS); - AddShortCut(@CCENTER_GROUP_NAME, @ACCT_MANAGER_ITEM_NAME, ACCT_MANAGER_CMD_PATH, ACCT_MANAGER_ARGS); - endif; - - if (bLightClientSel) then - AddShortCut(@LIGHT_GROUP_NAME, @CREDS_TOOL_ITEM_NAME, CREDS_TOOL_CMD_PATH, CREDS_TOOL_ARGS); - AddShortCut(@LIGHT_GROUP_NAME, @LIGHT_CLIENT_HELP_ITEM_NAME, LIGHT_CLIENT_HELP_CMD_PATH, LIGHT_CLIENT_HELP_ARGS); - endif; - - AddShortCut("", @DOCUMENTATION_ITEM_NAME, DOCUMENTATION_CMD_PATH, DOCUMENTATION_ARGS); -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: ShowError -// -// Purpose: This function shows an error to the user when not in silent mode, -// and will log an error to a file when in silent mode. -// -/////////////////////////////////////////////////////////////////////////////// -function ShowError(szMsg, nType) - string szType; - int nFileID; -begin - if (!bWSPPInstall) then - MessageBox(szMsg, nType); - return; - endif; - - switch (nType) - case WARNING: szType = "Warning: "; - case SEVERE: szType = "Error: "; - case INFORMATION: szType = "Note: "; - default: szType = "Unknown error type: "; - endswitch; - - WriteToInstallErrorLog(szType + szMsg); -end; - - -/////////////////////////////////////////////////////////////////////////////// -// -// Function: CheckCopyCellServDB -// -// Purpose: During install the CellServDB file is copied into the Common dir. -// If the user does not already have this file, we will copy it for -// them into the windows directory. If they already do have the -// file, then we will do nothing. -/////////////////////////////////////////////////////////////////////////////// -function CheckCopyCellServDB() - int nResult; - string szResult; -begin - nResult = FindFile(WINDIR, CELLSERVDB_FILENAME, szResult); - if (nResult < 0) then - VarSave(SRCTARGETDIR); - SRCDIR = TARGETDIR ^ "Common"; - TARGETDIR = WINDIR; - CopyFile(CELLSERVDB_FILENAME, CELLSERVDB_FILENAME); - VarRestore(SRCTARGETDIR); - endif; -end; - - -// --- include script file section --- -#include "sddialog.rul" diff --git a/src/WINNT/install/NSIS/CellServDB b/src/WINNT/install/NSIS/CellServDB index 882d0904ea..79a2c23ffa 100644 --- a/src/WINNT/install/NSIS/CellServDB +++ b/src/WINNT/install/NSIS/CellServDB @@ -1,4 +1,4 @@ ->grand.central.org #GCO Public CellServDB 05 Jul 2007 +>grand.central.org #GCO Public CellServDB 25 Oct 2007 18.92.0.108 #grand-opening.mit.edu 128.2.203.61 #penn.central.org 130.237.48.87 #andrew.e.kth.se @@ -48,8 +48,6 @@ 66.93.118.125 #stormy 130.85.24.11 #weasel 130.85.24.13 #straykitten ->midnightlinux.com #Midnight Linux, Pittsburgh PA -208.10.142.82 #outpost.midnightlinux.com >setfilepointer.com #SetFilePointer.com 63.224.10.2 #hamlet.SetFilePointer.com 63.224.10.4 #troilus.SetFilePointer.com @@ -62,6 +60,10 @@ 213.187.92.33 #gpp1.gppc.de 213.187.92.34 #paulchen.gppc.de 213.187.92.35 #lotus.gppc.de +>cms.hu-berlin.de #Humboldt University Berlin +141.20.1.65 #commodus.cms.hu-berlin.de +141.20.1.66 #faustinus.cms.hu-berlin.de +141.20.1.67 #marcellus.cms.hu-berlin.de >ifh.de #DESY Zeuthen 141.34.22.10 #romulus.ifh.de 141.34.22.11 #remus.ifh.de @@ -147,8 +149,12 @@ 129.219.10.70 #authen1.asu.edu 129.219.10.72 #authen3.asu.edu 129.219.100.16 #authen4.asu.edu ->hep.caltech.edu #CalTech High Energy Physics -131.215.126.150 #afs.hep.caltech.edu +>eecs.berkeley.edu #University of California, Berkeley - EECS Dept. +128.32.139.34 #greed.eecs.berkeley.edu +128.32.139.35 #gluttony.eecs.berkeley.edu +169.229.60.112 #envy.eecs.berkeley.edu +>hep.caltech.edu #Caltech High Energy Physics +131.215.116.20 #afs.hep.caltech.edu >clarkson.edu #Clarkson University, Potsdam, New York USA 128.153.1.111 #arthur.clarkson.edu 128.153.9.111 #lancelot.clarkson.edu @@ -160,14 +166,15 @@ 128.2.10.28 #vice28.fs.andrew.cmu.edu 128.2.32.44 #new-vice12.fs.andrew.cmu.edu >club.cc.cmu.edu #Carnegie Mellon University Computer Club +128.2.204.149 #barium.club.cc.cmu.edu 128.237.157.11 #sodium.club.cc.cmu.edu 128.237.157.13 #potassium.club.cc.cmu.edu >chem.cmu.edu #Carnegie Mellon University - Chemistry Dept. 128.2.40.134 #afs.chem.cmu.edu 128.2.40.140 #afs2.chem.cmu.edu >cs.cmu.edu #Carnegie Mellon University - School of Comp. Sci. +128.2.184.215 #pumpkin.srv.cs.cmu.edu 128.2.201.46 #strawberry.srv.cs.cmu.edu -128.2.201.47 #pumpkin.srv.cs.cmu.edu 128.2.201.48 #cherry.srv.cs.cmu.edu >ece.cmu.edu #Carnegie Mellon University - Elec. Comp. Eng. Dept. 128.2.129.7 #porok.ece.cmu.edu @@ -199,7 +206,7 @@ >cs.fhm.edu #Department Computer Science Munich University Of Applied Science 129.187.208.2 #srv1.informatik.fh-muenchen.de >eecs.harvard.edu #Harvard - EECS -140.247.60.61 #zermelo.eecs.harvard.edu +140.247.60.64 #lefkada.eecs.harvard.edu 140.247.60.83 #corfu.eecs.harvard.edu >iastate.edu #Iowa State University 129.186.1.243 #afsdb-1.iastate.edu @@ -380,10 +387,14 @@ 134.158.232.11 #ccafsdb1.in2p3.fr 134.158.232.12 #ccafsdb2.in2p3.fr 134.158.232.13 #ccafsdb3.in2p3.fr +>mcc.ac.gb #University of Manchester +130.88.203.41 #nevis.mc.man.ac.uk +130.88.203.144 #eryri.mc.man.ac.uk +130.88.203.145 #scafell.mc.man.ac.uk >anl.gov #Argonne National Laboratory -146.137.96.33 #arteus.ctd.anl.gov -146.137.162.88 #agamemnon.ctd.anl.gov -146.137.194.80 #antenor.ctd.anl.gov +146.137.96.33 #arteus.it.anl.gov +146.137.162.88 #agamemnon.it.anl.gov +146.137.194.80 #antenor.it.anl.gov >rhic.bnl.gov #Relativistic Heavy Ion Collider 130.199.6.51 #rafs03.rcf.bnl.gov 130.199.6.52 #rafs02.rcf.bnl.gov @@ -484,9 +495,10 @@ >laroia.net #Laroia Networks 66.66.102.254 #supercore.laroia.net >sinenomine.net #Sine Nomine Associates -192.204.203.218 #va.sinenomine.net +66.135.48.108 #tx2srv03.sinenomine.net +72.73.30.42 #va.sinenomine.net >slackers.net #The Slackers' Network -63.201.48.27 #alexandria.slackers.net +199.4.150.159 #alexandria.slackers.net >tproa.net #The People's Republic of Ames 72.13.4.23 #service-3.tproa.net 72.13.4.24 #service-4.tproa.net @@ -506,6 +518,10 @@ >dementia.org #Dementia Unlimited 128.2.12.45 #alycia.dementia.org 128.2.120.216 #meredith.dementia.org +>dsrw.org #The DSRW +65.103.82.83 #straylight.dsrw.org +65.103.82.84 #chiba.dsrw.org +65.103.82.85 #freeside.dsrw.org >hackish.org #Hackish.org 24.167.65.213 #avatar.sys.hackish.org 128.2.120.138 #kurma.sys.hackish.org @@ -572,6 +588,8 @@ 194.249.156.1 #brenta.ijs.si >p-ng.si #Nova Gorica Polytechnic 193.2.120.2 #solkan.p-ng.si +>hep-ex.physics.metu.edu.tr #METU Department of Physics, Experimental HEP group, Ankara/Turke +144.122.31.131 #neutrino.physics.metu.edu.tr >phy.bris.ac.uk #Bristol University - phyics 137.222.58.9 #afs1.phy.bris.ac.uk >inf.ed.ac.uk #School of Informatics, University of Edinburgh diff --git a/src/WINNT/install/wix/CellServDB b/src/WINNT/install/wix/CellServDB index 882d0904ea..79a2c23ffa 100644 --- a/src/WINNT/install/wix/CellServDB +++ b/src/WINNT/install/wix/CellServDB @@ -1,4 +1,4 @@ ->grand.central.org #GCO Public CellServDB 05 Jul 2007 +>grand.central.org #GCO Public CellServDB 25 Oct 2007 18.92.0.108 #grand-opening.mit.edu 128.2.203.61 #penn.central.org 130.237.48.87 #andrew.e.kth.se @@ -48,8 +48,6 @@ 66.93.118.125 #stormy 130.85.24.11 #weasel 130.85.24.13 #straykitten ->midnightlinux.com #Midnight Linux, Pittsburgh PA -208.10.142.82 #outpost.midnightlinux.com >setfilepointer.com #SetFilePointer.com 63.224.10.2 #hamlet.SetFilePointer.com 63.224.10.4 #troilus.SetFilePointer.com @@ -62,6 +60,10 @@ 213.187.92.33 #gpp1.gppc.de 213.187.92.34 #paulchen.gppc.de 213.187.92.35 #lotus.gppc.de +>cms.hu-berlin.de #Humboldt University Berlin +141.20.1.65 #commodus.cms.hu-berlin.de +141.20.1.66 #faustinus.cms.hu-berlin.de +141.20.1.67 #marcellus.cms.hu-berlin.de >ifh.de #DESY Zeuthen 141.34.22.10 #romulus.ifh.de 141.34.22.11 #remus.ifh.de @@ -147,8 +149,12 @@ 129.219.10.70 #authen1.asu.edu 129.219.10.72 #authen3.asu.edu 129.219.100.16 #authen4.asu.edu ->hep.caltech.edu #CalTech High Energy Physics -131.215.126.150 #afs.hep.caltech.edu +>eecs.berkeley.edu #University of California, Berkeley - EECS Dept. +128.32.139.34 #greed.eecs.berkeley.edu +128.32.139.35 #gluttony.eecs.berkeley.edu +169.229.60.112 #envy.eecs.berkeley.edu +>hep.caltech.edu #Caltech High Energy Physics +131.215.116.20 #afs.hep.caltech.edu >clarkson.edu #Clarkson University, Potsdam, New York USA 128.153.1.111 #arthur.clarkson.edu 128.153.9.111 #lancelot.clarkson.edu @@ -160,14 +166,15 @@ 128.2.10.28 #vice28.fs.andrew.cmu.edu 128.2.32.44 #new-vice12.fs.andrew.cmu.edu >club.cc.cmu.edu #Carnegie Mellon University Computer Club +128.2.204.149 #barium.club.cc.cmu.edu 128.237.157.11 #sodium.club.cc.cmu.edu 128.237.157.13 #potassium.club.cc.cmu.edu >chem.cmu.edu #Carnegie Mellon University - Chemistry Dept. 128.2.40.134 #afs.chem.cmu.edu 128.2.40.140 #afs2.chem.cmu.edu >cs.cmu.edu #Carnegie Mellon University - School of Comp. Sci. +128.2.184.215 #pumpkin.srv.cs.cmu.edu 128.2.201.46 #strawberry.srv.cs.cmu.edu -128.2.201.47 #pumpkin.srv.cs.cmu.edu 128.2.201.48 #cherry.srv.cs.cmu.edu >ece.cmu.edu #Carnegie Mellon University - Elec. Comp. Eng. Dept. 128.2.129.7 #porok.ece.cmu.edu @@ -199,7 +206,7 @@ >cs.fhm.edu #Department Computer Science Munich University Of Applied Science 129.187.208.2 #srv1.informatik.fh-muenchen.de >eecs.harvard.edu #Harvard - EECS -140.247.60.61 #zermelo.eecs.harvard.edu +140.247.60.64 #lefkada.eecs.harvard.edu 140.247.60.83 #corfu.eecs.harvard.edu >iastate.edu #Iowa State University 129.186.1.243 #afsdb-1.iastate.edu @@ -380,10 +387,14 @@ 134.158.232.11 #ccafsdb1.in2p3.fr 134.158.232.12 #ccafsdb2.in2p3.fr 134.158.232.13 #ccafsdb3.in2p3.fr +>mcc.ac.gb #University of Manchester +130.88.203.41 #nevis.mc.man.ac.uk +130.88.203.144 #eryri.mc.man.ac.uk +130.88.203.145 #scafell.mc.man.ac.uk >anl.gov #Argonne National Laboratory -146.137.96.33 #arteus.ctd.anl.gov -146.137.162.88 #agamemnon.ctd.anl.gov -146.137.194.80 #antenor.ctd.anl.gov +146.137.96.33 #arteus.it.anl.gov +146.137.162.88 #agamemnon.it.anl.gov +146.137.194.80 #antenor.it.anl.gov >rhic.bnl.gov #Relativistic Heavy Ion Collider 130.199.6.51 #rafs03.rcf.bnl.gov 130.199.6.52 #rafs02.rcf.bnl.gov @@ -484,9 +495,10 @@ >laroia.net #Laroia Networks 66.66.102.254 #supercore.laroia.net >sinenomine.net #Sine Nomine Associates -192.204.203.218 #va.sinenomine.net +66.135.48.108 #tx2srv03.sinenomine.net +72.73.30.42 #va.sinenomine.net >slackers.net #The Slackers' Network -63.201.48.27 #alexandria.slackers.net +199.4.150.159 #alexandria.slackers.net >tproa.net #The People's Republic of Ames 72.13.4.23 #service-3.tproa.net 72.13.4.24 #service-4.tproa.net @@ -506,6 +518,10 @@ >dementia.org #Dementia Unlimited 128.2.12.45 #alycia.dementia.org 128.2.120.216 #meredith.dementia.org +>dsrw.org #The DSRW +65.103.82.83 #straylight.dsrw.org +65.103.82.84 #chiba.dsrw.org +65.103.82.85 #freeside.dsrw.org >hackish.org #Hackish.org 24.167.65.213 #avatar.sys.hackish.org 128.2.120.138 #kurma.sys.hackish.org @@ -572,6 +588,8 @@ 194.249.156.1 #brenta.ijs.si >p-ng.si #Nova Gorica Polytechnic 193.2.120.2 #solkan.p-ng.si +>hep-ex.physics.metu.edu.tr #METU Department of Physics, Experimental HEP group, Ankara/Turke +144.122.31.131 #neutrino.physics.metu.edu.tr >phy.bris.ac.uk #Bristol University - phyics 137.222.58.9 #afs1.phy.bris.ac.uk >inf.ed.ac.uk #School of Informatics, University of Edinburgh diff --git a/src/WINNT/install/wix/config.wxi b/src/WINNT/install/wix/config.wxi index 84c3a7744e..94d9ed8069 100644 --- a/src/WINNT/install/wix/config.wxi +++ b/src/WINNT/install/wix/config.wxi @@ -93,7 +93,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -134,7 +134,7 @@ - + diff --git a/src/WINNT/install/wix/files.wxi b/src/WINNT/install/wix/files.wxi index 9abac1db55..a1a2760f09 100644 --- a/src/WINNT/install/wix/files.wxi +++ b/src/WINNT/install/wix/files.wxi @@ -1,35 +1,5 @@ - - - - - - - - - - - - - - - - - - - - - - - - - @@ -922,6 +892,32 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/WINNT/install/wix/property.wxi b/src/WINNT/install/wix/property.wxi index 6861b61181..a32eb949cb 100644 --- a/src/WINNT/install/wix/property.wxi +++ b/src/WINNT/install/wix/property.wxi @@ -117,7 +117,7 @@ - + diff --git a/src/WINNT/install/wix/registry.wxi b/src/WINNT/install/wix/registry.wxi index 2f7aa00145..98dc9a8d02 100644 --- a/src/WINNT/install/wix/registry.wxi +++ b/src/WINNT/install/wix/registry.wxi @@ -92,12 +92,12 @@ - + - - + + diff --git a/src/WINNT/netidmgr_plugin/afsfuncs.c b/src/WINNT/netidmgr_plugin/afsfuncs.c index 8b807329b7..471ed98f25 100644 --- a/src/WINNT/netidmgr_plugin/afsfuncs.c +++ b/src/WINNT/netidmgr_plugin/afsfuncs.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005,2006 Secure Endpoints Inc. + * Copyright (c) 2005,2006,2007 Secure Endpoints Inc. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation @@ -900,6 +900,7 @@ afs_klog(khm_handle identity, if (r) { _reportf(L"Code %d while getting credentials", r); + k5creds = NULL; goto end_krb5; } diff --git a/src/afs/DARWIN/osi_file.c b/src/afs/DARWIN/osi_file.c index 279187befd..eddbb5c479 100644 --- a/src/afs/DARWIN/osi_file.c +++ b/src/afs/DARWIN/osi_file.c @@ -141,6 +141,9 @@ osi_UFSOpen(afs_int32 ainode) extern int cacheDiskType; afs_int32 code = 0; int dummy; + char fname[1024]; + struct osi_stat tstat; + AFS_STATCNT(osi_UFSOpen); if (cacheDiskType != AFS_FCACHE_TYPE_UFS) { osi_Panic("UFSOpen called for non-UFS cache\n"); @@ -154,6 +157,28 @@ osi_UFSOpen(afs_int32 ainode) } afile = (struct osi_file *)osi_AllocSmallSpace(sizeof(struct osi_file)); AFS_GUNLOCK(); +#ifdef AFS_CACHE_VNODE_PATH + if (ainode < 0) { + switch (ainode) { + case AFS_CACHE_CELLS_INODE: + snprintf(fname, 1024, "%s/%s", afs_cachebasedir, "CellItems"); + break; + case AFS_CACHE_ITEMS_INODE: + snprintf(fname, 1024, "%s/%s", afs_cachebasedir, "CacheItems"); + break; + case AFS_CACHE_VOLUME_INODE: + snprintf(fname, 1024, "%s/%s", afs_cachebasedir, "VolumeItems"); + break; + default: + osi_Panic("Invalid negative inode"); + } + } else { + dummy = ainode / afs_numfilesperdir; + snprintf(fname, 1024, "%s/D%d/V%d", afs_cachebasedir, dummy, ainode); + } + + code = vnode_open(fname, O_RDWR, 0, 0, &vp, afs_osi_ctxtp); +#else #ifndef AFS_DARWIN80_ENV if (afs_CacheFSType == AFS_APPL_HFS_CACHE) code = igetinode(afs_cacheVfsp, (dev_t) cacheDev.dev, &ainode, &vp, &va, &dummy); /* XXX hfs is broken */ @@ -165,6 +190,7 @@ osi_UFSOpen(afs_int32 ainode) #ifndef AFS_DARWIN80_ENV else panic("osi_UFSOpen called before cacheops initialized\n"); +#endif #endif AFS_GLOCK(); if (code) { @@ -172,10 +198,15 @@ osi_UFSOpen(afs_int32 ainode) osi_Panic("UFSOpen: igetinode failed"); } afile->vnode = vp; - afile->size = va.va_size; afile->offset = 0; afile->proc = (int (*)())0; afile->inum = ainode; /* for hint validity checking */ +#ifndef AFS_CACHE_VNODE_PATH + afile->size = va.va_size; +#else + code = afs_osi_Stat(afile, &tstat); + afile->size = tstat.size; +#endif return (void *)afile; } diff --git a/src/afs/DARWIN/osi_misc.c b/src/afs/DARWIN/osi_misc.c index 5ac8daa9e3..776571a052 100644 --- a/src/afs/DARWIN/osi_misc.c +++ b/src/afs/DARWIN/osi_misc.c @@ -102,10 +102,15 @@ uio_t afsio_darwin_partialcopy(uio_t auio, int size) { user_addr_t iovaddr; user_size_t iovsize; - /* XXX 64 bit userspaace? */ - res = uio_create(uio_iovcnt(auio), uio_offset(auio), - uio_isuserspace(auio) ? UIO_USERSPACE32 : UIO_SYSSPACE32, - uio_rw(auio)); + if (proc_is64bit(current_proc())) { + res = uio_create(uio_iovcnt(auio), uio_offset(auio), + uio_isuserspace(auio) ? UIO_USERSPACE64 : UIO_SYSSPACE32, + uio_rw(auio)); + } else { + res = uio_create(uio_iovcnt(auio), uio_offset(auio), + uio_isuserspace(auio) ? UIO_USERSPACE32 : UIO_SYSSPACE32, + uio_rw(auio)); + } for (i = 0;i < uio_iovcnt(auio) && size > 0;i++) { if (uio_getiov(auio, i, &iovaddr, &iovsize)) diff --git a/src/afs/DARWIN/osi_vnodeops.c b/src/afs/DARWIN/osi_vnodeops.c index 494a11ecca..ba7197f0e8 100644 --- a/src/afs/DARWIN/osi_vnodeops.c +++ b/src/afs/DARWIN/osi_vnodeops.c @@ -542,6 +542,8 @@ afs_vop_close(ap) else code = afs_close(avc, ap->a_fflag, &afs_osi_cred, vop_proc); osi_FlushPages(avc, vop_cred); /* hold bozon lock, but not basic vnode lock */ + /* This is legit; it just forces the fstrace event to happen */ + code = afs_CheckCode(code, NULL, 60); AFS_GUNLOCK(); return code; @@ -634,16 +636,22 @@ afs_vop_access(ap) /* we can't check for KAUTH_VNODE_TAKE_OWNERSHIP, so we always permit it */ code = afs_AccessOK(tvc, bits, &treq, cmb); - +#if defined(AFS_DARWIN80_ENV) + /* In a dropbox, cp on 10.4 behaves badly, looping on EACCES */ + /* In a dropbox, Finder may reopen the file. Let it. */ + if (code == 0 && ((bits &~(PRSFS_READ|PRSFS_WRITE)) == 0)) { + code = afs_AccessOK(tvc, PRSFS_ADMINISTER|PRSFS_INSERT|bits, &treq, cmb); + } +#endif if (code == 1 && vnode_vtype(ap->a_vp) == VREG && ap->a_action & KAUTH_VNODE_EXECUTE && (tvc->m.Mode & 0100) != 0100) { code = 0; - } + } if (code) { code= 0; /* if access is ok */ } else { - code = afs_CheckCode(EACCES, &treq, 57); /* failure code */ + code = afs_CheckCode(EACCES, &treq, 57); /* failure code */ } out: afs_PutFakeStat(&fakestate); @@ -682,12 +690,15 @@ afs_vop_getattr(ap) AFS_GLOCK(); code = afs_getattr(VTOAFS(ap->a_vp), ap->a_vap, vop_cred); + /* This is legit; it just forces the fstrace event to happen */ + code = afs_CheckCode(code, NULL, 58); AFS_GUNLOCK(); #ifdef AFS_DARWIN80_ENV VATTR_SET_SUPPORTED(ap->a_vap, va_type); VATTR_SET_SUPPORTED(ap->a_vap, va_mode); VATTR_SET_SUPPORTED(ap->a_vap, va_uid); VATTR_SET_SUPPORTED(ap->a_vap, va_gid); + VATTR_SET_SUPPORTED(ap->a_vap, va_fsid); VATTR_SET_SUPPORTED(ap->a_vap, va_fileid); VATTR_SET_SUPPORTED(ap->a_vap, va_nlink); VATTR_SET_SUPPORTED(ap->a_vap, va_data_size); @@ -714,6 +725,8 @@ afs_vop_setattr(ap) int code; AFS_GLOCK(); code = afs_setattr(VTOAFS(ap->a_vp), ap->a_vap, vop_cred); + /* This is legit; it just forces the fstrace event to happen */ + code = afs_CheckCode(code, NULL, 59); AFS_GUNLOCK(); return code; } @@ -730,6 +743,9 @@ afs_vop_read(ap) int code; struct vnode *vp = ap->a_vp; struct vcache *avc = VTOAFS(vp); + + if (vnode_isdir(ap->a_vp)) + return EISDIR; #ifdef AFS_DARWIN80_ENV ubc_sync_range(ap->a_vp, AFS_UIO_OFFSET(ap->a_uio), AFS_UIO_OFFSET(ap->a_uio) + AFS_UIO_RESID(ap->a_uio), UBC_PUSHDIRTY); #else @@ -1190,6 +1206,7 @@ afs_vop_remove(ap) GETNAME(); AFS_GLOCK(); error = afs_remove(VTOAFS(dvp), name, vop_cn_cred); + error = afs_CheckCode(error, NULL, 61); AFS_GUNLOCK(); cache_purge(vp); if (!error) { @@ -1207,6 +1224,12 @@ afs_vop_remove(ap) /* If crashes continue in ubc_hold, comment this out */ (void)ubc_uncache(vp); #endif + } else { + /* should check for PRSFS_INSERT and not PRSFS_DELETE, but the + goal here is to deal with Finder's unhappiness with resource + forks that have no resources in a dropbox setting */ + if (name[0] == '.' && name[1] == '_' && error == EACCES) + error = 0; } #ifndef AFS_DARWIN80_ENV @@ -2060,14 +2083,14 @@ afs_darwin_getnewvnode(struct vcache *avc) Don't touch! */ int afs_darwin_finalizevnode(struct vcache *avc, struct vnode *dvp, struct componentname *cnp, int isroot) { - vnode_t ovp = AFSTOV(avc); + vnode_t ovp; vnode_t nvp; int error; struct vnode_fsparam par; AFS_GLOCK(); ObtainWriteLock(&avc->lock,325); + ovp = AFSTOV(avc); if (!(avc->states & CDeadVnode) && vnode_vtype(ovp) != VNON) { - ReleaseWriteLock(&avc->lock); AFS_GUNLOCK(); #if 0 /* unsupported */ if (dvp && cnp) @@ -2075,7 +2098,11 @@ afs_darwin_finalizevnode(struct vcache *avc, struct vnode *dvp, struct component cnp->cn_hash, VNODE_UPDATE_PARENT|VNODE_UPDATE_NAME); #endif + /* Can end up in reclaim... drop GLOCK */ vnode_rele(ovp); + AFS_GLOCK(); + ReleaseWriteLock(&avc->lock); + AFS_GUNLOCK(); return 0; } if ((avc->states & CDeadVnode) && vnode_vtype(ovp) != VNON) @@ -2097,20 +2124,24 @@ afs_darwin_finalizevnode(struct vcache *avc, struct vnode *dvp, struct component error = vnode_create(VNCREATE_FLAVOR, VCREATESIZE, &par, &nvp); if (!error) { vnode_addfsref(nvp); + if ((avc->states & CDeadVnode) && vnode_vtype(ovp) != VNON) + printf("vcache %p should not be CDeadVnode", avc); + if (avc->v == ovp) { + if (!(avc->states & CVInit)) { + vnode_clearfsnode(ovp); + vnode_removefsref(ovp); + } + } avc->v = nvp; avc->states &=~ CDeadVnode; - if (!(avc->states & CVInit)) { - vnode_clearfsnode(ovp); - vnode_removefsref(ovp); - } } + vnode_put(ovp); + vnode_rele(ovp); AFS_GLOCK(); ReleaseWriteLock(&avc->lock); if (!error) afs_osi_Wakeup(&avc->states); AFS_GUNLOCK(); - vnode_put(ovp); - vnode_rele(ovp); return error; } #endif diff --git a/src/afs/LINUX/osi_export.c b/src/afs/LINUX/osi_export.c index 5de06a1a92..24d5063247 100644 --- a/src/afs/LINUX/osi_export.c +++ b/src/afs/LINUX/osi_export.c @@ -18,6 +18,10 @@ RCSID ("$Header$"); #include /* early to avoid printf->printk mapping */ +#include +#ifdef EXPORTFS_H_EXISTS +#include +#endif #include "afs/sysincludes.h" #include "afsincludes.h" #include "afs/afs_dynroot.h" diff --git a/src/afs/LINUX/osi_machdep.h b/src/afs/LINUX/osi_machdep.h index 836a98df11..d398c7e859 100644 --- a/src/afs/LINUX/osi_machdep.h +++ b/src/afs/LINUX/osi_machdep.h @@ -76,7 +76,18 @@ #define afs_hz HZ #include "h/sched.h" +#if defined(HAVE_CURRENT_KERNEL_TIME) +static inline time_t osi_Time(void) { + struct timespec xtime; + xtime = current_kernel_time(); + return xtime.tv_sec; +} +#else #define osi_Time() (xtime.tv_sec) +#endif + + + #ifdef AFS_LINUX_64BIT_KERNEL #define osi_GetTime(V) \ do { \ diff --git a/src/afs/LINUX/osi_module.c b/src/afs/LINUX/osi_module.c index 0c196406ac..b56c3b2784 100644 --- a/src/afs/LINUX/osi_module.c +++ b/src/afs/LINUX/osi_module.c @@ -88,24 +88,18 @@ init_module(void) #endif #endif -#ifndef LINUX_KEYRING_SUPPORT err = osi_syscall_init(); if (err) return err; -#endif err = afs_init_inodecache(); if (err) { -#ifndef LINUX_KEYRING_SUPPORT osi_syscall_clean(); -#endif return err; } err = register_filesystem(&afs_fs_type); if (err) { afs_destroy_inodecache(); -#ifndef LINUX_KEYRING_SUPPORT osi_syscall_clean(); -#endif return err; } @@ -133,9 +127,7 @@ cleanup_module(void) osi_keyring_shutdown(); #endif osi_sysctl_clean(); -#ifndef LINUX_KEYRING_SUPPORT osi_syscall_clean(); -#endif unregister_filesystem(&afs_fs_type); afs_destroy_inodecache(); diff --git a/src/afs/LINUX/osi_nfssrv.c b/src/afs/LINUX/osi_nfssrv.c index 1ae6c9c8d1..a2c2e05b4e 100644 --- a/src/afs/LINUX/osi_nfssrv.c +++ b/src/afs/LINUX/osi_nfssrv.c @@ -19,6 +19,7 @@ RCSID #if !defined(AFS_NONFSTRANS) || defined(AFS_AIX_IAUTH_ENV) #include /* early to avoid printf->printk mapping */ +#include #include "afs/sysincludes.h" #include "afsincludes.h" #include "nfsclient.h" @@ -96,6 +97,7 @@ svcauth_afs_accept(struct svc_rqst *rqstp, u32 *authp) struct nfs_server_thread *ns; struct afs_exporter *outexp; struct AFS_UCRED *credp; + struct sockaddr_in *addr; int code; code = afs_orig_authtab[rqstp->rq_authop->flavour]->accept(rqstp, authp); @@ -109,11 +111,16 @@ svcauth_afs_accept(struct svc_rqst *rqstp, u32 *authp) /* XXX maybe we should fail this with rpc_system_err? */ return SVC_OK; } +#if HAVE_SVC_ADDR_IN + addr = svc_addr_in(rqstp); +#else + addr = &rqstp->rq_addr; +#endif ns->active = 1; ns->flavor = rqstp->rq_authop->flavour; ns->code = EACCES; - ns->client_addr = rqstp->rq_addr; + ns->client_addr = *addr; ns->client_addrlen = rqstp->rq_addrlen; ns->client_uid = rqstp->rq_cred.cr_uid; ns->client_gid = rqstp->rq_cred.cr_gid; @@ -126,10 +133,9 @@ svcauth_afs_accept(struct svc_rqst *rqstp, u32 *authp) else ns->client_g1 = -1; - /* NB: Don't check the length; it's not always filled in! */ - if (rqstp->rq_addr.sin_family != AF_INET) { + if (addr->sin_family != AF_INET) { printk("afs: NFS request from non-IPv4 client (family %d len %d)\n", - rqstp->rq_addr.sin_family, rqstp->rq_addrlen); + addr->sin_family, rqstp->rq_addrlen); goto done; } @@ -143,7 +149,7 @@ svcauth_afs_accept(struct svc_rqst *rqstp, u32 *authp) * clients to afs_nobody */ if (credp->cr_uid == -1) credp->cr_uid = -2; - code = afs_nfsclient_reqhandler(0, &credp, rqstp->rq_addr.sin_addr.s_addr, + code = afs_nfsclient_reqhandler(0, &credp, addr->sin_addr.s_addr, &ns->uid, &outexp); if (!code && outexp) EXP_RELE(outexp); if (!code) ns->code = 0; diff --git a/src/afs/LINUX/osi_sysctl.c b/src/afs/LINUX/osi_sysctl.c index d6c2d2f038..e0b3f5e0dd 100644 --- a/src/afs/LINUX/osi_sysctl.c +++ b/src/afs/LINUX/osi_sysctl.c @@ -36,7 +36,11 @@ static struct ctl_table_header *afs_sysctl = NULL; static ctl_table afs_sysctl_table[] = { { +#if defined(SYSCTL_TABLE_CHECKING) + .ctl_name = CTL_UNNUMBERED, +#else .ctl_name = 1, +#endif .procname = "hm_retry_RO", .data = &hm_retry_RO, .maxlen = sizeof(afs_int32), @@ -44,7 +48,11 @@ static ctl_table afs_sysctl_table[] = { .proc_handler = &proc_dointvec }, { +#if defined(SYSCTL_TABLE_CHECKING) + .ctl_name = CTL_UNNUMBERED, +#else .ctl_name = 2, +#endif .procname = "hm_retry_RW", .data = &hm_retry_RW, .maxlen = sizeof(afs_int32), @@ -52,7 +60,11 @@ static ctl_table afs_sysctl_table[] = { .proc_handler = &proc_dointvec }, { +#if defined(SYSCTL_TABLE_CHECKING) + .ctl_name = CTL_UNNUMBERED, +#else .ctl_name = 3, +#endif .procname = "hm_retry_int", .data = &hm_retry_int, .maxlen = sizeof(afs_int32), @@ -60,7 +72,11 @@ static ctl_table afs_sysctl_table[] = { .proc_handler = &proc_dointvec }, { +#if defined(SYSCTL_TABLE_CHECKING) + .ctl_name = CTL_UNNUMBERED, +#else .ctl_name = 4, +#endif .procname = "GCPAGs", .data = &afs_gcpags, .maxlen = sizeof(afs_int32), @@ -68,7 +84,11 @@ static ctl_table afs_sysctl_table[] = { .proc_handler = &proc_dointvec }, { +#if defined(SYSCTL_TABLE_CHECKING) + .ctl_name = CTL_UNNUMBERED, +#else .ctl_name = 5, +#endif .procname = "rx_deadtime", .data = &afs_rx_deadtime, .maxlen = sizeof(afs_int32), @@ -76,7 +96,11 @@ static ctl_table afs_sysctl_table[] = { .proc_handler = &proc_dointvec }, { +#if defined(SYSCTL_TABLE_CHECKING) + .ctl_name = CTL_UNNUMBERED, +#else .ctl_name = 6, +#endif .procname = "bkVolPref", .data = &afs_bkvolpref, .maxlen = sizeof(afs_int32), @@ -152,7 +176,11 @@ static ctl_table afs_sysctl_table[] = { static ctl_table fs_sysctl_table[] = { { +#if defined(SYSCTL_TABLE_CHECKING) + .ctl_name = CTL_UNNUMBERED, +#else .ctl_name = 1, +#endif .procname = "afs", .mode = 0555, .child = afs_sysctl_table diff --git a/src/afs/LINUX/osi_vfsops.c b/src/afs/LINUX/osi_vfsops.c index d18e3ad647..fe9224d351 100644 --- a/src/afs/LINUX/osi_vfsops.c +++ b/src/afs/LINUX/osi_vfsops.c @@ -269,7 +269,11 @@ afs_notify_change(struct dentry *dp, struct iattr *iattrp) #if defined(STRUCT_SUPER_HAS_ALLOC_INODE) +#if defined(HAVE_KMEM_CACHE_T) static kmem_cache_t *afs_inode_cachep; +#else +struct kmem_cache *afs_inode_cachep; +#endif static struct inode * afs_alloc_inode(struct super_block *sb) @@ -294,7 +298,15 @@ afs_destroy_inode(struct inode *inode) } static void +#if defined(HAVE_KMEM_CACHE_T) init_once(void * foo, kmem_cache_t * cachep, unsigned long flags) +#else +#if defined(KMEM_CACHE_INIT) +init_once(struct kmem_cache * cachep, void * foo) +#else +init_once(void * foo, struct kmem_cache * cachep, unsigned long flags) +#endif +#endif { struct vcache *vcp = (struct vcache *) foo; @@ -312,10 +324,17 @@ afs_init_inodecache(void) #define SLAB_RECLAIM_ACCOUNT 0 #endif +#if defined(KMEM_CACHE_TAKES_DTOR) afs_inode_cachep = kmem_cache_create("afs_inode_cache", sizeof(struct vcache), 0, SLAB_HWCACHE_ALIGN | SLAB_RECLAIM_ACCOUNT, init_once, NULL); +#else + afs_inode_cachep = kmem_cache_create("afs_inode_cache", + sizeof(struct vcache), + 0, SLAB_HWCACHE_ALIGN | SLAB_RECLAIM_ACCOUNT, + init_once); +#endif if (afs_inode_cachep == NULL) return -ENOMEM; return 0; @@ -523,6 +542,7 @@ vattr2inode(struct inode *ip, struct vattr *vp) ip->i_size = vp->va_size; #if defined(AFS_LINUX26_ENV) ip->i_atime.tv_sec = vp->va_atime.tv_sec; + ip->i_atime.tv_nsec = 0; ip->i_mtime.tv_sec = vp->va_mtime.tv_sec; /* Set the mtime nanoseconds to the sysname generation number. * This convinces NFS clients that all directories have changed @@ -530,6 +550,7 @@ vattr2inode(struct inode *ip, struct vattr *vp) */ ip->i_mtime.tv_nsec = afs_sysnamegen; ip->i_ctime.tv_sec = vp->va_ctime.tv_sec; + ip->i_ctime.tv_nsec = 0; #else ip->i_atime = vp->va_atime.tv_sec; ip->i_mtime = vp->va_mtime.tv_sec; diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 61f7bbf10e..4a6b8c0a1b 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -658,8 +658,12 @@ struct file_operations afs_file_fops = { .mmap = afs_linux_mmap, .open = afs_linux_open, .flush = afs_linux_flush, -#ifdef AFS_LINUX26_ENV +#if defined(AFS_LINUX26_ENV) && defined(STRUCT_FILE_OPERATIONS_HAS_SENDFILE) .sendfile = generic_file_sendfile, +#endif +#if defined(AFS_LINUX26_ENV) && defined(STRUCT_FILE_OPERATIONS_HAS_SPLICE) + .splice_write = generic_file_splice_write, + .splice_read = generic_file_splice_read, #endif .release = afs_linux_release, .fsync = afs_linux_fsync, @@ -896,6 +900,15 @@ afs_dentry_iput(struct dentry *dp, struct inode *ip) AFS_GLOCK(); (void) afs_InactiveVCache(vcp, NULL); AFS_GUNLOCK(); +#ifdef DCACHE_NFSFS_RENAMED +#ifdef AFS_LINUX26_ENV + spin_lock(&dp->d_lock); +#endif + dp->d_flags &= ~DCACHE_NFSFS_RENAMED; +#ifdef AFS_LINUX26_ENV + spin_unlock(&dp->d_lock); +#endif +#endif iput(ip); } @@ -957,6 +970,7 @@ afs_linux_create(struct inode *dip, struct dentry *dp, int mode) afs_getattr(vcp, &vattr, credp); afs_fill_inode(ip, &vattr); + insert_inode_hash(ip); dp->d_op = &afs_dentry_operations; dp->d_time = hgetlo(VTOAFS(dip)->m.DataVersion); d_instantiate(dp, ip); @@ -1005,6 +1019,11 @@ afs_linux_lookup(struct inode *dip, struct dentry *dp) ip = AFSTOV(vcp); afs_getattr(vcp, &vattr, credp); afs_fill_inode(ip, &vattr); +#if defined(AFS_LINUX24_ENV) +#define hlist_unhashed(x) list_empty(x) +#endif + if (hlist_unhashed(&ip->i_hash)) + insert_inode_hash(ip); } dp->d_op = &afs_dentry_operations; dp->d_time = hgetlo(VTOAFS(dip)->m.DataVersion); @@ -1131,6 +1150,15 @@ afs_linux_unlink(struct inode *dip, struct dentry *dp) } tvc->uncred = credp; tvc->states |= CUnlinked; +#ifdef DCACHE_NFSFS_RENAMED +#ifdef AFS_LINUX26_ENV + spin_lock(&dp->d_lock); +#endif + dp->d_flags |= DCACHE_NFSFS_RENAMED; +#ifdef AFS_LINUX26_ENV + spin_unlock(&dp->d_lock); +#endif +#endif } else { osi_FreeSmallSpace(__name); } @@ -1858,5 +1886,4 @@ afs_fill_inode(struct inode *ip, struct vattr *vattr) #endif } - /* insert_inode_hash(ip); -- this would make iget() work (if we used it) */ } diff --git a/src/afs/Makefile.in b/src/afs/Makefile.in index c03c8b90ca..9293c1185a 100644 --- a/src/afs/Makefile.in +++ b/src/afs/Makefile.in @@ -137,7 +137,7 @@ dest: ${DEST}/include/afs/afs.h ${DEST}/include/afs/osi_inode.h ${DEST}/includ ${INSTALL} longc_procs.h ${DEST}/include/afs ;; \ esac case ${SYS_NAME} in \ - next_mach30 | vax_ul43 | *_darwin* | i386_fbsd* ) \ + i386_fbsd* ) \ echo skipping afszcm.cat install for ${SYS_NAME} ;; \ * ) \ ${INSTALL} afszcm.cat ${DEST}/root.client/usr/vice/etc/C ;; \ diff --git a/src/afs/SOLARIS/osi_machdep.h b/src/afs/SOLARIS/osi_machdep.h index 744dbab0bc..fe50f501cb 100644 --- a/src/afs/SOLARIS/osi_machdep.h +++ b/src/afs/SOLARIS/osi_machdep.h @@ -104,4 +104,23 @@ extern kmutex_t afs_global_lock; #define AfsLargeFileSize(pos, off) ( ((offset_t)(pos)+(offset_t)(off) > (offset_t)0x7fffffff)?1:0) #endif +#if defined(AFS_SUN510_ENV) +#include "h/sunddi.h" +extern ddi_taskq_t *afs_taskq; +extern krwlock_t afsifinfo_lock; + +/* this should be in rx/SOLARIS/rx_knet.c accessed via accessor functions, + eventually */ +#include "net/if.h" +/* Global interface info struct */ +struct afs_ifinfo { + char ifname[LIFNAMSIZ]; + ipaddr_t ipaddr; + ipaddr_t netmask; + uint_t mtu; + uint64_t flags; + int metric; + ipaddr_t dstaddr; +}; +#endif #endif /* _OSI_MACHDEP_H_ */ diff --git a/src/afs/SOLARIS/osi_vfsops.c b/src/afs/SOLARIS/osi_vfsops.c index e17d6d6c51..482e210c35 100644 --- a/src/afs/SOLARIS/osi_vfsops.c +++ b/src/afs/SOLARIS/osi_vfsops.c @@ -21,6 +21,9 @@ RCSID #include "afs/afs_stats.h" /* statistics stuff */ #include "h/modctl.h" #include "h/syscall.h" +#if defined(AFS_SUN511_ENV) +#include +#endif #include @@ -245,7 +248,21 @@ afs_swapvp(struct vfs *afsp, struct vnode **avpp, char *nm) } -#ifdef AFS_SUN510_ENV +#if defined(AFS_SUN511_ENV) +/* The following list must always be NULL-terminated */ +static const fs_operation_def_t afs_vfsops_template[] = { + VFSNAME_MOUNT, { .vfs_mount = afs_mount }, + VFSNAME_UNMOUNT, { .vfs_unmount = afs_unmount }, + VFSNAME_ROOT, { .vfs_root = afs_root }, + VFSNAME_STATVFS, { .vfs_statvfs = afs_statvfs }, + VFSNAME_SYNC, { .vfs_sync = afs_sync }, + VFSNAME_VGET, { .vfs_vget = afs_vget }, + VFSNAME_MOUNTROOT, { .vfs_mountroot = afs_mountroot }, + VFSNAME_FREEVFS, { .vfs_freevfs = fs_freevfs }, + NULL, NULL +}; +struct vfsops *afs_vfsopsp; +#elif defined(AFS_SUN510_ENV) /* The following list must always be NULL-terminated */ const fs_operation_def_t afs_vfsops_template[] = { VFSNAME_MOUNT, afs_mount, @@ -256,7 +273,7 @@ const fs_operation_def_t afs_vfsops_template[] = { VFSNAME_VGET, afs_vget, VFSNAME_MOUNTROOT, afs_mountroot, VFSNAME_FREEVFS, fs_freevfs, - NULL, NULL + NULL, NULL }; struct vfsops *afs_vfsopsp; #else diff --git a/src/afs/SOLARIS/osi_vnodeops.c b/src/afs/SOLARIS/osi_vnodeops.c index 05b0273856..2c636c204a 100644 --- a/src/afs/SOLARIS/osi_vnodeops.c +++ b/src/afs/SOLARIS/osi_vnodeops.c @@ -47,6 +47,9 @@ RCSID #include #include #include +#if defined(AFS_SUN511_ENV) +#include +#endif #include #include #include @@ -1441,7 +1444,56 @@ extern int gafs_fid(), gafs_readlink(), fs_setfl(), afs_pathconf(); extern int afs_lockctl(); extern void gafs_inactive(); -#ifdef AFS_SUN510_ENV +#if defined(AFS_SUN511_ENV) +/* The following list must always be NULL-terminated */ +const fs_operation_def_t afs_vnodeops_template[] = { + VOPNAME_OPEN, { .vop_open = gafs_open }, + VOPNAME_CLOSE, { .vop_close = gafs_close }, + VOPNAME_READ, { .vop_read = afs_vmread }, + VOPNAME_WRITE, { .vop_write = afs_vmwrite }, + VOPNAME_IOCTL, { .vop_ioctl = afs_ioctl }, + VOPNAME_SETFL, { .vop_setfl = fs_setfl }, + VOPNAME_GETATTR, { .vop_getattr = gafs_getattr }, + VOPNAME_SETATTR, { .vop_setattr = gafs_setattr }, + VOPNAME_ACCESS, { .vop_access = gafs_access }, + VOPNAME_LOOKUP, { .vop_lookup = gafs_lookup }, + VOPNAME_CREATE, { .vop_create = gafs_create }, + VOPNAME_REMOVE, { .vop_remove = gafs_remove }, + VOPNAME_LINK, { .vop_link = gafs_link }, + VOPNAME_RENAME, { .vop_rename = gafs_rename }, + VOPNAME_MKDIR, { .vop_mkdir = gafs_mkdir }, + VOPNAME_RMDIR, { .vop_rmdir = gafs_rmdir }, + VOPNAME_READDIR, { .vop_readdir = gafs_readdir }, + VOPNAME_SYMLINK, { .vop_symlink = gafs_symlink }, + VOPNAME_READLINK, { .vop_readlink = gafs_readlink }, + VOPNAME_FSYNC, { .vop_fsync = gafs_fsync }, + VOPNAME_INACTIVE, { .vop_inactive = gafs_inactive }, + VOPNAME_FID, { .vop_fid = gafs_fid }, + VOPNAME_RWLOCK, { .vop_rwlock = afs_rwlock }, + VOPNAME_RWUNLOCK, { .vop_rwunlock = afs_rwunlock }, + VOPNAME_SEEK, { .vop_seek = afs_seek }, + VOPNAME_CMP, { .vop_cmp = afs_cmp }, + VOPNAME_FRLOCK, { .vop_frlock = afs_frlock }, + VOPNAME_SPACE, { .vop_space = afs_space }, + VOPNAME_REALVP, { .vop_realvp = afs_realvp }, + VOPNAME_GETPAGE, { .vop_getpage = afs_getpage }, + VOPNAME_PUTPAGE, { .vop_putpage = afs_putpage }, + VOPNAME_MAP, { .vop_map = afs_map }, + VOPNAME_ADDMAP, { .vop_addmap = afs_addmap }, + VOPNAME_DELMAP, { .vop_delmap = afs_delmap }, + VOPNAME_POLL, { .vop_poll = fs_poll }, + VOPNAME_PATHCONF, { .vop_pathconf = afs_pathconf }, + VOPNAME_PAGEIO, { .vop_pageio = afs_pageio }, + VOPNAME_DUMP, { .vop_dump = afs_dump }, + VOPNAME_DUMPCTL, { .vop_dumpctl = afs_dumpctl }, + VOPNAME_DISPOSE, { .vop_dispose = afs_dispose }, + VOPNAME_GETSECATTR, { .vop_getsecattr = afs_getsecattr }, + VOPNAME_SETSECATTR, { .vop_setsecattr = afs_setsecattr }, + VOPNAME_SHRLOCK, { .vop_shrlock = fs_shrlock }, + NULL, NULL +}; +vnodeops_t *afs_ops; +#elif defined(AFS_SUN510_ENV) /* The following list must always be NULL-terminated */ const fs_operation_def_t afs_vnodeops_template[] = { VOPNAME_OPEN, gafs_open, diff --git a/src/afs/UKERNEL/afs_usrops.c b/src/afs/UKERNEL/afs_usrops.c index 74dcbca08a..094c141930 100644 --- a/src/afs/UKERNEL/afs_usrops.c +++ b/src/afs/UKERNEL/afs_usrops.c @@ -183,6 +183,7 @@ int ufs_brelse(struct usr_vnode *vp, struct usr_buf *bp) { usr_assert(0); + return 0; } /* @@ -192,12 +193,14 @@ int iodone(struct usr_buf *bp) { usr_assert(0); + return 0; } struct usr_file * getf(int fd) { usr_assert(0); + return 0; } /* @@ -233,6 +236,7 @@ int usr_flock(void) { usr_assert(0); + return 0; } /* @@ -243,6 +247,7 @@ int usr_ioctl(void) { usr_assert(0); + return 0; } /* @@ -252,24 +257,28 @@ int afs_syscall_icreate(void) { usr_assert(0); + return 0; } int afs_syscall_iincdec(void) { usr_assert(0); + return 0; } int afs_syscall_iopen(void) { usr_assert(0); + return 0; } int afs_syscall_ireadwrite(void) { usr_assert(0); + return 0; } /* @@ -280,24 +289,28 @@ int vno_close(void) { usr_assert(0); + return 0; } int vno_ioctl(void) { usr_assert(0); + return 0; } int vno_rw(void) { usr_assert(0); + return 0; } int vno_select(void) { usr_assert(0); + return 0; } /* @@ -374,12 +387,14 @@ usr_crfree(struct usr_ucred *credp) if (credp->cr_ref == 0) { afs_osi_Free((char *)credp, sizeof(struct usr_ucred)); } + return 0; } int usr_crhold(struct usr_ucred *credp) { credp->cr_ref++; + return 0; } void @@ -517,6 +532,7 @@ afs_osi_Wakeup(void *x) waitp = waitp->next; } usr_mutex_unlock(&osi_waitq_lock); + return 0; } int @@ -608,6 +624,7 @@ afs_osi_CheckTimedWaits(void) waitp = waitp->timedNext; } usr_mutex_unlock(&osi_waitq_lock); + return 0; } /* @@ -1389,8 +1406,8 @@ SweepAFSCache(int *vFilesFound) return (0); } -static -ConfigCell(register struct afsconf_cell *aci, char *arock, +static int +ConfigCell(register struct afsconf_cell *aci, void *arock, struct afsconf_dir *adir) { register int isHomeCell; @@ -1420,10 +1437,7 @@ ConfigCell(register struct afsconf_cell *aci, char *arock, } static int -ConfigCellAlias(aca, arock, adir) - struct afsconf_cellalias *aca; - char *arock; - struct afsconf_dir *adir; +ConfigCellAlias(struct afsconf_cellalias *aca, void *arock, struct afsconf_dir *adir) { call_syscall(AFSOP_ADDCELLALIAS, (long)aca->aliasName, (long)aca->realName, 0, 0, 0); @@ -1980,6 +1994,7 @@ syscallThread(void *argp) sysArgsP->param2, sysArgsP->param3, sysArgsP->param4); afs_osi_Free(argp, -1); + return 0; } fork_syscall(syscall, afscall, param1, param2, param3, param4) @@ -2000,6 +2015,7 @@ fork_syscall(syscall, afscall, param1, param2, param3, param4) usr_thread_create(&tid, syscallThread, sysArgsP); usr_thread_detach(tid); + return 0; } call_syscall(syscall, afscall, param1, param2, param3, param4) @@ -2186,7 +2202,7 @@ uafs_LookupName(char *path, struct usr_vnode *parentVp, struct usr_vnode *linkVp; char *tmpPath; char *pathP; - char *nextPathP; + char *nextPathP = NULL; AFS_ASSERT_GLOCK(); diff --git a/src/afs/UKERNEL/osi_groups.c b/src/afs/UKERNEL/osi_groups.c index 849dbdde79..248627d54e 100644 --- a/src/afs/UKERNEL/osi_groups.c +++ b/src/afs/UKERNEL/osi_groups.c @@ -26,6 +26,7 @@ int afs_xsetgroups() { usr_assert(0); + return 0; } static int diff --git a/src/afs/VNOPS/afs_vnop_create.c b/src/afs/VNOPS/afs_vnop_create.c index fbb33fc273..bdf35a9b43 100644 --- a/src/afs/VNOPS/afs_vnop_create.c +++ b/src/afs/VNOPS/afs_vnop_create.c @@ -353,7 +353,9 @@ afs_create(OSI_VC_DECL(adp), char *aname, struct vattr *attrs, UpgradeSToWLock(&tdc->lock, 631); if (afs_LocalHero(adp, tdc, &OutDirStatus, 1)) { /* we can do it locally */ + ObtainWriteLock(&afs_xdcache, 291); code = afs_dir_Create(tdc, aname, &newFid.Fid); + ReleaseWriteLock(&afs_xdcache); if (code) { ZapDCE(tdc); DZap(tdc); diff --git a/src/afs/VNOPS/afs_vnop_dirops.c b/src/afs/VNOPS/afs_vnop_dirops.c index 0079acfe74..5e73dd0d64 100644 --- a/src/afs/VNOPS/afs_vnop_dirops.c +++ b/src/afs/VNOPS/afs_vnop_dirops.c @@ -132,7 +132,9 @@ afs_mkdir(OSI_VC_DECL(adp), char *aname, struct vattr *attrs, ObtainWriteLock(&tdc->lock, 632); if (afs_LocalHero(adp, tdc, &OutDirStatus, 1)) { /* we can do it locally */ + ObtainWriteLock(&afs_xdcache, 294); code = afs_dir_Create(tdc, aname, &newFid.Fid); + ReleaseWriteLock(&afs_xdcache); if (code) { ZapDCE(tdc); /* surprise error -- use invalid value */ DZap(tdc); diff --git a/src/afs/VNOPS/afs_vnop_link.c b/src/afs/VNOPS/afs_vnop_link.c index cbd59aabf4..04c08a6dc4 100644 --- a/src/afs/VNOPS/afs_vnop_link.c +++ b/src/afs/VNOPS/afs_vnop_link.c @@ -127,7 +127,9 @@ afs_link(avc, OSI_VC_ARG(adp), aname, acred) ObtainWriteLock(&tdc->lock, 635); if (afs_LocalHero(adp, tdc, &OutDirStatus, 1)) { /* we can do it locally */ + ObtainWriteLock(&afs_xdcache, 290); code = afs_dir_Create(tdc, aname, &avc->fid.Fid); + ReleaseWriteLock(&afs_xdcache); if (code) { ZapDCE(tdc); /* surprise error -- invalid value */ DZap(tdc); diff --git a/src/afs/VNOPS/afs_vnop_read.c b/src/afs/VNOPS/afs_vnop_read.c index 9a104e1683..8089e68364 100644 --- a/src/afs/VNOPS/afs_vnop_read.c +++ b/src/afs/VNOPS/afs_vnop_read.c @@ -117,7 +117,21 @@ afs_MemRead(register struct vcache *avc, struct uio *auio, * Locks held: * avc->lock(R) */ - while (totalLength > 0) { + if (filePos >= avc->m.Length) { + if (len > AFS_ZEROS) + len = sizeof(afs_zeros); /* and in 0 buffer */ +#ifdef AFS_DARWIN80_ENV + trimlen = len; + tuiop = afsio_darwin_partialcopy(auio, trimlen); +#else + afsio_copy(auio, &tuio, tvec); + trimlen = len; + afsio_trim(&tuio, trimlen); +#endif + AFS_UIOMOVE(afs_zeros, trimlen, UIO_READ, tuiop, code); + } + + while (avc->m.Length > 0 && totalLength > 0) { /* read all of the cached info */ if (filePos >= avc->m.Length) break; /* all done */ @@ -536,7 +550,22 @@ afs_UFSRead(register struct vcache *avc, struct uio *auio, } #endif - while (totalLength > 0) { + if (filePos >= avc->m.Length) { + if (len > AFS_ZEROS) + len = sizeof(afs_zeros); /* and in 0 buffer */ + len = 0; +#ifdef AFS_DARWIN80_ENV + trimlen = len; + tuiop = afsio_darwin_partialcopy(auio, trimlen); +#else + afsio_copy(auio, &tuio, tvec); + trimlen = len; + afsio_trim(&tuio, trimlen); +#endif + AFS_UIOMOVE(afs_zeros, trimlen, UIO_READ, tuiop, code); + } + + while (avc->m.Length > 0 && totalLength > 0) { /* read all of the cached info */ if (filePos >= avc->m.Length) break; /* all done */ diff --git a/src/afs/VNOPS/afs_vnop_rename.c b/src/afs/VNOPS/afs_vnop_rename.c index 1af38a21c4..02c67f99c0 100644 --- a/src/afs/VNOPS/afs_vnop_rename.c +++ b/src/afs/VNOPS/afs_vnop_rename.c @@ -227,7 +227,9 @@ afsrename(struct vcache *aodp, char *aname1, struct vcache *andp, code = afs_dir_Delete(tdc2, aname2); } if (code == 0) { + ObtainWriteLock(&afs_xdcache, 292); code = afs_dir_Create(tdc2, aname2, &fileFid.Fid); + ReleaseWriteLock(&afs_xdcache); } if (code != 0) { ZapDCE(tdc1); diff --git a/src/afs/VNOPS/afs_vnop_symlink.c b/src/afs/VNOPS/afs_vnop_symlink.c index fa5a8f4b98..22aa636abc 100644 --- a/src/afs/VNOPS/afs_vnop_symlink.c +++ b/src/afs/VNOPS/afs_vnop_symlink.c @@ -177,7 +177,9 @@ int afs_symlink /* otherwise, we should see if we can make the change to the dir locally */ if (afs_LocalHero(adp, tdc, &OutDirStatus, 1)) { /* we can do it locally */ + ObtainWriteLock(&afs_xdcache, 293); code = afs_dir_Create(tdc, aname, &newFid.Fid); + ReleaseWriteLock(&afs_xdcache); if (code) { ZapDCE(tdc); /* surprise error -- use invalid value */ DZap(tdc); diff --git a/src/afs/VNOPS/afs_vnop_write.c b/src/afs/VNOPS/afs_vnop_write.c index e40e41ab9e..5971871cae 100644 --- a/src/afs/VNOPS/afs_vnop_write.c +++ b/src/afs/VNOPS/afs_vnop_write.c @@ -905,7 +905,7 @@ afs_close(OSI_VC_ARG(avc), aflags, acred) } #endif /* AFS_SGI_ENV */ if (aflags & (FWRITE | FTRUNC)) { - if (afs_BBusy()) { + if (afs_BBusy() || (AFS_NFSXLATORREQ(acred))) { /* do it yourself if daemons are all busy */ ObtainWriteLock(&avc->lock, 124); code = afs_StoreOnLastReference(avc, &treq); diff --git a/src/afs/afs.h b/src/afs/afs.h index 5924022b46..005a1c4860 100644 --- a/src/afs/afs.h +++ b/src/afs/afs.h @@ -273,6 +273,9 @@ enum { AFS_GCPAGS_NOTCOMPILED = 0, AFS_GCPAGS_OK = extern afs_int32 afs_gcpags; extern afs_int32 afs_gcpags_procsize; extern afs_int32 afs_bkvolpref; +extern char afs_cachebasedir[1024]; +extern afs_int32 afs_numcachefiles; +extern afs_int32 afs_numfilesperdir; struct unixuser { struct unixuser *next; /* next hash pointer */ @@ -926,6 +929,9 @@ struct afs_fheader { #endif #endif + +#ifdef KERNEL +/* it does not compile outside kernel */ struct buffer { afs_int32 fid; /* is adc->index, the cache file number */ afs_inode_t inode; /* is adc->f.inode, the inode number of the cac\ @@ -953,6 +959,7 @@ struct fcache { afs_int32 chunkBytes; /* Num bytes in this chunk */ char states; /* Has this chunk been modified? */ }; +#endif /* magic numbers to specify the cache type */ @@ -1231,5 +1238,4 @@ struct afs_fakestat_state { }; extern int afs_fakestat_enable; - #endif /* _AFS_H_ */ diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index 5365babb08..c223dd3a9e 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -29,7 +29,10 @@ RCSID #ifdef AFS_LINUX22_ENV #include "h/smp_lock.h" #endif - +#ifdef AFS_SUN510_ENV +#include "h/ksynch.h" +#include "h/sunddi.h" +#endif #if defined(AFS_SUN5_ENV) || defined(AFS_AIX_ENV) || defined(AFS_SGI_ENV) || defined(AFS_HPUX_ENV) #define AFS_MINBUFFERS 100 @@ -46,6 +49,11 @@ char afs_zeros[AFS_ZEROS]; char afs_rootVolumeName[64] = ""; afs_uint32 rx_bindhost; +#ifdef AFS_SUN510_ENV +ddi_taskq_t *afs_taskq; +krwlock_t afsifinfo_lock; +#endif + afs_int32 afs_initState = 0; afs_int32 afs_termState = 0; afs_int32 afs_setTime = 0; @@ -58,6 +66,9 @@ static int afs_Go_Done = 0; extern struct interfaceAddr afs_cb_interface; static int afs_RX_Running = 0; static int afs_InitSetup_done = 0; +afs_int32 afs_numcachefiles = -1; +afs_int32 afs_numfilesperdir = -1; +char afs_cachebasedir[1024]; afs_int32 afs_rx_deadtime = AFS_RXDEADTIME; afs_int32 afs_rx_harddead = AFS_HARDDEADTIME; @@ -80,6 +91,16 @@ afs_InitSetup(int preallocs) if (afs_InitSetup_done) return EAGAIN; +#ifdef AFS_SUN510_ENV + /* Initialize a RW lock for the ifinfo global array */ + rw_init(&afsifinfo_lock, NULL, RW_DRIVER, NULL); + + /* Create a taskq */ + afs_taskq = ddi_taskq_create(NULL, "afs_taskq", 2, TASKQ_DEFAULTPRI, 0); + + osi_StartNetIfPoller(); +#endif + #ifndef AFS_NOSTATS /* * Set up all the AFS statistics variables. This should be done @@ -443,6 +464,18 @@ afs_DaemonOp(long parm, long parm2, long parm3, long parm4, long parm5, } #endif +static void +wait_for_cachedefs(void) { +#ifdef AFS_CACHE_VNODE_PATH + if (cacheDiskType != AFS_FCACHE_TYPE_MEM) + while ((afs_numcachefiles < 1) || (afs_numfilesperdir < 1) || + (afs_cachebasedir[0] != '/')) { + printf("afs: waiting for cache parameter definitions\n"); + afs_osi_Sleep(&afs_initState); + } +#endif +} + /* leaving as is, probably will barf if we add prototypes here since it's likely being called with partial list */ int @@ -774,6 +807,12 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6) #ifdef AFS_DARWIN80_ENV put_vfs_context(); #endif + } else if (parm == AFSOP_CACHEDIRS) { + afs_numfilesperdir = parm2; + afs_osi_Wakeup(&afs_initState); + } else if (parm == AFSOP_CACHEFILES) { + afs_numcachefiles = parm2; + afs_osi_Wakeup(&afs_initState); } else if (parm == AFSOP_ROOTVOLUME) { /* wait for basic init */ while (afs_initState < AFSOP_START_BKG) @@ -787,7 +826,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6) code = 0; } else if (parm == AFSOP_CACHEFILE || parm == AFSOP_CACHEINFO || parm == AFSOP_VOLUMEINFO || parm == AFSOP_AFSLOG - || parm == AFSOP_CELLINFO) { + || parm == AFSOP_CELLINFO || parm == AFSOP_CACHEBASEDIR) { char *tbuffer = osi_AllocSmallSpace(AFS_SMALLOCSIZ); code = 0; @@ -803,20 +842,49 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6) #ifdef AFS_DARWIN80_ENV get_vfs_context(); #endif - if (parm == AFSOP_CACHEFILE) + if (parm == AFSOP_CACHEBASEDIR) { + strncpy(afs_cachebasedir, tbuffer, 1024); + afs_cachebasedir[1023] = '\0'; + afs_osi_Wakeup(&afs_initState); + } else if (parm == AFSOP_CACHEFILE) { + wait_for_cachedefs(); code = afs_InitCacheFile(tbuffer, 0); - else if (parm == AFSOP_CACHEINFO) + } else if (parm == AFSOP_CACHEINFO) { + wait_for_cachedefs(); code = afs_InitCacheInfo(tbuffer); - else if (parm == AFSOP_VOLUMEINFO) + } else if (parm == AFSOP_VOLUMEINFO) { + wait_for_cachedefs(); code = afs_InitVolumeInfo(tbuffer); - else if (parm == AFSOP_CELLINFO) + } else if (parm == AFSOP_CELLINFO) { + wait_for_cachedefs(); code = afs_InitCellInfo(tbuffer); + } #ifdef AFS_DARWIN80_ENV put_vfs_context(); #endif } osi_FreeSmallSpace(tbuffer); } else if (parm == AFSOP_GO) { +#ifdef AFS_CACHE_VNODE_PATH + if (cacheDiskType != AFS_FCACHE_TYPE_MEM) { + afs_int32 dummy; + + wait_for_cachedefs(); + +#ifdef AFS_DARWIN80_ENV + get_vfs_context(); +#endif + if ((afs_numcachefiles > 0) && (afs_numfilesperdir > 0) && + (afs_cachebasedir[0] == '/')) { + for (dummy = 0; dummy < afs_numcachefiles; dummy++) { + code = afs_InitCacheFile(NULL, dummy); + } + } +#ifdef AFS_DARWIN80_ENV + put_vfs_context(); +#endif + } +#endif /* the generic initialization calls come here. One parameter: should we do the * set-time operation on this workstation */ if (afs_Go_Done) @@ -1187,12 +1255,15 @@ afs_shutdown(void) #endif afs_warn("\n"); +#ifdef AFS_AIX51_ENV + shutdown_daemons(); +#endif + /* Close file only after daemons which can write to it are stopped. */ if (afs_cacheInodep) { /* memcache won't set this */ osi_UFSClose(afs_cacheInodep); /* Since we always leave it open */ afs_cacheInodep = 0; } - return; /* Just kill daemons for now */ #ifdef notdef shutdown_CB(); shutdown_AFS(); @@ -1200,21 +1271,17 @@ afs_shutdown(void) shutdown_rxevent(); shutdown_rx(); afs_shutdown_BKG(); +#endif + return; shutdown_bufferpackage(); -#endif -#ifdef AFS_AIX51_ENV - shutdown_daemons(); -#endif -#ifdef notdef shutdown_cache(); shutdown_osi(); shutdown_osinet(); shutdown_osifile(); shutdown_vnodeops(); - shutdown_vfsops(); - shutdown_exporter(); shutdown_memcache(); #if (!defined(AFS_NONFSTRANS) || defined(AFS_AIX_IAUTH_ENV)) && !defined(AFS_OSF_ENV) + shutdown_exporter(); shutdown_nfsclnt(); #endif shutdown_afstest(); @@ -1226,7 +1293,8 @@ afs_shutdown(void) */ afs_warn(" ALL allocated tables\n"); afs_shuttingdown = 0; -#endif + + return; /* Just kill daemons for now */ } void diff --git a/src/afs/afs_callback.c b/src/afs/afs_callback.c index 7b1f276476..439fb7c461 100644 --- a/src/afs/afs_callback.c +++ b/src/afs/afs_callback.c @@ -61,7 +61,11 @@ static struct ltable { { "afs_xsrvAddr", (char *)&afs_xsrvAddr}, { - "afs_xvreclaim", (char *)&afs_xvreclaim} + "afs_xvreclaim", (char *)&afs_xvreclaim}, +#ifdef AFS_AFSDB_ENV + { "afsdb_client_lock", (char *)&afsdb_client_lock}, + { "afsdb_req_lock", (char *)&afsdb_req_lock}, +#endif }; unsigned long lastCallBack_vnode; unsigned int lastCallBack_dv; @@ -307,11 +311,35 @@ SRXAFSCB_GetLock(struct rx_call *a_call, afs_int32 a_index, AFS_STATCNT(SRXAFSCB_GetLock); nentries = sizeof(ltable) / sizeof(struct ltable); - if (a_index < 0 || a_index >= nentries) { + if (a_index < 0 || a_index >= nentries+afs_cellindex) { /* * Past EOF */ code = 1; + } else if (a_index >= nentries) { + struct cell *tc = afs_GetCellByIndex(a_index-nentries, 0); + strcpy(a_result->name, tc->cellName); + a_result->lock.waitStates = + ((struct afs_lock *)&(tc->lock))->wait_states; + a_result->lock.exclLocked = + ((struct afs_lock *)&(tc->lock))->excl_locked; + a_result->lock.readersReading = + ((struct afs_lock *)&(tc->lock))->readers_reading; + a_result->lock.numWaiting = + ((struct afs_lock *)&(tc->lock))->num_waiting; +#ifdef INSTRUMENT_LOCKS + a_result->lock.pid_last_reader = + MyPidxx2Pid(((struct afs_lock *)&(tc->lock))->pid_last_reader); + a_result->lock.pid_writer = + MyPidxx2Pid(((struct afs_lock *)&(tc->lock))->pid_writer); + a_result->lock.src_indicator = + ((struct afs_lock *)&(tc->lock))->src_indicator; +#else + a_result->lock.pid_last_reader = 0; + a_result->lock.pid_writer = 0; + a_result->lock.src_indicator = 0; +#endif + code = 0; } else { /* * Found it - copy out its contents. diff --git a/src/afs/afs_cell.c b/src/afs/afs_cell.c index 33ddfb6722..754d12f1df 100644 --- a/src/afs/afs_cell.c +++ b/src/afs/afs_cell.c @@ -36,18 +36,18 @@ afs_rwlock_t afs_xcell; /* Export for cmdebug peeking at locks */ */ #ifdef AFS_AFSDB_ENV -static afs_rwlock_t afsdb_client_lock; /* Serializes client requests */ +afs_rwlock_t afsdb_client_lock; /* Serializes client requests */ +afs_rwlock_t afsdb_req_lock; /* Serializes client requests */ static char afsdb_handler_running; /* Protected by GLOCK */ static char afsdb_handler_shutdown; /* Protected by GLOCK */ +/* from cellconfig.h */ +#define MAXCELLCHARS 64 static struct { - afs_rwlock_t lock; + /* lock moved to afsdb_req_lock for cmdebug */ char pending; char complete; char *cellname; - afs_int32 *cellhosts; - int *timeout; - char **realname; } afsdb_req; void @@ -64,46 +64,60 @@ afs_StopAFSDB() int afs_AFSDBHandler(char *acellName, int acellNameLen, afs_int32 * kernelMsg) { + afs_int32 timeout, code; + afs_int32 cellHosts[MAXCELLHOSTS]; + if (afsdb_handler_shutdown) return -2; afsdb_handler_running = 1; - ObtainSharedLock(&afsdb_req.lock, 683); + ObtainSharedLock(&afsdb_req_lock, 683); if (afsdb_req.pending) { int i, hostCount; - UpgradeSToWLock(&afsdb_req.lock, 684); + UpgradeSToWLock(&afsdb_req_lock, 684); hostCount = kernelMsg[0]; - *afsdb_req.timeout = kernelMsg[1]; - if (*afsdb_req.timeout) - *afsdb_req.timeout += osi_Time(); - *afsdb_req.realname = afs_strdup(acellName); + timeout = kernelMsg[1]; + if (timeout) + timeout += osi_Time(); for (i = 0; i < MAXCELLHOSTS; i++) { if (i >= hostCount) - afsdb_req.cellhosts[i] = 0; + cellHosts[i] = 0; else - afsdb_req.cellhosts[i] = kernelMsg[2 + i]; + cellHosts[i] = kernelMsg[2 + i]; } + if (hostCount) + code = afs_NewCell(acellName, cellHosts, CNoSUID, NULL, 0, 0, + timeout); + + if (!hostCount || (code && code != EEXIST)) + /* null out the cellname if the lookup failed */ + afsdb_req.cellname = NULL; + else + /* If we found an alias, create it */ + if (afs_strcasecmp(afsdb_req.cellname, acellName)) + afs_NewCellAlias(afsdb_req.cellname, acellName); + /* Request completed, wake up the relevant thread */ afsdb_req.pending = 0; afsdb_req.complete = 1; afs_osi_Wakeup(&afsdb_req); - ConvertWToSLock(&afsdb_req.lock); + ConvertWToSLock(&afsdb_req_lock); } - ConvertSToRLock(&afsdb_req.lock); + ConvertSToRLock(&afsdb_req_lock); /* Wait for a request */ while (afsdb_req.pending == 0 && afs_termState != AFSOP_STOP_AFSDB) { - ReleaseReadLock(&afsdb_req.lock); + ReleaseReadLock(&afsdb_req_lock); afs_osi_Sleep(&afsdb_req); - ObtainReadLock(&afsdb_req.lock); + ObtainReadLock(&afsdb_req_lock); } /* Check if we're shutting down */ if (afs_termState == AFSOP_STOP_AFSDB) { - ReleaseReadLock(&afsdb_req.lock); + ReleaseReadLock(&afsdb_req_lock); /* Inform anyone waiting for us that we're going away */ afsdb_handler_shutdown = 1; @@ -117,43 +131,38 @@ afs_AFSDBHandler(char *acellName, int acellNameLen, afs_int32 * kernelMsg) /* Return the lookup request to userspace */ strncpy(acellName, afsdb_req.cellname, acellNameLen); - ReleaseReadLock(&afsdb_req.lock); + ReleaseReadLock(&afsdb_req_lock); return 0; } static int -afs_GetCellHostsAFSDB(char *acellName, afs_int32 * acellHosts, int *timeout, - char **realName) +afs_GetCellHostsAFSDB(char *acellName) { AFS_ASSERT_GLOCK(); if (!afsdb_handler_running) return ENOENT; ObtainWriteLock(&afsdb_client_lock, 685); - ObtainWriteLock(&afsdb_req.lock, 686); + ObtainWriteLock(&afsdb_req_lock, 686); - *acellHosts = 0; - afsdb_req.cellname = afs_strdup(acellName); - afsdb_req.cellhosts = acellHosts; - afsdb_req.timeout = timeout; - afsdb_req.realname = realName; + afsdb_req.cellname = acellName; afsdb_req.complete = 0; afsdb_req.pending = 1; afs_osi_Wakeup(&afsdb_req); - ConvertWToRLock(&afsdb_req.lock); + ConvertWToRLock(&afsdb_req_lock); while (afsdb_handler_running && !afsdb_req.complete) { - ReleaseReadLock(&afsdb_req.lock); + ReleaseReadLock(&afsdb_req_lock); afs_osi_Sleep(&afsdb_req); - ObtainReadLock(&afsdb_req.lock); + ObtainReadLock(&afsdb_req_lock); }; afs_osi_FreeStr(afsdb_req.cellname); - ReleaseReadLock(&afsdb_req.lock); + ReleaseReadLock(&afsdb_req_lock); ReleaseWriteLock(&afsdb_client_lock); - if (*acellHosts) + if (afsdb_req.cellname) return 0; else return ENOENT; @@ -164,41 +173,13 @@ void afs_LookupAFSDB(char *acellName) { #ifdef AFS_AFSDB_ENV - afs_int32 *cellHosts; - char **realName=NULL; int code; - int *timeout=NULL; + char *cellName = afs_strdup(acellName); - if(!(cellHosts = afs_osi_Alloc(MAXCELLHOSTS * sizeof(afs_int32)))) - goto done; - - if(!(realName = afs_osi_Alloc(sizeof(char *)))) - goto done; - *realName = NULL; - - if(!(timeout = afs_osi_Alloc(sizeof(int)))) - goto done; - - code = afs_GetCellHostsAFSDB(acellName, cellHosts, timeout, realName); - if (code) - goto done; - code = afs_NewCell(*realName, cellHosts, CNoSUID, NULL, 0, 0, *timeout); - if (code && code != EEXIST) - goto done; - - /* If we found an alias, create it */ - if (afs_strcasecmp(acellName, *realName)) - afs_NewCellAlias(acellName, *realName); - - done: - if(timeout) - afs_osi_Free(timeout, sizeof(int)); - if (realName && *realName) - afs_osi_FreeStr(*realName); - if(realName) - afs_osi_Free(realName, sizeof(char *)); - if(cellHosts) - afs_osi_Free(cellHosts, MAXCELLHOSTS * sizeof(afs_int32)); + code = afs_GetCellHostsAFSDB(cellName); + afs_Trace2(afs_iclSetp, CM_TRACE_AFSDB, ICL_TYPE_STRING, cellName, + ICL_TYPE_INT32, code); + afs_osi_FreeStr(cellName); #endif } @@ -862,7 +843,7 @@ afs_CellInit() RWLOCK_INIT(&afs_xcell, "afs_xcell"); #ifdef AFS_AFSDB_ENV RWLOCK_INIT(&afsdb_client_lock, "afsdb_client_lock"); - RWLOCK_INIT(&afsdb_req.lock, "afsdb_req.lock"); + RWLOCK_INIT(&afsdb_req_lock, "afsdb_req_lock"); #endif QInit(&CellLRU); diff --git a/src/afs/afs_daemons.c b/src/afs/afs_daemons.c index 6642587224..d825a58e69 100644 --- a/src/afs/afs_daemons.c +++ b/src/afs/afs_daemons.c @@ -47,7 +47,7 @@ afs_int32 afs_gcpags_procsize = 0; afs_int32 afs_CheckServerDaemonStarted = 0; #ifndef DEFAULT_PROBE_INTERVAL -#define DEFAULT_PROBE_INTERVAL 180 /* default to 3 min */ +#define DEFAULT_PROBE_INTERVAL 30 /* default to 3 min */ #endif afs_int32 afs_probe_interval = DEFAULT_PROBE_INTERVAL; afs_int32 afs_probe_all_interval = 600; @@ -123,12 +123,9 @@ afs_CheckServerDaemon(void) } afs_CheckServerDaemonStarted = 0; } -#define RECURSIVE_VFS_CONTEXT 1 -#if RECURSIVE_VFS_CONTEXT + extern int vfs_context_ref; -#else -#define vfs_context_ref 1 -#endif + void afs_Daemon(void) { @@ -153,10 +150,8 @@ afs_Daemon(void) osi_Panic("vfs context already initialized"); while (afs_osi_ctxtp && vfs_context_ref) afs_osi_Sleep(&afs_osi_ctxtp); -#if RECURSIVE_VFS_CONTEXT if (afs_osi_ctxtp && !vfs_context_ref) vfs_context_rele(afs_osi_ctxtp); -#endif afs_osi_ctxtp = vfs_context_create(NULL); afs_osi_ctxtp_initialized = 1; #endif diff --git a/src/afs/afs_dcache.c b/src/afs/afs_dcache.c index 1e645a1b43..3801328af6 100644 --- a/src/afs/afs_dcache.c +++ b/src/afs/afs_dcache.c @@ -3073,6 +3073,7 @@ afs_WriteDCache(register struct dcache *adc, int atime) if (cacheDiskType == AFS_FCACHE_TYPE_MEM) return 0; AFS_STATCNT(afs_WriteDCache); + osi_Assert(WriteLocked(&afs_xdcache)); if (atime) adc->f.modTime = osi_Time(); /* diff --git a/src/afs/afs_init.c b/src/afs/afs_init.c index 6a26db2b92..4bab6ddb15 100644 --- a/src/afs/afs_init.c +++ b/src/afs/afs_init.c @@ -254,8 +254,12 @@ afs_InitCellInfo(char *afile) ino_t inode; int code; +#ifdef AFS_CACHE_VNODE_PATH + return afs_cellname_init(AFS_CACHE_CELLS_INODE, code); +#else code = LookupInodeByPath(afile, &inode, NULL); return afs_cellname_init(inode, code); +#endif } /* @@ -296,6 +300,8 @@ afs_InitVolumeInfo(char *afile) * it in the cache... */ code = LookupInodeByPath(afile, &volumeInode, &volumeVnode); +#elif defined(AFS_CACHE_VNODE_PATH) + volumeInode = AFS_CACHE_VOLUME_INODE; #else code = LookupInodeByPath(afile, &volumeInode, NULL); #endif @@ -426,11 +432,15 @@ afs_InitCacheInfo(register char *afile) #if defined(AFS_SGI62_ENV) || defined(AFS_HAVE_VXFS) || defined(AFS_DARWIN_ENV) afs_InitDualFSCacheOps(filevp); #endif - cacheInode = afs_vnodeToInumber(filevp); - cacheDev.dev = afs_vnodeToDev(filevp); +#ifndef AFS_CACHE_VNODE_PATH #ifndef AFS_DARWIN80_ENV afs_cacheVfsp = filevp->v_vfsp; #endif + cacheInode = afs_vnodeToInumber(filevp); +#else + cacheInode = AFS_CACHE_ITEMS_INODE; +#endif + cacheDev.dev = afs_vnodeToDev(filevp); #endif /* AFS_LINUX20_ENV */ AFS_RELE(filevp); #endif /* AFS_LINUX22_ENV */ diff --git a/src/afs/afs_nfsclnt.c b/src/afs/afs_nfsclnt.c index c8941dd219..a4c898fc29 100644 --- a/src/afs/afs_nfsclnt.c +++ b/src/afs/afs_nfsclnt.c @@ -503,6 +503,8 @@ afs_nfsclient_sysname(register struct nfsclientpag *np, char *inname, /* Don't touch our arguments when called recursively */ *outname = np->sysname; *num = np->sysnamecount; + if (!np->sysname[0]) + return ENODEV; /* XXX */ } return 0; } diff --git a/src/afs/afs_osi_alloc.c b/src/afs/afs_osi_alloc.c index 9df230a801..158bc32c7c 100644 --- a/src/afs/afs_osi_alloc.c +++ b/src/afs/afs_osi_alloc.c @@ -207,7 +207,11 @@ osi_AllocSmallSpace(size_t size) if (!freeSmallList) { afs_stats_cmperf.SmallBlocksAlloced++; afs_stats_cmperf.SmallBlocksActive++; - return afs_osi_Alloc(AFS_SMALLOCSIZ); + tp = afs_osi_Alloc(AFS_SMALLOCSIZ); +#ifdef KERNEL_HAVE_PIN + pin((char *)tp, AFS_SMALLOCSIZ); +#endif + return (char *)tp; } afs_stats_cmperf.SmallBlocksActive++; MObtainWriteLock(&osi_fsplock, 327); diff --git a/src/afs/afs_osi_pag.c b/src/afs/afs_osi_pag.c index 6b06d54063..10dabff058 100644 --- a/src/afs/afs_osi_pag.c +++ b/src/afs/afs_osi_pag.c @@ -556,11 +556,7 @@ PagInCred(const struct AFS_UCRED *cred) g0 = cred->cr_groups[1]; g1 = cred->cr_groups[2]; #else -#if defined(AFS_AIX51_ENV) - if (kcred_getpag(cred, PAG_AFS, &pag) < 0 || pag == 0) - pag = NOPAG; - return pag; -#elif defined(AFS_AIX_ENV) +#if defined(AFS_AIX_ENV) if (cred->cr_ngrps < 2) { return NOPAG; } diff --git a/src/afs/afs_osidnlc.c b/src/afs/afs_osidnlc.c index 218af5e5b9..e01e5a1732 100644 --- a/src/afs/afs_osidnlc.c +++ b/src/afs/afs_osidnlc.c @@ -242,7 +242,12 @@ osi_dnlc_lookup(struct vcache *adp, char *aname, int locktype) ReleaseReadLock(&afs_xvcache); dnlcstats.misses++; } else { - if (tvc->states & CVInit) { + if ((tvc->states & CVInit) +#ifdef AFS_DARWIN80_ENV + ||(tvc->states & CDeadVnode) +#endif + ) + { ReleaseReadLock(&afs_xvcache); dnlcstats.misses++; osi_dnlc_remove(adp, aname, tvc); diff --git a/src/afs/afs_pioctl.c b/src/afs/afs_pioctl.c index b5b5323e98..6aadbaf952 100644 --- a/src/afs/afs_pioctl.c +++ b/src/afs/afs_pioctl.c @@ -2762,7 +2762,8 @@ DECL_PIOCTL(PGetVnodeXStatus2) DECL_PIOCTL(PSetSysName) { char *cp, *cp2 = NULL, inname[MAXSYSNAME], outname[MAXSYSNAME]; - int setsysname, foundname = 0; + afs_int32 setsysname; + int foundname = 0; register struct afs_exporter *exporter; register struct unixuser *au; register afs_int32 pag, error; @@ -2779,7 +2780,7 @@ DECL_PIOCTL(PSetSysName) #endif } memset(inname, 0, MAXSYSNAME); - memcpy((char *)&setsysname, ain, sizeof(afs_int32)); + memcpy(&setsysname, ain, sizeof(afs_int32)); ain += sizeof(afs_int32); if (setsysname & 0x8000) { allpags = 1; diff --git a/src/afs/afs_prototypes.h b/src/afs/afs_prototypes.h index 8a71b401d1..2903616852 100644 --- a/src/afs/afs_prototypes.h +++ b/src/afs/afs_prototypes.h @@ -119,7 +119,12 @@ extern void afs_InitCBQueue(int doLockInit); extern void afs_DequeueCallback(struct vcache *avc); /* afs_cell.c */ +extern afs_int32 afs_cellindex; extern afs_rwlock_t afs_xcell; +#ifdef AFS_AFSDB_ENV +extern afs_rwlock_t afsdb_client_lock; +extern afs_rwlock_t afsdb_req_lock; +#endif extern struct afs_q CellLRU; extern void afs_CellInit(void); @@ -301,6 +306,7 @@ extern void init_sys_error_to_et(void); /* afs_exporter.c */ extern struct afs_exporter *root_exported; extern struct afs_exporter *exporter_find(int type); +extern void shutdown_exporter(void); /* afs_icl.c */ extern struct afs_icl_set *afs_icl_allSets; @@ -488,6 +494,7 @@ extern int afs_nfsclient_reqhandler(struct afs_exporter *exporter, struct AFS_UCRED **cred, afs_int32 host, afs_int32 *pagparam, struct afs_exporter **outexporter); +extern void shutdown_nfsclnt(void); /* afs_osi.c */ extern afs_lock_t afs_ftf; @@ -502,6 +509,7 @@ extern void afs_osi_UnmaskRxkSignals(void); extern void afs_osi_RxkRegister(void); extern void afs_osi_Invisible(void); extern void shutdown_osi(void); +extern void shutdown_osinet(void); extern int afs_osi_suser(void *credp); extern void afs_osi_TraverseProcTable(void); #if defined(KERNEL) && !defined(UKERNEL) && defined(AFS_PROC) @@ -525,6 +533,7 @@ extern void osi_FreeLargeSpace(void *adata); extern void osi_FreeSmallSpace(void *adata); extern void *osi_AllocLargeSpace(size_t size); extern void *osi_AllocSmallSpace(size_t size); +extern void shutdown_osinet(void); /* afs_osi_pag.c */ extern int afs_setpag(); diff --git a/src/afs/afs_segments.c b/src/afs/afs_segments.c index d9b6e8dac9..dce5ac8498 100644 --- a/src/afs/afs_segments.c +++ b/src/afs/afs_segments.c @@ -92,6 +92,10 @@ afs_StoreMini(register struct vcache *avc, struct vrequest *areq) afs_int32 l1, l2; l1 = avc->m.Length; l2 = tlen; + if ((avc->m.Length > 0x7fffffff) || + (tlen > 0x7fffffff) || + ((0x7fffffff - tlen) < avc->m.Length)) + return EFBIG; code = StartRXAFS_StoreData(tcall, (struct AFSFid *)&avc->fid.Fid, diff --git a/src/afs/afs_server.c b/src/afs/afs_server.c index 90fbd118e9..520757a4f6 100644 --- a/src/afs/afs_server.c +++ b/src/afs/afs_server.c @@ -1129,6 +1129,7 @@ afsi_SetServerIPRank(struct srvAddr *sa, afs_int32 addr, sa->sa_iprank = afs_min(sa->sa_iprank, MED); } } + return 0; } #else /* AFS_USERSPACE_IP_ADDR */ #if (! defined(AFS_SUN5_ENV)) && !defined(AFS_DARWIN60_ENV) && defined(USEIFADDR) @@ -1273,23 +1274,74 @@ static int afs_SetServerPrefs(struct srvAddr *sa) { #else /* AFS_USERSPACE_IP_ADDR */ #if defined(AFS_SUN5_ENV) #ifdef AFS_SUN510_ENV - ill_walk_context_t ctx; + int i = 0; #else extern struct ill_s *ill_g_headp; long *addr = (long *)ill_g_headp; -#endif ill_t *ill; ipif_t *ipif; +#endif int subnet, subnetmask, net, netmask; if (sa) sa->sa_iprank = 0; #ifdef AFS_SUN510_ENV - for (ill = ILL_START_WALK_ALL(&ctx) ; ill ; ill = ill_next(&ctx, ill)) { + rw_enter(&afsifinfo_lock, RW_READER); + + for (i = 0; (afsifinfo[i].ipaddr != NULL) && (i < ADDRSPERSITE); i++) { + + if (IN_CLASSA(afsifinfo[i].ipaddr)) { + netmask = IN_CLASSA_NET; + } else if (IN_CLASSB(afsifinfo[i].ipaddr)) { + netmask = IN_CLASSB_NET; + } else if (IN_CLASSC(afsifinfo[i].ipaddr)) { + netmask = IN_CLASSC_NET; + } else { + netmask = 0; + } + net = afsifinfo[i].ipaddr & netmask; + +#ifdef notdef + if (!s) { + if (afsifinfo[i].ipaddr != 0x7f000001) { /* ignore loopback */ + *cnt += 1; + if (*cnt > 16) + return; + *addrp++ = afsifinfo[i].ipaddr; + } + } else +#endif /* notdef */ + { + /* XXXXXX Do the individual ip ranking below XXXXX */ + if ((sa->sa_ip & netmask) == net) { + if ((sa->sa_ip & subnetmask) == subnet) { + if (afsifinfo[i].ipaddr == sa->sa_ip) { /* ie, ME! */ + sa->sa_iprank = TOPR; + } else { + sa->sa_iprank = HI + afsifinfo[i].metric; /* case #2 */ + } + } else { + sa->sa_iprank = MED + afsifinfo[i].metric; /* case #3 */ + } + } else { + sa->sa_iprank = LO + afsifinfo[i].metric; /* case #4 */ + } + /* check for case #5 -- point-to-point link */ + if ((afsifinfo[i].flags & IFF_POINTOPOINT) + && (afsifinfo[i].dstaddr == sa->sa_ip)) { + + if (afsifinfo[i].metric >= (MAXDEFRANK - MED) / PPWEIGHT) + sa->sa_iprank = MAXDEFRANK; + else + sa->sa_iprank = MED + (PPWEIGHT << afsifinfo[i].metric); + } + } + } + + rw_exit(&afsifinfo_lock); #else for (ill = (struct ill_s *)*addr /*ill_g_headp */ ; ill; ill = ill->ill_next) { -#endif #ifdef AFS_SUN58_ENV /* Make sure this is an IPv4 ILL */ if (ill->ill_isv6) @@ -1349,6 +1401,7 @@ static int afs_SetServerPrefs(struct srvAddr *sa) { } } } +#endif /* AFS_SUN510_ENV */ #else #ifndef USEIFADDR struct ifnet *ifn = NULL; diff --git a/src/afs/afs_trace.et b/src/afs/afs_trace.et index cf81f078d9..1c26405786 100644 --- a/src/afs/afs_trace.et +++ b/src/afs/afs_trace.et @@ -172,5 +172,6 @@ error_table 2 ZCM ec CM_TRACE_LOCKWAIT,"%s line %d: Waiting for lock 0x%lx level %d" ec CM_TRACE_WRITEFAILED, "osi_Write failed len %ld resid %ld err %ld" ec CM_TRACE_ADJUSTSIZE2, "AdjustSize dc = 0x%lx, chunkBytes = 0x%x used = %ld, diff = %ld" + ec CM_TRACE_AFSDB, "AFSDB lookup %s returned %d" end diff --git a/src/afs/lock.h b/src/afs/lock.h index 852babc38a..0abe76400e 100644 --- a/src/afs/lock.h +++ b/src/afs/lock.h @@ -102,9 +102,15 @@ extern tid_t thread_self(); #define MyPidxx2Pid(x) ((afs_int32)(x)) #else /* AFS_AIX41_ENV */ #if defined(AFS_HPUX101_ENV) +#if defined(AFS_HPUX1111_ENV) +typedef struct kthread * afs_lock_tracker_t; +#define MyPidxx (u.u_kthreadp) +#define MyPidxx2Pid(x) (x ? kt_tid(x) : 0) +#else typedef struct proc * afs_lock_tracker_t; #define MyPidxx (u.u_procp) #define MyPidxx2Pid(x) (x ? (afs_int32)p_pid(x) : 0) +#endif #else #if defined(AFS_SGI64_ENV) #if defined(AFS_SGI65_ENV) diff --git a/src/afs/sysincludes.h b/src/afs/sysincludes.h index 55ca2bb077..09a87e066c 100644 --- a/src/afs/sysincludes.h +++ b/src/afs/sysincludes.h @@ -75,6 +75,9 @@ #if defined(LINUX_KEYRING_SUPPORT) #include #include +#if defined(KEY_TYPE_H_EXISTS) +#include +#endif #ifndef KEY_ALLOC_IN_QUOTA #define KEY_ALLOC_IN_QUOTA 1 #endif diff --git a/src/afsd/afsd.c b/src/afsd/afsd.c index 40a50bae2e..0b08fdc1e8 100644 --- a/src/afsd/afsd.c +++ b/src/afsd/afsd.c @@ -334,8 +334,10 @@ int *dir_for_V = NULL; /* Array: dir of each cache file. * -2: file exists in top-level * >=0: file exists in Dxxx */ +#ifndef AFS_CACHE_VNODE_PATH AFSD_INO_T *inode_for_V; /* Array of inodes for desired * cache files */ +#endif int missing_DCacheFile = 1; /*Is the DCACHEFILE missing? */ int missing_VolInfoFile = 1; /*Is the VOLINFOFILE missing? */ int missing_CellInfoFile = 1; /*Is the CELLINFOFILE missing? */ @@ -428,7 +430,7 @@ afsd_event_cleanup(int signo) { CFRunLoopRemoveSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode); CFRelease (source); - IODeregisterForSystemPower(iterator); + IODeregisterForSystemPower(&iterator); IOServiceClose(root_port); IONotificationPortDestroy(notify); @@ -1007,7 +1009,9 @@ doSweepAFSCache(vFilesFound, directory, dirNum, maxDir) * file's inode, directory, and bump the number of files found * total and in this directory. */ +#ifndef AFS_CACHE_VNODE_PATH inode_for_V[vFileNum] = currp->d_ino; +#endif dir_for_V[vFileNum] = dirNum; /* remember this directory */ if (!maxDir) { @@ -1144,7 +1148,9 @@ doSweepAFSCache(vFilesFound, directory, dirNum, maxDir) vFileNum); else { struct stat statb; +#ifndef AFS_CACHE_VNODE_PATH assert(inode_for_V[vFileNum] == (AFSD_INO_T) 0); +#endif sprintf(vFilePtr, "D%d/V%d", thisDir, vFileNum); if (afsd_verbose) printf("%s: Creating '%s'\n", rn, fullpn_VFile); @@ -1155,7 +1161,9 @@ doSweepAFSCache(vFilesFound, directory, dirNum, maxDir) if (CreateCacheFile(fullpn_VFile, &statb)) printf("%s: Can't create '%s'\n", rn, fullpn_VFile); else { +#ifndef AFS_CACHE_VNODE_PATH inode_for_V[vFileNum] = statb.st_ino; +#endif dir_for_V[vFileNum] = thisDir; cache_dir_list[thisDir]++; (*vFilesFound)++; @@ -1383,8 +1391,8 @@ SweepAFSCache(vFilesFound) return doSweepAFSCache(vFilesFound, cacheBaseDir, -2, maxDir); } -static -ConfigCell(struct afsconf_cell *aci, char *arock, struct afsconf_dir *adir) +static int +ConfigCell(struct afsconf_cell *aci, void *arock, struct afsconf_dir *adir) { int isHomeCell; int i, code; @@ -1416,7 +1424,7 @@ ConfigCell(struct afsconf_cell *aci, char *arock, struct afsconf_dir *adir) static ConfigCellAlias(struct afsconf_cellalias *aca, - char *arock, struct afsconf_dir *adir) + void *arock, struct afsconf_dir *adir) { /* push the alias into the kernel */ call_syscall(AFSOP_ADDCELLALIAS, aca->aliasName, aca->realName); @@ -1509,7 +1517,7 @@ AfsdbLookupHandler() #endif #endif -mainproc(struct cmd_syndesc *as, char *arock) +mainproc(struct cmd_syndesc *as, void *arock) { static char rn[] = "afsd"; /*Name of this routine */ afs_int32 code; /*Result of fork() */ @@ -1923,6 +1931,7 @@ mainproc(struct cmd_syndesc *as, char *arock) cacheStatEntries); } +#ifndef AFS_CACHE_VNODE_PATH /* * Create and zero the inode table for the desired cache files. */ @@ -1937,6 +1946,7 @@ mainproc(struct cmd_syndesc *as, char *arock) if (afsd_debug) printf("%s: %d inode_for_V entries at 0x%x, %d bytes\n", rn, cacheFiles, inode_for_V, (cacheFiles * sizeof(AFSD_INO_T))); +#endif /* * Set up all the pathnames we'll need for later. @@ -2125,6 +2135,23 @@ mainproc(struct cmd_syndesc *as, char *arock) rn, vFilesFound, cacheFiles, cacheIteration); } while ((vFilesFound < cacheFiles) && (cacheIteration < MAX_CACHE_LOOPS)); +#ifdef AFS_CACHE_VNODE_PATH + if (afsd_debug) + printf + ("%s: Calling AFSOP_CACHEBASEDIR with '%s'\n", + rn, cacheBaseDir); + call_syscall(AFSOP_CACHEBASEDIR, cacheBaseDir); + if (afsd_debug) + printf + ("%s: Calling AFSOP_CACHEDIRS with %d dirs\n", + rn, nFilesPerDir); + call_syscall(AFSOP_CACHEDIRS, nFilesPerDir); + if (afsd_debug) + printf + ("%s: Calling AFSOP_CACHEFILES with %d files\n", + rn, cacheFiles); + call_syscall(AFSOP_CACHEFILES, cacheFiles); +#endif } else if (afsd_verbose) printf("%s: Using memory cache, not swept\n", rn); @@ -2259,6 +2286,7 @@ mainproc(struct cmd_syndesc *as, char *arock) if (!(cacheFlags & AFSCALL_INIT_MEMCACHE)) call_syscall(AFSOP_VOLUMEINFO, fullpn_VolInfoFile); +#ifndef AFS_CACHE_VNODE_PATH /* * Give the kernel the names of the AFS files cached on the workstation's * disk. @@ -2277,7 +2305,7 @@ mainproc(struct cmd_syndesc *as, char *arock) call_syscall(AFSOP_CACHEINODE, inode_for_V[currVFile]); #endif } - +#endif /*end for */ /* diff --git a/src/afsd/vsys.c b/src/afsd/vsys.c index 424eb1b3c2..a36b5cdd03 100644 --- a/src/afsd/vsys.c +++ b/src/afsd/vsys.c @@ -12,13 +12,7 @@ #include #include #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #ifdef HAVE_UNISTD_H #include #endif diff --git a/src/afsmonitor/afsmon-output.c b/src/afsmonitor/afsmon-output.c index 5ab39e4e09..8f2f2f89d7 100644 --- a/src/afsmonitor/afsmon-output.c +++ b/src/afsmonitor/afsmon-output.c @@ -19,14 +19,7 @@ #include #include #include - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif RCSID ("$Header$"); diff --git a/src/afsmonitor/afsmon-win.c b/src/afsmonitor/afsmon-win.c index e54d17f5cc..7cbaf03ea8 100644 --- a/src/afsmonitor/afsmon-win.c +++ b/src/afsmonitor/afsmon-win.c @@ -22,9 +22,7 @@ RCSID #include #include #include -#ifdef HAVE_STRING_H #include -#endif #undef IN #include @@ -567,6 +565,7 @@ afsmonExit_gtx() } afsmon_Exit(0); + return 0; /* not reached */ } diff --git a/src/afsmonitor/afsmonitor.c b/src/afsmonitor/afsmonitor.c index 002905e4aa..345004c666 100644 --- a/src/afsmonitor/afsmonitor.c +++ b/src/afsmonitor/afsmonitor.c @@ -3880,8 +3880,7 @@ afsmon_execute() *----------------------------------------------------------------------*/ int -afsmonInit(as) - struct cmd_syndesc *as; +afsmonInit(struct cmd_syndesc *as, void *arock) { /* afsmonInit() */ static char rn[] = "afsmonInit"; /* Routine name */ @@ -4185,7 +4184,7 @@ main(argc, argv) /* * Set up the commands we understand. */ - ts = cmd_CreateSyntax("initcmd", afsmonInit, 0, "initialize the program"); + ts = cmd_CreateSyntax("initcmd", afsmonInit, NULL, "initialize the program"); cmd_AddParm(ts, "-config", CMD_SINGLE, CMD_OPTIONAL, "configuration file"); cmd_AddParm(ts, "-frequency", CMD_SINGLE, CMD_OPTIONAL, diff --git a/src/afsweb/weblog.c b/src/afsweb/weblog.c index ec33b53993..43259b366a 100644 --- a/src/afsweb/weblog.c +++ b/src/afsweb/weblog.c @@ -112,7 +112,7 @@ main(int argc, char **argv) zero_argc = argc; zero_argv = argv; - ts = cmd_CreateSyntax(NULL, CommandProc, 0, + ts = cmd_CreateSyntax(NULL, CommandProc, NULL, "obtain Kerberos authentication for web servers"); /* define the command line arguments */ @@ -792,10 +792,8 @@ getDFScreds(char *name, char *realm, char *passwd, afs_uint32 lifetime, * arrive through a pipe from the httpds, authenticates the user and * returns a token (or a failure message) over the pipe */ -CommandProc(as, arock) - char *arock; - struct cmd_syndesc *as; - +static int +CommandProc(struct cmd_syndesc *as, void *arock) { char name[MAXKTCNAMELEN]; char cell[MAXKTCREALMLEN]; diff --git a/src/aklog/Makefile.in b/src/aklog/Makefile.in index 0b24e01cee..f2d90da42c 100644 --- a/src/aklog/Makefile.in +++ b/src/aklog/Makefile.in @@ -31,11 +31,6 @@ asetkey: asetkey.o ${AFSLIBS} ${CC} -o $@ ${CFLAGS} asetkey.o ${LIBS} ${AFSLIBS} \ ${KRB5LIBS} $(LIBCOM_ERR) ${XLIBS} -klog: klog.o skipwrap.o ${AFSLIBS} - ${CC} -o $@ ${CFLAGS} klog.o skipwrap.o ${LIBS} ${AFSLIBS} \ - ${TOP_LIBDIR}/libcmd.a \ - ${KRB5LIBS} $(LIBCOM_ERR) ${XLIBS} - verifykt: verifykt.o skipwrap.o ${AFSLIBS} ${CC} -o $@ ${CFLAGS} verifykt.o skipwrap.o ${LIBS} ${AFSLIBS} \ ${TOP_LIBDIR}/libcmd.a \ @@ -44,6 +39,11 @@ verifykt: verifykt.o skipwrap.o ${AFSLIBS} afserror.o: $(COMERR)/afserror.c $(CC) $(CFLAGS) -c $(COMERR)/afserror.c +klog: klog.o skipwrap.o ${AFSLIBS} + ${CC} -o $@ ${CFLAGS} klog.o skipwrap.o ${AKLIBS} ${AFSLIBS} \ + ${TOP_LIBDIR}/libcmd.a \ + ${KRB5LIBS} $(LIBCOM_ERR) ${XLIBS} + # # Installation targets # diff --git a/src/aklog/aklog_main.c b/src/aklog/aklog_main.c index 19ba489ec8..37f2763cc7 100644 --- a/src/aklog/aklog_main.c +++ b/src/aklog/aklog_main.c @@ -203,7 +203,7 @@ static int get_user_realm(krb5_context, char *); #error "Must have either krb5_princ_size or krb5_principal_get_comp_string" #endif -#if !defined(HAVE_KRB5_ENCRYPT_TKT_PART) && defined(HAVE_ENCODE_KRB5_ENC_TKT_PART) +#if !defined(HAVE_KRB5_ENCRYPT_TKT_PART) && defined(HAVE_ENCODE_KRB5_ENC_TKT_PART) && defined(HAVE_KRB5_C_ENCRYPT) krb5_error_code krb5_encrypt_tkt_part(krb5_context context, const krb5_keyblock *key, @@ -725,7 +725,7 @@ static int auth_to_cell(krb5_context context, char *cell, char *realm) } fprintf(stderr, "%s: Couldn't get %s AFS tickets:\n", progname, cell_to_use); - com_err(progname, status, "while getting AFS tickets"); + afs_com_err(progname, status, "while getting AFS tickets"); return(AKLOG_KERBEROS); } @@ -802,7 +802,7 @@ static int auth_to_cell(krb5_context context, char *cell, char *realm) status = krb5_524_convert_creds(context, v5cred, &cred); if (status) { - com_err(progname, status, "while converting tickets " + afs_com_err(progname, status, "while converting tickets " "to Kerberos V4 format"); return(AKLOG_KERBEROS); } @@ -859,7 +859,7 @@ static int auth_to_cell(krb5_context context, char *cell, char *realm) if ((status = get_user_realm(context, realm_of_user))) { fprintf(stderr, "%s: Couldn't determine realm of user:)", progname); - com_err(progname, status, " while getting realm"); + afs_com_err(progname, status, " while getting realm"); return(AKLOG_KERBEROS); } if (strcmp(realm_of_user, realm_of_cell)) { @@ -977,11 +977,14 @@ static int auth_to_cell(krb5_context context, char *cell, char *realm) printf("Setting tokens. %s / %s @ %s \n", aclient.name, aclient.instance, aclient.cell ); } +#ifndef AFS_AIX51_ENV /* on AIX 4.1.4 with AFS 3.4a+ if a write is not done before * this routine, it will not add the token. It is not clear what - * is going on here! So we will do the following operation + * is going on here! So we will do the following operation. + * On AIX 5, it causes the parent program to die, so we won't. */ write(2,"",0); /* dummy write */ +#endif #ifndef WINDOWS #ifdef AFS_RXK5 if (service == k5service) { @@ -1769,7 +1772,7 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, int *paddress, krb5_creds** out_creds /* out */ ) { -#if defined(USING_HEIMDAL) || (defined(HAVE_ENCODE_KRB5_ENC_TKT) && defined(HAVE_ENCODE_KRB5_TICKET)) +#if defined(USING_HEIMDAL) || (defined(HAVE_ENCODE_KRB5_ENC_TKT) && defined(HAVE_ENCODE_KRB5_TICKET) && defined(HAVE_KRB5_C_ENCRYPT)) krb5_error_code code; krb5_keytab kt = 0; krb5_kt_cursor cursor[1]; @@ -1813,9 +1816,9 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, code = krb5_kt_resolve(context, keytab, &kt); if (code) { if (keytab) - com_err(progname, code, "while resolving keytab %s", keytab); + afs_com_err(progname, code, "while resolving keytab %s", keytab); else - com_err(progname, code, "while resolving default keytab"); + afs_com_err(progname, code, "while resolving default keytab"); goto cleanup; } @@ -1834,7 +1837,7 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, } } if (code) { - com_err(progname, code,"while scanning keytab entries"); + afs_com_err(progname, code,"while scanning keytab entries"); goto cleanup; } } else { @@ -1842,7 +1845,7 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, int best = -1; memset(new, 0, sizeof *new); if ((code == krb5_kt_start_seq_get(context, kt, cursor))) { - com_err(progname, code, "while starting keytab scan"); + afs_com_err(progname, code, "while starting keytab scan"); goto cleanup; } while (!(code = krb5_kt_next_entry(context, kt, new, cursor))) { @@ -1858,12 +1861,12 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, } else krb5_free_keytab_entry_contents(context, new); } if ((i = krb5_kt_end_seq_get(context, kt, cursor))) { - com_err(progname, i, "while ending keytab scan"); + afs_com_err(progname, i, "while ending keytab scan"); code = i; goto cleanup; } if (best < 0) { - com_err(progname, code, "while scanning keytab"); + afs_com_err(progname, code, "while scanning keytab"); goto cleanup; } deref_keyblock_enctype(session_key) = deref_entry_enctype(entry); @@ -1874,7 +1877,7 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, #if USING_HEIMDAL if ((code = krb5_generate_random_keyblock(context, deref_keyblock_enctype(session_key), session_key))) { - com_err(progname, code, "while making session key"); + afs_com_err(progname, code, "while making session key"); goto cleanup; } enc_tkt_reply->flags.initial = 1; @@ -1897,7 +1900,7 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, #else if ((code = krb5_c_make_random_key(context, deref_keyblock_enctype(session_key), session_key))) { - com_err(progname, code, "while making session key"); + afs_com_err(progname, code, "while making session key"); goto cleanup; } enc_tkt_reply->magic = KV5M_ENC_TKT_PART; @@ -1960,12 +1963,12 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, ASN1_MALLOC_ENCODE(EncTicketPart, buf, buf_size, enc_tkt_reply, &buf_len, code); if(code) { - com_err(progname, code, "while encoding ticket"); + afs_com_err(progname, code, "while encoding ticket"); goto cleanup; } if(buf_len != buf_size) { - com_err(progname, code, + afs_com_err(progname, code, "%d != %d while encoding ticket (internal ASN.1 encoder error", buf_len, buf_size); goto cleanup; @@ -1983,7 +1986,7 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, if (buf) free(buf); if (crypto) krb5_crypto_destroy(context, crypto); if(code) { - com_err(progname, code, "while %s", what); + afs_com_err(progname, code, "while %s", what); goto cleanup; } } /* crypto block */ @@ -1995,7 +1998,7 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, ticket_reply->server = service_principal; ticket_reply->enc_part2 = enc_tkt_reply; if ((code = krb5_encrypt_tkt_part(context, &deref_entry_keyblock(entry), ticket_reply))) { - com_err(progname, code, "while making ticket"); + afs_com_err(progname, code, "while making ticket"); goto cleanup; } ticket_reply->enc_part.kvno = entry->vno; @@ -2005,17 +2008,17 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, if ((code = krb5_copy_principal(context, service_principal, &creds->server))) { - com_err(progname, code, "while copying service principal"); + afs_com_err(progname, code, "while copying service principal"); goto cleanup; } if ((code = krb5_copy_principal(context, client_principal, &creds->client))) { - com_err(progname, code, "while copying client principal"); + afs_com_err(progname, code, "while copying client principal"); goto cleanup; } if ((code = krb5_copy_keyblock_contents(context, session_key, &deref_session_key(creds)))) { - com_err(progname, code, "while copying session key"); + afs_com_err(progname, code, "while copying session key"); goto cleanup; } @@ -2033,7 +2036,7 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, ; else if ((code = krb5_copy_addresses(context, deref_enc_tkt_addrs(enc_tkt_reply), &creds->addresses))) { - com_err(progname, code, "while copying addresses"); + afs_com_err(progname, code, "while copying addresses"); goto cleanup; } @@ -2043,13 +2046,13 @@ static krb5_error_code get_credv5_akimpersonate(krb5_context context, ASN1_MALLOC_ENCODE(Ticket, creds->ticket.data, creds->ticket.length, ticket_reply, &creds_tkt_len, code); if(code) { - com_err(progname, code, "while encoding ticket"); + afs_com_err(progname, code, "while encoding ticket"); goto cleanup; } } #else if ((code = encode_krb5_ticket(ticket_reply, &temp))) { - com_err(progname, code, "while encoding ticket"); + afs_com_err(progname, code, "while encoding ticket"); goto cleanup; } creds->ticket = *temp; diff --git a/src/aklog/asetkey.c b/src/aklog/asetkey.c index 459348bd9c..000e89306b 100644 --- a/src/aklog/asetkey.c +++ b/src/aklog/asetkey.c @@ -14,19 +14,11 @@ #ifdef HAVE_UNISTD_H #include #endif -#ifdef HAVE_STDLIB_H #include -#endif #ifdef HAVE_MEMORY_H #include #endif /* HAVE_MEMORY_H */ -#ifdef HAVE_STRING_H #include -#else /* HAVE_STRING_H */ -#ifdef HAVE_STRINGS_H -#include -#endif /* HAVE_STRINGS_H */ -#endif /* HAVE_STRING_H */ #include #ifdef USING_K5SSL diff --git a/src/auth/authcon.c b/src/auth/authcon.c index 4eac9f74f5..f781a0c4c1 100644 --- a/src/auth/authcon.c +++ b/src/auth/authcon.c @@ -32,6 +32,7 @@ RCSID #include "afs/stds.h" #include "afs/pthread_glock.h" #include "des/des.h" +#include "des/des_prototypes.h" #include "rx/rxkad.h" #include "rx/rx.h" #include "afs/keys.h" @@ -50,8 +51,11 @@ RCSID #include #endif #if defined(AFS_RXK5) && !defined(AFS_NT40_ENV) +#include +#include #include #endif +#include #include #include #include "cellconfig.h" @@ -66,9 +70,7 @@ RCSID /* return a null security object if nothing else can be done */ static afs_int32 -QuickAuth(astr, aindex) - struct rx_securityClass **astr; - afs_int32 *aindex; +QuickAuth(struct rx_securityClass **astr, afs_int32 *aindex) { register struct rx_securityClass *tc; tc = rxnull_NewClientSecurityObject(); @@ -118,11 +120,10 @@ afsconf_ServerAuth(void *parm1, #endif /* !defined(UKERNEL) */ static afs_int32 -GenericAuth(adir, astr, aindex, flags) - struct afsconf_dir *adir; - struct rx_securityClass **astr; - afs_int32 *aindex; - afs_int32 flags; +GenericAuth(struct afsconf_dir *adir, + struct rx_securityClass **astr, + afs_int32 *aindex, + afs_int32 flags) { char tbuffer[256]; struct ktc_encryptionKey key, session; @@ -227,10 +228,9 @@ afsconf_ClientAuth(struct afsconf_dir * adir, struct rx_securityClass ** astr, * tells rxkad to encrypt the data, too. */ afs_int32 -afsconf_ClientAuthSecure(adir, astr, aindex) - struct afsconf_dir *adir; - struct rx_securityClass **astr; - afs_int32 *aindex; +afsconf_ClientAuthSecure(struct afsconf_dir *adir, + struct rx_securityClass **astr, + afs_int32 *aindex) { afs_int32 rc; diff --git a/src/auth/cellconfig.c b/src/auth/cellconfig.c index 28f318887c..6d66766720 100644 --- a/src/auth/cellconfig.c +++ b/src/auth/cellconfig.c @@ -18,6 +18,7 @@ RCSID #ifdef UKERNEL #include "afs/sysincludes.h" #include "afsincludes.h" +#include "des/des.h" #include "rx/rxkad.h" #else /* UKERNEL */ #include @@ -48,16 +49,12 @@ RCSID #include #include #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #ifdef HAVE_UNISTD_H #include #endif +#include +#include #endif /* UKERNEL */ #include #include @@ -312,7 +309,10 @@ IsClientConfigDirectory(const char *path) static int afsconf_Check(register struct afsconf_dir *adir) { - char tbuffer[256], *p; + char tbuffer[256]; +#ifdef AFS_NT40_ENV + char *p; +#endif struct stat tstat; register afs_int32 code; @@ -358,9 +358,11 @@ afsconf_Check(register struct afsconf_dir *adir) static int afsconf_Touch(register struct afsconf_dir *adir) { - char tbuffer[256], *p; + char tbuffer[256]; #ifndef AFS_NT40_ENV struct timeval tvp[2]; +#else + char *p; #endif adir->timeRead = 0; /* just in case */ @@ -782,8 +784,8 @@ ParseCellLine(register char *aline, register char *aname, /* call aproc(entry, arock, adir) for all cells. Proc must return 0, or we'll stop early and return the code it returns */ int afsconf_CellApply(struct afsconf_dir *adir, - int (*aproc) (struct afsconf_cell * cell, char *arock, - struct afsconf_dir * dir), char *arock) + int (*aproc) (struct afsconf_cell * cell, void *arock, + struct afsconf_dir * dir), void *arock) { register struct afsconf_entry *tde; register afs_int32 code; @@ -805,8 +807,8 @@ afsconf_CellApply(struct afsconf_dir *adir, int afsconf_CellAliasApply(struct afsconf_dir *adir, int (*aproc) (struct afsconf_cellalias * alias, - char *arock, struct afsconf_dir * dir), - char *arock) + void *arock, struct afsconf_dir * dir), + void *arock) { register struct afsconf_aliasentry *tde; register afs_int32 code; @@ -1283,9 +1285,8 @@ afsconf_GetKeys(struct afsconf_dir *adir, struct afsconf_keys *astr) /* get latest key */ afs_int32 -afsconf_GetLatestKey(struct afsconf_dir * adir, - afs_int32 * avno, - struct ktc_encryptionKey *akey) +afsconf_GetLatestKey(struct afsconf_dir * adir, afs_int32 * avno, + struct ktc_encryptionKey *akey) { register int i; int maxa; @@ -1346,10 +1347,10 @@ have_afs_keyfile(struct afsconf_dir *adir) int afsconf_GetKey(void *rock, afs_int32 avno, struct ktc_encryptionKey *akey) { + struct afsconf_dir *adir = (struct afsconf_dir *) rock; register int i, maxa; register struct afsconf_key *tk; register afs_int32 code; - struct afsconf_dir *adir = rock; LOCK_GLOBAL_MUTEX; code = afsconf_Check(adir); diff --git a/src/auth/cellconfig.p.h b/src/auth/cellconfig.p.h index 13d331c74c..c3bb24a243 100644 --- a/src/auth/cellconfig.p.h +++ b/src/auth/cellconfig.p.h @@ -109,14 +109,14 @@ struct afsconf_servPair { extern struct afsconf_dir *afsconf_Open(register const char *adir); extern int afsconf_CellApply(struct afsconf_dir *adir, int (*aproc) (struct afsconf_cell * cell, - char *arock, + void *arock, struct afsconf_dir * dir), - char *arock); + void *arock); extern int afsconf_CellAliasApply(struct afsconf_dir *adir, int (*aproc) (struct afsconf_cellalias * - alias, char *arock, + alias, void *arock, struct afsconf_dir * dir), - char *arock); + void *arock); extern int afsconf_GetExtendedCellInfo(struct afsconf_dir *adir, char *acellName, char *aservice, struct afsconf_cell *acellInfo, @@ -135,8 +135,9 @@ extern int afsconf_GetKeys(struct afsconf_dir *adir, struct afsconf_keys *astr); struct ktc_encryptionKey; extern afs_int32 afsconf_GetLatestKey(struct afsconf_dir *adir, - afs_int32 * avno, struct ktc_encryptionKey *akey); -extern int afsconf_GetKey(void *adir, afs_int32 avno, + afs_int32 * avno, + struct ktc_encryptionKey *akey); +extern int afsconf_GetKey(void *rock, afs_int32 avno, struct ktc_encryptionKey *akey); extern int afsconf_AddKey(struct afsconf_dir *adir, afs_int32 akvno, char akey[8], afs_int32 overwrite); diff --git a/src/auth/copyauth.c b/src/auth/copyauth.c index 96a5e59c37..2ced48a466 100644 --- a/src/auth/copyauth.c +++ b/src/auth/copyauth.c @@ -13,14 +13,7 @@ RCSID ("$Header$"); -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif - #include #include "auth.h" #ifdef AFS_NT40_ENV @@ -35,9 +28,8 @@ RCSID char whoami[256]; -main(argc, argv) - int argc; - char **argv; +int +main(int argc, char **argv) { char localName[64]; register afs_int32 code; diff --git a/src/auth/ktc.c b/src/auth/ktc.c index 456bb7e25d..4cba8dfd62 100644 --- a/src/auth/ktc.c +++ b/src/auth/ktc.c @@ -49,6 +49,7 @@ RCSID #include #endif #include +#include #include #include #include @@ -58,13 +59,7 @@ RCSID #include #include #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #ifdef AFS_AIX_ENV #include @@ -136,10 +131,16 @@ static struct flock fileUlock = { F_UNLCK, 0, 0, 0, 0 }; /* the following routines aren't static anymore on behalf of the kerberos IV * compatibility library built in subtree krb. */ -int afs_tf_init(), afs_tf_get_pname(), afs_tf_get_pinst(), afs_tf_get_cred(); -int afs_tf_save_cred(), afs_tf_close(), afs_tf_create(); -int afs_tf_dest_tkt(); -static void ktc_LocalCell(); +int afs_tf_init(char *, int); +int afs_tf_get_pname(char *); +int afs_tf_get_pinst(char *); +int afs_tf_get_cred(struct ktc_principal *, struct ktc_token *); +int afs_tf_save_cred(struct ktc_principal *, struct ktc_token *, + struct ktc_principal *); +int afs_tf_close(void); +int afs_tf_create(char *, char *); +int afs_tf_dest_tkt(void); +static void ktc_LocalCell(void); #endif /* AFS_KERBEROS_ENV */ #ifdef AFS_DUX40_ENV @@ -258,12 +259,11 @@ static struct { /* new interface routines to the ticket cache. Only handle afs service right * now. */ -/* static */ int -NewSetToken(aserver, atoken, aclient, flags) - struct ktc_principal *aserver; - struct ktc_principal *aclient; - struct ktc_token *atoken; - afs_int32 flags; +static int +NewSetToken(struct ktc_principal *aserver, + struct ktc_token *atoken, + struct ktc_principal *aclient, + afs_int32 flags) { TRY_KERNEL(KTC_SETTOKEN_OP, aserver, aclient, atoken, sizeof(struct ktc_token)); @@ -274,11 +274,9 @@ NewSetToken(aserver, atoken, aclient, flags) #define MAXPIOCTLTOKENLEN \ (3*sizeof(afs_int32)+MAXKTCTICKETLEN+sizeof(struct ClearToken)+MAXKTCREALMLEN) -/* static */ int -OldSetToken(aserver, atoken, aclient, flags) - struct ktc_principal *aserver, *aclient; - struct ktc_token *atoken; - afs_int32 flags; +static int +OldSetToken(struct ktc_principal *aserver, struct ktc_token *atoken, + struct ktc_principal *aclient, afs_int32 flags) { struct ViceIoctl iob; char tbuffer[MAXPIOCTLTOKENLEN]; @@ -779,10 +777,9 @@ Done: /* get token, given server we need and token buffer. aclient will eventually * be set to our identity to the server. */ -ktc_GetToken(aserver, atoken, atokenLen, aclient) - struct ktc_principal *aserver, *aclient; - int atokenLen; - struct ktc_token *atoken; +int +ktc_GetToken(struct ktc_principal *aserver, struct ktc_token *atoken, + int atokenLen, struct ktc_principal *aclient) { struct ViceIoctl iob; char tbuffer[MAXPIOCTLTOKENLEN]; @@ -794,7 +791,9 @@ ktc_GetToken(aserver, atoken, atokenLen, aclient) afs_int32 temp; int maxLen; /* biggest ticket we can copy */ int tktLen; /* server ticket length */ +#ifdef AFS_KERBEROS_ENV char found = 0; +#endif LOCK_GLOBAL_MUTEX; #ifndef NO_AFS_CLIENT @@ -832,8 +831,8 @@ ktc_GetToken(aserver, atoken, atokenLen, aclient) found = 1; } else { char tmpstring[MAXHOSTCHARS]; - afs_tf_get_pname(&tmpstring); - afs_tf_get_pinst(&tmpstring); + afs_tf_get_pname(tmpstring); + afs_tf_get_pinst(tmpstring); found = 1; } } @@ -963,8 +962,8 @@ ktc_GetToken(aserver, atoken, atokenLen, aclient) * NOT IMPLEMENTED YET! */ #ifndef NO_AFS_CLIENT -ktc_ForgetToken(aserver) - struct ktc_principal *aserver; +int +ktc_ForgetToken(struct ktc_principal *aserver) { int rc; @@ -1193,7 +1192,8 @@ ktc_ForgetAllTokens(void) /* ktc_OldPioctl - returns a boolean true if the kernel supports only the old * pioctl interface for delivering AFS tickets to the cache manager. */ -ktc_OldPioctl() +int +ktc_OldPioctl(void) { int rc; LOCK_GLOBAL_MUTEX; @@ -1243,12 +1243,13 @@ ktc_OldPioctl() * c. In tf_close, be sure it gets reinitialized to a negative * number. */ -static fd = -1; -static curpos; /* Position in tfbfr */ -static lastpos; /* End of tfbfr */ +static int fd = -1; +static int curpos; /* Position in tfbfr */ +static int lastpos; /* End of tfbfr */ static char tfbfr[BUFSIZ]; /* Buffer for ticket data */ -static tf_gets(), tf_read(); +static int tf_gets(char *, int); +static int tf_read(char *, int); /* * This file contains routines for manipulating the ticket cache file. @@ -1313,8 +1314,8 @@ static tf_gets(), tf_read(); * TKT_FIL_LCK - couldn't lock the file, even after a retry */ -afs_tf_init(tf_name, rw) - char *tf_name; +int +afs_tf_init(char *tf_name, int rw) { int wflag; int me; @@ -1407,8 +1408,8 @@ afs_tf_init(tf_name, rw) * was longer than MAXKTCNAMELEN, TKT_FIL_FMT is returned. */ -afs_tf_get_pname(p) - char *p; +int +afs_tf_get_pname(char *p) { if (fd < 0) { return TKT_FIL_INI; @@ -1428,8 +1429,8 @@ afs_tf_get_pname(p) * instance may be null. */ -afs_tf_get_pinst(inst) - char *inst; +int +afs_tf_get_pinst(char *inst) { if (fd < 0) { return TKT_FIL_INI; @@ -1450,9 +1451,8 @@ afs_tf_get_pinst(inst) * EOF - end of file encountered */ -afs_tf_get_cred(principal, token) - struct ktc_principal *principal; - struct ktc_token *token; +int +afs_tf_get_cred(struct ktc_principal *principal, struct ktc_token *token) { int k_errno; int kvno, lifetime; @@ -1510,7 +1510,8 @@ afs_tf_get_cred(principal, token) * The return value is not defined. */ -afs_tf_close() +int +afs_tf_close(void) { if (!(fd < 0)) { #if defined(AFS_AIX_ENV) || defined(AFS_HPUX_ENV) || defined(AFS_SUN5_ENV) @@ -1522,6 +1523,7 @@ afs_tf_close() fd = -1; /* see declaration of fd above */ } memset(tfbfr, 0, sizeof(tfbfr)); + return 0; } /* @@ -1542,11 +1544,10 @@ afs_tf_close() * file is seriously ill. */ -static -tf_gets(s, n) - register char *s; +static int +tf_gets(register char *s, int n) { - register count; + register int count; if (fd < 0) { return TKT_FIL_INI; @@ -1578,12 +1579,10 @@ tf_gets(s, n) * 0 on end of file or read error */ -static -tf_read(s, n) - register char *s; - register n; +static int +tf_read(register char *s, register int n) { - register count; + register int count; for (count = n; count > 0; --count) { if (curpos >= sizeof(tfbfr)) { @@ -1598,8 +1597,6 @@ tf_read(s, n) return n; } -char *tkt_string(); - /* * afs_tf_save_cred() appends an incoming ticket to the end of the ticket * file. You must call afs_tf_init() before calling afs_tf_save_cred(). @@ -1611,10 +1608,10 @@ char *tkt_string(); * called previously, and KFAILURE for anything else that went wrong. */ -afs_tf_save_cred(aserver, atoken, aclient) - struct ktc_principal *aserver; - struct ktc_principal *aclient; - struct ktc_token *atoken; /* Token */ +int +afs_tf_save_cred(struct ktc_principal *aserver, + struct ktc_token *atoken, + struct ktc_principal *aclient) { char realm[MAXKTCREALMLEN + 1]; char junk[MAXKTCNAMELEN]; @@ -1713,8 +1710,6 @@ afs_tf_save_cred(aserver, atoken, aclient) * . */ -char *getenv(); - /* * This routine is used to generate the name of the file that holds * the user's cache of server tickets and associated session keys. @@ -1744,7 +1739,7 @@ ktc_tkt_string_uid(afs_uint32 uid) LOCK_GLOBAL_MUTEX; if (!*krb_ticket_string) { - if (env = getenv("KRBTKFILE")) { + if ((env = getenv("KRBTKFILE"))) { (void)strncpy(krb_ticket_string, env, sizeof(krb_ticket_string) - 1); krb_ticket_string[sizeof(krb_ticket_string) - 1] = '\0'; @@ -1787,9 +1782,8 @@ ktc_set_tkt_string(char * val) * success, or KFAILURE if something goes wrong. */ -afs_tf_create(pname, pinst) - char *pname; - char *pinst; +int +afs_tf_create(char *pname, char *pinst) { int tktfile; int me, metoo; @@ -1866,7 +1860,8 @@ afs_tf_create(pname, pinst) * failure. */ -afs_tf_dest_tkt() +int +afs_tf_dest_tkt(void) { char *file = ktc_tkt_string(); int i, fd; @@ -1906,15 +1901,8 @@ afs_tf_dest_tkt() } static afs_uint32 -curpag() +curpag(void) { -#if defined(AFS_AIX51_ENV) - afs_int32 pag; - - if (kcred_getpag(cred, PAG_AFS, &pag) < 0 || pag == 0) - pag = NOPAG; - return pag; -#else gid_t groups[NGROUPS_MAX]; afs_uint32 g0, g1; afs_uint32 h, l, ret; @@ -1938,11 +1926,10 @@ curpag() return -1; } return -1; -#endif } - -ktc_newpag() +int +ktc_newpag(void) { extern char **environ; @@ -1961,7 +1948,7 @@ ktc_newpag() if (pag == -1) { sprintf(fname, "%s%d", prefix, getuid()); } else { - sprintf(fname, "%sp%ld", prefix, pag); + sprintf(fname, "%sp%ld", prefix, (long int) pag); } ktc_set_tkt_string(fname); @@ -1969,7 +1956,7 @@ ktc_newpag() numenv++; newenv = (char **)malloc((numenv + 2) * sizeof(char *)); - for (senv = environ, denv = newenv; *senv; *senv++) { + for (senv = environ, denv = newenv; *senv; senv++) { if (strncmp(*senv, "KRBTKFILE=", 10) != 0) *denv++ = *senv; } @@ -1980,6 +1967,7 @@ ktc_newpag() *++denv = 0; environ = newenv; UNLOCK_GLOBAL_MUTEX; + return 0; } /* @@ -1987,7 +1975,7 @@ ktc_newpag() * find out what the local cell is. */ static void -ktc_LocalCell() +ktc_LocalCell(void) { int code; struct afsconf_dir *conf; diff --git a/src/auth/setkey.c b/src/auth/setkey.c index edefbd6036..86081d7ced 100644 --- a/src/auth/setkey.c +++ b/src/auth/setkey.c @@ -21,19 +21,14 @@ RCSID #include #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETDB_H #include #endif +#include #include "cellconfig.h" #include "keys.h" #include @@ -43,9 +38,7 @@ static int char2hex(char c); static int hex2char(char c); int -main(argc, argv) - int argc; - char **argv; +main(int argc, char **argv) { struct afsconf_dir *tdir; register afs_int32 code; diff --git a/src/auth/test/testcellconf.c b/src/auth/test/testcellconf.c index 4f8002615d..1bc9cae600 100644 --- a/src/auth/test/testcellconf.c +++ b/src/auth/test/testcellconf.c @@ -40,10 +40,8 @@ RCSID #endif #include -PrintOneCell(ainfo, arock, adir) - struct afsconf_cell *ainfo; - char *arock; - struct afsconf_dir *adir; +int +PrintOneCell(struct afsconf_cell *ainfo, void *arock, struct afsconf_dir *adir) { register int i; long temp; @@ -101,7 +99,7 @@ main(argc, argv) printf("failed to find afsprot service (%d)\n", code); else { printf("AFSPROT service:\n"); - PrintOneCell(&theCell, (char *)NULL, theDir); + PrintOneCell(&theCell, NULL, theDir); } code = afsconf_GetCellInfo(theDir, 0, "bozotheclown", &theCell); if (code == 0) diff --git a/src/auth/userok.c b/src/auth/userok.c index 6711423a41..b6cf909543 100644 --- a/src/auth/userok.c +++ b/src/auth/userok.c @@ -46,8 +46,6 @@ RCSID #include "keys.h" #include "afs/audit.h" -afs_int32 afsconf_SuperUser(); - #if !defined(UKERNEL) int afsconf_CheckAuth(void *rock, @@ -61,8 +59,7 @@ afsconf_CheckAuth(void *rock, #endif /* !defined(UKERNEL) */ static int -GetNoAuthFlag(adir) - struct afsconf_dir *adir; +GetNoAuthFlag(struct afsconf_dir *adir) { if (access(AFSDIR_SERVER_NOAUTH_FILEPATH, 0) == 0) { osi_audit(NoAuthEvent, 0, AUD_END); /* some random server is running noauth */ @@ -73,8 +70,7 @@ GetNoAuthFlag(adir) int -afsconf_GetNoAuthFlag(adir) - struct afsconf_dir *adir; +afsconf_GetNoAuthFlag(struct afsconf_dir *adir) { int rc; @@ -85,9 +81,7 @@ afsconf_GetNoAuthFlag(adir) } void -afsconf_SetNoAuthFlag(adir, aflag) - struct afsconf_dir *adir; - int aflag; +afsconf_SetNoAuthFlag(struct afsconf_dir *adir, int aflag) { register afs_int32 code; @@ -112,9 +106,7 @@ afsconf_SetNoAuthFlag(adir, aflag) /* deletes a user from the UserList file */ int -afsconf_DeleteUser(adir, auser) - struct afsconf_dir *adir; - register char *auser; +afsconf_DeleteUser(struct afsconf_dir *adir, register char *auser) { char tbuffer[1024]; char nbuffer[1024]; @@ -204,11 +196,8 @@ afsconf_DeleteUser(adir, auser) /* returns nth super user from the UserList file */ int -afsconf_GetNthUser(adir, an, abuffer, abufferLen) - struct afsconf_dir *adir; - afs_int32 an; - char *abuffer; - afs_int32 abufferLen; +afsconf_GetNthUser(struct afsconf_dir *adir, afs_int32 an, char *abuffer, + afs_int32 abufferLen) { char tbuffer[256]; register FILE *tf; @@ -246,9 +235,7 @@ afsconf_GetNthUser(adir, an, abuffer, abufferLen) /* returns true iff user is in the UserList file */ static int -FindUser(adir, auser) - struct afsconf_dir *adir; - register char *auser; +FindUser(struct afsconf_dir *adir, register char *auser) { char tbuffer[256]; register bufio_p bp; @@ -280,9 +267,7 @@ FindUser(adir, auser) /* add a user to the user list, checking for duplicates */ int -afsconf_AddUser(adir, aname) - struct afsconf_dir *adir; - char *aname; +afsconf_AddUser(struct afsconf_dir *adir, char *aname) { FILE *tf; register afs_int32 code; @@ -316,12 +301,8 @@ afsconf_AddUser(adir, aname) otherwise returns NULL. The resulting string should be immediately copied to other storage prior to release of mutex. */ static char * -CompFindUser(adir, name, sep, inst, realm) - struct afsconf_dir *adir; - char *name; - char *sep; - char *inst; - char *realm; +CompFindUser(struct afsconf_dir *adir, char *name, char *sep, char *inst, + char *realm) { static char fullname[MAXKTCNAMELEN + MAXKTCNAMELEN + MAXKTCREALMLEN + 3]; @@ -360,10 +341,7 @@ CompFindUser(adir, name, sep, inst, realm) if a pointer is passed. */ afs_int32 -afsconf_SuperUser(adir, acall, namep) - struct afsconf_dir *adir; - struct rx_call *acall; - char *namep; +afsconf_SuperUser(struct afsconf_dir *adir, struct rx_call *acall, char *namep) { register struct rx_connection *tconn; register afs_int32 code; @@ -433,7 +411,7 @@ afsconf_SuperUser(adir, acall, namep) tmp = tcell_l; while (*tmp) { *tmp = tolower(*tmp); - *tmp++; + tmp++; } /* determine local cell name. It's static, so will only get diff --git a/src/auth/writeconfig.c b/src/auth/writeconfig.c index c94715805f..dbc229dedd 100644 --- a/src/auth/writeconfig.c +++ b/src/auth/writeconfig.c @@ -28,19 +28,14 @@ RCSID #endif #include #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_UNISTD_H #include #endif +#include #include "cellconfig.h" #include "keys.h" @@ -49,8 +44,7 @@ RCSID */ static int -VerifyEntries(aci) - register struct afsconf_cell *aci; +VerifyEntries(register struct afsconf_cell *aci) { register int i; register struct hostent *th; @@ -91,10 +85,8 @@ VerifyEntries(aci) */ int -afsconf_SetCellInfo(adir, apath, acellInfo) - struct afsconf_dir *adir; - char *apath; - struct afsconf_cell *acellInfo; +afsconf_SetCellInfo(struct afsconf_dir *adir, const char *apath, + struct afsconf_cell *acellInfo) { afs_int32 code; @@ -103,11 +95,9 @@ afsconf_SetCellInfo(adir, apath, acellInfo) } int -afsconf_SetExtendedCellInfo(adir, apath, acellInfo, clones) - struct afsconf_dir *adir; - char *apath; - struct afsconf_cell *acellInfo; - char clones[]; +afsconf_SetExtendedCellInfo(struct afsconf_dir *adir, + const char *apath, + struct afsconf_cell *acellInfo, char clones[]) { register afs_int32 code; register int fd; diff --git a/src/bozo/Makefile.in b/src/bozo/Makefile.in index 15cc9087e6..eb6f29b15d 100644 --- a/src/bozo/Makefile.in +++ b/src/bozo/Makefile.in @@ -55,16 +55,16 @@ bosint.xdr.o: bosint.xdr.c ${RPCINCLS} bosint.cs.o: bosint.cs.c ${RPCINCLS} bosint.cs.c: bosint.xg - ${RXGEN} -x -C -o $@ ${srcdir}/bosint.xg + ${RXGEN} -x -A -C -o $@ ${srcdir}/bosint.xg bosint.ss.c: bosint.xg - ${RXGEN} -x -S -o $@ ${srcdir}/bosint.xg + ${RXGEN} -x -A -S -o $@ ${srcdir}/bosint.xg bosint.xdr.c: bosint.xg - ${RXGEN} -x -c -o $@ ${srcdir}/bosint.xg + ${RXGEN} -x -A -c -o $@ ${srcdir}/bosint.xg bosint.h: bosint.xg - ${RXGEN} -x -h -o $@ ${srcdir}/bosint.xg + ${RXGEN} -x -A -h -o $@ ${srcdir}/bosint.xg bosint.cs.c: bosint.h bosint.ss.c: bosint.h diff --git a/src/bozo/bnode.c b/src/bozo/bnode.c index 0ebdfb3d53..da8f4d1c1a 100644 --- a/src/bozo/bnode.c +++ b/src/bozo/bnode.c @@ -28,14 +28,7 @@ RCSID #include #endif #include - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include /* signal(), kill(), wait(), etc. */ #include @@ -43,6 +36,7 @@ RCSID #include #include #include "bnode.h" +#include "bosprototypes.h" #if defined(AFS_AIX_ENV) || defined(AFS_SUN4_ENV) /* All known versions of AIX lack WCOREDUMP but this works */ diff --git a/src/bozo/bos.c b/src/bozo/bos.c index bc86117acb..ad9f84baef 100644 --- a/src/bozo/bos.c +++ b/src/bozo/bos.c @@ -362,9 +362,8 @@ SkipSc: return tconn; } -static -SetAuth(as) - struct cmd_syndesc *as; +static int +SetAuth(struct cmd_syndesc *as, void *arock) { register afs_int32 code; register struct rx_connection *tconn; @@ -433,9 +432,8 @@ CopyBytes(afd, acall) } } -static -Prune(as) - register struct cmd_syndesc *as; +static int +Prune(register struct cmd_syndesc *as, void *arock) { register afs_int32 code; register struct rx_connection *tconn; @@ -457,9 +455,8 @@ Prune(as) return code; } -static -Exec(as) - register struct cmd_syndesc *as; +static int +Exec(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -471,9 +468,8 @@ Exec(as) return code; } -static -GetDate(as) - register struct cmd_syndesc *as; +static int +GetDate(register struct cmd_syndesc *as, void *arock) { register afs_int32 code; char tbuffer[256]; @@ -522,9 +518,8 @@ GetDate(as) return 0; } -static -UnInstall(as) - register struct cmd_syndesc *as; +static int +UnInstall(register struct cmd_syndesc *as, void *arock) { register afs_int32 code; char tbuffer[256]; @@ -581,9 +576,8 @@ GetServerGoal(aconn, aname) return BSTAT_NORMAL; } -static -Install(as) - struct cmd_syndesc *as; +static int +Install(struct cmd_syndesc *as, void *arock) { struct rx_connection *tconn; register afs_int32 code; @@ -639,9 +633,8 @@ Install(as) return 0; } -static -Shutdown(as) - struct cmd_syndesc *as; +static int +Shutdown(struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -669,10 +662,8 @@ Shutdown(as) return 0; } -static -BlockScannerCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +static int +BlockScannerCmd(struct cmd_syndesc *as, void *arock) { register afs_int32 code; struct rx_connection *tconn; @@ -687,10 +678,8 @@ BlockScannerCmd(as, arock) return 0; } -static -UnBlockScannerCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +static int +UnBlockScannerCmd(struct cmd_syndesc *as, void *arock) { register afs_int32 code; struct rx_connection *tconn; @@ -705,10 +694,8 @@ UnBlockScannerCmd(as, arock) return 0; } -static -GetRestartCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +static int +GetRestartCmd(struct cmd_syndesc *as, void *arock) { register afs_int32 code; struct ktime generalTime, newBinaryTime; @@ -750,10 +737,8 @@ GetRestartCmd(as, arock) return 0; } -static -SetRestartCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +static int +SetRestartCmd(struct cmd_syndesc *as, void *arock) { afs_int32 count; register afs_int32 code; @@ -792,9 +777,8 @@ SetRestartCmd(as, arock) return 0; } -static -Startup(as) - struct cmd_syndesc *as; +static int +Startup(struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -816,9 +800,8 @@ Startup(as) return 0; } -static -Restart(as) - struct cmd_syndesc *as; +static int +Restart(struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -862,9 +845,8 @@ Restart(as) return 0; } -static -SetCellName(as) - struct cmd_syndesc *as; +static int +SetCellName(struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -876,9 +858,8 @@ SetCellName(as) return 0; } -static -AddHost(as) - register struct cmd_syndesc *as; +static int +AddHost(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -904,9 +885,8 @@ AddHost(as) return 0; } -static -RemoveHost(as) - register struct cmd_syndesc *as; +static int +RemoveHost(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -922,9 +902,8 @@ RemoveHost(as) return 0; } -static -ListHosts(as) - register struct cmd_syndesc *as; +static int +ListHosts(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -953,9 +932,8 @@ ListHosts(as) return 0; } -static -AddKey(as) - register struct cmd_syndesc *as; +static int +AddKey(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -1023,9 +1001,8 @@ AddKey(as) return 0; } -static -RemoveKey(as) - register struct cmd_syndesc *as; +static int +RemoveKey(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -1044,9 +1021,8 @@ RemoveKey(as) return 0; } -static -ListKeys(as) - IN register struct cmd_syndesc *as; +static int +ListKeys(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -1085,9 +1061,8 @@ ListKeys(as) return 0; } -static -AddSUser(as) - register struct cmd_syndesc *as; +static int +AddSUser(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -1106,9 +1081,8 @@ AddSUser(as) return failed; } -static -RemoveSUser(as) - register struct cmd_syndesc *as; +static int +RemoveSUser(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register struct cmd_item *ti; @@ -1132,9 +1106,8 @@ RemoveSUser(as) } #define NPERLINE 10 /* dudes to print per line */ -static -ListSUsers(as) - register struct cmd_syndesc *as; +static int +ListSUsers(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register int i; @@ -1201,9 +1174,8 @@ ListSUsers(as) return 0; } -static -StatServer(as) - register struct cmd_syndesc *as; +static int +StatServer(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -1236,9 +1208,8 @@ StatServer(as) return 0; } -static -CreateServer(as) - register struct cmd_syndesc *as; +static int +CreateServer(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -1269,9 +1240,8 @@ CreateServer(as) return code; } -static -DeleteServer(as) - register struct cmd_syndesc *as; +static int +DeleteServer(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -1292,9 +1262,8 @@ DeleteServer(as) return code; } -static -StartServer(as) - register struct cmd_syndesc *as; +static int +StartServer(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -1311,9 +1280,8 @@ StartServer(as) return code; } -static -StopServer(as) - register struct cmd_syndesc *as; +static int +StopServer(register struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code; @@ -1571,9 +1539,8 @@ DoSalvage(struct rx_connection * aconn, char * aparm1, char * aparm2, return code; } -static -GetLogCmd(as) - register struct cmd_syndesc *as; +static int +GetLogCmd(register struct cmd_syndesc *as, void *arock) { struct rx_connection *tconn; register struct rx_call *tcall; @@ -1610,9 +1577,8 @@ GetLogCmd(as) return code; } -static -SalvageCmd(as) - struct cmd_syndesc *as; +static int +SalvageCmd(struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; register afs_int32 code, rc, i; @@ -2028,9 +1994,8 @@ DoStat(aname, aconn, aint32p, firstTime) } #ifdef BOS_RESTRICTED_MODE -static -GetRestrict(as) - struct cmd_syndesc *as; +static int +GetRestrict(struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; afs_int32 code, val; @@ -2045,9 +2010,8 @@ GetRestrict(as) return 0; } -static -SetRestrict(as) - struct cmd_syndesc *as; +static int +SetRestrict(struct cmd_syndesc *as, void *arock) { register struct rx_connection *tconn; afs_int32 code, val; @@ -2132,12 +2096,12 @@ main(argc, argv) #endif initialize_rx_error_table(); - ts = cmd_CreateSyntax("start", StartServer, 0, "start running a server"); + ts = cmd_CreateSyntax("start", StartServer, NULL, "start running a server"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-instance", CMD_LIST, 0, "server process name"); add_std_args(ts); - ts = cmd_CreateSyntax("stop", StopServer, 0, "halt a server instance"); + ts = cmd_CreateSyntax("stop", StopServer, NULL, "halt a server instance"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-instance", CMD_LIST, 0, "server process name"); cmd_Seek(ts, 8); @@ -2145,7 +2109,7 @@ main(argc, argv) "wait for process to stop"); add_std_args(ts); - ts = cmd_CreateSyntax("status", StatServer, 0, + ts = cmd_CreateSyntax("status", StatServer, NULL, "show server instance status"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-instance", CMD_LIST, CMD_OPTIONAL, @@ -2153,7 +2117,7 @@ main(argc, argv) cmd_AddParm(ts, "-long", CMD_FLAG, CMD_OPTIONAL, "long status"); add_std_args(ts); - ts = cmd_CreateSyntax("shutdown", Shutdown, 0, "shutdown all processes"); + ts = cmd_CreateSyntax("shutdown", Shutdown, NULL, "shutdown all processes"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-instance", CMD_LIST, CMD_OPTIONAL, "instances"); cmd_Seek(ts, 8); @@ -2161,12 +2125,12 @@ main(argc, argv) "wait for process to stop"); add_std_args(ts); - ts = cmd_CreateSyntax("startup", Startup, 0, "start all processes"); + ts = cmd_CreateSyntax("startup", Startup, NULL, "start all processes"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-instance", CMD_LIST, CMD_OPTIONAL, "instances"); add_std_args(ts); - ts = cmd_CreateSyntax("restart", Restart, 0, "restart processes"); + ts = cmd_CreateSyntax("restart", Restart, NULL, "restart processes"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-instance", CMD_LIST, CMD_OPTIONAL, "instances"); cmd_AddParm(ts, "-bosserver", CMD_FLAG, CMD_OPTIONAL, @@ -2176,7 +2140,7 @@ main(argc, argv) #ifndef OPBOS - ts = cmd_CreateSyntax("create", CreateServer, 0, + ts = cmd_CreateSyntax("create", CreateServer, NULL, "create a new server instance"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-instance", CMD_SINGLE, 0, "server process name"); @@ -2186,108 +2150,108 @@ main(argc, argv) "Notifier program"); add_std_args(ts); - ts = cmd_CreateSyntax("delete", DeleteServer, 0, + ts = cmd_CreateSyntax("delete", DeleteServer, NULL, "delete a server instance"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-instance", CMD_LIST, 0, "server process name"); add_std_args(ts); - ts = cmd_CreateSyntax("adduser", AddSUser, 0, + ts = cmd_CreateSyntax("adduser", AddSUser, NULL, "add users to super-user list"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-user", CMD_LIST, 0, "user names"); add_std_args(ts); - ts = cmd_CreateSyntax("removeuser", RemoveSUser, 0, + ts = cmd_CreateSyntax("removeuser", RemoveSUser, NULL, "remove users from super-user list"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-user", CMD_LIST, 0, "user names"); add_std_args(ts); - ts = cmd_CreateSyntax("listusers", ListSUsers, 0, "list super-users"); + ts = cmd_CreateSyntax("listusers", ListSUsers, NULL, "list super-users"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); add_std_args(ts); cmd_Seek(ts, ADDPARMOFFSET*2); cmd_AddParm(ts, "-width", CMD_SINGLE, CMD_OPTIONAL, "output width"); cmd_AddParm(ts, "-onecol", CMD_FLAG, CMD_OPTIONAL, "one per col"); - ts = cmd_CreateSyntax("addkey", AddKey, 0, + ts = cmd_CreateSyntax("addkey", AddKey, NULL, "add keys to key dbase (kvno 999 is bcrypt)"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-key", CMD_SINGLE, CMD_OPTIONAL, "key"); cmd_AddParm(ts, "-kvno", CMD_SINGLE, 0, "key version number"); add_std_args(ts); - ts = cmd_CreateSyntax("removekey", RemoveKey, 0, + ts = cmd_CreateSyntax("removekey", RemoveKey, NULL, "remove keys from key dbase"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-kvno", CMD_LIST, 0, "key version number"); add_std_args(ts); - ts = cmd_CreateSyntax("listkeys", ListKeys, 0, "list keys"); + ts = cmd_CreateSyntax("listkeys", ListKeys, NULL, "list keys"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-showkey", CMD_FLAG, CMD_OPTIONAL, "show the actual key rather than the checksum"); add_std_args(ts); - ts = cmd_CreateSyntax("listhosts", ListHosts, 0, "get cell host list"); + ts = cmd_CreateSyntax("listhosts", ListHosts, NULL, "get cell host list"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); add_std_args(ts); cmd_CreateAlias(ts, "getcell"); - ts = cmd_CreateSyntax("setcellname", SetCellName, 0, "set cell name"); + ts = cmd_CreateSyntax("setcellname", SetCellName, NULL, "set cell name"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "cell name"); add_std_args(ts); - ts = cmd_CreateSyntax("addhost", AddHost, 0, "add host to cell dbase"); + ts = cmd_CreateSyntax("addhost", AddHost, NULL, "add host to cell dbase"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-host", CMD_LIST, 0, "host name"); cmd_AddParm(ts, "-clone", CMD_FLAG, CMD_OPTIONAL, "vote doesn't count"); add_std_args(ts); - ts = cmd_CreateSyntax("removehost", RemoveHost, 0, + ts = cmd_CreateSyntax("removehost", RemoveHost, NULL, "remove host from cell dbase"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-host", CMD_LIST, 0, "host name"); add_std_args(ts); - ts = cmd_CreateSyntax("setauth", SetAuth, 0, + ts = cmd_CreateSyntax("setauth", SetAuth, NULL, "set authentication required flag"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-authrequired", CMD_SINGLE, 0, "on or off: authentication required for admin requests"); add_std_args(ts); - ts = cmd_CreateSyntax("install", Install, 0, "install program"); + ts = cmd_CreateSyntax("install", Install, NULL, "install program"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-file", CMD_LIST, 0, "files to install"); cmd_AddParm(ts, "-dir", CMD_SINGLE, CMD_OPTIONAL, "destination dir"); add_std_args(ts); - ts = cmd_CreateSyntax("uninstall", UnInstall, 0, "uninstall program"); + ts = cmd_CreateSyntax("uninstall", UnInstall, NULL, "uninstall program"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-file", CMD_LIST, 0, "files to uninstall"); cmd_AddParm(ts, "-dir", CMD_SINGLE, CMD_OPTIONAL, "destination dir"); add_std_args(ts); - ts = cmd_CreateSyntax("getlog", GetLogCmd, 0, "examine log file"); + ts = cmd_CreateSyntax("getlog", GetLogCmd, NULL, "examine log file"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-file", CMD_SINGLE, 0, "log file to examine"); add_std_args(ts); - ts = cmd_CreateSyntax("getdate", GetDate, 0, "get dates for programs"); + ts = cmd_CreateSyntax("getdate", GetDate, NULL, "get dates for programs"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-file", CMD_LIST, 0, "files to check"); cmd_AddParm(ts, "-dir", CMD_SINGLE, CMD_OPTIONAL, "destination dir"); add_std_args(ts); - ts = cmd_CreateSyntax("exec", Exec, 0, "execute shell command on server"); + ts = cmd_CreateSyntax("exec", Exec, NULL, "execute shell command on server"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-cmd", CMD_SINGLE, 0, "command to execute"); add_std_args(ts); - ts = cmd_CreateSyntax("prune", Prune, 0, "prune server files"); + ts = cmd_CreateSyntax("prune", Prune, NULL, "prune server files"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-bak", CMD_FLAG, CMD_OPTIONAL, "delete .BAK files"); cmd_AddParm(ts, "-old", CMD_FLAG, CMD_OPTIONAL, "delete .OLD files"); @@ -2295,7 +2259,7 @@ main(argc, argv) cmd_AddParm(ts, "-all", CMD_FLAG, CMD_OPTIONAL, "delete all junk files"); add_std_args(ts); - ts = cmd_CreateSyntax("setrestart", SetRestartCmd, 0, + ts = cmd_CreateSyntax("setrestart", SetRestartCmd, NULL, "set restart times"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "machine name"); cmd_AddParm(ts, "-time", CMD_SINGLE, CMD_REQUIRED, @@ -2306,12 +2270,12 @@ main(argc, argv) "set new binary restart time"); add_std_args(ts); - ts = cmd_CreateSyntax("getrestart", GetRestartCmd, 0, + ts = cmd_CreateSyntax("getrestart", GetRestartCmd, NULL, "get restart times"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "machine name"); add_std_args(ts); - ts = cmd_CreateSyntax("salvage", SalvageCmd, 0, + ts = cmd_CreateSyntax("salvage", SalvageCmd, NULL, "salvage partition or volumes"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-partition", CMD_SINGLE, CMD_OPTIONAL, @@ -2369,23 +2333,23 @@ main(argc, argv) "(MR-AFS) Numeric mask of residencies to be included in the salvage. Do not use with -SalvageRemote or -SalvageArchival"); add_std_args(ts); - ts = cmd_CreateSyntax("blockscanner", BlockScannerCmd, 0, + ts = cmd_CreateSyntax("blockscanner", BlockScannerCmd, NULL, "block scanner daemon from making migration requests"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "machine name"); add_std_args(ts); - ts = cmd_CreateSyntax("unblockscanner", UnBlockScannerCmd, 0, + ts = cmd_CreateSyntax("unblockscanner", UnBlockScannerCmd, NULL, "allow scanner daemon to make migration requests again"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "machine name"); add_std_args(ts); #ifdef BOS_RESTRICTED_MODE - ts = cmd_CreateSyntax("getrestricted", GetRestrict, 0, + ts = cmd_CreateSyntax("getrestricted", GetRestrict, NULL, "get restrict mode"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); add_std_args(ts); - ts = cmd_CreateSyntax("setrestricted", SetRestrict, 0, + ts = cmd_CreateSyntax("setrestricted", SetRestrict, NULL, "set restrict mode"); cmd_AddParm(ts, "-server", CMD_SINGLE, 0, "machine name"); cmd_AddParm(ts, "-mode", CMD_SINGLE, 0, "mode to set"); diff --git a/src/bozo/bos_util.c b/src/bozo/bos_util.c index b6e992fe94..c29b79790f 100644 --- a/src/bozo/bos_util.c +++ b/src/bozo/bos_util.c @@ -28,14 +28,7 @@ RCSID #include #include #include - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include diff --git a/src/bozo/bosoprocs.c b/src/bozo/bosoprocs.c index 5d4517040c..6481a236a4 100644 --- a/src/bozo/bosoprocs.c +++ b/src/bozo/bosoprocs.c @@ -37,18 +37,11 @@ RCSID #include #include #include - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include "bnode.h" #include "bosint.h" - +#include "bosprototypes.h" extern struct ktime bozo_nextRestartKT, bozo_nextDayKT; diff --git a/src/bozo/bosprototypes.h b/src/bozo/bosprototypes.h new file mode 100644 index 0000000000..590bedd685 --- /dev/null +++ b/src/bozo/bosprototypes.h @@ -0,0 +1,16 @@ +/* + * Copyright 2000, International Business Machines Corporation and others. + * All Rights Reserved. + * + * This software has been released under the terms of the IBM Public + * License. For details, see the LICENSE file in the top-level source + * directory or online at http://www.openafs.org/dl/license10.html + */ + +#ifndef _BOSPROTOTYPES_H_ +#define _BOSPROTOTYPES_H_ + +/* bosserver.c */ +void bozo_Log(char *format, ... ); + +#endif diff --git a/src/bozo/bosserver.c b/src/bozo/bosserver.c index f13a7690d6..a515ee85b5 100644 --- a/src/bozo/bosserver.c +++ b/src/bozo/bosserver.c @@ -21,6 +21,7 @@ RCSID #include #include #include +#include #ifdef AFS_NT40_ENV #include #include @@ -42,6 +43,7 @@ RCSID #endif #include "bosint.h" #include "bnode.h" +#include "bosprototypes.h" #include #include #include @@ -52,14 +54,11 @@ RCSID #include #endif - #define BOZO_LWP_STACKSIZE 16000 extern int BOZO_ExecuteRequest(); extern int RXSTATS_ExecuteRequest(); extern struct bnode_ops fsbnode_ops, dafsbnode_ops, ezbnode_ops, cronbnode_ops; -void bozo_Log(); - struct afsconf_dir *bozo_confdir = 0; /* bozo configuration dir */ static PROCESS bozo_pid; #ifdef AFS_RXK5 @@ -1095,17 +1094,21 @@ main(int argc, char **argv, char **envp) rx_SetMinProcs(tservice, 2); rx_SetMaxProcs(tservice, 4); rx_StartServer(1); /* donate this process */ + return 0; } void -bozo_Log(char *a, char *b, char *c, char *d, char *e, char *f) +bozo_Log(char *format, ...) { char tdate[27]; time_t myTime; + va_list ap; + + va_start(ap, format); if (DoSyslog) { #ifndef AFS_NT40_ENV - syslog(LOG_INFO, a, b, c, d, e, f); + vsyslog(LOG_INFO, format, ap); #endif } else { myTime = time(0); @@ -1119,11 +1122,11 @@ bozo_Log(char *a, char *b, char *c, char *d, char *e, char *f) printf("bosserver: WARNING: problem with %s\n", AFSDIR_SERVER_BOZLOG_FILEPATH); printf("%s ", tdate); - printf(a, b, c, d, e, f); + vprintf(format, ap); fflush(stdout); } else { fprintf(bozo_logFile, "%s ", tdate); - fprintf(bozo_logFile, a, b, c, d, e, f); + vfprintf(bozo_logFile, format, ap); /* close so rm BosLog works */ fclose(bozo_logFile); diff --git a/src/bozo/cronbnodeops.c b/src/bozo/cronbnodeops.c index 7fecb2c4f0..6c80b71843 100644 --- a/src/bozo/cronbnodeops.c +++ b/src/bozo/cronbnodeops.c @@ -23,19 +23,14 @@ RCSID #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include #include /* signal(), kill(), wait(), etc. */ #include "bnode.h" +#include "bosprototypes.h" static int cron_timeout(), cron_getstat(), cron_setstat(), cron_delete(); static int cron_procexit(), cron_getstring(), cron_getparm(), cron_restartp(); diff --git a/src/bozo/ezbnodeops.c b/src/bozo/ezbnodeops.c index 7852d9cbd2..681e59a71b 100644 --- a/src/bozo/ezbnodeops.c +++ b/src/bozo/ezbnodeops.c @@ -21,18 +21,13 @@ RCSID #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include /* signal(), kill(), wait(), etc. */ #include "bnode.h" +#include "bosprototypes.h" static int ez_timeout(), ez_getstat(), ez_setstat(), ez_delete(); static int ez_procexit(), ez_getstring(), ez_getparm(), ez_restartp(); diff --git a/src/bozo/fsbnodeops.c b/src/bozo/fsbnodeops.c index 7e3a467729..07ddef200a 100644 --- a/src/bozo/fsbnodeops.c +++ b/src/bozo/fsbnodeops.c @@ -26,13 +26,7 @@ RCSID #else #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #endif /* AFS_NT40_ENV */ @@ -40,7 +34,7 @@ RCSID #include /* signal(), kill(), wait(), etc. */ #include #include "bnode.h" - +#include "bosprototypes.h" static int emergency = 0; diff --git a/src/bu_utils/fms.c b/src/bu_utils/fms.c index 42b46044bb..83067f50d8 100644 --- a/src/bu_utils/fms.c +++ b/src/bu_utils/fms.c @@ -35,7 +35,7 @@ afs_int32 eotEnabled = 1; /* prototypes */ int fileMark(usd_handle_t hTape); int fileMarkSize(char *tapeDevice); -void tt_fileMarkSize(struct cmd_syndesc *as, char *arock); +static int tt_fileMarkSize(struct cmd_syndesc *as, void *arock); #define ERROR(evalue) \ { \ @@ -64,23 +64,24 @@ main(argc, argv) sigaction(SIGINT, &intaction, &oldaction); cptr = - cmd_CreateSyntax(NULL, tt_fileMarkSize, 0, + cmd_CreateSyntax(NULL, tt_fileMarkSize, NULL, "write a tape full of file marks"); cmd_AddParm(cptr, "-tape", CMD_SINGLE, CMD_REQUIRED, "tape special file"); cmd_Dispatch(argc, argv); + return 0; } -void -tt_fileMarkSize(as, arock) - struct cmd_syndesc *as; - char *arock; +static int +tt_fileMarkSize(struct cmd_syndesc *as, void *arock) { char *tapeDevice; tapeDevice = as->parms[0].items->data; fileMarkSize(tapeDevice); + + return 0; } diff --git a/src/bubasics/Makefile.in b/src/bubasics/Makefile.in index 77eec29d72..21b37680d5 100644 --- a/src/bubasics/Makefile.in +++ b/src/bubasics/Makefile.in @@ -18,16 +18,16 @@ libbubasics.a: $(OBJS) AFS_component_version_number.o ${RANLIB} libbubasics.a butc.xdr.c: butc.xg - ${RXGEN} -c -o $@ ${srcdir}/butc.xg + ${RXGEN} -A -c -o $@ ${srcdir}/butc.xg butc.ss.c: butc.xg - ${RXGEN} -S -o $@ ${srcdir}/butc.xg + ${RXGEN} -A -S -o $@ ${srcdir}/butc.xg butc.cs.c: butc.xg - ${RXGEN} -C -o $@ ${srcdir}/butc.xg + ${RXGEN} -A -C -o $@ ${srcdir}/butc.xg butc.h: butc.xg - ${RXGEN} -h -o $@ ${srcdir}/butc.xg + ${RXGEN} -A -h -o $@ ${srcdir}/butc.xg butc.xdr.c: butc.h butc.cs.c: butc.h diff --git a/src/bucoord/bc.p.h b/src/bucoord/bc.p.h index 4e385e238d..4fbc1bfc61 100644 --- a/src/bucoord/bc.p.h +++ b/src/bucoord/bc.p.h @@ -13,11 +13,8 @@ #ifdef HAVE_STDIO_H #include #endif /* HAVE_STDIO_H */ -#if defined(HAVE_STRING_H) -# include -#elif defined(HAVE_STRINGS_H) -# include -#endif /* HAVE_STRING_H */ + +#include /* * Represents a host in the config database. diff --git a/src/bucoord/commands.c b/src/bucoord/commands.c index fc1d5428db..4b10f2ac2f 100644 --- a/src/bucoord/commands.c +++ b/src/bucoord/commands.c @@ -765,7 +765,8 @@ concatParams(itemPtr) /* printIfStatus * print out an interface status node as received from butc */ - + +void printIfStatus(statusPtr) struct tciStatusS *statusPtr; { @@ -822,10 +823,8 @@ getPortOffset(port) /* bc_GetTapeStatusCmd * display status of all tasks on a particular tape coordinator */ - -bc_GetTapeStatusCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_GetTapeStatusCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; struct rx_connection *tconn; @@ -920,10 +919,8 @@ bc_WaitForNoJobs() * parameters * ignored - a null "as" prints only jobs. */ - -bc_JobsCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_JobsCmd(struct cmd_syndesc *as, void *arock) { afs_int32 prevTime; dlqlinkP ptr; @@ -1037,9 +1034,8 @@ bc_JobsCmd(as, arock) return 0; } -bc_KillCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_KillCmd(struct cmd_syndesc *as, void *arock) { afs_int32 i; afs_int32 slot; @@ -1111,9 +1107,8 @@ bc_KillCmd(as, arock) } /* restore a volume or volumes */ -bc_VolRestoreCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_VolRestoreCmd(struct cmd_syndesc *as, void *arock) { /* * parm 0 is the new server to restore to @@ -1266,9 +1261,8 @@ bc_VolRestoreCmd(as, arock) * various optional */ -bc_DiskRestoreCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_DiskRestoreCmd(struct cmd_syndesc *as, void *arock) { struct bc_volumeSet tvolumeSet; /* temporary volume set for EvalVolumeSet call */ struct bc_volumeEntry tvolumeEntry; /* entry within the volume set */ @@ -1423,9 +1417,8 @@ bc_DiskRestoreCmd(as, arock) * restore a volumeset or list of volumes. */ -bc_VolsetRestoreCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_VolsetRestoreCmd(struct cmd_syndesc *as, void *arock) { int oldFlag; long fromDate; @@ -1606,9 +1599,7 @@ bc_VolsetRestoreCmd(as, arock) int dontExecute; int -bc_DumpCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +bc_DumpCmd(struct cmd_syndesc *as, void *arock) { /*bc_DumpCmd */ static char rn[] = "bc_DumpCmd"; /*Routine name */ char *dumpPath, *vsName; /*Ptrs to various names */ @@ -1986,10 +1977,8 @@ bc_DumpCmd(as, arock) * parameters: * ignored */ - -bc_QuitCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_QuitCmd(struct cmd_syndesc *as, void *arock) { int i; struct bc_dumpTask *td; @@ -2038,10 +2027,8 @@ bc_QuitCmd(as, arock) * Labels a tape i.e. request the tape coordinator to perform this * operation */ - -bc_LabelTapeCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_LabelTapeCmd(struct cmd_syndesc *as, void *arock) { char *tapename = 0, *pname = 0; afs_int32 size; @@ -2101,10 +2088,8 @@ bc_LabelTapeCmd(as, arock) * params: * optional port number */ - -bc_ReadLabelCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_ReadLabelCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; afs_int32 port = 0; @@ -2131,10 +2116,8 @@ bc_ReadLabelCmd(as, arock) * read content information from dump tapes, and if user desires, * add it to the database */ - -bc_ScanDumpsCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_ScanDumpsCmd(struct cmd_syndesc *as, void *arock) { afs_int32 port = 0; afs_int32 dbAddFlag = 0; @@ -2242,10 +2225,8 @@ bc_ParseExpiration(paramPtr, expType, expDate) * Currently a single option, volumename to search for. Reports * all dumps containing the specified volume */ - -bc_dblookupCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_dblookupCmd(struct cmd_syndesc *as, void *arock) { struct cmd_item *ciptr; afs_int32 code; @@ -2261,10 +2242,8 @@ bc_dblookupCmd(as, arock) /* for ubik version */ - -bc_dbVerifyCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_dbVerifyCmd(struct cmd_syndesc *as, void *arock) { afs_int32 status; afs_int32 orphans; @@ -2420,10 +2399,8 @@ deleteDump(dumpid, port, force) * entry: * dump id - single required arg as param 0. */ - -bc_deleteDumpCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_deleteDumpCmd(struct cmd_syndesc *as, void *arock) { afs_uint32 dumpid; afs_int32 code = 0; @@ -2576,9 +2553,8 @@ bc_deleteDumpCmd(as, arock) return (rcode); } -bc_saveDbCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_saveDbCmd(struct cmd_syndesc *as, void *arock) { struct rx_connection *tconn; afs_int32 portOffset = 0; @@ -2646,9 +2622,8 @@ bc_saveDbCmd(as, arock) return (code); } -bc_restoreDbCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_restoreDbCmd(struct cmd_syndesc *as, void *arock) { struct rx_connection *tconn; afs_int32 portOffset = 0; @@ -3151,9 +3126,8 @@ printRecentDumps(ndumps) * as - name of tape * arock - */ -bc_dumpInfoCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_dumpInfoCmd(struct cmd_syndesc *as, void *arock) { afs_int32 dumpid; afs_int32 detailFlag; diff --git a/src/bucoord/dsstub.c b/src/bucoord/dsstub.c index 040208d9d7..7ed4fb73e1 100644 --- a/src/bucoord/dsstub.c +++ b/src/bucoord/dsstub.c @@ -26,6 +26,8 @@ RCSID #include #include #endif +#include +#include #include #include #include diff --git a/src/bucoord/dsvs.c b/src/bucoord/dsvs.c index 13d464b1c1..d65c50323c 100644 --- a/src/bucoord/dsvs.c +++ b/src/bucoord/dsvs.c @@ -44,6 +44,8 @@ struct ubik_client *cstructp; /*Ptr to Ubik client structure */ extern struct bc_volumeSet *bc_FindVolumeSet(struct bc_config *cf, char *name); +static FreeVolumeEntryList(); +static FreeVolumeEntry(); /* Code to maintain dump schedule and volume set abstractions. * A volume set looks like this: diff --git a/src/bucoord/dump.c b/src/bucoord/dump.c index 2e45b7f1ba..d6b46c8bc8 100644 --- a/src/bucoord/dump.c +++ b/src/bucoord/dump.c @@ -178,6 +178,7 @@ bc_Dumper(aindex) * free the list of volumes used for dumps */ +void freeDumpTaskVolumeList(vdptr) struct bc_volumeDump *vdptr; { diff --git a/src/bucoord/dump_sched.c b/src/bucoord/dump_sched.c index e721ea0b5f..04d0fdff0d 100644 --- a/src/bucoord/dump_sched.c +++ b/src/bucoord/dump_sched.c @@ -12,6 +12,8 @@ */ #include +#include +#include #include #include @@ -43,6 +45,7 @@ extern struct bc_config *bc_globalConfig; extern struct udbHandleS udbHandle; extern char *whoami; +static ListDumpSchedule(); /* ------------------------------------ * command level routines @@ -56,13 +59,11 @@ extern char *whoami; * parm 1: expiration date (list) */ -afs_int32 -bc_AddDumpCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_AddDumpCmd(struct cmd_syndesc *as, void *arock) { register char *dname; /* dump schedule name */ - register afs_int32 code; + register int code; afs_int32 expType, expDate; register struct cmd_item *ti; udbClientTextP ctPtr; @@ -146,16 +147,14 @@ bc_AddDumpCmd(as, arock) * delete a dump schedule */ -afs_int32 -bc_DeleteDumpCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_DeleteDumpCmd(struct cmd_syndesc *as, void *arock) { /* parm 0 is vol set name * parm 1 is dump schedule name */ register char *dname; - register afs_int32 code; + register int code; udbClientTextP ctPtr; /* lock schedules and check validity */ @@ -265,11 +264,11 @@ ListDumpSchedule(register struct bc_dumpSchedule *adump, int alevel) * ignored */ -afs_int32 -bc_ListDumpScheduleCmd(struct cmd_syndesc *as, char *arock) +int +bc_ListDumpScheduleCmd(struct cmd_syndesc *as, void *arock) { /* no parms */ - afs_int32 code; + int code; register struct bc_dumpSchedule *tdump; /* first check to see if schedules must be updated */ @@ -298,17 +297,15 @@ bc_ListDumpScheduleCmd(struct cmd_syndesc *as, char *arock) * parm 1: expiration date (list) */ -afs_int32 -bc_SetExpCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_SetExpCmd(struct cmd_syndesc *as, void *arock) { register char *dname; /* dump schedule name */ register struct cmd_item *ti; struct bc_dumpSchedule *node, *parent; afs_int32 expType, expDate; udbClientTextP ctPtr; - register afs_int32 code; + register int code; afs_int32 bc_ParseExpiration(); diff --git a/src/bucoord/main.c b/src/bucoord/main.c index 1326966a7b..504d9f81fa 100644 --- a/src/bucoord/main.c +++ b/src/bucoord/main.c @@ -322,8 +322,7 @@ backupInit() */ static int -MyBeforeProc(as) - register struct cmd_syndesc *as; +MyBeforeProc(register struct cmd_syndesc *as, void *arock) { afs_int32 code; @@ -465,9 +464,7 @@ doDispatch(targc, targv, dispatchCount) } int -bc_interactCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +bc_interactCmd(struct cmd_syndesc *as, void *arock) { interact = 1; return 0; @@ -524,7 +521,7 @@ main(argc, argv) cmd_SetBeforeProc(MyBeforeProc, NULL); - ts = cmd_CreateSyntax("dump", bc_DumpCmd, 0, "start dump"); + ts = cmd_CreateSyntax("dump", bc_DumpCmd, NULL, "start dump"); cmd_AddParm(ts, "-volumeset", CMD_SINGLE, CMD_OPTIONAL, "volume set name"); cmd_AddParm(ts, "-dump", CMD_SINGLE, CMD_OPTIONAL, "dump level name"); @@ -538,7 +535,7 @@ main(argc, argv) if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("volrestore", bc_VolRestoreCmd, 0, + ts = cmd_CreateSyntax("volrestore", bc_VolRestoreCmd, NULL, "restore volume"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "destination machine"); @@ -557,7 +554,7 @@ main(argc, argv) if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("diskrestore", bc_DiskRestoreCmd, 0, + ts = cmd_CreateSyntax("diskrestore", bc_DiskRestoreCmd, NULL, "restore partition"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "machine to restore"); @@ -575,9 +572,9 @@ main(argc, argv) if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("quit", bc_QuitCmd, 0, "leave the program"); + ts = cmd_CreateSyntax("quit", bc_QuitCmd, NULL, "leave the program"); - ts = cmd_CreateSyntax("volsetrestore", bc_VolsetRestoreCmd, 0, + ts = cmd_CreateSyntax("volsetrestore", bc_VolsetRestoreCmd, NULL, "restore a set of volumes"); cmd_AddParm(ts, "-name", CMD_SINGLE, CMD_OPTIONAL, "volume set name"); cmd_AddParm(ts, "-file", CMD_SINGLE, CMD_OPTIONAL, "file name"); @@ -588,7 +585,7 @@ main(argc, argv) if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("addhost", bc_AddHostCmd, 0, "add host to config"); + ts = cmd_CreateSyntax("addhost", bc_AddHostCmd, NULL, "add host to config"); cmd_AddParm(ts, "-tapehost", CMD_SINGLE, CMD_REQUIRED, "tape machine name"); cmd_AddParm(ts, "-portoffset", CMD_SINGLE, CMD_OPTIONAL, @@ -596,7 +593,7 @@ main(argc, argv) if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("delhost", bc_DeleteHostCmd, 0, + ts = cmd_CreateSyntax("delhost", bc_DeleteHostCmd, NULL, "delete host to config"); cmd_AddParm(ts, "-tapehost", CMD_SINGLE, CMD_REQUIRED, "tape machine name"); @@ -605,29 +602,29 @@ main(argc, argv) if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("listhosts", bc_ListHostsCmd, 0, + ts = cmd_CreateSyntax("listhosts", bc_ListHostsCmd, NULL, "list config hosts"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("jobs", bc_JobsCmd, 0, "list running jobs"); + ts = cmd_CreateSyntax("jobs", bc_JobsCmd, NULL, "list running jobs"); - ts = cmd_CreateSyntax("kill", bc_KillCmd, 0, "kill running job"); + ts = cmd_CreateSyntax("kill", bc_KillCmd, NULL, "kill running job"); cmd_AddParm(ts, "-id", CMD_SINGLE, CMD_REQUIRED, "job ID or dump set name"); - ts = cmd_CreateSyntax("listvolsets", bc_ListVolSetCmd, 0, + ts = cmd_CreateSyntax("listvolsets", bc_ListVolSetCmd, NULL, "list volume sets"); cmd_AddParm(ts, "-name", CMD_SINGLE, CMD_OPTIONAL, "volume set name"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("listdumps", bc_ListDumpScheduleCmd, 0, + ts = cmd_CreateSyntax("listdumps", bc_ListDumpScheduleCmd, NULL, "list dump schedules"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("addvolset", bc_AddVolSetCmd, 0, + ts = cmd_CreateSyntax("addvolset", bc_AddVolSetCmd, NULL, "create a new volume set"); cmd_AddParm(ts, "-name", CMD_SINGLE, CMD_REQUIRED, "volume set name"); cmd_AddParm(ts, "-temporary", CMD_FLAG, CMD_OPTIONAL, @@ -635,20 +632,20 @@ main(argc, argv) if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("status", bc_GetTapeStatusCmd, 0, + ts = cmd_CreateSyntax("status", bc_GetTapeStatusCmd, NULL, "get tape coordinator status"); cmd_AddParm(ts, "-portoffset", CMD_SINGLE, CMD_OPTIONAL, "TC port offset"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("delvolset", bc_DeleteVolSetCmd, 0, + ts = cmd_CreateSyntax("delvolset", bc_DeleteVolSetCmd, NULL, "delete a volume set"); cmd_AddParm(ts, "-name", CMD_LIST, CMD_REQUIRED, "volume set name"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("addvolentry", bc_AddVolEntryCmd, 0, + ts = cmd_CreateSyntax("addvolentry", bc_AddVolEntryCmd, NULL, "add a new volume entry"); cmd_AddParm(ts, "-name", CMD_SINGLE, CMD_REQUIRED, "volume set name"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "machine name"); @@ -658,26 +655,26 @@ main(argc, argv) if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("delvolentry", bc_DeleteVolEntryCmd, 0, + ts = cmd_CreateSyntax("delvolentry", bc_DeleteVolEntryCmd, NULL, "delete a volume set sub-entry"); cmd_AddParm(ts, "-name", CMD_SINGLE, CMD_REQUIRED, "volume set name"); cmd_AddParm(ts, "-entry", CMD_SINGLE, CMD_REQUIRED, "volume set index"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("adddump", bc_AddDumpCmd, 0, "add dump schedule"); + ts = cmd_CreateSyntax("adddump", bc_AddDumpCmd, NULL, "add dump schedule"); cmd_AddParm(ts, "-dump", CMD_LIST, CMD_REQUIRED, "dump level name"); cmd_AddParm(ts, "-expires", CMD_LIST, CMD_OPTIONAL, "expiration date"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("deldump", bc_DeleteDumpCmd, 0, + ts = cmd_CreateSyntax("deldump", bc_DeleteDumpCmd, NULL, "delete dump schedule"); cmd_AddParm(ts, "-dump", CMD_SINGLE, CMD_REQUIRED, "dump level name"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("labeltape", bc_LabelTapeCmd, 0, "label a tape"); + ts = cmd_CreateSyntax("labeltape", bc_LabelTapeCmd, NULL, "label a tape"); cmd_AddParm(ts, "-name", CMD_SINGLE, CMD_OPTIONAL, "AFS tape name, defaults to NULL"); cmd_AddParm(ts, "-size", CMD_SINGLE, CMD_OPTIONAL, @@ -689,14 +686,14 @@ main(argc, argv) if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("readlabel", bc_ReadLabelCmd, 0, + ts = cmd_CreateSyntax("readlabel", bc_ReadLabelCmd, NULL, "read the label on tape"); cmd_AddParm(ts, "-portoffset", CMD_SINGLE, CMD_OPTIONAL, "TC port offset"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("scantape", bc_ScanDumpsCmd, 0, + ts = cmd_CreateSyntax("scantape", bc_ScanDumpsCmd, NULL, "dump information recovery from tape"); cmd_AddParm(ts, "-dbadd", CMD_FLAG, CMD_OPTIONAL, "add information to the database"); @@ -705,34 +702,34 @@ main(argc, argv) if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("volinfo", bc_dblookupCmd, 0, + ts = cmd_CreateSyntax("volinfo", bc_dblookupCmd, NULL, "query the backup database"); cmd_AddParm(ts, "-volume", CMD_SINGLE, CMD_REQUIRED, "volume name"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("setexp", bc_SetExpCmd, 0, + ts = cmd_CreateSyntax("setexp", bc_SetExpCmd, NULL, "set/clear dump expiration dates"); cmd_AddParm(ts, "-dump", CMD_LIST, CMD_REQUIRED, "dump level name"); cmd_AddParm(ts, "-expires", CMD_LIST, CMD_OPTIONAL, "expiration date"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("savedb", bc_saveDbCmd, 0, "save backup database"); + ts = cmd_CreateSyntax("savedb", bc_saveDbCmd, NULL, "save backup database"); cmd_AddParm(ts, "-portoffset", CMD_SINGLE, CMD_OPTIONAL, "TC port offset"); cmd_AddParm(ts, "-archive", CMD_LIST, CMD_OPTIONAL, "date time"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("restoredb", bc_restoreDbCmd, 0, + ts = cmd_CreateSyntax("restoredb", bc_restoreDbCmd, NULL, "restore backup database"); cmd_AddParm(ts, "-portoffset", CMD_SINGLE, CMD_OPTIONAL, "TC port offset"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("dumpinfo", bc_dumpInfoCmd, 0, + ts = cmd_CreateSyntax("dumpinfo", bc_dumpInfoCmd, NULL, "provide information about a dump in the database"); cmd_AddParm(ts, "-ndumps", CMD_SINGLE, CMD_OPTIONAL, "no. of dumps"); cmd_AddParm(ts, "-id", CMD_SINGLE, CMD_OPTIONAL, "dump id"); @@ -741,13 +738,13 @@ main(argc, argv) if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("dbverify", bc_dbVerifyCmd, 0, + ts = cmd_CreateSyntax("dbverify", bc_dbVerifyCmd, NULL, "check ubik database integrity"); cmd_AddParm(ts, "-detail", CMD_FLAG, CMD_OPTIONAL, "additional details"); if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("deletedump", bc_deleteDumpCmd, 0, + ts = cmd_CreateSyntax("deletedump", bc_deleteDumpCmd, NULL, "delete dumps from the database"); cmd_AddParm(ts, "-dumpid", CMD_LIST, CMD_OPTIONAL, "dump id"); cmd_AddParm(ts, "-from", CMD_LIST, CMD_OPTIONAL, "date time"); @@ -764,7 +761,7 @@ main(argc, argv) if (!interact) add_std_args(ts); - ts = cmd_CreateSyntax("interactive", bc_interactCmd, 0, + ts = cmd_CreateSyntax("interactive", bc_interactCmd, NULL, "enter interactive mode"); add_std_args(ts); diff --git a/src/bucoord/regex.c b/src/bucoord/regex.c index a65587e2aa..435749f1a7 100644 --- a/src/bucoord/regex.c +++ b/src/bucoord/regex.c @@ -93,6 +93,10 @@ static char expbuf[ESIZE], *braslist[NBRA], *braelist[NBRA]; static char circf; +static int advance(); +static int backref(); +static int cclass(); + /* * compile the regular expression argument into a dfa */ diff --git a/src/bucoord/restore.c b/src/bucoord/restore.c index a06bc65b15..0fc3135b66 100644 --- a/src/bucoord/restore.c +++ b/src/bucoord/restore.c @@ -131,6 +131,7 @@ extractTapeSeq(tapename) return (atol(sptr)); } +void viceName(value) long value; { @@ -224,7 +225,7 @@ bc_Restorer(aindex) code = bcdb_FindDumpByID(dumpTaskPtr->parentDumpID, dumpDescr); if (code) { - afs_com_err(whoami, "Couldn't look up info for dump %d\n", + afs_com_err(whoami, code, "Couldn't look up info for dump %d\n", dumpTaskPtr->parentDumpID); continue; } diff --git a/src/bucoord/status.c b/src/bucoord/status.c index d48c145776..956d93f75c 100644 --- a/src/bucoord/status.c +++ b/src/bucoord/status.c @@ -38,6 +38,7 @@ extern struct Lock cmdLineLock; /* lock on the cmdLine */ * These routines are common the backup coordinator and tape coordinator */ +void initStatus() { dlqInit(&statusHead); @@ -47,21 +48,25 @@ initStatus() /* lock managment */ +void lock_Status() { ObtainWriteLock(&statusQueueLock); } +void unlock_Status() { ReleaseWriteLock(&statusQueueLock); } +void lock_cmdLine() { ObtainWriteLock(&cmdLineLock); } +void unlock_cmdLine() { ReleaseWriteLock(&cmdLineLock); @@ -109,6 +114,7 @@ createStatusNode() return (ptr); } +void deleteStatusNode(ptr) statusP ptr; { diff --git a/src/bucoord/tape_hosts.c b/src/bucoord/tape_hosts.c index 6318968802..73c3fd8b0a 100644 --- a/src/bucoord/tape_hosts.c +++ b/src/bucoord/tape_hosts.c @@ -49,10 +49,8 @@ extern char *whoami; * Add a host to the tape hosts */ -afs_int32 -bc_AddHostCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_AddHostCmd(struct cmd_syndesc *as, void *arock) { struct cmd_item *ti; udbClientTextP ctPtr; @@ -107,10 +105,8 @@ bc_AddHostCmd(as, arock) return (code); } -afs_int32 -bc_DeleteHostCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_DeleteHostCmd(struct cmd_syndesc *as, void *arock) { struct cmd_item *ti; afs_int32 port = 0; @@ -174,10 +170,8 @@ bc_DeleteHostCmd(as, arock) * ignored */ -afs_int32 -bc_ListHostsCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_ListHostsCmd(struct cmd_syndesc *as, void *arock) { afs_int32 code; register struct bc_hostEntry *tentry; diff --git a/src/bucoord/vol_sets.c b/src/bucoord/vol_sets.c index 6190d6e6e0..3333daf633 100644 --- a/src/bucoord/vol_sets.c +++ b/src/bucoord/vol_sets.c @@ -41,6 +41,7 @@ extern char *whoami; extern struct bc_volumeSet *bc_FindVolumeSet(struct bc_config *cf, char *name); extern void FreeVolumeSet(struct bc_volumeSet *avset); +static ListVolSet(); /* ------------------------------------ * command level routines @@ -57,11 +58,10 @@ extern void FreeVolumeSet(struct bc_volumeSet *avset); * parm 3 is volume regexp */ -bc_AddVolEntryCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_AddVolEntryCmd(struct cmd_syndesc *as, void *arock) { - register afs_int32 code; + register int code; char *volSetName, *serverName, *partitionName, *volRegExp; udbClientTextP ctPtr; struct bc_volumeSet *tset; @@ -129,13 +129,11 @@ bc_AddVolEntryCmd(as, arock) * name of new volume set */ -afs_int32 -bc_AddVolSetCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_AddVolSetCmd(struct cmd_syndesc *as, void *arock) { /* parm 0 is vol set name */ - register afs_int32 code; + register int code; register struct cmd_item *ti; udbClientTextP ctPtr; afs_int32 flags; @@ -190,12 +188,10 @@ bc_AddVolSetCmd(as, arock) * parm 1 is entry # (integer, 1 based) */ -afs_int32 -bc_DeleteVolEntryCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_DeleteVolEntryCmd(struct cmd_syndesc *as, void *arock) { - register afs_int32 code; + register int code; afs_int32 entry; char *vsname; udbClientTextP ctPtr; @@ -279,13 +275,11 @@ bc_DeleteVolEntryCmd(as, arock) * name of volumeset to delete */ -afs_int32 -bc_DeleteVolSetCmd(as, arock) - struct cmd_syndesc *as; - char *arock; +int +bc_DeleteVolSetCmd(struct cmd_syndesc *as, void *arock) { /* parm 0 is vol set name */ - register afs_int32 code; + register int code; register struct cmd_item *ti; udbClientTextP ctPtr; afs_int32 c; @@ -364,13 +358,13 @@ ListVolSet(struct bc_volumeSet *aset) * optional parameter specifies a volumeset name */ -afs_int32 -bc_ListVolSetCmd(struct cmd_syndesc *as, char *arock) +int +bc_ListVolSetCmd(struct cmd_syndesc *as, void *arock) { /* parm 0 is optional volume set to display */ register struct bc_volumeSet *tset; register struct cmd_item *ti; - afs_int32 code = 0; + int code = 0; code = bc_UpdateVolumeSet(); if (code) { diff --git a/src/budb/Makefile.in b/src/budb/Makefile.in index f8f167180e..a5f143647f 100644 --- a/src/budb/Makefile.in +++ b/src/budb/Makefile.in @@ -80,16 +80,16 @@ budb_server: $(SERVER_OBJS) ${LIBS} ${KRB5LIBS} $(LIBCOM_ERR) ${XLIBS} budb.cs.c: budb.rg - ${RXGEN} -u -C -o $@ ${srcdir}/budb.rg + ${RXGEN} -A -u -C -o $@ ${srcdir}/budb.rg budb.ss.c: budb.rg - ${RXGEN} -S -o $@ ${srcdir}/budb.rg + ${RXGEN} -A -S -o $@ ${srcdir}/budb.rg budb.xdr.c: budb.rg - ${RXGEN} -c -o $@ ${srcdir}/budb.rg + ${RXGEN} -A -c -o $@ ${srcdir}/budb.rg budb.h: budb.rg - ${RXGEN} -u -h -o $@ ${srcdir}/budb.rg + ${RXGEN} -A -u -h -o $@ ${srcdir}/budb.rg budb.cs.c: budb.h budb.xdr.c: budb.h diff --git a/src/budb/database.c b/src/budb/database.c index 42c4f43c9b..56797f6421 100644 --- a/src/budb/database.c +++ b/src/budb/database.c @@ -26,15 +26,7 @@ RCSID #include "database.h" #include "error_macros.h" #include "afs/audit.h" - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif - int pollCount; struct memoryDB db; /* really allocate it here */ diff --git a/src/budb/db_alloc.c b/src/budb/db_alloc.c index fbed0a6b72..4ac984a426 100644 --- a/src/budb/db_alloc.c +++ b/src/budb/db_alloc.c @@ -18,13 +18,7 @@ RCSID #else #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include diff --git a/src/budb/db_dump.c b/src/budb/db_dump.c index 587fde42c7..4d0a11e285 100644 --- a/src/budb/db_dump.c +++ b/src/budb/db_dump.c @@ -28,14 +28,7 @@ RCSID #include #include #include - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include "database.h" #include "budb.h" @@ -100,6 +93,7 @@ canWrite(fid) * no return value */ +void haveWritten(nbytes) afs_int32 nbytes; { @@ -121,6 +115,7 @@ haveWritten(nbytes) * done flag. */ +void doneWriting(error) afs_int32 error; { diff --git a/src/budb/db_hash.c b/src/budb/db_hash.c index 16a0636e82..d9b9897c2c 100644 --- a/src/budb/db_hash.c +++ b/src/budb/db_hash.c @@ -18,13 +18,7 @@ RCSID #else #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include diff --git a/src/budb/db_text.c b/src/budb/db_text.c index 8876612bc7..ab21aeaea3 100644 --- a/src/budb/db_text.c +++ b/src/budb/db_text.c @@ -22,13 +22,7 @@ RCSID #include #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include @@ -489,7 +483,7 @@ SaveText(call, lockHandle, textType, offset, flags, charListPtr) } /* debug support */ - +void saveTextToFile(ut, tbPtr) struct ubik_trans *ut; struct textBlock *tbPtr; diff --git a/src/budb/ol_verify.c b/src/budb/ol_verify.c index 7af32766c2..741630ef1b 100644 --- a/src/budb/ol_verify.c +++ b/src/budb/ol_verify.c @@ -22,13 +22,7 @@ RCSID #include #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include diff --git a/src/budb/procs.c b/src/budb/procs.c index b58ab68864..34770e4acb 100644 --- a/src/budb/procs.c +++ b/src/budb/procs.c @@ -29,14 +29,7 @@ RCSID #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif - #include #include #include diff --git a/src/budb/server.c b/src/budb/server.c index 4771da746d..65dcbf5793 100644 --- a/src/budb/server.c +++ b/src/budb/server.c @@ -24,15 +24,7 @@ RCSID #include #include #endif - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif - #include #include #include @@ -66,6 +58,8 @@ RCSID struct ubik_dbase *BU_dbase; struct afsconf_dir *BU_conf; /* for getting cell info */ +int argHandler(struct cmd_syndesc *, void *); + char lcell[MAXKTCREALMLEN]; afs_int32 myHost = 0; int helpOption; @@ -135,8 +129,7 @@ convert_cell_to_ubik(cellinfo, myHost, serverList) * If it were, this routine would never have been called. */ static int -MyBeforeProc(as) - register struct cmd_syndesc *as; +MyBeforeProc(register struct cmd_syndesc *as, void *arock) { helpOption = 0; return 0; @@ -146,12 +139,11 @@ MyBeforeProc(as) * initialize all the supported commands and their arguments */ +void initializeArgHandler() { struct cmd_syndesc *cptr; - int argHandler(); - cmd_SetBeforeProc(MyBeforeProc, NULL); cptr = cmd_CreateSyntax(NULL, argHandler, NULL, "Backup database server"); @@ -183,9 +175,7 @@ initializeArgHandler() } int -argHandler(as, arock) - struct cmd_syndesc *as; - char *arock; +argHandler(struct cmd_syndesc *as, void *arock) { /* globalConfPtr provides the handle for the configuration information */ @@ -623,7 +613,7 @@ main(argc, argv) return (code); } - +void consistencyCheckDb() { /* do consistency checks on structure sizes */ diff --git a/src/budb/struct_ops.c b/src/budb/struct_ops.c index 0377f3bdc2..49be35f698 100644 --- a/src/budb/struct_ops.c +++ b/src/budb/struct_ops.c @@ -107,6 +107,7 @@ printDumpEntry(struct budb_dumpEntry *deptr) * print the hash table structure, i.e. the header structure. */ +void printHashTable(fid, htptr) FILE *fid; struct hashTable *htptr; @@ -311,6 +312,7 @@ printVolInfo(fid, viptr) * currently used for debug only */ +void volFragment_ntoh(netVfPtr, hostVfPtr) struct volFragment *netVfPtr, *hostVfPtr; { @@ -327,6 +329,7 @@ volFragment_ntoh(netVfPtr, hostVfPtr) hostVfPtr->sequence = ntohs(netVfPtr->sequence); } +void volInfo_ntoh(netViPtr, hostViPtr) struct volInfo *netViPtr, *hostViPtr; { @@ -342,6 +345,7 @@ volInfo_ntoh(netViPtr, hostViPtr) hostViPtr->nFrags = ntohl(netViPtr->nFrags); } +void tape_ntoh(netTapePtr, hostTapePtr) struct tape *netTapePtr, *hostTapePtr; { @@ -363,6 +367,7 @@ tape_ntoh(netTapePtr, hostTapePtr) hostTapePtr->useCount = ntohl(netTapePtr->useCount); } +void dump_ntoh(netDumpPtr, hostDumpPtr) struct dump *netDumpPtr, *hostDumpPtr; { @@ -385,6 +390,7 @@ dump_ntoh(netDumpPtr, hostDumpPtr) principal_ntoh(&netDumpPtr->dumper, &hostDumpPtr->dumper); } +void DbHeader_ntoh(netptr, hostptr) struct DbHeader *netptr, *hostptr; { @@ -396,6 +402,7 @@ DbHeader_ntoh(netptr, hostptr) hostptr->lastTapeId = ntohl(netptr->lastTapeId); } +void dumpEntry_ntoh(netptr, hostptr) struct budb_dumpEntry *netptr, *hostptr; { @@ -434,6 +441,7 @@ principal_ntoh(netptr, hostptr) return 0; } +void structDumpHeader_hton(hostPtr, netPtr) struct structDumpHeader *hostPtr, *netPtr; { @@ -442,6 +450,7 @@ structDumpHeader_hton(hostPtr, netPtr) netPtr->size = htonl(hostPtr->size); } +void structDumpHeader_ntoh(netPtr, hostPtr) struct structDumpHeader *hostPtr, *netPtr; { @@ -450,6 +459,7 @@ structDumpHeader_ntoh(netPtr, hostPtr) hostPtr->size = ntohl(netPtr->size); } +void tapeEntry_ntoh(netptr, hostptr) struct budb_tapeEntry *netptr, *hostptr; { @@ -494,6 +504,7 @@ tapeSet_ntoh(netptr, hostptr) return 0; } +void textBlock_hton(hostptr, netptr) struct textBlock *hostptr, *netptr; { @@ -504,6 +515,7 @@ textBlock_hton(hostptr, netptr) netptr->newTextAddr = htonl(hostptr->newTextAddr); } +void textBlock_ntoh(netptr, hostptr) struct textBlock *netptr, *hostptr; { @@ -514,6 +526,7 @@ textBlock_ntoh(netptr, hostptr) hostptr->newTextAddr = ntohl(netptr->newTextAddr); } +void textLock_hton(hostptr, netptr) db_lockP hostptr, netptr; { @@ -525,6 +538,7 @@ textLock_hton(hostptr, netptr) netptr->lockHost = htonl(hostptr->lockHost); } +void textLock_ntoh(netptr, hostptr) db_lockP netptr, hostptr; { @@ -536,6 +550,7 @@ textLock_ntoh(netptr, hostptr) hostptr->lockHost = ntohl(netptr->lockHost); } +void volumeEntry_ntoh(netptr, hostptr) struct budb_volumeEntry *netptr, *hostptr; { @@ -562,7 +577,7 @@ volumeEntry_ntoh(netptr, hostptr) * ------------------------------------- */ - +void copy_ktcPrincipal_to_budbPrincipal(ktcPtr, budbPtr) struct ktc_principal *ktcPtr; struct budb_principal *budbPtr; @@ -666,4 +681,5 @@ default_tapeset(tapesetPtr, dumpname) tapesetPtr->a = 1; tapesetPtr->b = 1; tapesetPtr->maxTapes = 0; + return 0; } diff --git a/src/butc/dbentries.c b/src/butc/dbentries.c index 5da1ba1efa..16f09df491 100644 --- a/src/butc/dbentries.c +++ b/src/butc/dbentries.c @@ -24,6 +24,7 @@ RCSID #include #endif #include +#include #include #include #include @@ -309,6 +310,7 @@ waitDbWatcher() if (message) { printf("Updating database - done\n"); } + return 0; } #define MAXVOLUMESTOADD 100 diff --git a/src/butc/dump.c b/src/butc/dump.c index 5f5b95f63d..56562e4eef 100644 --- a/src/butc/dump.c +++ b/src/butc/dump.c @@ -24,6 +24,7 @@ RCSID #include #endif #include +#include #include #include #include diff --git a/src/butc/lwps.c b/src/butc/lwps.c index 038d5bc7b6..3561d5df9b 100644 --- a/src/butc/lwps.c +++ b/src/butc/lwps.c @@ -14,6 +14,7 @@ RCSID ("$Header$"); #include +#include #ifdef AFS_NT40_ENV #include #include @@ -546,6 +547,7 @@ callOutRoutine(taskId, tapePath, flag, name, dbDumpId, tapecount) * Regardless of error, the closecallout routine will be called * (unless a tape is not mounted in the first place). */ +void unmountTape(taskId, tapeInfoPtr) afs_int32 taskId; struct butm_tapeInfo *tapeInfoPtr; @@ -1922,6 +1924,7 @@ Restorer(newNode) /* this is just scaffolding, creates new tape label with name */ +void GetNewLabel(tapeInfoPtr, pName, AFSName, tapeLabel) struct butm_tapeInfo *tapeInfoPtr; char *pName, *AFSName; @@ -2283,6 +2286,7 @@ Labeller(labelIfPtr) * print out the tape label. */ +void PrintTapeLabel(labelptr) struct butm_tapeLabel *labelptr; { diff --git a/src/butc/read_tape.c b/src/butc/read_tape.c index 0f4aee8462..0e12480544 100644 --- a/src/butc/read_tape.c +++ b/src/butc/read_tape.c @@ -21,6 +21,7 @@ RCSID #include #include #include +#include #include #include @@ -81,6 +82,7 @@ readblock(buffer) return 0; } +void printLabel(tapeLabelPtr) struct tapeLabel *tapeLabelPtr; { @@ -129,6 +131,7 @@ printLabel(tapeLabelPtr) } } +void printHeader(headerPtr, isvolheader) struct volumeHeader *headerPtr; afs_int32 *isvolheader; @@ -381,9 +384,8 @@ writeData(data, size) return 0; } -WorkerBee(as, arock) - struct cmd_syndesc *as; - char *arock; +static int +WorkerBee(struct cmd_syndesc *as, void *arock) { char *tapedev; struct tapeLabel *label; diff --git a/src/butc/recoverDb.c b/src/butc/recoverDb.c index fe40c8ac51..a6d0d7f03e 100644 --- a/src/butc/recoverDb.c +++ b/src/butc/recoverDb.c @@ -24,6 +24,7 @@ RCSID #include #endif #include +#include #include #include #include @@ -51,6 +52,8 @@ struct tapeScanInfo { extern struct tapeConfig globalTapeConfig; extern struct deviceSyncNode *deviceLatch; +static readDump(); + /* PrintDumpLabel * print out the tape (dump) label. */ diff --git a/src/butc/tcmain.c b/src/butc/tcmain.c index 7503c2ee36..2c2a7cc347 100644 --- a/src/butc/tcmain.c +++ b/src/butc/tcmain.c @@ -822,7 +822,7 @@ GetConfigParams(char *filename, afs_int32 port) } static int -WorkerBee(struct cmd_syndesc *as, char *arock) +WorkerBee(struct cmd_syndesc *as, void *arock) { register afs_int32 code; struct rx_securityClass *(securityObjects[3]); diff --git a/src/butc/tcprocs.c b/src/butc/tcprocs.c index 89b01baf12..4bb4f231e3 100644 --- a/src/butc/tcprocs.c +++ b/src/butc/tcprocs.c @@ -27,6 +27,7 @@ RCSID #include #include #include +#include #include #include #include @@ -41,6 +42,11 @@ RCSID #include "error_macros.h" #include "butc_xbsa.h" +static CopyDumpDesc(); +static CopyRestoreDesc(); +static CopyTapeSetDesc(); + + int callPermitted(struct rx_call *call) { @@ -138,7 +144,7 @@ STC_LabelTape(struct rx_call *acid, struct tc_tapeLabel *label, afs_uint32 *task PROCESS pid; #endif struct labelTapeIf *ptr; - statusP statusPtr; + statusP statusPtr = NULL; afs_int32 code; extern int Labeller(); @@ -486,7 +492,7 @@ STC_SaveDb(struct rx_call *rxCall, Date archiveTime, afs_uint32 *taskId) #else PROCESS pid; #endif - statusP statusPtr; + statusP statusPtr = NULL; afs_int32 code = 0; struct saveDbIf *ptr; diff --git a/src/butc/tcstatus.c b/src/butc/tcstatus.c index 79c0c53658..08cbfb9582 100644 --- a/src/butc/tcstatus.c +++ b/src/butc/tcstatus.c @@ -24,6 +24,7 @@ RCSID #include #endif #include +#include #include #include #include diff --git a/src/butc/tcudbprocs.c b/src/butc/tcudbprocs.c index 4e0a754ec2..7e84e5d539 100644 --- a/src/butc/tcudbprocs.c +++ b/src/butc/tcudbprocs.c @@ -28,6 +28,7 @@ RCSID #include #include #include +#include #include #include #include @@ -51,6 +52,10 @@ RCSID extern int dump_namecheck; extern int autoQuery; +static void initTapeBuffering(); +static writeDbDump(); +static restoreDbEntries(); + /* CreateDBDump * create a dump entry for a saved database */ @@ -904,7 +909,7 @@ readDbTape(tapeInfoPtr, rstTapeInfoPtr, query) } static afs_int32 nbytes = 0; /* # bytes left in buffer */ -static +static void initTapeBuffering() { nbytes = 0; diff --git a/src/butc/test.c b/src/butc/test.c index f61c66bcd8..1c09a6d455 100644 --- a/src/butc/test.c +++ b/src/butc/test.c @@ -80,9 +80,8 @@ GetServer(aname) } -static -PerformDump(as) - register struct cmd_syndesc *as; +static int +PerformDump(register struct cmd_syndesc *as, void *arock) { struct rx_connection *aconn; afs_int32 server; @@ -127,11 +126,12 @@ PerformDump(as) exit(1); } printf("dumpid returned %u\n", tdumpID); + + return 0; } -static -PerformRestore(as) - register struct cmd_syndesc *as; +static int +PerformRestore(register struct cmd_syndesc *as, void *arock) { struct rx_connection *aconn; afs_int32 server; @@ -169,11 +169,11 @@ PerformRestore(as) exit(1); } printf("dumpid returned %u\n", tdumpID); + return 0; } -static -CheckDump(as) - register struct cmd_syndesc *as; +static int +CheckDump(register struct cmd_syndesc *as, void *arock) { struct rx_connection *aconn; afs_int32 server; @@ -189,11 +189,11 @@ CheckDump(as) printf("call to TC_CheckDump failed %u\n", code); exit(1); } + return 0; } -static -AbortDump(as) - register struct cmd_syndesc *as; +static int +AbortDump(register struct cmd_syndesc *as, void *arock) { struct rx_connection *aconn; afs_int32 server; @@ -209,11 +209,11 @@ AbortDump(as) printf("call to TC_AbortDump failed %u\n", code); exit(1); } + return 0; } -static -WaitForDump(as) - register struct cmd_syndesc *as; +static int +WaitForDump(register struct cmd_syndesc *as, void *arock) { struct rx_connection *aconn; afs_int32 server; @@ -229,11 +229,11 @@ WaitForDump(as) printf("call to TC_WaitForDump failed %u\n", code); exit(1); } + return 0; } -static -EndDump(as) - register struct cmd_syndesc *as; +static int +EndDump(register struct cmd_syndesc *as, void *arock) { struct rx_connection *aconn; afs_int32 server; @@ -249,12 +249,11 @@ EndDump(as) printf("call to TC_EndDump failed %u\n", code); exit(1); } + return 0; } -static -MyBeforeProc(as, arock) - struct cmd_syndesc *as; - char *arock; +static int +MyBeforeProc(struct cmd_syndesc *as, void *arock) { afs_int32 code; @@ -295,20 +294,20 @@ main(argc, argv) #endif cmd_SetBeforeProc(MyBeforeProc, NULL); - ts = cmd_CreateSyntax("dump", PerformDump, 0, "perform a dump"); + ts = cmd_CreateSyntax("dump", PerformDump, NULL, "perform a dump"); - ts = cmd_CreateSyntax("restore", PerformRestore, 0, "perform a restore"); + ts = cmd_CreateSyntax("restore", PerformRestore, NULL, "perform a restore"); - ts = cmd_CreateSyntax("check", CheckDump, 0, "check a dump"); + ts = cmd_CreateSyntax("check", CheckDump, NULL, "check a dump"); cmd_AddParm(ts, "-id", CMD_SINGLE, 0, "dump id"); - ts = cmd_CreateSyntax("abort", AbortDump, 0, "abort a dump"); + ts = cmd_CreateSyntax("abort", AbortDump, NULL, "abort a dump"); cmd_AddParm(ts, "-id", CMD_SINGLE, 0, "dump id"); - ts = cmd_CreateSyntax("wait", WaitForDump, 0, "wait for a dump"); + ts = cmd_CreateSyntax("wait", WaitForDump, NULL, "wait for a dump"); cmd_AddParm(ts, "-id", CMD_SINGLE, 0, "dump id"); - ts = cmd_CreateSyntax("end", EndDump, 0, "end a dump"); + ts = cmd_CreateSyntax("end", EndDump, NULL, "end a dump"); cmd_AddParm(ts, "-id", CMD_SINGLE, 0, "dump id"); code = cmd_Dispatch(argc, argv); diff --git a/src/butm/file_tm.c b/src/butm/file_tm.c index e6b71ab03e..1e858d38d1 100644 --- a/src/butm/file_tm.c +++ b/src/butm/file_tm.c @@ -24,6 +24,7 @@ RCSID #include #include #include +#include #include #include #include @@ -626,6 +627,7 @@ ShutdownAccess(usd_handle_t fid) * dataSize - bytes used on the tape */ +void incSize(info, dataSize) struct butm_tapeInfo *info; afs_uint32 dataSize; @@ -647,6 +649,7 @@ incSize(info, dataSize) * dataSize - bytes used on the tape */ +void incPosition(info, fid, dataSize) struct butm_tapeInfo *info; usd_handle_t fid; diff --git a/src/cf/kerberos.m4 b/src/cf/kerberos.m4 index e471ed21bb..f4a31ed8a4 100644 --- a/src/cf/kerberos.m4 +++ b/src/cf/kerberos.m4 @@ -210,7 +210,7 @@ if test "X$KRB5VENDOR" != X && test "X$KRB5VENDOR" != XK5SSL; then CPPFLAGS="$CPPFLAGS $KRB5CFLAGS" save_LIBS="$LIBS" LIBS="$LIBS $KRB5LIBS" - AC_CHECK_FUNCS([add_to_error_table add_error_table krb5_princ_size krb5_principal_get_comp_string encode_krb5_enc_tkt_part encode_krb5_ticket]) + AC_CHECK_FUNCS([add_to_error_table add_error_table krb5_princ_size krb5_principal_get_comp_string encode_krb5_enc_tkt_part encode_krb5_ticket krb5_c_encrypt krb5_c_encrypt_length krb5_cc_register]) AC_CHECK_FUNCS([krb5_524_convert_creds], , [AC_CHECK_FUNCS([krb524_convert_creds_kdc], , [AC_CHECK_LIB([krb524], [krb524_convert_creds_kdc], @@ -269,8 +269,13 @@ else ENABLE_KRB5='#' fi +if test "x$ac_cv_krb5_cc_register_exists" = "xyes"; then + AC_DEFINE(HAVE_KRB5_CC_REGISTER, 1, [define if krb5_cc_register exists]) +fi + AC_SUBST(DISABLE_KRB5) AC_SUBST(ENABLE_KRB5) +AC_SUBST(BUILD_KRB5) AC_SUBST(KRB5CFLAGS) AC_SUBST(KRB5LIBS) dnl KRB5LIBS_RAW is not used; only output in case -lcom_err is missed. diff --git a/src/cf/linux-test1.m4 b/src/cf/linux-test1.m4 index f2fe2bbe78..6bee0e5ed8 100644 --- a/src/cf/linux-test1.m4 +++ b/src/cf/linux-test1.m4 @@ -2,9 +2,12 @@ # [ACTION-IF-SUCCESS], [ACTION-IF-FAILURE]) # AC_DEFUN([AC_TRY_KBUILD26],[ rm -fr conftest.dir + if test "x$ac_linux_kbuild_requires_extra_cflags" = "xyes" ; then + CFLAGS_PREFIX='EXTRA_' + fi if mkdir conftest.dir && cat >conftest.dir/Makefile <<_ACEOF && -CFLAGS += $CPPFLAGS +${CFLAGS_PREFIX}CFLAGS += $CPPFLAGS obj-m += conftest.o _ACEOF @@ -24,8 +27,9 @@ $2 MODULE_LICENSE("http://www.openafs.org/dl/license10.html"); _ACEOF - echo make -C $LINUX_KERNEL_PATH M=$SRCDIR_PARENT/conftest.dir modules KBUILD_VERBOSE=1 >&AS_MESSAGE_LOG_FD - make -C $LINUX_KERNEL_PATH M=$SRCDIR_PARENT/conftest.dir modules KBUILD_VERBOSE=1 >&AS_MESSAGE_LOG_FD 2>conftest.err + echo make -C $LINUX_KERNEL_PATH M=$SRCDIR_PARENT/conftest.dir modules KBUILD_VERBOSE=1 >&AS_MESSAGE_LOG_FD && + make -C $LINUX_KERNEL_PATH M=$SRCDIR_PARENT/conftest.dir modules KBUILD_VERBOSE=1 >&AS_MESSAGE_LOG_FD 2>conftest.err && + ! grep "^WARNING: .* undefined!$" conftest.err >/dev/null 2>&1 then [$3] else sed '/^ *+/d' conftest.err >&AS_MESSAGE_LOG_FD @@ -42,8 +46,10 @@ _ACEOF # AC_DEFUN([AC_TRY_KBUILD24], [ ac_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="-I$LINUX_KERNEL_PATH/include -D__KERNEL__ $CPPFLAGS" - AC_TRY_COMPILE([$1], [$2], [$3], [$4]) + CPPFLAGS="-I$LINUX_KERNEL_PATH/include -D__KERNEL__ -Werror-implicit-function-declaration $CPPFLAGS" + AC_TRY_COMPILE([ +#include +$1], [$2], [$3], [$4]) CPPFLAGS="$ac_save_CPPFLAGS"]) @@ -77,3 +83,16 @@ lose ],:,AC_MSG_RESULT(no) AC_MSG_FAILURE([Fix problem or use --disable-kernel-module...])) AC_MSG_RESULT(yes)]) + +AC_DEFUN([LINUX_KBUILD_USES_EXTRA_CFLAGS], [ + AC_MSG_CHECKING([if linux kbuild requires EXTRA_CFLAGS]) + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS=-Wall + AC_TRY_KBUILD( +[#include +#include ], + [], + ac_linux_kbuild_requires_extra_cflags=no, + ac_linux_kbuild_requires_extra_cflags=yes) + CPPFLAGS="$save_CPPFLAGS" + AC_MSG_RESULT($ac_linux_kbuild_requires_extra_cflags)]) diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index 51b9e2e9f6..e0e1bb814a 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -41,6 +41,15 @@ lose ac_cv_linux_completion_h_exists=no)]) AC_MSG_RESULT($ac_cv_linux_completion_h_exists)]) +AC_DEFUN([LINUX_EXPORTFS_H_EXISTS], [ + AC_MSG_CHECKING([for linux/exportfs.h existence]) + AC_CACHE_VAL([ac_cv_linux_exportfs_h_exists], [ + AC_TRY_KBUILD( +[#include ], +[return;], + ac_cv_linux_exportfs_h_exists=yes, + ac_cv_linux_exportfs_h_exists=no)]) + AC_MSG_RESULT($ac_cv_linux_exportfs_h_exists)]) AC_DEFUN([LINUX_DEFINES_FOR_EACH_PROCESS], [ AC_MSG_CHECKING([for defined for_each_process]) @@ -871,3 +880,99 @@ fl_owner_t id; ac_cv_linux_func_f_flush_takes_fl_owner_t=no)]) AC_MSG_RESULT($ac_cv_linux_func_f_flush_takes_fl_owner_t)]) +AC_DEFUN([LINUX_HAVE_KMEM_CACHE_T], [ + AC_MSG_CHECKING([whether kmem_cache_t exists]) + AC_CACHE_VAL([ac_cv_linux_have_kmem_cache_t], [ + AC_TRY_KBUILD( +[#include ], +[kmem_cache_t *k;], + ac_cv_linux_have_kmem_cache_t=yes, + ac_cv_linux_have_kmem_cache_t=no)]) + AC_MSG_RESULT($ac_cv_linux_have_kmem_cache_t)]) + +AC_DEFUN([LINUX_KMEM_CACHE_CREATE_TAKES_DTOR], [ + AC_MSG_CHECKING([whether kmem_cache_create takes a destructor argument]) + AC_CACHE_VAL([ac_cv_linux_kmem_cache_create_takes_dtor], [ + AC_TRY_KBUILD( +[#include ], +[kmem_cache_create(NULL, 0, 0, 0, NULL, NULL);], + ac_cv_linux_kmem_cache_create_takes_dtor=yes, + ac_cv_linux_kmem_cache_create_takes_dtor=no)]) + AC_MSG_RESULT($ac_cv_linux_kmem_cache_create_takes_dtor)]) + +AC_DEFUN([LINUX_FS_STRUCT_FOP_HAS_SENDFILE], [ + AC_MSG_CHECKING([for sendfile in struct file_operations]) + AC_CACHE_VAL([ac_cv_linux_fs_struct_fop_has_sendfile], [ + AC_TRY_KBUILD( +[#include ], +[struct file_operations _fop; +_fop.sendfile(NULL, NULL, 0, 0, NULL);], + ac_cv_linux_fs_struct_fop_has_sendfile=yes, + ac_cv_linux_fs_struct_fop_has_sendfile=no)]) + AC_MSG_RESULT($ac_cv_linux_fs_struct_fop_has_sendfile)]) + +AC_DEFUN([LINUX_HAVE_SVC_ADDR_IN], [ + AC_MSG_CHECKING([whether svc_addr_in exists]) + AC_CACHE_VAL([ac_cv_linux_have_svc_addr_in], [ + AC_TRY_KBUILD( +[#include ], +[svc_addr_in(NULL);], + ac_cv_linux_have_svc_addr_in=yes, + ac_cv_linux_have_svc_addr_in=no)]) + AC_MSG_RESULT($ac_cv_linux_have_svc_addr_in)]) + +AC_DEFUN([LINUX_FS_STRUCT_FOP_HAS_SPLICE], [ + AC_MSG_CHECKING([for splice_write and splice_read in struct file_operations]) + AC_CACHE_VAL([ac_cv_linux_fs_struct_fop_has_splice], [ + AC_TRY_KBUILD( +[#include ], +[struct file_operations _fop; +_fop.splice_write(NULL, NULL, NULL, 0, 0); +_fop.splice_read(NULL, NULL, NULL, 0, 0);], + ac_cv_linux_fs_struct_fop_has_splice=yes, + ac_cv_linux_fs_struct_fop_has_splice=no)]) + AC_MSG_RESULT($ac_cv_linux_fs_struct_fop_has_splice)]) + +AC_DEFUN([LINUX_KEY_TYPE_H_EXISTS], [ + AC_MSG_CHECKING([whether linux/key-type.h exists]) + AC_CACHE_VAL([ac_cv_linux_key_type_h_exists], [ + AC_TRY_KBUILD( +[#include ], +[return;], + ac_cv_linux_key_type_h_exists=yes, + ac_cv_linux_key_type_h_exists=no)]) + AC_MSG_RESULT($ac_cv_linux_key_type_h_exists)]) + +AC_DEFUN([LINUX_HAVE_CURRENT_KERNEL_TIME], [ + AC_MSG_CHECKING([for current_kernel_time()]) + AC_CACHE_VAL([ac_cv_linux_have_current_kernel_time], [ + AC_TRY_KBUILD( +[#include ], +[struct timespec s = current_kernel_time();], + ac_cv_linux_have_current_kernel_time=yes, + ac_cv_linux_have_current_kernel_time=no)]) + AC_MSG_RESULT($ac_cv_linux_have_current_kernel_time)]) + +AC_DEFUN([LINUX_KMEM_CACHE_INIT], [ + AC_MSG_CHECKING([for new kmem_cache init function parameters]) + AC_CACHE_VAL([ac_cv_linux_kmem_cache_init], [ + AC_TRY_KBUILD( +[#include ], +[extern struct kmem_cache *kmem_cache_create(const char *, size_t, size_t, + unsigned long, + void (*)(struct kmem_cache *, void *)); +return;], + ac_cv_linux_kmem_cache_init=yes, + ac_cv_linux_kmem_cache_init=no)]) + AC_MSG_RESULT($ac_cv_linux_kmem_cache_init)]) + +AC_DEFUN([LINUX_SYSCTL_TABLE_CHECKING], [ + AC_MSG_CHECKING([for sysctl table checking]) + AC_CACHE_VAL([ac_cv_linux_sysctl_table_checking], [ + AC_TRY_KBUILD( +[#include ], +[ sysctl_check_table(NULL);], + ac_cv_linux_sysctl_table_checking=yes, + ac_cv_linux_sysctl_table_checking=no)]) + AC_MSG_RESULT($ac_cv_linux_sysctl_table_checking)]) + diff --git a/src/cf/osconf.m4 b/src/cf/osconf.m4 index a4cc41f0f9..00147706a9 100644 --- a/src/cf/osconf.m4 +++ b/src/cf/osconf.m4 @@ -18,6 +18,8 @@ KERN_OPTMZ=-O DBG=-g OPTMZ=-O LWP_DBG=-g +NO_STRIP_BIN=-ns +NO_STRIP_KRB=-ns LWP_OPTMZ=-O PAM_DBG=-g PAM_OPTMZ= @@ -897,7 +899,7 @@ case $AFS_SYSNAME in SHLIB_CFLAGS="-KPIC" SHLIB_LDFLAGS="-G -Bsymbolic" TXLIBS="-lcurses" - XCFLAGS64='${XCFLAGS} -xarch=v9' + XCFLAGS64='${XCFLAGS} -m64' XCFLAGS="-dy -Bdynamic" XLIBELFA="-lelf" XLIBKVM="-lkvm" @@ -1009,7 +1011,7 @@ case $AFS_SYSNAME in SHLIB_CFLAGS="-KPIC" SHLIB_LDFLAGS="-G -Bsymbolic" TXLIBS="-lcurses" - XCFLAGS64='${XCFLAGS} -xarch=amd64' + XCFLAGS64='${XCFLAGS} -m64' XCFLAGS="-dy -Bdynamic" XLIBELFA="-lelf" XLIBKVM="-lkvm" @@ -1100,6 +1102,8 @@ fi if test "x$enable_debug" = "xno"; then DBG= + NO_STRIP_BIN= + NO_STRIP_KRB=-s fi if test "x$enable_optimize" = "xno"; then @@ -1114,6 +1118,19 @@ if test "x$enable_optimize_lwp" = "xno"; then LWP_OPTMZ= fi +if test "x$enable_strip_binaries" != "xno"; then + if test "x$enable_strip_binaries" = "xmaybe" -a "x$enable_debug" = "xyes"; then + NO_STRIP_BIN=-ns + NO_STRIP_KRB=-ns + else + NO_STRIP_BIN= + NO_STRIP_KRB=-s + fi +else + NO_STRIP_BIN=-ns + NO_STRIP_KRB=-ns +fi + AC_SUBST(CCXPG2) AC_SUBST(CCOBJ) AC_SUBST(AFSD_LIBS) @@ -1134,6 +1151,8 @@ AC_SUBST(MT_CC) AC_SUBST(MT_CFLAGS) AC_SUBST(MT_LIBS) AC_SUBST(MV) +AC_SUBST(NO_STRIP_BIN) +AC_SUBST(NO_STRIP_KRB) AC_SUBST(OPTMZ) AC_SUBST(PAM_CFLAGS) AC_SUBST(PAM_LIBS) diff --git a/src/cmd/cmd.c b/src/cmd/cmd.c index c83aaebd54..b0e504b108 100644 --- a/src/cmd/cmd.c +++ b/src/cmd/cmd.c @@ -30,9 +30,9 @@ struct cmd_token { static int dummy; /* non-null ptr used for flag existence */ static struct cmd_syndesc *allSyntax = 0; static int noOpcodes = 0; -static int (*beforeProc) (struct cmd_syndesc * ts, char *beforeRock) = - 0, (*afterProc) (struct cmd_syndesc * ts, char *afterRock) = 0; -static char *beforeRock, *afterRock; +static int (*beforeProc) (struct cmd_syndesc * ts, void *beforeRock) = NULL; +static int (*afterProc) (struct cmd_syndesc * ts, void *afterRock) = NULL; +static void *beforeRock, *afterRock; static char initcmd_opcode[] = "initcmd"; /*Name of initcmd opcode */ /* take name and string, and return null string if name is empty, otherwise return @@ -168,7 +168,7 @@ PrintParmHelp(register struct cmd_parmdesc *aparm) extern char *AFSVersion; static int -VersionProc(register struct cmd_syndesc *as, char *arock) +VersionProc(register struct cmd_syndesc *as, void *arock) { printf("%s\n", AFSVersion); return 0; @@ -272,7 +272,7 @@ PrintFlagHelp(register struct cmd_syndesc *as) } static int -AproposProc(register struct cmd_syndesc *as, char *arock) +AproposProc(register struct cmd_syndesc *as, void *arock) { register struct cmd_syndesc *ts; char *tsub; @@ -297,7 +297,7 @@ AproposProc(register struct cmd_syndesc *as, char *arock) } static int -HelpProc(register struct cmd_syndesc *as, char *arock) +HelpProc(register struct cmd_syndesc *as, void *arock) { register struct cmd_syndesc *ts; register struct cmd_item *ti; @@ -344,8 +344,8 @@ HelpProc(register struct cmd_syndesc *as, char *arock) } int -cmd_SetBeforeProc(int (*aproc) (struct cmd_syndesc * ts, char *beforeRock), - char *arock) +cmd_SetBeforeProc(int (*aproc) (struct cmd_syndesc * ts, void *beforeRock), + void *arock) { beforeProc = aproc; beforeRock = arock; @@ -353,8 +353,8 @@ cmd_SetBeforeProc(int (*aproc) (struct cmd_syndesc * ts, char *beforeRock), } int -cmd_SetAfterProc(int (*aproc) (struct cmd_syndesc * ts, char *afterRock), - char *arock) +cmd_SetAfterProc(int (*aproc) (struct cmd_syndesc * ts, void *afterRock), + void *arock) { afterProc = aproc; afterRock = arock; @@ -380,8 +380,8 @@ SortSyntax(struct cmd_syndesc *as) struct cmd_syndesc * cmd_CreateSyntax(char *aname, - int (*aproc) (struct cmd_syndesc * ts, char *arock), - char *arock, char *ahelp) + int (*aproc) (struct cmd_syndesc * ts, void *arock), + void *arock, char *ahelp) { register struct cmd_syndesc *td; @@ -481,7 +481,7 @@ cmd_AddParm(register struct cmd_syndesc *as, char *aname, int atype, strcpy(tp->name, aname); tp->type = atype; tp->flags = aflags; - tp->items = (struct cmd_item *)0; + tp->items = NULL; if (ahelp) { tp->help = (char *)malloc(strlen(ahelp) + 1); assert(tp->help); @@ -556,7 +556,7 @@ ResetSyntax(register struct cmd_syndesc *as) default: break; } - tp->items = (struct cmd_item *)0; + tp->items = NULL; } } diff --git a/src/cmd/cmd.p.h b/src/cmd/cmd.p.h index d8500321a3..fc143ff844 100644 --- a/src/cmd/cmd.p.h +++ b/src/cmd/cmd.p.h @@ -51,8 +51,8 @@ struct cmd_syndesc { char *name; /* subcommand name */ char *a0name; /* command name from argv[0] */ char *help; /* help description */ - int (*proc) (struct cmd_syndesc * ts, char *arock); - char *rock; + int (*proc) (struct cmd_syndesc * ts, void *arock); + void *rock; int nParms; /* number of parms */ afs_int32 flags; /* random flags */ struct cmd_parmdesc parms[CMD_MAXPARMS]; /* parms themselves */ @@ -60,14 +60,14 @@ struct cmd_syndesc { extern struct cmd_syndesc *cmd_CreateSyntax(char *namep, int (*aprocp) (struct cmd_syndesc - * ts, char *arock), - char *rockp, char *helpp); + * ts, void *arock), + void *rockp, char *helpp); extern int - cmd_SetBeforeProc(int (*aproc) (struct cmd_syndesc * ts, char *beforeRock), - char *arock); + cmd_SetBeforeProc(int (*aproc) (struct cmd_syndesc * ts, void *beforeRock), + void *arock); extern int - cmd_SetAfterProc(int (*aproc) (struct cmd_syndesc * ts, char *afterRock), - char *arock); + cmd_SetAfterProc(int (*aproc) (struct cmd_syndesc * ts, void *afterRock), + void *arock); extern int cmd_CreateAlias(struct cmd_syndesc *as, char *aname); extern int cmd_Seek(struct cmd_syndesc *as, int apos); extern int cmd_AddParm(struct cmd_syndesc *as, char *aname, int atype, diff --git a/src/cmd/test/ctest.c b/src/cmd/test/ctest.c index 93c86d5672..4d1bcbb838 100644 --- a/src/cmd/test/ctest.c +++ b/src/cmd/test/ctest.c @@ -16,19 +16,15 @@ RCSID #include "cmd.h" #include -static -cproc1(as, arock) - char *arock; - struct cmd_syndesc *as; +static int +cproc1(struct cmd_syndesc *as, void *arock) { printf("in the apple command\n"); return 0; } -static -cproc2(as, arock) - char *arock; - struct cmd_syndesc *as; +static int +cproc2(struct cmd_syndesc *as, void *arock) { register struct cmd_item *ti; printf("in the pear command\n"); @@ -43,9 +39,8 @@ cproc2(as, arock) return 0; } -main(argc, argv) - int argc; - char **argv; +int +main(int argc, char **argv) { register struct cmd_syndesc *ts; diff --git a/src/cmd/test/dtest.c b/src/cmd/test/dtest.c index 96d42eaaba..f9577a292a 100644 --- a/src/cmd/test/dtest.c +++ b/src/cmd/test/dtest.c @@ -16,10 +16,8 @@ RCSID #include "cmd.h" #include -static -cproc(as, arock) - char *arock; - struct cmd_syndesc *as; +static int +cproc(struct cmd_syndesc *as, void *arock) { register struct cmd_item *ti; printf("in the pear command\n"); @@ -32,9 +30,8 @@ cproc(as, arock) return 0; } -main(argc, argv) - int argc; - char **argv; +int +main(int argc, char **argv) { register struct cmd_syndesc *ts; diff --git a/src/cmd/test/itest.c b/src/cmd/test/itest.c index a4e537a3da..619f889caa 100644 --- a/src/cmd/test/itest.c +++ b/src/cmd/test/itest.c @@ -17,19 +17,15 @@ RCSID #include #include -static -cproc1(as, arock) - char *arock; - struct cmd_syndesc *as; +static int +cproc1(struct cmd_syndesc *as, void *arock) { printf("in the apple command\n"); return 0; } -static -cproc2(as, arock) - char *arock; - struct cmd_syndesc *as; +static int +cproc2(struct cmd_syndesc *as, void *arock) { register struct cmd_item *ti; printf("in the pear command\n"); @@ -44,17 +40,14 @@ cproc2(as, arock) return 0; } -static void -cproc3(as, arock) - char *arock; - struct cmd_syndesc *as; +static int +cproc3(struct cmd_syndesc *as, void *arock) { exit(0); } -main(argc, argv) - int argc; - char **argv; +int +main(int argc, char **argv) { register struct cmd_syndesc *ts; char tline[1000]; diff --git a/src/comerr/error_table_nt.c b/src/comerr/error_table_nt.c index 9e6ffaaf64..2d928c6dfc 100755 --- a/src/comerr/error_table_nt.c +++ b/src/comerr/error_table_nt.c @@ -1,1335 +1,1335 @@ - -/* A Bison parser, made from error_table.y with Bison version GNU Bison version 1.24 - */ - -#define YYBISON 1 /* Identify Bison output. */ - -#define ERROR_TABLE 258 -#define ERROR_CODE_ENTRY 259 -#define END 260 -#define INDEX 261 -#define PREFIX 262 -#define ID 263 -#define BASE 264 -#define NL 265 -#define STRING 266 -#define QUOTED_STRING 267 -#define NUMBER 268 - -#line 1 "error_table.y" - -#include -#include -#include "compiler.h" - -RCSID("$Header$"); - -/* - * - * Copyright 1986, 1987 by the MIT Student Information Processing Board - * - * For copyright info, see mit-sipb-cr.h. - */ -#ifndef AFS_NT40_ENV -#include -#endif -#include -#include -#include -#ifdef AFS_NT40_ENV -#include -#include -#else -#include -#endif -#include -#include "error_table.h" -#include "mit-sipb-cr.h" - -/* - * If __STDC__ is defined, function prototypes in the SunOS 5.5.1 lex - * and yacc templates are visible. We turn this on explicitly on - * NT because the prototypes help supress certain warning from the - * Microsoft C compiler. - */ - -#ifdef AFS_NT40_ENV -#include -# ifndef __STDC__ -# define __STDC__ 1 -# endif -#endif - -#include -#include -#include - -#include "internal.h" - -int char_to_num(char c); -char *gensym(const char *x); -char *current_token = (char *)NULL; -extern char *table_name; - -char *ds(const char *string); -char *quote(const char *string); -void set_table_1num(char *string); -int char_to_1num(char c); -void add_ec(const char *name, const char *description); -void add_ec_val(const char *name, const char *val, const char *description); -void put_ecs(void); -void set_table_num(char *string); -void set_table_fun(char *astring); -void set_id(const char *, const char *); -void set_base(const char *); -void set_prefix(const char *); -void add_index(const char *); - - -#line 70 "error_table.y" -typedef union { - char *dynstr; -} YYSTYPE; -#line 77 "error_table.y" - - -#ifndef YYLTYPE -typedef - struct yyltype - { - int timestamp; - int first_line; - int first_column; - int last_line; - int last_column; - char *text; - } - yyltype; - -#define YYLTYPE yyltype -#endif - -#include - -#ifndef __cplusplus -#ifndef __STDC__ -#define const -#endif -#endif - - - -#define YYFINAL 37 -#define YYFLAG -32768 -#define YYNTBASE 16 - -#define YYTRANSLATE(x) ((unsigned)(x) <= 268 ? yytranslate[x] : 26) - -static const char yytranslate[] = { 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 14, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13 -}; - -#if YYDEBUG != 0 -static const short yyprhs[] = { 0, - 0, 1, 4, 12, 13, 16, 19, 21, 23, 25, - 29, 32, 37, 44, 47, 50, 53, 54, 56 -}; - -static const short yyrhs[] = { -1, - 16, 17, 0, 18, 3, 19, 18, 22, 5, 18, - 0, 0, 18, 10, 0, 20, 21, 0, 21, 0, - 13, 0, 11, 0, 22, 23, 10, 0, 23, 10, - 0, 4, 24, 14, 25, 0, 4, 24, 15, 11, - 14, 25, 0, 6, 13, 0, 7, 11, 0, 9, - 13, 0, 0, 11, 0, 12, 0 -}; - -#endif - -#if YYDEBUG != 0 -static const short yyrline[] = { 0, - 82, 82, 84, 92, 92, 94, 97, 104, 111, 117, - 118, 121, 125, 131, 135, 146, 150, 153, 158 -}; - -static const char * const yytname[] = { "$","error","$undefined.","ERROR_TABLE", -"ERROR_CODE_ENTRY","END","INDEX","PREFIX","ID","BASE","NL","STRING","QUOTED_STRING", -"NUMBER","','","'='","error_tables","error_table","maybe_blank_lines","header", -"table_fun","table_id","error_codes","ec_entry","ec_name","description","" -}; -#endif - -static const short yyr1[] = { 0, - 16, 16, 17, 18, 18, 19, 19, 20, 21, 22, - 22, 23, 23, 23, 23, 23, 23, 24, 25 -}; - -static const short yyr2[] = { 0, - 0, 2, 7, 0, 2, 2, 1, 1, 1, 3, - 2, 4, 6, 2, 2, 2, 0, 1, 1 -}; - -static const short yydefact[] = { 1, - 4, 2, 0, 0, 5, 9, 8, 4, 0, 7, - 0, 6, 0, 0, 0, 0, 17, 0, 18, 0, - 14, 15, 16, 4, 0, 11, 0, 0, 3, 10, - 19, 12, 0, 0, 13, 0, 0 -}; - -static const short yydefgoto[] = { 1, - 2, 3, 8, 9, 10, 17, 18, 20, 32 -}; - -static const short yypact[] = {-32768, - 5,-32768, -2, 7,-32768,-32768,-32768,-32768, 10,-32768, - 0,-32768, 11, 6, 12, 13, 8, 1,-32768, -12, --32768,-32768,-32768,-32768, 14,-32768, 15, 17, 19,-32768, --32768,-32768, 16, 15,-32768, 25,-32768 -}; - -static const short yypgoto[] = {-32768, --32768, -8,-32768,-32768, 22,-32768, 18,-32768, -1 -}; - - -#define YYLAST 35 - - -static const short yytable[] = { 11, - 4, 27, 28, 13, 36, 14, 15, 5, 16, 5, - 26, 13, 24, 14, 15, 29, 16, 6, 21, 7, - 6, 19, 22, 30, 37, 23, 31, 33, 5, 34, - 12, 0, 35, 0, 25 -}; - -static const short yycheck[] = { 8, - 3, 14, 15, 4, 0, 6, 7, 10, 9, 10, - 10, 4, 5, 6, 7, 24, 9, 11, 13, 13, - 11, 11, 11, 10, 0, 13, 12, 11, 10, 14, - 9, -1, 34, -1, 17 -}; -/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "bison.simple" - -/* Skeleton output parser for bison, - Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -#ifndef alloca -#ifdef __GNUC__ -#define alloca __builtin_alloca -#else /* not GNU C. */ -#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) -#include -#else /* not sparc */ -#if defined (MSDOS) && !defined (__TURBOC__) -#include -#else /* not MSDOS, or __TURBOC__ */ -#if defined(_AIX) -#include - #pragma alloca -#else /* not MSDOS, __TURBOC__, or _AIX */ -#ifdef __hpux -#ifdef __cplusplus -extern "C" { -void *alloca (unsigned int); -}; -#else /* not __cplusplus */ -void *alloca (); -#endif /* not __cplusplus */ -#endif /* __hpux */ -#endif /* not _AIX */ -#endif /* not MSDOS, or __TURBOC__ */ -#endif /* not sparc. */ -#endif /* not GNU C. */ -#endif /* alloca not defined. */ - -/* This is the parser code that is written into each bison parser - when the %semantic_parser declaration is not specified in the grammar. - It was written by Richard Stallman by simplifying the hairy parser - used when %semantic_parser is specified. */ - -/* Note: there must be only one dollar sign in this file. - It is replaced by the list of actions, each action - as one case of the switch. */ - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY -2 -#define YYEOF 0 -#define YYACCEPT return(0) -#define YYABORT return(1) -#define YYERROR goto yyerrlab1 -/* Like YYERROR except do call yyerror. - This remains here temporarily to ease the - transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ -#define YYFAIL goto yyerrlab -#define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(token, value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { yychar = (token), yylval = (value); \ - yychar1 = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { yyerror ("syntax error: cannot back up"); YYERROR; } \ -while (0) - -#define YYTERROR 1 -#define YYERRCODE 256 - -#ifndef YYPURE -#define YYLEX yylex() -#endif - -#ifdef YYPURE -#ifdef YYLSP_NEEDED -#ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) -#else -#define YYLEX yylex(&yylval, &yylloc) -#endif -#else /* not YYLSP_NEEDED */ -#ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, YYLEX_PARAM) -#else -#define YYLEX yylex(&yylval) -#endif -#endif /* not YYLSP_NEEDED */ -#endif - -/* If nonreentrant, generate the variables here */ - -#ifndef YYPURE - -int yychar; /* the lookahead symbol */ -YYSTYPE yylval; /* the semantic value of the */ - /* lookahead symbol */ - -#ifdef YYLSP_NEEDED -YYLTYPE yylloc; /* location data for the lookahead */ - /* symbol */ -#endif - -int yynerrs; /* number of parse errors so far */ -#endif /* not YYPURE */ - -#if YYDEBUG != 0 -int yydebug; /* nonzero means print parse trace */ -/* Since this is uninitialized, it does not stop multiple parsers - from coexisting. */ -#endif - -/* YYINITDEPTH indicates the initial size of the parser's stacks */ - -#ifndef YYINITDEPTH -#define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH is the maximum size the stacks can grow to - (effective only if the built-in stack extension method is used). */ - -#if YYMAXDEPTH == 0 -#undef YYMAXDEPTH -#endif - -#ifndef YYMAXDEPTH -#define YYMAXDEPTH 10000 -#endif - -/* Prevent warning if -Wstrict-prototypes. */ -#ifdef __GNUC__ -int yyparse (void); -#endif - -#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ -#define __yy_memcpy(FROM,TO,COUNT) __builtin_memcpy(TO,FROM,COUNT) -#else /* not GNU C or C++ */ -#ifndef __cplusplus - -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ -static void -__yy_memcpy (from, to, count) - char *from; - char *to; - int count; -{ - register char *f = from; - register char *t = to; - register int i = count; - - while (i-- > 0) - *t++ = *f++; -} - -#else /* __cplusplus */ - -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ -static void -__yy_memcpy (char *from, char *to, int count) -{ - register char *f = from; - register char *t = to; - register int i = count; - - while (i-- > 0) - *t++ = *f++; -} - -#endif -#endif - -#line 192 "bison.simple" - -/* The user can define YYPARSE_PARAM as the name of an argument to be passed - into yyparse. The argument should have type void *. - It should actually point to an object. - Grammar actions can access the variable by casting it - to the proper pointer type. */ - -#ifdef YYPARSE_PARAM -#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; -#else -#define YYPARSE_PARAM -#define YYPARSE_PARAM_DECL -#endif - -int -yyparse(YYPARSE_PARAM) - YYPARSE_PARAM_DECL -{ - register int yystate; - register int yyn; - register short *yyssp; - register YYSTYPE *yyvsp; - int yyerrstatus; /* number of tokens to shift before error messages enabled */ - int yychar1 = 0; /* lookahead token as an internal (translated) token number */ - - short yyssa[YYINITDEPTH]; /* the state stack */ - YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ - - short *yyss = yyssa; /* refer to the stacks thru separate pointers */ - YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ - -#ifdef YYLSP_NEEDED - YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; - -#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) -#else -#define YYPOPSTACK (yyvsp--, yyssp--) -#endif - - int yystacksize = YYINITDEPTH; - -#ifdef YYPURE - int yychar; - YYSTYPE yylval; - int yynerrs; -#ifdef YYLSP_NEEDED - YYLTYPE yylloc; -#endif -#endif - - YYSTYPE yyval; /* the variable used to return */ - /* semantic values from the action */ - /* routines */ - - int yylen; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Starting parse\n"); -#endif - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss - 1; - yyvsp = yyvs; -#ifdef YYLSP_NEEDED - yylsp = yyls; -#endif - -/* Push a new state, which is found in yystate . */ -/* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. */ -yynewstate: - - *++yyssp = yystate; - - if (yyssp >= yyss + yystacksize - 1) - { - /* Give user a chance to reallocate the stack */ - /* Use copies of these so that the &'s don't force the real ones into memory. */ - YYSTYPE *yyvs1 = yyvs; - short *yyss1 = yyss; -#ifdef YYLSP_NEEDED - YYLTYPE *yyls1 = yyls; -#endif - - /* Get the current used size of the three stacks, in elements. */ - int size = yyssp - yyss + 1; - -#ifdef yyoverflow - /* Each stack pointer address is followed by the size of - the data in use in that stack, in bytes. */ -#ifdef YYLSP_NEEDED - /* This used to be a conditional around just the two extra args, - but that might be undefined if yyoverflow is a macro. */ - yyoverflow("parser stack overflow", - &yyss1, size * sizeof (*yyssp), - &yyvs1, size * sizeof (*yyvsp), - &yyls1, size * sizeof (*yylsp), - &yystacksize); -#else - yyoverflow("parser stack overflow", - &yyss1, size * sizeof (*yyssp), - &yyvs1, size * sizeof (*yyvsp), - &yystacksize); -#endif - - yyss = yyss1; yyvs = yyvs1; -#ifdef YYLSP_NEEDED - yyls = yyls1; -#endif -#else /* no yyoverflow */ - /* Extend the stack our own way. */ - if (yystacksize >= YYMAXDEPTH) - { - yyerror("parser stack overflow"); - return 2; - } - yystacksize *= 2; - if (yystacksize > YYMAXDEPTH) - yystacksize = YYMAXDEPTH; - yyss = (short *) alloca (yystacksize * sizeof (*yyssp)); - __yy_memcpy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp)); - yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp)); - __yy_memcpy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp)); -#ifdef YYLSP_NEEDED - yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp)); - __yy_memcpy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp)); -#endif -#endif /* no yyoverflow */ - - yyssp = yyss + size - 1; - yyvsp = yyvs + size - 1; -#ifdef YYLSP_NEEDED - yylsp = yyls + size - 1; -#endif - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Stack size increased to %d\n", yystacksize); -#endif - - if (yyssp >= yyss + yystacksize - 1) - YYABORT; - } - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Entering state %d\n", yystate); -#endif - - goto yybackup; - yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a lookahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to lookahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* yychar is either YYEMPTY or YYEOF - or a valid token in external form. */ - - if (yychar == YYEMPTY) - { -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Reading a token: "); -#endif - yychar = YYLEX; - } - - /* Convert token to internal form (in yychar1) for indexing tables with */ - - if (yychar <= 0) /* This means end of input. */ - { - yychar1 = 0; - yychar = YYEOF; /* Don't call YYLEX any more */ - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Now at end of input.\n"); -#endif - } - else - { - yychar1 = YYTRANSLATE(yychar); - -#if YYDEBUG != 0 - if (yydebug) - { - fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); - /* Give the individual parser a way to print the precise meaning - of a token, for further debugging info. */ -#ifdef YYPRINT - YYPRINT (stderr, yychar, yylval); -#endif - fprintf (stderr, ")\n"); - } -#endif - } - - yyn += yychar1; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) - goto yydefault; - - yyn = yytable[yyn]; - - /* yyn is what to do for this token type in this state. - Negative => reduce, -yyn is rule number. - Positive => shift, yyn is new state. - New state is final state => don't bother to shift, - just return success. - 0, or most negative number => error. */ - - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrlab; - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the lookahead token. */ - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); -#endif - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - /* count tokens shifted since error; after three, turn off error status. */ - if (yyerrstatus) yyerrstatus--; - - yystate = yyn; - goto yynewstate; - -/* Do the default action for the current state. */ -yydefault: - - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - -/* Do a reduction. yyn is the number of a rule to reduce with. */ -yyreduce: - yylen = yyr2[yyn]; - if (yylen > 0) - yyval = yyvsp[1-yylen]; /* implement default value of the action */ - -#if YYDEBUG != 0 - if (yydebug) - { - int i; - - fprintf (stderr, "Reducing via rule %d (line %d), ", - yyn, yyrline[yyn]); - - /* Print the symbols being reduced, and their result. */ - for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) - fprintf (stderr, "%s ", yytname[yyrhs[i]]); - fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); - } -#endif - - - switch (yyn) { - -case 3: -#line 87 "error_table.y" -{ table_name = ds(yyvsp[-4].dynstr); - current_token = table_name; - put_ecs(); ; - break;} -case 6: -#line 95 "error_table.y" -{ current_token = yyvsp[-1].dynstr; - yyval.dynstr = yyvsp[0].dynstr; ; - break;} -case 7: -#line 98 "error_table.y" -{ current_token = yyvsp[0].dynstr; - set_table_fun(ds("1")); - yyval.dynstr = yyvsp[0].dynstr; - ; - break;} -case 8: -#line 105 "error_table.y" -{ current_token = yyvsp[0].dynstr; - set_table_fun(yyvsp[0].dynstr); - yyval.dynstr = yyvsp[0].dynstr; ; - break;} -case 9: -#line 112 "error_table.y" -{ current_token = yyvsp[0].dynstr; - set_table_num(yyvsp[0].dynstr); - yyval.dynstr = yyvsp[0].dynstr; ; - break;} -case 12: -#line 122 "error_table.y" -{ add_ec(yyvsp[-2].dynstr, yyvsp[0].dynstr); - free(yyvsp[-2].dynstr); - free(yyvsp[0].dynstr); ; - break;} -case 13: -#line 126 "error_table.y" -{ add_ec_val(yyvsp[-4].dynstr, yyvsp[-2].dynstr, yyvsp[0].dynstr); - free(yyvsp[-4].dynstr); - free(yyvsp[-2].dynstr); - free(yyvsp[0].dynstr); - ; - break;} -case 14: -#line 132 "error_table.y" -{ add_index(yyvsp[0].dynstr); - free(yyvsp[0].dynstr); - ; - break;} -case 15: -#line 136 "error_table.y" -{ set_prefix(yyvsp[0].dynstr); - free(yyvsp[0].dynstr); - ; - break;} -case 16: -#line 147 "error_table.y" -{ set_base(yyvsp[0].dynstr); - free(yyvsp[0].dynstr); - ; - break;} -case 18: -#line 154 "error_table.y" -{ yyval.dynstr = ds(yyvsp[0].dynstr); - current_token = yyval.dynstr; ; - break;} -case 19: -#line 159 "error_table.y" -{ yyval.dynstr = ds(yyvsp[0].dynstr); - current_token = yyval.dynstr; ; - break;} -} - /* the action file gets copied in in place of this dollarsign */ -#line 487 "bison.simple" - - yyvsp -= yylen; - yyssp -= yylen; -#ifdef YYLSP_NEEDED - yylsp -= yylen; -#endif - -#if YYDEBUG != 0 - if (yydebug) - { - short *ssp1 = yyss - 1; - fprintf (stderr, "state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif - - *++yyvsp = yyval; - -#ifdef YYLSP_NEEDED - yylsp++; - if (yylen == 0) - { - yylsp->first_line = yylloc.first_line; - yylsp->first_column = yylloc.first_column; - yylsp->last_line = (yylsp-1)->last_line; - yylsp->last_column = (yylsp-1)->last_column; - yylsp->text = 0; - } - else - { - yylsp->last_line = (yylsp+yylen-1)->last_line; - yylsp->last_column = (yylsp+yylen-1)->last_column; - } -#endif - - /* Now "shift" the result of the reduction. - Determine what state that goes to, - based on the state we popped back to - and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTBASE] + *yyssp; - if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTBASE]; - - goto yynewstate; - -yyerrlab: /* here on detecting error */ - - if (! yyerrstatus) - /* If not already recovering from an error, report this error. */ - { - ++yynerrs; - -#ifdef YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (yyn > YYFLAG && yyn < YYLAST) - { - int size = 0; - char *msg; - int x, count; - - count = 0; - /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) - size += strlen(yytname[x]) + 15, count++; - msg = (char *) malloc(size + 15); - if (msg != 0) - { - strcpy(msg, "parse error"); - - if (count < 5) - { - count = 0; - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) - { - strcat(msg, count == 0 ? ", expecting `" : " or `"); - strcat(msg, yytname[x]); - strcat(msg, "'"); - count++; - } - } - yyerror(msg); - free(msg); - } - else - yyerror ("parse error; also virtual memory exceeded"); - } - else -#endif /* YYERROR_VERBOSE */ - yyerror("parse error"); - } - - goto yyerrlab1; -yyerrlab1: /* here on error raised explicitly by an action */ - - if (yyerrstatus == 3) - { - /* if just tried and failed to reuse lookahead token after an error, discard it. */ - - /* return failure if at end of input */ - if (yychar == YYEOF) - YYABORT; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); -#endif - - yychar = YYEMPTY; - } - - /* Else will try to reuse lookahead token - after shifting the error token. */ - - yyerrstatus = 3; /* Each real token shifted decrements this */ - - goto yyerrhandle; - -yyerrdefault: /* current state does not do anything special for the error token. */ - -#if 0 - /* This is wrong; only states that explicitly want error tokens - should shift them. */ - yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ - if (yyn) goto yydefault; -#endif - -yyerrpop: /* pop the current state because it cannot handle the error token */ - - if (yyssp == yyss) YYABORT; - yyvsp--; - yystate = *--yyssp; -#ifdef YYLSP_NEEDED - yylsp--; -#endif - -#if YYDEBUG != 0 - if (yydebug) - { - short *ssp1 = yyss - 1; - fprintf (stderr, "Error: state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif - -yyerrhandle: - - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yyerrdefault; - - yyn += YYTERROR; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) - goto yyerrdefault; - - yyn = yytable[yyn]; - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrpop; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrpop; - - if (yyn == YYFINAL) - YYACCEPT; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting error token, "); -#endif - - *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - yystate = yyn; - goto yynewstate; -} -#line 163 "error_table.y" - - -/* - * Copyright 2000, International Business Machines Corporation and others. - * All Rights Reserved. - * - * This software has been released under the terms of the IBM Public - * License. For details, see the LICENSE file in the top-level source - * directory or online at http://www.openafs.org/dl/license10.html - */ - -extern FILE *hfile, *cfile, *msfile; -extern int use_msf; -char st_prefix[] = ""; -char *prefix = st_prefix; - -static afs_int32 gensym_n = 0; - -char *gensym(const char *x) -{ - char *symbol; - if (!gensym_n) { - struct timeval tv; - gettimeofday(&tv, (void *)0); - gensym_n = (tv.tv_sec%10000)*100 + tv.tv_usec/10000; - } - symbol = (char *)malloc(32 * sizeof(char)); - gensym_n++; - sprintf(symbol, "et%ld", (long int) gensym_n); - return(symbol); -} - -char * -ds(const char *string) -{ - char *rv; - rv = (char *)malloc(strlen(prefix)+strlen(string)+1); - strcpy(rv, prefix); - strcat(rv, string); - return(rv); -} - -char * -quote(const char *string) -{ - char *rv; - rv = (char *)malloc(strlen(string)+3); - strcpy(rv, "\""); - strcat(rv, string); - strcat(rv, "\""); - return(rv); -} - -afs_int32 table_number = 0; -int current = 0; -char **error_codes = (char **)NULL; - -void add_ec(const char *name, const char *description) -{ - if (msfile) { - if (current > 0) -#ifndef sun - fprintf(msfile, "%d\t%s\n", current, description); -#else - fprintf(msfile, "%d %s\n", current, description); -#endif /* !sun */ - } else { - fprintf(cfile, "\t\"%s\",\n", description); - } - if (error_codes == (char **)NULL) { - error_codes = (char **)malloc(sizeof(char *)); - *error_codes = (char *)NULL; - } - error_codes = (char **)realloc((char *)error_codes, - (current + 2)*sizeof(char *)); - error_codes[current++] = ds(name); - error_codes[current] = (char *)NULL; -} - -void add_ec_val(const char *name, const char *val, const char *description) -{ - const int ncurrent = atoi(val); - if (ncurrent < current) { - fprintf(stderr,"Error code %s (%d) out of order", name, - current); - return; - } - - while (ncurrent > current) { - if (!msfile) - fputs("\t(char *)0,\n", cfile); - current++; - } - if (msfile) { - if (current > 0) -#ifndef sun - fprintf(msfile, "%d\t%s\n", current, description); -#else - fprintf(msfile, "%d %s\n", current, description); -#endif /* ! sun */ - } else { - fprintf(cfile, "\t\"%s\",\n", description); - } - if (error_codes == (char **)NULL) { - error_codes = (char **)malloc(sizeof(char *)); - *error_codes = (char *)NULL; - } - error_codes = (char **)realloc((char *)error_codes, - (current + 2)*sizeof(char *)); - error_codes[current++] = ds(name); - error_codes[current] = (char *)NULL; -} - -void add_index(const char *val) -{ - const int ncurrent = atoi(val); - if (ncurrent < current) { - fprintf(stderr,"Index (%d) attempt to go backwards", - current); - return; - } - - if (error_codes == (char **)NULL) { - error_codes = (char **)malloc((ncurrent + 1) * sizeof(char *)); - } else { - error_codes = (char **)realloc((char *)error_codes, - (ncurrent + 1)*sizeof(char *)); - } - while (ncurrent > current) { - if (!msfile) - fputs("\t(char *)0,\n", cfile); - error_codes[current++] = (char *)NULL; - } -} - -/* -void set_id(const char *id, const char *text) -{ -} -*/ - -void set_prefix(const char *val) -{ - char *new; - - if (*val) { - new = malloc(strlen(val)+2); - strcpy(new, val); - strcat(new, "_"); - } else { - new = malloc(1); - *new = 0; - } - if (prefix != st_prefix) { - free(prefix); - } - prefix = new; -} - -void set_base(const char *base) -{ - table_number = atoi(base); -} - -void put_ecs(void) -{ - int i; - for (i = 0; i < current; i++) { - if (error_codes[i] != (char *)NULL) - fprintf(hfile, "#define %-40s (%ldL)\n", - error_codes[i], (long int) table_number + i); - } - put_ecs_postlog(); -} - -/* - * char_to_num -- maps letters and numbers into a small numbering space - * uppercase -> 1-26 - * lowercase -> 27-52 - * digits -> 53-62 - * underscore-> 63 - */ - -static const char char_set[] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"; - -int char_to_num(char c) -{ - const char *where; - int diff; - - where = strchr (char_set, c); - if (where) { - diff = where - char_set + 1; - assert (diff < (1 << ERRCODE_RANGE)); - return diff; - } - else if (isprint (c)) - fprintf (stderr, - "Illegal character `%c' in error table name\n", - c); - else - fprintf (stderr, - "Illegal character %03o in error table name\n", - c); - exit (1); -} - -void set_table_num(char *string) -{ - if (msfile) { - set_table_1num(string); - return; - } - if (strlen(string) > 4) { - fprintf(stderr, "Table name %s too long, truncated ", - string); - string[4] = '\0'; - fprintf(stderr, "to %s\n", string); - } - if (char_to_num (string[0]) > char_to_num ('z')) { - fprintf (stderr, "%s%s%s%s", - "First character of error table name must be ", - "a letter; name ``", - string, "'' rejected\n"); - exit (1); - } - while (*string != '\0') { - table_number = (table_number << BITS_PER_CHAR) - + char_to_num(*string); - string++; - } - table_number = table_number << ERRCODE_RANGE; - current = 0; - if (error_codes) - error_codes[current] = (char *)NULL; - if (!msfile) { - fprintf(cfile, - "static const char * const text%s[] = {\n", - cot_suffix(count_of_tables)); /* } */ - } -} - -void set_table_fun(char *astring) -{ - register char *tp; - unsigned int tc; - - for(tp=astring; (tc = *tp) != 0; tp++) { - if (!isdigit(tc)) { - fprintf(stderr, "Table function '%s' must be a decimal integer.\n", - astring); - exit(1); - } - } - if (msfile) - table_number += (atoi(astring)) << 28; -} - -/* for compatibility with old comerr's, we truncate package name to 4 - * characters, but only store first 3 in the error code. Note that this - * function, as a side effect, truncates the table name down to 4 chars. - */ -void set_table_1num(char *string) -{ - afs_int32 temp; - int ctr; - - if ((temp = strlen(string)) > 4) { - fprintf(stderr, "Table name %s too long, truncated ", - string); - string[4] = '\0'; - fprintf(stderr, "to %s\n", string); - } - if (temp == 4) { - fprintf(stderr, "Table name %s too long, only 3 characters fit in error code.\n", - string); - } - if (char_to_1num (string[0]) > char_to_1num ('z')) { - fprintf (stderr, "%s%s%s%s", - "First character of error table name must be ", - "a letter; name ``", - string, "'' rejected\n"); - exit (1); - } - temp = 0; - for(ctr=0; ctr < 3; ctr++) { /* copy at most 3 chars to integer */ - if (*string == '\0') break; /* and watch for early end */ - temp = (temp * 050) /* "radix fifty" is base 050 = 40 */ - + char_to_1num(*string); - string++; - } - table_number += temp << 12; -} - -/* - * char_to_num -- maps letters and numbers into very small space - * 0-9 -> 0-9 - * mixed case -> 10-35 - * _ -> 36 - * others are reserved - */ - -static const char char_1set[] = - "abcdefghijklmnopqrstuvwxyz_0123456789"; - -int char_to_1num(char c) -{ - const char *where; - int diff; - - if (isupper(c)) c = tolower(c); - - where = strchr (char_1set, c); - if (where) { - /* start at 1 so we can decode */ - diff = where - char_1set; - assert (diff < 050); /* it is radix 50, after all */ - return diff; - } - else if (isprint (c)) - fprintf (stderr, - "Illegal character `%c' in error table name\n", - c); - else - fprintf (stderr, - "Illegal character %03o in error table name\n", - c); - exit (1); -} - -#ifdef AFS_NT40_ENV -#include "et_lex.lex_nt.c" -#else -#include "et_lex.lex.c" -#endif + +/* A Bison parser, made from error_table.y with Bison version GNU Bison version 1.24 + */ + +#define YYBISON 1 /* Identify Bison output. */ + +#define ERROR_TABLE 258 +#define ERROR_CODE_ENTRY 259 +#define END 260 +#define INDEX 261 +#define PREFIX 262 +#define ID 263 +#define BASE 264 +#define NL 265 +#define STRING 266 +#define QUOTED_STRING 267 +#define NUMBER 268 + +#line 1 "error_table.y" + +#include +#include +#include "compiler.h" + +RCSID("$Header$"); + +/* + * + * Copyright 1986, 1987 by the MIT Student Information Processing Board + * + * For copyright info, see mit-sipb-cr.h. + */ +#ifndef AFS_NT40_ENV +#include +#endif +#include +#include +#include +#ifdef AFS_NT40_ENV +#include +#include +#else +#include +#endif +#include +#include "error_table.h" +#include "mit-sipb-cr.h" + +/* + * If __STDC__ is defined, function prototypes in the SunOS 5.5.1 lex + * and yacc templates are visible. We turn this on explicitly on + * NT because the prototypes help supress certain warning from the + * Microsoft C compiler. + */ + +#ifdef AFS_NT40_ENV +#include +# ifndef __STDC__ +# define __STDC__ 1 +# endif +#endif + +#include +#include +#include + +#include "internal.h" + +int char_to_num(char c); +char *gensym(const char *x); +char *current_token = (char *)NULL; +extern char *table_name; + +char *ds(const char *string); +char *quote(const char *string); +void set_table_1num(char *string); +int char_to_1num(char c); +void add_ec(const char *name, const char *description); +void add_ec_val(const char *name, const char *val, const char *description); +void put_ecs(void); +void set_table_num(char *string); +void set_table_fun(char *astring); +void set_id(const char *, const char *); +void set_base(const char *); +void set_prefix(const char *); +void add_index(const char *); + + +#line 70 "error_table.y" +typedef union { + char *dynstr; +} YYSTYPE; +#line 77 "error_table.y" + + +#ifndef YYLTYPE +typedef + struct yyltype + { + int timestamp; + int first_line; + int first_column; + int last_line; + int last_column; + char *text; + } + yyltype; + +#define YYLTYPE yyltype +#endif + +#include + +#ifndef __cplusplus +#ifndef __STDC__ +#define const +#endif +#endif + + + +#define YYFINAL 37 +#define YYFLAG -32768 +#define YYNTBASE 16 + +#define YYTRANSLATE(x) ((unsigned)(x) <= 268 ? yytranslate[x] : 26) + +static const char yytranslate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 14, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13 +}; + +#if YYDEBUG != 0 +static const short yyprhs[] = { 0, + 0, 1, 4, 12, 13, 16, 19, 21, 23, 25, + 29, 32, 37, 44, 47, 50, 53, 54, 56 +}; + +static const short yyrhs[] = { -1, + 16, 17, 0, 18, 3, 19, 18, 22, 5, 18, + 0, 0, 18, 10, 0, 20, 21, 0, 21, 0, + 13, 0, 11, 0, 22, 23, 10, 0, 23, 10, + 0, 4, 24, 14, 25, 0, 4, 24, 15, 11, + 14, 25, 0, 6, 13, 0, 7, 11, 0, 9, + 13, 0, 0, 11, 0, 12, 0 +}; + +#endif + +#if YYDEBUG != 0 +static const short yyrline[] = { 0, + 82, 82, 84, 92, 92, 94, 97, 104, 111, 117, + 118, 121, 125, 131, 135, 146, 150, 153, 158 +}; + +static const char * const yytname[] = { "$","error","$undefined.","ERROR_TABLE", +"ERROR_CODE_ENTRY","END","INDEX","PREFIX","ID","BASE","NL","STRING","QUOTED_STRING", +"NUMBER","','","'='","error_tables","error_table","maybe_blank_lines","header", +"table_fun","table_id","error_codes","ec_entry","ec_name","description","" +}; +#endif + +static const short yyr1[] = { 0, + 16, 16, 17, 18, 18, 19, 19, 20, 21, 22, + 22, 23, 23, 23, 23, 23, 23, 24, 25 +}; + +static const short yyr2[] = { 0, + 0, 2, 7, 0, 2, 2, 1, 1, 1, 3, + 2, 4, 6, 2, 2, 2, 0, 1, 1 +}; + +static const short yydefact[] = { 1, + 4, 2, 0, 0, 5, 9, 8, 4, 0, 7, + 0, 6, 0, 0, 0, 0, 17, 0, 18, 0, + 14, 15, 16, 4, 0, 11, 0, 0, 3, 10, + 19, 12, 0, 0, 13, 0, 0 +}; + +static const short yydefgoto[] = { 1, + 2, 3, 8, 9, 10, 17, 18, 20, 32 +}; + +static const short yypact[] = {-32768, + 5,-32768, -2, 7,-32768,-32768,-32768,-32768, 10,-32768, + 0,-32768, 11, 6, 12, 13, 8, 1,-32768, -12, +-32768,-32768,-32768,-32768, 14,-32768, 15, 17, 19,-32768, +-32768,-32768, 16, 15,-32768, 25,-32768 +}; + +static const short yypgoto[] = {-32768, +-32768, -8,-32768,-32768, 22,-32768, 18,-32768, -1 +}; + + +#define YYLAST 35 + + +static const short yytable[] = { 11, + 4, 27, 28, 13, 36, 14, 15, 5, 16, 5, + 26, 13, 24, 14, 15, 29, 16, 6, 21, 7, + 6, 19, 22, 30, 37, 23, 31, 33, 5, 34, + 12, 0, 35, 0, 25 +}; + +static const short yycheck[] = { 8, + 3, 14, 15, 4, 0, 6, 7, 10, 9, 10, + 10, 4, 5, 6, 7, 24, 9, 11, 13, 13, + 11, 11, 11, 10, 0, 13, 12, 11, 10, 14, + 9, -1, 34, -1, 17 +}; +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "bison.simple" + +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +#ifndef alloca +#ifdef __GNUC__ +#define alloca __builtin_alloca +#else /* not GNU C. */ +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) +#include +#else /* not sparc */ +#if defined (MSDOS) && !defined (__TURBOC__) +#include +#else /* not MSDOS, or __TURBOC__ */ +#if defined(_AIX) +#include + #pragma alloca +#else /* not MSDOS, __TURBOC__, or _AIX */ +#ifdef __hpux +#ifdef __cplusplus +extern "C" { +void *alloca (unsigned int); +}; +#else /* not __cplusplus */ +void *alloca (); +#endif /* not __cplusplus */ +#endif /* __hpux */ +#endif /* not _AIX */ +#endif /* not MSDOS, or __TURBOC__ */ +#endif /* not sparc. */ +#endif /* not GNU C. */ +#endif /* alloca not defined. */ + +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +/* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY -2 +#define YYEOF 0 +#define YYACCEPT return(0) +#define YYABORT return(1) +#define YYERROR goto yyerrlab1 +/* Like YYERROR except do call yyerror. + This remains here temporarily to ease the + transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define YYFAIL goto yyerrlab +#define YYRECOVERING() (!!yyerrstatus) +#define YYBACKUP(token, value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { yyerror ("syntax error: cannot back up"); YYERROR; } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +#ifndef YYPURE +#define YYLEX yylex() +#endif + +#ifdef YYPURE +#ifdef YYLSP_NEEDED +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval, &yylloc) +#endif +#else /* not YYLSP_NEEDED */ +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval) +#endif +#endif /* not YYLSP_NEEDED */ +#endif + +/* If nonreentrant, generate the variables here */ + +#ifndef YYPURE + +int yychar; /* the lookahead symbol */ +YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ + +#ifdef YYLSP_NEEDED +YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ +#endif + +int yynerrs; /* number of parse errors so far */ +#endif /* not YYPURE */ + +#if YYDEBUG != 0 +int yydebug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ +#endif + +/* YYINITDEPTH indicates the initial size of the parser's stacks */ + +#ifndef YYINITDEPTH +#define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ + +#if YYMAXDEPTH == 0 +#undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +#define YYMAXDEPTH 10000 +#endif + +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ +int yyparse (void); +#endif + +#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +#define __yy_memcpy(FROM,TO,COUNT) __builtin_memcpy(TO,FROM,COUNT) +#else /* not GNU C or C++ */ +#ifndef __cplusplus + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (from, to, count) + char *from; + char *to; + int count; +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#else /* __cplusplus */ + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (char *from, char *to, int count) +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#endif +#endif + +#line 192 "bison.simple" + +/* The user can define YYPARSE_PARAM as the name of an argument to be passed + into yyparse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ + +#ifdef YYPARSE_PARAM +#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; +#else +#define YYPARSE_PARAM +#define YYPARSE_PARAM_DECL +#endif + +int +yyparse(YYPARSE_PARAM) + YYPARSE_PARAM_DECL +{ + register int yystate; + register int yyn; + register short *yyssp; + register YYSTYPE *yyvsp; + int yyerrstatus; /* number of tokens to shift before error messages enabled */ + int yychar1 = 0; /* lookahead token as an internal (translated) token number */ + + short yyssa[YYINITDEPTH]; /* the state stack */ + YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ + + short *yyss = yyssa; /* refer to the stacks thru separate pointers */ + YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ + +#ifdef YYLSP_NEEDED + YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + +#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) +#else +#define YYPOPSTACK (yyvsp--, yyssp--) +#endif + + int yystacksize = YYINITDEPTH; + +#ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; +#ifdef YYLSP_NEEDED + YYLTYPE yylloc; +#endif +#endif + + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ + + int yylen; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); +#endif + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss - 1; + yyvsp = yyvs; +#ifdef YYLSP_NEEDED + yylsp = yyls; +#endif + +/* Push a new state, which is found in yystate . */ +/* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ +yynewstate: + + *++yyssp = yystate; + + if (yyssp >= yyss + yystacksize - 1) + { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; +#ifdef YYLSP_NEEDED + YYLTYPE *yyls1 = yyls; +#endif + + /* Get the current used size of the three stacks, in elements. */ + int size = yyssp - yyss + 1; + +#ifdef yyoverflow + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ +#ifdef YYLSP_NEEDED + /* This used to be a conditional around just the two extra args, + but that might be undefined if yyoverflow is a macro. */ + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yyls1, size * sizeof (*yylsp), + &yystacksize); +#else + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yystacksize); +#endif + + yyss = yyss1; yyvs = yyvs1; +#ifdef YYLSP_NEEDED + yyls = yyls1; +#endif +#else /* no yyoverflow */ + /* Extend the stack our own way. */ + if (yystacksize >= YYMAXDEPTH) + { + yyerror("parser stack overflow"); + return 2; + } + yystacksize *= 2; + if (yystacksize > YYMAXDEPTH) + yystacksize = YYMAXDEPTH; + yyss = (short *) alloca (yystacksize * sizeof (*yyssp)); + __yy_memcpy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp)); + yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp)); + __yy_memcpy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp)); +#ifdef YYLSP_NEEDED + yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp)); + __yy_memcpy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp)); +#endif +#endif /* no yyoverflow */ + + yyssp = yyss + size - 1; + yyvsp = yyvs + size - 1; +#ifdef YYLSP_NEEDED + yylsp = yyls + size - 1; +#endif + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Stack size increased to %d\n", yystacksize); +#endif + + if (yyssp >= yyss + yystacksize - 1) + YYABORT; + } + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Entering state %d\n", yystate); +#endif + + goto yybackup; + yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + + if (yychar == YYEMPTY) + { +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Reading a token: "); +#endif + yychar = YYLEX; + } + + /* Convert token to internal form (in yychar1) for indexing tables with */ + + if (yychar <= 0) /* This means end of input. */ + { + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Now at end of input.\n"); +#endif + } + else + { + yychar1 = YYTRANSLATE(yychar); + +#if YYDEBUG != 0 + if (yydebug) + { + fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ +#ifdef YYPRINT + YYPRINT (stderr, yychar, yylval); +#endif + fprintf (stderr, ")\n"); + } +#endif + } + + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) + goto yydefault; + + yyn = yytable[yyn]; + + /* yyn is what to do for this token type in this state. + Negative => reduce, -yyn is rule number. + Positive => shift, yyn is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrlab; + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +#endif + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + /* count tokens shifted since error; after three, turn off error status. */ + if (yyerrstatus) yyerrstatus--; + + yystate = yyn; + goto yynewstate; + +/* Do the default action for the current state. */ +yydefault: + + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + +/* Do a reduction. yyn is the number of a rule to reduce with. */ +yyreduce: + yylen = yyr2[yyn]; + if (yylen > 0) + yyval = yyvsp[1-yylen]; /* implement default value of the action */ + +#if YYDEBUG != 0 + if (yydebug) + { + int i; + + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); + + /* Print the symbols being reduced, and their result. */ + for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) + fprintf (stderr, "%s ", yytname[yyrhs[i]]); + fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); + } +#endif + + + switch (yyn) { + +case 3: +#line 87 "error_table.y" +{ table_name = ds(yyvsp[-4].dynstr); + current_token = table_name; + put_ecs(); ; + break;} +case 6: +#line 95 "error_table.y" +{ current_token = yyvsp[-1].dynstr; + yyval.dynstr = yyvsp[0].dynstr; ; + break;} +case 7: +#line 98 "error_table.y" +{ current_token = yyvsp[0].dynstr; + set_table_fun(ds("1")); + yyval.dynstr = yyvsp[0].dynstr; + ; + break;} +case 8: +#line 105 "error_table.y" +{ current_token = yyvsp[0].dynstr; + set_table_fun(yyvsp[0].dynstr); + yyval.dynstr = yyvsp[0].dynstr; ; + break;} +case 9: +#line 112 "error_table.y" +{ current_token = yyvsp[0].dynstr; + set_table_num(yyvsp[0].dynstr); + yyval.dynstr = yyvsp[0].dynstr; ; + break;} +case 12: +#line 122 "error_table.y" +{ add_ec(yyvsp[-2].dynstr, yyvsp[0].dynstr); + free(yyvsp[-2].dynstr); + free(yyvsp[0].dynstr); ; + break;} +case 13: +#line 126 "error_table.y" +{ add_ec_val(yyvsp[-4].dynstr, yyvsp[-2].dynstr, yyvsp[0].dynstr); + free(yyvsp[-4].dynstr); + free(yyvsp[-2].dynstr); + free(yyvsp[0].dynstr); + ; + break;} +case 14: +#line 132 "error_table.y" +{ add_index(yyvsp[0].dynstr); + free(yyvsp[0].dynstr); + ; + break;} +case 15: +#line 136 "error_table.y" +{ set_prefix(yyvsp[0].dynstr); + free(yyvsp[0].dynstr); + ; + break;} +case 16: +#line 147 "error_table.y" +{ set_base(yyvsp[0].dynstr); + free(yyvsp[0].dynstr); + ; + break;} +case 18: +#line 154 "error_table.y" +{ yyval.dynstr = ds(yyvsp[0].dynstr); + current_token = yyval.dynstr; ; + break;} +case 19: +#line 159 "error_table.y" +{ yyval.dynstr = ds(yyvsp[0].dynstr); + current_token = yyval.dynstr; ; + break;} +} + /* the action file gets copied in in place of this dollarsign */ +#line 487 "bison.simple" + + yyvsp -= yylen; + yyssp -= yylen; +#ifdef YYLSP_NEEDED + yylsp -= yylen; +#endif + +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + + *++yyvsp = yyval; + +#ifdef YYLSP_NEEDED + yylsp++; + if (yylen == 0) + { + yylsp->first_line = yylloc.first_line; + yylsp->first_column = yylloc.first_column; + yylsp->last_line = (yylsp-1)->last_line; + yylsp->last_column = (yylsp-1)->last_column; + yylsp->text = 0; + } + else + { + yylsp->last_line = (yylsp+yylen-1)->last_line; + yylsp->last_column = (yylsp+yylen-1)->last_column; + } +#endif + + /* Now "shift" the result of the reduction. + Determine what state that goes to, + based on the state we popped back to + and the rule number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTBASE] + *yyssp; + if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTBASE]; + + goto yynewstate; + +yyerrlab: /* here on detecting error */ + + if (! yyerrstatus) + /* If not already recovering from an error, report this error. */ + { + ++yynerrs; + +#ifdef YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (yyn > YYFLAG && yyn < YYLAST) + { + int size = 0; + char *msg; + int x, count; + + count = 0; + /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + size += strlen(yytname[x]) + 15, count++; + msg = (char *) malloc(size + 15); + if (msg != 0) + { + strcpy(msg, "parse error"); + + if (count < 5) + { + count = 0; + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + { + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, yytname[x]); + strcat(msg, "'"); + count++; + } + } + yyerror(msg); + free(msg); + } + else + yyerror ("parse error; also virtual memory exceeded"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror("parse error"); + } + + goto yyerrlab1; +yyerrlab1: /* here on error raised explicitly by an action */ + + if (yyerrstatus == 3) + { + /* if just tried and failed to reuse lookahead token after an error, discard it. */ + + /* return failure if at end of input */ + if (yychar == YYEOF) + YYABORT; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); +#endif + + yychar = YYEMPTY; + } + + /* Else will try to reuse lookahead token + after shifting the error token. */ + + yyerrstatus = 3; /* Each real token shifted decrements this */ + + goto yyerrhandle; + +yyerrdefault: /* current state does not do anything special for the error token. */ + +#if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ + if (yyn) goto yydefault; +#endif + +yyerrpop: /* pop the current state because it cannot handle the error token */ + + if (yyssp == yyss) YYABORT; + yyvsp--; + yystate = *--yyssp; +#ifdef YYLSP_NEEDED + yylsp--; +#endif + +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "Error: state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + +yyerrhandle: + + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yyerrdefault; + + yyn += YYTERROR; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) + goto yyerrdefault; + + yyn = yytable[yyn]; + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrpop; + yyn = -yyn; + goto yyreduce; + } + else if (yyn == 0) + goto yyerrpop; + + if (yyn == YYFINAL) + YYACCEPT; + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting error token, "); +#endif + + *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif + + yystate = yyn; + goto yynewstate; +} +#line 163 "error_table.y" + + +/* + * Copyright 2000, International Business Machines Corporation and others. + * All Rights Reserved. + * + * This software has been released under the terms of the IBM Public + * License. For details, see the LICENSE file in the top-level source + * directory or online at http://www.openafs.org/dl/license10.html + */ + +extern FILE *hfile, *cfile, *msfile; +extern int use_msf; +char st_prefix[] = ""; +char *prefix = st_prefix; + +static afs_int32 gensym_n = 0; + +char *gensym(const char *x) +{ + char *symbol; + if (!gensym_n) { + struct timeval tv; + gettimeofday(&tv, (void *)0); + gensym_n = (tv.tv_sec%10000)*100 + tv.tv_usec/10000; + } + symbol = (char *)malloc(32 * sizeof(char)); + gensym_n++; + sprintf(symbol, "et%ld", (long int) gensym_n); + return(symbol); +} + +char * +ds(const char *string) +{ + char *rv; + rv = (char *)malloc(strlen(prefix)+strlen(string)+1); + strcpy(rv, prefix); + strcat(rv, string); + return(rv); +} + +char * +quote(const char *string) +{ + char *rv; + rv = (char *)malloc(strlen(string)+3); + strcpy(rv, "\""); + strcat(rv, string); + strcat(rv, "\""); + return(rv); +} + +afs_int32 table_number = 0; +int current = 0; +char **error_codes = (char **)NULL; + +void add_ec(const char *name, const char *description) +{ + if (msfile) { + if (current > 0) +#ifndef sun + fprintf(msfile, "%d\t%s\n", current, description); +#else + fprintf(msfile, "%d %s\n", current, description); +#endif /* !sun */ + } else { + fprintf(cfile, "\t\"%s\",\n", description); + } + if (error_codes == (char **)NULL) { + error_codes = (char **)malloc(sizeof(char *)); + *error_codes = (char *)NULL; + } + error_codes = (char **)realloc((char *)error_codes, + (current + 2)*sizeof(char *)); + error_codes[current++] = ds(name); + error_codes[current] = (char *)NULL; +} + +void add_ec_val(const char *name, const char *val, const char *description) +{ + const int ncurrent = atoi(val); + if (ncurrent < current) { + fprintf(stderr,"Error code %s (%d) out of order", name, + current); + return; + } + + while (ncurrent > current) { + if (!msfile) + fputs("\t(char *)0,\n", cfile); + current++; + } + if (msfile) { + if (current > 0) +#ifndef sun + fprintf(msfile, "%d\t%s\n", current, description); +#else + fprintf(msfile, "%d %s\n", current, description); +#endif /* ! sun */ + } else { + fprintf(cfile, "\t\"%s\",\n", description); + } + if (error_codes == (char **)NULL) { + error_codes = (char **)malloc(sizeof(char *)); + *error_codes = (char *)NULL; + } + error_codes = (char **)realloc((char *)error_codes, + (current + 2)*sizeof(char *)); + error_codes[current++] = ds(name); + error_codes[current] = (char *)NULL; +} + +void add_index(const char *val) +{ + const int ncurrent = atoi(val); + if (ncurrent < current) { + fprintf(stderr,"Index (%d) attempt to go backwards", + current); + return; + } + + if (error_codes == (char **)NULL) { + error_codes = (char **)malloc((ncurrent + 1) * sizeof(char *)); + } else { + error_codes = (char **)realloc((char *)error_codes, + (ncurrent + 1)*sizeof(char *)); + } + while (ncurrent > current) { + if (!msfile) + fputs("\t(char *)0,\n", cfile); + error_codes[current++] = (char *)NULL; + } +} + +/* +void set_id(const char *id, const char *text) +{ +} +*/ + +void set_prefix(const char *val) +{ + char *new; + + if (*val) { + new = malloc(strlen(val)+2); + strcpy(new, val); + strcat(new, "_"); + } else { + new = malloc(1); + *new = 0; + } + if (prefix != st_prefix) { + free(prefix); + } + prefix = new; +} + +void set_base(const char *base) +{ + table_number = atoi(base); +} + +void put_ecs(void) +{ + int i; + for (i = 0; i < current; i++) { + if (error_codes[i] != (char *)NULL) + fprintf(hfile, "#define %-40s (%ldL)\n", + error_codes[i], (long int) table_number + i); + } + put_ecs_postlog(); +} + +/* + * char_to_num -- maps letters and numbers into a small numbering space + * uppercase -> 1-26 + * lowercase -> 27-52 + * digits -> 53-62 + * underscore-> 63 + */ + +static const char char_set[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"; + +int char_to_num(char c) +{ + const char *where; + int diff; + + where = strchr (char_set, c); + if (where) { + diff = where - char_set + 1; + assert (diff < (1 << ERRCODE_RANGE)); + return diff; + } + else if (isprint (c)) + fprintf (stderr, + "Illegal character `%c' in error table name\n", + c); + else + fprintf (stderr, + "Illegal character %03o in error table name\n", + c); + exit (1); +} + +void set_table_num(char *string) +{ + if (msfile) { + set_table_1num(string); + return; + } + if (strlen(string) > 4) { + fprintf(stderr, "Table name %s too long, truncated ", + string); + string[4] = '\0'; + fprintf(stderr, "to %s\n", string); + } + if (char_to_num (string[0]) > char_to_num ('z')) { + fprintf (stderr, "%s%s%s%s", + "First character of error table name must be ", + "a letter; name ``", + string, "'' rejected\n"); + exit (1); + } + while (*string != '\0') { + table_number = (table_number << BITS_PER_CHAR) + + char_to_num(*string); + string++; + } + table_number = table_number << ERRCODE_RANGE; + current = 0; + if (error_codes) + error_codes[current] = (char *)NULL; + if (!msfile) { + fprintf(cfile, + "static const char * const text%s[] = {\n", + cot_suffix(count_of_tables)); /* } */ + } +} + +void set_table_fun(char *astring) +{ + register char *tp; + unsigned int tc; + + for(tp=astring; (tc = *tp) != 0; tp++) { + if (!isdigit(tc)) { + fprintf(stderr, "Table function '%s' must be a decimal integer.\n", + astring); + exit(1); + } + } + if (msfile) + table_number += (atoi(astring)) << 28; +} + +/* for compatibility with old comerr's, we truncate package name to 4 + * characters, but only store first 3 in the error code. Note that this + * function, as a side effect, truncates the table name down to 4 chars. + */ +void set_table_1num(char *string) +{ + afs_int32 temp; + int ctr; + + if ((temp = strlen(string)) > 4) { + fprintf(stderr, "Table name %s too long, truncated ", + string); + string[4] = '\0'; + fprintf(stderr, "to %s\n", string); + } + if (temp == 4) { + fprintf(stderr, "Table name %s too long, only 3 characters fit in error code.\n", + string); + } + if (char_to_1num (string[0]) > char_to_1num ('z')) { + fprintf (stderr, "%s%s%s%s", + "First character of error table name must be ", + "a letter; name ``", + string, "'' rejected\n"); + exit (1); + } + temp = 0; + for(ctr=0; ctr < 3; ctr++) { /* copy at most 3 chars to integer */ + if (*string == '\0') break; /* and watch for early end */ + temp = (temp * 050) /* "radix fifty" is base 050 = 40 */ + + char_to_1num(*string); + string++; + } + table_number += temp << 12; +} + +/* + * char_to_num -- maps letters and numbers into very small space + * 0-9 -> 0-9 + * mixed case -> 10-35 + * _ -> 36 + * others are reserved + */ + +static const char char_1set[] = + "abcdefghijklmnopqrstuvwxyz_0123456789"; + +int char_to_1num(char c) +{ + const char *where; + int diff; + + if (isupper(c)) c = tolower(c); + + where = strchr (char_1set, c); + if (where) { + /* start at 1 so we can decode */ + diff = where - char_1set; + assert (diff < 050); /* it is radix 50, after all */ + return diff; + } + else if (isprint (c)) + fprintf (stderr, + "Illegal character `%c' in error table name\n", + c); + else + fprintf (stderr, + "Illegal character %03o in error table name\n", + c); + exit (1); +} + +#ifdef AFS_NT40_ENV +#include "et_lex.lex_nt.c" +#else +#include "et_lex.lex.c" +#endif diff --git a/src/comerr/error_table_nt.h b/src/comerr/error_table_nt.h index 60ac7aec01..8a115897ae 100755 --- a/src/comerr/error_table_nt.h +++ b/src/comerr/error_table_nt.h @@ -1,17 +1,17 @@ -typedef union { - char *dynstr; -} YYSTYPE; -#define ERROR_TABLE 258 -#define ERROR_CODE_ENTRY 259 -#define END 260 -#define INDEX 261 -#define PREFIX 262 -#define ID 263 -#define BASE 264 -#define NL 265 -#define STRING 266 -#define QUOTED_STRING 267 -#define NUMBER 268 - - -extern YYSTYPE yylval; +typedef union { + char *dynstr; +} YYSTYPE; +#define ERROR_TABLE 258 +#define ERROR_CODE_ENTRY 259 +#define END 260 +#define INDEX 261 +#define PREFIX 262 +#define ID 263 +#define BASE 264 +#define NL 265 +#define STRING 266 +#define QUOTED_STRING 267 +#define NUMBER 268 + + +extern YYSTYPE yylval; diff --git a/src/comerr/et_lex.lex_nt.c b/src/comerr/et_lex.lex_nt.c index 70a549f27c..f4ebac5f31 100644 --- a/src/comerr/et_lex.lex_nt.c +++ b/src/comerr/et_lex.lex_nt.c @@ -1,1630 +1,1630 @@ -/* A lexical scanner generated by flex */ - -/* Scanner skeleton version: - * $Header$ - */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 - -#include - - -/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ -#ifdef c_plusplus -#ifndef __cplusplus -#define __cplusplus -#endif -#endif - - -#ifdef __cplusplus - -#include -#include - -/* Use prototypes in function declarations. */ -#define YY_USE_PROTOS - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -#if __STDC__ - -#define YY_USE_PROTOS -#define YY_USE_CONST - -#endif /* __STDC__ */ -#endif /* ! __cplusplus */ - -#ifdef __TURBOC__ - #pragma warn -rch - #pragma warn -use -#include -#include -#define YY_USE_CONST -#define YY_USE_PROTOS -#endif - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - - -#ifdef YY_USE_PROTOS -#define YY_PROTO(proto) proto -#else -#define YY_PROTO(proto) () -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN yy_start = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START ((yy_start - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart( yyin ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#define YY_BUF_SIZE 16384 - -typedef struct yy_buffer_state *YY_BUFFER_STATE; - -extern int yyleng; -extern FILE *yyin, *yyout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - -/* The funky do-while in the following #define is used to turn the definition - * int a single C statement (which needs a semi-colon terminator). This - * avoids problems with code like: - * - * if ( condition_holds ) - * yyless( 5 ); - * else - * do_something_else(); - * - * Prior to using the do-while the compiler would get upset at the - * "else" because it interpreted the "if" statement as being all - * done when it reached the ';' after the yyless() call. - */ - -/* Return all but the first 'n' matched characters back to the input stream. */ - -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - *yy_cp = yy_hold_char; \ - yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up yytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, yytext_ptr ) - -/* The following is because we cannot portably get our hands on size_t - * (without autoconf's help, which isn't available because we want - * flex-generated scanners to compile on their own). - */ -typedef unsigned int yy_size_t; - - -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - int yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via yyrestart()), so that the user can continue scanning by - * just pointing yyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - }; - -static YY_BUFFER_STATE yy_current_buffer = 0; - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - */ -#define YY_CURRENT_BUFFER yy_current_buffer - - -/* yy_hold_char holds the character lost when yytext is formed. */ -static char yy_hold_char; - -static int yy_n_chars; /* number of characters read into yy_ch_buf */ - - -int yyleng; - -/* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; -static int yy_init = 1; /* whether we need to initialize */ -static int yy_start = 0; /* start state number */ - -/* Flag which is used to allow yywrap()'s to do buffer switches - * instead of setting up a fresh yyin. A bit of a hack ... - */ -static int yy_did_buffer_switch_on_eof; - -void yyrestart YY_PROTO(( FILE *input_file )); - -void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); -void yy_load_buffer_state YY_PROTO(( void )); -YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); -void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); -void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); -void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); -#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) - -YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); -YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *str )); -YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); - -static void *yy_flex_alloc YY_PROTO(( yy_size_t )); -static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); -static void yy_flex_free YY_PROTO(( void * )); - -#define yy_new_buffer yy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ - yy_current_buffer->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ - yy_current_buffer->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (yy_current_buffer->yy_at_bol) - - -#define YY_USES_REJECT -typedef unsigned char YY_CHAR; -FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; -typedef int yy_state_type; -#define YY_FLEX_LEX_COMPAT -extern int yylineno; -int yylineno = 1; -extern char yytext[]; - - -static yy_state_type yy_get_previous_state YY_PROTO(( void )); -static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); -static int yy_get_next_buffer YY_PROTO(( void )); -static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up yytext. - */ -#define YY_DO_BEFORE_ACTION \ - yytext_ptr = yy_bp; \ - yytext_ptr -= yy_more_len; \ - yyleng = (int) (yy_cp - yytext_ptr); \ - yy_hold_char = *yy_cp; \ - *yy_cp = '\0'; \ - if ( yyleng >= YYLMAX ) \ - YY_FATAL_ERROR( "token too large, exceeds YYLMAX" ); \ - yy_flex_strncpy( yytext, yytext_ptr, yyleng + 1 ); \ - yy_c_buf_p = yy_cp; - -#define YY_NUM_RULES 17 -#define YY_END_OF_BUFFER 18 -static yyconst short int yy_acclist[83] = - { 0, - 14, 14, 18, 16, 17, 10, 16, 17, 11, 17, - 16, 17, 16, 17, 16, 17, 13, 14, 16, 17, - 14, 16, 17, 14, 16, 17, 14, 16, 17, 14, - 16, 17, 14, 16, 17, 12, 15, 13, 13, 14, - 14, 14, 4, 14, 14, 14, 2, 14, 8, 14, - 14, 14, 13, 14, 5, 14, 14, 14, 14, 9, - 14, 14, 14, 14, 14, 6, 14, 14, 14, 7, - 14, 14, 14, 14, 14, 14, 14, 3, 14, 14, - 1, 14 - } ; - -static yyconst short int yy_accept[58] = - { 0, - 1, 2, 3, 4, 6, 9, 11, 13, 15, 17, - 21, 24, 27, 30, 33, 36, 36, 37, 37, 38, - 38, 39, 41, 42, 43, 45, 46, 47, 49, 51, - 52, 53, 54, 55, 57, 58, 59, 60, 62, 63, - 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, - 76, 77, 78, 80, 81, 83, 83 - } ; - -static yyconst int yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 4, 5, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 6, 1, 1, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, - 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 1, 1, 1, 1, 9, 1, 10, 11, 12, 13, - - 14, 15, 8, 8, 16, 8, 8, 17, 8, 18, - 19, 20, 8, 21, 22, 23, 8, 8, 8, 24, - 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static yyconst int yy_meta[25] = - { 0, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2 - } ; - -static yyconst short int yy_base[60] = - { 0, - 0, 0, 73, 74, 74, 74, 68, 68, 19, 63, - 0, 59, 15, 16, 47, 63, 74, 63, 74, 24, - 58, 57, 0, 41, 0, 49, 40, 0, 0, 47, - 45, 51, 43, 0, 37, 41, 39, 0, 32, 28, - 35, 41, 0, 25, 16, 0, 29, 37, 33, 34, - 30, 20, 0, 21, 0, 74, 39, 41, 30 - } ; - -static yyconst short int yy_def[60] = - { 0, - 56, 1, 56, 56, 56, 56, 57, 58, 56, 59, - 59, 59, 59, 59, 59, 57, 56, 58, 56, 56, - 56, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 56, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 0, 56, 56, 56 - } ; - -static yyconst short int yy_nxt[99] = - { 0, - 4, 5, 6, 7, 8, 9, 10, 11, 11, 11, - 12, 11, 11, 13, 11, 14, 11, 11, 11, 15, - 11, 11, 11, 11, 20, 21, 25, 47, 29, 20, - 21, 23, 26, 30, 55, 27, 54, 28, 48, 16, - 16, 18, 18, 53, 52, 51, 50, 49, 46, 45, - 44, 43, 42, 41, 40, 39, 38, 32, 37, 36, - 35, 34, 33, 22, 32, 19, 17, 31, 24, 22, - 19, 17, 56, 3, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56 - - } ; - -static yyconst short int yy_chk[99] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 9, 9, 13, 45, 14, 20, - 20, 59, 13, 14, 54, 13, 52, 13, 45, 57, - 57, 58, 58, 51, 50, 49, 48, 47, 44, 42, - 41, 40, 39, 37, 36, 35, 33, 32, 31, 30, - 27, 26, 24, 22, 21, 18, 16, 15, 12, 10, - 8, 7, 3, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56 - - } ; - -static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr; -static char *yy_full_match; -static int yy_lp; -#define REJECT \ -{ \ -*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \ -yy_cp = yy_full_match; /* restore poss. backed-over text */ \ -++yy_lp; \ -goto find_rule; \ -} -static int yy_more_flag = 0; -static int yy_more_len = 0; -#define yymore() (yy_more_flag = 1) -#define YY_MORE_ADJ yy_more_len -#ifndef YYLMAX -#define YYLMAX 8192 -#endif - -char yytext[YYLMAX]; -char *yytext_ptr; -#line 1 "et_lex.lex.l" -#define INITIAL 0 - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap YY_PROTO(( void )); -#else -extern int yywrap YY_PROTO(( void )); -#endif -#endif - -#ifndef YY_NO_UNPUT -static void yyunput YY_PROTO(( int c, char *buf_ptr )); -#endif - -#ifndef yytext_ptr -static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int )); -#endif - -#ifndef YY_NO_INPUT -#ifdef __cplusplus -static int yyinput YY_PROTO(( void )); -#else -static int input YY_PROTO(( void )); -#endif -#endif - -#if YY_STACK_USED -static int yy_start_stack_ptr = 0; -static int yy_start_stack_depth = 0; -static int *yy_start_stack = 0; -#ifndef YY_NO_PUSH_STATE -static void yy_push_state YY_PROTO(( int new_state )); -#endif -#ifndef YY_NO_POP_STATE -static void yy_pop_state YY_PROTO(( void )); -#endif -#ifndef YY_NO_TOP_STATE -static int yy_top_state YY_PROTO(( void )); -#endif - -#else -#define YY_NO_PUSH_STATE 1 -#define YY_NO_POP_STATE 1 -#define YY_NO_TOP_STATE 1 -#endif - -#ifdef YY_MALLOC_DECL -YY_MALLOC_DECL -#else -#if __STDC__ -#ifndef __cplusplus -#include -#endif -#else -/* Just try to get by without declaring the routines. This will fail - * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) - * or sizeof(void*) != sizeof(int). - */ -#endif -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ - -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( yy_current_buffer->yy_is_interactive ) \ - { \ - int c = '*', n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ - && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -#endif - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL int yylex YY_PROTO(( void )) -#endif - -/* Code executed at the beginning of each rule, after yytext and yyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -#define YY_RULE_SETUP \ - YY_USER_ACTION - -YY_DECL - { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; - -#line 4 "et_lex.lex.l" - - - - if ( yy_init ) - { - yy_init = 0; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! yy_start ) - yy_start = 1; /* first start state */ - - if ( ! yyin ) - yyin = stdin; - - if ( ! yyout ) - yyout = stdout; - - if ( ! yy_current_buffer ) - yy_current_buffer = - yy_create_buffer( yyin, YY_BUF_SIZE ); - - yy_load_buffer_state(); - } - - while ( 1 ) /* loops until end-of-file is reached */ - { - yy_more_len = 0; - if ( yy_more_flag ) - { - yy_more_len = yyleng; - yy_more_flag = 0; - } - yy_cp = yy_c_buf_p; - - /* Support of yytext. */ - *yy_cp = yy_hold_char; - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = yy_start; - yy_state_ptr = yy_state_buf; - *yy_state_ptr++ = yy_current_state; -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 57 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - *yy_state_ptr++ = yy_current_state; - ++yy_cp; - } - while ( yy_base[yy_current_state] != 74 ); - -yy_find_action: - yy_current_state = *--yy_state_ptr; - yy_lp = yy_accept[yy_current_state]; -find_rule: /* we branch to this label when backing up */ - for ( ; ; ) /* until we find what rule we matched */ - { - if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] ) - { - yy_act = yy_acclist[yy_lp]; - { - yy_full_match = yy_cp; - break; - } - } - --yy_cp; - yy_current_state = *--yy_state_ptr; - yy_lp = yy_accept[yy_current_state]; - } - - YY_DO_BEFORE_ACTION; - - if ( yy_act != YY_END_OF_BUFFER ) - { - int yyl; - for ( yyl = 0; yyl < yyleng; ++yyl ) - if ( yytext[yyl] == '\n' ) - ++yylineno; - } - -do_action: /* This label is used only to access EOF actions. */ - - - switch ( yy_act ) - { /* beginning of action switch */ -case 1: -YY_RULE_SETUP -#line 6 "et_lex.lex.l" -return ERROR_TABLE; - YY_BREAK -case 2: -YY_RULE_SETUP -#line 7 "et_lex.lex.l" -return ERROR_TABLE; - YY_BREAK -case 3: -YY_RULE_SETUP -#line 8 "et_lex.lex.l" -return ERROR_CODE_ENTRY; - YY_BREAK -case 4: -YY_RULE_SETUP -#line 9 "et_lex.lex.l" -return ERROR_CODE_ENTRY; - YY_BREAK -case 5: -YY_RULE_SETUP -#line 10 "et_lex.lex.l" -return END; - YY_BREAK -case 6: -YY_RULE_SETUP -#line 11 "et_lex.lex.l" -return INDEX; - YY_BREAK -case 7: -YY_RULE_SETUP -#line 12 "et_lex.lex.l" -return PREFIX; - YY_BREAK -case 8: -YY_RULE_SETUP -#line 13 "et_lex.lex.l" -return ID; - YY_BREAK -case 9: -YY_RULE_SETUP -#line 14 "et_lex.lex.l" -return BASE; - YY_BREAK -case 10: -YY_RULE_SETUP -#line 16 "et_lex.lex.l" -; - YY_BREAK -case 11: -YY_RULE_SETUP -#line 17 "et_lex.lex.l" -return NL; - YY_BREAK -case 12: -YY_RULE_SETUP -#line 19 "et_lex.lex.l" -{ register char *p; yylval.dynstr = ds((char *)yytext+1); - if ((p=strrchr(yylval.dynstr, '"'))) *p='\0'; - return QUOTED_STRING; - } - YY_BREAK -case 13: -YY_RULE_SETUP -#line 24 "et_lex.lex.l" -{ yylval.dynstr = ds((char *)yytext); return NUMBER; } - YY_BREAK -case 14: -YY_RULE_SETUP -#line 25 "et_lex.lex.l" -{ yylval.dynstr = ds((char *)yytext); return STRING; } - YY_BREAK -case 15: -YY_RULE_SETUP -#line 27 "et_lex.lex.l" -return NL; - YY_BREAK -case 16: -YY_RULE_SETUP -#line 29 "et_lex.lex.l" -{ return (*yytext); } - YY_BREAK -case 17: -YY_RULE_SETUP -#line 30 "et_lex.lex.l" -ECHO; - YY_BREAK - case YY_STATE_EOF(INITIAL): - yyterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = yy_hold_char; - - if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed yyin at a new source and called - * yylex(). If so, then we have to assure - * consistency between yy_current_buffer and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - yy_n_chars = yy_current_buffer->yy_n_chars; - yy_current_buffer->yy_input_file = yyin; - yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state(); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state ); - - yy_bp = yytext_ptr + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++yy_c_buf_p; - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = yy_c_buf_p; - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer() ) - { - case EOB_ACT_END_OF_FILE: - { - yy_did_buffer_switch_on_eof = 0; - - if ( yywrap() ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * yytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - yy_c_buf_p = - yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state(); - - yy_cp = yy_c_buf_p; - yy_bp = yytext_ptr + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - yy_c_buf_p = - &yy_current_buffer->yy_ch_buf[yy_n_chars]; - - yy_current_state = yy_get_previous_state(); - - yy_cp = yy_c_buf_p; - yy_bp = yytext_ptr + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ - } /* end of yylex */ - - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ - -static int yy_get_next_buffer() - { - register char *dest = yy_current_buffer->yy_ch_buf; - register char *source = yytext_ptr; - register int number_to_move, i; - int ret_val; - - if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( yy_current_buffer->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 ) - { - /* We matched a singled characater, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - yy_n_chars = 0; - - else - { - int num_to_read = - yy_current_buffer->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ -#ifdef YY_USES_REJECT - YY_FATAL_ERROR( -"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); -#else - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = yy_current_buffer; - - int yy_c_buf_p_offset = - (int) (yy_c_buf_p - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - int new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - yy_flex_realloc( (void *) b->yy_ch_buf, - b->yy_buf_size + 2 ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = yy_current_buffer->yy_buf_size - - number_to_move - 1; -#endif - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), - yy_n_chars, num_to_read ); - } - - if ( yy_n_chars == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - yyrestart( yyin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - yy_current_buffer->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - yy_n_chars += number_to_move; - yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; - yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; - - yytext_ptr = &yy_current_buffer->yy_ch_buf[0]; - - return ret_val; - } - - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - -static yy_state_type yy_get_previous_state() - { - register yy_state_type yy_current_state; - register char *yy_cp; - - yy_current_state = yy_start; - yy_state_ptr = yy_state_buf; - *yy_state_ptr++ = yy_current_state; - - for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) - { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 57 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - *yy_state_ptr++ = yy_current_state; - } - - return yy_current_state; - } - - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - -#ifdef YY_USE_PROTOS -static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) -#else -static yy_state_type yy_try_NUL_trans( yy_current_state ) -yy_state_type yy_current_state; -#endif - { - register int yy_is_jam; - - register YY_CHAR yy_c = 1; - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 57 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - *yy_state_ptr++ = yy_current_state; - yy_is_jam = (yy_current_state == 56); - - return yy_is_jam ? 0 : yy_current_state; - } - - -#ifndef YY_NO_UNPUT -#ifdef YY_USE_PROTOS -static void yyunput( int c, register char *yy_bp ) -#else -static void yyunput( c, yy_bp ) -int c; -register char *yy_bp; -#endif - { - register char *yy_cp = yy_c_buf_p; - - /* undo effects of setting up yytext */ - *yy_cp = yy_hold_char; - - if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register int number_to_move = yy_n_chars + 2; - register char *dest = &yy_current_buffer->yy_ch_buf[ - yy_current_buffer->yy_buf_size + 2]; - register char *source = - &yy_current_buffer->yy_ch_buf[number_to_move]; - - while ( source > yy_current_buffer->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - yy_n_chars = yy_current_buffer->yy_buf_size; - - if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - if ( c == '\n' ) - --yylineno; - - yytext_ptr = yy_bp; - yy_hold_char = *yy_cp; - yy_c_buf_p = yy_cp; - } -#endif /* ifndef YY_NO_UNPUT */ - - -#ifdef __cplusplus -static int yyinput() -#else -static int input() -#endif - { - int c; - - *yy_c_buf_p = yy_hold_char; - - if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] ) - /* This was really a NUL. */ - *yy_c_buf_p = '\0'; - - else - { /* need more input */ - yytext_ptr = yy_c_buf_p; - ++yy_c_buf_p; - - switch ( yy_get_next_buffer() ) - { - case EOB_ACT_END_OF_FILE: - { - if ( yywrap() ) - { - yy_c_buf_p = - yytext_ptr + YY_MORE_ADJ; - return EOF; - } - - if ( ! yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; - break; - - case EOB_ACT_LAST_MATCH: -#ifdef __cplusplus - YY_FATAL_ERROR( - "unexpected last match in yyinput()" ); -#else - YY_FATAL_ERROR( - "unexpected last match in input()" ); -#endif - } - } - } - - c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */ - *yy_c_buf_p = '\0'; /* preserve yytext */ - yy_hold_char = *++yy_c_buf_p; - - if ( c == '\n' ) - ++yylineno; - - return c; - } - - -#ifdef YY_USE_PROTOS -void yyrestart( FILE *input_file ) -#else -void yyrestart( input_file ) -FILE *input_file; -#endif - { - if ( ! yy_current_buffer ) - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); - - yy_init_buffer( yy_current_buffer, input_file ); - yy_load_buffer_state(); - } - - -#ifdef YY_USE_PROTOS -void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) -#else -void yy_switch_to_buffer( new_buffer ) -YY_BUFFER_STATE new_buffer; -#endif - { - if ( yy_current_buffer == new_buffer ) - return; - - if ( yy_current_buffer ) - { - /* Flush out information for old buffer. */ - *yy_c_buf_p = yy_hold_char; - yy_current_buffer->yy_buf_pos = yy_c_buf_p; - yy_current_buffer->yy_n_chars = yy_n_chars; - } - - yy_current_buffer = new_buffer; - yy_load_buffer_state(); - - /* We don't actually know whether we did this switch during - * EOF (yywrap()) processing, but the only time this flag - * is looked at is after yywrap() is called, so it's safe - * to go ahead and always set it. - */ - yy_did_buffer_switch_on_eof = 1; - } - - -#ifdef YY_USE_PROTOS -void yy_load_buffer_state( void ) -#else -void yy_load_buffer_state() -#endif - { - yy_n_chars = yy_current_buffer->yy_n_chars; - yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; - yyin = yy_current_buffer->yy_input_file; - yy_hold_char = *yy_c_buf_p; - } - - -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) -#else -YY_BUFFER_STATE yy_create_buffer( file, size ) -FILE *file; -int size; -#endif - { - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - yy_init_buffer( b, file ); - - return b; - } - - -#ifdef YY_USE_PROTOS -void yy_delete_buffer( YY_BUFFER_STATE b ) -#else -void yy_delete_buffer( b ) -YY_BUFFER_STATE b; -#endif - { - if ( ! b ) - return; - - if ( b == yy_current_buffer ) - yy_current_buffer = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - yy_flex_free( (void *) b->yy_ch_buf ); - - yy_flex_free( (void *) b ); - } - - -#ifndef YY_ALWAYS_INTERACTIVE -#ifndef YY_NEVER_INTERACTIVE -extern int isatty YY_PROTO(( int )); -#endif -#endif - -#ifdef YY_USE_PROTOS -void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) -#else -void yy_init_buffer( b, file ) -YY_BUFFER_STATE b; -FILE *file; -#endif - - - { - yy_flush_buffer( b ); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - -#if YY_ALWAYS_INTERACTIVE - b->yy_is_interactive = 1; -#else -#if YY_NEVER_INTERACTIVE - b->yy_is_interactive = 0; -#else - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; -#endif -#endif - } - - -#ifdef YY_USE_PROTOS -void yy_flush_buffer( YY_BUFFER_STATE b ) -#else -void yy_flush_buffer( b ) -YY_BUFFER_STATE b; -#endif - - { - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == yy_current_buffer ) - yy_load_buffer_state(); - } - - -#ifndef YY_NO_SCAN_BUFFER -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) -#else -YY_BUFFER_STATE yy_scan_buffer( base, size ) -char *base; -yy_size_t size; -#endif - { - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - yy_switch_to_buffer( b ); - - return b; - } -#endif - - -#ifndef YY_NO_SCAN_STRING -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_string( yyconst char *str ) -#else -YY_BUFFER_STATE yy_scan_string( str ) -yyconst char *str; -#endif - { - int len; - for ( len = 0; str[len]; ++len ) - ; - - return yy_scan_bytes( str, len ); - } -#endif - - -#ifndef YY_NO_SCAN_BYTES -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len ) -#else -YY_BUFFER_STATE yy_scan_bytes( bytes, len ) -yyconst char *bytes; -int len; -#endif - { - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = len + 2; - buf = (char *) yy_flex_alloc( n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - - for ( i = 0; i < len; ++i ) - buf[i] = bytes[i]; - - buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; - - b = yy_scan_buffer( buf, n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; - } -#endif - - -#ifndef YY_NO_PUSH_STATE -#ifdef YY_USE_PROTOS -static void yy_push_state( int new_state ) -#else -static void yy_push_state( new_state ) -int new_state; -#endif - { - if ( yy_start_stack_ptr >= yy_start_stack_depth ) - { - yy_size_t new_size; - - yy_start_stack_depth += YY_START_STACK_INCR; - new_size = yy_start_stack_depth * sizeof( int ); - - if ( ! yy_start_stack ) - yy_start_stack = (int *) yy_flex_alloc( new_size ); - - else - yy_start_stack = (int *) yy_flex_realloc( - (void *) yy_start_stack, new_size ); - - if ( ! yy_start_stack ) - YY_FATAL_ERROR( - "out of memory expanding start-condition stack" ); - } - - yy_start_stack[yy_start_stack_ptr++] = YY_START; - - BEGIN(new_state); - } -#endif - - -#ifndef YY_NO_POP_STATE -static void yy_pop_state() - { - if ( --yy_start_stack_ptr < 0 ) - YY_FATAL_ERROR( "start-condition stack underflow" ); - - BEGIN(yy_start_stack[yy_start_stack_ptr]); - } -#endif - - -#ifndef YY_NO_TOP_STATE -static int yy_top_state() - { - return yy_start_stack[yy_start_stack_ptr - 1]; - } -#endif - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -#ifdef YY_USE_PROTOS -static void yy_fatal_error( yyconst char msg[] ) -#else -static void yy_fatal_error( msg ) -char msg[]; -#endif - { - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); - } - - - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - yytext[yyleng] = yy_hold_char; \ - yy_c_buf_p = yytext + n - YY_MORE_ADJ; \ - yy_hold_char = *yy_c_buf_p; \ - *yy_c_buf_p = '\0'; \ - yyleng = n; \ - } \ - while ( 0 ) - - -/* Internal utility routines. */ - -#ifndef yytext_ptr -#ifdef YY_USE_PROTOS -static void yy_flex_strncpy( char *s1, yyconst char *s2, int n ) -#else -static void yy_flex_strncpy( s1, s2, n ) -char *s1; -yyconst char *s2; -int n; -#endif - { - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; - } -#endif - - -#ifdef YY_USE_PROTOS -static void *yy_flex_alloc( yy_size_t size ) -#else -static void *yy_flex_alloc( size ) -yy_size_t size; -#endif - { - return (void *) malloc( size ); - } - -#ifdef YY_USE_PROTOS -static void *yy_flex_realloc( void *ptr, yy_size_t size ) -#else -static void *yy_flex_realloc( ptr, size ) -void *ptr; -yy_size_t size; -#endif - { - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); - } - -#ifdef YY_USE_PROTOS -static void yy_flex_free( void *ptr ) -#else -static void yy_flex_free( ptr ) -void *ptr; -#endif - { - free( ptr ); - } - -#if YY_MAIN -int main() - { - yylex(); - return 0; - } -#endif -#line 30 "et_lex.lex.l" - -/* - * Copyright 2000, International Business Machines Corporation and others. - * All Rights Reserved. - * - * This software has been released under the terms of the IBM Public - * License. For details, see the LICENSE file in the top-level source - * directory or online at http://www.openafs.org/dl/license10.html - */ -int yywrap(void) { - return 1; -} +/* A lexical scanner generated by flex */ + +/* Scanner skeleton version: + * $Header$ + */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 + +#include + + +/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ +#ifdef c_plusplus +#ifndef __cplusplus +#define __cplusplus +#endif +#endif + + +#ifdef __cplusplus + +#include +#include + +/* Use prototypes in function declarations. */ +#define YY_USE_PROTOS + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_PROTOS +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef __TURBOC__ + #pragma warn -rch + #pragma warn -use +#include +#include +#define YY_USE_CONST +#define YY_USE_PROTOS +#endif + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + + +#ifdef YY_USE_PROTOS +#define YY_PROTO(proto) proto +#else +#define YY_PROTO(proto) () +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yy_start = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yy_start - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#define YY_BUF_SIZE 16384 + +typedef struct yy_buffer_state *YY_BUFFER_STATE; + +extern int yyleng; +extern FILE *yyin, *yyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + +/* The funky do-while in the following #define is used to turn the definition + * int a single C statement (which needs a semi-colon terminator). This + * avoids problems with code like: + * + * if ( condition_holds ) + * yyless( 5 ); + * else + * do_something_else(); + * + * Prior to using the do-while the compiler would get upset at the + * "else" because it interpreted the "if" statement as being all + * done when it reached the ';' after the yyless() call. + */ + +/* Return all but the first 'n' matched characters back to the input stream. */ + +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + *yy_cp = yy_hold_char; \ + yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, yytext_ptr ) + +/* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + */ +typedef unsigned int yy_size_t; + + +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + }; + +static YY_BUFFER_STATE yy_current_buffer = 0; + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + */ +#define YY_CURRENT_BUFFER yy_current_buffer + + +/* yy_hold_char holds the character lost when yytext is formed. */ +static char yy_hold_char; + +static int yy_n_chars; /* number of characters read into yy_ch_buf */ + + +int yyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = (char *) 0; +static int yy_init = 1; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow yywrap()'s to do buffer switches + * instead of setting up a fresh yyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void yyrestart YY_PROTO(( FILE *input_file )); + +void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); +void yy_load_buffer_state YY_PROTO(( void )); +YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); +void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); +void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); +void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); +#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) + +YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); +YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *str )); +YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); + +static void *yy_flex_alloc YY_PROTO(( yy_size_t )); +static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); +static void yy_flex_free YY_PROTO(( void * )); + +#define yy_new_buffer yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! yy_current_buffer ) \ + yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ + yy_current_buffer->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! yy_current_buffer ) \ + yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ + yy_current_buffer->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (yy_current_buffer->yy_at_bol) + + +#define YY_USES_REJECT +typedef unsigned char YY_CHAR; +FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; +typedef int yy_state_type; +#define YY_FLEX_LEX_COMPAT +extern int yylineno; +int yylineno = 1; +extern char yytext[]; + + +static yy_state_type yy_get_previous_state YY_PROTO(( void )); +static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); +static int yy_get_next_buffer YY_PROTO(( void )); +static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yytext_ptr = yy_bp; \ + yytext_ptr -= yy_more_len; \ + yyleng = (int) (yy_cp - yytext_ptr); \ + yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + if ( yyleng >= YYLMAX ) \ + YY_FATAL_ERROR( "token too large, exceeds YYLMAX" ); \ + yy_flex_strncpy( yytext, yytext_ptr, yyleng + 1 ); \ + yy_c_buf_p = yy_cp; + +#define YY_NUM_RULES 17 +#define YY_END_OF_BUFFER 18 +static yyconst short int yy_acclist[83] = + { 0, + 14, 14, 18, 16, 17, 10, 16, 17, 11, 17, + 16, 17, 16, 17, 16, 17, 13, 14, 16, 17, + 14, 16, 17, 14, 16, 17, 14, 16, 17, 14, + 16, 17, 14, 16, 17, 12, 15, 13, 13, 14, + 14, 14, 4, 14, 14, 14, 2, 14, 8, 14, + 14, 14, 13, 14, 5, 14, 14, 14, 14, 9, + 14, 14, 14, 14, 14, 6, 14, 14, 14, 7, + 14, 14, 14, 14, 14, 14, 14, 3, 14, 14, + 1, 14 + } ; + +static yyconst short int yy_accept[58] = + { 0, + 1, 2, 3, 4, 6, 9, 11, 13, 15, 17, + 21, 24, 27, 30, 33, 36, 36, 37, 37, 38, + 38, 39, 41, 42, 43, 45, 46, 47, 49, 51, + 52, 53, 54, 55, 57, 58, 59, 60, 62, 63, + 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, + 76, 77, 78, 80, 81, 83, 83 + } ; + +static yyconst int yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 4, 5, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 6, 1, 1, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, + 1, 1, 1, 1, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 1, 1, 1, 1, 9, 1, 10, 11, 12, 13, + + 14, 15, 8, 8, 16, 8, 8, 17, 8, 18, + 19, 20, 8, 21, 22, 23, 8, 8, 8, 24, + 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst int yy_meta[25] = + { 0, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2 + } ; + +static yyconst short int yy_base[60] = + { 0, + 0, 0, 73, 74, 74, 74, 68, 68, 19, 63, + 0, 59, 15, 16, 47, 63, 74, 63, 74, 24, + 58, 57, 0, 41, 0, 49, 40, 0, 0, 47, + 45, 51, 43, 0, 37, 41, 39, 0, 32, 28, + 35, 41, 0, 25, 16, 0, 29, 37, 33, 34, + 30, 20, 0, 21, 0, 74, 39, 41, 30 + } ; + +static yyconst short int yy_def[60] = + { 0, + 56, 1, 56, 56, 56, 56, 57, 58, 56, 59, + 59, 59, 59, 59, 59, 57, 56, 58, 56, 56, + 56, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 56, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 0, 56, 56, 56 + } ; + +static yyconst short int yy_nxt[99] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 11, 11, 11, + 12, 11, 11, 13, 11, 14, 11, 11, 11, 15, + 11, 11, 11, 11, 20, 21, 25, 47, 29, 20, + 21, 23, 26, 30, 55, 27, 54, 28, 48, 16, + 16, 18, 18, 53, 52, 51, 50, 49, 46, 45, + 44, 43, 42, 41, 40, 39, 38, 32, 37, 36, + 35, 34, 33, 22, 32, 19, 17, 31, 24, 22, + 19, 17, 56, 3, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56 + + } ; + +static yyconst short int yy_chk[99] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 9, 9, 13, 45, 14, 20, + 20, 59, 13, 14, 54, 13, 52, 13, 45, 57, + 57, 58, 58, 51, 50, 49, 48, 47, 44, 42, + 41, 40, 39, 37, 36, 35, 33, 32, 31, 30, + 27, 26, 24, 22, 21, 18, 16, 15, 12, 10, + 8, 7, 3, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56 + + } ; + +static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr; +static char *yy_full_match; +static int yy_lp; +#define REJECT \ +{ \ +*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \ +yy_cp = yy_full_match; /* restore poss. backed-over text */ \ +++yy_lp; \ +goto find_rule; \ +} +static int yy_more_flag = 0; +static int yy_more_len = 0; +#define yymore() (yy_more_flag = 1) +#define YY_MORE_ADJ yy_more_len +#ifndef YYLMAX +#define YYLMAX 8192 +#endif + +char yytext[YYLMAX]; +char *yytext_ptr; +#line 1 "et_lex.lex.l" +#define INITIAL 0 + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap YY_PROTO(( void )); +#else +extern int yywrap YY_PROTO(( void )); +#endif +#endif + +#ifndef YY_NO_UNPUT +static void yyunput YY_PROTO(( int c, char *buf_ptr )); +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int )); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput YY_PROTO(( void )); +#else +static int input YY_PROTO(( void )); +#endif +#endif + +#if YY_STACK_USED +static int yy_start_stack_ptr = 0; +static int yy_start_stack_depth = 0; +static int *yy_start_stack = 0; +#ifndef YY_NO_PUSH_STATE +static void yy_push_state YY_PROTO(( int new_state )); +#endif +#ifndef YY_NO_POP_STATE +static void yy_pop_state YY_PROTO(( void )); +#endif +#ifndef YY_NO_TOP_STATE +static int yy_top_state YY_PROTO(( void )); +#endif + +#else +#define YY_NO_PUSH_STATE 1 +#define YY_NO_POP_STATE 1 +#define YY_NO_TOP_STATE 1 +#endif + +#ifdef YY_MALLOC_DECL +YY_MALLOC_DECL +#else +#if __STDC__ +#ifndef __cplusplus +#include +#endif +#else +/* Just try to get by without declaring the routines. This will fail + * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) + * or sizeof(void*) != sizeof(int). + */ +#endif +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ + +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( yy_current_buffer->yy_is_interactive ) \ + { \ + int c = '*', n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ + && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL int yylex YY_PROTO(( void )) +#endif + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +YY_DECL + { + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + +#line 4 "et_lex.lex.l" + + + + if ( yy_init ) + { + yy_init = 0; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yy_start ) + yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! yy_current_buffer ) + yy_current_buffer = + yy_create_buffer( yyin, YY_BUF_SIZE ); + + yy_load_buffer_state(); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_more_len = 0; + if ( yy_more_flag ) + { + yy_more_len = yyleng; + yy_more_flag = 0; + } + yy_cp = yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yy_start; + yy_state_ptr = yy_state_buf; + *yy_state_ptr++ = yy_current_state; +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 57 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + *yy_state_ptr++ = yy_current_state; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 74 ); + +yy_find_action: + yy_current_state = *--yy_state_ptr; + yy_lp = yy_accept[yy_current_state]; +find_rule: /* we branch to this label when backing up */ + for ( ; ; ) /* until we find what rule we matched */ + { + if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] ) + { + yy_act = yy_acclist[yy_lp]; + { + yy_full_match = yy_cp; + break; + } + } + --yy_cp; + yy_current_state = *--yy_state_ptr; + yy_lp = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + + if ( yy_act != YY_END_OF_BUFFER ) + { + int yyl; + for ( yyl = 0; yyl < yyleng; ++yyl ) + if ( yytext[yyl] == '\n' ) + ++yylineno; + } + +do_action: /* This label is used only to access EOF actions. */ + + + switch ( yy_act ) + { /* beginning of action switch */ +case 1: +YY_RULE_SETUP +#line 6 "et_lex.lex.l" +return ERROR_TABLE; + YY_BREAK +case 2: +YY_RULE_SETUP +#line 7 "et_lex.lex.l" +return ERROR_TABLE; + YY_BREAK +case 3: +YY_RULE_SETUP +#line 8 "et_lex.lex.l" +return ERROR_CODE_ENTRY; + YY_BREAK +case 4: +YY_RULE_SETUP +#line 9 "et_lex.lex.l" +return ERROR_CODE_ENTRY; + YY_BREAK +case 5: +YY_RULE_SETUP +#line 10 "et_lex.lex.l" +return END; + YY_BREAK +case 6: +YY_RULE_SETUP +#line 11 "et_lex.lex.l" +return INDEX; + YY_BREAK +case 7: +YY_RULE_SETUP +#line 12 "et_lex.lex.l" +return PREFIX; + YY_BREAK +case 8: +YY_RULE_SETUP +#line 13 "et_lex.lex.l" +return ID; + YY_BREAK +case 9: +YY_RULE_SETUP +#line 14 "et_lex.lex.l" +return BASE; + YY_BREAK +case 10: +YY_RULE_SETUP +#line 16 "et_lex.lex.l" +; + YY_BREAK +case 11: +YY_RULE_SETUP +#line 17 "et_lex.lex.l" +return NL; + YY_BREAK +case 12: +YY_RULE_SETUP +#line 19 "et_lex.lex.l" +{ register char *p; yylval.dynstr = ds((char *)yytext+1); + if ((p=strrchr(yylval.dynstr, '"'))) *p='\0'; + return QUOTED_STRING; + } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 24 "et_lex.lex.l" +{ yylval.dynstr = ds((char *)yytext); return NUMBER; } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 25 "et_lex.lex.l" +{ yylval.dynstr = ds((char *)yytext); return STRING; } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 27 "et_lex.lex.l" +return NL; + YY_BREAK +case 16: +YY_RULE_SETUP +#line 29 "et_lex.lex.l" +{ return (*yytext); } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 30 "et_lex.lex.l" +ECHO; + YY_BREAK + case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yy_hold_char; + + if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between yy_current_buffer and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yy_n_chars = yy_current_buffer->yy_n_chars; + yy_current_buffer->yy_input_file = yyin; + yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state(); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer() ) + { + case EOB_ACT_END_OF_FILE: + { + yy_did_buffer_switch_on_eof = 0; + + if ( yywrap() ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yy_c_buf_p = + yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state(); + + yy_cp = yy_c_buf_p; + yy_bp = yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yy_c_buf_p = + &yy_current_buffer->yy_ch_buf[yy_n_chars]; + + yy_current_state = yy_get_previous_state(); + + yy_cp = yy_c_buf_p; + yy_bp = yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of yylex */ + + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ + +static int yy_get_next_buffer() + { + register char *dest = yy_current_buffer->yy_ch_buf; + register char *source = yytext_ptr; + register int number_to_move, i; + int ret_val; + + if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( yy_current_buffer->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a singled characater, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + yy_n_chars = 0; + + else + { + int num_to_read = + yy_current_buffer->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ +#ifdef YY_USES_REJECT + YY_FATAL_ERROR( +"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); +#else + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = yy_current_buffer; + + int yy_c_buf_p_offset = + (int) (yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yy_flex_realloc( (void *) b->yy_ch_buf, + b->yy_buf_size + 2 ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = yy_current_buffer->yy_buf_size - + number_to_move - 1; +#endif + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), + yy_n_chars, num_to_read ); + } + + if ( yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + yy_current_buffer->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + yy_n_chars += number_to_move; + yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; + yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yytext_ptr = &yy_current_buffer->yy_ch_buf[0]; + + return ret_val; + } + + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + +static yy_state_type yy_get_previous_state() + { + register yy_state_type yy_current_state; + register char *yy_cp; + + yy_current_state = yy_start; + yy_state_ptr = yy_state_buf; + *yy_state_ptr++ = yy_current_state; + + for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 57 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + *yy_state_ptr++ = yy_current_state; + } + + return yy_current_state; + } + + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + +#ifdef YY_USE_PROTOS +static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) +#else +static yy_state_type yy_try_NUL_trans( yy_current_state ) +yy_state_type yy_current_state; +#endif + { + register int yy_is_jam; + + register YY_CHAR yy_c = 1; + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 57 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + *yy_state_ptr++ = yy_current_state; + yy_is_jam = (yy_current_state == 56); + + return yy_is_jam ? 0 : yy_current_state; + } + + +#ifndef YY_NO_UNPUT +#ifdef YY_USE_PROTOS +static void yyunput( int c, register char *yy_bp ) +#else +static void yyunput( c, yy_bp ) +int c; +register char *yy_bp; +#endif + { + register char *yy_cp = yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yy_hold_char; + + if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + register int number_to_move = yy_n_chars + 2; + register char *dest = &yy_current_buffer->yy_ch_buf[ + yy_current_buffer->yy_buf_size + 2]; + register char *source = + &yy_current_buffer->yy_ch_buf[number_to_move]; + + while ( source > yy_current_buffer->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + yy_n_chars = yy_current_buffer->yy_buf_size; + + if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + if ( c == '\n' ) + --yylineno; + + yytext_ptr = yy_bp; + yy_hold_char = *yy_cp; + yy_c_buf_p = yy_cp; + } +#endif /* ifndef YY_NO_UNPUT */ + + +#ifdef __cplusplus +static int yyinput() +#else +static int input() +#endif + { + int c; + + *yy_c_buf_p = yy_hold_char; + + if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] ) + /* This was really a NUL. */ + *yy_c_buf_p = '\0'; + + else + { /* need more input */ + yytext_ptr = yy_c_buf_p; + ++yy_c_buf_p; + + switch ( yy_get_next_buffer() ) + { + case EOB_ACT_END_OF_FILE: + { + if ( yywrap() ) + { + yy_c_buf_p = + yytext_ptr + YY_MORE_ADJ; + return EOF; + } + + if ( ! yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; + break; + + case EOB_ACT_LAST_MATCH: +#ifdef __cplusplus + YY_FATAL_ERROR( + "unexpected last match in yyinput()" ); +#else + YY_FATAL_ERROR( + "unexpected last match in input()" ); +#endif + } + } + } + + c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */ + *yy_c_buf_p = '\0'; /* preserve yytext */ + yy_hold_char = *++yy_c_buf_p; + + if ( c == '\n' ) + ++yylineno; + + return c; + } + + +#ifdef YY_USE_PROTOS +void yyrestart( FILE *input_file ) +#else +void yyrestart( input_file ) +FILE *input_file; +#endif + { + if ( ! yy_current_buffer ) + yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); + + yy_init_buffer( yy_current_buffer, input_file ); + yy_load_buffer_state(); + } + + +#ifdef YY_USE_PROTOS +void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) +#else +void yy_switch_to_buffer( new_buffer ) +YY_BUFFER_STATE new_buffer; +#endif + { + if ( yy_current_buffer == new_buffer ) + return; + + if ( yy_current_buffer ) + { + /* Flush out information for old buffer. */ + *yy_c_buf_p = yy_hold_char; + yy_current_buffer->yy_buf_pos = yy_c_buf_p; + yy_current_buffer->yy_n_chars = yy_n_chars; + } + + yy_current_buffer = new_buffer; + yy_load_buffer_state(); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yy_did_buffer_switch_on_eof = 1; + } + + +#ifdef YY_USE_PROTOS +void yy_load_buffer_state( void ) +#else +void yy_load_buffer_state() +#endif + { + yy_n_chars = yy_current_buffer->yy_n_chars; + yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; + yyin = yy_current_buffer->yy_input_file; + yy_hold_char = *yy_c_buf_p; + } + + +#ifdef YY_USE_PROTOS +YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) +#else +YY_BUFFER_STATE yy_create_buffer( file, size ) +FILE *file; +int size; +#endif + { + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file ); + + return b; + } + + +#ifdef YY_USE_PROTOS +void yy_delete_buffer( YY_BUFFER_STATE b ) +#else +void yy_delete_buffer( b ) +YY_BUFFER_STATE b; +#endif + { + if ( ! b ) + return; + + if ( b == yy_current_buffer ) + yy_current_buffer = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yy_flex_free( (void *) b->yy_ch_buf ); + + yy_flex_free( (void *) b ); + } + + +#ifndef YY_ALWAYS_INTERACTIVE +#ifndef YY_NEVER_INTERACTIVE +extern int isatty YY_PROTO(( int )); +#endif +#endif + +#ifdef YY_USE_PROTOS +void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) +#else +void yy_init_buffer( b, file ) +YY_BUFFER_STATE b; +FILE *file; +#endif + + + { + yy_flush_buffer( b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + +#if YY_ALWAYS_INTERACTIVE + b->yy_is_interactive = 1; +#else +#if YY_NEVER_INTERACTIVE + b->yy_is_interactive = 0; +#else + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; +#endif +#endif + } + + +#ifdef YY_USE_PROTOS +void yy_flush_buffer( YY_BUFFER_STATE b ) +#else +void yy_flush_buffer( b ) +YY_BUFFER_STATE b; +#endif + + { + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == yy_current_buffer ) + yy_load_buffer_state(); + } + + +#ifndef YY_NO_SCAN_BUFFER +#ifdef YY_USE_PROTOS +YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) +#else +YY_BUFFER_STATE yy_scan_buffer( base, size ) +char *base; +yy_size_t size; +#endif + { + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b ); + + return b; + } +#endif + + +#ifndef YY_NO_SCAN_STRING +#ifdef YY_USE_PROTOS +YY_BUFFER_STATE yy_scan_string( yyconst char *str ) +#else +YY_BUFFER_STATE yy_scan_string( str ) +yyconst char *str; +#endif + { + int len; + for ( len = 0; str[len]; ++len ) + ; + + return yy_scan_bytes( str, len ); + } +#endif + + +#ifndef YY_NO_SCAN_BYTES +#ifdef YY_USE_PROTOS +YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len ) +#else +YY_BUFFER_STATE yy_scan_bytes( bytes, len ) +yyconst char *bytes; +int len; +#endif + { + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = len + 2; + buf = (char *) yy_flex_alloc( n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < len; ++i ) + buf[i] = bytes[i]; + + buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; + } +#endif + + +#ifndef YY_NO_PUSH_STATE +#ifdef YY_USE_PROTOS +static void yy_push_state( int new_state ) +#else +static void yy_push_state( new_state ) +int new_state; +#endif + { + if ( yy_start_stack_ptr >= yy_start_stack_depth ) + { + yy_size_t new_size; + + yy_start_stack_depth += YY_START_STACK_INCR; + new_size = yy_start_stack_depth * sizeof( int ); + + if ( ! yy_start_stack ) + yy_start_stack = (int *) yy_flex_alloc( new_size ); + + else + yy_start_stack = (int *) yy_flex_realloc( + (void *) yy_start_stack, new_size ); + + if ( ! yy_start_stack ) + YY_FATAL_ERROR( + "out of memory expanding start-condition stack" ); + } + + yy_start_stack[yy_start_stack_ptr++] = YY_START; + + BEGIN(new_state); + } +#endif + + +#ifndef YY_NO_POP_STATE +static void yy_pop_state() + { + if ( --yy_start_stack_ptr < 0 ) + YY_FATAL_ERROR( "start-condition stack underflow" ); + + BEGIN(yy_start_stack[yy_start_stack_ptr]); + } +#endif + + +#ifndef YY_NO_TOP_STATE +static int yy_top_state() + { + return yy_start_stack[yy_start_stack_ptr - 1]; + } +#endif + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +#ifdef YY_USE_PROTOS +static void yy_fatal_error( yyconst char msg[] ) +#else +static void yy_fatal_error( msg ) +char msg[]; +#endif + { + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); + } + + + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + yytext[yyleng] = yy_hold_char; \ + yy_c_buf_p = yytext + n - YY_MORE_ADJ; \ + yy_hold_char = *yy_c_buf_p; \ + *yy_c_buf_p = '\0'; \ + yyleng = n; \ + } \ + while ( 0 ) + + +/* Internal utility routines. */ + +#ifndef yytext_ptr +#ifdef YY_USE_PROTOS +static void yy_flex_strncpy( char *s1, yyconst char *s2, int n ) +#else +static void yy_flex_strncpy( s1, s2, n ) +char *s1; +yyconst char *s2; +int n; +#endif + { + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; + } +#endif + + +#ifdef YY_USE_PROTOS +static void *yy_flex_alloc( yy_size_t size ) +#else +static void *yy_flex_alloc( size ) +yy_size_t size; +#endif + { + return (void *) malloc( size ); + } + +#ifdef YY_USE_PROTOS +static void *yy_flex_realloc( void *ptr, yy_size_t size ) +#else +static void *yy_flex_realloc( ptr, size ) +void *ptr; +yy_size_t size; +#endif + { + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); + } + +#ifdef YY_USE_PROTOS +static void yy_flex_free( void *ptr ) +#else +static void yy_flex_free( ptr ) +void *ptr; +#endif + { + free( ptr ); + } + +#if YY_MAIN +int main() + { + yylex(); + return 0; + } +#endif +#line 30 "et_lex.lex.l" + +/* + * Copyright 2000, International Business Machines Corporation and others. + * All Rights Reserved. + * + * This software has been released under the terms of the IBM Public + * License. For details, see the LICENSE file in the top-level source + * directory or online at http://www.openafs.org/dl/license10.html + */ +int yywrap(void) { + return 1; +} diff --git a/src/config/Makefile.config.in b/src/config/Makefile.config.in index 62ac27b775..dc9e24852e 100644 --- a/src/config/Makefile.config.in +++ b/src/config/Makefile.config.in @@ -32,6 +32,7 @@ AS = @AS@ AFSD_LIBS = @AFSD_LIBS@ AFSD_LDFLAGS = @AFSD_LDFLAGS@ CC = @CC@ +CPP = @CPP@ CCOBJ = @CCOBJ@ CCXPG2 = @CCXPG2@ CFLAGS = @CFLAGS@ @@ -58,6 +59,8 @@ MT_CC = @MT_CC@ MT_CFLAGS = @MT_CFLAGS@ MT_LIBS = @MT_LIBS@ MV = @MV@ +NO_STRIP_BIN = @NO_STRIP_BIN@ +NO_STRIP_KRB = @NO_STRIP_KRB@ OPTMZ = @OPTMZ@ PAM_CFLAGS = @PAM_CFLAGS@ PAM_LIBS = @PAM_LIBS@ @@ -116,7 +119,7 @@ KERNELDIR = ../libafs # Build helper apps # COMPILE_ET = ${TOP_OBJDIR}/src/comerr/compile_et -INSTALL = ${TOP_OBJDIR}/src/pinstall/pinstall +INSTALL = ${TOP_OBJDIR}/src/pinstall/pinstall ${NO_STRIP_BIN} INSTALLex = ${INSTALL} -m 755 RXGEN = ${TOP_OBJDIR}/src/rxgen/rxgen SHELL = /bin/sh diff --git a/src/config/NTMakefile.amd64_w2k b/src/config/NTMakefile.amd64_w2k index 0c050a873d..1cff269034 100644 --- a/src/config/NTMakefile.amd64_w2k +++ b/src/config/NTMakefile.amd64_w2k @@ -84,7 +84,7 @@ LIB = $(AFSDEV_LIB) #define used in WinNT/2000 installation and program version display AFSPRODUCT_VER_MAJOR=1 AFSPRODUCT_VER_MINOR=5 -AFSPRODUCT_VER_PATCH=2500 +AFSPRODUCT_VER_PATCH=2800 AFSPRODUCT_VER_BUILD=0 AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH) diff --git a/src/config/NTMakefile.i386_nt40 b/src/config/NTMakefile.i386_nt40 index a2e74f40b8..df220e5a25 100644 --- a/src/config/NTMakefile.i386_nt40 +++ b/src/config/NTMakefile.i386_nt40 @@ -84,7 +84,7 @@ LIB = $(AFSDEV_LIB) #define used in WinNT/2000 installation and program version display AFSPRODUCT_VER_MAJOR=1 AFSPRODUCT_VER_MINOR=5 -AFSPRODUCT_VER_PATCH=2500 +AFSPRODUCT_VER_PATCH=2800 AFSPRODUCT_VER_BUILD=0 AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH) diff --git a/src/config/NTMakefile.i386_w2k b/src/config/NTMakefile.i386_w2k index 413e5b0d7c..106e40f974 100644 --- a/src/config/NTMakefile.i386_w2k +++ b/src/config/NTMakefile.i386_w2k @@ -84,7 +84,7 @@ LIB = $(AFSDEV_LIB) #define used in WinNT/2000 installation and program version display AFSPRODUCT_VER_MAJOR=1 AFSPRODUCT_VER_MINOR=5 -AFSPRODUCT_VER_PATCH=2500 +AFSPRODUCT_VER_PATCH=2800 AFSPRODUCT_VER_BUILD=0 AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH) diff --git a/src/config/afs_args.h b/src/config/afs_args.h index 7860e77943..7e362e7d3a 100644 --- a/src/config/afs_args.h +++ b/src/config/afs_args.h @@ -87,6 +87,14 @@ /* For SGI, this can't interfere with any of the 64 bit inode calls. */ #define AFSOP_RXLISTENER_DAEMON 48 /* starts kernel RX listener */ +/* skip 64 bit calls */ +#define AFSOP_CACHEBASEDIR 50 /* cache base dir */ +#define AFSOP_CACHEDIRS 51 /* number of files per dir */ +#define AFSOP_CACHEFILES 52 /* number of files */ + +#define AFSOP_SETINT 60 /* we should just set key/value pairs + for things which are just ints */ + /* these are for initialization flags */ #define AFSCALL_INIT_MEMCACHE 0x1 @@ -227,4 +235,10 @@ struct afssysargs { #define SYSCALL_DEV_FNAME "/dev/openafs_ioctl" #endif +#ifdef AFS_CACHE_VNODE_PATH +#define AFS_CACHE_CELLS_INODE -2 +#define AFS_CACHE_ITEMS_INODE -3 +#define AFS_CACHE_VOLUME_INODE -4 +#endif + #endif /* _AFS_ARGS_H_ */ diff --git a/src/config/mc.c b/src/config/mc.c index b09863868d..cece05c57c 100644 --- a/src/config/mc.c +++ b/src/config/mc.c @@ -16,9 +16,7 @@ #include #include -#ifdef HAVE_STRING_H #include -#endif #define TOK_DONTUSE 1 /* Don't copy if match and this flag is set. */ struct token { diff --git a/src/config/param.amd64_nbsd30.h b/src/config/param.amd64_nbsd30.h new file mode 100644 index 0000000000..7d7e170202 --- /dev/null +++ b/src/config/param.amd64_nbsd30.h @@ -0,0 +1,21 @@ +#ifndef AFS_AMD64_PARAM_H +#define AFS_AMD64_PARAM_H + +#define AFS_X86_XBSD_ENV 1 +#define AFS_X86_ENV 1 +#define AFSLITTLE_ENDIAN 1 + +#define SYS_NAME "amd64_nbsd30" +#define SYS_NAME_ID SYS_NAME_ID_amd64_nbsd30 + +#define AFS_64BITPOINTER_ENV 1 +#ifndef UKERNEL +/* This section for kernel libafs compiles only */ + +#else /* !defined(UKERNEL) */ + +/* This section for user space compiles only */ + +#endif /* !defined(UKERNEL) */ + +#endif /* AFS_AMD64_PARAM_H */ diff --git a/src/config/param.amd64_nbsd40.h b/src/config/param.amd64_nbsd40.h new file mode 100644 index 0000000000..f6f3b13f7a --- /dev/null +++ b/src/config/param.amd64_nbsd40.h @@ -0,0 +1,21 @@ +#ifndef AFS_AMD64_PARAM_H +#define AFS_AMD64_PARAM_H + +#define AFS_X86_XBSD_ENV 1 +#define AFS_X86_ENV 1 +#define AFSLITTLE_ENDIAN 1 + +#define SYS_NAME "amd64_nbsd40" +#define SYS_NAME_ID SYS_NAME_ID_amd64_nbsd40 + +#define AFS_64BITPOINTER_ENV 1 +#ifndef UKERNEL +/* This section for kernel libafs compiles only */ + +#else /* !defined(UKERNEL) */ + +/* This section for user space compiles only */ + +#endif /* !defined(UKERNEL) */ + +#endif /* AFS_AMD64_PARAM_H */ diff --git a/src/config/param.nbsd30.h b/src/config/param.nbsd30.h index 85c0b5113e..53f344c2d3 100644 --- a/src/config/param.nbsd30.h +++ b/src/config/param.nbsd30.h @@ -21,6 +21,7 @@ #define AFS_NBSD15_ENV 1 #define AFS_NBSD16_ENV 1 #define AFS_NBSD20_ENV 1 +#define AFS_NBSD30_ENV 1 #define AFS_NONFSTRANS 1 #define AFS_KERBEROS_ENV 1 diff --git a/src/config/param.nbsd40.h b/src/config/param.nbsd40.h new file mode 100644 index 0000000000..6868bd3038 --- /dev/null +++ b/src/config/param.nbsd40.h @@ -0,0 +1,160 @@ +/* NetBSD shared section */ + +#ifndef AFS_PARAM_COMMON_H +#define AFS_PARAM_COMMON_H 1 + +#define AFS_64BIT_ENV 1 +#define AFS_NAMEI_ENV 1 /* User space interface to file system */ +#define AFS_64BIT_IOPS_ENV 1 /* Needed for NAMEI */ +#define AFS_64BIT_CLIENT 1 + +#define AFS_MOUNT_AFS "afs" /* The name of the filesystem type. */ +#define AFS_SYSCALL 210 + +#ifndef MOUNT_AFS +#define MOUNT_AFS AFS_MOUNT_AFS +#endif + +#define AFS_XBSD_ENV 1 /* {Free,Open,Net}BSD */ + +#define AFS_NBSD_ENV 1 +#define AFS_NBSD15_ENV 1 +#define AFS_NBSD16_ENV 1 +#define AFS_NBSD20_ENV 1 +#define AFS_NBSD30_ENV 1 +#define AFS_NBSD40_ENV 1 +#define AFS_NONFSTRANS 1 +#define AFS_KERBEROS_ENV 1 + +#define AFS_VFSINCL_ENV 1 + +#define AFS_HAVE_FFS 1 /* Use system's ffs. */ + +#if !defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__) && !defined(IGNORE_STDS_H) +#define AFS_HAVE_STATVFS 1 /* System supports statvfs */ +#endif + +#ifndef UKERNEL + +#if !defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__) && !defined(IGNORE_STDS_H) +#include +#endif + +#define FTRUNC O_TRUNC + +#define IUPD 0x0010 +#define IACC 0x0020 +#define ICHG 0x0040 +#define IMOD 0x0080 + +#define IN_LOCK(ip) lockmgr(&ip->i_lock, LK_EXCLUSIVE, \ + NULL, curproc) +#define IN_UNLOCK(ip) lockmgr(&ip->i_lock, LK_RELEASE, \ + NULL, curproc) + +#include + +#define AFS_VM_RDWR_ENV 1 +#define AFS_VFS_ENV 1 +#define AFS_GREEDY43_ENV 1 + +#define AFS_GCPAGS 0 /* if nonzero, garbage collect PAGs */ +#define AFS_USE_GETTIMEOFDAY 1 /* use gettimeofday to implement rx clock */ + +/* Extra kernel definitions (from kdefs file) */ +#ifdef _KERNEL +#define AFS_GLOBAL_SUNLOCK 1 +#define AFS_VFS34 1 /* What is VFS34??? */ +#define AFS_SHORTGID 1 /* are group id's short? */ +#define afsio_iov uio_iov +#define afsio_iovcnt uio_iovcnt +#define afsio_offset uio_offset +#define afsio_seg uio_segflg +#define afsio_resid uio_resid +#define AFS_UIOSYS UIO_SYSSPACE +#define AFS_UIOUSER UIO_USERSPACE +#define AFS_CLBYTES CLBYTES +#define osi_GetTime(x) microtime(x) +#define AFS_KALLOC(x) kalloc(x) +#define AFS_KFREE(x,y) kfree(x,y) +#define v_count v_usecount +#define v_vfsp v_mount +#define vfs_bsize mnt_stat.f_bsize +#define vfs_fsid mnt_stat.f_fsid +#define va_nodeid va_fileid +#define vfs_vnodecovered mnt_vnodecovered +#define direct dirent +#define vnode_t struct vnode + +#ifndef MUTEX_DEFAULT +#define MUTEX_DEFAULT 0 +#endif /* MUTEX_DEFAULT */ + +#ifndef SSYS +#define SSYS 0x00002 +#endif /* SSYS */ + +#define p_rcred p_ucred + +#define VN_RELE(vp) vrele(((struct vnode *)(vp))) +#define VN_HOLD(vp) VREF(((struct vnode *)(vp))) + +#if !defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__) && !defined(IGNORE_STDS_H) +enum vcexcl { NONEXCL, EXCL }; + +#ifdef KERNEL +#ifndef MIN +#define MIN(A,B) ((A) < (B) ? (A) : (B)) +#endif +#ifndef MAX +#define MAX(A,B) ((A) > (B) ? (A) : (B)) +#endif +#endif /* KERNEL */ + +#endif /* ! ASSEMBLER & ! __LANGUAGE_ASSEMBLY__ && !defined(IGNORE_STDS_H) */ +#endif /* _KERNEL */ + +#else /* !defined(UKERNEL) */ + + +/* This section for user space compiles only */ + +#define UKERNEL 1 /* user space kernel */ + +#include + +#define AFS_USERSPACE_IP_ADDR 1 +#define RXK_LISTENER_ENV 1 +#define AFS_GCPAGS 0 /* if nonzero, garbage collect PAGs */ + +#define afsio_iov uio_iov +#define afsio_iovcnt uio_iovcnt +#define afsio_offset uio_offset +#define afsio_seg uio_segflg +#define afsio_fmode uio_fmode +#define afsio_resid uio_resid +#define AFS_UIOSYS UIO_SYSSPACE +#define AFS_UIOUSER UIO_USERSPACE +#define AFS_CLBYTES MCLBYTES +#define AFS_MINCHANGE 2 +#define VATTR_NULL usr_vattr_null + +#define AFS_DIRENT +#ifndef CMSERVERPREF +#define CMSERVERPREF +#endif + +#if !defined(ASSEMBLER) && !defined(__LANGUAGE_ASSEMBLY__) && !defined(IGNORE_STDS_H) +#include +#include +#include +#include +#include +#include +#include +#include +#endif + +#endif /* !defined(UKERNEL) */ + +#endif /* AFS_PARAM_COMMON_H */ diff --git a/src/config/param.ppc_darwin_90.h b/src/config/param.ppc_darwin_90.h index ac74560cd2..a62b8556e7 100644 --- a/src/config/param.ppc_darwin_90.h +++ b/src/config/param.ppc_darwin_90.h @@ -30,6 +30,7 @@ #define AFS_SYSCALL 230 #define AFS_NAMEI_ENV 1 #define DARWIN_REFBASE 3 +#define AFS_CACHE_VNODE_PATH /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" diff --git a/src/config/param.x86_darwin_90.h b/src/config/param.x86_darwin_90.h index ac74560cd2..a62b8556e7 100644 --- a/src/config/param.x86_darwin_90.h +++ b/src/config/param.x86_darwin_90.h @@ -30,6 +30,7 @@ #define AFS_SYSCALL 230 #define AFS_NAMEI_ENV 1 #define DARWIN_REFBASE 3 +#define AFS_CACHE_VNODE_PATH /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" diff --git a/src/des/NTMakefile b/src/des/NTMakefile index 1a8d6e5c30..04e4563189 100644 --- a/src/des/NTMakefile +++ b/src/des/NTMakefile @@ -32,6 +32,7 @@ INCFILEDIR = $(DESTDIR)\include INCFILES =\ $(INCFILEDIR)\des.h \ $(INCFILEDIR)\des_conf.h \ + $(INCFILEDIR)\des_prototypes.h \ $(INCFILEDIR)\mit-cpyright.h \ $(INCFILEDIR)\des_odd.h \ $(INCFILEDIR)\crypt.h \ diff --git a/src/dir/dir.c b/src/dir/dir.c index b7f40a3373..ec4ad26322 100644 --- a/src/dir/dir.c +++ b/src/dir/dir.c @@ -100,13 +100,7 @@ extern void *DNew(); #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #endif /* KERNEL */ afs_int32 DErrno; @@ -478,7 +472,7 @@ DirHash(register char *string) { /* Hash a string to a number between 0 and NHASHENT. */ register unsigned char tc; - register int hval; + unsigned int hval; register int tval; hval = 0; while ((tc = (*string++))) { @@ -488,7 +482,7 @@ DirHash(register char *string) tval = hval & (NHASHENT - 1); if (tval == 0) return tval; - else if (hval < 0) + else if (hval >= 1<<31) tval = NHASHENT - tval; return tval; } diff --git a/src/dir/salvage.c b/src/dir/salvage.c index f499a057aa..4b867e08f0 100644 --- a/src/dir/salvage.c +++ b/src/dir/salvage.c @@ -23,13 +23,7 @@ RCSID #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include "dir.h" #define printf Log /* To make it work with volume salvager */ diff --git a/src/fsint/Makefile.in b/src/fsint/Makefile.in index cf421009d0..a528e18b58 100644 --- a/src/fsint/Makefile.in +++ b/src/fsint/Makefile.in @@ -29,67 +29,67 @@ libafsint.a: ${OBJS} AFS_component_version_number.o afsaux.o: afsaux.c afsint.h Kcallback.cs.c: common.xg afscbint.xg Kvice.h Kcallback.h - ${RXGEN} -x -k -C -o Kcallback.cs.c ${srcdir}/afscbint.xg + ${RXGEN} -A -x -k -C -o Kcallback.cs.c ${srcdir}/afscbint.xg Kcallback.ss.c: common.xg afscbint.xg Kvice.h Kcallback.h - ${RXGEN} -x -k -S -o Kcallback.ss.c ${srcdir}/afscbint.xg + ${RXGEN} -A -x -k -S -o Kcallback.ss.c ${srcdir}/afscbint.xg Kcallback.xdr.c: common.xg afscbint.xg Kvice.h Kcallback.h - ${RXGEN} -x -k -y -c -o Kcallback.xdr.c ${srcdir}/afscbint.xg + ${RXGEN} -A -x -k -y -c -o Kcallback.xdr.c ${srcdir}/afscbint.xg Kvice.cs.c: common.xg afsint.xg Kvice.h - ${RXGEN} -x -k -C -o Kvice.cs.c ${srcdir}/afsint.xg + ${RXGEN} -A -x -k -C -o Kvice.cs.c ${srcdir}/afsint.xg Kvice.ss.c: common.xg afsint.xg Kvice.h - ${RXGEN} -x -k -S -o Kvice.ss.c ${srcdir}/afsint.xg + ${RXGEN} -A -x -k -S -o Kvice.ss.c ${srcdir}/afsint.xg Kvice.xdr.c: common.xg afsint.xg - ${RXGEN} -x -k -c -o Kvice.xdr.c ${srcdir}/afsint.xg + ${RXGEN} -A -x -k -c -o Kvice.xdr.c ${srcdir}/afsint.xg Kvice.h: common.xg afsint.xg - ${RXGEN} -x -k -h -o Kvice.h ${srcdir}/afsint.xg + ${RXGEN} -A -x -k -h -o Kvice.h ${srcdir}/afsint.xg Kpagcb.cs.c: pagcb.xg Kpagcb.h - ${RXGEN} -x -k -C -o Kpagcb.cs.c ${srcdir}/pagcb.xg + ${RXGEN} -A -x -k -C -o Kpagcb.cs.c ${srcdir}/pagcb.xg Kpagcb.ss.c: pagcb.xg Kpagcb.h - ${RXGEN} -x -k -S -o Kpagcb.ss.c ${srcdir}/pagcb.xg + ${RXGEN} -A -x -k -S -o Kpagcb.ss.c ${srcdir}/pagcb.xg Kpagcb.xdr.c: pagcb.xg - ${RXGEN} -x -k -c -o Kpagcb.xdr.c ${srcdir}/pagcb.xg + ${RXGEN} -A -x -k -c -o Kpagcb.xdr.c ${srcdir}/pagcb.xg Kpagcb.h: pagcb.xg - ${RXGEN} -x -k -h -o Kpagcb.h ${srcdir}/pagcb.xg + ${RXGEN} -A -x -k -h -o Kpagcb.h ${srcdir}/pagcb.xg pagcb.h: pagcb.xg - ${RXGEN} -x -h -o pagcb.h ${srcdir}/pagcb.xg + ${RXGEN} -A -x -h -o pagcb.h ${srcdir}/pagcb.xg Kcallback.h: common.xg afscbint.xg - ${RXGEN} -x -k -h -o Kcallback.h ${srcdir}/afscbint.xg + ${RXGEN} -A -x -k -h -o Kcallback.h ${srcdir}/afscbint.xg afscbint.cs.c: common.xg afscbint.xg afsint.h afscbint.h - ${RXGEN} -x -C -o afscbint.cs.c ${srcdir}/afscbint.xg + ${RXGEN} -A -x -C -o afscbint.cs.c ${srcdir}/afscbint.xg afscbint.ss.c: common.xg afscbint.xg afsint.h afscbint.h - ${RXGEN} -x -S -o afscbint.ss.c ${srcdir}/afscbint.xg + ${RXGEN} -A -x -S -o afscbint.ss.c ${srcdir}/afscbint.xg afscbint.xdr.c: common.xg afscbint.xg afsint.h afscbint.h - ${RXGEN} -x -y -c -o afscbint.xdr.c ${srcdir}/afscbint.xg + ${RXGEN} -A -x -y -c -o afscbint.xdr.c ${srcdir}/afscbint.xg afsint.cs.c: common.xg afsint.xg afsint.h - ${RXGEN} -x -C -o afsint.cs.c ${srcdir}/afsint.xg + ${RXGEN} -A -x -C -o afsint.cs.c ${srcdir}/afsint.xg afsint.ss.c: common.xg afsint.xg afsint.h - ${RXGEN} -x -S -o afsint.ss.c ${srcdir}/afsint.xg + ${RXGEN} -A -x -S -o afsint.ss.c ${srcdir}/afsint.xg afsint.xdr.c: common.xg afsint.xg - ${RXGEN} -x -c -o afsint.xdr.c ${srcdir}/afsint.xg + ${RXGEN} -A -x -c -o afsint.xdr.c ${srcdir}/afsint.xg afsint.h: common.xg afsint.xg - ${RXGEN} -x -h -o afsint.h ${srcdir}/afsint.xg + ${RXGEN} -A -x -h -o afsint.h ${srcdir}/afsint.xg afscbint.h: common.xg afscbint.xg - ${RXGEN} -x -h -o afscbint.h ${srcdir}/afscbint.xg + ${RXGEN} -A -x -h -o afscbint.h ${srcdir}/afscbint.xg # # Installation targets diff --git a/src/fsprobe/fsprobe.c b/src/fsprobe/fsprobe.c index 863a043e4f..f512aeca11 100644 --- a/src/fsprobe/fsprobe.c +++ b/src/fsprobe/fsprobe.c @@ -20,13 +20,7 @@ RCSID ("$Header$"); -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include /*Interface for this module */ #include /*Lightweight process package */ diff --git a/src/fsprobe/fsprobe_test.c b/src/fsprobe/fsprobe_test.c index 36a2b37146..a766e71a26 100644 --- a/src/fsprobe/fsprobe_test.c +++ b/src/fsprobe/fsprobe_test.c @@ -19,14 +19,7 @@ RCSID ("$Header$"); -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif - #include /*Interface for fsprobe module */ /* diff --git a/src/gtx/curseswindows.c b/src/gtx/curseswindows.c index a1d351b2e9..601dc2bb20 100644 --- a/src/gtx/curseswindows.c +++ b/src/gtx/curseswindows.c @@ -37,14 +37,7 @@ RCSID #include #include #include - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include "gtxcurseswin.h" /*Interface definition */ diff --git a/src/gtx/frame.c b/src/gtx/frame.c index 983226f4bc..9e8e3ee482 100644 --- a/src/gtx/frame.c +++ b/src/gtx/frame.c @@ -19,13 +19,7 @@ RCSID #endif #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include "gtxobjects.h" @@ -324,6 +318,7 @@ gtxframe_DisplayString(aframe, amsgLine) if (aframe->messageLine) free(aframe->messageLine); aframe->messageLine = gtx_CopyString(amsgLine); + return 0; } /* Called by input processor to try to clear the dude */ diff --git a/src/gtx/gtxtest.c b/src/gtx/gtxtest.c index 68877ac703..a859d5e658 100644 --- a/src/gtx/gtxtest.c +++ b/src/gtx/gtxtest.c @@ -13,14 +13,7 @@ RCSID ("$Header$"); - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include "gtxwindows.h" #include "gtxobjects.h" @@ -253,4 +246,5 @@ main() keymap_Delete(tmap); gtx_InputServer(win); + return 0; } diff --git a/src/gtx/input.c b/src/gtx/input.c index 834377f67c..384aa81a5c 100644 --- a/src/gtx/input.c +++ b/src/gtx/input.c @@ -61,6 +61,7 @@ gtx_InputServer(awin) tframe->flags &= ~GTXFRAME_RECURSIVEEND; WOP_DISPLAY(awin); /* eventually calls gtxframe_Display */ } + return 0; } struct gwin * diff --git a/src/gtx/keymap.c b/src/gtx/keymap.c index e6c010016b..93dedcfc54 100644 --- a/src/gtx/keymap.c +++ b/src/gtx/keymap.c @@ -13,14 +13,7 @@ RCSID ("$Header$"); - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include "gtxkeymap.h" diff --git a/src/gtx/lightobject.c b/src/gtx/lightobject.c index 4feaf1a330..db9e6980cf 100644 --- a/src/gtx/lightobject.c +++ b/src/gtx/lightobject.c @@ -22,17 +22,9 @@ RCSID #include "gtxlightobj.h" /*Interface for this module */ #include /*Standard I/O stuff */ #include - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include - /*Externally-advertised array of light onode operations*/ struct onodeops gator_light_ops = { gator_light_destroy, diff --git a/src/gtx/object_test.c b/src/gtx/object_test.c index 405d1fbc6e..4c03b834ef 100644 --- a/src/gtx/object_test.c +++ b/src/gtx/object_test.c @@ -386,10 +386,7 @@ test_objects(pkg) *------------------------------------------------------------------------*/ static int -object_testInit(as, arock) - struct cmd_syndesc *as; - char *arock; - +object_testInit(struct cmd_syndesc *as, void *arock) { /*object_testInit */ static char rn[] = "object_testInit"; /*Routine name */ @@ -442,7 +439,7 @@ main(argc, argv) /* * Set up the commands we understand. */ - ts = cmd_CreateSyntax("initcmd", object_testInit, 0, + ts = cmd_CreateSyntax("initcmd", object_testInit, NULL, "Initialize the program"); cmd_AddParm(ts, "-package", CMD_SINGLE, CMD_REQUIRED, "Graphics package to use"); diff --git a/src/gtx/objects.c b/src/gtx/objects.c index 1ca8facb9c..86299701a1 100644 --- a/src/gtx/objects.c +++ b/src/gtx/objects.c @@ -26,14 +26,7 @@ RCSID #include /*Standard I/O stuff */ #include - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include /* diff --git a/src/gtx/screen_test.c b/src/gtx/screen_test.c index 5247bf2cb0..c9e39ba0ce 100644 --- a/src/gtx/screen_test.c +++ b/src/gtx/screen_test.c @@ -224,10 +224,7 @@ test_this_package(pkg) *--------------------------------------------------------------------------------*/ static int -screen_testInit(as, arock) - struct cmd_syndesc *as; - char *arock; - +screen_testInit(struct cmd_syndesc *as, void *arock) { /*screen_testInit */ static char rn[] = "screen_testInit"; /*Routine name */ @@ -280,7 +277,7 @@ main(argc, argv) * There really aren't any opcodes here, but we do want to interpret switches * from the command line. So, all we need do is set up the initcmd ``opcode''. */ - ts = cmd_CreateSyntax("initcmd", screen_testInit, 0, + ts = cmd_CreateSyntax("initcmd", screen_testInit, NULL, "Initialize, interpret command line"); cmd_AddParm(ts, "-package", CMD_SINGLE, CMD_REQUIRED, "Graphics package to use"); diff --git a/src/gtx/textcb.c b/src/gtx/textcb.c index 5bc5d6545a..3b095e687a 100644 --- a/src/gtx/textcb.c +++ b/src/gtx/textcb.c @@ -22,14 +22,7 @@ RCSID #include "gtxtextcb.h" /*Module interface */ #include /*Standard I/O stuff */ #include - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include static int gator_textcb_debug; /*Is debugging output turned on? */ diff --git a/src/gtx/textobject.c b/src/gtx/textobject.c index 5c7bc33d53..b0a57ee1b7 100644 --- a/src/gtx/textobject.c +++ b/src/gtx/textobject.c @@ -25,14 +25,7 @@ RCSID #include "gtxX11win.h" /*Gator X11 window interface */ #include /*Standard I/O stuff */ #include - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include /*Externally-advertised array of text onode operations*/ @@ -370,7 +363,7 @@ gator_text_Scroll(onp, nlines, direction) * the window empty. */ if (objects_debug) - fprintf(stderr, "[%s:%s] Scrolling text object at 0x%x %d lines %s\n", + fprintf(stderr, "[%s:%s] Scrolling text object %d lines %s\n", mn, rn, nlines, (direction == GATOR_TEXT_SCROLL_UP) ? "UP" : "DOWN"); @@ -461,7 +454,7 @@ gator_text_Write(onp, strToWrite, numChars, highlight, skip) if (objects_debug) { fprintf(stderr, "[%s:%s] Writing %d chars to text object at 0x%x (highlight=%d, skip=%d: '", - rn, numChars, onp, highlight, skip); + mn, rn, numChars, onp, highlight, skip); for (i = 0; i < numChars; i++) fprintf(stderr, "%c", strToWrite + i); fprintf(stderr, "\n"); diff --git a/src/kauth/Makefile.in b/src/kauth/Makefile.in index 88cb4a0a59..f134bc3e97 100644 --- a/src/kauth/Makefile.in +++ b/src/kauth/Makefile.in @@ -101,29 +101,29 @@ kauth.xdr.o: kauth.xdr.c kauth.h $(UKSRCS): kauth.h kauth.cs.c: kauth.rg - ${RXGEN} -u -x -C -o $@ ${srcdir}/kauth.rg + ${RXGEN} -A -u -x -C -o $@ ${srcdir}/kauth.rg kauth.ss.c: kauth.rg - ${RXGEN} -x -S -o $@ ${srcdir}/kauth.rg + ${RXGEN} -A -x -S -o $@ ${srcdir}/kauth.rg kauth.xdr.c: kauth.rg - ${RXGEN} -x -c -o $@ ${srcdir}/kauth.rg + ${RXGEN} -A -x -c -o $@ ${srcdir}/kauth.rg kauth.h: kauth.rg - ${RXGEN} -u -x -h -o $@ ${srcdir}/kauth.rg + ${RXGEN} -A -u -x -h -o $@ ${srcdir}/kauth.rg kauth.xdr.c: kauth.h kauth.cs.c: kauth.h kauth.ss.c: kauth.h Kkauth.cs.c: kauth.rg Kkauth.h - ${RXGEN} -x -k -C -o Kkauth.cs.c ${srcdir}/kauth.rg + ${RXGEN} -A -x -k -C -o Kkauth.cs.c ${srcdir}/kauth.rg Kkauth.xdr.c: kauth.rg - ${RXGEN} -x -k -c -o Kkauth.xdr.c ${srcdir}/kauth.rg + ${RXGEN} -A -x -k -c -o Kkauth.xdr.c ${srcdir}/kauth.rg Kkauth.h: kauth.rg - ${RXGEN} -x -k -h -o Kkauth.h ${srcdir}/kauth.rg + ${RXGEN} -A -x -k -h -o Kkauth.h ${srcdir}/kauth.rg libkauth.a: $(OBJS) AFS_component_version_number.o -$(RM) -f $@ @@ -262,37 +262,37 @@ install: \ ${DESTDIR}${includedir}/afs/kaport.h ${DESTDIR}${afssrvlibexecdir}/kaserver: kaserver - ${INSTALL} -s $? $@ + ${INSTALL} $? $@ ${DESTDIR}${sbindir}/kas: kas - ${INSTALL} -s $? $@ + ${INSTALL} $? $@ ${DESTDIR}${sbindir}/kpwvalid: kpwvalid ${INSTALL} $? $@ ${DESTDIR}${afssrvsbindir}/kas: kas - ${INSTALL} -s $? $@ + ${INSTALL} $? $@ ${DESTDIR}${afssrvsbindir}/kpwvalid: kpwvalid ${INSTALL} $? $@ ${DESTDIR}${bindir}/klog@KAUTH_KLOG_SUFFIX@: klog - ${INSTALL} -f -s $? $@ + ${INSTALL} -f $? $@ ${DESTDIR}${bindir}/klog.krb: klog.krb - ${INSTALL} -s $? $@ + ${INSTALL} ${NO_STRIP_KRB} $? $@ ${DESTDIR}${afssrvbindir}/klog@KAUTH_KLOG_SUFFIX@: klog - ${INSTALL} -f -s $? $@ + ${INSTALL} -f $? $@ ${DESTDIR}${afssrvbindir}/klog.krb: klog.krb - ${INSTALL} -s $? $@ + ${INSTALL} ${NO_STRIP_KRB} $? $@ ${DESTDIR}${bindir}/knfs: knfs - ${INSTALL} -s $? $@ + ${INSTALL} $? $@ ${DESTDIR}${bindir}/kpasswd@KAUTH_KLOG_SUFFIX@: kpasswd - ${INSTALL} -f -s $? $@ + ${INSTALL} -f $? $@ ${DESTDIR}${bindir}/kpwvalid: kpwvalid ${INSTALL} $? $@ @@ -307,7 +307,7 @@ ${DESTDIR}${afssrvsbindir}/kadb_check: rebuild ${INSTALL} -f $? $@ ${DESTDIR}${afssrvsbindir}/kdb: kdb - ${INSTALL} -s $? $@ + ${INSTALL} $? $@ ${DESTDIR}${afssrvsbindir}/ka-forwarder: ka-forwarder ${INSTALL} $? $@ @@ -348,25 +348,25 @@ dest: \ ${DEST}/include/afs/kaport.h ${DEST}/root.server/usr/afs/bin/kaserver: kaserver - ${INSTALL} -s $? $@ + ${INSTALL} $? $@ ${DEST}/etc/kas ${DEST}/root.server/usr/afs/bin/kas: kas - ${INSTALL} -s $? $@ + ${INSTALL} $? $@ ${DEST}/bin/kpwvalid ${DEST}/etc/kpwvalid ${DEST}/root.server/usr/afs/bin/kpwvalid: kpwvalid ${INSTALL} $? $@ ${DEST}/bin/klog@KAUTH_KLOG_SUFFIX@ ${DEST}/root.server/usr/afs/bin/klog@KAUTH_KLOG_SUFFIX@: klog - ${INSTALL} -f -s $? $@ + ${INSTALL} -f $? $@ ${DEST}/bin/klog.krb ${DEST}/root.server/usr/afs/bin/klog.krb: klog.krb - ${INSTALL} -s $? $@ + ${INSTALL} ${NO_STRIP_KRB} $? $@ ${DEST}/bin/knfs: knfs - ${INSTALL} -s $? $@ + ${INSTALL} $? $@ ${DEST}/bin/kpasswd@KAUTH_KLOG_SUFFIX@: kpasswd - ${INSTALL} -f -s $? $@ + ${INSTALL} -f $? $@ ${DEST}/lib/afs/libkauth.a: libkauth.a ${INSTALL} $? $@ @@ -378,7 +378,7 @@ ${DEST}/etc/kadb_check: rebuild ${INSTALL} -f $? $@ ${DEST}/etc/kdb: kdb - ${INSTALL} -s $? $@ + ${INSTALL} $? $@ ${DEST}/root.server/usr/afs/bin/ka-forwarder: ka-forwarder ${INSTALL} $? $@ diff --git a/src/kauth/admin_tools.c b/src/kauth/admin_tools.c index c62cf12a54..6fe44d96c3 100644 --- a/src/kauth/admin_tools.c +++ b/src/kauth/admin_tools.c @@ -234,7 +234,7 @@ DumpUser(char *user, char *arock, int showadmin, int showkey, char *inst) } int -ListUsers(struct cmd_syndesc *as, char *arock) +ListUsers(struct cmd_syndesc *as, void *arock) { struct kaident name; afs_int32 index; @@ -273,7 +273,7 @@ ListUsers(struct cmd_syndesc *as, char *arock) int -ExamineUser(struct cmd_syndesc *as, char *arock) +ExamineUser(struct cmd_syndesc *as, void *arock) { int showkey = (as->parms[1].items != NULL); return DumpUser(as->parms[0].items->data, arock, 0, showkey, NULL); @@ -318,7 +318,7 @@ handle_errors(int code, /* error code to handle */ } int -CreateUser(struct cmd_syndesc *as, char *arock) +CreateUser(struct cmd_syndesc *as, void *arock) { int code; char name[MAXKTCNAMELEN]; @@ -348,7 +348,7 @@ CreateUser(struct cmd_syndesc *as, char *arock) } int -DeleteUser(struct cmd_syndesc *as, char *arock) +DeleteUser(struct cmd_syndesc *as, void *arock) { int code; char name[MAXKTCNAMELEN]; @@ -532,7 +532,7 @@ ka_islocked(char *name, char *instance, afs_uint32 * when) } int -Unlock(struct cmd_syndesc *as, char *arock) +Unlock(struct cmd_syndesc *as, void *arock) { afs_int32 code, rcode = 0; afs_int32 count; @@ -573,7 +573,7 @@ Unlock(struct cmd_syndesc *as, char *arock) } int -SetFields(struct cmd_syndesc *as, char *arock) +SetFields(struct cmd_syndesc *as, void *arock) { int code; char name[MAXKTCNAMELEN]; @@ -735,7 +735,7 @@ SetFields(struct cmd_syndesc *as, char *arock) } int -StringToKey(struct cmd_syndesc *as, char *arock) +StringToKey(struct cmd_syndesc *as, void *arock) { afs_int32 code; char realm[MAXKTCREALMLEN]; @@ -772,7 +772,7 @@ StringToKey(struct cmd_syndesc *as, char *arock) } int -SetPassword(struct cmd_syndesc *as, char *arock) +SetPassword(struct cmd_syndesc *as, void *arock) { int code; char name[MAXKTCNAMELEN]; @@ -964,7 +964,7 @@ ListTicket(struct ktc_principal *server, int verbose) } static -GetTicket(struct cmd_syndesc *as, char *arock) +GetTicket(struct cmd_syndesc *as, void *arock) { int code; struct ktc_principal server; @@ -1010,7 +1010,7 @@ GetTicket(struct cmd_syndesc *as, char *arock) } static -GetPassword(struct cmd_syndesc *as, char *arock) +GetPassword(struct cmd_syndesc *as, void *arock) { int code; char name[MAXKTCNAMELEN]; @@ -1062,7 +1062,7 @@ GetPassword(struct cmd_syndesc *as, char *arock) } int -GetRandomKey(struct cmd_syndesc *as, char *arock) +GetRandomKey(struct cmd_syndesc *as, void *arock) { int code; struct ktc_encryptionKey key; @@ -1088,7 +1088,7 @@ GetRandomKey(struct cmd_syndesc *as, char *arock) } int -Statistics(struct cmd_syndesc *as, char *arock) +Statistics(struct cmd_syndesc *as, void *arock) { int code; kasstats statics; @@ -1141,7 +1141,7 @@ Statistics(struct cmd_syndesc *as, char *arock) } int -DebugInfo(struct cmd_syndesc *as, char *arock) +DebugInfo(struct cmd_syndesc *as, void *arock) { int code; struct ka_debugInfo info; @@ -1237,21 +1237,21 @@ DebugInfo(struct cmd_syndesc *as, char *arock) } int -Interactive(struct cmd_syndesc *as, char *arock) +Interactive(struct cmd_syndesc *as, void *arock) { finished = 0; return 0; } int -Quit(struct cmd_syndesc *as, char *arock) +Quit(struct cmd_syndesc *as, void *arock) { finished = 1; return 0; } int -MyAfterProc(struct cmd_syndesc *as) +MyAfterProc(struct cmd_syndesc *as, void *arock) { if (!strcmp(as->name, "help")) return 0; @@ -1274,14 +1274,14 @@ char newCell[MAXKTCREALMLEN]; afs_int32 serverList[MAXSERVERS]; int -NoAuth(struct cmd_syndesc *as, char *arock) +NoAuth(struct cmd_syndesc *as, void *arock) { noauth = 1; return 0; } static int -MyBeforeProc(struct cmd_syndesc *as, char *arock) +MyBeforeProc(struct cmd_syndesc *as, void *arock) { extern struct passwd *getpwuid(); struct ktc_encryptionKey key; @@ -1539,7 +1539,7 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock) /* These are some helpful command that deal with the cache managers tokens. */ static -ForgetTicket(struct cmd_syndesc *as, char *arock) +ForgetTicket(struct cmd_syndesc *as, void *arock) { afs_int32 code; @@ -1593,7 +1593,7 @@ ForgetTicket(struct cmd_syndesc *as, char *arock) } static -ListTickets(struct cmd_syndesc *as, char *arock) +ListTickets(struct cmd_syndesc *as, void *arock) { afs_int32 code = 0; int index, newIndex; @@ -1666,14 +1666,15 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[]) cmd_SetBeforeProc(MyBeforeProc, NULL); cmd_SetAfterProc(MyAfterProc, NULL); - ts = cmd_CreateSyntax("interactive", Interactive, 0, + ts = cmd_CreateSyntax("interactive", Interactive, NULL, "enter interactive mode"); add_std_args(ts); - ts = cmd_CreateSyntax("noauthentication", NoAuth, 0, + ts = cmd_CreateSyntax("noauthentication", NoAuth, NULL, "connect to AuthServer w/o using token"); - ts = cmd_CreateSyntax("list", ListUsers, 0, "list all users in database"); + ts = cmd_CreateSyntax("list", ListUsers, NULL, + "list all users in database"); cmd_AddParm(ts, "-long", CMD_FLAG, CMD_OPTIONAL, "show detailed info about each user"); cmd_AddParm(ts, "-showadmin", CMD_FLAG, CMD_OPTIONAL, @@ -1683,26 +1684,26 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[]) add_std_args(ts); cmd_CreateAlias(ts, "ls"); - ts = cmd_CreateSyntax("examine", ExamineUser, 0, + ts = cmd_CreateSyntax("examine", ExamineUser, NULL, "examine the entry for a user"); cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user"); cmd_AddParm(ts, "-showkey", CMD_FLAG, CMD_OPTIONAL, "show the user's actual key rather than the checksum"); add_std_args(ts); - ts = cmd_CreateSyntax("create", CreateUser, 0, + ts = cmd_CreateSyntax("create", CreateUser, NULL, "create an entry for a user"); cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user"); cmd_AddParm(ts, "-initial_password", CMD_SINGLE, CMD_OPTIONAL, "initial password"); add_std_args(ts); - ts = cmd_CreateSyntax("delete", DeleteUser, 0, "delete a user"); + ts = cmd_CreateSyntax("delete", DeleteUser, NULL, "delete a user"); cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user"); add_std_args(ts); cmd_CreateAlias(ts, "rm"); - ts = cmd_CreateSyntax("setfields", SetFields, 0, + ts = cmd_CreateSyntax("setfields", SetFields, NULL, "set various fields in a user's entry"); cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user"); cmd_AddParm(ts, "-flags", CMD_SINGLE, CMD_OPTIONAL, @@ -1727,18 +1728,18 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[]) cmd_CreateAlias(ts, "sf"); - ts = cmd_CreateSyntax("unlock", Unlock, 0, + ts = cmd_CreateSyntax("unlock", Unlock, NULL, "Enable authentication ID after max failed attempts exceeded"); cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "authentication ID"); add_std_args(ts); - ts = cmd_CreateSyntax("stringtokey", StringToKey, 0, + ts = cmd_CreateSyntax("stringtokey", StringToKey, NULL, "convert a string to a key"); cmd_AddParm(ts, "-string", CMD_SINGLE, 0, "password string"); cmd_AddParm(ts, "-cell", CMD_SINGLE, CMD_OPTIONAL, "cell name"); - ts = cmd_CreateSyntax("setpassword", SetPassword, 0, + ts = cmd_CreateSyntax("setpassword", SetPassword, NULL, "set a user's password"); cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user"); cmd_AddParm(ts, "-new_password", CMD_SINGLE, CMD_OPTIONAL, @@ -1752,7 +1753,7 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[]) #endif /* set a user's key */ - ts = cmd_CreateSyntax("setkey", SetPassword, 0, (char *)CMD_HIDDEN); + ts = cmd_CreateSyntax("setkey", SetPassword, NULL, (char *)CMD_HIDDEN); cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user"); cmd_Seek(ts, 2); cmd_AddParm(ts, "-new_key", CMD_SINGLE, 0, "eight byte new key"); @@ -1761,7 +1762,7 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[]) add_std_args(ts); /* get a user's password */ - ts = cmd_CreateSyntax("getpassword", GetPassword, 0, (char *)CMD_HIDDEN); + ts = cmd_CreateSyntax("getpassword", GetPassword, NULL, (char *)CMD_HIDDEN); cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user"); /* don't take standard args */ /* add_std_args (ts); */ @@ -1770,27 +1771,27 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[]) #endif /* get a random key */ - ts = cmd_CreateSyntax("getrandomkey", GetRandomKey, 0, + ts = cmd_CreateSyntax("getrandomkey", GetRandomKey, NULL, (char *)CMD_HIDDEN); add_std_args(ts); /* get a ticket for a specific server */ - ts = cmd_CreateSyntax("getticket", GetTicket, 0, (char *)CMD_HIDDEN); + ts = cmd_CreateSyntax("getticket", GetTicket, NULL, (char *)CMD_HIDDEN); cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of server"); cmd_AddParm(ts, "-lifetime", CMD_SINGLE, CMD_OPTIONAL, "ticket lifetime"); add_std_args(ts); - ts = cmd_CreateSyntax("statistics", Statistics, 0, + ts = cmd_CreateSyntax("statistics", Statistics, NULL, "show statistics for AuthServer"); add_std_args(ts); /* show debugging info from AuthServer */ - ts = cmd_CreateSyntax("debuginfo", DebugInfo, 0, (char *)CMD_HIDDEN); + ts = cmd_CreateSyntax("debuginfo", DebugInfo, NULL, (char *)CMD_HIDDEN); cmd_AddParm(ts, "-hostname", CMD_SINGLE, CMD_OPTIONAL, "authentication server host name"); add_std_args(ts); - ts = cmd_CreateSyntax("forgetticket", ForgetTicket, 0, + ts = cmd_CreateSyntax("forgetticket", ForgetTicket, NULL, "delete user's tickets"); #ifdef notdef cmd_AddParm(ts, "-name", CMD_SINGLE, (CMD_OPTIONAL | CMD_HIDE), @@ -1798,13 +1799,13 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[]) #endif cmd_AddParm(ts, "-all", CMD_FLAG, CMD_OPTIONAL, "delete all tickets"); - ts = cmd_CreateSyntax("listtickets", ListTickets, 0, + ts = cmd_CreateSyntax("listtickets", ListTickets, NULL, "show all cache manager tickets"); cmd_AddParm(ts, "-name", CMD_SINGLE, CMD_OPTIONAL, "name of server"); cmd_AddParm(ts, "-long", CMD_FLAG, CMD_OPTIONAL, "show session key and ticket"); - ts = cmd_CreateSyntax("quit", Quit, 0, "exit program"); + ts = cmd_CreateSyntax("quit", Quit, NULL, "exit program"); finished = 1; conn = 0; /* no connection yet */ diff --git a/src/kauth/authclient.c b/src/kauth/authclient.c index 86d7b1f7ee..29081918ef 100644 --- a/src/kauth/authclient.c +++ b/src/kauth/authclient.c @@ -46,13 +46,7 @@ RCSID #include #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include @@ -559,15 +553,15 @@ ka_Authenticate(char *name, char *instance, char *cell, struct ubik_client * con version = 2; code = - kawrap_ubik_Call(KAA_AuthenticateV2, conn, 0, name, instance, start, - end, &arequest, &oanswer); + kawrap_ubik_Call(KAA_AuthenticateV2, conn, 0, name, instance, + start, end, &arequest, &oanswer, 0, 0); if (code == RXGEN_OPCODE) { oanswer.MaxSeqLen = sizeof(answer); oanswer.SeqBody = (char *)&answer; version = 1; code = ubik_Call(KAA_Authenticate, conn, 0, name, instance, start, end, - &arequest, &oanswer); + &arequest, &oanswer, 0, 0); if (code == RXGEN_OPCODE) { extern int KAA_Authenticate_old(); oanswer.MaxSeqLen = sizeof(answer_old); diff --git a/src/kauth/client.c b/src/kauth/client.c index 7dfdc76a20..3d551d1a49 100644 --- a/src/kauth/client.c +++ b/src/kauth/client.c @@ -41,13 +41,7 @@ RCSID #include #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #ifdef HAVE_UNISTD_H #define __USE_XOPEN #include diff --git a/src/kauth/ka-forwarder.c b/src/kauth/ka-forwarder.c index d7fcb20325..fa9b42614f 100644 --- a/src/kauth/ka-forwarder.c +++ b/src/kauth/ka-forwarder.c @@ -9,12 +9,12 @@ /* * HISTORY * $Log$ - * Revision 1.2.6.2 2007/09/26 16:34:30 rees - * DELTA mdw-rxk5-m55-20070926 + * Revision 1.2.6.3 2008/01/03 16:47:47 rees + * DELTA mdw-rxk5-m58-20080103 * AUTHOR mdw@umich.edu * * merge in latest changes from openafs-devel-1_5_x - * update to rxk5-m55 + * update to rxk5-m58 * * Revision 1.2.2.2 2007/08/19 22:15:29 rra * DELTA DEVEL15-ka-forwarder-20060731 diff --git a/src/kauth/kaauxdb.c b/src/kauth/kaauxdb.c index aef045dfe5..507500a8f1 100644 --- a/src/kauth/kaauxdb.c +++ b/src/kauth/kaauxdb.c @@ -25,13 +25,7 @@ RCSID #ifdef HAVE_FCNTL_H #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include "ubik_int.h" #include "kauth.h" diff --git a/src/kauth/kadatabase.c b/src/kauth/kadatabase.c index c3bee37b4c..d49fc8d674 100644 --- a/src/kauth/kadatabase.c +++ b/src/kauth/kadatabase.c @@ -19,14 +19,7 @@ RCSID #else #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif -#include #include #include #include @@ -114,6 +107,7 @@ static afs_int32 keyCacheVersion = 0; static afs_int32 maxKeyLifetime; static int dbfixup = 0; +void init_kadatabase(initFlags) int initFlags; /* same as init_kaprocs (see which) */ { diff --git a/src/kauth/kalocalcell.c b/src/kauth/kalocalcell.c index 0081e9c7e6..a2e7c07031 100644 --- a/src/kauth/kalocalcell.c +++ b/src/kauth/kalocalcell.c @@ -37,13 +37,7 @@ RCSID #else #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include diff --git a/src/kauth/kalog.c b/src/kauth/kalog.c index bd51f247b8..8bc6cbddf4 100644 --- a/src/kauth/kalog.c +++ b/src/kauth/kalog.c @@ -24,13 +24,7 @@ RCSID #include #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #ifdef HAVE_FCNTL_H #include #endif diff --git a/src/kauth/kas.c b/src/kauth/kas.c index e1ee197c99..df410cf69b 100644 --- a/src/kauth/kas.c +++ b/src/kauth/kas.c @@ -29,13 +29,7 @@ RCSID #else #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include diff --git a/src/kauth/kaserver.c b/src/kauth/kaserver.c index dc51fcb95a..30ad2ebbdf 100644 --- a/src/kauth/kaserver.c +++ b/src/kauth/kaserver.c @@ -26,13 +26,7 @@ RCSID #include "kalog.h" /* for OpenLog() */ #include #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #ifdef HAVE_FCNTL_H #include #endif diff --git a/src/kauth/kautils.c b/src/kauth/kautils.c index 2a43c4f1b9..21ee9d772c 100644 --- a/src/kauth/kautils.c +++ b/src/kauth/kautils.c @@ -22,13 +22,7 @@ RCSID #include #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include diff --git a/src/kauth/kdb.c b/src/kauth/kdb.c index de5aab4cd7..39df9e4e84 100644 --- a/src/kauth/kdb.c +++ b/src/kauth/kdb.c @@ -29,8 +29,8 @@ RCSID char *dbmfile; -static -cmdproc(register struct cmd_syndesc *as, afs_int32 arock) +static int +cmdproc(register struct cmd_syndesc *as, void * arock) { DBM *kdb; datum key, data; @@ -96,6 +96,7 @@ cmdproc(register struct cmd_syndesc *as, afs_int32 arock) } } dbm_close(kdb); + return 0; } @@ -111,7 +112,7 @@ main(int argc, char **argv) sprintf(dbmfile_help, "dbmfile to use (default %s)", AFSDIR_SERVER_KALOGDB_FILEPATH); dbmfile = AFSDIR_SERVER_KALOGDB_FILEPATH; - ts = cmd_CreateSyntax(NULL, cmdproc, 0, "Dump contents of dbm database"); + ts = cmd_CreateSyntax(NULL, cmdproc, NULL, "Dump contents of dbm database"); cmd_AddParm(ts, "-dbmfile", CMD_SINGLE, CMD_OPTIONAL, dbmfile_help); cmd_AddParm(ts, "-key", CMD_SINGLE, CMD_OPTIONAL, "extract entries that match specified key"); @@ -128,5 +129,6 @@ int main(void) { printf("kdb not supported\n"); + return 1; } #endif diff --git a/src/kauth/kkids.c b/src/kauth/kkids.c index 48e6f14b8b..ef0fc1497c 100644 --- a/src/kauth/kkids.c +++ b/src/kauth/kkids.c @@ -422,6 +422,7 @@ init_child(char *myname) argv[1] = NULL; argv[0] = dirpath; execv(dirpath, argv); + return 0; } else { using_child = pid; /* save it for later */ childin = fdopen(pipe1[1], "w"); diff --git a/src/kauth/klog.c b/src/kauth/klog.c index 78a464e6a1..1642408996 100644 --- a/src/kauth/klog.c +++ b/src/kauth/klog.c @@ -19,14 +19,7 @@ RCSID #ifdef AFS_AIX32_ENV #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif - #include #include @@ -70,7 +63,7 @@ RCSID #define KLOGEXIT(code) assert(!code || code >= KAMINERROR); \ rx_Finalize(); \ (!code ? exit(0) : exit((code)-KAMINERROR+1)) -extern int CommandProc(struct cmd_syndesc *as, char *arock); +int CommandProc(struct cmd_syndesc *as, void *arock); static int zero_argc; static char **zero_argv; @@ -98,7 +91,7 @@ main(int argc, char *argv[]) zero_argc = argc; zero_argv = argv; - ts = cmd_CreateSyntax(NULL, CommandProc, 0, + ts = cmd_CreateSyntax(NULL, CommandProc, NULL, "obtain Kerberos authentication"); #define aXFLAG 0 @@ -151,7 +144,7 @@ getpipepass(void) } int -CommandProc(struct cmd_syndesc *as, char *arock) +CommandProc(struct cmd_syndesc *as, void *arock) { char name[MAXKTCNAMELEN]; char instance[MAXKTCNAMELEN]; diff --git a/src/kauth/knfs.c b/src/kauth/knfs.c index 68f08e5254..24a9b829d9 100644 --- a/src/kauth/knfs.c +++ b/src/kauth/knfs.c @@ -27,21 +27,12 @@ RCSID #include #include #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include #include - -extern struct cmd_syndesc *cmd_CreateSyntax(); - /* Modifications: @@ -358,10 +349,8 @@ NFSCopyToken(ahost, auid) return code; } -static -cmdproc(as, arock) - register struct cmd_syndesc *as; - afs_int32 arock; +static int +cmdproc(register struct cmd_syndesc *as, void *arock) { register struct hostent *the; char *tp, *sysname = 0; @@ -469,7 +458,7 @@ main(argc, argv) sigaction(SIGSEGV, &nsa, NULL); #endif - ts = cmd_CreateSyntax(NULL, cmdproc, 0, "copy tickets for NFS"); + ts = cmd_CreateSyntax(NULL, cmdproc, NULL, "copy tickets for NFS"); cmd_AddParm(ts, "-host", CMD_SINGLE, CMD_REQUIRED, "host name"); cmd_AddParm(ts, "-id", CMD_SINGLE, CMD_OPTIONAL, "user ID (decimal)"); cmd_AddParm(ts, "-sysname", CMD_SINGLE, CMD_OPTIONAL, diff --git a/src/kauth/kpasswd.c b/src/kauth/kpasswd.c index 211b2f704e..eaaf9a0d0d 100644 --- a/src/kauth/kpasswd.c +++ b/src/kauth/kpasswd.c @@ -29,13 +29,7 @@ RCSID #ifndef AFS_NT40_ENV #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include @@ -79,7 +73,7 @@ RCSID /* The following code to make use of libcmd.a also stolen from klog.c. */ -int CommandProc(); +int CommandProc(struct cmd_syndesc *, void *); static int zero_argc; static char **zero_argv; @@ -207,9 +201,7 @@ timedout() #endif char passwd[BUFSIZ], npasswd[BUFSIZ], verify[BUFSIZ]; -CommandProc(as, arock) - char *arock; - struct cmd_syndesc *as; +CommandProc(struct cmd_syndesc *as, void *arock) { char name[MAXKTCNAMELEN] = ""; char instance[MAXKTCNAMELEN] = ""; diff --git a/src/kauth/kpwvalid.c b/src/kauth/kpwvalid.c index e42ed953c6..2114eb9a01 100644 --- a/src/kauth/kpwvalid.c +++ b/src/kauth/kpwvalid.c @@ -14,13 +14,7 @@ RCSID ("$Header$"); #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #ifdef AFS_NT40_ENV #include #endif @@ -49,4 +43,5 @@ main(int argc, char *argv[]) fflush(stdout); } } + return rc; } diff --git a/src/kauth/krb_tf.c b/src/kauth/krb_tf.c index 21090569b6..7d577afe96 100644 --- a/src/kauth/krb_tf.c +++ b/src/kauth/krb_tf.c @@ -58,13 +58,7 @@ RCSID #else #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include diff --git a/src/kauth/krb_udp.c b/src/kauth/krb_udp.c index f77006a63f..21abc02b73 100644 --- a/src/kauth/krb_udp.c +++ b/src/kauth/krb_udp.c @@ -30,13 +30,7 @@ RCSID #include #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include @@ -823,7 +817,7 @@ process_udp_request(ksoc, pkt) return; } -static +static void SocketListener() { fd_set rfds; diff --git a/src/kauth/manyklog.c b/src/kauth/manyklog.c index 6a24faffb1..edeed350e0 100644 --- a/src/kauth/manyklog.c +++ b/src/kauth/manyklog.c @@ -62,7 +62,7 @@ RCSID #define KLOGEXIT(code) assert(!code || code >= KAMINERROR); \ rx_Finalize(); \ (!code ? exit(0) : exit((code)-KAMINERROR+1)) -int CommandProc(); +static int CommandProc(struct cmd_syndesc *, void *); static int zero_argc; static char **zero_argv; @@ -90,7 +90,7 @@ main(argc, argv) zero_argc = argc; zero_argv = argv; - ts = cmd_CreateSyntax(NULL, CommandProc, 0, + ts = cmd_CreateSyntax(NULL, CommandProc, NULL, "obtain Kerberos authentication"); #define aXFLAG 0 @@ -145,9 +145,8 @@ getpipepass() return gpbuf; } -CommandProc(as, arock) - char *arock; - struct cmd_syndesc *as; +static int +CommandProc(struct cmd_syndesc *as, void *arock) { char name[MAXKTCNAMELEN]; char instance[MAXKTCNAMELEN]; diff --git a/src/kauth/read_passwd.c b/src/kauth/read_passwd.c index 0cac47afc1..28f40535ee 100644 --- a/src/kauth/read_passwd.c +++ b/src/kauth/read_passwd.c @@ -35,14 +35,7 @@ int strcmp(); #if defined(AFS_SGI_ENV) #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif - #if defined (AFS_AIX_ENV) || defined(AFS_SGI_ENV) /* Just temp till we figure out the aix stuff */ diff --git a/src/kauth/rebuild.c b/src/kauth/rebuild.c index 3b74376ab5..00f1ae0d63 100644 --- a/src/kauth/rebuild.c +++ b/src/kauth/rebuild.c @@ -23,13 +23,7 @@ RCSID #include #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include @@ -223,6 +217,7 @@ PrintEntry(index, entry) } /* ntohEntry - convert back to host-order */ +void ntohEntry(struct kaentry *entryp) { entryp->flags = ntohl(entryp->flags); @@ -402,13 +397,13 @@ readDB(offset, buffer, size) afs_com_err(whoami, errno, "reading db got %d bytes", code); exit(3); } + return 0; } #include "AFS_component_version_number.c" -WorkerBee(as, arock) - struct cmd_syndesc *as; - char *arock; +static int +WorkerBee(struct cmd_syndesc *as, void *arock) { afs_int32 code; char *dbFile; diff --git a/src/kauth/test/multiklog.c b/src/kauth/test/multiklog.c index a29384368c..5ee72e4959 100644 --- a/src/kauth/test/multiklog.c +++ b/src/kauth/test/multiklog.c @@ -52,7 +52,7 @@ RCSID -repeat is the number of times to iterate over the authentication */ -int CommandProc(); +static int CommandProc(struct cmd_syndesc *, void *); static int zero_argc; static char **zero_argv; @@ -67,7 +67,7 @@ main(argc, argv) zero_argc = argc; zero_argv = argv; - ts = cmd_CreateSyntax(NULL, CommandProc, 0, + ts = cmd_CreateSyntax(NULL, CommandProc, NULL, "obtain Kerberos authentication"); #define aXFLAG 0 @@ -120,9 +120,8 @@ getpipepass() return gpbuf; } -CommandProc(as, arock) - char *arock; - struct cmd_syndesc *as; +static int +CommandProc(struct cmd_syndesc *as, void *arock) { char name[MAXKTCNAMELEN]; char instance[MAXKTCNAMELEN]; diff --git a/src/kauth/test/test_getticket.c b/src/kauth/test/test_getticket.c index 446d45c5a1..c4fea4745b 100644 --- a/src/kauth/test/test_getticket.c +++ b/src/kauth/test/test_getticket.c @@ -207,12 +207,10 @@ GetTokenLife(name, passwd, expectedLife, match) CheckLife(t.endTime, t.startTime, expectedLife, match); } -static long -Main(as, arock) - IN struct cmd_syndesc *as; - IN char *arock; +static int +Main(struct cmd_syndesc *as, void *arock) { - long code; + int code; char name[MAXKTCNAMELEN]; char instance[MAXKTCNAMELEN]; char newCell[MAXKTCREALMLEN]; @@ -511,7 +509,7 @@ main(argc, argv) initialize_KA_error_table(); initialize_rx_error_table(); - ts = cmd_CreateSyntax(0, Main, 0, "Main program"); + ts = cmd_CreateSyntax(NULL, Main, NULL, "Main program"); /* 0 */ cmd_AddParm(ts, "-patient", CMD_FLAG, CMD_OPTIONAL, "wait for TGS ticket to age"); cmd_Seek(ts, 12); diff --git a/src/kauth/test/test_rxkad_free.c b/src/kauth/test/test_rxkad_free.c index 1c1e767461..9fc1a691cc 100644 --- a/src/kauth/test/test_rxkad_free.c +++ b/src/kauth/test/test_rxkad_free.c @@ -52,12 +52,10 @@ PrintRxkadStats() rxkad_stats.destroyUnauth); } -static long -Main(as, arock) - IN struct cmd_syndesc *as; - IN char *arock; +static int +Main(struct cmd_syndesc *as, void *arock) { - long code; + int code; char name[MAXKTCNAMELEN]; char instance[MAXKTCNAMELEN]; char newCell[MAXKTCREALMLEN]; @@ -374,7 +372,7 @@ main(argc, argv) initialize_KA_error_table(); initialize_rx_error_table(); - ts = cmd_CreateSyntax(0, Main, 0, "Main program"); + ts = cmd_CreateSyntax(NULL, Main, NULL, "Main program"); /* 0 */ cmd_AddParm(ts, "-number", CMD_SINGLE, CMD_OPTIONAL, "number of iterations"); /* 1 */ cmd_AddParm(ts, "-long", CMD_FLAG, CMD_OPTIONAL, diff --git a/src/kauth/token.c b/src/kauth/token.c index 7a126bba78..d28e3c7020 100644 --- a/src/kauth/token.c +++ b/src/kauth/token.c @@ -44,13 +44,7 @@ RCSID #include #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif /* netinet/in.h and cellconfig.h are needed together */ #include /* these are needed together */ diff --git a/src/kauth/user.c b/src/kauth/user.c index f53730a6b8..7a188d7a29 100644 --- a/src/kauth/user.c +++ b/src/kauth/user.c @@ -45,13 +45,7 @@ RCSID #else #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include #include diff --git a/src/libacl/aclprocs.c b/src/libacl/aclprocs.c index 24367419c4..03a3fd485a 100644 --- a/src/libacl/aclprocs.c +++ b/src/libacl/aclprocs.c @@ -25,9 +25,7 @@ RCSID #else #include #endif -#ifdef HAVE_STRING_H #include -#endif #include #include #include diff --git a/src/libadmin/adminutil/afs_AdminInternal.h b/src/libadmin/adminutil/afs_AdminInternal.h index ae69853942..d8ce0a40bb 100644 --- a/src/libadmin/adminutil/afs_AdminInternal.h +++ b/src/libadmin/adminutil/afs_AdminInternal.h @@ -50,6 +50,12 @@ typedef struct afs_cell_handle { int pts_valid; int vos_valid; int vos_new; + /* need to add server lists with TTL + * so we don't pound the dns servers constantly + * when generating the iterators + */ + void *server_list; + time_t server_ttl; /* expiration time */ int end_magic; } afs_cell_handle_t, *afs_cell_handle_p; diff --git a/src/libadmin/bos/afs_bosAdmin.c b/src/libadmin/bos/afs_bosAdmin.c index caeb31ba13..8df7268dbd 100644 --- a/src/libadmin/bos/afs_bosAdmin.c +++ b/src/libadmin/bos/afs_bosAdmin.c @@ -32,14 +32,7 @@ RCSID #else #include #endif - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif typedef struct bos_server { int begin_magic; diff --git a/src/libadmin/cfg/cfgclient.c b/src/libadmin/cfg/cfgclient.c index 3d2aadd84e..9ac669f7b5 100644 --- a/src/libadmin/cfg/cfgclient.c +++ b/src/libadmin/cfg/cfgclient.c @@ -23,15 +23,7 @@ RCSID #include #include #include - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif - #include #include @@ -104,7 +96,7 @@ cfg_ClientQueryStatus(const char *hostName, /* name of host */ afs_status_t clientSt = 0; char *clientCellName = NULL; short cmInstalled = 0; - unsigned cmVersion; + unsigned cmVersion = 0; /* validate parameters */ diff --git a/src/libadmin/cfg/cfginternal.c b/src/libadmin/cfg/cfginternal.c index aad5d62b69..aa35bade17 100644 --- a/src/libadmin/cfg/cfginternal.c +++ b/src/libadmin/cfg/cfginternal.c @@ -480,8 +480,8 @@ cfgutil_HostAddressFetchAll(const char *hostName, int *addrCount, { int rc = 1; afs_status_t tst = 0; - int aCount; - afs_int32 *aList; + int aCount = 0; + afs_int32 *aList = NULL; #ifdef AFS_NT40_ENV /* Note: gethostbyname() allocs hostent on a per-thread basis */ diff --git a/src/libadmin/cfg/test/cfgtest.c b/src/libadmin/cfg/test/cfgtest.c index 670c73f0db..3416e80066 100644 --- a/src/libadmin/cfg/test/cfgtest.c +++ b/src/libadmin/cfg/test/cfgtest.c @@ -90,7 +90,7 @@ CellServDbCallBack(void *callBackId, cfg_cellServDbStatus_t * statusItemP, static int -DoCellServDbAddHost(struct cmd_syndesc *as, char *arock) +DoCellServDbAddHost(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; int maxUpdates; @@ -135,7 +135,7 @@ DoCellServDbAddHost(struct cmd_syndesc *as, char *arock) static int -DoCellServDbRemoveHost(struct cmd_syndesc *as, char *arock) +DoCellServDbRemoveHost(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; int maxUpdates; @@ -181,7 +181,7 @@ DoCellServDbRemoveHost(struct cmd_syndesc *as, char *arock) static int -DoCellServDbEnumerate(struct cmd_syndesc *as, char *arock) +DoCellServDbEnumerate(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; char *fsDbHost = as->parms[0].items->data; @@ -216,21 +216,21 @@ SetupCellServDbCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("CellServDbAddHost", DoCellServDbAddHost, 0, + ts = cmd_CreateSyntax("CellServDbAddHost", DoCellServDbAddHost, NULL, "add configuration target to server CellServDB"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); cmd_AddParm(ts, "-syshost", CMD_SINGLE, CMD_OPTIONAL, "system control host"); - ts = cmd_CreateSyntax("CellServDbRemoveHost", DoCellServDbRemoveHost, 0, + ts = cmd_CreateSyntax("CellServDbRemoveHost", DoCellServDbRemoveHost, NULL, "remove configuration target from server CellServDB"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); cmd_AddParm(ts, "-syshost", CMD_SINGLE, CMD_OPTIONAL, "system control host"); - ts = cmd_CreateSyntax("CellServDbEnumerate", DoCellServDbEnumerate, 0, + ts = cmd_CreateSyntax("CellServDbEnumerate", DoCellServDbEnumerate, NULL, "enumerate server CellServDB from specified host"); cmd_AddParm(ts, "-host", CMD_SINGLE, CMD_REQUIRED, "host name"); @@ -245,7 +245,7 @@ SetupCellServDbCmd(void) static int -DoDbServersWaitForQuorum(struct cmd_syndesc *as, char *arock) +DoDbServersWaitForQuorum(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; void *hostHandle; @@ -273,7 +273,7 @@ DoDbServersWaitForQuorum(struct cmd_syndesc *as, char *arock) static int -DoFileServerStop(struct cmd_syndesc *as, char *arock) +DoFileServerStop(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; void *hostHandle; @@ -294,7 +294,7 @@ DoFileServerStop(struct cmd_syndesc *as, char *arock) } static int -DoFileServerStart(struct cmd_syndesc *as, char *arock) +DoFileServerStart(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; void *hostHandle; @@ -321,18 +321,18 @@ SetupServerCmd(void) struct cmd_syndesc *ts; ts = cmd_CreateSyntax("DbServersWaitForQuorum", DoDbServersWaitForQuorum, - 0, "wait for database servers to achieve quorum"); + NULL, "wait for database servers to achieve quorum"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); cmd_AddParm(ts, "-timeout", CMD_SINGLE, CMD_OPTIONAL, "timeout in seconds"); - ts = cmd_CreateSyntax("FileServerStop", DoFileServerStop, 0, + ts = cmd_CreateSyntax("FileServerStop", DoFileServerStop, NULL, "stop and unconfigure fileserver on specified host"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); - ts = cmd_CreateSyntax("FileServerStart", DoFileServerStart, 0, + ts = cmd_CreateSyntax("FileServerStart", DoFileServerStart, NULL, "start the fileserver on specified host"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); @@ -344,7 +344,7 @@ SetupServerCmd(void) static int -DoHostPartitionTableEnumerate(struct cmd_syndesc *as, char *arock) +DoHostPartitionTableEnumerate(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; cfg_partitionEntry_t *vptable; @@ -385,7 +385,7 @@ SetupHostCmd(void) struct cmd_syndesc *ts; ts = cmd_CreateSyntax("HostPartitionTableEnumerate", - DoHostPartitionTableEnumerate, 0, + DoHostPartitionTableEnumerate, NULL, "enumerate vice partition table"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); @@ -398,7 +398,7 @@ SetupHostCmd(void) static int -DoClientCellServDbAdd(struct cmd_syndesc *as, char *arock) +DoClientCellServDbAdd(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; void *hostHandle; @@ -422,7 +422,7 @@ DoClientCellServDbAdd(struct cmd_syndesc *as, char *arock) static int -DoClientCellServDbRemove(struct cmd_syndesc *as, char *arock) +DoClientCellServDbRemove(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; void *hostHandle; @@ -447,7 +447,7 @@ DoClientCellServDbRemove(struct cmd_syndesc *as, char *arock) static int -DoClientStart(struct cmd_syndesc *as, char *arock) +DoClientStart(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; void *hostHandle; @@ -474,7 +474,7 @@ DoClientStart(struct cmd_syndesc *as, char *arock) static int -DoClientStop(struct cmd_syndesc *as, char *arock) +DoClientStop(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; void *hostHandle; @@ -501,7 +501,7 @@ DoClientStop(struct cmd_syndesc *as, char *arock) static int -DoClientSetCell(struct cmd_syndesc *as, char *arock) +DoClientSetCell(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; void *hostHandle; @@ -544,7 +544,7 @@ DoClientSetCell(struct cmd_syndesc *as, char *arock) static int -DoClientQueryStatus(struct cmd_syndesc *as, char *arock) +DoClientQueryStatus(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; char *cfgHost = as->parms[0].items->data; @@ -578,7 +578,7 @@ DoClientQueryStatus(struct cmd_syndesc *as, char *arock) static int -DoHostQueryStatus(struct cmd_syndesc *as, char *arock) +DoHostQueryStatus(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; char *cfgHost = as->parms[0].items->data; @@ -610,7 +610,7 @@ SetupClientCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("ClientCellServDbAdd", DoClientCellServDbAdd, 0, + ts = cmd_CreateSyntax("ClientCellServDbAdd", DoClientCellServDbAdd, NULL, "add host entry to client CellServDB"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); @@ -618,38 +618,38 @@ SetupClientCmd(void) cmd_AddParm(ts, "-dbhost", CMD_SINGLE, CMD_REQUIRED, "host to add"); ts = cmd_CreateSyntax("ClientCellServDbRemove", DoClientCellServDbRemove, - 0, "remove host entry from client CellServDB"); + NULL, "remove host entry from client CellServDB"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); cmd_AddParm(ts, "-cell", CMD_SINGLE, CMD_REQUIRED, "cell name"); cmd_AddParm(ts, "-dbhost", CMD_SINGLE, CMD_REQUIRED, "host to remove"); - ts = cmd_CreateSyntax("ClientSetCell", DoClientSetCell, 0, + ts = cmd_CreateSyntax("ClientSetCell", DoClientSetCell, NULL, "set default client cell"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); cmd_AddParm(ts, "-cell", CMD_SINGLE, CMD_REQUIRED, "cell name"); cmd_AddParm(ts, "-dbhosts", CMD_LIST, CMD_REQUIRED, "database hosts"); - ts = cmd_CreateSyntax("ClientQueryStatus", DoClientQueryStatus, 0, + ts = cmd_CreateSyntax("ClientQueryStatus", DoClientQueryStatus, NULL, "query status of client on host"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); - ts = cmd_CreateSyntax("HostQueryStatus", DoHostQueryStatus, 0, + ts = cmd_CreateSyntax("HostQueryStatus", DoHostQueryStatus, NULL, "query status of server on host"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); - ts = cmd_CreateSyntax("ClientStart", DoClientStart, 0, + ts = cmd_CreateSyntax("ClientStart", DoClientStart, NULL, "start the client"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); cmd_AddParm(ts, "-timeout", CMD_SINGLE, CMD_REQUIRED, "wait timeout"); - ts = cmd_CreateSyntax("ClientStop", DoClientStop, 0, "stop the client"); + ts = cmd_CreateSyntax("ClientStop", DoClientStop, NULL, "stop the client"); cmd_AddParm(ts, "-cfghost", CMD_SINGLE, CMD_REQUIRED, "configuration host"); cmd_AddParm(ts, "-timeout", CMD_SINGLE, CMD_REQUIRED, "wait timeout"); diff --git a/src/libadmin/client/afs_clientAdmin.c b/src/libadmin/client/afs_clientAdmin.c index e7e561c100..5bc1116206 100644 --- a/src/libadmin/client/afs_clientAdmin.c +++ b/src/libadmin/client/afs_clientAdmin.c @@ -66,6 +66,8 @@ RCSID static const unsigned long ADMIN_TICKET_LIFETIME = 24 * 3600; +static const unsigned long SERVER_TTL = 10 * 60; + /* * We need a way to track whether or not the client library has been * initialized. We count on the fact that the other library initialization @@ -972,6 +974,8 @@ if (!t_handle->kas_token_set) continue; c_handle->begin_magic = BEGIN_MAGIC; c_handle->is_valid = 1; c_handle->is_null = 0; + c_handle->server_list = NULL; + c_handle->server_ttl = 0; c_handle->end_magic = END_MAGIC; *cellHandleP = (void *)c_handle; } @@ -1046,9 +1050,11 @@ afsclient_NullCellOpen(void **cellHandleP, afs_status_p st) c_handle->kas_valid = 0; c_handle->pts_valid = 0; c_handle->vos_valid = 0; - c_handle->kas = 0; - c_handle->pts = 0; - c_handle->vos = 0; + c_handle->kas = NULL; + c_handle->pts = NULL; + c_handle->vos = NULL; + c_handle->server_list = NULL; + c_handle->server_ttl = 0; *cellHandleP = (void *)c_handle; rc = 1; @@ -1097,6 +1103,8 @@ afsclient_CellClose(const void *cellHandle, afs_status_p st) goto fail_afsclient_CellClose; } + if (c_handle->server_list) + free(c_handle->server_list); if (c_handle->kas_valid) ubik_ClientDestroy(c_handle->kas); if (c_handle->pts_valid) @@ -1851,6 +1859,7 @@ afsclient_AFSServerGetBegin(const void *cellHandle, void **iterationIdP, afs_admin_iterator_p iter = (afs_admin_iterator_p) malloc(sizeof(afs_admin_iterator_t)); server_get_p serv = (server_get_p) calloc(1, sizeof(server_get_t)); + server_get_p serv_cache = NULL; const char *cellName; void *database_iter; util_databaseServerEntry_t database_entry; @@ -1873,57 +1882,77 @@ afsclient_AFSServerGetBegin(const void *cellHandle, void **iterationIdP, goto fail_afsclient_AFSServerGetBegin; } - /* - * Retrieve the list of database servers for this cell. - */ - - if (!afsclient_CellNameGet(cellHandle, &cellName, &tst)) { - goto fail_afsclient_AFSServerGetBegin; + restart: + LOCK_GLOBAL_MUTEX; + if (c_handle->server_list != NULL && c_handle->server_ttl < time(NULL)) { + serv_cache = c_handle->server_list; + c_handle->server_list = NULL; } + UNLOCK_GLOBAL_MUTEX; - if (!util_DatabaseServerGetBegin(cellName, &database_iter, &tst)) { - goto fail_afsclient_AFSServerGetBegin; - } + if (c_handle->server_list == NULL) { + if (serv_cache == NULL) { + serv_cache = (server_get_p) calloc(1, sizeof(server_get_t)); - while (util_DatabaseServerGetNext(database_iter, &database_entry, &tst)) { - serv->server[serv->total].serverAddress[0] = - database_entry.serverAddress; - serv->server[serv->total].serverType = DATABASE_SERVER; - serv->total++; - } + if (serv_cache == NULL) { + tst = ADMNOMEM; + goto fail_afsclient_AFSServerGetBegin; + } + } - if (tst != ADMITERATORDONE) { - util_DatabaseServerGetDone(database_iter, 0); - goto fail_afsclient_AFSServerGetBegin; - } - - if (!util_DatabaseServerGetDone(database_iter, &tst)) { - goto fail_afsclient_AFSServerGetBegin; - } - - /* - * Retrieve the list of file servers for this cell. - */ - - if (!vos_FileServerGetBegin(cellHandle, 0, &fileserver_iter, &tst)) { - goto fail_afsclient_AFSServerGetBegin; - } - - while (vos_FileServerGetNext(fileserver_iter, &fileserver_entry, &tst)) { /* - * See if any of the addresses returned in this fileserver_entry - * structure already exist in the list of servers we're building. - * If not, create a new record for this server. + * Retrieve the list of database servers for this cell. */ - is_dup = 0; - for (iserv = 0; iserv < serv->total; iserv++) { - for (ientryaddr = 0; ientryaddr < fileserver_entry.count; - ientryaddr++) { - for (iservaddr = 0; iservaddr < AFS_MAX_SERVER_ADDRESS; - iservaddr++) { - if (serv->server[iserv].serverAddress[iservaddr] == - fileserver_entry.serverAddress[ientryaddr]) { - is_dup = 1; + + if (!afsclient_CellNameGet(c_handle, &cellName, &tst)) { + goto fail_afsclient_AFSServerGetBegin; + } + + if (!util_DatabaseServerGetBegin(cellName, &database_iter, &tst)) { + goto fail_afsclient_AFSServerGetBegin; + } + + while (util_DatabaseServerGetNext(database_iter, &database_entry, &tst)) { + serv->server[serv->total].serverAddress[0] = + database_entry.serverAddress; + serv->server[serv->total].serverType = DATABASE_SERVER; + serv->total++; + } + + if (tst != ADMITERATORDONE) { + util_DatabaseServerGetDone(database_iter, 0); + goto fail_afsclient_AFSServerGetBegin; + } + + if (!util_DatabaseServerGetDone(database_iter, &tst)) { + goto fail_afsclient_AFSServerGetBegin; + } + + /* + * Retrieve the list of file servers for this cell. + */ + + if (!vos_FileServerGetBegin(c_handle, 0, &fileserver_iter, &tst)) { + goto fail_afsclient_AFSServerGetBegin; + } + + while (vos_FileServerGetNext(fileserver_iter, &fileserver_entry, &tst)) { + /* + * See if any of the addresses returned in this fileserver_entry + * structure already exist in the list of servers we're building. + * If not, create a new record for this server. + */ + is_dup = 0; + for (iserv = 0; iserv < serv->total; iserv++) { + for (ientryaddr = 0; ientryaddr < fileserver_entry.count; ientryaddr++) { + for (iservaddr = 0; iservaddr < AFS_MAX_SERVER_ADDRESS; iservaddr++) { + if (serv->server[iserv].serverAddress[iservaddr] == + fileserver_entry.serverAddress[ientryaddr]) { + is_dup = 1; + break; + } + } + if (is_dup) { break; } } @@ -1931,72 +1960,80 @@ afsclient_AFSServerGetBegin(const void *cellHandle, void **iterationIdP, break; } } + if (is_dup) { - break; + serv->server[iserv].serverType |= FILE_SERVER; + } else { + iserv = serv->total++; + serv->server[iserv].serverType = FILE_SERVER; } - } - if (is_dup) { - serv->server[iserv].serverType |= FILE_SERVER; - } else { - iserv = serv->total++; - serv->server[iserv].serverType = FILE_SERVER; - } + /* + * Add the addresses from the vldb list to the serv->server[iserv] + * record. Remember that VLDB's list-of-addrs is not guaranteed + * to be unique in a particular entry, or to return only one entry + * per machine--so when we add addresses, always check for + * duplicate entries. + */ - /* - * Add the addresses from the vldb list to the serv->server[iserv] - * record. Remember that VLDB's list-of-addrs is not guaranteed - * to be unique in a particular entry, or to return only one entry - * per machine--so when we add addresses, always check for - * duplicate entries. - */ - - for (ientryaddr = 0; ientryaddr < fileserver_entry.count; - ientryaddr++) { - for (iservaddr = 0; iservaddr < AFS_MAX_SERVER_ADDRESS; - iservaddr++) { - if (serv->server[iserv].serverAddress[iservaddr] == - fileserver_entry.serverAddress[ientryaddr]) { - break; - } - } - if (iservaddr == AFS_MAX_SERVER_ADDRESS) { - for (iservaddr = 0; iservaddr < AFS_MAX_SERVER_ADDRESS; - iservaddr++) { - if (!serv->server[iserv].serverAddress[iservaddr]) { - serv->server[iserv].serverAddress[iservaddr] = - fileserver_entry.serverAddress[ientryaddr]; + for (ientryaddr = 0; ientryaddr < fileserver_entry.count; ientryaddr++) { + for (iservaddr = 0; iservaddr < AFS_MAX_SERVER_ADDRESS; iservaddr++) { + if (serv->server[iserv].serverAddress[iservaddr] == + fileserver_entry.serverAddress[ientryaddr]) { break; } } + if (iservaddr == AFS_MAX_SERVER_ADDRESS) { + for (iservaddr = 0; iservaddr < AFS_MAX_SERVER_ADDRESS; + iservaddr++) { + if (!serv->server[iserv].serverAddress[iservaddr]) { + serv->server[iserv].serverAddress[iservaddr] = + fileserver_entry.serverAddress[ientryaddr]; + break; + } + } + } } } - } - if (tst != ADMITERATORDONE) { - vos_FileServerGetDone(fileserver_iter, 0); - goto fail_afsclient_AFSServerGetBegin; - } - - if (!vos_FileServerGetDone(fileserver_iter, &tst)) { - goto fail_afsclient_AFSServerGetBegin; - } - - /* - * Iterate over the list and fill in the hostname of each of the servers - */ - - LOCK_GLOBAL_MUTEX; - for (iserv = 0; iserv < serv->total; iserv++) { - int addr = htonl(serv->server[iserv].serverAddress[0]); - host = gethostbyaddr((const char *)&addr, sizeof(int), AF_INET); - if (host != NULL) { - strncpy(serv->server[iserv].serverName, host->h_name, - AFS_MAX_SERVER_NAME_LEN); - serv->server[iserv].serverName[AFS_MAX_SERVER_NAME_LEN - 1] = '\0'; + if (tst != ADMITERATORDONE) { + vos_FileServerGetDone(fileserver_iter, 0); + goto fail_afsclient_AFSServerGetBegin; } + + if (!vos_FileServerGetDone(fileserver_iter, &tst)) { + goto fail_afsclient_AFSServerGetBegin; + } + + /* + * Iterate over the list and fill in the hostname of each of the servers + */ + + for (iserv = 0; iserv < serv->total; iserv++) { + int addr = htonl(serv->server[iserv].serverAddress[0]); + LOCK_GLOBAL_MUTEX; + host = gethostbyaddr((const char *)&addr, sizeof(int), AF_INET); + if (host != NULL) { + strncpy(serv->server[iserv].serverName, host->h_name, + AFS_MAX_SERVER_NAME_LEN); + serv->server[iserv].serverName[AFS_MAX_SERVER_NAME_LEN - 1] = '\0'; + } + UNLOCK_GLOBAL_MUTEX; + } + + memcpy(serv_cache, serv, sizeof(server_get_t)); + } else { + int race = 0; + LOCK_GLOBAL_MUTEX; + if (c_handle->server_list == NULL) + race = 1; + else + memcpy(serv, c_handle->server_list, sizeof(server_get_t)); + UNLOCK_GLOBAL_MUTEX; + if (race) + goto restart; } - UNLOCK_GLOBAL_MUTEX; + if (IteratorInit (iter, (void *)serv, GetServerRPC, GetServerFromCache, NULL, NULL, &tst)) { @@ -2007,17 +2044,28 @@ afsclient_AFSServerGetBegin(const void *cellHandle, void **iterationIdP, fail_afsclient_AFSServerGetBegin: if (rc == 0) { - if (iter != NULL) { + if (iter != NULL) free(iter); - } - if (serv != NULL) { + if (serv != NULL) free(serv); + if (serv_cache != NULL) + free(serv_cache); + } else { + if (serv_cache) { + LOCK_GLOBAL_MUTEX; + /* in case there was a race and we constructed the list twice */ + if (c_handle->server_list) + free(c_handle->server_list); + + c_handle->server_list = serv_cache; + c_handle->server_ttl = time(NULL) + SERVER_TTL; + UNLOCK_GLOBAL_MUTEX; } } - if (st != NULL) { + if (st != NULL) *st = tst; - } + return rc; } diff --git a/src/libadmin/kas/afs_kasAdmin.c b/src/libadmin/kas/afs_kasAdmin.c index 468b72583a..d3bbdce1d0 100644 --- a/src/libadmin/kas/afs_kasAdmin.c +++ b/src/libadmin/kas/afs_kasAdmin.c @@ -14,14 +14,7 @@ RCSID ("$Header$"); #include - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include "afs_kasAdmin.h" diff --git a/src/libadmin/pts/afs_ptsAdmin.c b/src/libadmin/pts/afs_ptsAdmin.c index 1a6bfae8d0..bdcae6b579 100644 --- a/src/libadmin/pts/afs_ptsAdmin.c +++ b/src/libadmin/pts/afs_ptsAdmin.c @@ -14,15 +14,6 @@ RCSID ("$Header$"); #include - -#ifdef HAVE_STRING_H -#include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif - #include #include "afs_ptsAdmin.h" #include "../adminutil/afs_AdminInternal.h" diff --git a/src/libadmin/samples/rxdebug_conns.c b/src/libadmin/samples/rxdebug_conns.c index 00e00f6644..2e0ff99fbb 100644 --- a/src/libadmin/samples/rxdebug_conns.c +++ b/src/libadmin/samples/rxdebug_conns.c @@ -69,7 +69,7 @@ main(int argc, char *argv[]) struct rx_debugConn conn; afs_uint32 supportedStats; afs_uint32 supportedValues; - int allconns; + int allconns = 1; int i; ParseArgs(argc, argv, &srvrName, &srvrPort); diff --git a/src/libadmin/samples/rxdebug_rx_stats.c b/src/libadmin/samples/rxdebug_rx_stats.c index d4d230eb82..b8ed0af327 100644 --- a/src/libadmin/samples/rxdebug_rx_stats.c +++ b/src/libadmin/samples/rxdebug_rx_stats.c @@ -23,15 +23,7 @@ RCSID #include #include #endif - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif - #include #include #include diff --git a/src/libadmin/samples/rxstat_get_peer.c b/src/libadmin/samples/rxstat_get_peer.c index 3b25040077..0632411ea2 100644 --- a/src/libadmin/samples/rxstat_get_peer.c +++ b/src/libadmin/samples/rxstat_get_peer.c @@ -24,13 +24,7 @@ RCSID #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include diff --git a/src/libadmin/samples/rxstat_get_process.c b/src/libadmin/samples/rxstat_get_process.c index 0eb31bdaba..6c7bc35716 100644 --- a/src/libadmin/samples/rxstat_get_process.c +++ b/src/libadmin/samples/rxstat_get_process.c @@ -23,14 +23,7 @@ RCSID #include #include #endif - -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include diff --git a/src/libadmin/test/afscp.c b/src/libadmin/test/afscp.c index 48259b6719..af0fb22a8c 100644 --- a/src/libadmin/test/afscp.c +++ b/src/libadmin/test/afscp.c @@ -59,7 +59,7 @@ pthread_mutex_t rxkad_random_mutex = PTHREAD_MUTEX_INITIALIZER; */ static int -MyBeforeProc(struct cmd_syndesc *as, char *arock) +MyBeforeProc(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; int no_auth = 0; @@ -149,7 +149,7 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock) } static int -MyAfterProc(struct cmd_syndesc *as) +MyAfterProc(struct cmd_syndesc *as,void *arock) { afsclient_CellClose(cellHandle, (afs_status_p) 0); diff --git a/src/libadmin/test/bos.c b/src/libadmin/test/bos.c index ec7b95ab22..bc85cc932b 100644 --- a/src/libadmin/test/bos.c +++ b/src/libadmin/test/bos.c @@ -268,7 +268,7 @@ ktime_ParsePeriodic(char *adate, bos_RestartTime_p ak) } int -DoBosProcessCreate(struct cmd_syndesc *as, char *arock) +DoBosProcessCreate(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS, BINARY, CRON, CRONTIME, NOTIFIER @@ -334,7 +334,7 @@ DoBosProcessCreate(struct cmd_syndesc *as, char *arock) } int -DoBosFSProcessCreate(struct cmd_syndesc *as, char *arock) +DoBosFSProcessCreate(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS, FILESERVER, VOLSERVER, SALVAGER, NOTIFIER @@ -386,7 +386,7 @@ DoBosFSProcessCreate(struct cmd_syndesc *as, char *arock) } int -DoBosProcessDelete(struct cmd_syndesc *as, char *arock) +DoBosProcessDelete(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS } DoBosProcessDelete_parm_t; afs_status_t st = 0; @@ -435,7 +435,7 @@ Print_bos_ProcessExecutionState_p(bos_ProcessExecutionState_p state, } int -DoBosProcessExecutionStateGet(struct cmd_syndesc *as, char *arock) +DoBosProcessExecutionStateGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS } DoBosProcessExecutionStateGet_parm_t; afs_status_t st = 0; @@ -471,7 +471,7 @@ DoBosProcessExecutionStateGet(struct cmd_syndesc *as, char *arock) } int -DoBosProcessExecutionStateSet(struct cmd_syndesc *as, char *arock) +DoBosProcessExecutionStateSet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS, STOPPED, RUNNING @@ -522,7 +522,7 @@ DoBosProcessExecutionStateSet(struct cmd_syndesc *as, char *arock) } int -DoBosProcessExecutionStateSetTemporary(struct cmd_syndesc *as, char *arock) +DoBosProcessExecutionStateSetTemporary(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS, STOPPED, RUNNING @@ -574,7 +574,7 @@ DoBosProcessExecutionStateSetTemporary(struct cmd_syndesc *as, char *arock) } int -DoBosProcessNameList(struct cmd_syndesc *as, char *arock) +DoBosProcessNameList(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoBosProcessNameList_parm_t; afs_status_t st = 0; @@ -663,7 +663,7 @@ Print_bos_ProcessInfo_p(bos_ProcessInfo_p info, const char *prefix) } int -DoBosProcessInfoGet(struct cmd_syndesc *as, char *arock) +DoBosProcessInfoGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS } DoBosProcessInfoGet_parm_t; afs_status_t st = 0; @@ -694,7 +694,7 @@ DoBosProcessInfoGet(struct cmd_syndesc *as, char *arock) } int -DoBosProcessParameterList(struct cmd_syndesc *as, char *arock) +DoBosProcessParameterList(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS } DoBosProcessParameterList_parm_t; afs_status_t st = 0; @@ -738,7 +738,7 @@ DoBosProcessParameterList(struct cmd_syndesc *as, char *arock) } int -DoBosProcessNotifierGet(struct cmd_syndesc *as, char *arock) +DoBosProcessNotifierGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS } DoBosProcessNotifierGet_parm_t; afs_status_t st = 0; @@ -773,7 +773,7 @@ DoBosProcessNotifierGet(struct cmd_syndesc *as, char *arock) } int -DoBosProcessRestart(struct cmd_syndesc *as, char *arock) +DoBosProcessRestart(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS } DoBosProcessRestart_parm_t; afs_status_t st = 0; @@ -801,7 +801,7 @@ DoBosProcessRestart(struct cmd_syndesc *as, char *arock) } int -DoBosProcessAllStop(struct cmd_syndesc *as, char *arock) +DoBosProcessAllStop(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoBosProcessAllStop_parm_t; afs_status_t st = 0; @@ -824,7 +824,7 @@ DoBosProcessAllStop(struct cmd_syndesc *as, char *arock) } int -DoBosProcessAllStart(struct cmd_syndesc *as, char *arock) +DoBosProcessAllStart(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoBosProcessAllStart_parm_t; afs_status_t st = 0; @@ -847,7 +847,7 @@ DoBosProcessAllStart(struct cmd_syndesc *as, char *arock) } int -DoBosProcessAllWaitStop(struct cmd_syndesc *as, char *arock) +DoBosProcessAllWaitStop(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoBosProcessAllWaitStop_parm_t; afs_status_t st = 0; @@ -870,7 +870,7 @@ DoBosProcessAllWaitStop(struct cmd_syndesc *as, char *arock) } int -DoBosProcessAllWaitTransition(struct cmd_syndesc *as, char *arock) +DoBosProcessAllWaitTransition(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoBosProcessAllWaitTransition_parm_t; afs_status_t st = 0; @@ -893,7 +893,7 @@ DoBosProcessAllWaitTransition(struct cmd_syndesc *as, char *arock) } int -DoBosProcessAllStopAndRestart(struct cmd_syndesc *as, char *arock) +DoBosProcessAllStopAndRestart(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, INCLUDEBOS } DoBosProcessAllStopAndRestart_parm_t; afs_status_t st = 0; @@ -921,7 +921,7 @@ DoBosProcessAllStopAndRestart(struct cmd_syndesc *as, char *arock) } int -DoBosAdminCreate(struct cmd_syndesc *as, char *arock) +DoBosAdminCreate(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, ADMIN } DoBosAdminCreate_parm_t; afs_status_t st = 0; @@ -949,7 +949,7 @@ DoBosAdminCreate(struct cmd_syndesc *as, char *arock) } int -DoBosAdminDelete(struct cmd_syndesc *as, char *arock) +DoBosAdminDelete(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, ADMIN } DoBosAdminDelete_parm_t; afs_status_t st = 0; @@ -977,7 +977,7 @@ DoBosAdminDelete(struct cmd_syndesc *as, char *arock) } int -DoBosAdminList(struct cmd_syndesc *as, char *arock) +DoBosAdminList(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoBosAdminList_parm_t; afs_status_t st = 0; @@ -1016,7 +1016,7 @@ DoBosAdminList(struct cmd_syndesc *as, char *arock) } int -DoBosKeyCreate(struct cmd_syndesc *as, char *arock) +DoBosKeyCreate(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, VERSIONNUMBER, KEY } DoBosKeyCreate_parm_t; afs_status_t st = 0; @@ -1058,7 +1058,7 @@ DoBosKeyCreate(struct cmd_syndesc *as, char *arock) } int -DoBosKeyDelete(struct cmd_syndesc *as, char *arock) +DoBosKeyDelete(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, VERSIONNUMBER } DoBosKeyDelete_parm_t; afs_status_t st = 0; @@ -1106,7 +1106,7 @@ Print_bos_KeyInfo_p(bos_KeyInfo_p key, const char *prefix) } int -DoBosKeyList(struct cmd_syndesc *as, char *arock) +DoBosKeyList(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoBosKeyList_parm_t; afs_status_t st = 0; @@ -1145,7 +1145,7 @@ DoBosKeyList(struct cmd_syndesc *as, char *arock) } int -DoBosCellSet(struct cmd_syndesc *as, char *arock) +DoBosCellSet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, CELL } DoBosCellSet_parm_t; afs_status_t st = 0; @@ -1173,7 +1173,7 @@ DoBosCellSet(struct cmd_syndesc *as, char *arock) } int -DoBosCellGet(struct cmd_syndesc *as, char *arock) +DoBosCellGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoBosCellGet_parm_t; afs_status_t st = 0; @@ -1199,7 +1199,7 @@ DoBosCellGet(struct cmd_syndesc *as, char *arock) } int -DoBosHostCreate(struct cmd_syndesc *as, char *arock) +DoBosHostCreate(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, HOST } DoBosHostCreate_parm_t; afs_status_t st = 0; @@ -1227,7 +1227,7 @@ DoBosHostCreate(struct cmd_syndesc *as, char *arock) } int -DoBosHostDelete(struct cmd_syndesc *as, char *arock) +DoBosHostDelete(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, HOST } DoBosHostDelete_parm_t; afs_status_t st = 0; @@ -1255,7 +1255,7 @@ DoBosHostDelete(struct cmd_syndesc *as, char *arock) } int -DoBosHostList(struct cmd_syndesc *as, char *arock) +DoBosHostList(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoBosHostList_parm_t; afs_status_t st = 0; @@ -1294,7 +1294,7 @@ DoBosHostList(struct cmd_syndesc *as, char *arock) } int -DoBosExecutableCreate(struct cmd_syndesc *as, char *arock) +DoBosExecutableCreate(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, BINARY, DEST } DoBosExecutableCreate_parm_t; afs_status_t st = 0; @@ -1327,7 +1327,7 @@ DoBosExecutableCreate(struct cmd_syndesc *as, char *arock) } int -DoBosExecutableRevert(struct cmd_syndesc *as, char *arock) +DoBosExecutableRevert(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, EXECUTABLE } DoBosExecutableRevert_parm_t; afs_status_t st = 0; @@ -1355,7 +1355,7 @@ DoBosExecutableRevert(struct cmd_syndesc *as, char *arock) } int -DoBosExecutableTimestampGet(struct cmd_syndesc *as, char *arock) +DoBosExecutableTimestampGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, EXECUTABLE } DoBosExecutableTimestampGet_parm_t; afs_status_t st = 0; @@ -1387,7 +1387,7 @@ DoBosExecutableTimestampGet(struct cmd_syndesc *as, char *arock) } int -DoBosExecutablePrune(struct cmd_syndesc *as, char *arock) +DoBosExecutablePrune(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, OLDFILES, BAKFILES, COREFILES @@ -1428,7 +1428,7 @@ DoBosExecutablePrune(struct cmd_syndesc *as, char *arock) } int -DoBosExecutableRestartTimeSet(struct cmd_syndesc *as, char *arock) +DoBosExecutableRestartTimeSet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, DAILY, WEEKLY, TIME @@ -1527,7 +1527,7 @@ Print_bos_RestartTime_p(bos_RestartTime_p restart, const char *prefix) } int -DoBosExecutableRestartTimeGet(struct cmd_syndesc *as, char *arock) +DoBosExecutableRestartTimeGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, DAILY, WEEKLY @@ -1578,7 +1578,7 @@ DoBosExecutableRestartTimeGet(struct cmd_syndesc *as, char *arock) #define INITIAL_BUF_SIZE 4096 int -DoBosLogGet(struct cmd_syndesc *as, char *arock) +DoBosLogGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, LOGFILE } DoBosLogGet_parm_t; afs_status_t st = 0; @@ -1626,7 +1626,7 @@ DoBosLogGet(struct cmd_syndesc *as, char *arock) } int -DoBosAuthSet(struct cmd_syndesc *as, char *arock) +DoBosAuthSet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, REQUIREAUTH, DISABLEAUTH } DoBosAuthSet_parm_t; afs_status_t st = 0; @@ -1670,7 +1670,7 @@ DoBosAuthSet(struct cmd_syndesc *as, char *arock) } int -DoBosCommandExecute(struct cmd_syndesc *as, char *arock) +DoBosCommandExecute(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, COMMAND } DoBosCommandExecute_parm_t; afs_status_t st = 0; @@ -1698,7 +1698,7 @@ DoBosCommandExecute(struct cmd_syndesc *as, char *arock) } int -DoBosSalvage(struct cmd_syndesc *as, char *arock) +DoBosSalvage(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME, NUMSALVAGERS, TMPDIR, LOGFILE, FORCE, NOWRITE, INODES, ROOTINODES, SALVAGEDIRS, BLOCKREADS @@ -1802,7 +1802,7 @@ SetupBosAdminCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("BosProcessCreate", DoBosProcessCreate, 0, + ts = cmd_CreateSyntax("BosProcessCreate", DoBosProcessCreate, NULL, "create a new bos process"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where process will be created"); @@ -1818,7 +1818,7 @@ SetupBosAdminCmd(void) "path to notifier binary that is run when process terminates"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosFSProcessCreate", DoBosFSProcessCreate, 0, + ts = cmd_CreateSyntax("BosFSProcessCreate", DoBosFSProcessCreate, NULL, "create a fs bos process"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where process will be created"); @@ -1834,7 +1834,7 @@ SetupBosAdminCmd(void) "path to notifier binary that is run when process terminates"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosProcessDelete", DoBosProcessDelete, 0, + ts = cmd_CreateSyntax("BosProcessDelete", DoBosProcessDelete, NULL, "delete a bos process"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where process will be deleted"); @@ -1843,7 +1843,7 @@ SetupBosAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("BosProcessExecutionStateGet", - DoBosProcessExecutionStateGet, 0, + DoBosProcessExecutionStateGet, NULL, "get the process execution state of a process"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where process exists"); @@ -1852,7 +1852,7 @@ SetupBosAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("BosProcessExecutionStateSet", - DoBosProcessExecutionStateSet, 0, + DoBosProcessExecutionStateSet, NULL, "set the process execution state of a process"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where process exists"); @@ -1865,7 +1865,7 @@ SetupBosAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("BosProcessExecutionStateSetTemporary", - DoBosProcessExecutionStateSetTemporary, 0, + DoBosProcessExecutionStateSetTemporary, NULL, "set the process execution state " "of a process temporarily"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, @@ -1878,12 +1878,12 @@ SetupBosAdminCmd(void) "set the process state to running"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosProcessNameList", DoBosProcessNameList, 0, + ts = cmd_CreateSyntax("BosProcessNameList", DoBosProcessNameList, NULL, "list the names of all processes at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosProcessInfoGet", DoBosProcessInfoGet, 0, + ts = cmd_CreateSyntax("BosProcessInfoGet", DoBosProcessInfoGet, NULL, "get information about a process"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where process exists"); @@ -1892,7 +1892,7 @@ SetupBosAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("BosProcessParameterList", - DoBosProcessParameterList, 0, + DoBosProcessParameterList, NULL, "list the parameters of a process"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where process exists"); @@ -1900,7 +1900,7 @@ SetupBosAdminCmd(void) "the name of the process"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosProcessNotifierGet", DoBosProcessNotifierGet, 0, + ts = cmd_CreateSyntax("BosProcessNotifierGet", DoBosProcessNotifierGet, NULL, "get the notifier for a process"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where process exists"); @@ -1908,7 +1908,7 @@ SetupBosAdminCmd(void) "the name of the process"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosProcessRestart", DoBosProcessRestart, 0, + ts = cmd_CreateSyntax("BosProcessRestart", DoBosProcessRestart, NULL, "restart a process"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where process exists"); @@ -1916,13 +1916,13 @@ SetupBosAdminCmd(void) "the name of the process"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosProcessAllStop", DoBosProcessAllStop, 0, + ts = cmd_CreateSyntax("BosProcessAllStop", DoBosProcessAllStop, NULL, "stop all processes at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where processes exists"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosProcessAllWaitStop", DoBosProcessAllWaitStop, 0, + ts = cmd_CreateSyntax("BosProcessAllWaitStop", DoBosProcessAllWaitStop, NULL, "stop all processes at a bos server and block " "until they all exit"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, @@ -1930,7 +1930,7 @@ SetupBosAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("BosProcessAllWaitTransition", - DoBosProcessAllWaitTransition, 0, + DoBosProcessAllWaitTransition, NULL, "wait until all processes have transitioned to " "their desired state"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, @@ -1938,7 +1938,7 @@ SetupBosAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("BosProcessAllStopAndRestart", - DoBosProcessAllStopAndRestart, 0, + DoBosProcessAllStopAndRestart, NULL, "stop all processes at a bos server and " "then restart them"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, @@ -1947,7 +1947,7 @@ SetupBosAdminCmd(void) "include the bos server in the processes to be restarted"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosAdminCreate", DoBosAdminCreate, 0, + ts = cmd_CreateSyntax("BosAdminCreate", DoBosAdminCreate, NULL, "create an admin user at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where admin will be created"); @@ -1955,7 +1955,7 @@ SetupBosAdminCmd(void) "the name of the administrator to add"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosAdminDelete", DoBosAdminDelete, 0, + ts = cmd_CreateSyntax("BosAdminDelete", DoBosAdminDelete, NULL, "delete an admin user at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where admin will be deleted"); @@ -1963,13 +1963,13 @@ SetupBosAdminCmd(void) "the name of the administrator to delete"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosAdminList", DoBosAdminList, 0, + ts = cmd_CreateSyntax("BosAdminList", DoBosAdminList, NULL, "list all admin users at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where admins will be listed"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosKeyCreate", DoBosKeyCreate, 0, + ts = cmd_CreateSyntax("BosKeyCreate", DoBosKeyCreate, NULL, "create a key at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where key will be created"); @@ -1978,7 +1978,7 @@ SetupBosAdminCmd(void) cmd_AddParm(ts, "-key", CMD_SINGLE, CMD_REQUIRED, "new encryption key"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosKeyDelete", DoBosKeyDelete, 0, + ts = cmd_CreateSyntax("BosKeyDelete", DoBosKeyDelete, NULL, "delete a key at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where key will be deleted"); @@ -1986,41 +1986,41 @@ SetupBosAdminCmd(void) "version number of the key"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosKeyList", DoBosKeyList, 0, + ts = cmd_CreateSyntax("BosKeyList", DoBosKeyList, NULL, "list keys at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where keys exist"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosCellSet", DoBosCellSet, 0, + ts = cmd_CreateSyntax("BosCellSet", DoBosCellSet, NULL, "set the cell at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to modify"); cmd_AddParm(ts, "-cell", CMD_SINGLE, CMD_REQUIRED, "new cell"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosCellGet", DoBosCellGet, 0, + ts = cmd_CreateSyntax("BosCellGet", DoBosCellGet, NULL, "get the cell at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosHostCreate", DoBosHostCreate, 0, + ts = cmd_CreateSyntax("BosHostCreate", DoBosHostCreate, NULL, "add a host entry to the server CellServDB"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to modify"); cmd_AddParm(ts, "-host", CMD_SINGLE, CMD_REQUIRED, "host to add"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosHostDelete", DoBosHostDelete, 0, + ts = cmd_CreateSyntax("BosHostDelete", DoBosHostDelete, NULL, "delete a host entry from the server CellServDB"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to modify"); cmd_AddParm(ts, "-host", CMD_SINGLE, CMD_REQUIRED, "host to delete"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosHostList", DoBosHostList, 0, + ts = cmd_CreateSyntax("BosHostList", DoBosHostList, NULL, "list all host entries from the server CellServDB"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosExecutableCreate", DoBosExecutableCreate, 0, + ts = cmd_CreateSyntax("BosExecutableCreate", DoBosExecutableCreate, NULL, "create a new binary at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to modify"); cmd_AddParm(ts, "-binary", CMD_SINGLE, CMD_REQUIRED, @@ -2029,7 +2029,7 @@ SetupBosAdminCmd(void) "path where the binary will be stored"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosExecutableRevert", DoBosExecutableRevert, 0, + ts = cmd_CreateSyntax("BosExecutableRevert", DoBosExecutableRevert, NULL, "revert a binary at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to modify"); cmd_AddParm(ts, "-executable", CMD_SINGLE, CMD_REQUIRED, @@ -2037,14 +2037,14 @@ SetupBosAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("BosExecutableTimestampGet", - DoBosExecutableTimestampGet, 0, + DoBosExecutableTimestampGet, NULL, "get the timestamps for a binary at bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to query"); cmd_AddParm(ts, "-executable", CMD_SINGLE, CMD_REQUIRED, "path to the binary to revert"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosExecutablePrune", DoBosExecutablePrune, 0, + ts = cmd_CreateSyntax("BosExecutablePrune", DoBosExecutablePrune, NULL, "prune various files at bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to modify"); cmd_AddParm(ts, "-oldfiles", CMD_FLAG, CMD_OPTIONAL, "prune .old files"); @@ -2053,7 +2053,7 @@ SetupBosAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("BosExecutableRestartTimeSet", - DoBosExecutableRestartTimeSet, 0, + DoBosExecutableRestartTimeSet, NULL, "set the restart times at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to modify"); cmd_AddParm(ts, "-daily", CMD_FLAG, CMD_OPTIONAL, @@ -2065,7 +2065,7 @@ SetupBosAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("BosExecutableRestartTimeGet", - DoBosExecutableRestartTimeGet, 0, + DoBosExecutableRestartTimeGet, NULL, "get the restart times at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to query"); cmd_AddParm(ts, "-daily", CMD_FLAG, CMD_OPTIONAL, @@ -2074,14 +2074,14 @@ SetupBosAdminCmd(void) "get weekly restart time"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosLogGet", DoBosLogGet, 0, + ts = cmd_CreateSyntax("BosLogGet", DoBosLogGet, NULL, "get a log file from the bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to query"); cmd_AddParm(ts, "-logfile", CMD_SINGLE, CMD_REQUIRED, "path to the log file to retrieve"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosAuthSet", DoBosAuthSet, 0, + ts = cmd_CreateSyntax("BosAuthSet", DoBosAuthSet, NULL, "set the authorization level at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to modify"); cmd_AddParm(ts, "-requireauth", CMD_FLAG, CMD_OPTIONAL, @@ -2098,7 +2098,7 @@ SetupBosAdminCmd(void) "command to execute"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("BosSalvage", DoBosSalvage, 0, + ts = cmd_CreateSyntax("BosSalvage", DoBosSalvage, NULL, "execute a salvage command at a bos server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where salvager will execute"); diff --git a/src/libadmin/test/client.c b/src/libadmin/test/client.c index 8b18ba02c0..c4fd4d43ba 100644 --- a/src/libadmin/test/client.c +++ b/src/libadmin/test/client.c @@ -262,7 +262,7 @@ interface_t int_list[] = { */ int -DoClientLocalCellGet(struct cmd_syndesc *as, char *arock) +DoClientLocalCellGet(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; char cellName[MAXCELLCHARS]; @@ -277,7 +277,7 @@ DoClientLocalCellGet(struct cmd_syndesc *as, char *arock) } int -DoClientMountPointCreate(struct cmd_syndesc *as, char *arock) +DoClientMountPointCreate(struct cmd_syndesc *as, void *arock) { typedef enum { DIRECTORY, VOLUME, READWRITE, CHECK @@ -331,7 +331,7 @@ Print_afs_serverEntry_p(afs_serverEntry_p serv, const char *prefix) } int -DoClientAFSServerGet(struct cmd_syndesc *as, char *arock) +DoClientAFSServerGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoClientAFSServerGet_parm_t; afs_status_t st = 0; @@ -352,7 +352,7 @@ DoClientAFSServerGet(struct cmd_syndesc *as, char *arock) } int -DoClientAFSServerList(struct cmd_syndesc *as, char *arock) +DoClientAFSServerList(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; afs_serverEntry_t entry; @@ -476,7 +476,7 @@ GetStatTypeFromString(const char *type) } int -DoClientRPCStatsStateGet(struct cmd_syndesc *as, char *arock) +DoClientRPCStatsStateGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS, STAT_TYPE @@ -536,7 +536,7 @@ DoClientRPCStatsStateGet(struct cmd_syndesc *as, char *arock) } int -DoClientRPCStatsStateEnable(struct cmd_syndesc *as, char *arock) +DoClientRPCStatsStateEnable(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS, STAT_TYPE } DoClientRPCStatsEnable_parm_t; afs_status_t st = 0; @@ -590,7 +590,7 @@ DoClientRPCStatsStateEnable(struct cmd_syndesc *as, char *arock) } int -DoClientRPCStatsStateDisable(struct cmd_syndesc *as, char *arock) +DoClientRPCStatsStateDisable(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS, STAT_TYPE @@ -694,7 +694,7 @@ Print_afs_RPCStats_p(afs_RPCStats_p stat, interface_function_list_p f_list, } int -DoClientRPCStatsList(struct cmd_syndesc *as, char *arock) +DoClientRPCStatsList(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS, STAT_TYPE } DoClientRPCStatsList_parm_t; afs_status_t st = 0; @@ -819,7 +819,7 @@ DoClientRPCStatsList(struct cmd_syndesc *as, char *arock) } int -DoClientRPCStatsClear(struct cmd_syndesc *as, char *arock) +DoClientRPCStatsClear(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS, STAT_TYPE, CLEAR_ALL, CLEAR_INVOCATIONS, CLEAR_BYTES_SENT, CLEAR_BYTES_RCVD, @@ -991,7 +991,7 @@ DoClientRPCStatsClear(struct cmd_syndesc *as, char *arock) } int -DoClientRPCStatsVersionGet(struct cmd_syndesc *as, char *arock) +DoClientRPCStatsVersionGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PROCESS } DoClientRPCStatsVersionGet_parm_t; afs_status_t st = 0; @@ -1047,7 +1047,7 @@ Print_afs_CMServerPref_p(afs_CMServerPref_p pref) } int -DoClientCMGetServerPrefs(struct cmd_syndesc *as, char *arock) +DoClientCMGetServerPrefs(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; typedef enum { SERVER, PORT } DoClientCMGetServerPrefs_parm_t; @@ -1117,7 +1117,7 @@ Print_afs_CMListCell_p(afs_CMListCell_p cellInfo) } int -DoClientCMListCells(struct cmd_syndesc *as, char *arock) +DoClientCMListCells(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; typedef enum { SERVER, PORT } DoClientCMListCells_parm_t; @@ -1172,7 +1172,7 @@ DoClientCMListCells(struct cmd_syndesc *as, char *arock) } int -DoClientCMLocalCell(struct cmd_syndesc *as, char *arock) +DoClientCMLocalCell(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; typedef enum { SERVER, PORT } DoClientCMLocalCell_parm_t; @@ -1231,7 +1231,7 @@ Print_afs_ClientConfig_p(afs_ClientConfig_p config) } int -DoClientCMClientConfig(struct cmd_syndesc *as, char *arock) +DoClientCMClientConfig(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; typedef enum { SERVER, PORT } DoClientCMLocalCell_parm_t; @@ -1280,12 +1280,12 @@ SetupClientAdminCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("ClientLocalCellGet", DoClientLocalCellGet, 0, + ts = cmd_CreateSyntax("ClientLocalCellGet", DoClientLocalCellGet, NULL, "get the name of this machine's cell"); SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("ClientMountPointCreate", DoClientMountPointCreate, - 0, "create a mount point"); + NULL, "create a mount point"); cmd_AddParm(ts, "-directory", CMD_SINGLE, CMD_REQUIRED, "directory where mount point will be created"); cmd_AddParm(ts, "-volume", CMD_SINGLE, CMD_REQUIRED, @@ -1296,12 +1296,12 @@ SetupClientAdminCmd(void) "check that the volume exists before mounting"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("ClientAFSServerGet", DoClientAFSServerGet, 0, + ts = cmd_CreateSyntax("ClientAFSServerGet", DoClientAFSServerGet, NULL, "retrieve information about an afs server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("ClientAFSServerList", DoClientAFSServerList, 0, + ts = cmd_CreateSyntax("ClientAFSServerList", DoClientAFSServerList, NULL, "retrieve information about all afs " "servers in a cell"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, @@ -1314,7 +1314,7 @@ SetupClientAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("ClientRPCStatsStateGet", DoClientRPCStatsStateGet, - 0, "retrieve the rpc stat collection state"); + NULL, "retrieve the rpc stat collection state"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where command will execute"); cmd_AddParm(ts, "-process", CMD_SINGLE, CMD_REQUIRED, @@ -1325,7 +1325,7 @@ SetupClientAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("ClientRPCStatsStateEnable", - DoClientRPCStatsStateEnable, 0, + DoClientRPCStatsStateEnable, NULL, "set the rpc stat collection state to on"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where command will execute"); @@ -1337,7 +1337,7 @@ SetupClientAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("ClientRPCStatsStateDisable", - DoClientRPCStatsStateDisable, 0, + DoClientRPCStatsStateDisable, NULL, "set the rpc stat collection state to off"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where command will execute"); @@ -1348,7 +1348,7 @@ SetupClientAdminCmd(void) "stats to retrieve "); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("ClientRPCStatsList", DoClientRPCStatsList, 0, + ts = cmd_CreateSyntax("ClientRPCStatsList", DoClientRPCStatsList, NULL, "list the rpc stats"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where command will execute"); @@ -1359,7 +1359,7 @@ SetupClientAdminCmd(void) "stats to retrieve "); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("ClientRPCStatsClear", DoClientRPCStatsClear, 0, + ts = cmd_CreateSyntax("ClientRPCStatsClear", DoClientRPCStatsClear, NULL, "reset rpc stat counters"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where command will execute"); @@ -1395,7 +1395,7 @@ SetupClientAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("ClientRPCStatsVersionGet", - DoClientRPCStatsVersionGet, 0, + DoClientRPCStatsVersionGet, NULL, "list the server's rpc stats version"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where command will execute"); @@ -1405,27 +1405,27 @@ SetupClientAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("ClientCMGetServerPrefs", DoClientCMGetServerPrefs, - 0, "list a client's server preferences "); + NULL, "list a client's server preferences "); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where command will execute"); cmd_AddParm(ts, "-port", CMD_SINGLE, CMD_OPTIONAL, "UDP port to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("ClientCMListCells", DoClientCMListCells, 0, + ts = cmd_CreateSyntax("ClientCMListCells", DoClientCMListCells, NULL, "list a client's CellServDB "); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where command will execute"); cmd_AddParm(ts, "-port", CMD_SINGLE, CMD_OPTIONAL, "UDP port to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("ClientCMLocalCell", DoClientCMLocalCell, 0, + ts = cmd_CreateSyntax("ClientCMLocalCell", DoClientCMLocalCell, NULL, "get the name of the client's local cell"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where command will execute"); cmd_AddParm(ts, "-port", CMD_SINGLE, CMD_OPTIONAL, "UDP port to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("ClientCMClientConfig", DoClientCMClientConfig, 0, + ts = cmd_CreateSyntax("ClientCMClientConfig", DoClientCMClientConfig, NULL, "get the client's cache configuration"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where command will execute"); diff --git a/src/libadmin/test/kas.c b/src/libadmin/test/kas.c index 4de8be6aa4..a2d3dc513d 100644 --- a/src/libadmin/test/kas.c +++ b/src/libadmin/test/kas.c @@ -45,7 +45,7 @@ GetIntFromString(const char *int_str, const char *error_msg) } int -DoKasPrincipalCreate(struct cmd_syndesc *as, char *arock) +DoKasPrincipalCreate(struct cmd_syndesc *as, void *arock) { typedef enum { PRINCIPAL, INSTANCE, PASSWORD @@ -73,7 +73,7 @@ DoKasPrincipalCreate(struct cmd_syndesc *as, char *arock) } int -DoKasPrincipalDelete(struct cmd_syndesc *as, char *arock) +DoKasPrincipalDelete(struct cmd_syndesc *as, void *arock) { typedef enum { PRINCIPAL, INSTANCE } DoKasPrincipalGet_parm_t; afs_status_t st = 0; @@ -160,7 +160,7 @@ Print_kas_principalEntry_p(kas_principalEntry_p principal, const char *prefix) } int -DoKasPrincipalGet(struct cmd_syndesc *as, char *arock) +DoKasPrincipalGet(struct cmd_syndesc *as, void *arock) { typedef enum { PRINCIPAL, INSTANCE } DoKasPrincipalGet_parm_t; afs_status_t st = 0; @@ -186,7 +186,7 @@ DoKasPrincipalGet(struct cmd_syndesc *as, char *arock) } int -DoKasPrincipalList(struct cmd_syndesc *as, char *arock) +DoKasPrincipalList(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; void *iter; @@ -218,7 +218,7 @@ DoKasPrincipalList(struct cmd_syndesc *as, char *arock) } int -DoKasPrincipalKeySet(struct cmd_syndesc *as, char *arock) +DoKasPrincipalKeySet(struct cmd_syndesc *as, void *arock) { typedef enum { PRINCIPAL, INSTANCE, PASSWORD, KEYVERSION @@ -258,7 +258,7 @@ DoKasPrincipalKeySet(struct cmd_syndesc *as, char *arock) } int -DoKasPrincipalLockStatusGet(struct cmd_syndesc *as, char *arock) +DoKasPrincipalLockStatusGet(struct cmd_syndesc *as, void *arock) { typedef enum { PRINCIPAL, INSTANCE } DoKasPrincipalLockStatusGet_parm_t; afs_status_t st = 0; @@ -284,7 +284,7 @@ DoKasPrincipalLockStatusGet(struct cmd_syndesc *as, char *arock) } int -DoKasPrincipalUnlock(struct cmd_syndesc *as, char *arock) +DoKasPrincipalUnlock(struct cmd_syndesc *as, void *arock) { typedef enum { PRINCIPAL, INSTANCE } DoKasPrincipalUnlock_parm_t; afs_status_t st = 0; @@ -307,7 +307,7 @@ DoKasPrincipalUnlock(struct cmd_syndesc *as, char *arock) } int -DoKasPrincipalFieldsSet(struct cmd_syndesc *as, char *arock) +DoKasPrincipalFieldsSet(struct cmd_syndesc *as, void *arock) { typedef enum { PRINCIPAL, INSTANCE, ADMIN, NOADMIN, GRANTTICKET, NOGRANTTICKET, ENCRYPT2, NOENCRYPT, CHANGEPASSWORD, @@ -549,7 +549,7 @@ Print_kas_serverStats_p(kas_serverStats_p stats, const char *prefix) } int -DoKasServerStatsGet(struct cmd_syndesc *as, char *arock) +DoKasServerStatsGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoKasServerStatsGet_parm_t; afs_status_t st = 0; @@ -634,7 +634,7 @@ Print_kas_serverDebugInfo_p(kas_serverDebugInfo_p debug, const char *prefix) } int -DoKasServerDebugGet(struct cmd_syndesc *as, char *arock) +DoKasServerDebugGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoKasServerDebugGet_parm_t; afs_status_t st = 0; @@ -662,7 +662,7 @@ DoKasServerDebugGet(struct cmd_syndesc *as, char *arock) } int -DoKasServerRandomKeyGet(struct cmd_syndesc *as, char *arock) +DoKasServerRandomKeyGet(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; kas_encryptionKey_t key; @@ -686,7 +686,7 @@ SetupKasAdminCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("KasPrincipalCreate", DoKasPrincipalCreate, 0, + ts = cmd_CreateSyntax("KasPrincipalCreate", DoKasPrincipalCreate, NULL, "create a new principal"); cmd_AddParm(ts, "-principal", CMD_SINGLE, CMD_REQUIRED, "principal to create"); @@ -696,7 +696,7 @@ SetupKasAdminCmd(void) "initial principal password"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("KasPrincipalDelete", DoKasPrincipalDelete, 0, + ts = cmd_CreateSyntax("KasPrincipalDelete", DoKasPrincipalDelete, NULL, "delete a principal"); cmd_AddParm(ts, "-principal", CMD_SINGLE, CMD_REQUIRED, "principal to delete"); @@ -704,7 +704,7 @@ SetupKasAdminCmd(void) "principal instance"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("KasPrincipalGet", DoKasPrincipalGet, 0, + ts = cmd_CreateSyntax("KasPrincipalGet", DoKasPrincipalGet, NULL, "get information about a principal"); cmd_AddParm(ts, "-principal", CMD_SINGLE, CMD_REQUIRED, "principal to get"); @@ -712,11 +712,11 @@ SetupKasAdminCmd(void) "principal instance"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("KasPrincipalList", DoKasPrincipalList, 0, + ts = cmd_CreateSyntax("KasPrincipalList", DoKasPrincipalList, NULL, "list all principals"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("KasPrincipalKeySet", DoKasPrincipalKeySet, 0, + ts = cmd_CreateSyntax("KasPrincipalKeySet", DoKasPrincipalKeySet, NULL, "set the password for a principal"); cmd_AddParm(ts, "-principal", CMD_SINGLE, CMD_REQUIRED, "principal to modify"); @@ -729,7 +729,7 @@ SetupKasAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("KasPrincipalLockStatusGet", - DoKasPrincipalLockStatusGet, 0, + DoKasPrincipalLockStatusGet, NULL, "get the lock status of a principal"); cmd_AddParm(ts, "-principal", CMD_SINGLE, CMD_REQUIRED, "principal to query"); @@ -737,7 +737,7 @@ SetupKasAdminCmd(void) "principal instance"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("KasPrincipalUnlock", DoKasPrincipalUnlock, 0, + ts = cmd_CreateSyntax("KasPrincipalUnlock", DoKasPrincipalUnlock, NULL, "unlock a principal"); cmd_AddParm(ts, "-principal", CMD_SINGLE, CMD_REQUIRED, "principal to unlock"); @@ -745,7 +745,7 @@ SetupKasAdminCmd(void) "principal instance"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("KasPrincipalFieldsSet", DoKasPrincipalFieldsSet, 0, + ts = cmd_CreateSyntax("KasPrincipalFieldsSet", DoKasPrincipalFieldsSet, NULL, "modify a principal"); cmd_AddParm(ts, "-principal", CMD_SINGLE, CMD_REQUIRED, "principal to modify"); @@ -785,17 +785,17 @@ SetupKasAdminCmd(void) "maximum failed password attempts is exceeded"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("KasServerStatsGet", DoKasServerStatsGet, 0, + ts = cmd_CreateSyntax("KasServerStatsGet", DoKasServerStatsGet, NULL, "get stats on a kaserver"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("KasServerDebugGet", DoKasServerDebugGet, 0, + ts = cmd_CreateSyntax("KasServerDebugGet", DoKasServerDebugGet, NULL, "get debug info from a kaserver"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("KasServerRandomKeyGet", DoKasServerRandomKeyGet, 0, + ts = cmd_CreateSyntax("KasServerRandomKeyGet", DoKasServerRandomKeyGet, NULL, "create a random key"); SetupCommonCmdArgs(ts); diff --git a/src/libadmin/test/pts.c b/src/libadmin/test/pts.c index b48c81c2c8..36a6cd3852 100644 --- a/src/libadmin/test/pts.c +++ b/src/libadmin/test/pts.c @@ -90,7 +90,7 @@ GetUserAccessFromString(const char *in_str, const char *error_msg) } int -DoPtsGroupMemberAdd(struct cmd_syndesc *as, char *arock) +DoPtsGroupMemberAdd(struct cmd_syndesc *as, void *arock) { typedef enum { USER, GROUP } DoPtsGroupMemberAdd_parm_t; afs_status_t st = 0; @@ -105,7 +105,7 @@ DoPtsGroupMemberAdd(struct cmd_syndesc *as, char *arock) } int -DoPtsGroupOwnerChange(struct cmd_syndesc *as, char *arock) +DoPtsGroupOwnerChange(struct cmd_syndesc *as, void *arock) { typedef enum { OWNER, GROUP } DoPtsGroupOwnerChange_parm_t; afs_status_t st = 0; @@ -120,7 +120,7 @@ DoPtsGroupOwnerChange(struct cmd_syndesc *as, char *arock) } int -DoPtsGroupCreate(struct cmd_syndesc *as, char *arock) +DoPtsGroupCreate(struct cmd_syndesc *as, void *arock) { typedef enum { OWNER, GROUP } DoPtsGroupCreate_parm_t; afs_status_t st = 0; @@ -170,7 +170,7 @@ Print_pts_GroupEntry_p(pts_GroupEntry_p entry, const char *prefix) } int -DoPtsGroupGet(struct cmd_syndesc *as, char *arock) +DoPtsGroupGet(struct cmd_syndesc *as, void *arock) { typedef enum { GROUP } DoPtsGroupGet_parm_t; afs_status_t st = 0; @@ -187,7 +187,7 @@ DoPtsGroupGet(struct cmd_syndesc *as, char *arock) } int -DoPtsGroupDelete(struct cmd_syndesc *as, char *arock) +DoPtsGroupDelete(struct cmd_syndesc *as, void *arock) { typedef enum { GROUP } DoPtsGroupDelete_parm_t; afs_status_t st = 0; @@ -201,7 +201,7 @@ DoPtsGroupDelete(struct cmd_syndesc *as, char *arock) } int -DoPtsGroupMaxGet(struct cmd_syndesc *as, char *arock) +DoPtsGroupMaxGet(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; int max_group_id; @@ -214,7 +214,7 @@ DoPtsGroupMaxGet(struct cmd_syndesc *as, char *arock) } int -DoPtsGroupMaxSet(struct cmd_syndesc *as, char *arock) +DoPtsGroupMaxSet(struct cmd_syndesc *as, void *arock) { typedef enum { MAX } DoPtsGroupMaxSet_parm_t; afs_status_t st = 0; @@ -231,7 +231,7 @@ DoPtsGroupMaxSet(struct cmd_syndesc *as, char *arock) } int -DoPtsGroupMemberList(struct cmd_syndesc *as, char *arock) +DoPtsGroupMemberList(struct cmd_syndesc *as, void *arock) { typedef enum { GROUP } DoPtsGroupMemberList_parm_t; afs_status_t st = 0; @@ -260,7 +260,7 @@ DoPtsGroupMemberList(struct cmd_syndesc *as, char *arock) } int -DoPtsGroupMemberRemove(struct cmd_syndesc *as, char *arock) +DoPtsGroupMemberRemove(struct cmd_syndesc *as, void *arock) { typedef enum { USER, GROUP } DoPtsGroupMemberRemove_parm_t; afs_status_t st = 0; @@ -275,7 +275,7 @@ DoPtsGroupMemberRemove(struct cmd_syndesc *as, char *arock) } int -DoPtsGroupRename(struct cmd_syndesc *as, char *arock) +DoPtsGroupRename(struct cmd_syndesc *as, void *arock) { typedef enum { GROUP, NEWNAME } DoPtsGroupRename_parm_t; afs_status_t st = 0; @@ -290,7 +290,7 @@ DoPtsGroupRename(struct cmd_syndesc *as, char *arock) } int -DoPtsGroupModify(struct cmd_syndesc *as, char *arock) +DoPtsGroupModify(struct cmd_syndesc *as, void *arock) { typedef enum { GROUP, LISTSTATUS, LISTGROUPSOWNED, LISTMEMBERSHIP, LISTADD, LISTDELTE @@ -323,7 +323,7 @@ DoPtsGroupModify(struct cmd_syndesc *as, char *arock) } int -DoPtsUserCreate(struct cmd_syndesc *as, char *arock) +DoPtsUserCreate(struct cmd_syndesc *as, void *arock) { typedef enum { USER } DoPtsUserCreate_parm_t; afs_status_t st = 0; @@ -340,7 +340,7 @@ DoPtsUserCreate(struct cmd_syndesc *as, char *arock) } int -DoPtsUserDelete(struct cmd_syndesc *as, char *arock) +DoPtsUserDelete(struct cmd_syndesc *as, void *arock) { typedef enum { USER } DoPtsUserDelete_parm_t; afs_status_t st = 0; @@ -383,7 +383,7 @@ Print_pts_UserEntry_p(pts_UserEntry_p entry, const char *prefix) } int -DoPtsUserGet(struct cmd_syndesc *as, char *arock) +DoPtsUserGet(struct cmd_syndesc *as, void *arock) { typedef enum { USER } DoPtsUserGet_parm_t; afs_status_t st = 0; @@ -400,7 +400,7 @@ DoPtsUserGet(struct cmd_syndesc *as, char *arock) } int -DoPtsUserRename(struct cmd_syndesc *as, char *arock) +DoPtsUserRename(struct cmd_syndesc *as, void *arock) { typedef enum { USER, NEWNAME } DoPtsUserRename_parm_t; afs_status_t st = 0; @@ -415,7 +415,7 @@ DoPtsUserRename(struct cmd_syndesc *as, char *arock) } int -DoPtsUserModify(struct cmd_syndesc *as, char *arock) +DoPtsUserModify(struct cmd_syndesc *as, void *arock) { typedef enum { USER, GROUPQUOTA, LISTSTATUS, LISTGROUPSOWNED, LISTMEMBERSHIP @@ -481,7 +481,7 @@ DoPtsUserModify(struct cmd_syndesc *as, char *arock) } int -DoPtsUserMaxGet(struct cmd_syndesc *as, char *arock) +DoPtsUserMaxGet(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; int max_user_id; @@ -494,7 +494,7 @@ DoPtsUserMaxGet(struct cmd_syndesc *as, char *arock) } int -DoPtsUserMaxSet(struct cmd_syndesc *as, char *arock) +DoPtsUserMaxSet(struct cmd_syndesc *as, void *arock) { typedef enum { MAX } DoPtsUserMaxSet_parm_t; afs_status_t st = 0; @@ -511,7 +511,7 @@ DoPtsUserMaxSet(struct cmd_syndesc *as, char *arock) } int -DoPtsUserMemberList(struct cmd_syndesc *as, char *arock) +DoPtsUserMemberList(struct cmd_syndesc *as, void *arock) { typedef enum { USER } DoPtsUserMemberList_parm_t; afs_status_t st = 0; @@ -541,7 +541,7 @@ DoPtsUserMemberList(struct cmd_syndesc *as, char *arock) } int -DoPtsOwnedGroupList(struct cmd_syndesc *as, char *arock) +DoPtsOwnedGroupList(struct cmd_syndesc *as, void *arock) { typedef enum { USER } DoPtsOwnedGroupList_parm_t; afs_status_t st = 0; @@ -575,61 +575,61 @@ SetupPtsAdminCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("PtsGroupMemberAdd", DoPtsGroupMemberAdd, 0, + ts = cmd_CreateSyntax("PtsGroupMemberAdd", DoPtsGroupMemberAdd, NULL, "add a user to a group"); cmd_AddParm(ts, "-user", CMD_SINGLE, CMD_REQUIRED, "user to add"); cmd_AddParm(ts, "-group", CMD_SINGLE, CMD_REQUIRED, "group to modify"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsGroupOwnerChange", DoPtsGroupOwnerChange, 0, + ts = cmd_CreateSyntax("PtsGroupOwnerChange", DoPtsGroupOwnerChange, NULL, "change the owner of a group"); cmd_AddParm(ts, "-owner", CMD_SINGLE, CMD_REQUIRED, "new owner"); cmd_AddParm(ts, "-group", CMD_SINGLE, CMD_REQUIRED, "group to modify"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsGroupCreate", DoPtsGroupCreate, 0, + ts = cmd_CreateSyntax("PtsGroupCreate", DoPtsGroupCreate, NULL, "create a new group"); cmd_AddParm(ts, "-owner", CMD_SINGLE, CMD_REQUIRED, "owner of group"); cmd_AddParm(ts, "-group", CMD_SINGLE, CMD_REQUIRED, "group to create"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsGroupGet", DoPtsGroupGet, 0, + ts = cmd_CreateSyntax("PtsGroupGet", DoPtsGroupGet, NULL, "get information about a group"); cmd_AddParm(ts, "-group", CMD_SINGLE, CMD_REQUIRED, "group to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsGroupDelete", DoPtsGroupDelete, 0, + ts = cmd_CreateSyntax("PtsGroupDelete", DoPtsGroupDelete, NULL, "delete a group"); cmd_AddParm(ts, "-group", CMD_SINGLE, CMD_REQUIRED, "group to delete"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsGroupMaxGet", DoPtsGroupMaxGet, 0, + ts = cmd_CreateSyntax("PtsGroupMaxGet", DoPtsGroupMaxGet, NULL, "get the maximum group id"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsGroupMaxSet", DoPtsGroupMaxSet, 0, + ts = cmd_CreateSyntax("PtsGroupMaxSet", DoPtsGroupMaxSet, NULL, "set the maximum group id"); cmd_AddParm(ts, "-max", CMD_SINGLE, CMD_REQUIRED, "new max group id"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsGroupMemberList", DoPtsGroupMemberList, 0, + ts = cmd_CreateSyntax("PtsGroupMemberList", DoPtsGroupMemberList, NULL, "list members of a group"); cmd_AddParm(ts, "-group", CMD_SINGLE, CMD_REQUIRED, "group to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsGroupMemberRemove", DoPtsGroupMemberRemove, 0, + ts = cmd_CreateSyntax("PtsGroupMemberRemove", DoPtsGroupMemberRemove, NULL, "remove a member from a group"); cmd_AddParm(ts, "-user", CMD_SINGLE, CMD_REQUIRED, "user to remove"); cmd_AddParm(ts, "-group", CMD_SINGLE, CMD_REQUIRED, "group to modify"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsGroupRename", DoPtsGroupRename, 0, + ts = cmd_CreateSyntax("PtsGroupRename", DoPtsGroupRename, NULL, "rename a group"); cmd_AddParm(ts, "-group", CMD_SINGLE, CMD_REQUIRED, "group to modify"); cmd_AddParm(ts, "-newname", CMD_SINGLE, CMD_REQUIRED, "new group name"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsGroupModify", DoPtsGroupModify, 0, + ts = cmd_CreateSyntax("PtsGroupModify", DoPtsGroupModify, NULL, "modify a group"); cmd_AddParm(ts, "-group", CMD_SINGLE, CMD_REQUIRED, "group to modify"); cmd_AddParm(ts, "-liststatus", CMD_SINGLE, CMD_REQUIRED, @@ -644,28 +644,28 @@ SetupPtsAdminCmd(void) "list delete permission "); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsUserCreate", DoPtsUserCreate, 0, + ts = cmd_CreateSyntax("PtsUserCreate", DoPtsUserCreate, NULL, "create a new user"); cmd_AddParm(ts, "-user", CMD_SINGLE, CMD_REQUIRED, "user to create"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsUserDelete", DoPtsUserDelete, 0, + ts = cmd_CreateSyntax("PtsUserDelete", DoPtsUserDelete, NULL, "delete a user"); cmd_AddParm(ts, "-user", CMD_SINGLE, CMD_REQUIRED, "user to delete"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsUserGet", DoPtsUserGet, 0, + ts = cmd_CreateSyntax("PtsUserGet", DoPtsUserGet, NULL, "get information about a user"); cmd_AddParm(ts, "-user", CMD_SINGLE, CMD_REQUIRED, "user to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsUserRename", DoPtsUserRename, 0, + ts = cmd_CreateSyntax("PtsUserRename", DoPtsUserRename, NULL, "rename a user"); cmd_AddParm(ts, "-user", CMD_SINGLE, CMD_REQUIRED, "user to modify"); cmd_AddParm(ts, "-newname", CMD_SINGLE, CMD_REQUIRED, "new user name"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsUserModify", DoPtsUserModify, 0, + ts = cmd_CreateSyntax("PtsUserModify", DoPtsUserModify, NULL, "change a user"); cmd_AddParm(ts, "-user", CMD_SINGLE, CMD_REQUIRED, "user to modify"); cmd_AddParm(ts, "-groupquota", CMD_SINGLE, CMD_OPTIONAL, @@ -678,21 +678,21 @@ SetupPtsAdminCmd(void) "list membership permission "); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsUserMaxGet", DoPtsUserMaxGet, 0, + ts = cmd_CreateSyntax("PtsUserMaxGet", DoPtsUserMaxGet, NULL, "get the max user id"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsUserMaxSet", DoPtsUserMaxSet, 0, + ts = cmd_CreateSyntax("PtsUserMaxSet", DoPtsUserMaxSet, NULL, "set the max user id"); cmd_AddParm(ts, "-max", CMD_SINGLE, CMD_REQUIRED, "max user id"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsUserMemberList", DoPtsUserMemberList, 0, + ts = cmd_CreateSyntax("PtsUserMemberList", DoPtsUserMemberList, NULL, "list group membership for a user"); cmd_AddParm(ts, "-user", CMD_SINGLE, CMD_REQUIRED, "user to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("PtsOwnedGroupList", DoPtsOwnedGroupList, 0, + ts = cmd_CreateSyntax("PtsOwnedGroupList", DoPtsOwnedGroupList, NULL, "list groups owned by a user"); cmd_AddParm(ts, "-user", CMD_SINGLE, CMD_REQUIRED, "user to query"); SetupCommonCmdArgs(ts); diff --git a/src/libadmin/test/util.c b/src/libadmin/test/util.c index 7ef9586550..da4261f8d9 100644 --- a/src/libadmin/test/util.c +++ b/src/libadmin/test/util.c @@ -20,7 +20,7 @@ RCSID #include "util.h" int -DoUtilErrorTranslate(struct cmd_syndesc *as, char *arock) +DoUtilErrorTranslate(struct cmd_syndesc *as, void *arock) { typedef enum { ERROR_CODE } DoUtilErrorTranslate_parm_t; afs_status_t st = 0; @@ -37,7 +37,7 @@ DoUtilErrorTranslate(struct cmd_syndesc *as, char *arock) } int -DoUtilDatabaseServerList(struct cmd_syndesc *as, char *arock) +DoUtilDatabaseServerList(struct cmd_syndesc *as, void *arock) { typedef enum { CELL_NAME } DoUtilDatabaseServerList_parm_t; afs_status_t st = 0; @@ -66,7 +66,7 @@ DoUtilDatabaseServerList(struct cmd_syndesc *as, char *arock) } int -DoUtilNameToAddress(struct cmd_syndesc *as, char *arock) +DoUtilNameToAddress(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER_NAME } DoUtilNameToAddress_parm_t; afs_status_t st = 0; @@ -88,17 +88,17 @@ SetupUtilAdminCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("UtilErrorTranslate", DoUtilErrorTranslate, 0, + ts = cmd_CreateSyntax("UtilErrorTranslate", DoUtilErrorTranslate, NULL, "translate an error code"); cmd_AddParm(ts, "-error", CMD_SINGLE, CMD_REQUIRED, "error code"); SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("UtilDatabaseServerList", DoUtilDatabaseServerList, - 0, "list the database servers in a cell"); + NULL, "list the database servers in a cell"); cmd_AddParm(ts, "-cell", CMD_SINGLE, CMD_REQUIRED, "cell to list"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("UtilNameToAddress", DoUtilNameToAddress, 0, + ts = cmd_CreateSyntax("UtilNameToAddress", DoUtilNameToAddress, NULL, "translate a host name to an address"); cmd_AddParm(ts, "-host", CMD_SINGLE, CMD_REQUIRED, "host name"); SetupCommonCmdArgs(ts); diff --git a/src/libadmin/test/util.h b/src/libadmin/test/util.h index ca524597d0..98f22f6b42 100644 --- a/src/libadmin/test/util.h +++ b/src/libadmin/test/util.h @@ -29,13 +29,13 @@ #include "common.h" int - DoUtilErrorTranslate(struct cmd_syndesc *as, char *arock); + DoUtilErrorTranslate(struct cmd_syndesc *as, void *arock); int - DoUtilDatabaseServerList(struct cmd_syndesc *as, char *arock); + DoUtilDatabaseServerList(struct cmd_syndesc *as, void *arock); int - DoUtilNameToAddress(struct cmd_syndesc *as, char *arock); + DoUtilNameToAddress(struct cmd_syndesc *as, void *arock); void SetupUtilAdminCmd(void); diff --git a/src/libadmin/test/vos.c b/src/libadmin/test/vos.c index d68867a66d..6af38754c3 100644 --- a/src/libadmin/test/vos.c +++ b/src/libadmin/test/vos.c @@ -144,7 +144,7 @@ PrintMessage(vos_messageType_t type, char *message) } int -DoVosBackupVolumeCreate(struct cmd_syndesc *as, char *arock) +DoVosBackupVolumeCreate(struct cmd_syndesc *as, void *arock) { typedef enum { VOLUME } DoVosBackupVolumeCreate_parm_t; afs_status_t st = 0; @@ -162,7 +162,7 @@ DoVosBackupVolumeCreate(struct cmd_syndesc *as, char *arock) } int -DoVosBackupVolumeCreateMultiple(struct cmd_syndesc *as, char *arock) +DoVosBackupVolumeCreateMultiple(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, PREFIX, EXCLUDE @@ -214,7 +214,7 @@ Print_vos_partitionEntry_p(vos_partitionEntry_p part, const char *prefix) } int -DoVosPartitionGet(struct cmd_syndesc *as, char *arock) +DoVosPartitionGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION } DoVosPartitionGet_parm_t; afs_status_t st = 0; @@ -245,7 +245,7 @@ DoVosPartitionGet(struct cmd_syndesc *as, char *arock) } int -DoVosPartitionList(struct cmd_syndesc *as, char *arock) +DoVosPartitionList(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoVosPartitionGet_parm_t; afs_status_t st = 0; @@ -281,7 +281,7 @@ DoVosPartitionList(struct cmd_syndesc *as, char *arock) } int -DoVosServerSync(struct cmd_syndesc *as, char *arock) +DoVosServerSync(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION } DoVosServerSync_parm_t; afs_status_t st = 0; @@ -309,7 +309,7 @@ DoVosServerSync(struct cmd_syndesc *as, char *arock) } int -DoVosFileServerAddressChange(struct cmd_syndesc *as, char *arock) +DoVosFileServerAddressChange(struct cmd_syndesc *as, void *arock) { typedef enum { OLDADDRESS, NEWADDRESS @@ -334,7 +334,7 @@ DoVosFileServerAddressChange(struct cmd_syndesc *as, char *arock) } int -DoVosFileServerAddressRemove(struct cmd_syndesc *as, char *arock) +DoVosFileServerAddressRemove(struct cmd_syndesc *as, void *arock) { typedef enum { ADDRESS } DoVosFileServerAddressRemove_parm_t; afs_status_t st = 0; @@ -363,7 +363,7 @@ Print_vos_fileServerEntry_p(vos_fileServerEntry_p serv, const char *prefix) } int -DoVosFileServerList(struct cmd_syndesc *as, char *arock) +DoVosFileServerList(struct cmd_syndesc *as, void *arock) { afs_status_t st = 0; void *iter; @@ -414,7 +414,7 @@ Print_vos_serverTransactionStatus_p(vos_serverTransactionStatus_p tran, } int -DoVosServerTransactionStatusList(struct cmd_syndesc *as, char *arock) +DoVosServerTransactionStatusList(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER } DoVosServerTransactionStatusList_parm_t; afs_status_t st = 0; @@ -522,7 +522,7 @@ Print_vos_vldbEntry_p(vos_vldbEntry_p entry, const char *prefix) } int -DoVosVLDBGet(struct cmd_syndesc *as, char *arock) +DoVosVLDBGet(struct cmd_syndesc *as, void *arock) { typedef enum { VOLUME } DoVosVLDBGet_parm_t; afs_status_t st = 0; @@ -546,7 +546,7 @@ DoVosVLDBGet(struct cmd_syndesc *as, char *arock) } int -DoVosVLDBList(struct cmd_syndesc *as, char *arock) +DoVosVLDBList(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION } DoVosVLDBList_parm_t; afs_status_t st = 0; @@ -594,7 +594,7 @@ DoVosVLDBList(struct cmd_syndesc *as, char *arock) } int -DoVosVLDBEntryRemove(struct cmd_syndesc *as, char *arock) +DoVosVLDBEntryRemove(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME } DoVosVLDBEntryRemove_parm_t; afs_status_t st = 0; @@ -637,7 +637,7 @@ DoVosVLDBEntryRemove(struct cmd_syndesc *as, char *arock) } int -DoVosVLDBUnlock(struct cmd_syndesc *as, char *arock) +DoVosVLDBUnlock(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION } DoVosVLDBUnlock_parm_t; afs_status_t st = 0; @@ -671,7 +671,7 @@ DoVosVLDBUnlock(struct cmd_syndesc *as, char *arock) } int -DoVosVLDBEntryLock(struct cmd_syndesc *as, char *arock) +DoVosVLDBEntryLock(struct cmd_syndesc *as, void *arock) { typedef enum { VOLUME } DoVosVLDBEntryLoc_parm_tk; afs_status_t st = 0; @@ -690,7 +690,7 @@ DoVosVLDBEntryLock(struct cmd_syndesc *as, char *arock) } int -DoVosVLDBEntryUnlock(struct cmd_syndesc *as, char *arock) +DoVosVLDBEntryUnlock(struct cmd_syndesc *as, void *arock) { typedef enum { VOLUME } DoVosVLDBEntryUnlock_parm_t; afs_status_t st = 0; @@ -709,7 +709,7 @@ DoVosVLDBEntryUnlock(struct cmd_syndesc *as, char *arock) } int -DoVosVLDBReadOnlySiteCreate(struct cmd_syndesc *as, char *arock) +DoVosVLDBReadOnlySiteCreate(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME @@ -744,7 +744,7 @@ DoVosVLDBReadOnlySiteCreate(struct cmd_syndesc *as, char *arock) } int -DoVosVLDBReadOnlySiteDelete(struct cmd_syndesc *as, char *arock) +DoVosVLDBReadOnlySiteDelete(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME @@ -780,7 +780,7 @@ DoVosVLDBReadOnlySiteDelete(struct cmd_syndesc *as, char *arock) } int -DoVosVLDBSync(struct cmd_syndesc *as, char *arock) +DoVosVLDBSync(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, FORCE } DoVosVLDBSync_parm_t; afs_status_t st = 0; @@ -819,7 +819,7 @@ DoVosVLDBSync(struct cmd_syndesc *as, char *arock) } int -DoVosVolumeCreate(struct cmd_syndesc *as, char *arock) +DoVosVolumeCreate(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME, QUOTA @@ -864,7 +864,7 @@ DoVosVolumeCreate(struct cmd_syndesc *as, char *arock) } int -DoVosVolumeDelete(struct cmd_syndesc *as, char *arock) +DoVosVolumeDelete(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME } DoVosVolumeDelete_parm_t; afs_status_t st = 0; @@ -898,7 +898,7 @@ DoVosVolumeDelete(struct cmd_syndesc *as, char *arock) } int -DoVosVolumeRename(struct cmd_syndesc *as, char *arock) +DoVosVolumeRename(struct cmd_syndesc *as, void *arock) { typedef enum { OLDVOLUME, NEWVOLUME } DoVosVolumeRename_parm_t; afs_status_t st = 0; @@ -922,7 +922,7 @@ DoVosVolumeRename(struct cmd_syndesc *as, char *arock) } int -DoVosVolumeDump(struct cmd_syndesc *as, char *arock) +DoVosVolumeDump(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME, STARTTIME, DUMPFILE @@ -978,7 +978,7 @@ DoVosVolumeDump(struct cmd_syndesc *as, char *arock) } int -DoVosVolumeRestore(struct cmd_syndesc *as, char *arock) +DoVosVolumeRestore(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, ID, VOLUME, DUMPFILE, FULL @@ -1032,7 +1032,7 @@ DoVosVolumeRestore(struct cmd_syndesc *as, char *arock) } int -DoVosVolumeOnline(struct cmd_syndesc *as, char *arock) +DoVosVolumeOnline(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME, SLEEP, BUSY @@ -1080,7 +1080,7 @@ DoVosVolumeOnline(struct cmd_syndesc *as, char *arock) } int -DoVosVolumeOffline(struct cmd_syndesc *as, char *arock) +DoVosVolumeOffline(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME } DoVosVolumeOffline_parm_t; afs_status_t st = 0; @@ -1337,7 +1337,7 @@ Print_vos_volumeEntry_p(vos_volumeEntry_p entry, const char *prefix) } int -DoVosVolumeGet(struct cmd_syndesc *as, char *arock) +DoVosVolumeGet(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME } DoVosVolumeGet_parm_t; afs_status_t st = 0; @@ -1374,7 +1374,7 @@ DoVosVolumeGet(struct cmd_syndesc *as, char *arock) } int -DoVosVolumeList(struct cmd_syndesc *as, char *arock) +DoVosVolumeList(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION } DoVosVolumeList_parm_t; afs_status_t st = 0; @@ -1420,7 +1420,7 @@ DoVosVolumeList(struct cmd_syndesc *as, char *arock) } int -DoVosVolumeMove(struct cmd_syndesc *as, char *arock) +DoVosVolumeMove(struct cmd_syndesc *as, void *arock) { typedef enum { VOLUME, FROMSERVER, FROMPARTITION, TOSERVER, TOPARTITION @@ -1472,7 +1472,7 @@ DoVosVolumeMove(struct cmd_syndesc *as, char *arock) } int -DoVosVolumeRelease(struct cmd_syndesc *as, char *arock) +DoVosVolumeRelease(struct cmd_syndesc *as, void *arock) { typedef enum { VOLUME, FORCE } DoVosVolumeRelease_parm_t; afs_status_t st = 0; @@ -1495,7 +1495,7 @@ DoVosVolumeRelease(struct cmd_syndesc *as, char *arock) } int -DoVosVolumeZap(struct cmd_syndesc *as, char *arock) +DoVosVolumeZap(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME, FORCE } DoVosVolumeZap_parm_t; afs_status_t st = 0; @@ -1534,7 +1534,7 @@ DoVosVolumeZap(struct cmd_syndesc *as, char *arock) } int -DoVosPartitionNameToId(struct cmd_syndesc *as, char *arock) +DoVosPartitionNameToId(struct cmd_syndesc *as, void *arock) { typedef enum { PARTITION } DoVosPartitionNameToId_parm_t; afs_status_t st = 0; @@ -1552,7 +1552,7 @@ DoVosPartitionNameToId(struct cmd_syndesc *as, char *arock) } int -DoVosPartitionIdToName(struct cmd_syndesc *as, char *arock) +DoVosPartitionIdToName(struct cmd_syndesc *as, void *arock) { typedef enum { PARTITIONID } DoVosPartitionIdToName_parm_t; afs_status_t st = 0; @@ -1575,7 +1575,7 @@ DoVosPartitionIdToName(struct cmd_syndesc *as, char *arock) } int -DoVosVolumeQuotaChange(struct cmd_syndesc *as, char *arock) +DoVosVolumeQuotaChange(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME, QUOTA @@ -1725,7 +1725,7 @@ Print_vos_volintInfo(afs_uint32 server, afs_uint32 partition, volintInfo* pinfo, } int -DoVosVolumeGet2(struct cmd_syndesc *as, char *arock) +DoVosVolumeGet2(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME } DoVosVolumeGet_parm_t; afs_status_t st = 0; @@ -1767,7 +1767,7 @@ DoVosVolumeGet2(struct cmd_syndesc *as, char *arock) int -DoVos_ClearVolUpdateCounter(struct cmd_syndesc *as, char *arock) +DoVos_ClearVolUpdateCounter(struct cmd_syndesc *as, void *arock) { typedef enum { SERVER, PARTITION, VOLUME } DoVosVolumeGet_parm_t; afs_status_t st = 0; @@ -1805,13 +1805,13 @@ SetupVosAdminCmd(void) { struct cmd_syndesc *ts; - ts = cmd_CreateSyntax("VosBackupVolumeCreate", DoVosBackupVolumeCreate, 0, + ts = cmd_CreateSyntax("VosBackupVolumeCreate", DoVosBackupVolumeCreate, NULL, "create a backup volume"); cmd_AddParm(ts, "-volume", CMD_SINGLE, CMD_REQUIRED, "volume to back up"); SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("VosBackupVolumeCreateMultiple", - DoVosBackupVolumeCreateMultiple, 0, + DoVosBackupVolumeCreateMultiple, NULL, "create a backup volume"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_OPTIONAL, "server housing volumes to back up"); @@ -1823,7 +1823,7 @@ SetupVosAdminCmd(void) "exclude volumes from backup that match prefix"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosPartitionGet", DoVosPartitionGet, 0, + ts = cmd_CreateSyntax("VosPartitionGet", DoVosPartitionGet, NULL, "get information about a partition"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server housing partition of interest"); @@ -1831,13 +1831,13 @@ SetupVosAdminCmd(void) "partition to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosPartitionList", DoVosPartitionList, 0, + ts = cmd_CreateSyntax("VosPartitionList", DoVosPartitionList, NULL, "list information about all partitions at a server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server housing partitions of interest"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosServerSync", DoVosServerSync, 0, + ts = cmd_CreateSyntax("VosServerSync", DoVosServerSync, NULL, "sync server with vldb"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to sync"); cmd_AddParm(ts, "-partition", CMD_SINGLE, CMD_OPTIONAL, @@ -1845,7 +1845,7 @@ SetupVosAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("VosFileServerAddressChange", - DoVosFileServerAddressChange, 0, + DoVosFileServerAddressChange, NULL, "change a server's address in the vldb"); cmd_AddParm(ts, "-oldaddress", CMD_SINGLE, CMD_REQUIRED, "old address to change"); @@ -1853,29 +1853,29 @@ SetupVosAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("VosFileServerAddressRemove", - DoVosFileServerAddressRemove, 0, + DoVosFileServerAddressRemove, NULL, "remove a server's address from the vldb"); cmd_AddParm(ts, "-address", CMD_SINGLE, CMD_REQUIRED, "address to remove"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosFileServerList", DoVosFileServerList, 0, + ts = cmd_CreateSyntax("VosFileServerList", DoVosFileServerList, NULL, "list the file servers in a cell"); SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("VosServerTransactionStatusList", - DoVosServerTransactionStatusList, 0, + DoVosServerTransactionStatusList, NULL, "list the active transactions at a server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to query"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVLDBGet", DoVosVLDBGet, 0, + ts = cmd_CreateSyntax("VosVLDBGet", DoVosVLDBGet, NULL, "get a vldb entry for a volume"); cmd_AddParm(ts, "-volume", CMD_SINGLE, CMD_REQUIRED, "volume to retrieve"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVLDBList", DoVosVLDBList, 0, + ts = cmd_CreateSyntax("VosVLDBList", DoVosVLDBList, NULL, "list a group of vldb entries"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_OPTIONAL, "limit entries to a particular server"); @@ -1883,7 +1883,7 @@ SetupVosAdminCmd(void) "limit entries to a particular partition"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVLDBEntryRemove", DoVosVLDBEntryRemove, 0, + ts = cmd_CreateSyntax("VosVLDBEntryRemove", DoVosVLDBEntryRemove, NULL, "remove vldb entries"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_OPTIONAL, "limit entries to a particular server"); @@ -1892,7 +1892,7 @@ SetupVosAdminCmd(void) cmd_AddParm(ts, "-volume", CMD_SINGLE, CMD_OPTIONAL, "volume to remove"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVLDBUnlock", DoVosVLDBUnlock, 0, + ts = cmd_CreateSyntax("VosVLDBUnlock", DoVosVLDBUnlock, NULL, "unlock a group of vldb entries"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_OPTIONAL, "limit entries to a particular server"); @@ -1900,18 +1900,18 @@ SetupVosAdminCmd(void) "limit entries to a particular partition"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVLDBEntryLock", DoVosVLDBList, 0, + ts = cmd_CreateSyntax("VosVLDBEntryLock", DoVosVLDBList, NULL, "lock a single vldb entry"); cmd_AddParm(ts, "-volume", CMD_SINGLE, CMD_REQUIRED, "volume to lock"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVLDBEntryUnlock", DoVosVLDBEntryUnlock, 0, + ts = cmd_CreateSyntax("VosVLDBEntryUnlock", DoVosVLDBEntryUnlock, NULL, "unlock a single vldb entry"); cmd_AddParm(ts, "-volume", CMD_SINGLE, CMD_REQUIRED, "volume to unlock"); SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("VosVLDBReadOnlySiteCreate", - DoVosVLDBReadOnlySiteCreate, 0, + DoVosVLDBReadOnlySiteCreate, NULL, "create a read only site"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where read only will be created"); @@ -1922,7 +1922,7 @@ SetupVosAdminCmd(void) SetupCommonCmdArgs(ts); ts = cmd_CreateSyntax("VosVLDBReadOnlySiteDelete", - DoVosVLDBReadOnlySiteDelete, 0, + DoVosVLDBReadOnlySiteDelete, NULL, "delete a read only site before initial replication"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_OPTIONAL, "server where read only will be deleted"); @@ -1931,7 +1931,7 @@ SetupVosAdminCmd(void) cmd_AddParm(ts, "-volume", CMD_SINGLE, CMD_REQUIRED, "volume to delete"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVLDBSync", DoVosVLDBSync, 0, + ts = cmd_CreateSyntax("VosVLDBSync", DoVosVLDBSync, NULL, "sync vldb with server"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server to sync"); cmd_AddParm(ts, "-partition", CMD_SINGLE, CMD_OPTIONAL, @@ -1939,7 +1939,7 @@ SetupVosAdminCmd(void) cmd_AddParm(ts, "-force", CMD_FLAG, CMD_OPTIONAL, "force sync to occur"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeCreate", DoVosVolumeCreate, 0, + ts = cmd_CreateSyntax("VosVolumeCreate", DoVosVolumeCreate, NULL, "create a read write volume"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where volume will be created"); @@ -1951,7 +1951,7 @@ SetupVosAdminCmd(void) "size quota of new volume in 1kb units"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeDelete", DoVosVolumeDelete, 0, + ts = cmd_CreateSyntax("VosVolumeDelete", DoVosVolumeDelete, NULL, "delete a volume"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server where volume exists"); @@ -1960,13 +1960,13 @@ SetupVosAdminCmd(void) cmd_AddParm(ts, "-volume", CMD_SINGLE, CMD_REQUIRED, "volume to delete"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeRename", DoVosVolumeRename, 0, + ts = cmd_CreateSyntax("VosVolumeRename", DoVosVolumeRename, NULL, "rename a volume"); cmd_AddParm(ts, "-oldname", CMD_SINGLE, CMD_REQUIRED, "old volume name"); cmd_AddParm(ts, "-newname", CMD_SINGLE, CMD_REQUIRED, "new volume name"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeDump", DoVosVolumeDump, 0, + ts = cmd_CreateSyntax("VosVolumeDump", DoVosVolumeDump, NULL, "dump a volume to a file"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_OPTIONAL, "dump volume at a particular server"); @@ -1979,7 +1979,7 @@ SetupVosAdminCmd(void) "file to contain dump results"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeRestore", DoVosVolumeRestore, 0, + ts = cmd_CreateSyntax("VosVolumeRestore", DoVosVolumeRestore, NULL, "restore a volume from a dumpfile"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server that houses volume to restore"); @@ -1994,7 +1994,7 @@ SetupVosAdminCmd(void) "does a full restore of volume"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeOnline", DoVosVolumeOnline, 0, + ts = cmd_CreateSyntax("VosVolumeOnline", DoVosVolumeOnline, NULL, "bring a volume online"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server that houses volume"); @@ -2006,7 +2006,7 @@ SetupVosAdminCmd(void) cmd_AddParm(ts, "-busy", CMD_FLAG, CMD_OPTIONAL, "mark volume busy"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeOffline", DoVosVolumeOffline, 0, + ts = cmd_CreateSyntax("VosVolumeOffline", DoVosVolumeOffline, NULL, "take a volume offline"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server that houses volume"); @@ -2016,7 +2016,7 @@ SetupVosAdminCmd(void) "volume to bring offline"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeGet", DoVosVolumeGet, 0, + ts = cmd_CreateSyntax("VosVolumeGet", DoVosVolumeGet, NULL, "get a volume entry"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server that houses volume"); @@ -2026,7 +2026,7 @@ SetupVosAdminCmd(void) "volume to retrieve"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeList", DoVosVolumeList, 0, + ts = cmd_CreateSyntax("VosVolumeList", DoVosVolumeList, NULL, "list a group of volumes"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "limit volumes to a particular server"); @@ -2034,7 +2034,7 @@ SetupVosAdminCmd(void) "limit volumes to a particular partition"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeMove", DoVosVolumeMove, 0, + ts = cmd_CreateSyntax("VosVolumeMove", DoVosVolumeMove, NULL, "move a volume"); cmd_AddParm(ts, "-volume", CMD_SINGLE, CMD_REQUIRED, "volume to move"); cmd_AddParm(ts, "-fromserver", CMD_SINGLE, CMD_REQUIRED, "source server"); @@ -2046,7 +2046,7 @@ SetupVosAdminCmd(void) "destination partition"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeRelease", DoVosVolumeRelease, 0, + ts = cmd_CreateSyntax("VosVolumeRelease", DoVosVolumeRelease, NULL, "release updates to read only"); cmd_AddParm(ts, "-volume", CMD_SINGLE, CMD_REQUIRED, "volume to replicate"); @@ -2054,7 +2054,7 @@ SetupVosAdminCmd(void) "force release to occur"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeZap", DoVosVolumeZap, 0, "zap a volume"); + ts = cmd_CreateSyntax("VosVolumeZap", DoVosVolumeZap, NULL, "zap a volume"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server that houses the volume to zap"); cmd_AddParm(ts, "-partition", CMD_SINGLE, CMD_REQUIRED, @@ -2063,18 +2063,18 @@ SetupVosAdminCmd(void) cmd_AddParm(ts, "-force", CMD_FLAG, CMD_OPTIONAL, "force zap"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosPartitionNameToId", DoVosPartitionNameToId, 0, + ts = cmd_CreateSyntax("VosPartitionNameToId", DoVosPartitionNameToId, NULL, "convert a partition name to a number"); cmd_AddParm(ts, "-partition", CMD_SINGLE, CMD_REQUIRED, "partition to convert"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosPartitionIdToName", DoVosPartitionIdToName, 0, + ts = cmd_CreateSyntax("VosPartitionIdToName", DoVosPartitionIdToName, NULL, "convert a number to a partition"); cmd_AddParm(ts, "-id", CMD_SINGLE, CMD_REQUIRED, "number to convert"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeQuotaChange", DoVosVolumeQuotaChange, 0, + ts = cmd_CreateSyntax("VosVolumeQuotaChange", DoVosVolumeQuotaChange, NULL, "change the quota for a partition"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server that houses the volume"); @@ -2085,7 +2085,7 @@ SetupVosAdminCmd(void) "new quota in 1kb units"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("VosVolumeGet2", DoVosVolumeGet2, 0, + ts = cmd_CreateSyntax("VosVolumeGet2", DoVosVolumeGet2, NULL, "get a volume entry"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server that houses volume"); @@ -2095,7 +2095,7 @@ SetupVosAdminCmd(void) "volume to retrieve"); SetupCommonCmdArgs(ts); - ts = cmd_CreateSyntax("ClearVolUpdateCounter", DoVos_ClearVolUpdateCounter, 0, + ts = cmd_CreateSyntax("ClearVolUpdateCounter", DoVos_ClearVolUpdateCounter, NULL, "clear volUpdateCounter"); cmd_AddParm(ts, "-server", CMD_SINGLE, CMD_REQUIRED, "server that houses volume"); diff --git a/src/libadmin/vos/afs_vosAdmin.c b/src/libadmin/vos/afs_vosAdmin.c index baf3a76af0..df07bd77b8 100644 --- a/src/libadmin/vos/afs_vosAdmin.c +++ b/src/libadmin/vos/afs_vosAdmin.c @@ -15,13 +15,7 @@ RCSID #include #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #ifdef AFS_NT40_ENV #include diff --git a/src/libadmin/vos/lockprocs.c b/src/libadmin/vos/lockprocs.c index 5234a265ab..bc72dfd799 100644 --- a/src/libadmin/vos/lockprocs.c +++ b/src/libadmin/vos/lockprocs.c @@ -14,13 +14,7 @@ RCSID ("$Header$"); #include "lockprocs.h" -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif /* Finds an index in VLDB entry that matches the volume type, server, and partition. * If type is zero, will match first index of ANY type (RW, BK, or RO). diff --git a/src/libadmin/vos/vosutils.c b/src/libadmin/vos/vosutils.c index f74602c360..878920d85c 100644 --- a/src/libadmin/vos/vosutils.c +++ b/src/libadmin/vos/vosutils.c @@ -17,13 +17,7 @@ RCSID #include "vsprocs.h" #include "lockprocs.h" #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif /* * VLDB entry conversion routines. diff --git a/src/libadmin/vos/vsprocs.c b/src/libadmin/vos/vsprocs.c index 9bfd9a7284..8823f50b3e 100644 --- a/src/libadmin/vos/vsprocs.c +++ b/src/libadmin/vos/vsprocs.c @@ -30,13 +30,7 @@ RCSID #include "../adminutil/afs_AdminInternal.h" #include #include "afs_vosAdmin.h" -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #ifdef HAVE_UNISTD_H #include #endif diff --git a/src/libafs/MakefileProto.DARWIN.in b/src/libafs/MakefileProto.DARWIN.in index ceef9adb5e..02916784c5 100644 --- a/src/libafs/MakefileProto.DARWIN.in +++ b/src/libafs/MakefileProto.DARWIN.in @@ -5,7 +5,7 @@ # License. For details, see the LICENSE file in the top-level source # directory or online at http://www.openafs.org/dl/license10.html # $Header$ -# +# # MakefileProto for Digital Unix systems # srcdir=@srcdir@ @@ -69,28 +69,32 @@ AFS_OS_NONFSOBJS = osi_vfsops.o KDEFS= DBUG = DEFINES= -D_KERNEL -DKERNEL -DKERNEL_PRIVATE -DDIAGNOSTIC -DUSE_SELECT -DMACH_USER_API -DMACH_KERNEL + +KOPTS_DBUG=-g + +KOPTS_DBUG=-ggdb -KOPTS_ppc=-static -g -nostdinc -nostdlib -fno-builtin -finline -fno-keep-inline-functions -msoft-float -mlong-branch -fsigned-bitfields -arch ppc -Dppc -DPPC -D__PPC__ -DPAGE_SIZE_FIXED -mcpu=750 -mmultiple -fschedule-insns -KOPTS_x86=-static -g -nostdinc -nostdlib -fno-builtin -finline -fno-keep-inline-functions -msoft-float -mlong-branch -fsigned-bitfields -arch i386 -Di386 -DI386 -D__I386__ -DPAGE_SIZE_FIXED -march=i686 -mpreferred-stack-boundary=2 -falign-functions=4 +KOPTS_ppc=-static -nostdinc -nostdlib -fno-builtin -finline -fno-keep-inline-functions -msoft-float -mlong-branch -fsigned-bitfields -arch ppc -Dppc -DPPC -D__PPC__ -DPAGE_SIZE_FIXED -mcpu=750 -mmultiple -fschedule-insns -force_cpusubtype_ALL +KOPTS_x86=-static -nostdinc -nostdlib -fno-builtin -finline -fno-keep-inline-functions -msoft-float -mlong-branch -fsigned-bitfields -arch i386 -Di386 -DI386 -D__I386__ -DPAGE_SIZE_FIXED -march=i686 -mpreferred-stack-boundary=2 -falign-functions=4 ARCH_ppc=$(shell echo "${ARCHFLAGS}" | grep -q -w ppc && echo yes) ARCH_x86=$(shell echo "${ARCHFLAGS}" | grep -q -w i386 && echo yes) ifeq ($(ARCH_ppc),yes) ifeq ($(ARCH_x86),yes) -MODLD=$(CC) -static -g -nostdlib -arch ppc -arch i386 -CFLAGS_ppc=${KINCLUDES} -I. -I.. -I${TOP_OBJDIR}/src/config $(DEFINES) $(KDEFS) $(KOPTS_ppc) -CFLAGS_x86=${KINCLUDES} -I. -I.. -I${TOP_OBJDIR}/src/config $(DEFINES) $(KDEFS) $(KOPTS_x86) +MODLD=$(CC) -static $(KOPTS_DBUG) -nostdlib -arch ppc -arch i386 +CFLAGS_ppc=${KINCLUDES} -I. -I.. -I${TOP_OBJDIR}/src/config $(DEFINES) $(KDEFS) $(KOPTS_ppc) $(KOPTS_DBUG) +CFLAGS_x86=${KINCLUDES} -I. -I.. -I${TOP_OBJDIR}/src/config $(DEFINES) $(KDEFS) $(KOPTS_x86) $(KOPTS_DBUG) else -MODLD=$(CC) -static -g -nostdlib -arch ppc +MODLD=$(CC) -static $(KOPTS_DBUG) -nostdlib -arch ppc KOPTS=$(KOPTS_ppc) CFLAGS=${KINCLUDES} -I. -I.. -I${TOP_OBJDIR}/src/config $(DEFINES) $(KDEFS) $(KOPTS) endif else ifeq ($(ARCH_x86),yes) -MODLD=$(CC) -static -g -nostdlib -arch i386 +MODLD=$(CC) -static $(KOPTS_DBUG) -nostdlib -arch i386 KOPTS=$(KOPTS_x86) else _ARCH=$(shell arch) -MODLD=$(CC) -static -g -nostdlib -arch $(_ARCH) +MODLD=$(CC) -static $(KOPTS_DBUG) -nostdlib -arch $(_ARCH) KOPTS=$(KOPTS_$(shell echo $(_ARCH) | sed 's/i386/x86/')) endif CFLAGS=${KINCLUDES} -I. -I.. -I${TOP_OBJDIR}/src/config $(DEFINES) $(KDEFS) $(KOPTS) @@ -178,6 +182,12 @@ dest_libafs: $(LIBAFSNONFS) ; ${LIBAFS}: $(AFSAOBJS) $(AFSNFSOBJS) $(MODLD) -r -o ${LIBAFS} ${AFSAOBJS} ${AFSNFSOBJS} -lcc_kext + + dsymutil -o ${LIBAFS}.dSYM ${LIBAFS} + ${LIBAFSNONFS}: $(AFSAOBJS) $(AFSNONFSOBJS) $(MODLD) -r -o ${LIBAFSNONFS} ${AFSAOBJS} ${AFSNONFSOBJS} -lcc_kext + + dsymutil -o ${LIBAFSNONFS}.dSYM ${LIBAFSNONFS} + diff --git a/src/libafs/afs.ppc_darwin_12.plist.in b/src/libafs/afs.ppc_darwin_12.plist.in index 50e5e72d9f..eb1be80c90 100644 --- a/src/libafs/afs.ppc_darwin_12.plist.in +++ b/src/libafs/afs.ppc_darwin_12.plist.in @@ -15,11 +15,11 @@ CFBundlePackageType KEXT CFBundleShortVersionString - @VERSION@ + @MACOS_VERSION@ CFBundleSignature ???? CFBundleVersion - @VERSION@ + @MACOS_VERSION@ OSBundleLibraries com.apple.kernel.bsd diff --git a/src/libafs/afs.ppc_darwin_13.plist.in b/src/libafs/afs.ppc_darwin_13.plist.in index 50e5e72d9f..eb1be80c90 100644 --- a/src/libafs/afs.ppc_darwin_13.plist.in +++ b/src/libafs/afs.ppc_darwin_13.plist.in @@ -15,11 +15,11 @@ CFBundlePackageType KEXT CFBundleShortVersionString - @VERSION@ + @MACOS_VERSION@ CFBundleSignature ???? CFBundleVersion - @VERSION@ + @MACOS_VERSION@ OSBundleLibraries com.apple.kernel.bsd diff --git a/src/libafs/afs.ppc_darwin_14.plist.in b/src/libafs/afs.ppc_darwin_14.plist.in index 7e4f1bf1ac..eafb931589 100644 --- a/src/libafs/afs.ppc_darwin_14.plist.in +++ b/src/libafs/afs.ppc_darwin_14.plist.in @@ -15,11 +15,11 @@ CFBundlePackageType KEXT CFBundleShortVersionString - @VERSION@ + @MACOS_VERSION@ CFBundleSignature ???? CFBundleVersion - @VERSION@ + @MACOS_VERSION@ OSBundleLibraries com.apple.kernel.bsd diff --git a/src/libafs/afs.ppc_darwin_60.plist.in b/src/libafs/afs.ppc_darwin_60.plist.in index 98ab344210..46d02fdcb8 100644 --- a/src/libafs/afs.ppc_darwin_60.plist.in +++ b/src/libafs/afs.ppc_darwin_60.plist.in @@ -15,11 +15,11 @@ CFBundlePackageType KEXT CFBundleShortVersionString - @VERSION@ + @MACOS_VERSION@ CFBundleSignature ???? CFBundleVersion - @VERSION@ + @MACOS_VERSION@ OSBundleLibraries com.apple.kernel.bsd diff --git a/src/libafs/afs.ppc_darwin_70.plist.in b/src/libafs/afs.ppc_darwin_70.plist.in index a5334fe376..8fbe490610 100644 --- a/src/libafs/afs.ppc_darwin_70.plist.in +++ b/src/libafs/afs.ppc_darwin_70.plist.in @@ -15,11 +15,11 @@ CFBundlePackageType KEXT CFBundleShortVersionString - 1.5.25 + @MACOS_VERSION@ CFBundleSignature ???? CFBundleVersion - 1.5.25 + @MACOS_VERSION@ OSBundleLibraries com.apple.kernel.bsd diff --git a/src/libafs/afs.ppc_darwin_80.plist.in b/src/libafs/afs.ppc_darwin_80.plist.in index eb48495ffc..a1385718c5 100644 --- a/src/libafs/afs.ppc_darwin_80.plist.in +++ b/src/libafs/afs.ppc_darwin_80.plist.in @@ -15,11 +15,11 @@ CFBundlePackageType KEXT CFBundleShortVersionString - 1.5.25 + @MACOS_VERSION@ CFBundleSignature ???? CFBundleVersion - 1.5.25 + @MACOS_VERSION@ OSBundleLibraries com.apple.kpi.bsd diff --git a/src/libafs/afs.ppc_darwin_90.plist.in b/src/libafs/afs.ppc_darwin_90.plist.in index eb48495ffc..a1385718c5 100644 --- a/src/libafs/afs.ppc_darwin_90.plist.in +++ b/src/libafs/afs.ppc_darwin_90.plist.in @@ -15,11 +15,11 @@ CFBundlePackageType KEXT CFBundleShortVersionString - 1.5.25 + @MACOS_VERSION@ CFBundleSignature ???? CFBundleVersion - 1.5.25 + @MACOS_VERSION@ OSBundleLibraries com.apple.kpi.bsd diff --git a/src/libafs/afs.x86_darwin_80.plist.in b/src/libafs/afs.x86_darwin_80.plist.in index eb48495ffc..a1385718c5 100644 --- a/src/libafs/afs.x86_darwin_80.plist.in +++ b/src/libafs/afs.x86_darwin_80.plist.in @@ -15,11 +15,11 @@ CFBundlePackageType KEXT CFBundleShortVersionString - 1.5.25 + @MACOS_VERSION@ CFBundleSignature ???? CFBundleVersion - 1.5.25 + @MACOS_VERSION@ OSBundleLibraries com.apple.kpi.bsd diff --git a/src/libafs/afs.x86_darwin_90.plist.in b/src/libafs/afs.x86_darwin_90.plist.in index eb48495ffc..a1385718c5 100644 --- a/src/libafs/afs.x86_darwin_90.plist.in +++ b/src/libafs/afs.x86_darwin_90.plist.in @@ -15,11 +15,11 @@ CFBundlePackageType KEXT CFBundleShortVersionString - 1.5.25 + @MACOS_VERSION@ CFBundleSignature ???? CFBundleVersion - 1.5.25 + @MACOS_VERSION@ OSBundleLibraries com.apple.kpi.bsd diff --git a/src/libafsrpc/Makefile.in b/src/libafsrpc/Makefile.in index 923c30b14a..e7fc8af543 100644 --- a/src/libafsrpc/Makefile.in +++ b/src/libafsrpc/Makefile.in @@ -401,7 +401,7 @@ fasttime.o: ${LWP}/fasttime.c syscall.o: ${SYS}/syscall.s case "$(SYS_NAME)" in \ sun4x_5* | sunx86_5*) \ - /usr/ccs/lib/cpp ${SFLAGS} ${SYS}/syscall.s syscall.ss; \ + $(CPP) ${SFLAGS} ${SYS}/syscall.s syscall.ss; \ as -o syscall.o syscall.ss; \ $(RM) syscall.ss;; \ sgi_* | *_darwin_* ) \ @@ -413,7 +413,7 @@ syscall.o: ${SYS}/syscall.s *bsd* ) \ touch syscall.o ;; \ *) \ - /lib/cpp ${SFLAGS} ${SYS}/syscall.s syscall.ss; \ + $(CPP) ${SFLAGS} ${SYS}/syscall.s syscall.ss; \ as -o syscall.o syscall.ss; \ $(RM) syscall.ss;; \ esac @@ -427,8 +427,8 @@ rxstat.cs.o: ${TOP_OBJDIR}/src/rxstat/rxstat.cs.c rxstat.ss.o: ${TOP_OBJDIR}/src/rxstat/rxstat.ss.c ${CCRULE} ${TOP_OBJDIR}/src/rxstat/rxstat.ss.c -rxstat.xdr.o: ${TOP_OBJDIR}/src/rxstat//rxstat.xdr.c - ${CCRULE} ${TOP_OBJDIR}/src/rxstat//rxstat.xdr.c +rxstat.xdr.o: ${TOP_OBJDIR}/src/rxstat/rxstat.xdr.c + ${CCRULE} ${TOP_OBJDIR}/src/rxstat/rxstat.xdr.c afsint.cs.o: ${TOP_OBJDIR}/src/fsint/afsint.cs.c ${CCRULE} ${TOP_OBJDIR}/src/fsint/afsint.cs.c diff --git a/src/libuafs/nsafslib.exp b/src/libuafs/nsafslib.exp deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/log/Makefile.in b/src/log/Makefile.in index 93fb409eca..47ef6343e3 100644 --- a/src/log/Makefile.in +++ b/src/log/Makefile.in @@ -95,13 +95,13 @@ ${DEST}/bin/tokens: tokens ${INSTALL} $? $@ ${DEST}/bin/tokens.krb: tokens.krb - ${INSTALL} $? $@ + ${INSTALL} ${NO_STRIP_KRB} $? $@ ${DEST}/root.server/usr/afs/bin/tokens: tokens ${INSTALL} $? $@ ${DEST}/root.server/usr/afs/bin/tokens.krb: tokens.krb - ${INSTALL} $? $@ + ${INSTALL} ${NO_STRIP_KRB} $? $@ ${DEST}/etc/kseal: kseal ${INSTALL} $? $@ @@ -124,13 +124,13 @@ ${DESTDIR}${bindir}/tokens: tokens ${INSTALL} $? $@ ${DESTDIR}${bindir}/tokens.krb: tokens.krb - ${INSTALL} $? $@ + ${INSTALL} ${NO_STRIP_KRB} $? $@ ${DESTDIR}${afssrvbindir}/tokens: tokens ${INSTALL} $? $@ ${DESTDIR}${afssrvbindir}/tokens.krb: tokens.krb - ${INSTALL} $? $@ + ${INSTALL} ${NO_STRIP_KRB} $? $@ ${DESTDIR}${sbindir}/kseal: kseal ${INSTALL} $? $@ diff --git a/src/log/kseal.c b/src/log/kseal.c index 703954db23..d42df102bb 100644 --- a/src/log/kseal.c +++ b/src/log/kseal.c @@ -19,13 +19,7 @@ RCSID #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include #include diff --git a/src/log/tokens.c b/src/log/tokens.c index ae8d97b44a..dcf108fda8 100644 --- a/src/log/tokens.c +++ b/src/log/tokens.c @@ -44,15 +44,10 @@ RCSID #endif /* AFS_RXK5 */ #include -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #ifndef AFS_NT40_ENV + #define VIRTUE #define VICE diff --git a/src/log/unlog.c b/src/log/unlog.c index d6554b20fd..3d0a9008f0 100644 --- a/src/log/unlog.c +++ b/src/log/unlog.c @@ -38,14 +38,7 @@ RCSID #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif - #include #include #include @@ -72,7 +65,7 @@ struct tokenInfo { int -CommandProc(struct cmd_syndesc *as, char *arock) +CommandProc(struct cmd_syndesc *as, void *arock) { struct cmd_item *itp; afs_int32 code, i; @@ -126,7 +119,7 @@ main(int argc, char *argv[]) initialize_ktc_error_table(); initialize_rx_error_table(); - ts = cmd_CreateSyntax(NULL, CommandProc, 0, + ts = cmd_CreateSyntax(NULL, CommandProc, NULL, "Release Kerberos authentication"); cmd_AddParm(ts, "-cell", CMD_LIST, CMD_OPTIONAL, "cell name"); @@ -259,6 +252,7 @@ unlog_NormalizeCellNames(char **list, int size) *list = newCellName; } afsconf_Close(conf); + return 0; } /* @@ -284,4 +278,5 @@ unlog_VerifyUnlog(char **cellList, int cellListSize, struct token_list *tokenLis fprintf(stderr, "unlog: Warning - no tokens held for cell %s\n", cellList[index]); } + return 0; } diff --git a/src/lwp/Makefile.in b/src/lwp/Makefile.in index b70a678234..d7306b2840 100644 --- a/src/lwp/Makefile.in +++ b/src/lwp/Makefile.in @@ -37,7 +37,7 @@ process.o : process.s process.i386.s process.c pmax_he1) \ $(CCOBJ) ${LWP_DBG} ${LWP_OPTMZ} -c -I${TOP_INCDIR} process.s;; \ sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53 | sun4_53 | sun4_52 | sun4_54 | sun4c_54 | sun4m_54 | sun4x_5* ) \ - /usr/ccs/lib/cpp -P -I${TOP_INCDIR} ${srcdir}/process.s process.ss; \ + $(CPP) -P -I${TOP_INCDIR} ${srcdir}/process.s process.ss; \ ${AS} process.ss -o process.o; \ $(RM) process.ss ;; \ sgi_5* ) \ @@ -45,11 +45,11 @@ process.o : process.s process.i386.s process.c sgi_61 | sgi_62 | sgi_63 ) \ $(CCOBJ) ${LWP_DBG} ${LWP_OPTMZ} -c ${XCFLAGS} ${ARCHFLAGS} -I${TOP_INCDIR} -KPIC -G0 ${srcdir}/process.s;; \ s390_*) \ - /lib/cpp -P -I${TOP_INCDIR} ${srcdir}/process.s390.s >process.ss; \ + $(CPP) -P -I${TOP_INCDIR} ${srcdir}/process.s390.s >process.ss; \ ${AS} -ahlns process.ss -o process.o >process.lst; \ $(RM) process.ss ;; \ s390x_*) \ - /lib/cpp -P -I${TOP_INCDIR} ${srcdir}/process.s390x.s >process.ss; \ + $(CPP) -P -I${TOP_INCDIR} ${srcdir}/process.s390x.s >process.ss; \ ${AS} -ahlns process.ss -o process.o >process.lst; \ $(RM) process.ss ;; \ *_darwin* ) \ @@ -88,11 +88,11 @@ process.o : process.s process.i386.s process.c ${AS} process.ss -o process.o ; \ $(RM) -f process.S ;;\ ncrx86_* | sunx86_*) \ - /usr/ccs/lib/cpp -P -D__sun -D__i386 -DIGNORE_STDS_H -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s process.ss; \ + $(CPP) -P -D__sun -D__i386 -DIGNORE_STDS_H -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s process.ss; \ ${AS} -o process.o process.ss; \ $(RM) process.ss ;; \ alpha_nbsd* ) \ - /usr/bin/cpp -DASSEMBLER -P -I${TOP_INCDIR} ${srcdir}/process.s > process.ss; \ + $(CPP) -DASSEMBLER -P -I${TOP_INCDIR} ${srcdir}/process.s > process.ss; \ ${AS} -o process.o process.ss; \ $(RM) process.ss ;; \ hp* | *_linux* | *_umlinux* | sgi_64 | sgi_65 ) \ @@ -103,11 +103,11 @@ process.o : process.s process.i386.s process.c ia64_hpux11* | hp_ux11* ) \ ${CC} ${CFLAGS} -c ${srcdir}/process.c;; \ i386_*) \ - /lib/cpp -P -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s process.ss; \ + $(CPP) -P -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s process.ss; \ ${AS} process.ss -o process.o; \ $(RM) process.ss ;; \ *) \ - /lib/cpp -P -I${TOP_INCDIR} ${srcdir}/process.s process.ss; \ + $(CPP) -P -I${TOP_INCDIR} ${srcdir}/process.s process.ss; \ ${AS} process.ss -o process.o; \ $(RM) process.ss ;; \ esac diff --git a/src/lwp/lwp.c b/src/lwp/lwp.c index 55226f7dc7..0549f25b12 100644 --- a/src/lwp/lwp.c +++ b/src/lwp/lwp.c @@ -39,13 +39,7 @@ int setlim(int limcon, uchar_t hard, int limit); extern char *getenv(); #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #if !defined(USE_PTHREADS) && !defined(USE_SOLARIS_THREADS) @@ -967,6 +961,8 @@ Dispatcher(void) lwp_cpptr = runnable[i].head; returnto(&lwp_cpptr->context); + + return 0; /* not reachable */ } /* Complain of a stack overflow to stderr without using stdio. */ diff --git a/src/lwp/threadname.c b/src/lwp/threadname.c index f36b3170bd..3f7e9be0a0 100644 --- a/src/lwp/threadname.c +++ b/src/lwp/threadname.c @@ -25,13 +25,8 @@ RCSID ("$Header$"); -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif + #if defined(AFS_PTHREAD_ENV) #include #else /* defined(AFS_PTHREAD_ENV) */ diff --git a/src/lwp/waitkey.c b/src/lwp/waitkey.c index e31e0c5250..5d2a88476d 100644 --- a/src/lwp/waitkey.c +++ b/src/lwp/waitkey.c @@ -35,13 +35,7 @@ RCSID #include #include #endif -#ifdef HAVE_STRING_H #include -#else -#ifdef HAVE_STRINGS_H -#include -#endif -#endif #include "lwp.h" #define LWP_KEYSTROKE_DELAY 250 /* 250ms. Must be < 1000 */ diff --git a/src/package/tags b/src/package/tags deleted file mode 100644 index 89e6b52f54..0000000000 --- a/src/package/tags +++ /dev/null @@ -1,61 +0,0 @@ -AddBlkEntry test.c /^AddBlkEntry(f, p, o, m, u)$/ -AddChrEntry test.c /^AddChrEntry(f, p, o, m, u)$/ -AddDirEntry test.c /^AddDirEntry(f, p, o, m, u)$/ -AddEntry conftree.c /^int AddEntry(filetype, updtspec, filename, prototy/ -AddLnkEntry test.c /^AddLnkEntry(f, p, o, m, u)$/ -AddRegEntry test.c /^AddRegEntry(f, p, o, m, u)$/ -AddSockEntry test.c /^AddSockEntry(f)$/ -AllocConfigNode conftree.c /^static CTREEPTR AllocConfigNode()$/ -ApplyConfigTree conftree.c /^ApplyConfigTree(func)$/ -BuildConfigTree conftree.c /^int BuildConfigTree(f)$/ -CheckMount check.c /^static CheckMount(path)$/ -FixDir update.c /^static int FixDir(np, path)$/ -FixLostFoundDir update.c /^static int FixLostFoundDir(path)$/ -FixReg update.c /^static FixReg(np, path)$/ -GetArgs package.c /^static GetArgs(argc, argv)$/ -InitializeConfigTree conftree.c /^int InitializeConfigTree()$/ -LocateChildNode conftree.c /^CTREEPTR LocateChildNode(dp, name, lmode)$/ -LocatePathNode conftree.c /^CTREEPTR LocatePathNode(dp, path, lmode)$/ -Mpackage package.c /^main(argc, argv)$/ -Mtest test.c /^main(argc, argv)$/ -TraverseConfigTree conftree.c /^TraverseConfigTree(np, path, func)$/ -UpdateDev update.c /^static UpdateDev(np, path)$/ -UpdateDir update.c /^static UpdateDir(np, path)$/ -UpdateLnk update.c /^static UpdateLnk(np, path)$/ -UpdateReg update.c /^static UpdateReg(np, path)$/ -UpdateSock update.c /^static UpdateSock(np, path)$/ -ValidUpdtSpec conftree.c /^static int ValidUpdtSpec(ftype, uspec)$/ -ValidateGroupName conftree.c /^static int ValidateGroupName(name, gidp)$/ -ValidateUserName conftree.c /^static int ValidateUserName(name, uidp)$/ -allprint misc.c /^allprint(i)$/ -check check.c /^int check(np, path)$/ -cp fileops.c /^int cp(from,to)$/ -dbgprint globals.h /^#define dbgprint(x) {fprintf x ; fflush(stderr);/ -dochmod update.c /^static dochmod(np, path)$/ -dochown update.c /^static dochown(np, path)$/ -dochtim update.c /^static dochtim(np, path)$/ -dochtyp update.c /^static dochtyp(np, path)$/ -ecalloc globfuncs.c /^char *ecalloc(nelem, size)$/ -echo_modeinfo test.c /^echo_modeinfo(m)$/ -echo_ownerinfo test.c /^echo_ownerinfo(o)$/ -echo_prototypeinfo test.c /^echo_prototypeinfo(p)$/ -echo_updateoptions test.c /^echo_updateoptions(u)$/ -efopen globfuncs.c /^FILE *efopen(filename, type)$/ -emalloc globfuncs.c /^char *emalloc(size)$/ -fatal messages.c /^\/* VARARGS1 *\/fatal(cp) char *cp; \/*ARGSUSED*\/ {}$/ -ln fileops.c /^int ln(from,to)$/ -loudonly_message messages.c /^\/* VARARGS1 *\/loudonly_message(cp) char *cp; \/*ARG/ -message messages.c /^\/* VARARGS1 *\/message(cp) char *cp; \/*ARGSUSED*\/ {/ -mklostfound fileops.c /^int mklostfound(path)$/ -mv fileops.c /^int mv(from,to)$/ -namehash conftree.c /^static int namehash(name)$/ -putformat messages.c /^static char *putformat(dp,fp,ap)$/ -putnum messages.c /^static char *putnum(dp,n,b)$/ -putstr messages.c /^static char *putstr(dp,s)$/ -rm fileops.c /^int rm(path)$/ -sprint misc.c /^sprint(s)$/ -update update.c /^int update(np, path)$/ -usage package.c /^static usage()$/ -verbose_message messages.c /^\/* VARARGS1 *\/verbose_message(cp) char *cp; \/*ARGS/ -yyerror misc.c /^yyerror()$/ -yywrap misc.c /^yywrap()$/ diff --git a/src/packaging/MacOS/OpenAFS.Info.plist b/src/packaging/MacOS/OpenAFS.Info.plist.in similarity index 91% rename from src/packaging/MacOS/OpenAFS.Info.plist rename to src/packaging/MacOS/OpenAFS.Info.plist.in index 13878eda70..2a78672129 100644 --- a/src/packaging/MacOS/OpenAFS.Info.plist +++ b/src/packaging/MacOS/OpenAFS.Info.plist.in @@ -3,13 +3,13 @@ CFBundleGetInfoString - OpenAFS 1.5.25 + OpenAFS @MACOS_VERSION@ CFBundleIdentifier org.openafs.OpenAFS.pkg CFBundleName OpenAFS CFBundleShortVersionString - 1.5.25 + @MACOS_VERSION@ IFMajorVersion 1 IFMinorVersion @@ -31,7 +31,7 @@ IFPkgFlagRelocatable IFPkgFlagRestartAction - NoRestart + RecommendedRestart IFPkgFlagRootVolumeOnly IFPkgFlagUpdateInstalledLanguages diff --git a/src/packaging/MacOS/OpenAFS.info b/src/packaging/MacOS/OpenAFS.info.in similarity index 90% rename from src/packaging/MacOS/OpenAFS.info rename to src/packaging/MacOS/OpenAFS.info.in index abc9a8594c..a026c98441 100644 --- a/src/packaging/MacOS/OpenAFS.info +++ b/src/packaging/MacOS/OpenAFS.info.in @@ -1,5 +1,5 @@ Title OpenAFS -Version 1.5.25 +Version @VERSION@ Description The OpenAFS distributed filesystem. This package installs an almost-ready-to-run client for OpenAFS. see http://www.openafs.org for more information. DefaultLocation / Diskname (null) @@ -11,6 +11,6 @@ Application NO Relocatable NO Required NO InstallOnly NO -RequiresReboot NO +RequiresReboot YES InstallFat NO rootVolumeOnly YES diff --git a/src/packaging/MacOS/OpenAFS.post_install b/src/packaging/MacOS/OpenAFS.post_install index c840b18977..96281e6e56 100644 --- a/src/packaging/MacOS/OpenAFS.post_install +++ b/src/packaging/MacOS/OpenAFS.post_install @@ -36,6 +36,14 @@ if [ ! -f ThisCell -a -f ThisCell.sample ]; then cp ThisCell.sample ThisCell fi +# force reversion of 10.4 memcache mistake +rm -f config/afsd.options.broken +echo '-memcache -afsdb -stat 2000 -dcache 800 -daemons 3 -volumes 70 -dynroot -fakestat-all' > config/afsd.options.broken +if cmp -s config/afsd.options.broken config/afsd.options ; then + rm -f config/afsd.options +fi +rm -f config/afsd.options.broken + if [ ! -f config/afsd.options -a -f config/afsd.options.sample ]; then cp config/afsd.options.sample config/afsd.options fi @@ -91,7 +99,3 @@ elif [ -e config/afssettings ]; then # turn off execution of afssettings chmod a-x config/afssettings fi - -#here we should run tools which configure the client, and then if it's enabled: -/Library/StartupItems/OpenAFS/OpenAFS start - diff --git a/src/packaging/MacOS/OpenAFS.pre_upgrade b/src/packaging/MacOS/OpenAFS.pre_upgrade index 9b1f721fb4..ae71e03a50 100644 --- a/src/packaging/MacOS/OpenAFS.pre_upgrade +++ b/src/packaging/MacOS/OpenAFS.pre_upgrade @@ -23,6 +23,3 @@ if [ -f config/afsd.options -a -f config/afsd.options.sample ]; then fi fi -if [ -f /Library/StartupItems/OpenAFS/OpenAFS ]; then - /Library/StartupItems/OpenAFS/OpenAFS stop -fi diff --git a/src/packaging/MacOS/ReadMe.rtf b/src/packaging/MacOS/ReadMe.rtf.8 similarity index 98% rename from src/packaging/MacOS/ReadMe.rtf rename to src/packaging/MacOS/ReadMe.rtf.8 index a2c5dddcaa..ada1c7dd51 100644 --- a/src/packaging/MacOS/ReadMe.rtf +++ b/src/packaging/MacOS/ReadMe.rtf.8 @@ -4,7 +4,7 @@ \margl1440\margr1440\vieww9000\viewh9000\viewkind0 \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\f0\fs20 \cf0 This release of OpenAFS is targeted at MacOS 10.4. +\f0\fs20 \cf0 This release of OpenAFS is targeted at MacOS 10.4. (Tiger) \ Select a client cell name by editing /var/db/openafs/etc/ThisCell\ \ diff --git a/src/packaging/MacOS/ReadMe.rtf.9 b/src/packaging/MacOS/ReadMe.rtf.9 new file mode 100644 index 0000000000..dfba64d377 --- /dev/null +++ b/src/packaging/MacOS/ReadMe.rtf.9 @@ -0,0 +1,13 @@ +{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf100 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\margl1440\margr1440\vieww9000\viewh9000\viewkind0 +\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural + +\f0\fs20 \cf0 This release of OpenAFS is targeted at MacOS 10.5. (Leopard) +\ +Select a client cell name by editing /var/db/openafs/etc/ThisCell\ +\ +The included afssettings program is distributed under the Apple Public Source License, version 2.0. See http://www.opensource.apple.com/apsl/2.0.txt or the included file 2.0.txt.\ +\ +Reboot when all of this is done.} diff --git a/src/packaging/MacOS/buildpkg.sh b/src/packaging/MacOS/buildpkg.sh.in similarity index 84% rename from src/packaging/MacOS/buildpkg.sh rename to src/packaging/MacOS/buildpkg.sh.in index d7f6db0233..4c9cd5080b 100644 --- a/src/packaging/MacOS/buildpkg.sh +++ b/src/packaging/MacOS/buildpkg.sh.in @@ -25,6 +25,15 @@ CURDIR=`pwd` RESSRC=`dirname $0` RESSRC=`cd $RESSRC && pwd` majorvers=`uname -r | sed 's/\..*//'` +if [ $majorvers -eq 7 ]; then + RELNAME="Panther" +fi +if [ $majorvers -eq 8 ]; then + RELNAME="Tiger" +fi +if [ $majorvers -eq 9 ]; then + RELNAME="Leopard" +fi PKGROOT=$CURDIR/pkgroot PKGRES=$CURDIR/pkgres @@ -67,7 +76,7 @@ if [ $firstpass = yes ]; then die=1 fi fi - FILES="ReadMe.rtf License.rtf CellServDB.list OpenAFS.info OpenAFS.post_install OpenAFS.pre_upgrade csrvdbmerge.pl 2.0.txt" + FILES="ReadMe.rtf.$majorvers License.rtf CellServDB.list OpenAFS.info OpenAFS.post_install OpenAFS.pre_upgrade csrvdbmerge.pl 2.0.txt" for f in $FILES; do if [ ! -f $RESSRC/$f ]; then echo "file missing: " $RESSRC/$f @@ -122,11 +131,7 @@ if [ $firstpass = yes ]; then else echo /Network/afs:/var/db/openafs/cache:30000 > $PKGROOT/private/var/db/openafs/etc/cacheinfo.sample fi - if [ $majorvers -ge 9 ]; then - echo '-memcache -afsdb -stat 2000 -dcache 800 -daemons 3 -volumes 70 -dynroot -fakestat-all' > $PKGROOT/private/var/db/openafs/etc/config/afsd.options.sample - else echo '-afsdb -stat 2000 -dcache 800 -daemons 3 -volumes 70 -dynroot -fakestat-all' > $PKGROOT/private/var/db/openafs/etc/config/afsd.options.sample - fi strip -X -S $PKGROOT/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext/Contents/MacOS/afs @@ -137,7 +142,7 @@ if [ $firstpass = yes ]; then chmod -R og-w $PKGROOT/private chmod og-rx $PKGROOT/private/var/db/openafs/cache - mkdir -p $PKGROOT/usr/bin $PKGROOT/usr/sbin + mkdir -p $PKGROOT/usr/bin $PKGROOT/usr/sbin $PKGROOT/usr/share/man/man1 $PKGROOT/usr/share/man/man5 $PKGROOT/usr/share/man/man8 BINLIST="fs klog klog.krb pagsh pagsh.krb pts sys tokens tokens.krb unlog unlog.krb aklog" ETCLIST="vos" @@ -152,6 +157,18 @@ if [ $firstpass = yes ]; then for f in $ETCLIST; do ln -s ../../Library/OpenAFS/Tools/etc/$f $PKGROOT/usr/sbin/$f done + for f in `ls $PKGROOT/Library/OpenAFS/Tools/man/man1`; do + gzip -9 $PKGROOT/Library/OpenAFS/Tools/man/man1/$f + ln -s ../../../../Library/OpenAFS/Tools/man/man1/$f.gz $PKGROOT/usr/share/man/man1/$f.gz + done + for f in `ls $PKGROOT/Library/OpenAFS/Tools/man/man5`; do + gzip -9 $PKGROOT/Library/OpenAFS/Tools/man/man5/$f + ln -s ../../../../Library/OpenAFS/Tools/man/man5/$f.gz $PKGROOT/usr/share/man/man5/$f.gz + done + for f in `ls $PKGROOT/Library/OpenAFS/Tools/man/man8`; do + gzip -9 $PKGROOT/Library/OpenAFS/Tools/man/man8/$f + ln -s ../../../../Library/OpenAFS/Tools/man/man8/$f.gz $PKGROOT/usr/share/man/man8/$f.gz + done ln -s ../../Library/OpenAFS/Tools/bin/kpasswd $PKGROOT/usr/bin/kpasswd.afs @@ -186,12 +203,21 @@ if [ $secondpass = yes ]; then cp OpenAFS.post_install $PKGRES/OpenAFS.post_upgrade chmod a+x $PKGRES/OpenAFS.post_install $PKGRES/OpenAFS.post_upgrade $PKGRES/OpenAFS.pre_upgrade fi - cp License.rtf ReadMe.rtf $PKGRES + cp License.rtf $PKGRES + cp ReadMe.rtf.$majorvers $PKGRES/ReadMe.rtf cp csrvdbmerge.pl $PKGRES chmod a+x $PKGRES/csrvdbmerge.pl cp CellServDB.list $PKGRES chown -R root${SEP}wheel $PKGRES rm -rf $CURDIR/OpenAFS.pkg + + # once we have cm cleanup in 10.4 this can go + if [ $majorvers -le 8 ]; then + cat $RESSRC/OpenAFS.info|sed 's/RequiresReboot NO/RequiresReboot YES/'>$RESSRC/OpenAFS.info.new + rm -f $RESSRC/OpenAFS.info + mv $RESSRC/OpenAFS.info.new $RESSRC/OpenAFS.info + fi + if [ $majorvers -ge 7 ]; then echo $package -build -p $CURDIR/OpenAFS.pkg -f $PKGROOT -r $PKGRES \ -i OpenAFS.Info.plist -d OpenAFS.Description.plist @@ -213,14 +239,14 @@ if [ $secondpass = yes ]; then rm -rf $PKGROOT $PKGRES mkdir $CURDIR/dmg mv $CURDIR/OpenAFS.pkg $CURDIR/dmg - rm -rf $CURDIR/OpenAFS.dmg + rm -rf $CURDIR/OpenAFS-@VERSION@-$RELNAME.dmg cp Uninstall $CURDIR/dmg/Uninstall.command cp DS_Store $CURDIR/dmg/.DS_Store mkdir $CURDIR/dmg/.background cp afslogo.jpg $CURDIR/dmg/.background # hdiutil create -srcfolder $CURDIR/dmg -volname OpenAFS -anyowners $CURDIR/OpenAFS.dmg hdiutil makehybrid -hfs -hfs-volume-name OpenAFS -hfs-openfolder $CURDIR/dmg $CURDIR/dmg -o $CURDIR/TMP.dmg - hdiutil convert -format UDZO $CURDIR/TMP.dmg -o $CURDIR/OpenAFS.dmg + hdiutil convert -format UDZO $CURDIR/TMP.dmg -o $CURDIR/OpenAFS-@VERSION@-$RELNAME.dmg rm $CURDIR/TMP.dmg rm -rf $CURDIR/dmg # Unfortunately, sudo sets $USER to root, so I can't chown the diff --git a/src/packaging/RedHat/.cvsignore b/src/packaging/RedHat/.cvsignore new file mode 100644 index 0000000000..f07c5d2b14 --- /dev/null +++ b/src/packaging/RedHat/.cvsignore @@ -0,0 +1 @@ +openafs.spec diff --git a/src/packaging/RedHat/RPM-build-notes b/src/packaging/RedHat/RPM-build-notes new file mode 100644 index 0000000000..bf6f187dff --- /dev/null +++ b/src/packaging/RedHat/RPM-build-notes @@ -0,0 +1,35 @@ +Beginning with the 1.4.5 release, OpenAFS's prebuilt binaries use a new +mechanism for packaging kernel modules on Fedora Core (all versions) +and RHEL 5 (and derivatives). This new mechanism allows the +installation of modules for multiple kernel variants simultaneously, +and is identical to the technique used by Fedora and Red Hat's own +out of tree kernel modules. + +The difference is that instead of a single 'openafs-kernel' module, +multiple kmod-openafs- RPMs are produced. When manually +upgrading to OpenAFS 1.4.5, it may be necessary to remove any openafs- +kernel modules left behind by your old installation, and to ensure +that the appropriate kmod-openafs module is installed. + +If you wish to build 'kmod' modules for new kernel release, this may +be done by rebuilding the SRPM with 'fedorakmod' defined, and the +'kvariants' parameter set to the list of kernel variants you wish to +build modules for (a kernel-devel package must be installed for each +of these variants). Note that supplying '' as a variant will build +for a normal kernel. The 'kernvers' variable can be set to specify +what kernel release version you wish to build for. + +For example: + rpmbuild -bb --define "fedorakmod 1" \ + --target i686 \ + --define "build_modules 1" \ + --define "kvariants '' PAE" \ + openafs.spec + +would build a kernel module for the normal and PAE variants of the +currently running kernel. + +Old-style packages may still be built in the same way as previous +releases. However, note that you must use userland RPMs which match +the packaging of your kernel module. Old style kernel modules will +not work with a set of userland RPMs which expect kmod-style packages. diff --git a/src/packaging/RedHat/afs-krb5-2.0-com_err.patch b/src/packaging/RedHat/afs-krb5-2.0-com_err.patch deleted file mode 100644 index 7b496bbee3..0000000000 --- a/src/packaging/RedHat/afs-krb5-2.0-com_err.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -uNr afs-krb5.orig/src/configure.in afs-krb5/src/configure.in ---- afs-krb5.orig/src/configure.in 2005-04-14 16:06:15.597138000 -0400 -+++ afs-krb5/src/configure.in 2005-04-14 16:06:44.201789856 -0400 -@@ -143,7 +143,19 @@ - LIBS="$ac_save_LIBS"]) - if test "x$afs_cv_func_getDirPath" = "xyes"; then - AC_MSG_RESULT([Setting compilation parameters for AFS 3.5 and later]) -- AKLOG_EXTRA_OBJ=adderrtable.o -+ AC_MSG_CHECKING([for add_to_error_table]) -+dnl -+dnl We may be using libcom_err from Kerberos (shared libraries), and -+dnl already have add_to_error_table -+dnl -+ AC_TRY_LINK_FUNC(add_to_error_table, have_adderr=yes, have_adderr=no) -+ if test $have_adderr != yes; then -+ AC_MSG_RESULT([no, adding adderrtable.o]) -+ AKLOG_EXTRA_OBJ=adderrtable.o -+ else -+ AC_MSG_RESULT([yes]) -+ AKLOG_EXTRA_OBJ= -+ fi - else - AC_MSG_RESULT([Setting compilation parameters for pre-AFS 3.5]) - AC_DEFINE(PRE_AFS35) diff --git a/src/packaging/RedHat/afs-krb5-2.0-krb524.patch b/src/packaging/RedHat/afs-krb5-2.0-krb524.patch deleted file mode 100644 index 7503d41191..0000000000 --- a/src/packaging/RedHat/afs-krb5-2.0-krb524.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- afs-krb5/src/configure.in-orig 2003-03-16 20:13:34.000000000 -0500 -+++ afs-krb5/src/configure.in 2005-09-14 17:20:46.000000000 -0400 -@@ -179,14 +197,20 @@ - [ EXTRA_INC="$EXTRA_INC -I$with_krb5_obj/include -I$with_krb5_obj/include/krb5" - KADM_LIBS=`echo $KADM_LIBS | sed -e "s#-ldb#$with_krb5_obj/lib/libdb.a#"`]) - dnl --dnl Sigh, why is this so complicated? Right now, just assume that --dnl the 524 library is always called krb524 and will be picked up by the --dnl Kerberos link line --dnl --dnl AC_CHECK_LIB(krb524, krb524_convert_princs, [KRB524LIB="-lkrb524"], [ --dnl AC_MSG_ERROR([Cannot find 524 library, exiting]) --dnl ]) --KRB524LIB=-lkrb524 -+dnl The krb524 functions may be included in libkrb5 itself, or else in a -+dnl separate library named libkrb524 -+dnl -+ac_save_LIBS="$LIBS" -+KRB524LIB= -+AC_MSG_CHECKING([for krb524 library]) -+AC_CHECK_FUNC(krb524_init_ets, have_krb524=yes, have_krb524=no) -+ -+if test "$have_krb524" = no; then -+ LIBS="$LIBS -lkrb524" -+ AC_CHECK_LIB(krb524, krb524_init_ets, [KRB524LIB="-lkrb524"], -+ [AC_MSG_ERROR([Unable to find krb524 library])]) -+fi -+LIBS="$ac_save_LIBS" - - dnl AC_CHECK_LIB(kdb5, krb5_db_fetch_mkey, [KD_LIBS="-lkdb5"],[ - dnl AC_MSG_WARN([Cannot find Kerberos 5 DB library, will not be able to build DB utilities]) diff --git a/src/packaging/RedHat/afs-krb5-2.0-libsocket.patch b/src/packaging/RedHat/afs-krb5-2.0-libsocket.patch deleted file mode 100644 index e39ef2ceff..0000000000 --- a/src/packaging/RedHat/afs-krb5-2.0-libsocket.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff -uNr afs-krb5.orig/src/configure.in afs-krb5/src/configure.in ---- afs-krb5.orig/src/configure.in 2003-03-16 20:13:34.000000000 -0500 -+++ afs-krb5/src/configure.in 2003-07-30 11:52:55.000000000 -0400 -@@ -44,14 +44,6 @@ - if test $retval -ne 0; then - AC_MSG_ERROR($krb5_config failed with error code of $retval) - fi --AC_MSG_RESULT([Adding $krb5_cflags to CFLAGS]) --AC_MSG_RESULT([Adding $krb5_libs to LIBS]) --AC_MSG_RESULT([Setting KADM_CFLAGS to $krb5_cflags_kadm]) --AC_MSG_RESULT([Setting KADM_LIBS to $krb5_libs_kadm]) --CFLAGS="$CFLAGS $krb5_cflags" --LIBS="$LIBS $krb5_libs" --KADM_CFLAGS="$krb5_cflags_kadm" --KADM_LIBS="$krb5_libs_kadm" - dnl - dnl Check for various network libraries - dnl -@@ -105,6 +97,20 @@ - AC_MSG_ERROR([Unable to find res_search function]) - fi - LIBS="$save_LIBS" -+ -+dnl -+dnl Don't add these to LIBS until after we've already looked for -+dnl libsocket, etc. Otherwise ka-forwarder won't build properly -+dnl -+AC_MSG_RESULT([Adding $krb5_cflags to CFLAGS]) -+AC_MSG_RESULT([Adding $krb5_libs to LIBS]) -+AC_MSG_RESULT([Setting KADM_CFLAGS to $krb5_cflags_kadm]) -+AC_MSG_RESULT([Setting KADM_LIBS to $krb5_libs_kadm]) -+CFLAGS="$CFLAGS $krb5_cflags" -+LIBS="$LIBS $krb5_libs" -+KADM_CFLAGS="$krb5_cflags_kadm" -+KADM_LIBS="$krb5_libs_kadm" -+ - dnl - dnl Optional support for AFS - dnl diff --git a/src/packaging/RedHat/afs-krb5-2.0-openafs1.3.patch b/src/packaging/RedHat/afs-krb5-2.0-openafs1.3.patch deleted file mode 100644 index 44045a0670..0000000000 --- a/src/packaging/RedHat/afs-krb5-2.0-openafs1.3.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -uNr afs-krb5.orig/src/asetkey.c afs-krb5/src/asetkey.c ---- afs-krb5.orig/src/asetkey.c 2005-04-08 15:55:35.637620000 -0400 -+++ afs-krb5/src/asetkey.c 2005-04-08 15:55:57.614279120 -0400 -@@ -81,7 +81,7 @@ - exit(1); - } - -- code = afsconf_AddKey(tdir, kvno, key->contents); -+ code = afsconf_AddKey(tdir, kvno, key->contents, 1); - if (code) { - printf("setkey: failed to set key, code %ld.\n", code); - exit(1); diff --git a/src/packaging/RedHat/afs-krb5-2.0-res_search.patch b/src/packaging/RedHat/afs-krb5-2.0-res_search.patch deleted file mode 100644 index fda5ba45b4..0000000000 --- a/src/packaging/RedHat/afs-krb5-2.0-res_search.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- afs-krb5/src/configure.in.res_search 2005-09-30 12:53:38.000000000 -0400 -+++ afs-krb5/src/configure.in 2005-09-30 14:40:38.000000000 -0400 -@@ -89,7 +89,10 @@ - if test "$have_res_search" != yes; then - AC_CHECK_LIB(${lib}, res_search, - [have_res_search=yes -- NETLIBS="$NETLIBS -l${lib}"]) -+ NETLIBS="$NETLIBS -l${lib}"], -+ [AC_CHECK_LIB(${lib}, __res_search, -+ [have_res_search=yes -+ NETLIBS="$NETLIBS -l${lib}"])]) - fi - done - fi diff --git a/src/packaging/RedHat/kmodtool b/src/packaging/RedHat/kmodtool new file mode 100644 index 0000000000..2afc4d9ccf --- /dev/null +++ b/src/packaging/RedHat/kmodtool @@ -0,0 +1,172 @@ +#!/bin/bash + +# kmodtool - Helper script for building kernel module RPMs +# Copyright (c) 2003-2007 Ville Skyttä , +# Thorsten Leemhuis +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +shopt -s extglob + +myprog="kmodtool" +myver="0.10.13" +knownvariants=@(BOOT|PAE?(-debug)|@(big|huge)mem|debug|enterprise|kdump|?(large)smp?(-debug)|uml|xen?([0U])?(-PAE)) +kmod_name= +kver= +verrel= +variant= + +get_verrel () +{ + verrel=${1:-$(uname -r)} + verrel=${verrel%%$knownvariants} +} + +print_verrel () +{ + get_verrel $@ + echo "${verrel}" +} + +get_variant () +{ + get_verrel $@ + variant=${1:-$(uname -r)} + variant=${variant##$verrel} + variant=${variant:-'""'} +} + +print_variant () +{ + get_variant $@ + echo "${variant}" +} + + +get_rpmtemplate () +{ + local variant="${1}" + local dashvariant="${variant:+-${variant}}" + case "$verrel" in + *.EL*) kdep="kernel${dashvariant}-%{_target_cpu} = ${verrel}" ;; + *) kdep="kernel-%{_target_cpu} = ${verrel}${variant}" ;; + esac + cat <= %{?epoch:%{epoch}:}%{version} +Requires(post): /sbin/depmod +Requires(postun): /sbin/depmod +BuildRequires: kernel${dashvariant}-devel-%{_target_cpu} = ${verrel} +%description -n kmod-${kmod_name}${dashvariant} +This package provides the ${kmod_name} kernel modules built for the Linux +kernel ${verrel}${variant} for the %{_target_cpu} family of processors. +%post -n kmod-${kmod_name}${dashvariant} +/sbin/depmod -aeF /boot/System.map-${verrel}${variant} ${verrel}${variant} > /dev/null || : +%postun -n kmod-${kmod_name}${dashvariant} +/sbin/depmod -aF /boot/System.map-${verrel}${variant} ${verrel}${variant} &> /dev/null || : +%files -n kmod-${kmod_name}${dashvariant} +%defattr(644,root,root,755) +/lib/modules/${verrel}${variant}/extra/${kmod_name}/ + +EOF +} + +print_rpmtemplate () +{ + kmod_name="${1}" + shift + kver="${1}" + get_verrel "${1}" + shift + if [ -z "${kmod_name}" ] ; then + echo "Please provide the kmodule-name as first parameter." >&2 + exit 2 + elif [ -z "${kver}" ] ; then + echo "Please provide the kver as second parameter." >&2 + exit 2 + elif [ -z "${verrel}" ] ; then + echo "Couldn't find out the verrel." >&2 + exit 2 + fi + + for variant in "$@" ; do + get_rpmtemplate "${variant}" + done +} + +usage () +{ + cat <