From: Sam Hartman Date: Sat, 26 Jun 2004 07:06:19 +0000 (+0000) Subject: Import OpenAFS 1.3.65. X-Git-Tag: upstream/1.3.65 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=f7fe2b14fcb27725b6002e731a407a9848904e24;p=packages%2Fo%2Fopenafs.git Import OpenAFS 1.3.65. --- diff --git a/Makefile.in b/Makefile.in index 46b5a5f91..c4ca338a0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -668,6 +668,7 @@ clean2: -${COMPILE_PART1} rcp ${COMPILE_CLEAN} -${COMPILE_PART1} libafs ${COMPILE_CLEAN} -${COMPILE_PART1} libuafs ${COMPILE_CLEAN} + -${COMPILE_PART1} tests ${COMPILE_CLEAN} -(cd src/libafs; /bin/rm -rf afs afsint config rx) -(cd src/libuafs; /bin/rm -rf afs afsint config rx des) -/bin/rm -rf ${TOP_INCDIR} ${TOP_LIBDIR} ${TOP_JLIBDIR} @@ -797,7 +798,8 @@ distclean: clean src/vol/test/Makefile \ src/volser/Makefile \ src/wsadmin.src/Makefile \ - src/xstat/Makefile + src/xstat/Makefile \ + src/helper-splint.sh pristine: distclean /bin/rm -f src/config/afsconfig.h.in configure configure-libafs aclocal.m4 diff --git a/README b/README index e9c6c370f..e7ea09c0b 100644 --- a/README +++ b/README @@ -40,7 +40,7 @@ A. Creating the proper directory structure. i386_linux26 i386_umlinux22 i386_umlinux24 - i386_obsd31, i386_obsd32, i386_obsd33, i386_obsd34 + i386_obsd31, i386_obsd32, i386_obsd33, i386_obsd34, i386_obsd35 rs_aix42 sgi_65 (file server not tested) sun4_413 (No client support, no fileserver support, db servers only) @@ -163,7 +163,8 @@ F OpenBSD Notes There is a package builder in src/packaging/OpenBSD. "sh buildpkg.sh" should make a package for the client. Use pkg_add to install. The package will install using transarc-paths, regardless of how you - configured. + configured. The package builder does not work on OpenBSD 3.5 and later + due to the incompatible re-write of pkg_create. There is no server package, but I am told that "make install" will put server binaries in /usr/afs. diff --git a/README-NT b/README-NT index 8acfe4c5d..37895c8a5 100644 --- a/README-NT +++ b/README-NT @@ -33,8 +33,10 @@ The following steps describe how to configure Windows 2000/XP: F. Build Win2000 binaries G. Install NSIS 2.0 H. Build NSIS Install Package - I. Final Results - J. Optional Items + I. Install Wix 2.0 + J. Build Wix MSI Install Package + K. Final Results + L. Optional Items The Microsoft development tools require anywhere from 660 MB to 1.8GB of storage depending on which compilers are selected. The following @@ -128,18 +130,24 @@ by using Internet Explorer 5.x or higher. (Active X controls are required) The header files that are required are found from a Microsoft SDK are: - netspi.h - npapi.h + netspi.h (Windows 9x builds) + npapi.h (Windows 2000,XP,2003 builds) + netcfgx.h (NSIS Loopback Adapter installer - Windows 2000,XP,2003 builds) + netcfgn.h (NSIS Loopback Adapter installer - Windows 2000,XP,2003 builds) -These files come from Microsoft DDKs/SDKs as follows: +These files come from the following Microsoft DDKs/SDKs: - January 1997 Windows NT Workstation DDK - /ddk/frc/network/inc/npapi.h - November 2001 Microsoft Platform SDK - install "samples" from "Core SDK" - samples/winbase/security/winnt/logonnp/npapi.h - July 1998 Windows 95 DDK - net/inc/netmpr.h and net/inc/netspi.h - July 1999 Windows 98 DDK - src/net/inc/netmpr.h and src/net/inc/netspi.h - - you need to install "Legacy and Related - driver samples" + npapi.h: + Windows XP/2003 Platform SDK - include/ + + netcfgn.h, netcfgx.h: + Windows XP/2003 DDK - inc/wxp/ + + netmpr.h, netspi.h: + July 1998 Windows 95 DDK - net/inc/netmpr.h and net/inc/netspi.h + July 1999 Windows 98 DDK - src/net/inc/netmpr.h and src/net/inc/netspi.h + - you need to install "Legacy and Related + driver samples" STEP D. Configure NTBUILD.BAT. @@ -263,7 +271,161 @@ From the DOS command prompt window run: nmake /f NTMakefile NSIS -STEP I. Final Results +STEP I. Install Wix MSI Installer + +Download the Wix 2.0.1727 installer from + + http://prdownloads.sourceforge.net/wix/sources-2.0.1727.0.zip + +Apply the following patches to the source tree and execute + + make ship + +from the \src\wix directory. + +Index: src/wix/Compiler.cs +=================================================================== +RCS file: /cvsroot/wix/wix/src/wix/Compiler.cs,v +retrieving revision 1.9 +diff -u -b -r1.9 Compiler.cs +--- src/wix/Compiler.cs 31 May 2004 01:07:39 -0000 1.9 ++++ src/wix/Compiler.cs 20 Jun 2004 14:06:54 -0000 +@@ -657,7 +657,7 @@ + // add the core registry keys for each context in the class + for (int i = 0; i < contextCount; ++i) + { +- this.AddRegistryKey(sourceLineNumbers, null, 0, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[!", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context ++ this.AddRegistryKey(sourceLineNumbers, null, 0, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[#", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context + if (null != icon) // ClassId default icon + { + if (null != iconIndex) +@@ -5710,6 +5710,20 @@ + break; + } + break; ++ 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; + case "Wait": + wait = Common.IsYes(attrib.Value, sourceLineNumbers, node.Name, attrib.Name, id) ? "1" : "0"; // strings used since integer column is nullable + break; +@@ -7034,6 +7048,7 @@ + } + bits ^= (bit * 65536); + break; ++ + default: + bit = this.NameToBit(MsiInterop.CommonControlAttributes, attrib.Name, attrib.Value, node.Name, id); + if (-1 == bit) +Index: src/wix/Decompiler.cs +=================================================================== +RCS file: /cvsroot/wix/wix/src/wix/Decompiler.cs,v +retrieving revision 1.6 +diff -u -b -r1.6 Decompiler.cs +--- src/wix/Decompiler.cs 21 May 2004 03:57:42 -0000 1.6 ++++ src/wix/Decompiler.cs 20 Jun 2004 14:06:54 -0000 +@@ -2562,7 +2562,7 @@ + this.writer.WriteAttributeString("Group", "yes"); + text = text.Substring(1); + } +- this.writer.WriteString(text); ++ this.writer.WriteAttributeString("Id", text); + this.writer.WriteEndElement(); + } + } +Index: src/wix/Preprocessor.cs +=================================================================== +RCS file: /cvsroot/wix/wix/src/wix/Preprocessor.cs,v +retrieving revision 1.4 +diff -u -b -r1.4 Preprocessor.cs +--- src/wix/Preprocessor.cs 31 May 2004 01:07:40 -0000 1.4 ++++ src/wix/Preprocessor.cs 20 Jun 2004 14:06:55 -0000 +@@ -269,12 +269,12 @@ + break; + case "ifdef": + stack.Push(context); +- 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); + ignore = true; + break; + case "ifndef": + stack.Push(context); +- 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); + ignore = true; + break; + case "elseif": +@@ -356,6 +356,8 @@ + break; + case "endforeach": // endforeach is handled in PreprocessForeach, so seeing it here is an error + throw new WixPreprocessorException(this.GetCurrentSourceLineNumbers(), "Cannot have a processing instruction without a matching ."); ++ case "error": ++ throw new WixPreprocessorException(this.GetCurrentSourceLineNumbers(), this.PreprocessVariables(reader.Value)); + default: + // Console.WriteLine("processing instruction: {0}, {1}", reader.Name, reader.Value); + break; +@@ -403,6 +405,22 @@ + } + + /// ++ /// 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); ++ } ++ ++ /// + /// Replaces parameters in the source text. + /// + /// Text that may contain parameters to replace. +Index: src/wix/Xsd/wix.xsd +=================================================================== +RCS file: /cvsroot/wix/wix/src/wix/Xsd/wix.xsd,v +retrieving revision 1.11 +diff -u -b -r1.11 wix.xsd +--- src/wix/Xsd/wix.xsd 31 May 2004 01:07:40 -0000 1.11 ++++ src/wix/Xsd/wix.xsd 20 Jun 2004 14:06:55 -0000 +@@ -1736,6 +1736,7 @@ + + + ++ + + + + + +STEP J. Build Wix MSI install package + +From the DOS command prompt window run: + + nmake /f NTMakefile wix + +Make sure the binaries installed to \src\wix\release\ship are +available in the PATH environment variable + + +STEP K. Final Results The build process generates its binaries in %AFSROOT%\DEST. The subdirectory would look like the following: @@ -283,7 +445,7 @@ would look like the following: WinInstall\OpenAFSforWindows.exe - is the install package for Open AFS -STEP J. Optional Items +STEP L. Optional Items The build process has an error table that is compiled for many OpenAFS applications. This table is generated by Unix based tools. It is not diff --git a/acinclude.m4 b/acinclude.m4 index 99e62606b..ff614a303 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -4,7 +4,7 @@ dnl dnl NB: Because this code is a macro, references to positional shell dnl parameters must be done like $[]1 instead of $1 -AC_DEFUN(OPENAFS_CONFIGURE_COMMON,[ +AC_DEFUN([OPENAFS_CONFIGURE_COMMON],[ AC_CANONICAL_HOST SRCDIR_PARENT=`pwd` @@ -181,8 +181,10 @@ case $system in LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS LINUX_FS_STRUCT_INODE_HAS_I_DEVICES + LINUX_FS_STRUCT_INODE_HAS_I_SECURITY LINUX_INODE_SETATTR_RETURN_TYPE LINUX_KERNEL_LINUX_SYSCALL_H + LINUX_KERNEL_SELINUX LINUX_NEED_RHCONFIG LINUX_RECALC_SIGPENDING_ARG_TYPE LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT @@ -273,12 +275,18 @@ case $system in if test "x$ac_cv_linux_fs_struct_inode_has_i_devices" = "xyes"; then AC_DEFINE(STRUCT_INODE_HAS_I_DEVICES, 1, [define if you struct inode has i_devices]) fi + if test "x$ac_cv_linux_fs_struct_inode_has_i_security" = "xyes"; then + AC_DEFINE(STRUCT_INODE_HAS_I_SECURITY, 1, [define if you struct inode has i_security]) + fi if test "x$ac_cv_linux_fs_struct_inode_has_i_dirty_data_buffers" = "xyes"; then AC_DEFINE(STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS, 1, [define if your struct inode has data_buffers]) fi if test "x$ac_cv_linux_func_recalc_sigpending_takes_void" = "xyes"; then AC_DEFINE(RECALC_SIGPENDING_TAKES_VOID, 1, [define if your recalc_sigpending takes void]) fi + if test "x$ac_cv_linux_kernel_is_selinux" = "xyes" ; then + AC_DEFINE(LINUX_KERNEL_IS_SELINUX, 1, [define if your linux kernel uses SELinux features]) + fi if test "x$ac_linux_syscall" = "xyes" ; then AC_DEFINE(HAVE_KERNEL_LINUX_SYSCALL_H, 1, [define if your linux kernel has linux/syscall.h]) fi @@ -531,6 +539,9 @@ else sparc-sun-solaris2.9) AFS_SYSNAME="sun4x_59" ;; + sparc-sun-solaris2.10) + AFS_SYSNAME="sun4x_510" + ;; sparc-sun-sunos4*) AFS_SYSNAME="sun4_413" enable_login="yes" @@ -544,6 +555,9 @@ else i386-pc-solaris2.9) AFS_SYSNAME="sunx86_59" ;; + i386-pc-solaris2.10) + AFS_SYSNAME="sunx86_510" + ;; alpha*-dec-osf4.0*) AFS_SYSNAME="alpha_dux40" ;; @@ -631,21 +645,6 @@ else AC_MSG_RESULT($AFS_SYSNAME) fi -# KDUMP64 defaults to KDUMP for systems without a separate kdump64 -KDUMP64='${KDUMP}' -KDUMP=kdump -case $AFS_SYSNAME in - sgi_6?) - KDUMP=kdump.IP20;; - sun4x_5[[789]] | hp_ux11*) - KDUMP=kdump32 - KDUMP64=kdump64;; - *linux*) - KDUMP='kdump-${LINUX_VERSION}';; -esac -AC_SUBST(KDUMP) -AC_SUBST(KDUMP64) - case $AFS_SYSNAME in *_darwin*) DARWIN_PLIST=src/libafs/afs.${AFS_SYSNAME}.plist diff --git a/aclocal.m4 b/aclocal.m4 index 0777fa1ef..0ce56829d 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -16,7 +16,7 @@ dnl dnl NB: Because this code is a macro, references to positional shell dnl parameters must be done like $[]1 instead of $1 -AC_DEFUN(OPENAFS_CONFIGURE_COMMON,[ +AC_DEFUN([OPENAFS_CONFIGURE_COMMON],[ AC_CANONICAL_HOST SRCDIR_PARENT=`pwd` @@ -193,8 +193,10 @@ case $system in LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS LINUX_FS_STRUCT_INODE_HAS_I_DEVICES + LINUX_FS_STRUCT_INODE_HAS_I_SECURITY LINUX_INODE_SETATTR_RETURN_TYPE LINUX_KERNEL_LINUX_SYSCALL_H + LINUX_KERNEL_SELINUX LINUX_NEED_RHCONFIG LINUX_RECALC_SIGPENDING_ARG_TYPE LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT @@ -285,12 +287,18 @@ case $system in if test "x$ac_cv_linux_fs_struct_inode_has_i_devices" = "xyes"; then AC_DEFINE(STRUCT_INODE_HAS_I_DEVICES, 1, [define if you struct inode has i_devices]) fi + if test "x$ac_cv_linux_fs_struct_inode_has_i_security" = "xyes"; then + AC_DEFINE(STRUCT_INODE_HAS_I_SECURITY, 1, [define if you struct inode has i_security]) + fi if test "x$ac_cv_linux_fs_struct_inode_has_i_dirty_data_buffers" = "xyes"; then AC_DEFINE(STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS, 1, [define if your struct inode has data_buffers]) fi if test "x$ac_cv_linux_func_recalc_sigpending_takes_void" = "xyes"; then AC_DEFINE(RECALC_SIGPENDING_TAKES_VOID, 1, [define if your recalc_sigpending takes void]) fi + if test "x$ac_cv_linux_kernel_is_selinux" = "xyes" ; then + AC_DEFINE(LINUX_KERNEL_IS_SELINUX, 1, [define if your linux kernel uses SELinux features]) + fi if test "x$ac_linux_syscall" = "xyes" ; then AC_DEFINE(HAVE_KERNEL_LINUX_SYSCALL_H, 1, [define if your linux kernel has linux/syscall.h]) fi @@ -543,6 +551,9 @@ else sparc-sun-solaris2.9) AFS_SYSNAME="sun4x_59" ;; + sparc-sun-solaris2.10) + AFS_SYSNAME="sun4x_510" + ;; sparc-sun-sunos4*) AFS_SYSNAME="sun4_413" enable_login="yes" @@ -556,6 +567,9 @@ else i386-pc-solaris2.9) AFS_SYSNAME="sunx86_59" ;; + i386-pc-solaris2.10) + AFS_SYSNAME="sunx86_510" + ;; alpha*-dec-osf4.0*) AFS_SYSNAME="alpha_dux40" ;; @@ -643,21 +657,6 @@ else AC_MSG_RESULT($AFS_SYSNAME) fi -# KDUMP64 defaults to KDUMP for systems without a separate kdump64 -KDUMP64='${KDUMP}' -KDUMP=kdump -case $AFS_SYSNAME in - sgi_6?) - KDUMP=kdump.IP20;; - sun4x_5[[789]] | hp_ux11*) - KDUMP=kdump32 - KDUMP64=kdump64;; - *linux*) - KDUMP='kdump-${LINUX_VERSION}';; -esac -AC_SUBST(KDUMP) -AC_SUBST(KDUMP64) - case $AFS_SYSNAME in *_darwin*) DARWIN_PLIST=src/libafs/afs.${AFS_SYSNAME}.plist @@ -1022,7 +1021,7 @@ AC_SUBST(HELPER_SPLINTCFG) ]) -AC_DEFUN(COMPILER_HAS_FUNCTION_MACRO, [ +AC_DEFUN([COMPILER_HAS_FUNCTION_MACRO], [ AC_MSG_CHECKING(for __FUNCTION__ and __LINE__ macros) AC_CACHE_VAL(ac_cv_compiler_has_function_macro, [ @@ -1048,7 +1047,7 @@ AC_PROG_LEX AC_DECL_YYTEXT]) dnl -dnl $Id: bigendian.m4,v 1.2 2001/06/28 05:03:55 shadow Exp $ +dnl $Id: bigendian.m4,v 1.3 2004/06/03 05:13:29 shadow Exp $ dnl dnl check if this computer is little or big-endian @@ -1056,7 +1055,7 @@ dnl if we can figure it out at compile-time then don't define the cpp symbol dnl otherwise test for it and define it. also allow options for overriding dnl it when cross-compiling -AC_DEFUN(OPENAFS_CHECK_BIGENDIAN, [ +AC_DEFUN([OPENAFS_CHECK_BIGENDIAN], [ AC_ARG_ENABLE(bigendian, [ --enable-bigendian the target is big endian], openafs_cv_c_bigendian=yes) @@ -1102,7 +1101,7 @@ fi ]) -AC_DEFUN(OPENAFS_GCC_SUPPORTS_MARCH, [ +AC_DEFUN([OPENAFS_GCC_SUPPORTS_MARCH], [ AC_MSG_CHECKING(if $CC accepts -march=pentium) save_CFLAGS="$CFLAGS" CFLAGS="-MARCH=pentium" @@ -1121,7 +1120,7 @@ fi CFLAGS="$save_CFLAGS" ]) -AC_DEFUN(OPENAFS_GCC_NEEDS_NO_STRICT_ALIASING, [ +AC_DEFUN([OPENAFS_GCC_NEEDS_NO_STRICT_ALIASING], [ AC_MSG_CHECKING(if $CC needs -fno-strict-aliasing) save_CFLAGS="$CFLAGS" CFLAGS="-fno-strict-aliasing" @@ -1138,7 +1137,7 @@ fi CFLAGS="$save_CFLAGS" ]) -AC_DEFUN(OPENAFS_GCC_NEEDS_NO_STRENGTH_REDUCE, [ +AC_DEFUN([OPENAFS_GCC_NEEDS_NO_STRENGTH_REDUCE], [ AC_MSG_CHECKING(if $CC needs -fno-strength-reduce) save_CFLAGS="$CFLAGS" CFLAGS="-fno-strength-reduce" @@ -1155,7 +1154,7 @@ fi CFLAGS="$save_CFLAGS" ]) -AC_DEFUN(OPENAFS_GCC_SUPPORTS_NO_COMMON, [ +AC_DEFUN([OPENAFS_GCC_SUPPORTS_NO_COMMON], [ AC_MSG_CHECKING(if $CC supports -fno-common) save_CFLAGS="$CFLAGS" CFLAGS="-fno-common" @@ -1172,7 +1171,7 @@ fi CFLAGS="$save_CFLAGS" ]) -AC_DEFUN(OPENAFS_GCC_SUPPORTS_PIPE, [ +AC_DEFUN([OPENAFS_GCC_SUPPORTS_PIPE], [ AC_MSG_CHECKING(if $CC supports -pipe) save_CFLAGS="$CFLAGS" CFLAGS="-pipe" @@ -1189,7 +1188,7 @@ fi CFLAGS="$save_CFLAGS" ]) -AC_DEFUN(LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_GFP_MASK, [ +AC_DEFUN([LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_GFP_MASK], [ AC_MSG_CHECKING(for gfp_mask in struct address_space) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1204,7 +1203,7 @@ ac_cv_linux_fs_struct_address_space_has_gfp_mask=no)]) AC_MSG_RESULT($ac_cv_linux_fs_struct_address_space_has_gfp_mask) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_BYTES, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_BYTES], [ AC_MSG_CHECKING(for i_bytes in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1219,7 +1218,7 @@ ac_cv_linux_fs_struct_inode_has_i_bytes=no)]) AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_bytes) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_ALLOC_SEM, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_ALLOC_SEM], [ AC_MSG_CHECKING(for i_alloc_sem in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1234,7 +1233,7 @@ ac_cv_linux_fs_struct_inode_has_i_alloc_sem=no)]) AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_alloc_sem) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM], [ AC_MSG_CHECKING(for i_truncate_sem in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1249,7 +1248,7 @@ ac_cv_linux_fs_struct_inode_has_i_truncate_sem=no)]) AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_truncate_sem) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK, [ +AC_DEFUN([LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK], [ AC_MSG_CHECKING(for page_lock in struct address_space) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1268,7 +1267,7 @@ CPPFLAGS="$save_CPPFLAGS"]) dnl LINUX_BUILD_VNODE_FROM_INODE (configdir, outputdir, tmpldir) dnl defaults: (src/config, src/afs/LINUX, src/afs/linux) -AC_DEFUN(LINUX_BUILD_VNODE_FROM_INODE, [ +AC_DEFUN([LINUX_BUILD_VNODE_FROM_INODE], [ AC_MSG_CHECKING(whether to build osi_vfs.h) configdir=ifelse([$1], ,[src/config],$1) outputdir=ifelse([$2], ,[src/afs/LINUX],$2) @@ -1277,7 +1276,7 @@ chmod +x $configdir/make_vnode.pl $configdir/make_vnode.pl -i $LINUX_KERNEL_PATH -t ${tmpldir} -o $outputdir ]) -AC_DEFUN(LINUX_COMPLETION_H_EXISTS, [ +AC_DEFUN([LINUX_COMPLETION_H_EXISTS], [ AC_MSG_CHECKING(for linux/completion.h existance) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1297,7 +1296,7 @@ AC_MSG_RESULT($ac_cv_linux_completion_h_exists) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_DEFINES_FOR_EACH_PROCESS, [ +AC_DEFUN([LINUX_DEFINES_FOR_EACH_PROCESS], [ AC_MSG_CHECKING(for defined for_each_process) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1314,7 +1313,7 @@ AC_MSG_RESULT($ac_cv_linux_defines_for_each_process) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_DEFINES_PREV_TASK, [ +AC_DEFUN([LINUX_DEFINES_PREV_TASK], [ AC_MSG_CHECKING(for defined prev_task) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1331,7 +1330,7 @@ AC_MSG_RESULT($ac_cv_linux_defines_prev_task) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_INIT_MM, [ +AC_DEFUN([LINUX_EXPORTS_INIT_MM], [ AC_MSG_CHECKING(for exported init_mm) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1348,7 +1347,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_init_mm) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_KALLSYMS_ADDRESS, [ +AC_DEFUN([LINUX_EXPORTS_KALLSYMS_ADDRESS], [ AC_MSG_CHECKING(for exported kallsyms_address_to_symbol) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1365,7 +1364,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_kallsyms_address) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_KALLSYMS_SYMBOL, [ +AC_DEFUN([LINUX_EXPORTS_KALLSYMS_SYMBOL], [ AC_MSG_CHECKING(for exported kallsyms_symbol_to_address) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1382,7 +1381,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_kallsyms_symbol) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_SYS_CALL_TABLE, [ +AC_DEFUN([LINUX_EXPORTS_SYS_CALL_TABLE], [ AC_MSG_CHECKING(for exported sys_call_table) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1399,7 +1398,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_call_table) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_IA32_SYS_CALL_TABLE, [ +AC_DEFUN([LINUX_EXPORTS_IA32_SYS_CALL_TABLE], [ AC_MSG_CHECKING(for exported ia32_sys_call_table) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1416,7 +1415,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_ia32_sys_call_table) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_SYS_CHDIR, [ +AC_DEFUN([LINUX_EXPORTS_SYS_CHDIR], [ AC_MSG_CHECKING(for exported sys_chdir) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1433,7 +1432,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_chdir) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_SYS_CLOSE, [ +AC_DEFUN([LINUX_EXPORTS_SYS_CLOSE], [ AC_MSG_CHECKING(for exported sys_close) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1450,7 +1449,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_close) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_SYS_WAIT4, [ +AC_DEFUN([LINUX_EXPORTS_SYS_WAIT4], [ AC_MSG_CHECKING(for exported sys_wait4) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1467,7 +1466,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_wait4) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_TASKLIST_LOCK, [ +AC_DEFUN([LINUX_EXPORTS_TASKLIST_LOCK], [ AC_MSG_CHECKING(for exported tasklist_lock) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1484,7 +1483,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_tasklist_lock) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_CDEV, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_CDEV], [ AC_MSG_CHECKING(for i_cdev in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1500,7 +1499,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_cdev) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_DEVICES, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_DEVICES], [ AC_MSG_CHECKING(for i_devices in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1516,7 +1515,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_devices) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS], [ AC_MSG_CHECKING(for i_dirty_data_buffers in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1532,7 +1531,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_dirty_data_buffers) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_MAPPING_OVERLOAD, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_MAPPING_OVERLOAD], [ AC_MSG_CHECKING(for i_mapping_overload in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1548,7 +1547,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_mapping_overload) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_MMAP_SHARED, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_MMAP_SHARED], [ AC_MSG_CHECKING(for i_mmap_shared in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1564,7 +1563,23 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_mmap_shared) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_RECALC_SIGPENDING_ARG_TYPE,[ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_SECURITY], [ +AC_MSG_CHECKING(for i_security in struct inode) +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" +AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_security, +[ +AC_TRY_COMPILE( +[#include ], +[struct inode _inode; +printf("%d\n", _inode.i_security);], +ac_cv_linux_fs_struct_inode_has_i_security=yes, +ac_cv_linux_fs_struct_inode_has_i_security=no)]) +AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_security) +CPPFLAGS="$save_CPPFLAGS"]) + + +AC_DEFUN([LINUX_RECALC_SIGPENDING_ARG_TYPE],[ AC_MSG_CHECKING(for recalc_sigpending arg type) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1579,7 +1594,7 @@ AC_MSG_RESULT($ac_cv_linux_func_recalc_sigpending_takes_void) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT, [ +AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT], [ AC_MSG_CHECKING(for parent in struct task_struct) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1595,7 +1610,7 @@ AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_parent) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_REAL_PARENT, [ +AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_REAL_PARENT], [ AC_MSG_CHECKING(for real_parent in struct task_struct) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1611,7 +1626,7 @@ AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_real_parent) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIG, [ +AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIG], [ AC_MSG_CHECKING(for sig in struct task_struct) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1626,7 +1641,7 @@ ac_cv_linux_sched_struct_task_struct_has_sig=no)]) AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_sig) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGMASK_LOCK, [ +AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGMASK_LOCK], [ AC_MSG_CHECKING(for sigmask_lock in struct task_struct) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1641,7 +1656,7 @@ ac_cv_linux_sched_struct_task_struct_has_sigmask_lock=no)]) AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_sigmask_lock) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGHAND, [ +AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGHAND], [ AC_MSG_CHECKING(for sighand in struct task_struct) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1656,7 +1671,7 @@ ac_cv_linux_sched_struct_task_struct_has_sighand=no)]) AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_sighand) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_INODE_SETATTR_RETURN_TYPE,[ +AC_DEFUN([LINUX_INODE_SETATTR_RETURN_TYPE],[ AC_MSG_CHECKING(for inode_setattr return type) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -1673,7 +1688,7 @@ ac_cv_linux_func_inode_setattr_returns_int=no)]) AC_MSG_RESULT($ac_cv_linux_func_inode_setattr_returns_int) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_KERNEL_LINUX_SYSCALL_H,[ +AC_DEFUN([LINUX_KERNEL_LINUX_SYSCALL_H],[ AC_MSG_CHECKING(for linux/syscall.h in kernel) if test -f "${LINUX_KERNEL_PATH}/include/linux/syscall.h"; then ac_linux_syscall=yes @@ -1684,7 +1699,7 @@ AC_DEFUN(LINUX_KERNEL_LINUX_SYSCALL_H,[ fi ]) -AC_DEFUN(LINUX_NEED_RHCONFIG,[ +AC_DEFUN([LINUX_NEED_RHCONFIG],[ RHCONFIG_SP="" RHCONFIG_MP="" if test "x$enable_redhat_buildsys" = "xyes"; then @@ -1708,7 +1723,7 @@ AC_SUBST(RHCONFIG_SP) AC_SUBST(RHCONFIG_MP) ]) -AC_DEFUN(LINUX_WHICH_MODULES,[ +AC_DEFUN([LINUX_WHICH_MODULES],[ if test "x$enable_redhat_buildsys" = "xyes"; then MPS=Default else @@ -1754,8 +1769,23 @@ fi AC_SUBST(MPS) ]) +AC_DEFUN([LINUX_KERNEL_SELINUX],[ +AC_MSG_CHECKING(for SELinux kernel) +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS" +AC_CACHE_VAL(ac_cv_linux_kernel_is_selinux, +[ +AC_TRY_COMPILE( + [#include ], + [#ifndef CONFIG_SECURITY_SELINUX + #error not SELINUX + #endif], + ac_cv_linux_kernel_is_selinux=yes, + ac_cv_linux_kernel_is_selinux=no)]) +AC_MSG_RESULT($ac_cv_linux_kernel_is_selinux) +CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(SOLARIS_UFSVFS_HAS_DQRWLOCK, [ +AC_DEFUN([SOLARIS_UFSVFS_HAS_DQRWLOCK], [ AC_MSG_CHECKING(for vfs_dqrwlock in struct ufsvfs) AC_CACHE_VAL(ac_cv_solaris_ufsvfs_has_dqrwlock, [ @@ -1773,7 +1803,7 @@ fi ]) -AC_DEFUN(SOLARIS_PROC_HAS_P_COREFILE, [ +AC_DEFUN([SOLARIS_PROC_HAS_P_COREFILE], [ AC_MSG_CHECKING(for p_corefile in struct proc) AC_CACHE_VAL(ac_cv_solaris_proc_has_p_corefile, [ @@ -1791,7 +1821,7 @@ fi ]) -AC_DEFUN(SOLARIS_FS_HAS_FS_ROLLED, [ +AC_DEFUN([SOLARIS_FS_HAS_FS_ROLLED], [ AC_MSG_CHECKING(for fs_rolled in struct proc) AC_CACHE_VAL(ac_cv_solaris_fs_has_fs_rolled, [ @@ -1808,7 +1838,7 @@ fi ]) -AC_DEFUN(AC_FUNC_RES_SEARCH, [ +AC_DEFUN([AC_FUNC_RES_SEARCH], [ ac_cv_func_res_search=no AC_TRY_LINK([ #include @@ -1833,7 +1863,7 @@ return 0; ]) -AC_DEFUN(OPENAFS_OSCONF, [ +AC_DEFUN([OPENAFS_OSCONF], [ dnl defaults, override in case below as needed XCFLAGS='${DBG} ${OPTMZ}' @@ -2087,22 +2117,6 @@ case $AFS_SYSNAME in SHLIB_LINKER="${MT_CC} -shared" ;; - i386_linux22) - CC="gcc -pipe" - CCOBJ="gcc -pipe" - MT_CC="gcc -pipe" - KERN_OPTMZ=-O2 - LEX="flex -l" - MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}' - MT_LIBS="-lpthread" - PAM_CFLAGS="-O2 -Dlinux -DLINUX_PAM -fPIC" - SHLIB_LDFLAGS="-shared -Xlinker -x" - TXLIBS="-lncurses" - XCFLAGS="-O2 -D_LARGEFILE64_SOURCE" - YACC="bison -y" - SHLIB_LINKER="${MT_CC} -shared" - ;; - i386_umlinux22) CC="gcc -pipe" CCOBJ="gcc -pipe" @@ -2119,7 +2133,7 @@ case $AFS_SYSNAME in SHLIB_LINKER="${MT_CC} -shared" ;; - i386_linux24) + i386_linux*) CC="gcc -pipe" CCOBJ="gcc -pipe" MT_CC="gcc -pipe" @@ -2535,7 +2549,7 @@ case $AFS_SYSNAME in SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" ;; - sunx86_57) + sun4x_510) CC="/opt/SUNWspro/bin/cc" CCOBJ="/opt/SUNWspro/bin/cc" LEX="lex" @@ -2556,6 +2570,26 @@ case $AFS_SYSNAME in SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" ;; + sunx86_57) + CC="/opt/SUNWspro/bin/cc" + CCOBJ="/opt/SUNWspro/bin/cc" + LEX="lex" + LD="/usr/ccs/bin/ld" + MT_CC="/opt/SUNWspro/bin/cc" + MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}' + MT_LIBS="-lpthread -lsocket" + PAM_CFLAGS="-KPIC" + PAM_LIBS="-lc -lpam -lsocket -lnsl -lm" + SHLIB_CFLAGS="-KPIC" + SHLIB_LDFLAGS="-G -Bsymbolic" + TXLIBS="-lcurses" + XCFLAGS64='${XCFLAGS} -xarch=v9' + XCFLAGS="-dy -Bdynamic" + XLIBELFA="-lelf" + XLIBKVM="-lkvm" + XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl" + SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" + ;; sunx86_58) CC="/opt/SUNWspro/bin/cc" @@ -2578,7 +2612,26 @@ case $AFS_SYSNAME in SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" ;; - + sunx86_510) + CC="/opt/SUNWspro/bin/cc" + CCOBJ="/opt/SUNWspro/bin/cc" + LEX="lex" + LD="/usr/ccs/bin/ld" + MT_CC="/opt/SUNWspro/bin/cc" + MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}' + MT_LIBS="-lpthread -lsocket" + PAM_CFLAGS="-KPIC" + PAM_LIBS="-lc -lpam -lsocket -lnsl -lm" + SHLIB_CFLAGS="-KPIC" + SHLIB_LDFLAGS="-G -Bsymbolic" + TXLIBS="-lcurses" + XCFLAGS64='${XCFLAGS} -xarch=v9' + XCFLAGS="-dy -Bdynamic" + XLIBELFA="-lelf" + XLIBKVM="-lkvm" + XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl" + SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" + ;; esac # @@ -2687,7 +2740,7 @@ AC_SUBST(YACC) ]) -AC_DEFUN(IRIX_SYS_SYSTM_H_HAS_MEM_FUNCS, [ +AC_DEFUN([IRIX_SYS_SYSTM_H_HAS_MEM_FUNCS], [ AC_MSG_CHECKING(for mem* in sys/systm.h) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_KERNEL -D__STRING_H__" diff --git a/configure b/configure index 4ff7c87ca..a9e67551a 100644 --- a/configure +++ b/configure @@ -754,7 +754,7 @@ fi PACKAGE=openafs -VERSION=devel +VERSION=1.3.65 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } @@ -2758,9 +2758,41 @@ fi echo "$ac_t""$ac_cv_linux_fs_struct_inode_has_i_devices" 1>&6 CPPFLAGS="$save_CPPFLAGS" + +echo $ac_n "checking for i_security in struct inode""... $ac_c" 1>&6 +echo "configure:2764: checking for i_security in struct inode" >&5 +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" +if eval "test \"`echo '$''{'ac_cv_linux_fs_struct_inode_has_i_security'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +cat > conftest.$ac_ext < +int main() { +struct inode _inode; +printf("%d\n", _inode.i_security); +; return 0; } +EOF +if { (eval echo configure:2780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_linux_fs_struct_inode_has_i_security=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_linux_fs_struct_inode_has_i_security=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_linux_fs_struct_inode_has_i_security" 1>&6 +CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for inode_setattr return type""... $ac_c" 1>&6 -echo "configure:2764: checking for inode_setattr return type" >&5 +echo "configure:2796: checking for inode_setattr return type" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_func_inode_setattr_returns_int'+set}'`\" = set"; then @@ -2768,7 +2800,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_func_inode_setattr_returns_int'+set}'`\" else cat > conftest.$ac_ext < int main() { @@ -2778,7 +2810,7 @@ int i; i = inode_setattr(&_inode, &_iattr); ; return 0; } EOF -if { (eval echo configure:2782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_func_inode_setattr_returns_int=yes else @@ -2794,7 +2826,7 @@ echo "$ac_t""$ac_cv_linux_func_inode_setattr_returns_int" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for linux/syscall.h in kernel""... $ac_c" 1>&6 -echo "configure:2798: checking for linux/syscall.h in kernel" >&5 +echo "configure:2830: checking for linux/syscall.h in kernel" >&5 if test -f "${LINUX_KERNEL_PATH}/include/linux/syscall.h"; then ac_linux_syscall=yes echo "$ac_t""$ac_linux_syscall" 1>&6 @@ -2804,13 +2836,46 @@ echo "configure:2798: checking for linux/syscall.h in kernel" >&5 fi +echo $ac_n "checking for SELinux kernel""... $ac_c" 1>&6 +echo "configure:2841: checking for SELinux kernel" >&5 +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS" +if eval "test \"`echo '$''{'ac_cv_linux_kernel_is_selinux'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +cat > conftest.$ac_ext < +int main() { +#ifndef CONFIG_SECURITY_SELINUX + #error not SELINUX + #endif +; return 0; } +EOF +if { (eval echo configure:2858: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_linux_kernel_is_selinux=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_linux_kernel_is_selinux=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_linux_kernel_is_selinux" 1>&6 +CPPFLAGS="$save_CPPFLAGS" + RHCONFIG_SP="" RHCONFIG_MP="" if test "x$enable_redhat_buildsys" = "xyes"; then echo "configure: warning: Configured to build from a Red Hat SPEC file" 1>&2 else echo $ac_n "checking for redhat kernel configuration""... $ac_c" 1>&6 -echo "configure:2814: checking for redhat kernel configuration" >&5 +echo "configure:2879: checking for redhat kernel configuration" >&5 if test -f "${LINUX_KERNEL_PATH}/include/linux/rhconfig.h"; then ac_linux_rhconfig=yes RHCONFIG_SP="-D__BOOT_KERNEL_UP=1 -D__BOOT_KERNEL_SMP=0" @@ -2829,7 +2894,7 @@ fi echo $ac_n "checking for recalc_sigpending arg type""... $ac_c" 1>&6 -echo "configure:2833: checking for recalc_sigpending arg type" >&5 +echo "configure:2898: checking for recalc_sigpending arg type" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_func_recalc_sigpending_takes_void'+set}'`\" = set"; then @@ -2837,14 +2902,14 @@ if eval "test \"`echo '$''{'ac_cv_linux_func_recalc_sigpending_takes_void'+set}' else cat > conftest.$ac_ext < int main() { recalc_sigpending(); ; return 0; } EOF -if { (eval echo configure:2848: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2913: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_func_recalc_sigpending_takes_void=yes else @@ -2860,7 +2925,7 @@ echo "$ac_t""$ac_cv_linux_func_recalc_sigpending_takes_void" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for parent in struct task_struct""... $ac_c" 1>&6 -echo "configure:2864: checking for parent in struct task_struct" >&5 +echo "configure:2929: checking for parent in struct task_struct" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_parent'+set}'`\" = set"; then @@ -2868,7 +2933,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_parent'+set else cat > conftest.$ac_ext < int main() { @@ -2876,7 +2941,7 @@ struct task_struct _tsk; printf("%d\n", _tsk.parent); ; return 0; } EOF -if { (eval echo configure:2880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2945: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_sched_struct_task_struct_has_parent=yes else @@ -2892,7 +2957,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_parent" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for real_parent in struct task_struct""... $ac_c" 1>&6 -echo "configure:2896: checking for real_parent in struct task_struct" >&5 +echo "configure:2961: checking for real_parent in struct task_struct" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_real_parent'+set}'`\" = set"; then @@ -2900,7 +2965,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_real_parent else cat > conftest.$ac_ext < int main() { @@ -2908,7 +2973,7 @@ struct task_struct _tsk; printf("%d\n", _tsk.real_parent); ; return 0; } EOF -if { (eval echo configure:2912: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_sched_struct_task_struct_has_real_parent=yes else @@ -2924,7 +2989,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_real_parent" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for sig in struct task_struct""... $ac_c" 1>&6 -echo "configure:2928: checking for sig in struct task_struct" >&5 +echo "configure:2993: checking for sig in struct task_struct" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sig'+set}'`\" = set"; then @@ -2932,7 +2997,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sig'+set}'` else cat > conftest.$ac_ext < int main() { @@ -2940,7 +3005,7 @@ struct task_struct _tsk; printf("%d\n", _tsk.sig); ; return 0; } EOF -if { (eval echo configure:2944: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3009: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_sched_struct_task_struct_has_sig=yes else @@ -2956,7 +3021,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_sig" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for sighand in struct task_struct""... $ac_c" 1>&6 -echo "configure:2960: checking for sighand in struct task_struct" >&5 +echo "configure:3025: checking for sighand in struct task_struct" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sighand'+set}'`\" = set"; then @@ -2964,7 +3029,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sighand'+se else cat > conftest.$ac_ext < int main() { @@ -2972,7 +3037,7 @@ struct task_struct _tsk; printf("%d\n", _tsk.sighand); ; return 0; } EOF -if { (eval echo configure:2976: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3041: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_sched_struct_task_struct_has_sighand=yes else @@ -2988,7 +3053,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_sighand" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for sigmask_lock in struct task_struct""... $ac_c" 1>&6 -echo "configure:2992: checking for sigmask_lock in struct task_struct" >&5 +echo "configure:3057: checking for sigmask_lock in struct task_struct" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sigmask_lock'+set}'`\" = set"; then @@ -2996,7 +3061,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sigmask_loc else cat > conftest.$ac_ext < int main() { @@ -3004,7 +3069,7 @@ struct task_struct _tsk; printf("%d\n", _tsk.sigmask_lock); ; return 0; } EOF -if { (eval echo configure:3008: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_sched_struct_task_struct_has_sigmask_lock=yes else @@ -3025,13 +3090,13 @@ else save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -D__KERNEL__ $RHCONFIG_SP $CPPFLAGS" echo $ac_n "checking if kernel uses MODVERSIONS""... $ac_c" 1>&6 -echo "configure:3029: checking if kernel uses MODVERSIONS" >&5 +echo "configure:3094: checking if kernel uses MODVERSIONS" >&5 if eval "test \"`echo '$''{'ac_cv_linux_config_modversions'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3043,7 +3108,7 @@ lose; ; return 0; } EOF -if { (eval echo configure:3047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_config_modversions=yes else @@ -3057,7 +3122,7 @@ fi echo "$ac_t""$ac_cv_linux_config_modversions" 1>&6 echo $ac_n "checking which kernel modules to build""... $ac_c" 1>&6 -echo "configure:3061: checking which kernel modules to build" >&5 +echo "configure:3126: checking which kernel modules to build" >&5 if test "x$ac_linux_rhconfig" = "xyes" -o "x$ac_cv_linux_config_modversions" = "xno"; then MPS="MP SP" else @@ -3066,7 +3131,7 @@ echo "configure:3061: checking which kernel modules to build" >&5 else cat > conftest.$ac_ext < @@ -3077,7 +3142,7 @@ lose; ; return 0; } EOF -if { (eval echo configure:3081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3146: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_config_smp=yes else @@ -3109,7 +3174,7 @@ fi else echo $ac_n "checking for exported init_mm""... $ac_c" 1>&6 -echo "configure:3113: checking for exported init_mm" >&5 +echo "configure:3178: checking for exported init_mm" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_init_mm'+set}'`\" = set"; then @@ -3117,7 +3182,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_init_mm'+set}'`\" = set"; then else cat > conftest.$ac_ext < int main() { @@ -3126,7 +3191,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3130: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_init_mm=yes else @@ -3142,7 +3207,7 @@ echo "$ac_t""$ac_cv_linux_exports_init_mm" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported kallsyms_address_to_symbol""... $ac_c" 1>&6 -echo "configure:3146: checking for exported kallsyms_address_to_symbol" >&5 +echo "configure:3211: checking for exported kallsyms_address_to_symbol" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_address'+set}'`\" = set"; then @@ -3150,7 +3215,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_address'+set}'`\" = set else cat > conftest.$ac_ext < int main() { @@ -3159,7 +3224,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_kallsyms_address=yes else @@ -3175,7 +3240,7 @@ echo "$ac_t""$ac_cv_linux_exports_kallsyms_address" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported kallsyms_symbol_to_address""... $ac_c" 1>&6 -echo "configure:3179: checking for exported kallsyms_symbol_to_address" >&5 +echo "configure:3244: checking for exported kallsyms_symbol_to_address" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_symbol'+set}'`\" = set"; then @@ -3183,7 +3248,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_symbol'+set}'`\" = set" else cat > conftest.$ac_ext < int main() { @@ -3192,7 +3257,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3261: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_kallsyms_symbol=yes else @@ -3208,7 +3273,7 @@ echo "$ac_t""$ac_cv_linux_exports_kallsyms_symbol" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported sys_call_table""... $ac_c" 1>&6 -echo "configure:3212: checking for exported sys_call_table" >&5 +echo "configure:3277: checking for exported sys_call_table" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_call_table'+set}'`\" = set"; then @@ -3216,7 +3281,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_call_table'+set}'`\" = set"; else cat > conftest.$ac_ext < int main() { @@ -3225,7 +3290,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3294: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_sys_call_table=yes else @@ -3241,7 +3306,7 @@ echo "$ac_t""$ac_cv_linux_exports_sys_call_table" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported ia32_sys_call_table""... $ac_c" 1>&6 -echo "configure:3245: checking for exported ia32_sys_call_table" >&5 +echo "configure:3310: checking for exported ia32_sys_call_table" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_ia32_sys_call_table'+set}'`\" = set"; then @@ -3249,7 +3314,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_ia32_sys_call_table'+set}'`\" = else cat > conftest.$ac_ext < int main() { @@ -3258,7 +3323,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3262: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_ia32_sys_call_table=yes else @@ -3274,7 +3339,7 @@ echo "$ac_t""$ac_cv_linux_exports_ia32_sys_call_table" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported sys_chdir""... $ac_c" 1>&6 -echo "configure:3278: checking for exported sys_chdir" >&5 +echo "configure:3343: checking for exported sys_chdir" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_chdir'+set}'`\" = set"; then @@ -3282,7 +3347,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_chdir'+set}'`\" = set"; then else cat > conftest.$ac_ext < int main() { @@ -3291,7 +3356,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3360: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_sys_chdir=yes else @@ -3307,7 +3372,7 @@ echo "$ac_t""$ac_cv_linux_exports_sys_chdir" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported sys_close""... $ac_c" 1>&6 -echo "configure:3311: checking for exported sys_close" >&5 +echo "configure:3376: checking for exported sys_close" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_close'+set}'`\" = set"; then @@ -3315,7 +3380,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_close'+set}'`\" = set"; then else cat > conftest.$ac_ext < int main() { @@ -3324,7 +3389,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3328: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3393: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_sys_close=yes else @@ -3340,7 +3405,7 @@ echo "$ac_t""$ac_cv_linux_exports_sys_close" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported sys_wait4""... $ac_c" 1>&6 -echo "configure:3344: checking for exported sys_wait4" >&5 +echo "configure:3409: checking for exported sys_wait4" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_wait4'+set}'`\" = set"; then @@ -3348,7 +3413,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_wait4'+set}'`\" = set"; then else cat > conftest.$ac_ext < int main() { @@ -3357,7 +3422,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3426: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_sys_wait4=yes else @@ -3486,6 +3551,12 @@ EOF if test "x$ac_cv_linux_fs_struct_inode_has_i_devices" = "xyes"; then cat >> confdefs.h <<\EOF #define STRUCT_INODE_HAS_I_DEVICES 1 +EOF + + fi + if test "x$ac_cv_linux_fs_struct_inode_has_i_security" = "xyes"; then + cat >> confdefs.h <<\EOF +#define STRUCT_INODE_HAS_I_SECURITY 1 EOF fi @@ -3498,6 +3569,12 @@ EOF if test "x$ac_cv_linux_func_recalc_sigpending_takes_void" = "xyes"; then cat >> confdefs.h <<\EOF #define RECALC_SIGPENDING_TAKES_VOID 1 +EOF + + fi + if test "x$ac_cv_linux_kernel_is_selinux" = "xyes" ; then + cat >> confdefs.h <<\EOF +#define LINUX_KERNEL_IS_SELINUX 1 EOF fi @@ -3545,13 +3622,13 @@ EOF echo "$ac_t""sun4" 1>&6 echo $ac_n "checking for vfs_dqrwlock in struct ufsvfs""... $ac_c" 1>&6 -echo "configure:3549: checking for vfs_dqrwlock in struct ufsvfs" >&5 +echo "configure:3626: checking for vfs_dqrwlock in struct ufsvfs" >&5 if eval "test \"`echo '$''{'ac_cv_solaris_ufsvfs_has_dqrwlock'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3560,7 +3637,7 @@ struct ufsvfs _ufsvfs; (void) _ufsvfs.vfs_dqrwlock; ; return 0; } EOF -if { (eval echo configure:3564: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3641: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_solaris_ufsvfs_has_dqrwlock=yes else @@ -3582,13 +3659,13 @@ fi echo $ac_n "checking for p_corefile in struct proc""... $ac_c" 1>&6 -echo "configure:3586: checking for p_corefile in struct proc" >&5 +echo "configure:3663: checking for p_corefile in struct proc" >&5 if eval "test \"`echo '$''{'ac_cv_solaris_proc_has_p_corefile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3597,7 +3674,7 @@ struct proc _proc; (void) _proc.p_corefile; ; return 0; } EOF -if { (eval echo configure:3601: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3678: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_solaris_proc_has_p_corefile=yes else @@ -3619,13 +3696,13 @@ fi echo $ac_n "checking for fs_rolled in struct proc""... $ac_c" 1>&6 -echo "configure:3623: checking for fs_rolled in struct proc" >&5 +echo "configure:3700: checking for fs_rolled in struct proc" >&5 if eval "test \"`echo '$''{'ac_cv_solaris_fs_has_fs_rolled'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -3633,7 +3710,7 @@ struct fs _fs; (void) _fs.fs_rolled; ; return 0; } EOF -if { (eval echo configure:3637: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3714: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_solaris_fs_has_fs_rolled=yes else @@ -3714,7 +3791,7 @@ if test "x$with_afs_sysname" != "x"; then AFS_SYSNAME="$with_afs_sysname" else echo $ac_n "checking your AFS sysname""... $ac_c" 1>&6 -echo "configure:3718: checking your AFS sysname" >&5 +echo "configure:3795: checking your AFS sysname" >&5 case $host in i?86-*-openbsd3.1) AFS_SYSNAME="i386_obsd31" @@ -3879,6 +3956,9 @@ echo "configure:3718: checking your AFS sysname" >&5 sparc-sun-solaris2.9) AFS_SYSNAME="sun4x_59" ;; + sparc-sun-solaris2.10) + AFS_SYSNAME="sun4x_510" + ;; sparc-sun-sunos4*) AFS_SYSNAME="sun4_413" enable_login="yes" @@ -3892,6 +3972,9 @@ echo "configure:3718: checking your AFS sysname" >&5 i386-pc-solaris2.9) AFS_SYSNAME="sunx86_59" ;; + i386-pc-solaris2.10) + AFS_SYSNAME="sunx86_510" + ;; alpha*-dec-osf4.0*) AFS_SYSNAME="alpha_dux40" ;; @@ -3964,7 +4047,7 @@ echo "configure:3718: checking your AFS sysname" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS" cat > conftest.$ac_ext < int main() { @@ -3973,7 +4056,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4060: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_is_uml=yes else @@ -3991,21 +4074,6 @@ rm -f conftest* echo "$ac_t""$AFS_SYSNAME" 1>&6 fi -# KDUMP64 defaults to KDUMP for systems without a separate kdump64 -KDUMP64='${KDUMP}' -KDUMP=kdump -case $AFS_SYSNAME in - sgi_6?) - KDUMP=kdump.IP20;; - sun4x_5[789] | hp_ux11*) - KDUMP=kdump32 - KDUMP64=kdump64;; - *linux*) - KDUMP='kdump-${LINUX_VERSION}';; -esac - - - case $AFS_SYSNAME in *_darwin*) DARWIN_PLIST=src/libafs/afs.${AFS_SYSNAME}.plist @@ -4018,14 +4086,14 @@ EOF ;; *) echo $ac_n "checking for definition of struct buf""... $ac_c" 1>&6 -echo "configure:4022: checking for definition of struct buf" >&5 +echo "configure:4090: checking for definition of struct buf" >&5 if eval "test \"`echo '$''{'ac_cv_have_struct_buf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_have_struct_buf=no cat > conftest.$ac_ext < int main() { @@ -4033,7 +4101,7 @@ struct buf x; printf("%d\n", sizeof(x)); ; return 0; } EOF -if { (eval echo configure:4037: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4105: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_struct_buf=yes else @@ -4061,9 +4129,9 @@ if eval "test \"`echo '$''{'ac_cv_sockaddr_len'+set}'`\" = set"; then else echo $ac_n "checking if struct sockaddr has sa_len field""... $ac_c" 1>&6 -echo "configure:4065: checking if struct sockaddr has sa_len field" >&5 +echo "configure:4133: checking if struct sockaddr has sa_len field" >&5 cat > conftest.$ac_ext < #include @@ -4072,7 +4140,7 @@ struct sockaddr *a; a->sa_len=0; ; return 0; } EOF -if { (eval echo configure:4076: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4144: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sockaddr_len=yes else @@ -4097,12 +4165,12 @@ else for ac_func in socket do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4101: checking for $ac_func" >&5 +echo "configure:4169: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4154,7 +4222,7 @@ done for lib in socket inet; do if test "$HAVE_SOCKET" != 1; then echo $ac_n "checking for socket in -l${lib}""... $ac_c" 1>&6 -echo "configure:4158: checking for socket in -l${lib}" >&5 +echo "configure:4226: checking for socket in -l${lib}" >&5 ac_lib_var=`echo ${lib}'_'socket | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4162,7 +4230,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${lib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4203,12 +4271,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4207: checking for $ac_func" >&5 +echo "configure:4275: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4260,7 +4328,7 @@ done for lib in nsl; do if test "$HAVE_CONNECT" != 1; then echo $ac_n "checking for connect in -l${lib}""... $ac_c" 1>&6 -echo "configure:4264: checking for connect in -l${lib}" >&5 +echo "configure:4332: checking for connect in -l${lib}" >&5 ac_lib_var=`echo ${lib}'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4268,7 +4336,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${lib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4309,12 +4377,12 @@ fi for ac_func in gethostbyname do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4313: checking for $ac_func" >&5 +echo "configure:4381: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4365,7 +4433,7 @@ done for lib in dns nsl resolv; do if test "$HAVE_GETHOSTBYNAME" != 1; then echo $ac_n "checking for gethostbyname in -l${lib}""... $ac_c" 1>&6 -echo "configure:4369: checking for gethostbyname in -l${lib}" >&5 +echo "configure:4437: checking for gethostbyname in -l${lib}" >&5 ac_lib_var=`echo ${lib}'_'gethostbyname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4373,7 +4441,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${lib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4412,9 +4480,9 @@ fi fi echo $ac_n "checking for the useability of arpa/nameser_compat.h""... $ac_c" 1>&6 -echo "configure:4416: checking for the useability of arpa/nameser_compat.h" >&5 +echo "configure:4484: checking for the useability of arpa/nameser_compat.h" >&5 cat > conftest.$ac_ext < @@ -4431,7 +4499,7 @@ int main() { static int i; i = 0; ; return 0; } EOF -if { (eval echo configure:4435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF @@ -4449,11 +4517,11 @@ rm -f conftest* openafs_save_libs="$LIBS" echo $ac_n "checking for res_search""... $ac_c" 1>&6 -echo "configure:4453: checking for res_search" >&5 +echo "configure:4521: checking for res_search" >&5 ac_cv_func_res_search=no cat > conftest.$ac_ext < @@ -4477,7 +4545,7 @@ return 0; ; return 0; } EOF -if { (eval echo configure:4481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_res_search=yes else @@ -4494,7 +4562,7 @@ rm -f conftest* ac_cv_func_res_search=no cat > conftest.$ac_ext < @@ -4518,7 +4586,7 @@ return 0; ; return 0; } EOF -if { (eval echo configure:4522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_res_search=yes else @@ -4552,7 +4620,7 @@ fi PTHREAD_LIBS=error echo $ac_n "checking for pthread_attr_init in -lpthread""... $ac_c" 1>&6 -echo "configure:4556: checking for pthread_attr_init in -lpthread" >&5 +echo "configure:4624: checking for pthread_attr_init in -lpthread" >&5 ac_lib_var=`echo pthread'_'pthread_attr_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4560,7 +4628,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpthread $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4593,7 +4661,7 @@ fi if test "x$PTHREAD_LIBS" = xerror; then echo $ac_n "checking for pthread_attr_init in -lpthreads""... $ac_c" 1>&6 -echo "configure:4597: checking for pthread_attr_init in -lpthreads" >&5 +echo "configure:4665: checking for pthread_attr_init in -lpthreads" >&5 ac_lib_var=`echo pthreads'_'pthread_attr_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4601,7 +4669,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpthreads $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4635,7 +4703,7 @@ fi fi if test "x$PTHREAD_LIBS" = xerror; then echo $ac_n "checking for pthread_attr_init in -lc_r""... $ac_c" 1>&6 -echo "configure:4639: checking for pthread_attr_init in -lc_r" >&5 +echo "configure:4707: checking for pthread_attr_init in -lc_r" >&5 ac_lib_var=`echo c_r'_'pthread_attr_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4643,7 +4711,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lc_r $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4677,12 +4745,12 @@ fi fi if test "x$PTHREAD_LIBS" = xerror; then echo $ac_n "checking for pthread_attr_init""... $ac_c" 1>&6 -echo "configure:4681: checking for pthread_attr_init" >&5 +echo "configure:4749: checking for pthread_attr_init" >&5 if eval "test \"`echo '$''{'ac_cv_func_pthread_attr_init'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_pthread_attr_init=yes" else @@ -4825,7 +4893,7 @@ EOF fi echo $ac_n "checking for tivoli tsm butc support""... $ac_c" 1>&6 -echo "configure:4829: checking for tivoli tsm butc support" >&5 +echo "configure:4897: checking for tivoli tsm butc support" >&5 XBSA_CFLAGS="" if test "$enable_tivoli_tsm" = "yes"; then XBSADIR1=/usr/tivoli/tsm/client/api/bin/xopen @@ -4846,12 +4914,12 @@ fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:4850: checking for ANSI C header files" >&5 +echo "configure:4918: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -4859,7 +4927,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4863: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4931: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4876,7 +4944,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -4894,7 +4962,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -4915,7 +4983,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -4926,7 +4994,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:4930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -4950,12 +5018,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:4954: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:5022: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -4971,7 +5039,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:4975: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:5043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -4996,12 +5064,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:5000: checking for $ac_hdr that defines DIR" >&5 +echo "configure:5068: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -5009,7 +5077,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:5013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:5081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -5034,7 +5102,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:5038: checking for opendir in -ldir" >&5 +echo "configure:5106: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5042,7 +5110,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5125: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5075,7 +5143,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:5079: checking for opendir in -lx" >&5 +echo "configure:5147: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5083,7 +5151,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5120,17 +5188,17 @@ for ac_hdr in stdlib.h string.h unistd.h fcntl.h sys/time.h sys/file.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5124: checking for $ac_hdr" >&5 +echo "configure:5192: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5134: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5202: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5160,17 +5228,17 @@ for ac_hdr in netinet/in.h netdb.h sys/fcntl.h sys/mnttab.h sys/mntent.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5164: checking for $ac_hdr" >&5 +echo "configure:5232: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5174: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5242: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5200,17 +5268,17 @@ for ac_hdr in mntent.h sys/vfs.h sys/param.h sys/fs_types.h sys/fstyp.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5204: checking for $ac_hdr" >&5 +echo "configure:5272: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5214: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5282: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5240,17 +5308,17 @@ for ac_hdr in sys/mount.h strings.h termios.h signal.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5244: checking for $ac_hdr" >&5 +echo "configure:5312: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5254: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5322: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5280,17 +5348,17 @@ for ac_hdr in windows.h malloc.h winsock2.h direct.h io.h sys/user.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5284: checking for $ac_hdr" >&5 +echo "configure:5352: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5294: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5362: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5320,17 +5388,17 @@ for ac_hdr in security/pam_modules.h siad.h usersec.h ucontext.h regex.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5324: checking for $ac_hdr" >&5 +echo "configure:5392: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5334: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5402: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5374,12 +5442,12 @@ fi for ac_func in utimes random srandom getdtablesize snprintf strlcat strlcpy re_comp re_exec do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5378: checking for $ac_func" >&5 +echo "configure:5446: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5429,12 +5497,12 @@ done for ac_func in setprogname getprogname sigaction mkstemp vsnprintf strerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5433: checking for $ac_func" >&5 +echo "configure:5501: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5485,12 +5553,12 @@ done for ac_func in regcomp regexec regerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5489: checking for $ac_func" >&5 +echo "configure:5557: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5585: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5538,7 +5606,7 @@ fi done echo $ac_n "checking for POSIX regex library""... $ac_c" 1>&6 -echo "configure:5542: checking for POSIX regex library" >&5 +echo "configure:5610: checking for POSIX regex library" >&5 if test "$ac_cv_header_regex_h" = "yes" && \ test "$ac_cv_func_regcomp" = "yes" && \ test "$ac_cv_func_regexec" = "yes" && \ @@ -5553,12 +5621,12 @@ else fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:5557: checking for ssize_t" >&5 +echo "configure:5625: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -5586,7 +5654,7 @@ EOF fi echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:5590: checking size of long" >&5 +echo "configure:5658: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5594,7 +5662,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() @@ -5605,7 +5673,7 @@ main() exit(0); } EOF -if { (eval echo configure:5609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:5677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -5628,12 +5696,12 @@ EOF for ac_func in timegm do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5632: checking for $ac_func" >&5 +echo "configure:5700: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5760,7 +5828,7 @@ LWP_OPTMZ=-O # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5764: checking for $ac_word" >&5 +echo "configure:5832: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5792,7 +5860,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5796: checking for $ac_word" >&5 +echo "configure:5864: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5827,7 +5895,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5831: checking for $ac_word" >&5 +echo "configure:5899: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5862,7 +5930,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5866: checking for $ac_word" >&5 +echo "configure:5934: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5897,7 +5965,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5901: checking for $ac_word" >&5 +echo "configure:5969: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5932,7 +6000,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5936: checking for $ac_word" >&5 +echo "configure:6004: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5967,7 +6035,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5971: checking for $ac_word" >&5 +echo "configure:6039: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6002,7 +6070,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6006: checking for $ac_word" >&5 +echo "configure:6074: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6037,7 +6105,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6041: checking for $ac_word" >&5 +echo "configure:6109: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LORDER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6290,22 +6358,6 @@ case $AFS_SYSNAME in SHLIB_LINKER="${MT_CC} -shared" ;; - i386_linux22) - CC="gcc -pipe" - CCOBJ="gcc -pipe" - MT_CC="gcc -pipe" - KERN_OPTMZ=-O2 - LEX="flex -l" - MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}' - MT_LIBS="-lpthread" - PAM_CFLAGS="-O2 -Dlinux -DLINUX_PAM -fPIC" - SHLIB_LDFLAGS="-shared -Xlinker -x" - TXLIBS="-lncurses" - XCFLAGS="-O2 -D_LARGEFILE64_SOURCE" - YACC="bison -y" - SHLIB_LINKER="${MT_CC} -shared" - ;; - i386_umlinux22) CC="gcc -pipe" CCOBJ="gcc -pipe" @@ -6322,7 +6374,7 @@ case $AFS_SYSNAME in SHLIB_LINKER="${MT_CC} -shared" ;; - i386_linux24) + i386_linux*) CC="gcc -pipe" CCOBJ="gcc -pipe" MT_CC="gcc -pipe" @@ -6738,7 +6790,7 @@ case $AFS_SYSNAME in SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" ;; - sunx86_57) + sun4x_510) CC="/opt/SUNWspro/bin/cc" CCOBJ="/opt/SUNWspro/bin/cc" LEX="lex" @@ -6759,6 +6811,26 @@ case $AFS_SYSNAME in SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" ;; + sunx86_57) + CC="/opt/SUNWspro/bin/cc" + CCOBJ="/opt/SUNWspro/bin/cc" + LEX="lex" + LD="/usr/ccs/bin/ld" + MT_CC="/opt/SUNWspro/bin/cc" + MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}' + MT_LIBS="-lpthread -lsocket" + PAM_CFLAGS="-KPIC" + PAM_LIBS="-lc -lpam -lsocket -lnsl -lm" + SHLIB_CFLAGS="-KPIC" + SHLIB_LDFLAGS="-G -Bsymbolic" + TXLIBS="-lcurses" + XCFLAGS64='${XCFLAGS} -xarch=v9' + XCFLAGS="-dy -Bdynamic" + XLIBELFA="-lelf" + XLIBKVM="-lkvm" + XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl" + SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" + ;; sunx86_58) CC="/opt/SUNWspro/bin/cc" @@ -6781,7 +6853,26 @@ case $AFS_SYSNAME in SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" ;; - + sunx86_510) + CC="/opt/SUNWspro/bin/cc" + CCOBJ="/opt/SUNWspro/bin/cc" + LEX="lex" + LD="/usr/ccs/bin/ld" + MT_CC="/opt/SUNWspro/bin/cc" + MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}' + MT_LIBS="-lpthread -lsocket" + PAM_CFLAGS="-KPIC" + PAM_LIBS="-lc -lpam -lsocket -lnsl -lm" + SHLIB_CFLAGS="-KPIC" + SHLIB_LDFLAGS="-G -Bsymbolic" + TXLIBS="-lcurses" + XCFLAGS64='${XCFLAGS} -xarch=v9' + XCFLAGS="-dy -Bdynamic" + XLIBELFA="-lelf" + XLIBKVM="-lkvm" + XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl" + SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" + ;; esac # @@ -6791,7 +6882,7 @@ case $AFS_SYSNAME in sgi_6*) echo $ac_n "checking for mem* in sys/systm.h""... $ac_c" 1>&6 -echo "configure:6795: checking for mem* in sys/systm.h" >&5 +echo "configure:6886: checking for mem* in sys/systm.h" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_KERNEL -D__STRING_H__" if eval "test \"`echo '$''{'ac_cv_irix_sys_systm_h_has_mem_funcs'+set}'`\" = set"; then @@ -6799,7 +6890,7 @@ if eval "test \"`echo '$''{'ac_cv_irix_sys_systm_h_has_mem_funcs'+set}'`\" = set else cat > conftest.$ac_ext < #include @@ -6809,7 +6900,7 @@ extern void *memcpy(char *, const void *, size_t); ; return 0; } EOF -if { (eval echo configure:6813: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:6904: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_irix_sys_systm_h_has_mem_funcs=no else @@ -7236,8 +7327,6 @@ s%@RHCONFIG_SP@%$RHCONFIG_SP%g s%@RHCONFIG_MP@%$RHCONFIG_MP%g s%@MPS@%$MPS%g s%@HEADER_RT@%$HEADER_RT%g -s%@KDUMP@%$KDUMP%g -s%@KDUMP64@%$KDUMP64%g s%@PTHREAD_LIBS@%$PTHREAD_LIBS%g s%@XBSA_CFLAGS@%$XBSA_CFLAGS%g s%@HAVE_PAM@%$HAVE_PAM%g diff --git a/configure-libafs b/configure-libafs index 40f984f26..a5ea3f6aa 100644 --- a/configure-libafs +++ b/configure-libafs @@ -754,7 +754,7 @@ fi PACKAGE=openafs-libafs -VERSION=devel +VERSION=1.3.65 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } @@ -2758,9 +2758,41 @@ fi echo "$ac_t""$ac_cv_linux_fs_struct_inode_has_i_devices" 1>&6 CPPFLAGS="$save_CPPFLAGS" + +echo $ac_n "checking for i_security in struct inode""... $ac_c" 1>&6 +echo "configure:2764: checking for i_security in struct inode" >&5 +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" +if eval "test \"`echo '$''{'ac_cv_linux_fs_struct_inode_has_i_security'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +cat > conftest.$ac_ext < +int main() { +struct inode _inode; +printf("%d\n", _inode.i_security); +; return 0; } +EOF +if { (eval echo configure:2780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_linux_fs_struct_inode_has_i_security=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_linux_fs_struct_inode_has_i_security=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_linux_fs_struct_inode_has_i_security" 1>&6 +CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for inode_setattr return type""... $ac_c" 1>&6 -echo "configure:2764: checking for inode_setattr return type" >&5 +echo "configure:2796: checking for inode_setattr return type" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_func_inode_setattr_returns_int'+set}'`\" = set"; then @@ -2768,7 +2800,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_func_inode_setattr_returns_int'+set}'`\" else cat > conftest.$ac_ext < int main() { @@ -2778,7 +2810,7 @@ int i; i = inode_setattr(&_inode, &_iattr); ; return 0; } EOF -if { (eval echo configure:2782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_func_inode_setattr_returns_int=yes else @@ -2794,7 +2826,7 @@ echo "$ac_t""$ac_cv_linux_func_inode_setattr_returns_int" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for linux/syscall.h in kernel""... $ac_c" 1>&6 -echo "configure:2798: checking for linux/syscall.h in kernel" >&5 +echo "configure:2830: checking for linux/syscall.h in kernel" >&5 if test -f "${LINUX_KERNEL_PATH}/include/linux/syscall.h"; then ac_linux_syscall=yes echo "$ac_t""$ac_linux_syscall" 1>&6 @@ -2804,13 +2836,46 @@ echo "configure:2798: checking for linux/syscall.h in kernel" >&5 fi +echo $ac_n "checking for SELinux kernel""... $ac_c" 1>&6 +echo "configure:2841: checking for SELinux kernel" >&5 +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS" +if eval "test \"`echo '$''{'ac_cv_linux_kernel_is_selinux'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +cat > conftest.$ac_ext < +int main() { +#ifndef CONFIG_SECURITY_SELINUX + #error not SELINUX + #endif +; return 0; } +EOF +if { (eval echo configure:2858: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_linux_kernel_is_selinux=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_linux_kernel_is_selinux=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_linux_kernel_is_selinux" 1>&6 +CPPFLAGS="$save_CPPFLAGS" + RHCONFIG_SP="" RHCONFIG_MP="" if test "x$enable_redhat_buildsys" = "xyes"; then echo "configure: warning: Configured to build from a Red Hat SPEC file" 1>&2 else echo $ac_n "checking for redhat kernel configuration""... $ac_c" 1>&6 -echo "configure:2814: checking for redhat kernel configuration" >&5 +echo "configure:2879: checking for redhat kernel configuration" >&5 if test -f "${LINUX_KERNEL_PATH}/include/linux/rhconfig.h"; then ac_linux_rhconfig=yes RHCONFIG_SP="-D__BOOT_KERNEL_UP=1 -D__BOOT_KERNEL_SMP=0" @@ -2829,7 +2894,7 @@ fi echo $ac_n "checking for recalc_sigpending arg type""... $ac_c" 1>&6 -echo "configure:2833: checking for recalc_sigpending arg type" >&5 +echo "configure:2898: checking for recalc_sigpending arg type" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_func_recalc_sigpending_takes_void'+set}'`\" = set"; then @@ -2837,14 +2902,14 @@ if eval "test \"`echo '$''{'ac_cv_linux_func_recalc_sigpending_takes_void'+set}' else cat > conftest.$ac_ext < int main() { recalc_sigpending(); ; return 0; } EOF -if { (eval echo configure:2848: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2913: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_func_recalc_sigpending_takes_void=yes else @@ -2860,7 +2925,7 @@ echo "$ac_t""$ac_cv_linux_func_recalc_sigpending_takes_void" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for parent in struct task_struct""... $ac_c" 1>&6 -echo "configure:2864: checking for parent in struct task_struct" >&5 +echo "configure:2929: checking for parent in struct task_struct" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_parent'+set}'`\" = set"; then @@ -2868,7 +2933,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_parent'+set else cat > conftest.$ac_ext < int main() { @@ -2876,7 +2941,7 @@ struct task_struct _tsk; printf("%d\n", _tsk.parent); ; return 0; } EOF -if { (eval echo configure:2880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2945: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_sched_struct_task_struct_has_parent=yes else @@ -2892,7 +2957,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_parent" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for real_parent in struct task_struct""... $ac_c" 1>&6 -echo "configure:2896: checking for real_parent in struct task_struct" >&5 +echo "configure:2961: checking for real_parent in struct task_struct" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_real_parent'+set}'`\" = set"; then @@ -2900,7 +2965,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_real_parent else cat > conftest.$ac_ext < int main() { @@ -2908,7 +2973,7 @@ struct task_struct _tsk; printf("%d\n", _tsk.real_parent); ; return 0; } EOF -if { (eval echo configure:2912: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_sched_struct_task_struct_has_real_parent=yes else @@ -2924,7 +2989,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_real_parent" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for sig in struct task_struct""... $ac_c" 1>&6 -echo "configure:2928: checking for sig in struct task_struct" >&5 +echo "configure:2993: checking for sig in struct task_struct" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sig'+set}'`\" = set"; then @@ -2932,7 +2997,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sig'+set}'` else cat > conftest.$ac_ext < int main() { @@ -2940,7 +3005,7 @@ struct task_struct _tsk; printf("%d\n", _tsk.sig); ; return 0; } EOF -if { (eval echo configure:2944: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3009: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_sched_struct_task_struct_has_sig=yes else @@ -2956,7 +3021,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_sig" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for sighand in struct task_struct""... $ac_c" 1>&6 -echo "configure:2960: checking for sighand in struct task_struct" >&5 +echo "configure:3025: checking for sighand in struct task_struct" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sighand'+set}'`\" = set"; then @@ -2964,7 +3029,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sighand'+se else cat > conftest.$ac_ext < int main() { @@ -2972,7 +3037,7 @@ struct task_struct _tsk; printf("%d\n", _tsk.sighand); ; return 0; } EOF -if { (eval echo configure:2976: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3041: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_sched_struct_task_struct_has_sighand=yes else @@ -2988,7 +3053,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_sighand" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for sigmask_lock in struct task_struct""... $ac_c" 1>&6 -echo "configure:2992: checking for sigmask_lock in struct task_struct" >&5 +echo "configure:3057: checking for sigmask_lock in struct task_struct" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sigmask_lock'+set}'`\" = set"; then @@ -2996,7 +3061,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sigmask_loc else cat > conftest.$ac_ext < int main() { @@ -3004,7 +3069,7 @@ struct task_struct _tsk; printf("%d\n", _tsk.sigmask_lock); ; return 0; } EOF -if { (eval echo configure:3008: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_sched_struct_task_struct_has_sigmask_lock=yes else @@ -3025,13 +3090,13 @@ else save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -D__KERNEL__ $RHCONFIG_SP $CPPFLAGS" echo $ac_n "checking if kernel uses MODVERSIONS""... $ac_c" 1>&6 -echo "configure:3029: checking if kernel uses MODVERSIONS" >&5 +echo "configure:3094: checking if kernel uses MODVERSIONS" >&5 if eval "test \"`echo '$''{'ac_cv_linux_config_modversions'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3043,7 +3108,7 @@ lose; ; return 0; } EOF -if { (eval echo configure:3047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_config_modversions=yes else @@ -3057,7 +3122,7 @@ fi echo "$ac_t""$ac_cv_linux_config_modversions" 1>&6 echo $ac_n "checking which kernel modules to build""... $ac_c" 1>&6 -echo "configure:3061: checking which kernel modules to build" >&5 +echo "configure:3126: checking which kernel modules to build" >&5 if test "x$ac_linux_rhconfig" = "xyes" -o "x$ac_cv_linux_config_modversions" = "xno"; then MPS="MP SP" else @@ -3066,7 +3131,7 @@ echo "configure:3061: checking which kernel modules to build" >&5 else cat > conftest.$ac_ext < @@ -3077,7 +3142,7 @@ lose; ; return 0; } EOF -if { (eval echo configure:3081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3146: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_config_smp=yes else @@ -3109,7 +3174,7 @@ fi else echo $ac_n "checking for exported init_mm""... $ac_c" 1>&6 -echo "configure:3113: checking for exported init_mm" >&5 +echo "configure:3178: checking for exported init_mm" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_init_mm'+set}'`\" = set"; then @@ -3117,7 +3182,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_init_mm'+set}'`\" = set"; then else cat > conftest.$ac_ext < int main() { @@ -3126,7 +3191,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3130: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_init_mm=yes else @@ -3142,7 +3207,7 @@ echo "$ac_t""$ac_cv_linux_exports_init_mm" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported kallsyms_address_to_symbol""... $ac_c" 1>&6 -echo "configure:3146: checking for exported kallsyms_address_to_symbol" >&5 +echo "configure:3211: checking for exported kallsyms_address_to_symbol" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_address'+set}'`\" = set"; then @@ -3150,7 +3215,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_address'+set}'`\" = set else cat > conftest.$ac_ext < int main() { @@ -3159,7 +3224,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_kallsyms_address=yes else @@ -3175,7 +3240,7 @@ echo "$ac_t""$ac_cv_linux_exports_kallsyms_address" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported kallsyms_symbol_to_address""... $ac_c" 1>&6 -echo "configure:3179: checking for exported kallsyms_symbol_to_address" >&5 +echo "configure:3244: checking for exported kallsyms_symbol_to_address" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_symbol'+set}'`\" = set"; then @@ -3183,7 +3248,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_symbol'+set}'`\" = set" else cat > conftest.$ac_ext < int main() { @@ -3192,7 +3257,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3261: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_kallsyms_symbol=yes else @@ -3208,7 +3273,7 @@ echo "$ac_t""$ac_cv_linux_exports_kallsyms_symbol" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported sys_call_table""... $ac_c" 1>&6 -echo "configure:3212: checking for exported sys_call_table" >&5 +echo "configure:3277: checking for exported sys_call_table" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_call_table'+set}'`\" = set"; then @@ -3216,7 +3281,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_call_table'+set}'`\" = set"; else cat > conftest.$ac_ext < int main() { @@ -3225,7 +3290,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3294: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_sys_call_table=yes else @@ -3241,7 +3306,7 @@ echo "$ac_t""$ac_cv_linux_exports_sys_call_table" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported ia32_sys_call_table""... $ac_c" 1>&6 -echo "configure:3245: checking for exported ia32_sys_call_table" >&5 +echo "configure:3310: checking for exported ia32_sys_call_table" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_ia32_sys_call_table'+set}'`\" = set"; then @@ -3249,7 +3314,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_ia32_sys_call_table'+set}'`\" = else cat > conftest.$ac_ext < int main() { @@ -3258,7 +3323,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3262: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_ia32_sys_call_table=yes else @@ -3274,7 +3339,7 @@ echo "$ac_t""$ac_cv_linux_exports_ia32_sys_call_table" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported sys_chdir""... $ac_c" 1>&6 -echo "configure:3278: checking for exported sys_chdir" >&5 +echo "configure:3343: checking for exported sys_chdir" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_chdir'+set}'`\" = set"; then @@ -3282,7 +3347,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_chdir'+set}'`\" = set"; then else cat > conftest.$ac_ext < int main() { @@ -3291,7 +3356,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3360: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_sys_chdir=yes else @@ -3307,7 +3372,7 @@ echo "$ac_t""$ac_cv_linux_exports_sys_chdir" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported sys_close""... $ac_c" 1>&6 -echo "configure:3311: checking for exported sys_close" >&5 +echo "configure:3376: checking for exported sys_close" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_close'+set}'`\" = set"; then @@ -3315,7 +3380,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_close'+set}'`\" = set"; then else cat > conftest.$ac_ext < int main() { @@ -3324,7 +3389,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3328: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3393: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_sys_close=yes else @@ -3340,7 +3405,7 @@ echo "$ac_t""$ac_cv_linux_exports_sys_close" 1>&6 CPPFLAGS="$save_CPPFLAGS" echo $ac_n "checking for exported sys_wait4""... $ac_c" 1>&6 -echo "configure:3344: checking for exported sys_wait4" >&5 +echo "configure:3409: checking for exported sys_wait4" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_wait4'+set}'`\" = set"; then @@ -3348,7 +3413,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_wait4'+set}'`\" = set"; then else cat > conftest.$ac_ext < int main() { @@ -3357,7 +3422,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3426: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_exports_sys_wait4=yes else @@ -3486,6 +3551,12 @@ EOF if test "x$ac_cv_linux_fs_struct_inode_has_i_devices" = "xyes"; then cat >> confdefs.h <<\EOF #define STRUCT_INODE_HAS_I_DEVICES 1 +EOF + + fi + if test "x$ac_cv_linux_fs_struct_inode_has_i_security" = "xyes"; then + cat >> confdefs.h <<\EOF +#define STRUCT_INODE_HAS_I_SECURITY 1 EOF fi @@ -3498,6 +3569,12 @@ EOF if test "x$ac_cv_linux_func_recalc_sigpending_takes_void" = "xyes"; then cat >> confdefs.h <<\EOF #define RECALC_SIGPENDING_TAKES_VOID 1 +EOF + + fi + if test "x$ac_cv_linux_kernel_is_selinux" = "xyes" ; then + cat >> confdefs.h <<\EOF +#define LINUX_KERNEL_IS_SELINUX 1 EOF fi @@ -3545,13 +3622,13 @@ EOF echo "$ac_t""sun4" 1>&6 echo $ac_n "checking for vfs_dqrwlock in struct ufsvfs""... $ac_c" 1>&6 -echo "configure:3549: checking for vfs_dqrwlock in struct ufsvfs" >&5 +echo "configure:3626: checking for vfs_dqrwlock in struct ufsvfs" >&5 if eval "test \"`echo '$''{'ac_cv_solaris_ufsvfs_has_dqrwlock'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3560,7 +3637,7 @@ struct ufsvfs _ufsvfs; (void) _ufsvfs.vfs_dqrwlock; ; return 0; } EOF -if { (eval echo configure:3564: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3641: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_solaris_ufsvfs_has_dqrwlock=yes else @@ -3582,13 +3659,13 @@ fi echo $ac_n "checking for p_corefile in struct proc""... $ac_c" 1>&6 -echo "configure:3586: checking for p_corefile in struct proc" >&5 +echo "configure:3663: checking for p_corefile in struct proc" >&5 if eval "test \"`echo '$''{'ac_cv_solaris_proc_has_p_corefile'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -3597,7 +3674,7 @@ struct proc _proc; (void) _proc.p_corefile; ; return 0; } EOF -if { (eval echo configure:3601: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3678: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_solaris_proc_has_p_corefile=yes else @@ -3619,13 +3696,13 @@ fi echo $ac_n "checking for fs_rolled in struct proc""... $ac_c" 1>&6 -echo "configure:3623: checking for fs_rolled in struct proc" >&5 +echo "configure:3700: checking for fs_rolled in struct proc" >&5 if eval "test \"`echo '$''{'ac_cv_solaris_fs_has_fs_rolled'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { @@ -3633,7 +3710,7 @@ struct fs _fs; (void) _fs.fs_rolled; ; return 0; } EOF -if { (eval echo configure:3637: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3714: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_solaris_fs_has_fs_rolled=yes else @@ -3714,7 +3791,7 @@ if test "x$with_afs_sysname" != "x"; then AFS_SYSNAME="$with_afs_sysname" else echo $ac_n "checking your AFS sysname""... $ac_c" 1>&6 -echo "configure:3718: checking your AFS sysname" >&5 +echo "configure:3795: checking your AFS sysname" >&5 case $host in i?86-*-openbsd3.1) AFS_SYSNAME="i386_obsd31" @@ -3879,6 +3956,9 @@ echo "configure:3718: checking your AFS sysname" >&5 sparc-sun-solaris2.9) AFS_SYSNAME="sun4x_59" ;; + sparc-sun-solaris2.10) + AFS_SYSNAME="sun4x_510" + ;; sparc-sun-sunos4*) AFS_SYSNAME="sun4_413" enable_login="yes" @@ -3892,6 +3972,9 @@ echo "configure:3718: checking your AFS sysname" >&5 i386-pc-solaris2.9) AFS_SYSNAME="sunx86_59" ;; + i386-pc-solaris2.10) + AFS_SYSNAME="sunx86_510" + ;; alpha*-dec-osf4.0*) AFS_SYSNAME="alpha_dux40" ;; @@ -3964,7 +4047,7 @@ echo "configure:3718: checking your AFS sysname" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS" cat > conftest.$ac_ext < int main() { @@ -3973,7 +4056,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4060: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_linux_is_uml=yes else @@ -3991,21 +4074,6 @@ rm -f conftest* echo "$ac_t""$AFS_SYSNAME" 1>&6 fi -# KDUMP64 defaults to KDUMP for systems without a separate kdump64 -KDUMP64='${KDUMP}' -KDUMP=kdump -case $AFS_SYSNAME in - sgi_6?) - KDUMP=kdump.IP20;; - sun4x_5[789] | hp_ux11*) - KDUMP=kdump32 - KDUMP64=kdump64;; - *linux*) - KDUMP='kdump-${LINUX_VERSION}';; -esac - - - case $AFS_SYSNAME in *_darwin*) DARWIN_PLIST=src/libafs/afs.${AFS_SYSNAME}.plist @@ -4018,14 +4086,14 @@ EOF ;; *) echo $ac_n "checking for definition of struct buf""... $ac_c" 1>&6 -echo "configure:4022: checking for definition of struct buf" >&5 +echo "configure:4090: checking for definition of struct buf" >&5 if eval "test \"`echo '$''{'ac_cv_have_struct_buf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_have_struct_buf=no cat > conftest.$ac_ext < int main() { @@ -4033,7 +4101,7 @@ struct buf x; printf("%d\n", sizeof(x)); ; return 0; } EOF -if { (eval echo configure:4037: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4105: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_have_struct_buf=yes else @@ -4061,9 +4129,9 @@ if eval "test \"`echo '$''{'ac_cv_sockaddr_len'+set}'`\" = set"; then else echo $ac_n "checking if struct sockaddr has sa_len field""... $ac_c" 1>&6 -echo "configure:4065: checking if struct sockaddr has sa_len field" >&5 +echo "configure:4133: checking if struct sockaddr has sa_len field" >&5 cat > conftest.$ac_ext < #include @@ -4072,7 +4140,7 @@ struct sockaddr *a; a->sa_len=0; ; return 0; } EOF -if { (eval echo configure:4076: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4144: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sockaddr_len=yes else @@ -4097,12 +4165,12 @@ else for ac_func in socket do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4101: checking for $ac_func" >&5 +echo "configure:4169: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4154,7 +4222,7 @@ done for lib in socket inet; do if test "$HAVE_SOCKET" != 1; then echo $ac_n "checking for socket in -l${lib}""... $ac_c" 1>&6 -echo "configure:4158: checking for socket in -l${lib}" >&5 +echo "configure:4226: checking for socket in -l${lib}" >&5 ac_lib_var=`echo ${lib}'_'socket | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4162,7 +4230,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${lib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4203,12 +4271,12 @@ fi for ac_func in connect do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4207: checking for $ac_func" >&5 +echo "configure:4275: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4260,7 +4328,7 @@ done for lib in nsl; do if test "$HAVE_CONNECT" != 1; then echo $ac_n "checking for connect in -l${lib}""... $ac_c" 1>&6 -echo "configure:4264: checking for connect in -l${lib}" >&5 +echo "configure:4332: checking for connect in -l${lib}" >&5 ac_lib_var=`echo ${lib}'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4268,7 +4336,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${lib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4309,12 +4377,12 @@ fi for ac_func in gethostbyname do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4313: checking for $ac_func" >&5 +echo "configure:4381: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4365,7 +4433,7 @@ done for lib in dns nsl resolv; do if test "$HAVE_GETHOSTBYNAME" != 1; then echo $ac_n "checking for gethostbyname in -l${lib}""... $ac_c" 1>&6 -echo "configure:4369: checking for gethostbyname in -l${lib}" >&5 +echo "configure:4437: checking for gethostbyname in -l${lib}" >&5 ac_lib_var=`echo ${lib}'_'gethostbyname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4373,7 +4441,7 @@ else ac_save_LIBS="$LIBS" LIBS="-l${lib} $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4412,9 +4480,9 @@ fi fi echo $ac_n "checking for the useability of arpa/nameser_compat.h""... $ac_c" 1>&6 -echo "configure:4416: checking for the useability of arpa/nameser_compat.h" >&5 +echo "configure:4484: checking for the useability of arpa/nameser_compat.h" >&5 cat > conftest.$ac_ext < @@ -4431,7 +4499,7 @@ int main() { static int i; i = 0; ; return 0; } EOF -if { (eval echo configure:4435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF @@ -4449,11 +4517,11 @@ rm -f conftest* openafs_save_libs="$LIBS" echo $ac_n "checking for res_search""... $ac_c" 1>&6 -echo "configure:4453: checking for res_search" >&5 +echo "configure:4521: checking for res_search" >&5 ac_cv_func_res_search=no cat > conftest.$ac_ext < @@ -4477,7 +4545,7 @@ return 0; ; return 0; } EOF -if { (eval echo configure:4481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_res_search=yes else @@ -4494,7 +4562,7 @@ rm -f conftest* ac_cv_func_res_search=no cat > conftest.$ac_ext < @@ -4518,7 +4586,7 @@ return 0; ; return 0; } EOF -if { (eval echo configure:4522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_res_search=yes else @@ -4552,7 +4620,7 @@ fi PTHREAD_LIBS=error echo $ac_n "checking for pthread_attr_init in -lpthread""... $ac_c" 1>&6 -echo "configure:4556: checking for pthread_attr_init in -lpthread" >&5 +echo "configure:4624: checking for pthread_attr_init in -lpthread" >&5 ac_lib_var=`echo pthread'_'pthread_attr_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4560,7 +4628,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpthread $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4593,7 +4661,7 @@ fi if test "x$PTHREAD_LIBS" = xerror; then echo $ac_n "checking for pthread_attr_init in -lpthreads""... $ac_c" 1>&6 -echo "configure:4597: checking for pthread_attr_init in -lpthreads" >&5 +echo "configure:4665: checking for pthread_attr_init in -lpthreads" >&5 ac_lib_var=`echo pthreads'_'pthread_attr_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4601,7 +4669,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpthreads $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4635,7 +4703,7 @@ fi fi if test "x$PTHREAD_LIBS" = xerror; then echo $ac_n "checking for pthread_attr_init in -lc_r""... $ac_c" 1>&6 -echo "configure:4639: checking for pthread_attr_init in -lc_r" >&5 +echo "configure:4707: checking for pthread_attr_init in -lc_r" >&5 ac_lib_var=`echo c_r'_'pthread_attr_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4643,7 +4711,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lc_r $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4677,12 +4745,12 @@ fi fi if test "x$PTHREAD_LIBS" = xerror; then echo $ac_n "checking for pthread_attr_init""... $ac_c" 1>&6 -echo "configure:4681: checking for pthread_attr_init" >&5 +echo "configure:4749: checking for pthread_attr_init" >&5 if eval "test \"`echo '$''{'ac_cv_func_pthread_attr_init'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_pthread_attr_init=yes" else @@ -4825,7 +4893,7 @@ EOF fi echo $ac_n "checking for tivoli tsm butc support""... $ac_c" 1>&6 -echo "configure:4829: checking for tivoli tsm butc support" >&5 +echo "configure:4897: checking for tivoli tsm butc support" >&5 XBSA_CFLAGS="" if test "$enable_tivoli_tsm" = "yes"; then XBSADIR1=/usr/tivoli/tsm/client/api/bin/xopen @@ -4846,12 +4914,12 @@ fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:4850: checking for ANSI C header files" >&5 +echo "configure:4918: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -4859,7 +4927,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4863: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4931: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4876,7 +4944,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -4894,7 +4962,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -4915,7 +4983,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -4926,7 +4994,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:4930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -4950,12 +5018,12 @@ EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:4954: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo "configure:5022: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -4971,7 +5039,7 @@ wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF -if { (eval echo configure:4975: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:5043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else @@ -4996,12 +5064,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:5000: checking for $ac_hdr that defines DIR" >&5 +echo "configure:5068: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -5009,7 +5077,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:5013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:5081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -5034,7 +5102,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:5038: checking for opendir in -ldir" >&5 +echo "configure:5106: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5042,7 +5110,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5125: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5075,7 +5143,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:5079: checking for opendir in -lx" >&5 +echo "configure:5147: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5083,7 +5151,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5120,17 +5188,17 @@ for ac_hdr in stdlib.h string.h unistd.h fcntl.h sys/time.h sys/file.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5124: checking for $ac_hdr" >&5 +echo "configure:5192: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5134: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5202: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5160,17 +5228,17 @@ for ac_hdr in netinet/in.h netdb.h sys/fcntl.h sys/mnttab.h sys/mntent.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5164: checking for $ac_hdr" >&5 +echo "configure:5232: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5174: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5242: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5200,17 +5268,17 @@ for ac_hdr in mntent.h sys/vfs.h sys/param.h sys/fs_types.h sys/fstyp.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5204: checking for $ac_hdr" >&5 +echo "configure:5272: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5214: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5282: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5240,17 +5308,17 @@ for ac_hdr in sys/mount.h strings.h termios.h signal.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5244: checking for $ac_hdr" >&5 +echo "configure:5312: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5254: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5322: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5280,17 +5348,17 @@ for ac_hdr in windows.h malloc.h winsock2.h direct.h io.h sys/user.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5284: checking for $ac_hdr" >&5 +echo "configure:5352: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5294: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5362: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5320,17 +5388,17 @@ for ac_hdr in security/pam_modules.h siad.h usersec.h ucontext.h regex.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5324: checking for $ac_hdr" >&5 +echo "configure:5392: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5334: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5402: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5374,12 +5442,12 @@ fi for ac_func in utimes random srandom getdtablesize snprintf strlcat strlcpy re_comp re_exec do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5378: checking for $ac_func" >&5 +echo "configure:5446: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5429,12 +5497,12 @@ done for ac_func in setprogname getprogname sigaction mkstemp vsnprintf strerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5433: checking for $ac_func" >&5 +echo "configure:5501: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5485,12 +5553,12 @@ done for ac_func in regcomp regexec regerror do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5489: checking for $ac_func" >&5 +echo "configure:5557: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5585: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5538,7 +5606,7 @@ fi done echo $ac_n "checking for POSIX regex library""... $ac_c" 1>&6 -echo "configure:5542: checking for POSIX regex library" >&5 +echo "configure:5610: checking for POSIX regex library" >&5 if test "$ac_cv_header_regex_h" = "yes" && \ test "$ac_cv_func_regcomp" = "yes" && \ test "$ac_cv_func_regexec" = "yes" && \ @@ -5553,12 +5621,12 @@ else fi echo $ac_n "checking for ssize_t""... $ac_c" 1>&6 -echo "configure:5557: checking for ssize_t" >&5 +echo "configure:5625: checking for ssize_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -5586,7 +5654,7 @@ EOF fi echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:5590: checking size of long" >&5 +echo "configure:5658: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5594,7 +5662,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() @@ -5605,7 +5673,7 @@ main() exit(0); } EOF -if { (eval echo configure:5609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:5677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -5628,12 +5696,12 @@ EOF for ac_func in timegm do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:5632: checking for $ac_func" >&5 +echo "configure:5700: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -5760,7 +5828,7 @@ LWP_OPTMZ=-O # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5764: checking for $ac_word" >&5 +echo "configure:5832: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5792,7 +5860,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5796: checking for $ac_word" >&5 +echo "configure:5864: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5827,7 +5895,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5831: checking for $ac_word" >&5 +echo "configure:5899: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5862,7 +5930,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5866: checking for $ac_word" >&5 +echo "configure:5934: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MV'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5897,7 +5965,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5901: checking for $ac_word" >&5 +echo "configure:5969: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5932,7 +6000,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5936: checking for $ac_word" >&5 +echo "configure:6004: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5967,7 +6035,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5971: checking for $ac_word" >&5 +echo "configure:6039: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6002,7 +6070,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6006: checking for $ac_word" >&5 +echo "configure:6074: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6037,7 +6105,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:6041: checking for $ac_word" >&5 +echo "configure:6109: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LORDER'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -6290,22 +6358,6 @@ case $AFS_SYSNAME in SHLIB_LINKER="${MT_CC} -shared" ;; - i386_linux22) - CC="gcc -pipe" - CCOBJ="gcc -pipe" - MT_CC="gcc -pipe" - KERN_OPTMZ=-O2 - LEX="flex -l" - MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}' - MT_LIBS="-lpthread" - PAM_CFLAGS="-O2 -Dlinux -DLINUX_PAM -fPIC" - SHLIB_LDFLAGS="-shared -Xlinker -x" - TXLIBS="-lncurses" - XCFLAGS="-O2 -D_LARGEFILE64_SOURCE" - YACC="bison -y" - SHLIB_LINKER="${MT_CC} -shared" - ;; - i386_umlinux22) CC="gcc -pipe" CCOBJ="gcc -pipe" @@ -6322,7 +6374,7 @@ case $AFS_SYSNAME in SHLIB_LINKER="${MT_CC} -shared" ;; - i386_linux24) + i386_linux*) CC="gcc -pipe" CCOBJ="gcc -pipe" MT_CC="gcc -pipe" @@ -6738,7 +6790,7 @@ case $AFS_SYSNAME in SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" ;; - sunx86_57) + sun4x_510) CC="/opt/SUNWspro/bin/cc" CCOBJ="/opt/SUNWspro/bin/cc" LEX="lex" @@ -6759,6 +6811,26 @@ case $AFS_SYSNAME in SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" ;; + sunx86_57) + CC="/opt/SUNWspro/bin/cc" + CCOBJ="/opt/SUNWspro/bin/cc" + LEX="lex" + LD="/usr/ccs/bin/ld" + MT_CC="/opt/SUNWspro/bin/cc" + MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}' + MT_LIBS="-lpthread -lsocket" + PAM_CFLAGS="-KPIC" + PAM_LIBS="-lc -lpam -lsocket -lnsl -lm" + SHLIB_CFLAGS="-KPIC" + SHLIB_LDFLAGS="-G -Bsymbolic" + TXLIBS="-lcurses" + XCFLAGS64='${XCFLAGS} -xarch=v9' + XCFLAGS="-dy -Bdynamic" + XLIBELFA="-lelf" + XLIBKVM="-lkvm" + XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl" + SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" + ;; sunx86_58) CC="/opt/SUNWspro/bin/cc" @@ -6781,7 +6853,26 @@ case $AFS_SYSNAME in SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" ;; - + sunx86_510) + CC="/opt/SUNWspro/bin/cc" + CCOBJ="/opt/SUNWspro/bin/cc" + LEX="lex" + LD="/usr/ccs/bin/ld" + MT_CC="/opt/SUNWspro/bin/cc" + MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}' + MT_LIBS="-lpthread -lsocket" + PAM_CFLAGS="-KPIC" + PAM_LIBS="-lc -lpam -lsocket -lnsl -lm" + SHLIB_CFLAGS="-KPIC" + SHLIB_LDFLAGS="-G -Bsymbolic" + TXLIBS="-lcurses" + XCFLAGS64='${XCFLAGS} -xarch=v9' + XCFLAGS="-dy -Bdynamic" + XLIBELFA="-lelf" + XLIBKVM="-lkvm" + XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl" + SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" + ;; esac # @@ -6791,7 +6882,7 @@ case $AFS_SYSNAME in sgi_6*) echo $ac_n "checking for mem* in sys/systm.h""... $ac_c" 1>&6 -echo "configure:6795: checking for mem* in sys/systm.h" >&5 +echo "configure:6886: checking for mem* in sys/systm.h" >&5 save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_KERNEL -D__STRING_H__" if eval "test \"`echo '$''{'ac_cv_irix_sys_systm_h_has_mem_funcs'+set}'`\" = set"; then @@ -6799,7 +6890,7 @@ if eval "test \"`echo '$''{'ac_cv_irix_sys_systm_h_has_mem_funcs'+set}'`\" = set else cat > conftest.$ac_ext < #include @@ -6809,7 +6900,7 @@ extern void *memcpy(char *, const void *, size_t); ; return 0; } EOF -if { (eval echo configure:6813: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:6904: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_irix_sys_systm_h_has_mem_funcs=no else @@ -7121,8 +7212,6 @@ s%@RHCONFIG_SP@%$RHCONFIG_SP%g s%@RHCONFIG_MP@%$RHCONFIG_MP%g s%@MPS@%$MPS%g s%@HEADER_RT@%$HEADER_RT%g -s%@KDUMP@%$KDUMP%g -s%@KDUMP64@%$KDUMP64%g s%@PTHREAD_LIBS@%$PTHREAD_LIBS%g s%@XBSA_CFLAGS@%$XBSA_CFLAGS%g s%@HAVE_PAM@%$HAVE_PAM%g diff --git a/configure-libafs.in b/configure-libafs.in index f9fa0faca..e077c68e3 100644 --- a/configure-libafs.in +++ b/configure-libafs.in @@ -1,5 +1,5 @@ AC_INIT(src/libafs/Makefile.common.in) -AM_INIT_AUTOMAKE(openafs-libafs,devel) +AM_INIT_AUTOMAKE(openafs-libafs,1.3.65) AC_CONFIG_HEADER(src/config/afsconfig.h) define(OPENAFS_CONFIGURE_LIBAFS) diff --git a/configure.in b/configure.in index 76956d14d..e8c412a58 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ AC_INIT(src/config/stds.h) -AM_INIT_AUTOMAKE(openafs,devel) +AM_INIT_AUTOMAKE(openafs,1.3.65) AC_CONFIG_HEADER(src/config/afsconfig.h) AC_PROG_CC diff --git a/src/NTMakefile b/src/NTMakefile index 361efd6b7..5b4da7954 100644 --- a/src/NTMakefile +++ b/src/NTMakefile @@ -22,7 +22,9 @@ SRC=$(AFSROOT)\src !IFNDEF AFS_OBJDIR AFS_OBJDIR=$(AFSROOT)\obj !ENDIF +!IFNDEF DESTDIR DESTDIR=$(AFSROOT)\dest +!ENDIF CD = cd NTMAKE = nmake /nologo /f ntmakefile install @@ -195,7 +197,14 @@ cm_headers: libacl_headers $(NTMAKE_HEADERS) $(CD) ..\..\.. -afsdobjs: cm_headers +auth_headers: cm_headers + echo ***** $@ + $(DOCD) $(SRC)\auth + $(CD) $(SRC)\auth + $(NTMAKE_HEADERS) + $(CD) ..\.. + +afsdobjs: auth_headers echo ***** $@ $(DOCD) $(SRC)\WINNT\afsd $(CD) $(SRC)\WINNT\afsd @@ -214,7 +223,7 @@ auth: sys $(DOCD) $(SRC)\$@ $(CD) $(SRC)\$@ $(NTMAKE) - $(CD) ..\.. + $(CD) ..\.. ubik: auth echo ***** $@ @@ -592,19 +601,26 @@ mkdir: -mkdir $(DESTDIR)\free\bin -@copy $(SRC)\config\NTLANG.BAT . -NSIS: +loopback: + echo ***** Making Loopback Adapter Utility DLL + $(DOCD) $(SRC)\WINNT\install\$@ + $(CD) $(SRC)\WINNT\install\$@ + $(NTMAKE) + $(CD) ..\..\..\.. + +NSIS: loopback echo ***** Making NSIS Installer $(DOCD) $(SRC)\WINNT\install\$@ $(CD) $(SRC)\WINNT\install\$@ $(NTMAKE) $(CD) ..\..\..\.. -#msi: -# echo ***** Making MSI Installer -# $(DOCD) $(SRC)\WINNT\install\$@ -# $(CD) $(SRC)\WINNT\install\$@ -# $(NTMAKE) -# $(CD) ..\..\..\.. +wix: loopback + echo ***** Making Wix MSI Installer + $(DOCD) $(SRC)\WINNT\install\$@ + $(CD) $(SRC)\WINNT\install\$@ + $(NTMAKE) + $(CD) ..\..\..\.. InstallShield5: echo ***** afs_setup_utils @@ -618,11 +634,11 @@ InstallShield5: $(NTMAKE) $(CD) ..\..\..\.. -media: install InstallShield5 NSIS +media: install InstallShield5 NSIS wix install-nsis: install NSIS -install-msi: install msi +install-wix: install wix install-is5: install InstallShield5 diff --git a/src/WINNT/afsd/NTMakefile b/src/WINNT/afsd/NTMakefile index a99b91f14..76a9690a5 100644 --- a/src/WINNT/afsd/NTMakefile +++ b/src/WINNT/afsd/NTMakefile @@ -326,7 +326,8 @@ AFSD_SDKLIBS =\ dnsapi.lib \ rpcrt4.lib \ user32.lib \ - Dbghelp.lib + Dbghelp.lib \ + strsafe.lib AFSD_EXELIBS =\ $(DESTDIR)\lib\libosi.lib \ diff --git a/src/WINNT/afsd/afsd_flushvol.c b/src/WINNT/afsd/afsd_flushvol.c index 83267fa5c..32ab70025 100644 --- a/src/WINNT/afsd/afsd_flushvol.c +++ b/src/WINNT/afsd/afsd_flushvol.c @@ -16,6 +16,7 @@ #include "afsd.h" #include "afsd_init.h" #include "smb.h" +#include "cm_conn.h" #include #include #include @@ -466,11 +467,11 @@ PowerNotificationThreadNotify() DWORD dwRet = 0; BOOL bRet = FALSE; - // Notify thread of power event, and wait 19 seconds + // Notify thread of power event, and wait for the HardDead timeout period dwRet = SignalObjectAndWait( gThreadInfo.hEventPowerEvent, // object to signal gThreadInfo.hEventResumeMain, // object to watch - 19*1000, // timeout (ms) + HardDeadtimeout*1000, // timeout (ms) FALSE // alertable ); diff --git a/src/WINNT/afsd/afsd_init.c b/src/WINNT/afsd/afsd_init.c index 8f428fe17..5da8aceba 100644 --- a/src/WINNT/afsd/afsd_init.c +++ b/src/WINNT/afsd/afsd_init.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include "afsd.h" @@ -78,6 +79,10 @@ BOOL reportSessionStartups = FALSE; cm_initparams_v1 cm_initParams; +char *cm_sysName = 0; +int cm_sysNameCount = 0; +char *cm_sysNameList[MAXNUMSYSNAMES]; + /* * AFSD Initialization Log * @@ -111,21 +116,21 @@ afsi_start() afsi_file = INVALID_HANDLE_VALUE; if (getenv("TEMP")) { - strcpy(wd, getenv("TEMP")); + StringCbCopyA(wd, sizeof(wd), getenv("TEMP")); } else { code = GetWindowsDirectory(wd, sizeof(wd)); if (code == 0) return; } - strcat(wd, "\\afsd_init.log"); + StringCbCatA(wd, sizeof(wd), "\\afsd_init.log"); GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, NULL, t, sizeof(t)); afsi_file = CreateFile(wd, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_FLAG_WRITE_THROUGH, NULL); SetFilePointer(afsi_file, 0, NULL, FILE_END); GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, NULL, u, sizeof(u)); - strcat(t, ": Create log file\n"); - strcat(u, ": Created log file\n"); + StringCbCatA(t, sizeof(t), ": Create log file\n"); + StringCbCatA(u, sizeof(u), ": Created log file\n"); WriteFile(afsi_file, t, strlen(t), &zilch, NULL); WriteFile(afsi_file, u, strlen(u), &zilch, NULL); p = "PATH="; @@ -140,16 +145,16 @@ static int afsi_log_useTimestamp = 1; void afsi_log(char *pattern, ...) { - char s[100], t[100], d[100], u[300]; + char s[256], t[100], d[100], u[512]; int zilch; va_list ap; va_start(ap, pattern); - vsprintf(s, pattern, ap); + StringCbVPrintfA(s, sizeof(s), pattern, ap); if ( afsi_log_useTimestamp ) { GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, NULL, t, sizeof(t)); GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, NULL, d, sizeof(d)); - sprintf(u, "%s %s: %s\n", d, t, s); + StringCbPrintfA(u, sizeof(u), "%s %s: %s\n", d, t, s); if (afsi_file != INVALID_HANDLE_VALUE) WriteFile(afsi_file, u, strlen(u), &zilch, NULL); #ifdef NOTSERVICE @@ -175,7 +180,7 @@ void afsd_ForceTrace(BOOL flush) return; len = GetTempPath(sizeof(buf)-10, buf); - strcpy(&buf[len], "/afsd.log"); + StringCbCopyA(&buf[len], sizeof(buf)-len, "/afsd.log"); handle = CreateFile(buf, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (handle == INVALID_HANDLE_VALUE) { @@ -214,6 +219,7 @@ int afsd_InitCM(char **reasonP) /*int freelanceEnabled;*/ WSADATA WSAjunk; lana_number_t lanaNum; + int i; WSAStartup(0x0101, &WSAjunk); @@ -246,7 +252,7 @@ int afsd_InitCM(char **reasonP) FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, code, 0, (LPTSTR)&msgBuf, 0, NULL); - sprintf(buf, + StringCbPrintfA(buf, sizeof(buf), "Failure in configuration while opening Registry: %s", msgBuf); osi_panic(buf, __FILE__, __LINE__); @@ -360,7 +366,7 @@ int afsd_InitCM(char **reasonP) if (code == ERROR_SUCCESS) afsi_log("Root volume %s", cm_rootVolumeName); else { - strcpy(cm_rootVolumeName, "root.afs"); + StringCbCopyA(cm_rootVolumeName, sizeof(cm_rootVolumeName), "root.afs"); afsi_log("Default root volume name root.afs"); } @@ -371,7 +377,7 @@ int afsd_InitCM(char **reasonP) afsi_log("Mount root %s", cm_mountRoot); cm_mountRootLen = strlen(cm_mountRoot); } else { - strcpy(cm_mountRoot, "/afs"); + StringCbCopyA(cm_mountRoot, sizeof(cm_mountRoot), "/afs"); cm_mountRootLen = 4; /* Don't log */ } @@ -384,7 +390,7 @@ int afsd_InitCM(char **reasonP) else { GetWindowsDirectory(cm_CachePath, sizeof(cm_CachePath)); cm_CachePath[2] = 0; /* get drive letter only */ - strcat(cm_CachePath, "\\AFSCache"); + StringCbCatA(cm_CachePath, sizeof(cm_CachePath), "\\AFSCache"); afsi_log("Default cache path %s", cm_CachePath); } @@ -410,15 +416,22 @@ int afsd_InitCM(char **reasonP) /* Don't log */ } - dummyLen = sizeof(cm_sysName); + for ( i=0; i < MAXNUMSYSNAMES; i++ ) { + cm_sysNameList[i] = osi_Alloc(MAXSYSNAME); + cm_sysNameList[i][0] = '\0'; + } + cm_sysName = cm_sysNameList[0]; + + dummyLen = MAXSYSNAME; code = RegQueryValueEx(parmKey, "SysName", NULL, NULL, cm_sysName, &dummyLen); if (code == ERROR_SUCCESS) afsi_log("Sys name %s", cm_sysName); else { - strcat(cm_sysName, "i386_nt40"); + StringCbCopyA(cm_sysName, MAXSYSNAME, "i386_nt40"); afsi_log("Default sys name %s", cm_sysName); } + cm_sysNameCount = 1; dummyLen = sizeof(cryptall); code = RegQueryValueEx(parmKey, "SecurityLevel", NULL, NULL, @@ -518,6 +531,16 @@ int afsd_InitCM(char **reasonP) if(rx_mtu != -1) afsi_log("RX maximum MTU is %d", rx_mtu); + dummyLen = sizeof(ConnDeadtimeout); + code = RegQueryValueEx(parmKey, "ConnDeadTimeout", NULL, NULL, + (BYTE *) &ConnDeadtimeout, &dummyLen); + afsi_log("ConnDeadTimeout is %d", ConnDeadtimeout); + + dummyLen = sizeof(HardDeadtimeout); + code = RegQueryValueEx(parmKey, "HardDeadTimeout", NULL, NULL, + (BYTE *) &HardDeadtimeout, &dummyLen); + afsi_log("HardDeadTimeout is %d", HardDeadtimeout); + RegCloseKey (parmKey); /* Call lanahelper to get Netbios name, lan adapter number and gateway flag */ @@ -535,7 +558,7 @@ int afsd_InitCM(char **reasonP) afsi_log("Using >%s< as SMB server name", cm_NetbiosName); } else { /* something went horribly wrong. We can't proceed without a netbios name */ - sprintf(buf,"Netbios name could not be determined: %li", code); + StringCbPrintfA(buf,sizeof(buf),"Netbios name could not be determined: %li", code); osi_panic(buf, __FILE__, __LINE__); } @@ -669,7 +692,7 @@ int afsd_InitCM(char **reasonP) } #ifdef AFS_AFSDB_ENV -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x500 +#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500) if (cm_InitDNS(cm_dnsEnabled) == -1) cm_dnsEnabled = 0; /* init failed, so deactivate */ afsi_log("cm_InitDNS %d", cm_dnsEnabled); @@ -716,6 +739,7 @@ int afsd_InitDaemons(char **reasonP) /* this should really be in an init daemon from here on down */ if (!cm_freelanceEnabled) { + osi_Log0(afsd_logp, "Loading Root Volume from cell"); code = cm_GetVolumeByName(cm_rootCellp, cm_rootVolumeName, cm_rootUserp, &req, CM_FLAG_CREATE, &cm_rootVolumep); afsi_log("cm_GetVolumeByName code %x root vol %x", code, diff --git a/src/WINNT/afsd/afsd_service.c b/src/WINNT/afsd/afsd_service.c index 4291b1c11..09719c8fc 100644 --- a/src/WINNT/afsd/afsd_service.c +++ b/src/WINNT/afsd/afsd_service.c @@ -307,6 +307,7 @@ afsd_ServiceControlHandlerEx( * Mount a drive into AFS if there global mapping */ /* DEE Could check first if we are run as SYSTEM */ +#define MAX_RETRIES 30 static void MountGlobalDrives() { char szAfsPath[_MAX_PATH]; @@ -314,7 +315,7 @@ static void MountGlobalDrives() DWORD dwResult; char szKeyName[256]; HKEY hKey; - DWORD dwIndex = 0; + DWORD dwIndex = 0, dwRetry = 0; DWORD dwDriveSize; DWORD dwSubMountSize; char szSubMount[256]; @@ -326,7 +327,7 @@ static void MountGlobalDrives() if (dwResult != ERROR_SUCCESS) return; - while (1) { + while (dwRetry < MAX_RETRIES) { dwDriveSize = sizeof(szDriveToMapTo); dwSubMountSize = sizeof(szSubMount); dwResult = RegEnumValue(hKey, dwIndex++, szDriveToMapTo, &dwDriveSize, 0, &dwType, szSubMount, &dwSubMountSize); @@ -338,6 +339,7 @@ static void MountGlobalDrives() } } + for ( ; dwRetry < MAX_RETRIES; dwRetry++) { NETRESOURCE nr; memset (&nr, 0x00, sizeof(NETRESOURCE)); @@ -352,8 +354,14 @@ static void MountGlobalDrives() nr.dwUsage = RESOURCEUSAGE_CONNECTABLE; dwResult = WNetAddConnection2(&nr,NULL,NULL,FALSE); - } - afsi_log("GlobalAutoMap of %s to %s %s", szDriveToMapTo, szSubMount, dwResult ? "succeeded" : "failed"); + afsi_log("GlobalAutoMap of %s to %s %s (%d)", szDriveToMapTo, szSubMount, + (dwResult == NO_ERROR) ? "succeeded" : "failed", dwResult); + if (dwResult == NO_ERROR) { + break; + } + /* wait for smb server to come up */ + Sleep((DWORD)1000 /* miliseconds */); + } } RegCloseKey(hKey); diff --git a/src/WINNT/afsd/afskfw-int.h b/src/WINNT/afsd/afskfw-int.h index 329b83689..5f96120f8 100644 --- a/src/WINNT/afsd/afskfw-int.h +++ b/src/WINNT/afsd/afskfw-int.h @@ -91,7 +91,6 @@ typedef afs_int32 errcode_t; #include #include #include -#include #include // service definitions diff --git a/src/WINNT/afsd/afskfw.c b/src/WINNT/afsd/afskfw.c index d03dc24f7..89d085b48 100644 --- a/src/WINNT/afsd/afskfw.c +++ b/src/WINNT/afsd/afskfw.c @@ -199,16 +199,6 @@ DECL_FUNC_PTR(LsaFreeReturnBuffer); DECL_FUNC_PTR(LsaGetLogonSessionData); #endif /* USE_MS2MIT */ -// AFS36 Token Functions -DECL_FUNC_PTR(ktc_ListTokens); -DECL_FUNC_PTR(ktc_GetToken); -DECL_FUNC_PTR(ktc_SetToken); -DECL_FUNC_PTR(ktc_ForgetAllTokens); - -// AFS36 Config Functions -DECL_FUNC_PTR(cm_SearchCellFile); -DECL_FUNC_PTR(cm_GetRootCellName); - // CCAPI FUNC_INFO ccapi_fi[] = { MAKE_FUNC_INFO(cc_initialize), @@ -349,22 +339,8 @@ FUNC_INFO lsa_fi[] = { }; #endif /* USE_MS2MIT */ -FUNC_INFO afst_fi[] = { - MAKE_FUNC_INFO(ktc_ListTokens), - MAKE_FUNC_INFO(ktc_GetToken), - MAKE_FUNC_INFO(ktc_SetToken), - MAKE_FUNC_INFO(ktc_ForgetAllTokens), - END_FUNC_INFO -}; - -FUNC_INFO afsc_fi[] = { - MAKE_FUNC_INFO(cm_SearchCellFile), - MAKE_FUNC_INFO(cm_GetRootCellName), - END_FUNC_INFO -}; - /* Static Prototypes */ -char *afs_realm_of_cell(struct afsconf_cell *); +char *afs_realm_of_cell(krb5_context, struct afsconf_cell *); static long get_cellconfig_callback(void *, struct sockaddr_in *, char *); int KFW_AFS_get_cellconfig(char *, struct afsconf_cell *, char *); static krb5_error_code KRB5_CALLCONV KRB5_prompter( krb5_context context, @@ -383,8 +359,6 @@ static HINSTANCE hKrb524 = 0; static HINSTANCE hSecur32 = 0; #endif /* USE_MS2MIT */ static HINSTANCE hAdvApi32 = 0; -static HINSTANCE hAfsTokens = 0; -static HINSTANCE hAfsConf = 0; static HINSTANCE hComErr = 0; static HINSTANCE hService = 0; static HINSTANCE hProfile = 0; @@ -421,8 +395,6 @@ KFW_initialize(void) #endif /* USE_MS2MIT */ LoadFuncs(KRB524_DLL, k524_fi, &hKrb524, 0, 1, 1, 1); LoadFuncs(PROFILE_DLL, profile_fi, &hProfile, 0, 1, 0, 0); - LoadFuncs(AFSTOKENS_DLL, afst_fi, &hAfsTokens, 0, 1, 0, 0); - LoadFuncs(AFSCONF_DLL, afsc_fi, &hAfsConf, 0, 1, 0, 0); LoadFuncs(LEASH_DLL, leash_fi, &hLeash, 0, 1, 0, 0); LoadFuncs(CCAPI_DLL, ccapi_fi, &hCCAPI, 0, 1, 0, 0); @@ -435,7 +407,7 @@ KFW_initialize(void) KFW_AFS_renew_expiring_tokens(); /* WIN32 NOTE: no way to get max chars */ - if (!pcm_GetRootCellName(rootcell)) + if (!cm_GetRootCellName(rootcell)) KFW_AFS_renew_token_for_cell(rootcell); } } @@ -453,10 +425,6 @@ KFW_cleanup(void) FreeLibrary(hKrb4); if (hProfile) FreeLibrary(hProfile); - if (hAfsTokens) - FreeLibrary(hAfsTokens); - if (hAfsConf) - FreeLibrary(hAfsConf); if (hComErr) FreeLibrary(hComErr); if (hService) @@ -506,7 +474,7 @@ KFW_is_available(void) hSecur32 && #endif /* USE_MS2MIT */ hKrb524 && - hProfile && hAfsTokens && hAfsConf && hLeash && hCCAPI ) + hProfile && hLeash && hCCAPI ) return TRUE; return FALSE; } @@ -892,9 +860,9 @@ KFW_import_windows_lsa(void) krb5_ccache cc = 0; krb5_principal princ = 0; char * pname = NULL; - krb5_data * realm; + krb5_data * princ_realm; krb5_error_code code; - char cell[128]=""; + char cell[128]="", realm[128]=""; int i; if (!pkrb5_init_context) @@ -919,13 +887,15 @@ KFW_import_windows_lsa(void) code = pkrb5_unparse_name(ctx,princ,&pname); if ( code ) goto cleanup; - realm = krb5_princ_realm(ctx, princ); - for ( i=0; ilength; i++ ) { - cell[i] = tolower(realm->data[i]); + princ_realm = krb5_princ_realm(ctx, princ); + for ( i=0; ilength; i++ ) { + realm[i] = princ_realm->data[i]; + cell[i] = tolower(princ_realm->data[i]); } cell[i] = '\0'; + realm[i] = '\0'; - code = KFW_AFS_klog(ctx, cc, "afs", cell, realm->data, pLeash_get_default_lifetime(),NULL); + code = KFW_AFS_klog(ctx, cc, "afs", cell, realm, pLeash_get_default_lifetime(),NULL); if ( IsDebuggerPresent() ) { char message[256]; sprintf(message,"KFW_AFS_klog() returns: %d\n",code); @@ -1071,7 +1041,7 @@ KFW_import_ccache_data(void) strcpy(aserver.name, sname->data); strcpy(aserver.cell, cell->data); - code = pktc_GetToken(&aserver, &atoken, sizeof(atoken), &aclient); + code = ktc_GetToken(&aserver, &atoken, sizeof(atoken), &aclient); if (!code) { // Found a token in AFS Client Server which matches char pname[128], *p, *q; @@ -1148,7 +1118,7 @@ KFW_import_ccache_data(void) int -KFW_AFS_get_cred(char * username, +KFW_AFS_get_cred( char * username, char * cell, char * password, int lifetime, @@ -1166,6 +1136,8 @@ KFW_AFS_get_cred(char * username, char **cells = NULL; int cell_count=0; struct afsconf_cell cellconfig; + char * dot; + if (!pkrb5_init_context) return 0; @@ -1185,12 +1157,30 @@ KFW_AFS_get_cred(char * username, if ( code ) goto cleanup; realm = strchr(username,'@'); - if (realm) { + if ( realm ) { + pname = strdup(username); + realm = strchr(pname, '@'); *realm = '\0'; - realm++; + + /* handle kerberos iv notation */ + while ( dot = strchr(pname,'.') ) { + *dot = '/'; + } + *realm++ = '@'; + } else { + realm = afs_realm_of_cell(ctx, &cellconfig); // do not free + pname = malloc(strlen(username) + strlen(realm) + 2); + + strcpy(pname, username); + + /* handle kerberos iv notation */ + while ( dot = strchr(pname,'.') ) { + *dot = '/'; + } + + strcat(pname,"@"); + strcat(pname,realm); } - if ( !realm || !realm[0] ) - realm = afs_realm_of_cell(&cellconfig); // do not free if ( IsDebuggerPresent() ) { OutputDebugString("Realm: "); @@ -1198,15 +1188,10 @@ KFW_AFS_get_cred(char * username, OutputDebugString("\n"); } - code = pkrb5_build_principal(ctx, &principal, strlen(realm), - realm, username, - NULL, - NULL); - - code = KFW_get_ccache(ctx, principal, &cc); + code = pkrb5_parse_name(ctx, pname, &principal); if ( code ) goto cleanup; - code = pkrb5_unparse_name(ctx, principal, &pname); + code = KFW_get_ccache(ctx, principal, &cc); if ( code ) goto cleanup; if ( lifetime == 0 ) @@ -1254,7 +1239,7 @@ KFW_AFS_get_cred(char * username, code = KFW_AFS_get_cellconfig( cells[cell_count], (void*)&cellconfig, local_cell); if ( code ) continue; - realm = afs_realm_of_cell(&cellconfig); // do not free + realm = afs_realm_of_cell(ctx, &cellconfig); // do not free if ( IsDebuggerPresent() ) { OutputDebugString("Realm: "); OutputDebugString(realm); @@ -1278,7 +1263,7 @@ KFW_AFS_get_cred(char * username, cleanup: if ( pname ) - pkrb5_free_unparsed_name(ctx,pname); + free(pname); if ( cc ) pkrb5_cc_close(ctx, cc); @@ -1419,7 +1404,7 @@ KFW_AFS_renew_expiring_tokens(void) } code = KFW_AFS_get_cellconfig( cells[cell_count], (void*)&cellconfig, local_cell); if ( code ) continue; - realm = afs_realm_of_cell(&cellconfig); // do not free + realm = afs_realm_of_cell(ctx, &cellconfig); // do not free if ( IsDebuggerPresent() ) { OutputDebugString("Realm: "); OutputDebugString(realm); @@ -1503,7 +1488,7 @@ KFW_AFS_renew_token_for_cell(char * cell) code = KFW_AFS_get_cellconfig( cell, (void*)&cellconfig, local_cell); if ( code ) goto loop_cleanup; - realm = afs_realm_of_cell(&cellconfig); // do not free + realm = afs_realm_of_cell(ctx, &cellconfig); // do not free if ( IsDebuggerPresent() ) { OutputDebugString("Realm: "); OutputDebugString(realm); @@ -2386,7 +2371,7 @@ KFW_AFS_unlog(void) if (CurrentState != SERVICE_RUNNING) return(0); - rc = pktc_ForgetAllTokens(); + rc = ktc_ForgetAllTokens(); return(0); } @@ -2426,7 +2411,6 @@ KFW_AFS_klog( krb5_creds * k5creds = 0; krb5_error_code code; krb5_principal client_principal = 0; - char * cname = 0, *sname = 0; int i, retry = 0; CurrentState = 0; @@ -2505,7 +2489,7 @@ KFW_AFS_klog( #else goto cleanup; #endif - strcpy(realm_of_cell, afs_realm_of_cell(&ak_cellconfig)); + strcpy(realm_of_cell, afs_realm_of_cell(ctx, &ak_cellconfig)); if (strlen(service) == 0) strcpy(ServiceName, "afs"); @@ -2545,6 +2529,7 @@ KFW_AFS_klog( if ( IsDebuggerPresent() ) { + char * cname, *sname; pkrb5_unparse_name(ctx, increds.client, &cname); pkrb5_unparse_name(ctx, increds.server, &sname); OutputDebugString("Getting tickets for \""); @@ -2552,7 +2537,8 @@ KFW_AFS_klog( OutputDebugString("\" and service \""); OutputDebugString(sname); OutputDebugString("\"\n"); - cname = sname = 0; + pkrb5_free_unparsed_name(ctx,cname); + pkrb5_free_unparsed_name(ctx,sname); } code = pkrb5_get_credentials(ctx, 0, cc, &increds, &k5creds); @@ -2580,7 +2566,6 @@ KFW_AFS_klog( OutputDebugString("\"\n"); pkrb5_free_unparsed_name(ctx,cname); pkrb5_free_unparsed_name(ctx,sname); - cname = sname = 0; } if (!code) @@ -2614,7 +2599,6 @@ KFW_AFS_klog( OutputDebugString("\"\n"); pkrb5_free_unparsed_name(ctx,cname); pkrb5_free_unparsed_name(ctx,sname); - cname = sname = 0; } if (!code) @@ -2645,7 +2629,6 @@ KFW_AFS_klog( OutputDebugString("\"\n"); pkrb5_free_unparsed_name(ctx,cname); pkrb5_free_unparsed_name(ctx,sname); - cname = sname = 0; } if (!code) @@ -2683,7 +2666,7 @@ KFW_AFS_klog( memcpy(atoken.ticket, k5creds->ticket.data, atoken.ticketLen); retry_gettoken5: - rc = pktc_GetToken(&aserver, &btoken, sizeof(btoken), &aclient); + rc = ktc_GetToken(&aserver, &btoken, sizeof(btoken), &aclient); if (rc != 0 && rc != KTC_NOENT && rc != KTC_NOCELL) { if ( rc == KTC_NOCM && retry < 20 ) { Sleep(500); @@ -2739,7 +2722,7 @@ KFW_AFS_klog( aclient.smbname[0] = '\0'; } - rc = pktc_SetToken(&aserver, &atoken, &aclient, 0); + rc = ktc_SetToken(&aserver, &atoken, &aclient, 0); if (!rc) goto cleanup; /* We have successfully inserted the token */ @@ -2809,7 +2792,7 @@ KFW_AFS_klog( memcpy(atoken.ticket, creds.ticket_st.dat, atoken.ticketLen); retry_gettoken: - rc = pktc_GetToken(&aserver, &btoken, sizeof(btoken), &aclient); + rc = ktc_GetToken(&aserver, &btoken, sizeof(btoken), &aclient); if (rc != 0 && rc != KTC_NOENT && rc != KTC_NOCELL) { if ( rc == KTC_NOCM && retry < 20 ) { Sleep(500); @@ -2857,7 +2840,7 @@ KFW_AFS_klog( aclient.smbname[0] = '\0'; } - if (rc = pktc_SetToken(&aserver, &atoken, &aclient, 0)) + if (rc = ktc_SetToken(&aserver, &atoken, &aclient, 0)) { KFW_AFS_error(rc, "ktc_SetToken()"); code = rc; @@ -2865,10 +2848,6 @@ KFW_AFS_klog( } cleanup: - if (cname) - pkrb5_free_unparsed_name(ctx,cname); - if (sname) - pkrb5_free_unparsed_name(ctx,sname); if (client_principal) pkrb5_free_principal(ctx,client_principal); /* increds.client == client_principal */ @@ -2886,28 +2865,20 @@ KFW_AFS_klog( /* afs_realm_of_cell(): */ /**************************************/ static char * -afs_realm_of_cell(struct afsconf_cell *cellconfig) +afs_realm_of_cell(krb5_context ctx, struct afsconf_cell *cellconfig) { static char krbrlm[REALM_SZ+1]=""; - krb5_context ctx = 0; char ** realmlist=NULL; krb5_error_code r; if (!cellconfig) return 0; - if (!pkrb5_init_context) - return 0; - - r = pkrb5_init_context(&ctx); - if ( !r ) - r = pkrb5_get_host_realm(ctx, cellconfig->hostName[0], &realmlist); + r = pkrb5_get_host_realm(ctx, cellconfig->hostName[0], &realmlist); if ( !r && realmlist && realmlist[0] ) { strcpy(krbrlm, realmlist[0]); pkrb5_free_host_realm(ctx, realmlist); } - if (ctx) - pkrb5_free_context(ctx); if ( !krbrlm[0] ) { @@ -2926,7 +2897,7 @@ afs_realm_of_cell(struct afsconf_cell *cellconfig) } /**************************************/ -/* KFW_AFS_get_cellconfig(): */ +/* KFW_AFS_get_cellconfig(): */ /**************************************/ int KFW_AFS_get_cellconfig(char *cell, struct afsconf_cell *cellconfig, char *local_cell) @@ -2938,7 +2909,7 @@ KFW_AFS_get_cellconfig(char *cell, struct afsconf_cell *cellconfig, char *local_ memset(cellconfig, 0, sizeof(*cellconfig)); /* WIN32: cm_GetRootCellName(local_cell) - NOTE: no way to get max chars */ - if (rc = pcm_GetRootCellName(local_cell)) + if (rc = cm_GetRootCellName(local_cell)) { return(rc); } @@ -2949,7 +2920,14 @@ KFW_AFS_get_cellconfig(char *cell, struct afsconf_cell *cellconfig, char *local_ /* WIN32: cm_SearchCellFile(cell, pcallback, pdata) */ strcpy(cellconfig->name, cell); - return pcm_SearchCellFile(cell, newcell, get_cellconfig_callback, (void*)cellconfig); + rc = cm_SearchCellFile(cell, newcell, get_cellconfig_callback, (void*)cellconfig); +#ifdef AFS_AFSDB_ENV + if (rc != 0) { + int ttl; + rc = cm_SearchCellByDNS(cell, newcell, &ttl, get_cellconfig_callback, (void*)cellconfig); + } +#endif + return rc; } /**************************************/ @@ -3145,7 +3123,14 @@ BOOL KFW_probe_kdc(struct afsconf_cell * cellconfig) char password[PROBE_PASSWORD_LEN+1]; BOOL serverReachable = 0; - realm = afs_realm_of_cell(cellconfig); // do not free + if (!pkrb5_init_context) + return 0; + + code = pkrb5_init_context(&ctx); + if (code) goto cleanup; + + + realm = afs_realm_of_cell(ctx, cellconfig); // do not free code = pkrb5_build_principal(ctx, &principal, strlen(realm), realm, PROBE_USERNAME, NULL, NULL); diff --git a/src/WINNT/afsd/cm_buf.c b/src/WINNT/afsd/cm_buf.c index 6f5a30cad..389c7f647 100644 --- a/src/WINNT/afsd/cm_buf.c +++ b/src/WINNT/afsd/cm_buf.c @@ -502,24 +502,27 @@ void buf_WaitIO(cm_buf_t *bp) if (!(bp->flags & (CM_BUF_READING | CM_BUF_WRITING))) break; - /* otherwise I/O is happening, but some other thread is waiting for - * the I/O already. Wait for that guy to figure out what happened, - * and then check again. - */ - bp->flags |= CM_BUF_WAITING; - osi_SleepM((long) bp, &bp->mx); - lock_ObtainMutex(&bp->mx); + /* otherwise I/O is happening, but some other thread is waiting for + * the I/O already. Wait for that guy to figure out what happened, + * and then check again. + */ + if ( bp->flags & CM_BUF_WAITING ) + osi_Log1(buf_logp, "buf_WaitIO CM_BUF_WAITING already set for 0x%x", bp); + + bp->flags |= CM_BUF_WAITING; + osi_SleepM((long) bp, &bp->mx); + lock_ObtainMutex(&bp->mx); osi_Log1(buf_logp, "buf_WaitIO conflict wait done for 0x%x", bp); - } + } - /* if we get here, the IO is done, but we may have to wakeup people waiting for - * the I/O to complete. Do so. - */ - if (bp->flags & CM_BUF_WAITING) { + /* if we get here, the IO is done, but we may have to wakeup people waiting for + * the I/O to complete. Do so. + */ + if (bp->flags & CM_BUF_WAITING) { bp->flags &= ~CM_BUF_WAITING; - osi_Wakeup((long) bp); - } - osi_Log1(buf_logp, "WaitIO finished wait for bp 0x%x", (long) bp); + osi_Wakeup((long) bp); + } + osi_Log1(buf_logp, "WaitIO finished wait for bp 0x%x", (long) bp); } /* code to drop reference count while holding buf_globalLock */ diff --git a/src/WINNT/afsd/cm_callback.c b/src/WINNT/afsd/cm_callback.c index 81f1f423c..bade3f29e 100644 --- a/src/WINNT/afsd/cm_callback.c +++ b/src/WINNT/afsd/cm_callback.c @@ -30,12 +30,6 @@ /* read/write lock for all global storage in this module */ osi_rwlock_t cm_callbackLock; -/* -#ifdef AFS_FREELANCE_CLIENT -extern int cm_fakeDirCallback; -extern int cm_fakeGettingCallback; -#endif -*/ #ifdef AFS_FREELANCE_CLIENT extern osi_mutex_t cm_Freelance_Lock; #endif @@ -606,7 +600,7 @@ int cm_HaveCallback(cm_scache_t *scp) // good shape and we simply return true, provided no change is detected. int fdc, fgc; - if (cm_freelanceEnabled && scp->fid.cell==0x1 && scp->fid.volume==0x20000001) { // if it's something on /afs + if (cm_freelanceEnabled && scp->fid.cell==0x1 && scp->fid.volume==AFS_FAKE_ROOT_VOL_ID) { // if it's something on /afs if (!(scp->fid.vnode==0x1 && scp->fid.unique==0x1)) // if it's not root.afs return 1; else { @@ -764,7 +758,7 @@ long cm_GetCallback(cm_scache_t *scp, struct cm_user *userp, // cm_MergeStatus and mark that cm_fakeDirCallback is 2 if (cm_freelanceEnabled && scp->fid.cell==0x1 && - scp->fid.volume==0x20000001 && + scp->fid.volume==AFS_FAKE_ROOT_VOL_ID && scp->fid.unique==0x1 && scp->fid.vnode==0x1) { // Start by indicating that we're in the process @@ -787,9 +781,9 @@ long cm_GetCallback(cm_scache_t *scp, struct cm_user *userp, return 0; } - /*if (scp->fid.cell==0x1 && scp->fid.volume==0x20000001) { - afsi_log("cm_getcallback should NEVER EVER get here... "); - }*/ + if (scp->fid.cell==0x1 && scp->fid.volume==AFS_FAKE_ROOT_VOL_ID) { + osi_Log0(afsd_logp,"cm_getcallback should NEVER EVER get here... "); + } // yj: end of getcallback modifications --------------- #endif /* AFS_FREELANCE_CLIENT */ diff --git a/src/WINNT/afsd/cm_cell.c b/src/WINNT/afsd/cm_cell.c index c2e942a1c..8107329da 100644 --- a/src/WINNT/afsd/cm_cell.c +++ b/src/WINNT/afsd/cm_cell.c @@ -34,7 +34,7 @@ long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *namep) { cm_server_t *tsp; cm_serverRef_t *tsrp; - cm_cell_t *cellp; + cm_cell_t *cellp; cellp = rockp; @@ -69,7 +69,7 @@ cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags) char fullname[200]=""; lock_ObtainWrite(&cm_cellLock); - for(cp = cm_allCellsp; cp; cp=cp->nextp) { + for (cp = cm_allCellsp; cp; cp=cp->nextp) { if (strcmp(namep, cp->namep) == 0) { strcpy(fullname, cp->namep); break; @@ -79,11 +79,22 @@ cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags) if ((!cp && (flags & CM_FLAG_CREATE)) #ifdef AFS_AFSDB_ENV /* if it's from DNS, see if it has expired */ - || (cp && (cp->flags & CM_CELLFLAG_DNS) && (time(0) > cp->timeout)) + || (cp && (cp->flags & CM_CELLFLAG_DNS) + && ((cp->flags & CM_CELLFLAG_VLSERVER_INVALID) || (time(0) > cp->timeout))) #endif ) { - if (!cp) cp = malloc(sizeof(*cp)); - memset(cp, 0, sizeof(*cp)); + int dns_expired = 0; + if (!cp) { + cp = malloc(sizeof(*cp)); + memset(cp, 0, sizeof(*cp)); + } + else { + dns_expired = 1; + /* must empty cp->vlServersp */ + cm_FreeServerList(&cp->vlServersp); + cp->vlServersp = NULL; + } + code = cm_SearchCellFile(namep, fullname, cm_AddCellProc, cp); if (code) { afsi_log("in cm_GetCell_gen cm_SearchCellFile(%s) returns code= %d fullname= %s", @@ -92,27 +103,40 @@ cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags) #ifdef AFS_AFSDB_ENV if (cm_dnsEnabled /*&& cm_DomainValid(namep)*/) { code = cm_SearchCellByDNS(namep, fullname, &ttl, cm_AddCellProc, cp); - if ( code ) + if ( code ) { afsi_log("in cm_GetCell_gen cm_SearchCellByDNS(%s) returns code= %d fullname= %s", namep, code, fullname); + if (dns_expired) { + cp->flags |= CM_CELLFLAG_VLSERVER_INVALID; + cp = NULL; /* set cp to NULL to indicate error */ + } + } + else { /* got cell from DNS */ + cp->flags |= CM_CELLFLAG_DNS; + cp->flags &= ~CM_CELLFLAG_VLSERVER_INVALID; + cp->timeout = time(0) + ttl; + } } #endif - if (code) { + if (cp && code) { /* free newly allocated memory */ free(cp); cp = NULL; goto done; } -#ifdef AFS_AFSDB_ENV - else { /* got cell from DNS */ - cp->flags |= CM_CELLFLAG_DNS; - cp->timeout = time(0) + ttl; - } -#endif } /* randomise among those vlservers having the same rank*/ cm_RandomizeServer(&cp->vlServersp); +#ifdef AFS_AFSDB_ENV + if (dns_expired) { + /* we want to preserve the full name and mutex. + * also, cp is already in the cm_allCellsp list + */ + goto done; + } +#endif /* AFS_AFSDB_ENV */ + /* otherwise we found the cell, and so we're nearly done */ lock_InitializeMutex(&cp->mx, "cm_cell_t mutex"); @@ -130,54 +154,64 @@ cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags) done: /* fullname is not valid if cp == NULL */ if (cp && newnamep) - strcpy(newnamep, fullname); + strcpy(newnamep, fullname); lock_ReleaseWrite(&cm_cellLock); - return cp; + return cp; } cm_cell_t *cm_FindCellByID(long cellID) { cm_cell_t *cp; int ttl; - int code; + int code; lock_ObtainWrite(&cm_cellLock); for(cp = cm_allCellsp; cp; cp=cp->nextp) { - if (cellID == cp->cellID) break; - } + if (cellID == cp->cellID) + break; + } #ifdef AFS_AFSDB_ENV /* if it's from DNS, see if it has expired */ - if (cp && cm_dnsEnabled && (cp->flags & CM_CELLFLAG_DNS) && (time(0) > cp->timeout)) { - code = cm_SearchCellByDNS(cp->namep, NULL, &ttl, cm_AddCellProc, cp); - if (code == 0) { /* got cell from DNS */ - cp->flags |= CM_CELLFLAG_DNS; + if (cp && cm_dnsEnabled && (cp->flags & CM_CELLFLAG_DNS) && + ((cp->flags & CM_CELLFLAG_VLSERVER_INVALID) || (time(0) > cp->timeout))) { + /* must empty cp->vlServersp */ + cm_FreeServerList(&cp->vlServersp); + cp->vlServersp = NULL; + + code = cm_SearchCellByDNS(cp->namep, NULL, &ttl, cm_AddCellProc, cp); + if (code == 0) { /* got cell from DNS */ + cp->flags |= CM_CELLFLAG_DNS; + cp->flags &= ~CM_CELLFLAG_VLSERVER_INVALID; #ifdef DEBUG - fprintf(stderr, "cell %s: ttl=%d\n", cp->namep, ttl); + fprintf(stderr, "cell %s: ttl=%d\n", cp->namep, ttl); #endif - cp->timeout = time(0) + ttl; - } - /* if we fail to find it this time, we'll just do nothing and leave the - current entry alone */ + cp->timeout = time(0) + ttl; + } else { + cp->flags |= CM_CELLFLAG_VLSERVER_INVALID; + cp = NULL; /* return NULL to indicate failure */ + } + /* if we fail to find it this time, we'll just do nothing and leave the + * current entry alone + */ } #endif /* AFS_AFSDB_ENV */ lock_ReleaseWrite(&cm_cellLock); - - return cp; + return cp; } void cm_InitCell(void) { static osi_once_t once; - if (osi_Once(&once)) { + if (osi_Once(&once)) { lock_InitializeRWLock(&cm_cellLock, "cell global lock"); - cm_allCellsp = NULL; + cm_allCellsp = NULL; osi_EndOnce(&once); - } + } } -void cm_ChangeRankCellVLServer(cm_server_t *tsp) +void cm_ChangeRankCellVLServer(cm_server_t *tsp) { cm_cell_t *cp; int code; diff --git a/src/WINNT/afsd/cm_cell.h b/src/WINNT/afsd/cm_cell.h index bf0363435..e462a7ff9 100644 --- a/src/WINNT/afsd/cm_cell.h +++ b/src/WINNT/afsd/cm_cell.h @@ -23,8 +23,10 @@ typedef struct cm_cell { long timeout; /* if dns, time at which the server addrs expire */ } cm_cell_t; -#define CM_CELLFLAG_SUID 1 /* setuid flag; not yet used */ -#define CM_CELLFLAG_DNS 2 /* cell servers are from DNS */ +/* These are bit flag values */ +#define CM_CELLFLAG_SUID 1 /* setuid flag; not yet used */ +#define CM_CELLFLAG_DNS 2 /* cell servers are from DNS */ +#define CM_CELLFLAG_VLSERVER_INVALID 4 /* cell servers are invalid */ extern void cm_InitCell(void); diff --git a/src/WINNT/afsd/cm_config.c b/src/WINNT/afsd/cm_config.c index af94ede2c..ce6f9257f 100644 --- a/src/WINNT/afsd/cm_config.c +++ b/src/WINNT/afsd/cm_config.c @@ -9,6 +9,7 @@ #include #include +#include #ifndef DJGPP #include @@ -23,12 +24,7 @@ #include "cm_config.h" #ifdef AFS_AFSDB_ENV -#if !defined(DJGPP) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x500 -#include -#define DNSAPI_ENV -#else #include "cm_dns.h" -#endif #include #endif @@ -165,9 +161,6 @@ long cm_SearchCellFile(char *cellNamep, char *newCellNamep, long code; int tracking = 1, partial = 0; #if defined(DJGPP) || defined(AFS_WIN95_ENV) - long ip_addr; - int c1, c2, c3, c4; - char aname[241]; char *afsconf_path; #endif @@ -334,23 +327,32 @@ long cm_SearchCellFile(char *cellNamep, char *newCellNamep, foundCell = 1; } #else - /* For DJGPP, we will read IP address instead - of name/comment field */ - code = sscanf(lineBuffer, "%d.%d.%d.%d #%s", - &c1, &c2, &c3, &c4, aname); - tp = (char *) &ip_addr; - *tp++ = c1; - *tp++ = c2; - *tp++ = c3; - *tp++ = c4; - memcpy(&vlSockAddr.sin_addr.s_addr, &ip_addr, - sizeof(long)); - vlSockAddr.sin_family = AF_INET; - /* sin_port supplied by connection code */ - if (procp) - (*procp)(rockp, &vlSockAddr, valuep); - foundCell = 1; + thp = 0; #endif /* !DJGPP */ + if (!thp) { + long ip_addr; + int c1, c2, c3, c4; + char aname[241] = ""; + + /* Since there is no gethostbyname() data + * available we will read the IP address + * stored in the CellServDB file + */ + code = sscanf(lineBuffer, "%d.%d.%d.%d #%s", + &c1, &c2, &c3, &c4, aname); + tp = (char *) &ip_addr; + *tp++ = c1; + *tp++ = c2; + *tp++ = c3; + *tp++ = c4; + memcpy(&vlSockAddr.sin_addr.s_addr, &ip_addr, + sizeof(long)); + vlSockAddr.sin_family = AF_INET; + /* sin_port supplied by connection code */ + if (procp) + (*procp)(rockp, &vlSockAddr, valuep); + foundCell = 1; + } } } /* a vldb line */ } /* while loop processing all lines */ @@ -363,9 +365,9 @@ long cm_SearchCellByDNS(char *cellNamep, char *newCellNamep, int *ttl, cm_configProc_t *procp, void *rockp) { #ifdef AFS_AFSDB_ENV -#ifndef DNSAPI_ENV int rc; - int cellHosts[AFSMAXCELLHOSTS]; + int cellHostAddrs[AFSMAXCELLHOSTS]; + char cellHostNames[AFSMAXCELLHOSTS][MAXHOSTCHARS]; int numServers; int i; struct sockaddr_in vlSockAddr; @@ -373,15 +375,15 @@ long cm_SearchCellByDNS(char *cellNamep, char *newCellNamep, int *ttl, #ifdef DEBUG DebugEvent_local("AFS SearchCellDNS-","Doing search for [%s]", cellNamep); #endif - rc = getAFSServer(cellNamep, cellHosts, &numServers, ttl); + rc = getAFSServer(cellNamep, cellHostAddrs, cellHostNames, &numServers, ttl); if (rc == 0 && numServers > 0) { /* found the cell */ for (i = 0; i < numServers; i++) { - memcpy(&vlSockAddr.sin_addr.s_addr, &cellHosts[i], + memcpy(&vlSockAddr.sin_addr.s_addr, &cellHostAddrs[i], sizeof(long)); vlSockAddr.sin_family = AF_INET; /* sin_port supplied by connection code */ if (procp) - (*procp)(rockp, &vlSockAddr, NULL); + (*procp)(rockp, &vlSockAddr, cellHostNames[i]); if(newCellNamep) strcpy(newCellNamep,cellNamep); } @@ -389,98 +391,6 @@ long cm_SearchCellByDNS(char *cellNamep, char *newCellNamep, int *ttl, } else return -1; /* not found */ -#else /* DNSAPI_ENV */ - PDNS_RECORD pDnsCell, pDnsIter, pDnsVol,pDnsVolIter, pDnsCIter; - LPSTR vlServers[AFSMAXCELLHOSTS]; - IP4_ADDRESS vlAddrs[AFSMAXCELLHOSTS]; - WORD nvlServers; - DWORD wttl, i; - BOOL success; - struct sockaddr_in vlSockAddr; - - success = FALSE; - -#ifdef DEBUG - DebugEvent_local("AFS SearchCellDNS-","Doing search for [%s]", cellNamep); -#endif - - /* query the AFSDB records of cell */ - if(DnsQuery_A(cellNamep, DNS_TYPE_AFSDB, DNS_QUERY_STANDARD, NULL, &pDnsCell, NULL) == ERROR_SUCCESS) { - - memset((void*) &vlSockAddr, 0, sizeof(vlSockAddr)); - - nvlServers = 0; wttl = 0; - - /* go through the returned records */ - for(pDnsIter = pDnsCell;pDnsIter; pDnsIter = pDnsIter->pNext) { - /* if we find an AFSDB record with Preference set to 1, we found a volserver */ - if(pDnsIter->wType == DNS_TYPE_AFSDB && pDnsIter->Data.Afsdb.wPreference == 1) { - vlServers[nvlServers++] = pDnsIter->Data.Afsdb.pNameExchange; - if(!wttl) wttl = pDnsIter->dwTtl; - if(nvlServers == AFSMAXCELLHOSTS) break; - } - } - - for(i=0;ipNext) { - if(pDnsIter->wType == DNS_TYPE_A) - /* check if its for one of the volservers */ - for(i=0;ipName, vlServers[i]) == 0) - vlAddrs[i] = pDnsIter->Data.A.IpAddress; - } - - for(i=0;ipNext) { - /* if we get an A record, keep it */ - if(pDnsVolIter->wType == DNS_TYPE_A && stricmp(vlServers[i], pDnsVolIter->pName)==0) { - vlAddrs[i] = pDnsVolIter->Data.A.IpAddress; - break; - } - /* if we get a CNAME, look for a corresponding A record */ - if(pDnsVolIter->wType == DNS_TYPE_CNAME && stricmp(vlServers[i], pDnsVolIter->pName)==0) { - for(pDnsCIter=pDnsVolIter; pDnsCIter; pDnsCIter=pDnsCIter->pNext) { - if(pDnsCIter->wType == DNS_TYPE_A && stricmp(pDnsVolIter->Data.CNAME.pNameHost, pDnsCIter->pName)==0) { - vlAddrs[i] = pDnsCIter->Data.A.IpAddress; - break; - } - } - if(vlAddrs[i]) break; - /* TODO: if the additional section is missing, then do another lookup for the CNAME */ - } - } - /* we are done with the volserver lookup */ - DnsRecordListFree(pDnsVol, DnsFreeRecordListDeep); - } - } - - /* if we found a volserver, then add it */ - if(vlAddrs[i]) { - vlSockAddr.sin_family = AF_INET; - vlSockAddr.sin_addr.s_addr = vlAddrs[i]; - if(procp) - (*procp)(rockp, &vlSockAddr, vlServers[i]); - success = TRUE; - } - } - - DnsRecordListFree(pDnsCell, DnsFreeRecordListDeep); - } - - if(!success) return -1; - else { - strcpy(newCellNamep, cellNamep); - if(ttl) *ttl = (int) wttl; - return 0; - } - -#endif /* DNSAPI_ENV */ #else return -1; /* not found */ #endif /* AFS_AFSDB_ENV */ diff --git a/src/WINNT/afsd/cm_conn.c b/src/WINNT/afsd/cm_conn.c index 06aceb1ad..b3e22c0e3 100644 --- a/src/WINNT/afsd/cm_conn.c +++ b/src/WINNT/afsd/cm_conn.c @@ -28,6 +28,8 @@ osi_rwlock_t cm_connLock; long RDRtimeout = CM_CONN_DEFAULTRDRTIMEOUT; +long ConnDeadtimeout = CM_CONN_CONNDEADTIME; +long HardDeadtimeout = CM_CONN_HARDDEADTIME; #define LANMAN_WKS_PARAM_KEY "SYSTEM\\CurrentControlSet\\Services\\lanmanworkstation\\parameters" #define LANMAN_WKS_SESSION_TIMEOUT "SessTimeout" @@ -52,8 +54,11 @@ void cm_InitConn(void) lock_InitializeRWLock(&cm_connLock, "connection global lock"); /* keisa - read timeout value for lanmanworkstation service. - * It is used as hardtimeout for connections. - * Default value is 45 + * jaltman - as per + * http://support.microsoft.com:80/support/kb/articles/Q102/0/67.asp&NoWebContent=1 + * the SessTimeout is a minimum timeout not a maximum timeout. Therefore, + * I believe that the default should not be short. Instead, we should wait until + * RX times out before reporting a timeout to the SMB client. */ code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, LANMAN_WKS_PARAM_KEY, 0, KEY_QUERY_VALUE, &parmKey); @@ -66,13 +71,17 @@ void cm_InitConn(void) { afsi_log("lanmanworkstation : SessTimeout %d", sessTimeout); RDRtimeout = sessTimeout; - } - else - { - RDRtimeout = CM_CONN_DEFAULTRDRTIMEOUT; + if ( ConnDeadtimeout < RDRtimeout + 15 ) { + ConnDeadtimeout = RDRtimeout + 15; + afsi_log("ConnDeadTimeout increased to %d", ConnDeadtimeout); + } + if ( HardDeadtimeout < 2 * ConnDeadtimeout ) { + HardDeadtimeout = 2 * ConnDeadtimeout; + afsi_log("HardDeadTimeout increased to %d", HardDeadtimeout); + } } } - + osi_EndOnce(&once); } } @@ -164,7 +173,7 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp, if (reqp->flags & CM_REQ_NORETRY) goto out; - /* if timeout - check that is did not exceed the SMB timeout + /* if timeout - check that it did not exceed the SMB timeout and retry */ if (errorCode == CM_ERROR_TIMEDOUT) { @@ -335,13 +344,8 @@ long cm_ConnByMServers(cm_serverRef_t *serversp, cm_user_t *usersp, #endif /* leave 5 seconds margin of safety */ - timeLeft = RDRtimeout - timeUsed - 5; - hardTimeLeft = timeLeft; - - /* Time enough to do an RPC? */ - if (timeLeft < 1) { - return CM_ERROR_TIMEDOUT; - } + timeLeft = ConnDeadtimeout - timeUsed - 5; + hardTimeLeft = HardDeadtimeout - timeUsed - 5; lock_ObtainWrite(&cm_serverLock); @@ -360,11 +364,11 @@ long cm_ConnByMServers(cm_serverRef_t *serversp, cm_user_t *usersp, if (code == 0) { cm_PutServer(tsp); /* Set RPC timeout */ - if (timeLeft > CM_CONN_CONNDEADTIME) - timeLeft = CM_CONN_CONNDEADTIME; + if (timeLeft > ConnDeadtimeout) + timeLeft = ConnDeadtimeout; - if (hardTimeLeft > CM_CONN_HARDDEADTIME) - hardTimeLeft = CM_CONN_HARDDEADTIME; + if (hardTimeLeft > HardDeadtimeout) + hardTimeLeft = HardDeadtimeout; lock_ObtainMutex(&(*connpp)->mx); rx_SetConnDeadTime((*connpp)->callp, @@ -468,8 +472,8 @@ static void cm_NewRXConnection(cm_conn_t *tcp, cm_ucell_t *ucellp, serviceID, secObjp, secIndex); - rx_SetConnDeadTime(tcp->callp, CM_CONN_CONNDEADTIME); - rx_SetConnHardDeadTime(tcp->callp, CM_CONN_HARDDEADTIME); + rx_SetConnDeadTime(tcp->callp, ConnDeadtimeout); + rx_SetConnHardDeadTime(tcp->callp, HardDeadtimeout); tcp->ucgen = ucellp->gen; if (secObjp) rxs_Release(secObjp); /* Decrement the initial refCount */ diff --git a/src/WINNT/afsd/cm_conn.h b/src/WINNT/afsd/cm_conn.h index 4c9a42fe1..719d438d3 100644 --- a/src/WINNT/afsd/cm_conn.h +++ b/src/WINNT/afsd/cm_conn.h @@ -11,8 +11,11 @@ #define __CM_CONN_H_ENV__ 1 #define CM_CONN_DEFAULTRDRTIMEOUT 45 -#define CM_CONN_CONNDEADTIME 20 -#define CM_CONN_HARDDEADTIME 40 +#define CM_CONN_CONNDEADTIME 60 +#define CM_CONN_HARDDEADTIME 120 + +extern long ConnDeadtimeout; +extern long HardDeadtimeout; typedef struct cm_conn { struct cm_conn *nextp; /* locked by cm_connLock */ diff --git a/src/WINNT/afsd/cm_dcache.c b/src/WINNT/afsd/cm_dcache.c index aba7a7932..1ea2be857 100644 --- a/src/WINNT/afsd/cm_dcache.c +++ b/src/WINNT/afsd/cm_dcache.c @@ -45,29 +45,29 @@ long cm_BufWrite(void *vfidp, osi_hyper_t *offsetp, long length, long flags, */ long code; cm_fid_t *fidp = vfidp; - cm_scache_t *scp; - long nbytes; - long temp; - AFSFetchStatus outStatus; - AFSStoreStatus inStatus; - osi_hyper_t thyper; - AFSVolSync volSync; - AFSFid tfid; - struct rx_call *callp; - osi_queueData_t *qdp; - cm_buf_t *bufp; - long wbytes; - char *bufferp; - cm_conn_t *connp; - long truncPos; - cm_bulkIO_t biod; /* bulk IO descriptor */ - - osi_assert(userp != NULL); - - /* 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 - * buffer, although more likely it will just return a new, empty, buffer. - */ + cm_scache_t *scp; + long nbytes; + long temp; + AFSFetchStatus outStatus; + AFSStoreStatus inStatus; + osi_hyper_t thyper; + AFSVolSync volSync; + AFSFid tfid; + struct rx_call *callp; + osi_queueData_t *qdp; + cm_buf_t *bufp; + long wbytes; + char *bufferp; + cm_conn_t *connp; + long truncPos; + cm_bulkIO_t biod; /* bulk IO descriptor */ + + osi_assert(userp != NULL); + + /* 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 + * buffer, although more likely it will just return a new, empty, buffer. + */ scp = cm_FindSCache(fidp); if (scp == NULL) return CM_ERROR_NOSUCHFILE; /* shouldn't happen */ @@ -76,97 +76,100 @@ long cm_BufWrite(void *vfidp, osi_hyper_t *offsetp, long length, long flags, lock_ObtainMutex(&scp->mx); - code = cm_SetupStoreBIOD(scp, offsetp, length, &biod, userp, reqp); - if (code) { + code = cm_SetupStoreBIOD(scp, offsetp, length, &biod, userp, reqp); + if (code) { osi_Log1(afsd_logp, "cm_SetupStoreBIOD code %x", code); lock_ReleaseMutex(&scp->mx); cm_ReleaseSCache(scp); - return code; - } + return code; + } if (biod.length == 0) { osi_Log0(afsd_logp, "cm_SetupStoreBIOD length 0"); lock_ReleaseMutex(&scp->mx); cm_ReleaseBIOD(&biod, 1); /* should be a NOOP */ cm_ReleaseSCache(scp); - return 0; - } + return 0; + } /* Serialize StoreData RPC's; for rationale see cm_scache.c */ (void) cm_SyncOp(scp, NULL, userp, reqp, 0, CM_SCACHESYNC_STOREDATA_EXCL); /* prepare the output status for the store */ scp->mask |= CM_SCACHEMASK_CLIENTMODTIME; - cm_StatusFromAttr(&inStatus, scp, NULL); - truncPos = scp->length.LowPart; - if ((scp->mask & CM_SCACHEMASK_TRUNCPOS) - && scp->truncPos.LowPart < (unsigned long) truncPos) - truncPos = scp->truncPos.LowPart; + cm_StatusFromAttr(&inStatus, scp, NULL); + truncPos = scp->length.LowPart; + if ((scp->mask & CM_SCACHEMASK_TRUNCPOS) + && scp->truncPos.LowPart < (unsigned long) truncPos) + truncPos = scp->truncPos.LowPart; scp->mask &= ~CM_SCACHEMASK_TRUNCPOS; /* compute how many bytes to write from this buffer */ - thyper = LargeIntegerSubtract(scp->length, biod.offset); - if (LargeIntegerLessThanZero(thyper)) { + thyper = LargeIntegerSubtract(scp->length, biod.offset); + if (LargeIntegerLessThanZero(thyper)) { /* entire buffer is past EOF */ nbytes = 0; - } - else { + } + else { /* otherwise write out part of buffer before EOF, but not - * more than bufferSize bytes. - */ + * more than bufferSize bytes. + */ nbytes = thyper.LowPart; - if (nbytes > biod.length) nbytes = biod.length; - } + if (nbytes > biod.length) + nbytes = biod.length; + } lock_ReleaseMutex(&scp->mx); - /* now we're ready to do the store operation */ - do { + /* now we're ready to do the store operation */ + do { code = cm_Conn(&scp->fid, userp, reqp, &connp); - if (code) continue; + if (code) + continue; callp = rx_NewCall(connp->callp); osi_Log3(afsd_logp, "CALL StoreData vp %x, off 0x%x, size 0x%x", - (long) scp, biod.offset.LowPart, nbytes); + (long) scp, biod.offset.LowPart, nbytes); - code = StartRXAFS_StoreData(callp, &tfid, &inStatus, - biod.offset.LowPart, nbytes, truncPos); + code = StartRXAFS_StoreData(callp, &tfid, &inStatus, + biod.offset.LowPart, nbytes, truncPos); if (code == 0) { - /* write the data from the the list of buffers */ - qdp = NULL; + /* write the data from the the list of buffers */ + qdp = NULL; while(nbytes > 0) { if (qdp == NULL) qdp = biod.bufListEndp; else qdp = (osi_queueData_t *) osi_QPrev(&qdp->q); osi_assert(qdp != NULL); - bufp = osi_GetQData(qdp); - bufferp = bufp->datap; - wbytes = nbytes; - if (wbytes > buf_bufferSize) wbytes = buf_bufferSize; - - /* write out wbytes of data from bufferp */ - temp = rx_Write(callp, bufferp, wbytes); - if (temp != wbytes) { - code = -1; + bufp = osi_GetQData(qdp); + bufferp = bufp->datap; + wbytes = nbytes; + if (wbytes > buf_bufferSize) + wbytes = buf_bufferSize; + + /* write out wbytes of data from bufferp */ + temp = rx_Write(callp, bufferp, wbytes); + if (temp != wbytes) { + code = -1; break; } - nbytes -= wbytes; - } /* while more bytes to write */ + nbytes -= wbytes; + } /* while more bytes to write */ } /* if RPC started successfully */ if (code == 0) code = EndRXAFS_StoreData(callp, &outStatus, &volSync); - code = rx_EndCall(callp, code); - osi_Log0(afsd_logp, "CALL StoreData DONE"); + code = rx_EndCall(callp, code); + osi_Log0(afsd_logp, "CALL StoreData DONE"); } while (cm_Analyze(connp, userp, reqp, &scp->fid, &volSync, NULL, code)); - code = cm_MapRPCError(code, reqp); + code = cm_MapRPCError(code, reqp); - /* now, clean up our state */ - lock_ObtainMutex(&scp->mx); + /* now, clean up our state */ + lock_ObtainMutex(&scp->mx); cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_STOREDATA_EXCL); @@ -176,21 +179,21 @@ long cm_BufWrite(void *vfidp, osi_hyper_t *offsetp, long length, long flags, * stored that sets the file's size (by writing and by using * the truncate-first option in the store call). * - * At this point, we've just finished a store, and so the trunc + * At this point, we've just finished a store, and so the trunc * pos field is clean. If the file's size at the server is at * least as big as we think it should be, then we turn off the * length dirty bit, since all the other dirty buffers must * precede this one in the file. - * - * The file's desired size shouldn't be smaller than what's + * + * The file's desired size shouldn't be smaller than what's * stored at the server now, since we just did the trunc pos * store. - * - * We have to turn off the length dirty bit as soon as we can, + * + * We have to turn off the length dirty bit as soon as we can, * so that we see updates made by other machines. - */ + */ if (outStatus.Length >= scp->length.LowPart) - scp->mask &= ~CM_SCACHEMASK_LENGTH; + scp->mask &= ~CM_SCACHEMASK_LENGTH; cm_MergeStatus(scp, &outStatus, &volSync, userp, 0); } else { if (code == CM_ERROR_SPACE) @@ -198,11 +201,11 @@ long cm_BufWrite(void *vfidp, osi_hyper_t *offsetp, long length, long flags, else if (code == CM_ERROR_QUOTA) scp->flags |= CM_SCACHEFLAG_OVERQUOTA; } - lock_ReleaseMutex(&scp->mx); - cm_ReleaseBIOD(&biod, 1); + lock_ReleaseMutex(&scp->mx); + cm_ReleaseBIOD(&biod, 1); cm_ReleaseSCache(scp); - return code; + return code; } /* @@ -212,18 +215,18 @@ long cm_BufWrite(void *vfidp, osi_hyper_t *offsetp, long length, long flags, */ long cm_StoreMini(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp) { - AFSFetchStatus outStatus; - AFSStoreStatus inStatus; - AFSVolSync volSync; - AFSFid tfid; + AFSFetchStatus outStatus; + AFSStoreStatus inStatus; + AFSVolSync volSync; + AFSFid tfid; long code; long truncPos; cm_conn_t *connp; - struct rx_call *callp; + struct rx_call *callp; /* Serialize StoreData RPC's; for rationale see cm_scache.c */ (void) cm_SyncOp(scp, NULL, userp, reqp, 0, - CM_SCACHESYNC_STOREDATA_EXCL); + CM_SCACHESYNC_STOREDATA_EXCL); /* prepare the output status for the store */ inStatus.Mask = AFS_SETMODTIME; @@ -231,35 +234,35 @@ long cm_StoreMini(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp) scp->mask &= ~CM_SCACHEMASK_CLIENTMODTIME; /* calculate truncation position */ - truncPos = scp->length.LowPart; - if ((scp->mask & CM_SCACHEMASK_TRUNCPOS) - && scp->truncPos.LowPart < (unsigned long) truncPos) - truncPos = scp->truncPos.LowPart; + truncPos = scp->length.LowPart; + if ((scp->mask & CM_SCACHEMASK_TRUNCPOS) + && scp->truncPos.LowPart < (unsigned long) truncPos) + truncPos = scp->truncPos.LowPart; scp->mask &= ~CM_SCACHEMASK_TRUNCPOS; lock_ReleaseMutex(&scp->mx); cm_AFSFidFromFid(&tfid, &scp->fid); - /* now we're ready to do the store operation */ - do { + /* now we're ready to do the store operation */ + do { code = cm_Conn(&scp->fid, userp, reqp, &connp); - if (code) continue; + if (code) + continue; callp = rx_NewCall(connp->callp); - code = StartRXAFS_StoreData(callp, &tfid, &inStatus, - 0, 0, truncPos); + code = StartRXAFS_StoreData(callp, &tfid, &inStatus, + 0, 0, truncPos); if (code == 0) code = EndRXAFS_StoreData(callp, &outStatus, &volSync); - code = rx_EndCall(callp, code); - + code = rx_EndCall(callp, code); } while (cm_Analyze(connp, userp, reqp, &scp->fid, &volSync, NULL, code)); - code = cm_MapRPCError(code, reqp); + code = cm_MapRPCError(code, reqp); - /* now, clean up our state */ - lock_ObtainMutex(&scp->mx); + /* now, clean up our state */ + lock_ObtainMutex(&scp->mx); cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_STOREDATA_EXCL); @@ -269,7 +272,7 @@ long cm_StoreMini(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp) * see cm_BufWrite(). */ if (outStatus.Length >= scp->length.LowPart) - scp->mask &= ~CM_SCACHEMASK_LENGTH; + scp->mask &= ~CM_SCACHEMASK_LENGTH; cm_MergeStatus(scp, &outStatus, &volSync, userp, 0); } @@ -281,7 +284,7 @@ long cm_BufRead(cm_buf_t *bufp, long nbytes, long *bytesReadp, cm_user_t *userp) *bytesReadp = buf_bufferSize; /* now return a code that means that I/O is done */ - return 0; + return 0; } /* stabilize scache entry, and return with it locked so @@ -290,21 +293,19 @@ long cm_BufRead(cm_buf_t *bufp, long nbytes, long *bytesReadp, cm_user_t *userp) long cm_BufStabilize(void *parmp, cm_user_t *userp, cm_req_t *reqp) { cm_scache_t *scp; - long code; + long code; - scp = parmp; + scp = parmp; lock_ObtainMutex(&scp->mx); - code = cm_SyncOp(scp, NULL, userp, reqp, - 0, CM_SCACHESYNC_NEEDCALLBACK - | CM_SCACHESYNC_GETSTATUS - | CM_SCACHESYNC_SETSIZE); + code = cm_SyncOp(scp, NULL, userp, reqp, 0, + CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_SETSIZE); if (code) { lock_ReleaseMutex(&scp->mx); - return code; + return code; } - return 0; + return 0; } /* undoes the work that cm_BufStabilize does: releases lock so things can change again */ @@ -312,25 +313,26 @@ long cm_BufUnstabilize(void *parmp, cm_user_t *userp) { cm_scache_t *scp; - scp = parmp; + scp = parmp; - lock_ReleaseMutex(&scp->mx); + lock_ReleaseMutex(&scp->mx); /* always succeeds */ - return 0; + return 0; } cm_buf_ops_t cm_bufOps = { cm_BufWrite, - cm_BufRead, - cm_BufStabilize, - cm_BufUnstabilize + cm_BufRead, + cm_BufStabilize, + cm_BufUnstabilize }; int cm_InitDCache(long chunkSize, long nbuffers) { lock_InitializeMutex(&cm_bufGetMutex, "buf_Get mutex"); - if (nbuffers) buf_nbuffers = nbuffers; + if (nbuffers) + buf_nbuffers = nbuffers; return buf_Init(&cm_bufOps); } @@ -356,23 +358,26 @@ int cm_HaveBuffer(cm_scache_t *scp, cm_buf_t *bufp, int isBufLocked) return 1; if (!isBufLocked) { code = lock_TryMutex(&bufp->mx); - if (code == 0) { + if (code == 0) { /* don't have the lock, and can't lock it, then - * return failure. - */ - return 0; - } + * return failure. + */ + return 0; } + } /* remember dirty flag for later */ code = bufp->flags & CM_BUF_DIRTY; /* release lock if we obtained it here */ - if (!isBufLocked) lock_ReleaseMutex(&bufp->mx); + if (!isBufLocked) + lock_ReleaseMutex(&bufp->mx); /* if buffer was dirty, buffer is acceptable for use */ - if (code) return 1; - else return 0; + if (code) + return 1; + else + return 0; } /* used when deciding whether to do a prefetch or not */ @@ -380,85 +385,87 @@ long cm_CheckFetchRange(cm_scache_t *scp, osi_hyper_t *startBasep, long length, cm_user_t *up, cm_req_t *reqp, osi_hyper_t *realBasep) { osi_hyper_t toffset; - osi_hyper_t tbase; - long code; - cm_buf_t *bp; - int stop; + osi_hyper_t tbase; + long code; + cm_buf_t *bp; + int stop; - /* now scan all buffers in the range, looking for any that look like - * they need work. - */ + /* now scan all buffers in the range, looking for any that look like + * they need work. + */ tbase = *startBasep; stop = 0; lock_ObtainMutex(&scp->mx); - while(length > 0) { + while(length > 0) { /* get callback so we can do a meaningful dataVersion comparison */ - code = cm_SyncOp(scp, NULL, up, reqp, 0, - CM_SCACHESYNC_NEEDCALLBACK - | CM_SCACHESYNC_GETSTATUS); + code = cm_SyncOp(scp, NULL, up, reqp, 0, + CM_SCACHESYNC_NEEDCALLBACK + | CM_SCACHESYNC_GETSTATUS); if (code) { scp->flags &= ~CM_SCACHEFLAG_PREFETCHING; lock_ReleaseMutex(&scp->mx); - return code; - } + return code; + } - if (LargeIntegerGreaterThanOrEqualTo(tbase, scp->length)) { + if (LargeIntegerGreaterThanOrEqualTo(tbase, scp->length)) { /* we're past the end of file */ - break; - } + break; + } bp = buf_Find(scp, &tbase); /* We cheat slightly by not locking the bp mutex. */ - if (bp) { - if ((bp->cmFlags + if (bp) { + if ((bp->cmFlags & (CM_BUF_CMFETCHING | CM_BUF_CMSTORING)) == 0 - && bp->dataVersion != scp->dataVersion) - stop = 1; - buf_Release(bp); + && bp->dataVersion != scp->dataVersion) + stop = 1; + buf_Release(bp); } - else stop = 1; + else + stop = 1; /* if this buffer is essentially guaranteed to require a fetch, - * break out here and return this position. - */ - if (stop) break; + * break out here and return this position. + */ + if (stop) + break; - toffset.LowPart = buf_bufferSize; - toffset.HighPart = 0; - tbase = LargeIntegerAdd(toffset, tbase); - length -= buf_bufferSize; - } + toffset.LowPart = buf_bufferSize; + toffset.HighPart = 0; + tbase = LargeIntegerAdd(toffset, tbase); + length -= buf_bufferSize; + } - /* if we get here, either everything is fine or stop stopped us at a - * particular buffer in the range that definitely needs to be fetched. - */ - if (stop == 0) { + /* if we get here, either everything is fine or stop stopped us at a + * particular buffer in the range that definitely needs to be fetched. + */ + if (stop == 0) { /* return non-zero code since realBasep won't be valid */ scp->flags &= ~CM_SCACHEFLAG_PREFETCHING; code = -1; - } - else { + } + else { /* successfully found a page that will need fetching */ *realBasep = tbase; - code = 0; - } - lock_ReleaseMutex(&scp->mx); - return code; + code = 0; + } + lock_ReleaseMutex(&scp->mx); + return code; } void cm_BkgStore(cm_scache_t *scp, long p1, long p2, long p3, long p4, cm_user_t *userp) { osi_hyper_t toffset; - long length; + long length; cm_req_t req; cm_InitReq(&req); req.flags |= CM_REQ_NORETRY; - toffset.LowPart = p1; - toffset.HighPart = p2; - length = p3; + toffset.LowPart = p1; + toffset.HighPart = p2; + length = p3; osi_Log2(afsd_logp, "Starting BKG store vp 0x%x, base 0x%x", scp, p1); @@ -466,7 +473,7 @@ void cm_BkgStore(cm_scache_t *scp, long p1, long p2, long p3, long p4, lock_ObtainMutex(&scp->mx); cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_ASYNCSTORE); - lock_ReleaseMutex(&scp->mx); + lock_ReleaseMutex(&scp->mx); } void cm_ClearPrefetchFlag(long code, cm_scache_t *scp, osi_hyper_t *base) @@ -479,9 +486,9 @@ void cm_ClearPrefetchFlag(long code, cm_scache_t *scp, osi_hyper_t *base) thyper = LargeIntegerAdd(*base, thyper); thyper.LowPart &= (-cm_chunkSize); if (LargeIntegerGreaterThan(*base, scp->prefetch.base)) - scp->prefetch.base = *base; + scp->prefetch.base = *base; if (LargeIntegerGreaterThan(thyper, scp->prefetch.end)) - scp->prefetch.end = thyper; + scp->prefetch.end = thyper; } scp->flags &= ~CM_SCACHEFLAG_PREFETCHING; } @@ -491,9 +498,9 @@ void cm_BkgPrefetch(cm_scache_t *scp, long p1, long p2, long p3, long p4, cm_user_t *userp) { long length; - osi_hyper_t base; - long code; - cm_buf_t *bp; + osi_hyper_t base; + long code; + cm_buf_t *bp; int cpff = 0; /* cleared prefetch flag */ cm_req_t req; @@ -501,26 +508,27 @@ void cm_BkgPrefetch(cm_scache_t *scp, long p1, long p2, long p3, long p4, req.flags |= CM_REQ_NORETRY; base.LowPart = p1; - base.HighPart = p2; - length = p3; + base.HighPart = p2; + length = p3; osi_Log2(afsd_logp, "Starting BKG prefetch vp 0x%x, base 0x%x", scp, p1); - code = buf_Get(scp, &base, &bp); + code = buf_Get(scp, &base, &bp); lock_ObtainMutex(&scp->mx); - if (code || (bp->cmFlags & CM_BUF_CMFETCHING)) { + if (code || (bp->cmFlags & CM_BUF_CMFETCHING)) { scp->flags &= ~CM_SCACHEFLAG_PREFETCHING; lock_ReleaseMutex(&scp->mx); return; } - code = cm_GetBuffer(scp, bp, &cpff, userp, &req); - if (!cpff) cm_ClearPrefetchFlag(code, scp, &base); + code = cm_GetBuffer(scp, bp, &cpff, userp, &req); + if (!cpff) + cm_ClearPrefetchFlag(code, scp, &base); lock_ReleaseMutex(&scp->mx); - buf_Release(bp); - return; + buf_Release(bp); + return; } /* a read was issued to offsetp, and we have to determine whether we should @@ -530,40 +538,40 @@ void cm_ConsiderPrefetch(cm_scache_t *scp, osi_hyper_t *offsetp, cm_user_t *userp, cm_req_t *reqp) { long code; - osi_hyper_t realBase; - osi_hyper_t readBase; + osi_hyper_t realBase; + osi_hyper_t readBase; - readBase = *offsetp; + readBase = *offsetp; /* round up to chunk boundary */ readBase.LowPart += (cm_chunkSize-1); readBase.LowPart &= (-cm_chunkSize); lock_ObtainMutex(&scp->mx); if ((scp->flags & CM_SCACHEFLAG_PREFETCHING) - || LargeIntegerLessThanOrEqualTo(readBase, scp->prefetch.base)) { + || LargeIntegerLessThanOrEqualTo(readBase, scp->prefetch.base)) { lock_ReleaseMutex(&scp->mx); - return; + return; } scp->flags |= CM_SCACHEFLAG_PREFETCHING; /* start the scan at the latter of the end of this read or - * the end of the last fetched region. - */ + * the end of the last fetched region. + */ if (LargeIntegerGreaterThan(scp->prefetch.end, readBase)) - readBase = scp->prefetch.end; + readBase = scp->prefetch.end; - lock_ReleaseMutex(&scp->mx); + lock_ReleaseMutex(&scp->mx); + code = cm_CheckFetchRange(scp, &readBase, cm_chunkSize, userp, reqp, + &realBase); + if (code) + return; /* can't find something to prefetch */ - code = cm_CheckFetchRange(scp, &readBase, cm_chunkSize, userp, reqp, - &realBase); - if (code) return; /* can't find something to prefetch */ + osi_Log2(afsd_logp, "BKG Prefetch request vp 0x%x, base 0x%x", + scp, realBase.LowPart); - osi_Log2(afsd_logp, "BKG Prefetch request vp 0x%x, base 0x%x", - scp, realBase.LowPart); - - cm_QueueBKGRequest(scp, cm_BkgPrefetch, realBase.LowPart, - realBase.HighPart, cm_chunkSize, 0, userp); + cm_QueueBKGRequest(scp, cm_BkgPrefetch, realBase.LowPart, + realBase.HighPart, cm_chunkSize, 0, userp); } /* scp must be locked; temporarily unlocked during processing. @@ -580,23 +588,23 @@ void cm_ConsiderPrefetch(cm_scache_t *scp, osi_hyper_t *offsetp, long cm_SetupStoreBIOD(cm_scache_t *scp, osi_hyper_t *inOffsetp, long inSize, cm_bulkIO_t *biop, cm_user_t *userp, cm_req_t *reqp) { - cm_buf_t *bufp; - osi_queueData_t *qdp; - osi_hyper_t thyper; - osi_hyper_t tbase; - osi_hyper_t scanStart; /* where to start scan for dirty pages */ - osi_hyper_t scanEnd; /* where to stop scan for dirty pages */ - osi_hyper_t firstModOffset; /* offset of first modified page in range */ - long temp; - long code; - long flags; /* flags to cm_SyncOp */ + cm_buf_t *bufp; + osi_queueData_t *qdp; + osi_hyper_t thyper; + osi_hyper_t tbase; + osi_hyper_t scanStart; /* where to start scan for dirty pages */ + osi_hyper_t scanEnd; /* where to stop scan for dirty pages */ + osi_hyper_t firstModOffset; /* offset of first modified page in range */ + long temp; + long code; + long flags; /* flags to cm_SyncOp */ /* clear things out */ biop->scp = scp; /* don't hold */ - biop->offset = *inOffsetp; - biop->length = 0; - biop->bufListp = NULL; - biop->bufListEndp = NULL; + biop->offset = *inOffsetp; + biop->length = 0; + biop->bufListp = NULL; + biop->bufListEndp = NULL; biop->reserved = 0; /* reserve a chunk's worth of buffers */ @@ -604,14 +612,14 @@ long cm_SetupStoreBIOD(cm_scache_t *scp, osi_hyper_t *inOffsetp, long inSize, buf_ReserveBuffers(cm_chunkSize / buf_bufferSize); lock_ObtainMutex(&scp->mx); - bufp = NULL; - for(temp = 0; temp < inSize; temp += buf_bufferSize, bufp = NULL) { + bufp = NULL; + for(temp = 0; temp < inSize; temp += buf_bufferSize, bufp = NULL) { thyper.HighPart = 0; thyper.LowPart = temp; - tbase = LargeIntegerAdd(*inOffsetp, thyper); - - bufp = buf_Find(scp, &tbase); - if (bufp) { + tbase = LargeIntegerAdd(*inOffsetp, thyper); + + bufp = buf_Find(scp, &tbase); + if (bufp) { /* get buffer mutex and scp mutex safely */ lock_ReleaseMutex(&scp->mx); lock_ObtainMutex(&bufp->mx); @@ -622,34 +630,33 @@ long cm_SetupStoreBIOD(cm_scache_t *scp, osi_hyper_t *inOffsetp, long inSize, | CM_SCACHESYNC_STOREDATA | CM_SCACHESYNC_BUFLOCKED; code = cm_SyncOp(scp, bufp, userp, reqp, 0, flags); - if (code) { + if (code) { lock_ReleaseMutex(&bufp->mx); - buf_Release(bufp); - buf_UnreserveBuffers(cm_chunkSize - / buf_bufferSize); - return code; - } + buf_Release(bufp); + buf_UnreserveBuffers(cm_chunkSize / buf_bufferSize); + return code; + } /* if the buffer is dirty, we're done */ - if (bufp->flags & CM_BUF_DIRTY) { - osi_assertx(!(bufp->flags & CM_BUF_WRITING), - "WRITING w/o CMSTORING in SetupStoreBIOD"); + if (bufp->flags & CM_BUF_DIRTY) { + osi_assertx(!(bufp->flags & CM_BUF_WRITING), + "WRITING w/o CMSTORING in SetupStoreBIOD"); bufp->flags |= CM_BUF_WRITING; break; - } + } /* this buffer is clean, so there's no reason to process it */ cm_SyncOpDone(scp, bufp, flags); lock_ReleaseMutex(&bufp->mx); buf_Release(bufp); - } } + } biop->reserved = 1; - /* if we get here, if bufp is null, we didn't find any dirty buffers + /* if we get here, if bufp is null, we didn't find any dirty buffers * that weren't already being stored back, so we just quit now. - */ + */ if (!bufp) { return 0; } @@ -658,136 +665,138 @@ long cm_SetupStoreBIOD(cm_scache_t *scp, osi_hyper_t *inOffsetp, long inSize, lock_ReleaseMutex(&bufp->mx); /* put this element in the list */ - qdp = osi_QDAlloc(); - osi_SetQData(qdp, bufp); + qdp = osi_QDAlloc(); + osi_SetQData(qdp, bufp); /* don't have to hold bufp, since held by buf_Find above */ - osi_QAddH((osi_queue_t **) &biop->bufListp, - (osi_queue_t **) &biop->bufListEndp, - &qdp->q); - biop->length = buf_bufferSize; - firstModOffset = bufp->offset; - biop->offset = firstModOffset; + osi_QAddH((osi_queue_t **) &biop->bufListp, + (osi_queue_t **) &biop->bufListEndp, + &qdp->q); + biop->length = buf_bufferSize; + firstModOffset = bufp->offset; + biop->offset = firstModOffset; /* compute the window surrounding *inOffsetp of size cm_chunkSize */ scanStart = *inOffsetp; - scanStart.LowPart &= (-cm_chunkSize); + scanStart.LowPart &= (-cm_chunkSize); thyper.LowPart = cm_chunkSize; - thyper.HighPart = 0; + thyper.HighPart = 0; scanEnd = LargeIntegerAdd(scanStart, thyper); flags = CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS - | CM_SCACHESYNC_STOREDATA - | CM_SCACHESYNC_BUFLOCKED - | CM_SCACHESYNC_NOWAIT; + | CM_SCACHESYNC_STOREDATA + | CM_SCACHESYNC_BUFLOCKED + | CM_SCACHESYNC_NOWAIT; /* start by looking backwards until scanStart */ thyper.HighPart = 0; /* hyper version of buf_bufferSize */ - thyper.LowPart = buf_bufferSize; + thyper.LowPart = buf_bufferSize; tbase = LargeIntegerSubtract(firstModOffset, thyper); - while(LargeIntegerGreaterThanOrEqualTo(tbase, scanStart)) { - /* see if we can find the buffer */ + while(LargeIntegerGreaterThanOrEqualTo(tbase, scanStart)) { + /* see if we can find the buffer */ bufp = buf_Find(scp, &tbase); - if (!bufp) break; + if (!bufp) + break; /* try to lock it, and quit if we can't (simplifies locking) */ - code = lock_TryMutex(&bufp->mx); - if (code == 0) { + code = lock_TryMutex(&bufp->mx); + if (code == 0) { buf_Release(bufp); - break; - } + break; + } - code = cm_SyncOp(scp, bufp, userp, reqp, 0, flags); - if (code) { + code = cm_SyncOp(scp, bufp, userp, reqp, 0, flags); + if (code) { lock_ReleaseMutex(&bufp->mx); buf_Release(bufp); - break; - } + break; + } if (!(bufp->flags & CM_BUF_DIRTY)) { /* buffer is clean, so we shouldn't add it */ cm_SyncOpDone(scp, bufp, flags); lock_ReleaseMutex(&bufp->mx); buf_Release(bufp); - break; - } + break; + } /* don't need buffer mutex any more */ lock_ReleaseMutex(&bufp->mx); - /* we have a dirty buffer ready for storing. Add it to the tail - * of the list, since it immediately precedes all of the disk - * addresses we've already collected. - */ + /* we have a dirty buffer ready for storing. Add it to the tail + * of the list, since it immediately precedes all of the disk + * addresses we've already collected. + */ qdp = osi_QDAlloc(); - osi_SetQData(qdp, bufp); - /* no buf_hold necessary, since we have it held from buf_Find */ - osi_QAddT((osi_queue_t **) &biop->bufListp, - (osi_queue_t **) &biop->bufListEndp, - &qdp->q); + osi_SetQData(qdp, bufp); + /* no buf_hold necessary, since we have it held from buf_Find */ + osi_QAddT((osi_queue_t **) &biop->bufListp, + (osi_queue_t **) &biop->bufListEndp, + &qdp->q); /* update biod info describing the transfer */ - biop->offset = LargeIntegerSubtract(biop->offset, thyper); - biop->length += buf_bufferSize; - - /* update loop pointer */ - tbase = LargeIntegerSubtract(tbase, thyper); - } /* while loop looking for pages preceding the one we found */ + biop->offset = LargeIntegerSubtract(biop->offset, thyper); + biop->length += buf_bufferSize; + + /* update loop pointer */ + tbase = LargeIntegerSubtract(tbase, thyper); + } /* while loop looking for pages preceding the one we found */ /* now, find later dirty, contiguous pages, and add them to the list */ thyper.HighPart = 0; /* hyper version of buf_bufferSize */ - thyper.LowPart = buf_bufferSize; + thyper.LowPart = buf_bufferSize; tbase = LargeIntegerAdd(firstModOffset, thyper); - while(LargeIntegerLessThan(tbase, scanEnd)) { + while(LargeIntegerLessThan(tbase, scanEnd)) { /* see if we can find the buffer */ bufp = buf_Find(scp, &tbase); - if (!bufp) break; + if (!bufp) + break; /* try to lock it, and quit if we can't (simplifies locking) */ - code = lock_TryMutex(&bufp->mx); - if (code == 0) { + code = lock_TryMutex(&bufp->mx); + if (code == 0) { buf_Release(bufp); - break; - } - - code = cm_SyncOp(scp, bufp, userp, reqp, 0, flags); - if (code) { + break; + } + + code = cm_SyncOp(scp, bufp, userp, reqp, 0, flags); + if (code) { lock_ReleaseMutex(&bufp->mx); buf_Release(bufp); - break; - } + break; + } if (!(bufp->flags & CM_BUF_DIRTY)) { /* buffer is clean, so we shouldn't add it */ cm_SyncOpDone(scp, bufp, flags); lock_ReleaseMutex(&bufp->mx); buf_Release(bufp); - break; - } + break; + } /* don't need buffer mutex any more */ lock_ReleaseMutex(&bufp->mx); - /* we have a dirty buffer ready for storing. Add it to the head - * of the list, since it immediately follows all of the disk - * addresses we've already collected. - */ + /* we have a dirty buffer ready for storing. Add it to the head + * of the list, since it immediately follows all of the disk + * addresses we've already collected. + */ qdp = osi_QDAlloc(); - osi_SetQData(qdp, bufp); - /* no buf_hold necessary, since we have it held from buf_Find */ - osi_QAddH((osi_queue_t **) &biop->bufListp, - (osi_queue_t **) &biop->bufListEndp, - &qdp->q); + osi_SetQData(qdp, bufp); + /* no buf_hold necessary, since we have it held from buf_Find */ + osi_QAddH((osi_queue_t **) &biop->bufListp, + (osi_queue_t **) &biop->bufListEndp, + &qdp->q); /* update biod info describing the transfer */ - biop->length += buf_bufferSize; + biop->length += buf_bufferSize; - /* update loop pointer */ - tbase = LargeIntegerAdd(tbase, thyper); - } /* while loop looking for pages following the first page we found */ + /* update loop pointer */ + tbase = LargeIntegerAdd(tbase, thyper); + } /* while loop looking for pages following the first page we found */ - /* finally, we're done */ - return 0; + /* finally, we're done */ + return 0; } /* scp must be locked; temporarily unlocked during processing. @@ -799,39 +808,40 @@ long cm_SetupFetchBIOD(cm_scache_t *scp, osi_hyper_t *offsetp, cm_bulkIO_t *biop, cm_user_t *up, cm_req_t *reqp) { long code; - cm_buf_t *tbp; - osi_hyper_t toffset; /* a long long temp variable */ - osi_hyper_t pageBase; /* base offset we're looking at */ - osi_queueData_t *qdp; /* one temp queue structure */ - osi_queueData_t *tqdp; /* another temp queue structure */ - long collected; /* how many bytes have been collected */ - int isFirst; - long flags; - osi_hyper_t fileSize; /* the # of bytes in the file */ - osi_queueData_t *heldBufListp; /* we hold all buffers in this list */ - osi_queueData_t *heldBufListEndp; /* first one */ + cm_buf_t *tbp; + osi_hyper_t toffset; /* a long long temp variable */ + osi_hyper_t pageBase; /* base offset we're looking at */ + osi_queueData_t *qdp; /* one temp queue structure */ + osi_queueData_t *tqdp; /* another temp queue structure */ + long collected; /* how many bytes have been collected */ + int isFirst; + long flags; + osi_hyper_t fileSize; /* the # of bytes in the file */ + osi_queueData_t *heldBufListp; /* we hold all buffers in this list */ + osi_queueData_t *heldBufListEndp; /* first one */ int reserving; - - biop->scp = scp; - biop->offset = *offsetp; + + biop->scp = scp; + biop->offset = *offsetp; /* null out the list of buffers */ - biop->bufListp = biop->bufListEndp = NULL; + biop->bufListp = biop->bufListEndp = NULL; biop->reserved = 0; /* first lookup the file's length, so we know when to stop */ - code = cm_SyncOp(scp, NULL, up, reqp, 0, CM_SCACHESYNC_NEEDCALLBACK - | CM_SCACHESYNC_GETSTATUS); - if (code) return code; + code = cm_SyncOp(scp, NULL, up, reqp, 0, CM_SCACHESYNC_NEEDCALLBACK + | CM_SCACHESYNC_GETSTATUS); + if (code) + return code; /* copy out size, since it may change */ - fileSize = scp->serverLength; + fileSize = scp->serverLength; - lock_ReleaseMutex(&scp->mx); + lock_ReleaseMutex(&scp->mx); pageBase = *offsetp; - collected = pageBase.LowPart & (cm_chunkSize - 1); - heldBufListp = NULL; - heldBufListEndp = NULL; + collected = pageBase.LowPart & (cm_chunkSize - 1); + heldBufListp = NULL; + heldBufListEndp = NULL; /* * Obtaining buffers can cause dirty buffers to be recycled, which @@ -853,17 +863,17 @@ long cm_SetupFetchBIOD(cm_scache_t *scp, osi_hyper_t *offsetp, */ /* first hold all buffers, since we can't hold any locks in buf_Get */ - while (1) { + while (1) { /* stop at chunk boundary */ if (collected >= cm_chunkSize) break; - /* see if the next page would be past EOF */ - if (LargeIntegerGreaterThanOrEqualTo(pageBase, fileSize)) break; + /* see if the next page would be past EOF */ + if (LargeIntegerGreaterThanOrEqualTo(pageBase, fileSize)) break; lock_ObtainMutex(&cm_bufGetMutex); code = buf_Get(scp, &pageBase, &tbp); - if (code) { + if (code) { lock_ReleaseMutex(&cm_bufGetMutex); lock_ObtainMutex(&scp->mx); return code; @@ -873,57 +883,61 @@ long cm_SetupFetchBIOD(cm_scache_t *scp, osi_hyper_t *offsetp, lock_ReleaseMutex(&cm_bufGetMutex); - toffset.HighPart = 0; - toffset.LowPart = buf_bufferSize; - pageBase = LargeIntegerAdd(toffset, pageBase); + toffset.HighPart = 0; + toffset.LowPart = buf_bufferSize; + pageBase = LargeIntegerAdd(toffset, pageBase); collected += buf_bufferSize; - } + } - /* reserve a chunk's worth of buffers if possible */ + /* reserve a chunk's worth of buffers if possible */ reserving = buf_TryReserveBuffers(cm_chunkSize / buf_bufferSize); pageBase = *offsetp; - collected = pageBase.LowPart & (cm_chunkSize - 1); + collected = pageBase.LowPart & (cm_chunkSize - 1); /* now hold all buffers, if they are still there */ - while (1) { + while (1) { /* stop at chunk boundary */ - if (collected >= cm_chunkSize) break; + if (collected >= cm_chunkSize) + break; - /* see if the next page would be past EOF */ - if (LargeIntegerGreaterThanOrEqualTo(pageBase, fileSize)) break; + /* see if the next page would be past EOF */ + if (LargeIntegerGreaterThanOrEqualTo(pageBase, fileSize)) + break; - tbp = buf_Find(scp, &pageBase); - if (!tbp) break; + tbp = buf_Find(scp, &pageBase); + if (!tbp) + break; - /* add the buffer to the list */ + /* add the buffer to the list */ qdp = osi_QDAlloc(); - osi_SetQData(qdp, tbp); - osi_QAdd((osi_queue_t **)&heldBufListp, &qdp->q); - if (!heldBufListEndp) heldBufListEndp = qdp; + osi_SetQData(qdp, tbp); + osi_QAdd((osi_queue_t **)&heldBufListp, &qdp->q); + if (!heldBufListEndp) heldBufListEndp = qdp; /* leave tbp held (from buf_Get) */ - if (!reserving) break; + if (!reserving) + break; - collected += buf_bufferSize; - toffset.HighPart = 0; - toffset.LowPart = buf_bufferSize; - pageBase = LargeIntegerAdd(toffset, pageBase); - } + collected += buf_bufferSize; + toffset.HighPart = 0; + toffset.LowPart = buf_bufferSize; + pageBase = LargeIntegerAdd(toffset, pageBase); + } - /* look at each buffer, adding it into the list if it looks idle and + /* look at each buffer, adding it into the list if it looks idle and * filled with old data. One special case: wait for idle if it is the * first buffer since we really need that one for our caller to make * any progress. - */ - isFirst = 1; - collected = 0; /* now count how many we'll really use */ + */ + isFirst = 1; + collected = 0; /* now count how many we'll really use */ for(tqdp = heldBufListEndp; - tqdp; + tqdp; tqdp = (osi_queueData_t *) osi_QPrev(&tqdp->q)) { /* get a ptr to the held buffer */ tbp = osi_GetQData(tqdp); - pageBase = tbp->offset; + pageBase = tbp->offset; /* now lock the buffer lock */ lock_ObtainMutex(&tbp->mx); @@ -933,79 +947,81 @@ long cm_SetupFetchBIOD(cm_scache_t *scp, osi_hyper_t *offsetp, if (tbp->dataVersion == scp->dataVersion) { /* we don't need this buffer, since it is current */ lock_ReleaseMutex(&scp->mx); - lock_ReleaseMutex(&tbp->mx); - break; - } + lock_ReleaseMutex(&tbp->mx); + break; + } flags = CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_FETCHDATA | CM_SCACHESYNC_BUFLOCKED; - if (!isFirst) flags |= CM_SCACHESYNC_NOWAIT; + if (!isFirst) + flags |= CM_SCACHESYNC_NOWAIT; /* wait for the buffer to serialize, if required. Doesn't * release the scp or buffer lock(s) if NOWAIT is specified. - */ + */ code = cm_SyncOp(scp, tbp, up, reqp, 0, flags); - if (code) { + if (code) { lock_ReleaseMutex(&scp->mx); lock_ReleaseMutex(&tbp->mx); - break; + break; } /* don't fetch over dirty buffers */ - if (tbp->flags & CM_BUF_DIRTY) { + if (tbp->flags & CM_BUF_DIRTY) { cm_SyncOpDone(scp, tbp, flags); lock_ReleaseMutex(&scp->mx); - lock_ReleaseMutex(&tbp->mx); - break; + lock_ReleaseMutex(&tbp->mx); + break; } /* Release locks */ lock_ReleaseMutex(&scp->mx); lock_ReleaseMutex(&tbp->mx); - /* add the buffer to the list */ + /* add the buffer to the list */ qdp = osi_QDAlloc(); - osi_SetQData(qdp, tbp); - osi_QAdd((osi_queue_t **)&biop->bufListp, &qdp->q); - if (!biop->bufListEndp) biop->bufListEndp = qdp; + osi_SetQData(qdp, tbp); + osi_QAdd((osi_queue_t **)&biop->bufListp, &qdp->q); + if (!biop->bufListEndp) + biop->bufListEndp = qdp; buf_Hold(tbp); /* from now on, a failure just stops our collection process, but - * we still do the I/O to whatever we've already managed to collect. - */ - isFirst = 0; - collected += buf_bufferSize; - } + * we still do the I/O to whatever we've already managed to collect. + */ + isFirst = 0; + collected += buf_bufferSize; + } - /* now, we've held in biop->bufListp all the buffer's we're really + /* now, we've held in biop->bufListp all the buffer's we're really * interested in. We also have holds left from heldBufListp, and we * now release those holds on the buffers. - */ + */ for(qdp = heldBufListp; qdp; qdp = tqdp) { tqdp = (osi_queueData_t *) osi_QNext(&qdp->q); tbp = osi_GetQData(qdp); - osi_QDFree(qdp); - buf_Release(tbp); - } + osi_QDFree(qdp); + buf_Release(tbp); + } /* Caller expects this */ lock_ObtainMutex(&scp->mx); /* if we got a failure setting up the first buffer, then we don't have - * any side effects yet, and we also have failed an operation that the - * caller requires to make any progress. Give up now. - */ - if (code && isFirst) { + * any side effects yet, and we also have failed an operation that the + * caller requires to make any progress. Give up now. + */ + if (code && isFirst) { buf_UnreserveBuffers(cm_chunkSize / buf_bufferSize); return code; } - /* otherwise, we're still OK, and should just return the I/O setup we've - * got. - */ + /* otherwise, we're still OK, and should just return the I/O setup we've + * got. + */ biop->length = collected; biop->reserved = reserving; - return 0; + return 0; } /* release a bulk I/O structure that was setup by cm_SetupFetchBIOD or by @@ -1014,53 +1030,53 @@ long cm_SetupFetchBIOD(cm_scache_t *scp, osi_hyper_t *offsetp, void cm_ReleaseBIOD(cm_bulkIO_t *biop, int isStore) { cm_scache_t *scp; - cm_buf_t *bufp; - osi_queueData_t *qdp; - osi_queueData_t *nqdp; - int flags; + cm_buf_t *bufp; + osi_queueData_t *qdp; + osi_queueData_t *nqdp; + int flags; /* Give back reserved buffers */ if (biop->reserved) buf_UnreserveBuffers(cm_chunkSize / buf_bufferSize); flags = CM_SCACHESYNC_NEEDCALLBACK; - if (isStore) - flags |= CM_SCACHESYNC_STOREDATA; + if (isStore) + flags |= CM_SCACHESYNC_STOREDATA; else flags |= CM_SCACHESYNC_FETCHDATA; scp = biop->scp; - for(qdp = biop->bufListp; qdp; qdp = nqdp) { + for(qdp = biop->bufListp; qdp; qdp = nqdp) { /* lookup next guy first, since we're going to free this one */ nqdp = (osi_queueData_t *) osi_QNext(&qdp->q); /* extract buffer and free queue data */ - bufp = osi_GetQData(qdp); - osi_QDFree(qdp); - - /* now, mark I/O as done, unlock the buffer and release it */ + bufp = osi_GetQData(qdp); + osi_QDFree(qdp); + + /* now, mark I/O as done, unlock the buffer and release it */ lock_ObtainMutex(&bufp->mx); lock_ObtainMutex(&scp->mx); - cm_SyncOpDone(scp, bufp, flags); + cm_SyncOpDone(scp, bufp, flags); lock_ReleaseMutex(&scp->mx); /* turn off writing and wakeup users */ - if (isStore) { - if (bufp->flags & CM_BUF_WAITING) { + if (isStore) { + if (bufp->flags & CM_BUF_WAITING) { osi_Wakeup((long) bufp); - } + } bufp->flags &= ~(CM_BUF_WAITING | CM_BUF_WRITING - | CM_BUF_DIRTY); - } - - lock_ReleaseMutex(&bufp->mx); - buf_Release(bufp); + | CM_BUF_DIRTY); } - - /* clean things out */ - biop->bufListp = NULL; - biop->bufListEndp = NULL; -} + + lock_ReleaseMutex(&bufp->mx); + buf_Release(bufp); + } + + /* clean things out */ + biop->bufListp = NULL; + biop->bufListEndp = NULL; +} /* Fetch a buffer. Called with scp locked. * The scp is locked on return. @@ -1069,26 +1085,26 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up, cm_req_t *reqp) { long code; - long nbytes; /* bytes in transfer */ - long rbytes; /* bytes in rx_Read call */ - long temp; - AFSFetchStatus afsStatus; - AFSCallBack callback; - AFSVolSync volSync; - char *bufferp; - cm_buf_t *tbufp; /* buf we're filling */ - osi_queueData_t *qdp; /* q element we're scanning */ - AFSFid tfid; - struct rx_call *callp; - cm_bulkIO_t biod; /* bulk IO descriptor */ - cm_conn_t *connp; + long nbytes; /* bytes in transfer */ + long rbytes; /* bytes in rx_Read call */ + long temp; + AFSFetchStatus afsStatus; + AFSCallBack callback; + AFSVolSync volSync; + char *bufferp; + cm_buf_t *tbufp; /* buf we're filling */ + osi_queueData_t *qdp; /* q element we're scanning */ + AFSFid tfid; + struct rx_call *callp; + cm_bulkIO_t biod; /* bulk IO descriptor */ + cm_conn_t *connp; int getroot; long t1, t2; - /* 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 - * buffer, although more likely it will just return a new, empty, buffer. - */ + /* 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 + * buffer, although more likely it will just return a new, empty, buffer. + */ #ifdef AFS_FREELANCE_CLIENT @@ -1096,7 +1112,9 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up, // handle it differently, since it's local rather than on any // server - getroot = (scp==cm_rootSCachep) ; + getroot = (scp==cm_rootSCachep); + if (getroot) + osi_Log1(afsd_logp,"GetBuffer returns cm_rootSCachep=%x",cm_rootSCachep); #endif cm_AFSFidFromFid(&tfid, &scp->fid); @@ -1105,23 +1123,23 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up, if (code) { /* couldn't even get the first page setup properly */ osi_Log1(afsd_logp, "SetupFetchBIOD failure code %d", code); - return code; + return code; } - /* once we get here, we have the callback in place, we know that no one + /* once we get here, we have the callback in place, we know that no one * is fetching the data now. Check one last time that we still have * the wrong data, and then fetch it if we're still wrong. * - * We can lose a race condition and end up with biod.length zero, in + * We can lose a race condition and end up with biod.length zero, in * which case we just retry. - */ - if (bufp->dataVersion == scp->dataVersion || biod.length == 0) { + */ + if (bufp->dataVersion == scp->dataVersion || biod.length == 0) { osi_Log3(afsd_logp, "Bad DVs %d, %d or length 0x%x", - bufp->dataVersion, scp->dataVersion, biod.length); + bufp->dataVersion, scp->dataVersion, biod.length); if ((bufp->dataVersion == -1 || bufp->dataVersion < scp->dataVersion) - && LargeIntegerGreaterThanOrEqualTo(bufp->offset, - scp->serverLength)) { + && LargeIntegerGreaterThanOrEqualTo(bufp->offset, + scp->serverLength)) { if (bufp->dataVersion == -1) memset(bufp->datap, 0, buf_bufferSize); bufp->dataVersion = scp->dataVersion; @@ -1129,14 +1147,14 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up, lock_ReleaseMutex(&scp->mx); cm_ReleaseBIOD(&biod, 0); lock_ObtainMutex(&scp->mx); - return 0; - } + return 0; + } - lock_ReleaseMutex(&scp->mx); + lock_ReleaseMutex(&scp->mx); #ifdef DISKCACHE95 - DPRINTF("cm_GetBuffer: fetching data scpDV=%d bufDV=%d scp=%x bp=%x dcp=%x\n", - scp->dataVersion, bufp->dataVersion, scp, bufp, bufp->dcp); + DPRINTF("cm_GetBuffer: fetching data scpDV=%d bufDV=%d scp=%x bp=%x dcp=%x\n", + scp->dataVersion, bufp->dataVersion, scp, bufp, bufp->dcp); #endif /* DISKCACHE95 */ #ifdef AFS_FREELANCE_CLIENT @@ -1172,9 +1190,6 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up, // 0. lock_ObtainMutex(&cm_Freelance_Lock); -#ifdef DEBUG - afsi_log("bufp->offset is %d", bufp->offset); -#endif t1 = bufp->offset.LowPart; qdp = biod.bufListEndp; while (qdp) { @@ -1183,9 +1198,6 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up, memset(bufferp, 0, buf_bufferSize); t2 = cm_fakeDirSize - t1; if (t2>buf_bufferSize) t2=buf_bufferSize; -#ifdef DEBUG - afsi_log("t1:%d, t2:%d", t1, t2); -#endif if (t2 > 0) { memcpy(bufferp, cm_FakeRootDir+t1, t2); } else { @@ -1207,53 +1219,57 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up, #endif /* AFS_FREELANCE_CLIENT */ /* now make the call */ - do { + do { code = cm_Conn(&scp->fid, up, reqp, &connp); - if (code) continue; + if (code) + continue; callp = rx_NewCall(connp->callp); osi_Log3(afsd_logp, "CALL FetchData vp %x, off 0x%x, size 0x%x", - (long) scp, biod.offset.LowPart, biod.length); + (long) scp, biod.offset.LowPart, biod.length); - code = StartRXAFS_FetchData(callp, &tfid, biod.offset.LowPart, - biod.length); + code = StartRXAFS_FetchData(callp, &tfid, biod.offset.LowPart, + biod.length); /* now copy the data out of the pipe and put it in the buffer */ - temp = rx_Read(callp, &nbytes, 4); + temp = rx_Read(callp, (char *)&nbytes, 4); if (temp == 4) { nbytes = ntohl(nbytes); - if (nbytes > biod.length) code = -1; - } - else code = -1; + if (nbytes > biod.length) + code = (callp->error < 0) ? callp->error : -1; + } + else + code = (callp->error < 0) ? callp->error : -1; if (code == 0) { - qdp = biod.bufListEndp; - if (qdp) { + qdp = biod.bufListEndp; + if (qdp) { tbufp = osi_GetQData(qdp); - bufferp = tbufp->datap; - } - else bufferp = NULL; + bufferp = tbufp->datap; + } + else + bufferp = NULL; /* fill nbytes of data from the pipe into the pages. * When we stop, qdp will point at the last page we're * dealing with, and bufferp will tell us where we * stopped. We'll need this info below when we clear * the remainder of the last page out (and potentially - * clear later pages out, if we fetch past EOF). - */ - while(nbytes > 0) { + * clear later pages out, if we fetch past EOF). + */ + while(nbytes > 0) { /* assert that there are still more buffers; * our check above for nbytes being less than * biod.length should ensure this. - */ + */ osi_assert(bufferp != NULL); /* read rbytes of data */ - rbytes = (nbytes > buf_bufferSize? buf_bufferSize : nbytes); - temp = rx_Read(callp, bufferp, rbytes); - if (temp < rbytes) { - code = -1; - break; + rbytes = (nbytes > buf_bufferSize? buf_bufferSize : nbytes); + temp = rx_Read(callp, bufferp, rbytes); + if (temp < rbytes) { + code = (callp->error < 0) ? callp->error : -1; + break; } /* allow read-while-fetching. @@ -1269,83 +1285,90 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up, } if (cpffp && !*cpffp && !osi_QPrev(&qdp->q)) { *cpffp = 1; - cm_ClearPrefetchFlag(0, scp, - &biod.offset); + cm_ClearPrefetchFlag(0, scp, &biod.offset); } lock_ReleaseMutex(&scp->mx); /* and adjust counters */ - nbytes -= temp; + nbytes -= temp; - /* and move to the next buffer */ + /* and move to the next buffer */ if (nbytes != 0) { - qdp = (osi_queueData_t *) osi_QPrev(&qdp->q); - if (qdp) { + qdp = (osi_queueData_t *) osi_QPrev(&qdp->q); + if (qdp) { tbufp = osi_GetQData(qdp); - bufferp = tbufp->datap; - } - else bufferp = NULL; - } else bufferp += temp; - } - - /* zero out remainder of last pages, in case we are + bufferp = tbufp->datap; + } + else + bufferp = NULL; + } else + bufferp += temp; + } + + /* zero out remainder of last pages, in case we are * fetching past EOF. We were fetching an integral # * of pages, but stopped, potentially in the middle of * a page. Zero the remainder of that page, and then * all of the rest of the pages. - */ + */ /* bytes fetched */ - rbytes = bufferp - tbufp->datap; + rbytes = bufferp - tbufp->datap; /* bytes left to zero */ - rbytes = buf_bufferSize - rbytes; - while(qdp) { - if (rbytes != 0) + rbytes = buf_bufferSize - rbytes; + while(qdp) { + if (rbytes != 0) memset(bufferp, 0, rbytes); - qdp = (osi_queueData_t *) osi_QPrev(&qdp->q); - if (qdp == NULL) break; + qdp = (osi_queueData_t *) osi_QPrev(&qdp->q); + if (qdp == NULL) + break; tbufp = osi_GetQData(qdp); - bufferp = tbufp->datap; + bufferp = tbufp->datap; /* bytes to clear in this page */ rbytes = buf_bufferSize; - } + } } if (code == 0) code = EndRXAFS_FetchData(callp, &afsStatus, &callback, &volSync); - code = rx_EndCall(callp, code); - osi_Log0(afsd_logp, "CALL FetchData DONE"); - + else + osi_Log0(afsd_logp, "CALL EndRXAFS_FetchData skipped due to error"); + code = rx_EndCall(callp, code); + if (code == RXKADUNKNOWNKEY) + osi_Log0(afsd_logp, "CALL EndCall returns RXKADUNKNOWNKEY"); + osi_Log0(afsd_logp, "CALL FetchData DONE"); + } while (cm_Analyze(connp, up, reqp, &scp->fid, &volSync, NULL, code)); fetchingcompleted: - code = cm_MapRPCError(code, reqp); + code = cm_MapRPCError(code, reqp); - lock_ObtainMutex(&scp->mx); + lock_ObtainMutex(&scp->mx); /* we know that no one else has changed the buffer, since we still have * the fetching flag on the buffers, and we have the scp locked again. * Copy in the version # into the buffer if we got code 0 back from the * read. - */ + */ if (code == 0) { for(qdp = biod.bufListp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) { tbufp = osi_GetQData(qdp); - tbufp->dataVersion = afsStatus.DataVersion; + tbufp->dataVersion = afsStatus.DataVersion; #ifdef DISKCACHE95 - /* write buffer out to disk cache */ - diskcache_Update(tbufp->dcp, tbufp->datap, buf_bufferSize, - tbufp->dataVersion); + /* write buffer out to disk cache */ + diskcache_Update(tbufp->dcp, tbufp->datap, buf_bufferSize, + tbufp->dataVersion); #endif /* DISKCACHE95 */ - } } + } /* release scatter/gather I/O structure (buffers, locks) */ lock_ReleaseMutex(&scp->mx); cm_ReleaseBIOD(&biod, 0); lock_ObtainMutex(&scp->mx); - if (code == 0) cm_MergeStatus(scp, &afsStatus, &volSync, up, 0); + if (code == 0) + cm_MergeStatus(scp, &afsStatus, &volSync, up, 0); return code; } diff --git a/src/WINNT/afsd/cm_dns.c b/src/WINNT/afsd/cm_dns.c index e817fc294..81a3962ba 100644 --- a/src/WINNT/afsd/cm_dns.c +++ b/src/WINNT/afsd/cm_dns.c @@ -10,6 +10,7 @@ #include #include +#include #ifndef DJGPP #include #include @@ -18,6 +19,10 @@ #include "cm_dns.h" #include #include +#if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500) +#include +#define DNSAPI_ENV +#endif /*extern void afsi_log(char *pattern, ...);*/ @@ -40,6 +45,7 @@ void DNSlowerCase(char *str) int cm_InitDNS(int enabled) { +#ifndef DNSAPI_ENV char configpath[100]; int len; int code; @@ -79,11 +85,12 @@ int cm_InitDNS(int enabled) } else fprintf(stderr, "Found DNS server %s\n", dns_addr); } - +#endif /* DNSAPI_ENV */ cm_dnsEnabled = 1; return 0; } +#ifndef DNSAPI_ENV SOCKADDR_IN setSockAddr(char *server, int port) { SOCKADDR_IN sockAddr; @@ -481,7 +488,7 @@ void printReplyBuffer_AFSDB(PDNS_HDR replyBuff) }; -void processReplyBuffer_AFSDB(SOCKET commSock, PDNS_HDR replyBuff, int *cellHosts, int *numServers, int *ttl) +void processReplyBuffer_AFSDB(SOCKET commSock, PDNS_HDR replyBuff, int *cellHostAddrs, char cellHostNames[][MAXHOSTCHARS], int *numServers, int *ttl) /*PAFS_SRV_LIST (srvList)*/ { u_char *ptr = (u_char *) replyBuff; @@ -531,7 +538,9 @@ void processReplyBuffer_AFSDB(SOCKET commSock, PDNS_HDR replyBuff, int *cellHost #ifdef DEBUG fprintf(stderr, "processRep_AFSDB: resolved name %s to addr %x\n", hostName, addr); #endif /* DEBUG */ - memcpy(&cellHosts[srvCount], &addr.s_addr, sizeof(addr.s_addr)); + memcpy(&cellHostAddrs[srvCount], &addr.s_addr, sizeof(addr.s_addr)); + strncpy(cellHostNames[srvCount], hostName, MAXCELLCHARS); + cellHostNames[srvCount][MAXCELLCHARS-1] = '\0'; srvCount++; } else { @@ -582,9 +591,46 @@ u_char * processReplyBuffer_Addr(PDNS_HDR replyBuff) }; -int getAFSServer(char *cellName, int *cellHosts, int *numServers, int *ttl) +int DNSgetAddr(SOCKET commSock, char *hostName, struct in_addr *iNet) +{ + /* Variables for DNS message parsing and creation */ + PDNS_HDR pDNShdr; + + SOCKADDR_IN sockAddr; + char buffer[BUFSIZE]; + u_char *addr; + u_long *aPtr; + int rc; + + /********************** + * Get a DGRAM socket * + **********************/ + + sockAddr = setSockAddr(dns_addr, DNS_PORT); + + rc = send_DNS_Addr_Query(hostName,commSock,sockAddr, buffer); + if (rc < 0) return rc; + pDNShdr = get_DNS_Response(commSock,sockAddr, buffer); + if (pDNShdr == NULL) + return -1; + + addr = processReplyBuffer_Addr(pDNShdr); + if (addr == 0) + return -1; + + aPtr = (u_long *) addr; + + iNet->s_addr = *aPtr; + + return(0); +} +#endif /* DNSAPI_ENV */ + +int getAFSServer(char *cellName, int *cellHostAddrs, char cellHostNames[][MAXHOSTCHARS], + int *numServers, int *ttl) { - /*static AFS_SRV_LIST srvList; +#ifndef DNSAPI_ENV + /*static AFS_SRV_LIST srvList; static int ans = 0;*/ SOCKET commSock; SOCKADDR_IN sockAddr; @@ -596,7 +642,7 @@ int getAFSServer(char *cellName, int *cellHosts, int *numServers, int *ttl) fprintf(stderr, "getAFSServer: cell %s, cm_dnsEnabled=%d\n", cellName, cm_dnsEnabled); #endif -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x500 +#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500) if (cm_dnsEnabled == -1) { /* not yet initialized, eg when called by klog */ cm_InitDNS(1); /* assume enabled */ } @@ -637,7 +683,7 @@ int getAFSServer(char *cellName, int *cellHosts, int *numServers, int *ttl) /*printReplyBuffer_AFSDB(pDNShdr);*/ if (pDNShdr) - processReplyBuffer_AFSDB(commSock, pDNShdr, cellHosts, numServers, ttl); + processReplyBuffer_AFSDB(commSock, pDNShdr, cellHostAddrs, cellHostNames, numServers, ttl); else *numServers = 0; @@ -647,40 +693,83 @@ int getAFSServer(char *cellName, int *cellHosts, int *numServers, int *ttl) else return 0; -} - -int DNSgetAddr(SOCKET commSock, char *hostName, struct in_addr *iNet) -{ - /* Variables for DNS message parsing and creation */ - PDNS_HDR pDNShdr; - - SOCKADDR_IN sockAddr; - char buffer[BUFSIZE]; - u_char *addr; - u_long *aPtr; - int rc; - - /********************** - * Get a DGRAM socket * - **********************/ - - sockAddr = setSockAddr(dns_addr, DNS_PORT); - - rc = send_DNS_Addr_Query(hostName,commSock,sockAddr, buffer); - if (rc < 0) return rc; - pDNShdr = get_DNS_Response(commSock,sockAddr, buffer); - if (pDNShdr == NULL) - return -1; - - addr = processReplyBuffer_Addr(pDNShdr); - if (addr == 0) - return -1; - - aPtr = (u_long *) addr; - - iNet->s_addr = *aPtr; +#else /* DNSAPI_ENV */ + PDNS_RECORD pDnsCell, pDnsIter, pDnsVol,pDnsVolIter, pDnsCIter; + DWORD i; + struct sockaddr_in vlSockAddr; + + *numServers = 0; + *ttl = 0; + + /* query the AFSDB records of cell */ + if (DnsQuery_A(cellName, DNS_TYPE_AFSDB, DNS_QUERY_STANDARD, NULL, &pDnsCell, NULL) == ERROR_SUCCESS) { + + memset((void*) &vlSockAddr, 0, sizeof(vlSockAddr)); + + /* go through the returned records */ + for (pDnsIter = pDnsCell;pDnsIter; pDnsIter = pDnsIter->pNext) { + /* if we find an AFSDB record with Preference set to 1, we found a volserver */ + if (pDnsIter->wType == DNS_TYPE_AFSDB && pDnsIter->Data.Afsdb.wPreference == 1) { + strncpy(cellHostNames[*numServers], pDnsIter->Data.Afsdb.pNameExchange, MAXHOSTCHARS); + cellHostNames[*numServers][MAXHOSTCHARS-1]='\0'; + (*numServers)++; + + if (!*ttl) + *ttl = pDnsIter->dwTtl; + if (*numServers == AFSMAXCELLHOSTS) + break; + } + } + + for (i=0;i<*numServers;i++) + cellHostAddrs[i] = 0; + + /* now check if there are any A records in the results */ + for (pDnsIter = pDnsCell; pDnsIter; pDnsIter = pDnsIter->pNext) { + if(pDnsIter->wType == DNS_TYPE_A) + /* check if its for one of the volservers */ + for (i=0;i<*numServers;i++) + if(stricmp(pDnsIter->pName, cellHostNames[i]) == 0) + cellHostAddrs[i] = pDnsIter->Data.A.IpAddress; + } + + for (i=0;i<*numServers;i++) { + /* if we don't have an IP yet, then we should try resolving the volserver hostname + in a separate query. */ + if (!cellHostAddrs[i]) { + if (DnsQuery_A(cellHostNames[i], DNS_TYPE_A, DNS_QUERY_STANDARD, NULL, &pDnsVol, NULL) == ERROR_SUCCESS) { + for (pDnsVolIter = pDnsVol; pDnsVolIter; pDnsVolIter=pDnsVolIter->pNext) { + /* if we get an A record, keep it */ + if (pDnsVolIter->wType == DNS_TYPE_A && stricmp(cellHostNames[i], pDnsVolIter->pName)==0) { + cellHostAddrs[i] = pDnsVolIter->Data.A.IpAddress; + break; + } + /* if we get a CNAME, look for a corresponding A record */ + if (pDnsVolIter->wType == DNS_TYPE_CNAME && stricmp(cellHostNames[i], pDnsVolIter->pName)==0) { + for (pDnsCIter=pDnsVolIter; pDnsCIter; pDnsCIter=pDnsCIter->pNext) { + if (pDnsCIter->wType == DNS_TYPE_A && stricmp(pDnsVolIter->Data.CNAME.pNameHost, pDnsCIter->pName)==0) { + cellHostAddrs[i] = pDnsCIter->Data.A.IpAddress; + break; + } + } + if (cellHostAddrs[i]) + break; + /* TODO: if the additional section is missing, then do another lookup for the CNAME */ + } + } + /* we are done with the volserver lookup */ + DnsRecordListFree(pDnsVol, DnsFreeRecordListDeep); + } + } + } + DnsRecordListFree(pDnsCell, DnsFreeRecordListDeep); + } - return(0); + if ( *numServers > 0 ) + return 0; + else + return -1; +#endif /* DNSAPI_ENV */ } #endif /* AFS_AFSDB_ENV */ diff --git a/src/WINNT/afsd/cm_dns.h b/src/WINNT/afsd/cm_dns.h index 1e5d28c8a..6bfa381e7 100644 --- a/src/WINNT/afsd/cm_dns.h +++ b/src/WINNT/afsd/cm_dns.h @@ -13,7 +13,7 @@ /* this function will continue to return cell server names for the given cell, ending in null */ -int getAFSServer(char *cellname, int *cellHosts, int *numServers, int *ttl); +int getAFSServer(char *cellname, int *cellHostAddrs, char cellHostNames[][MAXHOSTCHARS], int *numServers, int *ttl); /* a supplement for the DJGPP gethostbyname ... which never bothers calling a DNS server ... so this function diff --git a/src/WINNT/afsd/cm_freelance.c b/src/WINNT/afsd/cm_freelance.c index 62ec62ec9..b3ed545f7 100644 --- a/src/WINNT/afsd/cm_freelance.c +++ b/src/WINNT/afsd/cm_freelance.c @@ -34,6 +34,12 @@ void cm_InitFakeRootDir(); void cm_InitFreelance() { +#ifdef COMMENT + while ( !IsDebuggerPresent() ) { + Sleep(1000); + } +#endif + lock_InitializeMutex(&cm_Freelance_Lock, "Freelance Lock"); // yj: first we make a call to cm_initLocalMountPoints @@ -103,8 +109,6 @@ void cm_InitFakeRootDir() { cm_FakeRootDir = malloc(dirSize); cm_fakeDirSize = dirSize; - - // yj: when we get here, we've figured out how much memory we need and // allocated the appropriate space for it. we now prceed to fill // it up with entries. @@ -223,14 +227,12 @@ void cm_InitFakeRootDir() { cm_fakeDirCallback=1; // when we get here, we've set up everything! done! - - } int cm_FakeRootFid(cm_fid_t *fidp) { fidp->cell = 0x1; /* root cell */ - fidp->volume = 0x20000001; /* root.afs ? */ + fidp->volume = AFS_FAKE_ROOT_VOL_ID; /* root.afs ? */ fidp->vnode = 0x1; fidp->unique = 0x1; return 0; @@ -261,16 +263,15 @@ int cm_reInitLocalMountPoints() { cm_scache_t *scp, **lscpp, *tscp; - printf("\n\n----- reinitialization starts ----- \n"); - + osi_Log0(afsd_logp,"----- freelance reinitialization starts ----- "); // first we invalidate all the SCPs that were created // for the local mount points - printf("Invalidating local mount point scp... "); + osi_Log0(afsd_logp,"Invalidating local mount point scp... "); aFid.cell = 0x1; - aFid.volume=0x20000001; + aFid.volume=AFS_FAKE_ROOT_VOL_ID; aFid.unique=0x1; aFid.vnode=0x2; @@ -307,33 +308,33 @@ int cm_reInitLocalMountPoints() { aFid.vnode = aFid.vnode + 1; } lock_ReleaseWrite(&cm_scacheLock); - printf("\tall old scp cleared!\n"); + osi_Log0(afsd_logp,"\tall old scp cleared!"); // we must free the memory that was allocated in the prev // cm_InitLocalMountPoints call - printf("Removing old localmountpoints... "); + osi_Log0(afsd_logp,"Removing old localmountpoints... "); free(cm_localMountPoints); - printf("\tall old localmountpoints cleared!\n"); + osi_Log0(afsd_logp,"\tall old localmountpoints cleared!"); // now re-init the localmountpoints - printf("Creating new localmountpoints... "); + osi_Log0(afsd_logp,"Creating new localmountpoints... "); cm_InitLocalMountPoints(); - printf("\tcreated new set of localmountpoints!\n"); + osi_Log0(afsd_logp,"\tcreated new set of localmountpoints!"); // now we have to free the memory allocated in cm_initfakerootdir - printf("Removing old fakedir... "); + osi_Log0(afsd_logp,"Removing old fakedir... "); free(cm_FakeRootDir); - printf("\t\told fakedir removed!\n"); + osi_Log0(afsd_logp,"\t\told fakedir removed!"); // then we re-create that dir - printf("Creating new fakedir... "); + osi_Log0(afsd_logp,"Creating new fakedir... "); cm_InitFakeRootDir(); - printf("\t\tcreated new fakedir!\n"); + osi_Log0(afsd_logp,"\t\tcreated new fakedir!"); lock_ReleaseMutex(&cm_Freelance_Lock); - printf("----- reinit complete -----\n\n"); + osi_Log0(afsd_logp,"----- freelance reinit complete -----"); return 0; } @@ -365,9 +366,7 @@ long cm_InitLocalMountPoints() { } // we successfully opened the file -#ifdef DEBUG - fprintf(stderr, "opened afs_freelance.ini\n"); -#endif + osi_Log0(afsd_logp,"opened afs_freelance.ini"); // now we read the first line to see how many entries // there are @@ -418,14 +417,12 @@ long cm_InitLocalMountPoints() { aLocalMountPoint->mountPointStringp=malloc(strlen(line) - (t-line) + 1); memcpy(aLocalMountPoint->mountPointStringp, t, strlen(line)-(t-line)-2); *(aLocalMountPoint->mountPointStringp + (strlen(line)-(t-line)-2)) = 0; -#ifdef DEBUG - fprintf(stderr, "found mount point: name %s, string %s\n", + + osi_Log2(afsd_logp,"found mount point: name %s, string %s", aLocalMountPoint->namep, aLocalMountPoint->mountPointStringp); -#endif - - aLocalMountPoint++; + aLocalMountPoint++; } fclose(fp); return 0; @@ -447,17 +444,25 @@ long cm_FreelanceAddMount(char *filename, char *cellname, char *volume, cm_fid_t char line[200]; char fullname[200]; int n; + int alias = 0; /* before adding, verify the cell name; if it is not a valid cell, - don't add the mount point */ + don't add the mount point. + allow partial matches as a means of poor man's alias. */ /* major performance issue? */ - if (!cm_GetCell_Gen(cellname, fullname, CM_FLAG_CREATE)) - return -1; -#if 0 - if (strcmp(cellname, fullname) != 0) /* no partial matches allowed */ - return -1; -#endif + osi_Log3(afsd_logp,"Freelance Add Mount request: filename=%s cellname=%s volume=%s", + filename, cellname, volume); + if (cellname[0] == '.') { + if (!cm_GetCell_Gen(&cellname[1], &fullname[1], CM_FLAG_CREATE)) + return -1; + fullname[0]='.'; + } else { + if (!cm_GetCell_Gen(cellname, fullname, CM_FLAG_CREATE)) + return -1; + } + osi_Log1(afsd_logp,"Freelance Adding Mount for Cell: %s", cellname); + lock_ObtainMutex(&cm_Freelance_Lock); cm_GetConfigDir(hfile); @@ -475,13 +480,13 @@ long cm_FreelanceAddMount(char *filename, char *cellname, char *volume, cm_fid_t fclose(fp); lock_ReleaseMutex(&cm_Freelance_Lock); - /*cm_reInitLocalMountPoints(&vnode);*/ + /* cm_reInitLocalMountPoints(); */ if (fidp) { fidp->unique = 1; fidp->vnode = cm_noLocalMountPoints + 1; /* vnode value of last mt pt */ } cm_noteLocalMountPointChange(); - + return 0; } diff --git a/src/WINNT/afsd/cm_freelance.h b/src/WINNT/afsd/cm_freelance.h index 63cfae539..9ff028db0 100644 --- a/src/WINNT/afsd/cm_freelance.h +++ b/src/WINNT/afsd/cm_freelance.h @@ -13,7 +13,10 @@ extern long cm_InitLocalMountPoints(); extern int cm_getLocalMountPointChange(); extern int cm_reInitLocalMountPoints(); extern cm_localMountPoint_t* cm_getLocalMountPoint(int vnode); +extern void cm_InitFreelance(); +extern long cm_FreelanceRemoveMount(char *toremove); +extern long cm_FreelanceAddMount(char *filename, char *cellname, char *volume, cm_fid_t *fidp); #define AFS_FREELANCE_INI "afs_freelance.ini" - +#define AFS_FAKE_ROOT_VOL_ID 0x00000001 #endif // _CM_FREELANCE_H diff --git a/src/WINNT/afsd/cm_ioctl.c b/src/WINNT/afsd/cm_ioctl.c index 57099b367..cb35ba25b 100644 --- a/src/WINNT/afsd/cm_ioctl.c +++ b/src/WINNT/afsd/cm_ioctl.c @@ -28,6 +28,7 @@ #include "afsd_init.h" #include "smb.h" +#include "cm_server.h" #ifndef DJGPP #include @@ -50,6 +51,7 @@ osi_mutex_t cm_Afsdsbmt_Lock; extern afs_int32 cryptall; +extern char cm_NetbiosName[]; void cm_InitIoctl(void) { @@ -136,28 +138,100 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, { long code; cm_scache_t *substRootp; + char * relativePath = ioctlp->inDatap; + + /* This is usually the file name, but for StatMountPoint it is the path. */ + /* ioctlp->inDatap can be either of the form: + * \path\. + * \path\file + * \\netbios-name\submount\path\. + * \\netbios-name\submount\path\file + */ + TranslateExtendedChars(relativePath); - /* This is usually the file name, but for StatMountPoint it is the path. */ - TranslateExtendedChars(ioctlp->inDatap); + if (relativePath[0] == relativePath[1] && + relativePath[1] == '\\' && + !_strnicmp(cm_NetbiosName,relativePath+2,strlen(cm_NetbiosName))) + { + char shareName[256]; + char *sharePath; + int shareFound, i; + + /* We may have found a UNC path. + * If the first component is the NetbiosName, + * then throw out the second component (the submount) + * since it had better expand into the value of ioctl->tidPathp + */ + char * p; + p = relativePath + 2 + strlen(cm_NetbiosName) + 1; + if ( !_strnicmp("all", p, 3) ) + p += 4; - code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, - CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, - userp, ioctlp->tidPathp, reqp, &substRootp); - if (code) return code; - - code = cm_NameI(substRootp, ioctlp->inDatap, CM_FLAG_FOLLOW, - userp, NULL, reqp, scpp); - if (code) return code; + for (i = 0; *p && *p != '\\'; i++,p++ ) { + shareName[i] = *p; + } + p++; /* skip past trailing slash */ + shareName[i] = 0; /* terminate string */ + + shareFound = smb_FindShare(ioctlp->fidp->vcp, ioctlp->uidp, shareName, &sharePath); + if ( shareFound ) { + /* we found a sharename, therefore use the resulting path */ + code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, + CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, sharePath, reqp, &substRootp); + free(sharePath); + if (code) return code; + + code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, NULL, reqp, scpp); + if (code) return code; + } else { + /* otherwise, treat the name as a cellname mounted off the afs root. + * This requires that we reconstruct the shareName string with + * leading and trailing slashes. + */ + p = relativePath + 2 + strlen(cm_NetbiosName) + 1; + if ( !_strnicmp("all", p, 3) ) + p += 4; + + shareName[0] = '/'; + for (i = 1; *p && *p != '\\'; i++,p++ ) { + shareName[i] = *p; + } + p++; /* skip past trailing slash */ + shareName[i++] = '/'; /* add trailing slash */ + shareName[i] = 0; /* terminate string */ + + + code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, + CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, shareName, reqp, &substRootp); + if (code) return code; + + code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, NULL, reqp, scpp); + if (code) return code; + } + } else { + code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, + CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, ioctlp->tidPathp, reqp, &substRootp); + if (code) return code; + code = cm_NameI(substRootp, relativePath, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, NULL, reqp, scpp); + if (code) return code; + } + /* # of bytes of path */ - code = strlen(ioctlp->inDatap) + 1; - ioctlp->inDatap += code; + code = strlen(ioctlp->inDatap) + 1; + ioctlp->inDatap += code; - /* This is usually nothing, but for StatMountPoint it is the file name. */ - TranslateExtendedChars(ioctlp->inDatap); + /* This is usually nothing, but for StatMountPoint it is the file name. */ + TranslateExtendedChars(ioctlp->inDatap); /* and return success */ - return 0; + return 0; } void cm_SkipIoctlPath(smb_ioctl_t *ioctlp) @@ -214,35 +288,101 @@ long cm_ParseIoctlParent(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp, cm_scache_t **scpp, char *leafp) { long code; - char tbuffer[1024]; - char *tp, *jp; + char tbuffer[1024]; + char *tp, *jp; cm_scache_t *substRootp; strcpy(tbuffer, ioctlp->inDatap); - tp = strrchr(tbuffer, '\\'); + tp = strrchr(tbuffer, '\\'); jp = strrchr(tbuffer, '/'); if (!tp) tp = jp; else if (jp && (tp - tbuffer) < (jp - tbuffer)) tp = jp; - if (!tp) { - strcpy(tbuffer, "\\"); - if (leafp) strcpy(leafp, ioctlp->inDatap); - } - else { - *tp = 0; - if (leafp) strcpy(leafp, tp+1); + if (!tp) { + strcpy(tbuffer, "\\"); + if (leafp) + strcpy(leafp, ioctlp->inDatap); } + else { + *tp = 0; + if (leafp) + strcpy(leafp, tp+1); + } + + if (tbuffer[0] == tbuffer[1] && + tbuffer[1] == '\\' && + !_strnicmp(cm_NetbiosName,tbuffer+2,strlen(cm_NetbiosName))) + { + char shareName[256]; + char *sharePath; + int shareFound, i; + + /* We may have found a UNC path. + * If the first component is the NetbiosName, + * then throw out the second component (the submount) + * since it had better expand into the value of ioctl->tidPathp + */ + char * p; + p = tbuffer + 2 + strlen(cm_NetbiosName) + 1; + if ( !_strnicmp("all", p, 3) ) + p += 4; - code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, - CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, - userp, ioctlp->tidPathp, reqp, &substRootp); - if (code) return code; + for (i = 0; *p && *p != '\\'; i++,p++ ) { + shareName[i] = *p; + } + p++; /* skip past trailing slash */ + shareName[i] = 0; /* terminate string */ + + shareFound = smb_FindShare(ioctlp->fidp->vcp, ioctlp->uidp, shareName, &sharePath); + if ( shareFound ) { + /* we found a sharename, therefore use the resulting path */ + code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, + CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, sharePath, reqp, &substRootp); + free(sharePath); + if (code) return code; + + code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, NULL, reqp, scpp); + if (code) return code; + } else { + /* otherwise, treat the name as a cellname mounted off the afs root. + * This requires that we reconstruct the shareName string with + * leading and trailing slashes. + */ + p = tbuffer + 2 + strlen(cm_NetbiosName) + 1; + if ( !_strnicmp("all", p, 3) ) + p += 4; + + shareName[0] = '/'; + for (i = 1; *p && *p != '\\'; i++,p++ ) { + shareName[i] = *p; + } + p++; /* skip past trailing slash */ + shareName[i++] = '/'; /* add trailing slash */ + shareName[i] = 0; /* terminate string */ + + code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, + CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, shareName, reqp, &substRootp); + if (code) return code; + + code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, NULL, reqp, scpp); + if (code) return code; + } + } else { + code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data, + CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, + userp, ioctlp->tidPathp, reqp, &substRootp); + if (code) return code; code = cm_NameI(substRootp, tbuffer, CM_FLAG_FOLLOW, - userp, NULL, reqp, scpp); - if (code) return code; - + userp, NULL, reqp, scpp); + if (code) return code; + } + /* # of bytes of path */ code = strlen(ioctlp->inDatap) + 1; ioctlp->inDatap += code; @@ -938,18 +1078,41 @@ long cm_IoctlNewCell(struct smb_ioctl *ioctlp, struct cm_user *userp) * cell list will be cm_CellLock and cm_ServerLock will be held for write. */ - cm_cell_t *tcellp; + cm_cell_t *cp; cm_SkipIoctlPath(ioctlp); lock_ObtainWrite(&cm_cellLock); - for(tcellp = cm_allCellsp; tcellp; tcellp=tcellp->nextp) + for(cp = cm_allCellsp; cp; cp=cp->nextp) { + long code; /* delete all previous server lists - cm_FreeServerList will ask for write on cm_ServerLock*/ - cm_FreeServerList(&tcellp->vlServersp); - tcellp->vlServersp = NULL; - cm_SearchCellFile(tcellp->namep, tcellp->namep, cm_AddCellProc, tcellp); - cm_RandomizeServer(&tcellp->vlServersp); + cm_FreeServerList(&cp->vlServersp); + cp->vlServersp = NULL; + code = cm_SearchCellFile(cp->namep, cp->namep, cm_AddCellProc, cp); +#ifdef AFS_AFSDB_ENV + if (code) { + if (cm_dnsEnabled) { + int ttl; + code = cm_SearchCellByDNS(cp->namep, cp->namep, &ttl, cm_AddCellProc, cp); + if ( code == 0 ) { /* got cell from DNS */ + cp->flags |= CM_CELLFLAG_DNS; + cp->flags &= ~CM_CELLFLAG_VLSERVER_INVALID; + cp->timeout = time(0) + ttl; + } + } + } + else { + cp->flags &= ~CM_CELLFLAG_DNS; + } +#endif /* AFS_AFSDB_ENV */ + if (code) { + cp->flags |= CM_CELLFLAG_VLSERVER_INVALID; + } + else { + cp->flags &= ~CM_CELLFLAG_VLSERVER_INVALID; + cm_RandomizeServer(&cp->vlServersp); + } } lock_ReleaseWrite(&cm_cellLock); @@ -973,30 +1136,94 @@ long cm_IoctlGetWsCell(smb_ioctl_t *ioctlp, cm_user_t *userp) long cm_IoctlSysName(struct smb_ioctl *ioctlp, struct cm_user *userp) { - long setSysName; - char *cp; + long setSysName, foundname = 0; + char *cp, *cp2, inname[MAXSYSNAME], outname[MAXSYSNAME]; + int t, count, num = 0; + char **sysnamelist[MAXSYSNAME]; cm_SkipIoctlPath(ioctlp); - memcpy(&setSysName, ioctlp->inDatap, sizeof(long)); - ioctlp->inDatap += sizeof(long); + memcpy(&setSysName, ioctlp->inDatap, sizeof(long)); + ioctlp->inDatap += sizeof(long); - if (setSysName) { - strcpy(cm_sysName, ioctlp->inDatap); + if (setSysName) { + /* check my args */ + if ( setSysName < 0 || setSysName > MAXNUMSYSNAMES ) + return EINVAL; + cp2 = ioctlp->inDatap; + for ( cp=ioctlp->inDatap, count = 0; count < setSysName; count++ ) { + /* won't go past end of ioctlp->inDatap since maxsysname*num < ioctlp->inDatap length */ + t = strlen(cp); + if (t >= MAXSYSNAME || t <= 0) + return EINVAL; + /* check for names that can shoot us in the foot */ + if (*cp == '.' && (cp[1] == 0 || (cp[1] == '.' && cp[2] == 0))) + return EINVAL; + cp += t + 1; } - else { + /* args ok */ + + /* inname gets first entry in case we're being a translator */ + /* (we are never a translator) */ + t = strlen(ioctlp->inDatap); + memcpy(inname, ioctlp->inDatap, t + 1); + ioctlp->inDatap += t + 1; + num = count; + } + + /* Not xlating, so local case */ + if (!cm_sysName) + osi_panic("cm_IoctlSysName: !cm_sysName\n", __FILE__, __LINE__); + + if (!setSysName) { /* user just wants the info */ + strcpy(outname, cm_sysName); + foundname = cm_sysNameCount; + *sysnamelist = cm_sysNameList; + } else { /* Local guy; only root can change sysname */ + /* clear @sys entries from the dnlc, once afs_lookup can + * do lookups of @sys entries and thinks it can trust them */ + /* privs ok, store the entry, ... */ + strcpy(cm_sysName, inname); + if (setSysName > 1) { /* ... or list */ + cp = ioctlp->inDatap; + for (count = 1; count < setSysName; ++count) { + if (!cm_sysNameList[count]) + osi_panic + ("cm_IoctlSysName: no cm_sysNameList entry to write\n" + , __FILE__, __LINE__); + t = strlen(cp); + memcpy(cm_sysNameList[count], cp, t + 1); /* include null */ + cp += t + 1; + } + } + cm_sysNameCount = setSysName; + } + + if (!setSysName) { /* return the sysname to the caller */ - setSysName = 1; /* really means "found sys name */ cp = ioctlp->outDatap; - memcpy(cp, &setSysName, sizeof(long)); - cp += sizeof(long); /* skip found flag */ - strcpy(cp, cm_sysName); - cp += strlen(cp) + 1; /* skip name and terminating null char */ - ioctlp->outDatap = cp; + memcpy(cp, (char *)&foundname, sizeof(afs_int32)); + cp += sizeof(afs_int32); /* skip found flag */ + if (foundname) { + strcpy(cp, outname); + cp += strlen(outname) + 1; /* skip name and terminating null char */ + for ( count=1; count < foundname ; ++count) { /* ... or list */ + if ( !(*sysnamelist)[count] ) + osi_panic("cm_IoctlSysName: no cm_sysNameList entry to read\n" + , __FILE__, __LINE__); + t = strlen((*sysnamelist)[count]); + if (t >= MAXSYSNAME) + osi_panic("cm_IoctlSysName: sysname entry garbled\n" + , __FILE__, __LINE__); + strcpy(cp, (*sysnamelist)[count]); + cp += t + 1; + } } + ioctlp->outDatap = cp; + } /* done: success */ - return 0; + return 0; } long cm_IoctlGetCellStatus(struct smb_ioctl *ioctlp, struct cm_user *userp) @@ -1207,6 +1434,7 @@ long cm_IoctlCreateMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp) if (cm_freelanceEnabled && dscp == cm_rootSCachep) { /* we are adding the mount point to the root dir., so call the freelance code to do the add. */ + osi_Log0(afsd_logp,"IoctlCreateMountPoint within Freelance root dir"); code = cm_FreelanceAddMount(leaf, fullCell, volume, NULL); return code; } diff --git a/src/WINNT/afsd/cm_ioctl.h b/src/WINNT/afsd/cm_ioctl.h index 4e9089e2e..c9ba93249 100644 --- a/src/WINNT/afsd/cm_ioctl.h +++ b/src/WINNT/afsd/cm_ioctl.h @@ -41,6 +41,12 @@ typedef struct cm_SSetPref { } cm_SSetPref_t; +#define MAXNUMSYSNAMES 16 /* max that current constants allow */ +#define MAXSYSNAME 128 /* max sysname (i.e. @sys) size */ +extern char *cm_sysName; +extern int cm_sysNameCount; +extern char *cm_sysNameList[MAXNUMSYSNAMES]; + #ifndef __CM_IOCTL_INTERFACES_ONLY__ void cm_InitIoctl(void); diff --git a/src/WINNT/afsd/cm_scache.c b/src/WINNT/afsd/cm_scache.c index ced5db1ba..c934ade45 100644 --- a/src/WINNT/afsd/cm_scache.c +++ b/src/WINNT/afsd/cm_scache.c @@ -238,30 +238,30 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, cm_req_t *reqp) { long hash; - cm_scache_t *scp; - long code; - cm_volume_t *volp; - cm_cell_t *cellp; + cm_scache_t *scp; + long code; + cm_volume_t *volp; + cm_cell_t *cellp; char* mp; int special; // yj: boolean variable to test if file is on root.afs int isRoot; - hash = CM_SCACHE_HASH(fidp); + hash = CM_SCACHE_HASH(fidp); osi_assert(fidp->cell != 0); // yj: check if we have the scp, if so, we don't need // to do anything else - lock_ObtainWrite(&cm_scacheLock); + lock_ObtainWrite(&cm_scacheLock); for(scp=cm_hashTablep[hash]; scp; scp=scp->nextp) { if (cm_FidCmp(fidp, &scp->fid) == 0) { scp->refCount++; - *outScpp = scp; - cm_AdjustLRU(scp); - lock_ReleaseWrite(&cm_scacheLock); + *outScpp = scp; + cm_AdjustLRU(scp); + lock_ReleaseWrite(&cm_scacheLock); return 0; - } } + } // yj: when we get here, it means we don't have an scp // so we need to either load it or fake it, depending @@ -272,19 +272,20 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, // because we have to fill in the status stuff 'coz we // don't want trybulkstat to fill it in for us #ifdef AFS_FREELANCE_CLIENT - special = (fidp->cell==0x1 && fidp->volume==0x20000001 && + special = (fidp->cell==0x1 && fidp->volume==AFS_FAKE_ROOT_VOL_ID && !(fidp->vnode==0x1 && fidp->unique==0x1)); - isRoot = (fidp->cell==0x1 && fidp->volume==0x20000001 && + isRoot = (fidp->cell==0x1 && fidp->volume==AFS_FAKE_ROOT_VOL_ID && fidp->vnode==0x1 && fidp->unique==0x1); if (cm_freelanceEnabled && isRoot) { + osi_Log0(afsd_logp,"cm_getSCache Freelance and isRoot"); /* freelance: if we are trying to get the root scp for the first time, we will just put in a place holder entry. */ - volp = NULL; + volp = NULL; } if (cm_freelanceEnabled && special) { - /*afsi_log("cm_getscache: special"); */ - lock_ObtainMutex(&cm_Freelance_Lock); + osi_Log0(afsd_logp,"cm_getSCache Freelance and special"); + lock_ObtainMutex(&cm_Freelance_Lock); mp =(cm_localMountPoints+fidp->vnode-2)->mountPointStringp; lock_ReleaseMutex(&cm_Freelance_Lock); @@ -295,7 +296,7 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, if (scp->dotdotFidp == (cm_fid_t *) NULL) scp->dotdotFidp = (cm_fid_t *) malloc (sizeof(cm_fid_t)); scp->dotdotFidp->cell=0x1; - scp->dotdotFidp->volume=0x20000001; + scp->dotdotFidp->volume=AFS_FAKE_ROOT_VOL_ID; scp->dotdotFidp->unique=1; scp->dotdotFidp->vnode=1; scp->flags |= (CM_SCACHEFLAG_PURERO | CM_SCACHEFLAG_RO); @@ -328,15 +329,17 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, // end of yj code #endif /* AFS_FREELANCE_CLIENT */ - /* otherwise, we need to find the volume */ + /* otherwise, we need to find the volume */ if (!cm_freelanceEnabled || !isRoot) { - lock_ReleaseWrite(&cm_scacheLock); /* for perf. reasons */ - cellp = cm_FindCellByID(fidp->cell); - if (!cellp) return CM_ERROR_NOSUCHCELL; - - code = cm_GetVolumeByID(cellp, fidp->volume, userp, reqp, &volp); - if (code) return code; - lock_ObtainWrite(&cm_scacheLock); + lock_ReleaseWrite(&cm_scacheLock); /* for perf. reasons */ + cellp = cm_FindCellByID(fidp->cell); + if (!cellp) + return CM_ERROR_NOSUCHCELL; + + code = cm_GetVolumeByID(cellp, fidp->volume, userp, reqp, &volp); + if (code) + return code; + lock_ObtainWrite(&cm_scacheLock); } /* otherwise, we have the volume, now reverify that the scp doesn't @@ -345,15 +348,15 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, for(scp=cm_hashTablep[hash]; scp; scp=scp->nextp) { if (cm_FidCmp(fidp, &scp->fid) == 0) { scp->refCount++; - cm_AdjustLRU(scp); - lock_ReleaseWrite(&cm_scacheLock); - cm_PutVolume(volp); - *outScpp = scp; + cm_AdjustLRU(scp); + lock_ReleaseWrite(&cm_scacheLock); + cm_PutVolume(volp); + *outScpp = scp; return 0; - } } + } - /* now, if we don't have the fid, recycle something */ + /* now, if we don't have the fid, recycle something */ scp = cm_GetNewSCache(); osi_assert(!(scp->flags & CM_SCACHEFLAG_INHASH)); scp->fid = *fidp; @@ -377,14 +380,13 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, } scp->nextp = cm_hashTablep[hash]; cm_hashTablep[hash] = scp; - scp->flags |= CM_SCACHEFLAG_INHASH; + scp->flags |= CM_SCACHEFLAG_INHASH; scp->refCount = 1; - lock_ReleaseWrite(&cm_scacheLock); + lock_ReleaseWrite(&cm_scacheLock); - /* now we have a held scache entry; just return it */ - *outScpp = scp; - - return 0; + /* now we have a held scache entry; just return it */ + *outScpp = scp; + return 0; } /* synchronize a fetch, store, read, write, fetch status or store status. @@ -591,7 +593,7 @@ long cm_SyncOp(cm_scache_t *scp, cm_buf_t *bufp, cm_user_t *up, cm_req_t *reqp, && (!cm_freelanceEnabled || !(!(scp->fid.vnode==0x1 && scp->fid.unique==0x1) && scp->fid.cell==0x1 && - scp->fid.volume==0x20000001)) + scp->fid.volume==AFS_FAKE_ROOT_VOL_ID)) #endif /* AFS_FREELANCE_CLIENT */ ) { if (!cm_HaveCallback(scp)) { @@ -644,12 +646,14 @@ sleep: /* wait here, then try again */ osi_Log1(afsd_logp, "CM SyncOp sleeping scp %x", (long) scp); + if ( scp->flags & CM_SCACHEFLAG_WAITING ) + osi_Log1(afsd_logp, "CM SyncOp CM_SCACHEFLAG_WAITING already set for 0x%x", scp); scp->flags |= CM_SCACHEFLAG_WAITING; if (bufLocked) lock_ReleaseMutex(&bufp->mx); - osi_SleepM((long) &scp->flags, &scp->mx); - osi_Log0(afsd_logp, "CM SyncOp woke!"); - if (bufLocked) lock_ObtainMutex(&bufp->mx); - lock_ObtainMutex(&scp->mx); + osi_SleepM((long) &scp->flags, &scp->mx); + osi_Log0(afsd_logp, "CM SyncOp woke!"); + if (bufLocked) lock_ObtainMutex(&bufp->mx); + lock_ObtainMutex(&scp->mx); } /* big while loop */ /* now, update the recorded state for RPC-type calls */ @@ -796,6 +800,7 @@ void cm_MergeStatus(cm_scache_t *scp, AFSFetchStatus *statusp, AFSVolSync *volp, // entries under that directory #ifdef AFS_FREELANCE_CLIENT if (cm_freelanceEnabled && scp == cm_rootSCachep) { + osi_Log0(afsd_logp,"cm_MergeStatus Freelance cm_rootSCachep"); statusp->InterfaceVersion = 0x1; statusp->FileType = 0x2; statusp->LinkCount = scp->linkCount; diff --git a/src/WINNT/afsd/cm_server.c b/src/WINNT/afsd/cm_server.c index 71cfc645c..be349d495 100644 --- a/src/WINNT/afsd/cm_server.c +++ b/src/WINNT/afsd/cm_server.c @@ -98,7 +98,7 @@ void cm_CheckServers(long flags, cm_cell_t *cellp) code = RXAFS_GetTime(connp->callp, &secs, &usecs); } if (wasDown) - rx_SetConnDeadTime(connp->callp, CM_CONN_CONNDEADTIME); + rx_SetConnDeadTime(connp->callp, ConnDeadtimeout); cm_PutConn(connp); } /* got an unauthenticated connection to this server */ @@ -390,6 +390,33 @@ void cm_RandomizeServer(cm_serverRef_t** list) lock_ReleaseWrite(&cm_serverLock); } +/* call cm_FreeServer while holding a write lock on cm_serverLock */ +void cm_FreeServer(cm_server_t* server) +{ + if (--(server->refCount) == 0) + { + /* we need to check to ensure that all of the connections + * for this server have a 0 refCount; otherwise, they will + * not be garbage collected + */ + cm_GCConnections(&server); /* connsp */ + + lock_FinalizeMutex(&server->mx); + if ( cm_allServersp == server ) + cm_allServersp = server->allNextp; + else { + cm_server_t *tsp; + + for(tsp = cm_allServersp; tsp->allNextp; tsp=tsp->allNextp) { + if ( tsp->allNextp == server ) { + tsp->allNextp = server->allNextp; + break; + } + } + } + } + } + void cm_FreeServerList(cm_serverRef_t** list) { cm_serverRef_t *current = *list; @@ -399,9 +426,10 @@ void cm_FreeServerList(cm_serverRef_t** list) while (current) { - next = current->next; - free(current); - current = next; + next = current->next; + cm_FreeServer(current->server); + free(current); + current = next; } lock_ReleaseWrite(&cm_serverLock); diff --git a/src/WINNT/afsd/cm_server.h b/src/WINNT/afsd/cm_server.h index c0b357fb6..114a3782a 100644 --- a/src/WINNT/afsd/cm_server.h +++ b/src/WINNT/afsd/cm_server.h @@ -93,4 +93,8 @@ extern long cm_ChangeRankServer(cm_serverRef_t** list, cm_server_t* server); extern void cm_RandomizeServer(cm_serverRef_t** list); +extern void cm_FreeServer(cm_server_t* server); + +extern void cm_FreeServerList(cm_serverRef_t** list); + #endif /* __CM_SERVER_H_ENV__ */ diff --git a/src/WINNT/afsd/cm_vnodeops.c b/src/WINNT/afsd/cm_vnodeops.c index 4b50a0d36..d04aa2907 100644 --- a/src/WINNT/afsd/cm_vnodeops.c +++ b/src/WINNT/afsd/cm_vnodeops.c @@ -34,8 +34,6 @@ extern void afsi_log(char *pattern, ...); unsigned int cm_mountRootGen = 0; -char cm_sysName[100]; - /* * Case-folding array. This was constructed by inspecting of SMBtrace output. * I do not know anything more about it. @@ -943,24 +941,24 @@ done: int cm_ExpandSysName(char *inp, char *outp, long outSize) { char *tp; - int prefixCount; - - tp = strrchr(inp, '@'); - if (tp == NULL) return 0; /* no @sys */ - - if (strcmp(tp, "@sys") != 0) return 0; /* no @sys */ - + int prefixCount; + + tp = strrchr(inp, '@'); + if (tp == NULL) return 0; /* no @sys */ + + if (strcmp(tp, "@sys") != 0) return 0; /* no @sys */ + /* caller just wants to know if this is a valid @sys type of name */ if (outp == NULL) return 1; /* otherwise generate the properly expanded @sys name */ - prefixCount = tp - inp; - - strncpy(outp, inp, prefixCount); /* copy out "a." from "a.@sys" */ - outp[prefixCount] = 0; /* null terminate the "a." */ - strcat(outp, cm_sysName); /* append i386_nt40 */ - return 1; -} + prefixCount = tp - inp; + + strncpy(outp, inp, prefixCount); /* copy out "a." from "a.@sys" */ + outp[prefixCount] = 0; /* null terminate the "a." */ + strcat(outp, cm_sysName); /* append i386_nt40 */ + return 1; +} long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp) @@ -1012,6 +1010,7 @@ long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp, return CM_ERROR_NOSUCHFILE; } else { /* nonexistent dir on freelance root, so add it */ + osi_Log1(afsd_logp,"cm_Lookup adding mount for non-existent directory: %s", namep); code = cm_FreelanceAddMount(namep, namep, "root.cell.", &rock.fid); if (code < 0) { /* add mount point failed, so give up */ @@ -1550,12 +1549,10 @@ long cm_TryBulkProc(cm_scache_t *scp, cm_dirEntry_t *dep, void *rockp, // to be bulkstat-ed, instead, we call getSCache directly and under // getSCache, it is handled specially. if (cm_freelanceEnabled && - tfid.cell==0x1 && tfid.volume==0x20000001 && + tfid.cell==0x1 && tfid.volume==AFS_FAKE_ROOT_VOL_ID && !(tfid.vnode==0x1 && tfid.unique==0x1) ) { -#ifdef DEBUG - afsi_log(" cm_trybulkproc going to call getscache"); -#endif + osi_Log0(afsd_logp, "cm_TryBulkProc Freelance calls cm_SCache on root.afs mountpoint"); return cm_GetSCache(&tfid, &tscp, NULL, NULL); } #endif /* AFS_FREELANCE_CLIENT */ diff --git a/src/WINNT/afsd/cm_vnodeops.h b/src/WINNT/afsd/cm_vnodeops.h index dfa462422..ce45999f1 100644 --- a/src/WINNT/afsd/cm_vnodeops.h +++ b/src/WINNT/afsd/cm_vnodeops.h @@ -107,8 +107,6 @@ extern long cm_HandleLink(cm_scache_t *linkScp, struct cm_user *userp, extern long cm_SymLink(cm_scache_t *dscp, char *namep, char *contentsp, long flags, cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp); -extern char cm_sysName[100]; - extern int cm_ExpandSysName(char *inp, char *outp, long outSize); extern long cm_Open(cm_scache_t *scp, int type, cm_user_t *userp); diff --git a/src/WINNT/afsd/fs.c b/src/WINNT/afsd/fs.c index 4daad5b6e..cae83b664 100644 --- a/src/WINNT/afsd/fs.c +++ b/src/WINNT/afsd/fs.c @@ -583,6 +583,69 @@ char *AclToString(acl) return mydata; } +BOOL IsAdmin (void) +{ + static BOOL fAdmin = FALSE; + static BOOL fTested = FALSE; + + if (!fTested) + { + /* Obtain the SID for BUILTIN\Administrators. If this is Windows NT, + * expect this call to succeed; if it does not, we can presume that + * it's not NT and therefore the user always has administrative + * privileges. + */ + PSID psidAdmin = NULL; + SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY; + + fTested = TRUE; + + if (!AllocateAndInitializeSid (&auth, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &psidAdmin)) + fAdmin = TRUE; + else + { + /* Then open our current ProcessToken */ + HANDLE hToken; + + if (OpenProcessToken (GetCurrentProcess(), TOKEN_QUERY, &hToken)) + { + /* We'll have to allocate a chunk of memory to store the list of + * groups to which this user belongs; find out how much memory + * we'll need. + */ + DWORD dwSize = 0; + PTOKEN_GROUPS pGroups; + + GetTokenInformation (hToken, TokenGroups, NULL, dwSize, &dwSize); + + pGroups = (PTOKEN_GROUPS)malloc(dwSize); + + /* Allocate that buffer, and read in the list of groups. */ + if (GetTokenInformation (hToken, TokenGroups, pGroups, dwSize, &dwSize)) + { + /* Look through the list of group SIDs and see if any of them + * matches the Administrator group SID. + */ + size_t iGroup = 0; + for (; (!fAdmin) && (iGroup < pGroups->GroupCount); ++iGroup) + { + if (EqualSid (psidAdmin, pGroups->Groups[ iGroup ].Sid)) + fAdmin = TRUE; + } + } + + if (pGroups) + free(pGroups); + } + } + + if (psidAdmin) + FreeSid (psidAdmin); + } + + return fAdmin; +} + static SetACLCmd(as) struct cmd_syndesc *as; { register afs_int32 code; @@ -1585,12 +1648,26 @@ register struct cmd_syndesc *as; { } else if(checkserv.tinterval> 600) { printf("Warning: The maximum -interval value is 10 mins (600 secs)\n"); checkserv.tinterval=600; /* 10 min max interval */ - } + } } else { - checkserv.tinterval = -1; /* don't change current interval */ + checkserv.tinterval = -1; /* don't change current interval */ } + if ( checkserv.tinterval != 0 ) { +#ifdef WIN32 + if ( !IsAdmin() ) { + fprintf (stderr,"Permission denied: requires Administrator access.\n"); + return EACCES; + } +#else /* WIN32 */ + if (geteuid()) { + fprintf (stderr,"Permission denied: requires root access.\n"); + return EACCES; + } +#endif /* WIN32 */ + } + code = pioctl(0, VIOCCKSERV, &blob, 1); if (code) { if ((errno == EACCES) && (checkserv.tinterval > 0)) { @@ -1690,6 +1767,18 @@ register struct cmd_syndesc *as; { struct ViceIoctl blob; afs_int32 temp; +#ifdef WIN32 + if ( !IsAdmin() ) { + fprintf (stderr,"Permission denied: requires Administrator access.\n"); + return EACCES; + } +#else /* WIN32 */ + if (geteuid()) { + fprintf (stderr,"Permission denied: requires root access.\n"); + return EACCES; + } +#endif /* WIN32 */ + if (!as->parms[0].items && !as->parms[1].items) { fprintf(stderr,"%s: syntax error in set cache size cmd.\n", pn); return 1; @@ -1792,6 +1881,18 @@ register struct cmd_syndesc *as; { register struct hostent *thp; afs_int32 fsport = 0, vlport = 0; +#ifdef WIN32 + if ( !IsAdmin() ) { + fprintf (stderr,"Permission denied: requires Administrator access.\n"); + return EACCES; + } +#else /* WIN32 */ + if (geteuid()) { + fprintf (stderr,"Permission denied: requires root access.\n"); + return EACCES; + } +#endif /* WIN32 */ + memset(space, 0, MAXHOSTS * sizeof(afs_int32)); tp = space; lp = (afs_int32 *)tp; @@ -1995,42 +2096,68 @@ static SysNameCmd(as) register struct cmd_syndesc *as; { register afs_int32 code; struct ViceIoctl blob; - register struct cmd_item *ti; + struct cmd_item *ti; char *input = space; - afs_int32 setp = 1; + afs_int32 setp = 0; ti = as->parms[0].items; - if (!ti) setp = 0; + if (ti) { +#ifdef WIN32 + if ( !IsAdmin() ) { + fprintf (stderr,"Permission denied: requires Administrator access.\n"); + return EACCES; + } +#else /* WIN32 */ + if (geteuid()) { + fprintf (stderr,"Permission denied: requires root access.\n"); + return EACCES; + } +#endif /* WIN32 */ + } + blob.in = space; blob.out = space; blob.out_size = MAXSIZE; blob.in_size = sizeof(afs_int32); memcpy(input, &setp, sizeof(afs_int32)); input += sizeof(afs_int32); - if (ti) { - strcpy(input, ti->data); - blob.in_size += strlen(ti->data) + 1; - input += strlen(ti->data); - *(input++) = '\0'; + for (; ti; ti = ti->next) { + setp++; + blob.in_size += strlen(ti->data) + 1; + if (blob.in_size > MAXSIZE) { + fprintf(stderr, "%s: sysname%s too long.\n", pn, + setp > 1 ? "s" : ""); + return 1; + } + strcpy(input, ti->data); + input += strlen(ti->data); + *(input++) = '\0'; } + memcpy(space, &setp, sizeof(afs_int32)); code = pioctl(0, VIOC_AFS_SYSNAME, &blob, 1); if (code) { - Die(errno, 0); - exit(1); + Die(errno, 0); + return 1; } if (setp) { - printf("%s: new sysname set.\n", pn); + printf("%s: new sysname%s set.\n", pn, setp > 1 ? "s" : ""); + return 0; } - else { + input = space; memcpy(&setp, input, sizeof(afs_int32)); input += sizeof(afs_int32); if (!setp) { fprintf(stderr,"No sysname name value was found\n"); - } else { - printf("Current sysname is '%s'\n", input); + return 1; + } + + printf("Current sysname%s", setp > 1 ? "s are" : " is"); + for (; setp > 0; --setp ) { + printf(" \'%s\'", input); + input += strlen(input) + 1; } - } + printf("\n"); return 0; } @@ -2042,6 +2169,18 @@ register struct cmd_syndesc *as; { register struct cmd_item *ti; int export=0, type=0, mode = 0, exp = 0, gstat = 0, exportcall, pwsync=0, smounts=0; +#ifdef WIN32 + if ( !IsAdmin() ) { + fprintf (stderr,"Permission denied: requires Administrator access.\n"); + return EACCES; + } +#else /* WIN32 */ + if (geteuid()) { + fprintf (stderr,"Permission denied: requires root access.\n"); + return EACCES; + } +#endif /* WIN32 */ + ti = as->parms[0].items; if (strcmp(ti->data, "nfs") == 0) type = 0x71; /* NFS */ else { @@ -2170,6 +2309,18 @@ register struct cmd_syndesc *as; { args.stat = 0; args.junk = 0; +#ifdef WIN32 + if ( !IsAdmin() ) { + fprintf (stderr,"Permission denied: requires Administrator access.\n"); + return EACCES; + } +#else /* WIN32 */ + if (geteuid()) { + fprintf (stderr,"Permission denied: requires root access.\n"); + return EACCES; + } +#endif /* WIN32 */ + if (! as->parms[1].items) args.stat |= CM_SETCELLFLAG_SUID; /* default to -nosuid */ /* set stat for all listed cells */ @@ -2397,69 +2548,6 @@ static BOOL IsWindowsNT (void) } -BOOL IsAdmin (void) -{ - static BOOL fAdmin = FALSE; - static BOOL fTested = FALSE; - - if (!fTested) - { - /* Obtain the SID for BUILTIN\Administrators. If this is Windows NT, - * expect this call to succeed; if it does not, we can presume that - * it's not NT and therefore the user always has administrative - * privileges. - */ - PSID psidAdmin = NULL; - SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY; - - fTested = TRUE; - - if (!AllocateAndInitializeSid (&auth, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &psidAdmin)) - fAdmin = TRUE; - else - { - /* Then open our current ProcessToken */ - HANDLE hToken; - - if (OpenProcessToken (GetCurrentProcess(), TOKEN_QUERY, &hToken)) - { - /* We'll have to allocate a chunk of memory to store the list of - * groups to which this user belongs; find out how much memory - * we'll need. - */ - DWORD dwSize = 0; - PTOKEN_GROUPS pGroups; - - GetTokenInformation (hToken, TokenGroups, NULL, dwSize, &dwSize); - - pGroups = (PTOKEN_GROUPS)malloc(dwSize); - - /* Allocate that buffer, and read in the list of groups. */ - if (GetTokenInformation (hToken, TokenGroups, pGroups, dwSize, &dwSize)) - { - /* Look through the list of group SIDs and see if any of them - * matches the Administrator group SID. - */ - size_t iGroup = 0; - for (; (!fAdmin) && (iGroup < pGroups->GroupCount); ++iGroup) - { - if (EqualSid (psidAdmin, pGroups->Groups[ iGroup ].Sid)) - fAdmin = TRUE; - } - } - - if (pGroups) - free(pGroups); - } - } - - if (psidAdmin) - FreeSid (psidAdmin); - } - - return fAdmin; -} - static SetPrefCmd(as) register struct cmd_syndesc *as; { FILE *infd; @@ -2477,7 +2565,6 @@ register struct cmd_syndesc *as; { gblob.out = space; gblob.out_size = MAXSIZE; - #ifdef WIN32 if ( !IsAdmin() ) { fprintf (stderr,"Permission denied: requires Administrator access.\n"); @@ -2625,33 +2712,45 @@ register struct cmd_syndesc *as; { } } while (!code && out->next_offset > 0); -return code; + return code; } static TraceCmd(struct cmd_syndesc *asp) { long code; - struct ViceIoctl blob; - long inValue; - long outValue; - - if ((asp->parms[0].items && asp->parms[1].items)) { - fprintf(stderr, "fs trace: must use at most one of '-off' or '-on'\n"); - return EINVAL; + struct ViceIoctl blob; + long inValue; + long outValue; + +#ifdef WIN32 + if ( !IsAdmin() ) { + fprintf (stderr,"Permission denied: requires Administrator access.\n"); + return EACCES; + } +#else /* WIN32 */ + if (geteuid()) { + fprintf (stderr,"Permission denied: requires root access.\n"); + return EACCES; } +#endif /* WIN32 */ + + if ((asp->parms[0].items && asp->parms[1].items)) { + fprintf(stderr, "fs trace: must use at most one of '-off' or '-on'\n"); + return EINVAL; + } /* determine if we're turning this tracing on or off */ inValue = 0; - if (asp->parms[0].items) - inValue = 3; /* enable */ + if (asp->parms[0].items) + inValue = 3; /* enable */ else if (asp->parms[1].items) inValue = 2; /* disable */ - if (asp->parms[2].items) inValue |= 4; /* do reset */ + if (asp->parms[2].items) inValue |= 4; /* do reset */ if (asp->parms[3].items) inValue |= 8; /* dump */ - blob.in_size = sizeof(long); - blob.in = (char *) &inValue; - blob.out_size = sizeof(long); - blob.out = (char *) &outValue; + blob.in_size = sizeof(long); + blob.in = (char *) &inValue; + blob.out_size = sizeof(long); + blob.out = (char *) &outValue; code = pioctl(NULL, VIOC_TRACECTL, &blob, 1); if (code) { @@ -2659,10 +2758,10 @@ static TraceCmd(struct cmd_syndesc *asp) return code; } - if (outValue) printf("AFS tracing enabled.\n"); - else printf("AFS tracing disabled.\n"); + if (outValue) printf("AFS tracing enabled.\n"); + else printf("AFS tracing disabled.\n"); - return 0; + return 0; } static void sbusage() @@ -2679,6 +2778,18 @@ struct cmd_syndesc *as; { struct sbstruct tsb; int kb; +#ifdef WIN32 + if ( !IsAdmin() ) { + fprintf (stderr,"Permission denied: requires Administrator access.\n"); + return EACCES; + } +#else /* WIN32 */ + if (geteuid()) { + fprintf (stderr,"Permission denied: requires root access.\n"); + return EACCES; + } +#endif /* WIN32 */ + if ((as->parms[0].items && as->parms[1].items) || (!as->parms[0].items && !as->parms[1].items)) /* same as logical xor */ ; @@ -2732,6 +2843,18 @@ static afs_int32 SetCryptCmd(as) struct ViceIoctl blob; char *tp; +#ifdef WIN32 + if ( !IsAdmin() ) { + fprintf (stderr,"Permission denied: requires Administrator access.\n"); + return EACCES; + } +#else /* WIN32 */ + if (geteuid()) { + fprintf (stderr,"Permission denied: requires root access.\n"); + return EACCES; + } +#endif /* WIN32 */ + tp = as->parms[0].items->data; if (strcmp(tp, "on") == 0) flag = 1; @@ -3131,7 +3254,19 @@ static CSCPolicyCmd(struct cmd_syndesc *asp) if (share) { - policy = "manual"; +#ifdef WIN32 + if ( !IsAdmin() ) { + fprintf (stderr,"Permission denied: requires Administrator access.\n"); + return EACCES; + } +#else /* WIN32 */ + if (geteuid()) { + fprintf (stderr,"Permission denied: requires root access.\n"); + return EACCES; + } +#endif /* WIN32 */ + + policy = "manual"; if (asp->parms[1].items) policy = "manual"; diff --git a/src/WINNT/afsd/fs_utils.c b/src/WINNT/afsd/fs_utils.c index 064f1f986..dddbb342d 100644 --- a/src/WINNT/afsd/fs_utils.c +++ b/src/WINNT/afsd/fs_utils.c @@ -64,61 +64,61 @@ long fs_GetFullPath(char *pathp, char *outPathp, long outSize) { char tpath[1000]; char origPath[1000]; - char *firstp; - long code; - int pathHasDrive; - int doSwitch; - char newPath[3]; + char *firstp; + long code; + int pathHasDrive; + int doSwitch; + char newPath[3]; if (pathp[0] != 0 && pathp[1] == ':') { /* there's a drive letter there */ - firstp = pathp+2; - pathHasDrive = 1; - } - else { - firstp = pathp; + firstp = pathp+2; + pathHasDrive = 1; + } + else { + firstp = pathp; pathHasDrive = 0; - } + } - if (*firstp == '\\' || *firstp == '/') { + if (*firstp == '\\' || *firstp == '/') { /* already an absolute pathname, just copy it back */ - strcpy(outPathp, firstp); - return 0; - } + strcpy(outPathp, firstp); + return 0; + } - GetCurrentDirectory(sizeof(origPath), origPath); + GetCurrentDirectory(sizeof(origPath), origPath); doSwitch = 0; - if (pathHasDrive && (*pathp & ~0x20) != (origPath[0] & ~0x20)) { + if (pathHasDrive && (*pathp & ~0x20) != (origPath[0] & ~0x20)) { /* a drive has been specified and it isn't our current drive. - * to get path, switch to it first. Must case-fold drive letters - * for user convenience. - */ + * to get path, switch to it first. Must case-fold drive letters + * for user convenience. + */ doSwitch = 1; - newPath[0] = *pathp; - newPath[1] = ':'; - newPath[2] = 0; - if (!SetCurrentDirectory(newPath)) { + newPath[0] = *pathp; + newPath[1] = ':'; + newPath[2] = 0; + if (!SetCurrentDirectory(newPath)) { code = GetLastError(); - return code; - } + return code; } + } - /* now get the absolute path to the current wdir in this drive */ - GetCurrentDirectory(sizeof(tpath), tpath); - strcpy(outPathp, tpath+2); /* skip drive letter */ + /* now get the absolute path to the current wdir in this drive */ + GetCurrentDirectory(sizeof(tpath), tpath); + strcpy(outPathp, tpath+2); /* skip drive letter */ /* if there is a non-null name after the drive, append it */ if (*firstp != 0) { - strcat(outPathp, "\\"); - strcat(outPathp, firstp); + strcat(outPathp, "\\"); + strcat(outPathp, firstp); } /* finally, if necessary, switch back to our home drive letter */ - if (doSwitch) { + if (doSwitch) { SetCurrentDirectory(origPath); - } + } - return 0; + return 0; } struct hostent *hostutil_GetHostByName(char *namep) diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index 48d4074dc..46df33ed6 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -82,7 +82,7 @@ smb_ncb_t *smb_ncbFreeListp; int smb_NumServerThreads; -int numNCBs, numSessions; +int numNCBs, numSessions, numVCs; int smb_maxVCPerServer; int smb_maxMpxRequests; @@ -728,6 +728,7 @@ smb_vc_t *smb_FindVC(unsigned short lsn, int flags, int lana) if (!vcp && (flags & SMB_FLAG_CREATE)) { vcp = malloc(sizeof(*vcp)); memset(vcp, 0, sizeof(*vcp)); + vcp->vcID = numVCs++; vcp->refCount = 1; vcp->tidCounter = 1; vcp->fidCounter = 1; @@ -845,7 +846,7 @@ smb_user_t *smb_FindUID(smb_vc_t *vcp, unsigned short uid, int flags) uidp->vcp = vcp; vcp->refCount++; vcp->usersp = uidp; - lock_InitializeMutex(&uidp->mx, "uid_t mutex"); + lock_InitializeMutex(&uidp->mx, "user_t mutex"); uidp->userID = uid; osi_LogEvent("AFS smb_FindUID (Find by UID)",NULL,"VCP[%x] new-uid[%d] name[%s]",(int)vcp,uidp->userID,(uidp->unp ? uidp->unp->name : "")); } @@ -1200,13 +1201,12 @@ int smb_ListShares() } /* find a shareName in the table of submounts */ -int smb_FindShare(smb_vc_t *vcp, smb_packet_t *inp, char *shareName, +int smb_FindShare(smb_vc_t *vcp, smb_user_t *uidp, char *shareName, char **pathNamep) { DWORD len; char pathName[1024]; char *var; - smb_user_t *uidp; char temp[1024]; DWORD sizeTemp; char sbmtpath[MAX_PATH]; @@ -1274,25 +1274,19 @@ int smb_FindShare(smb_vc_t *vcp, smb_packet_t *inp, char *shareName, while (1) { if (var = smb_stristr(p, VNUserName)) { - uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0); if (uidp && uidp->unp) smb_subst(p, var, sizeof(VNUserName),uidp->unp->name); else smb_subst(p, var, sizeof(VNUserName)," "); - if (uidp) - smb_ReleaseUID(uidp); } else if (var = smb_stristr(p, VNLCUserName)) { - uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0); if (uidp && uidp->unp) strcpy(temp, uidp->unp->name); else strcpy(temp, " "); _strlwr(temp); smb_subst(p, var, sizeof(VNLCUserName), temp); - if (uidp) - smb_ReleaseUID(uidp); } else if (var = smb_stristr(p, VNComputerName)) { @@ -2005,6 +1999,7 @@ void smb_MapNTError(long code, unsigned long *NTStatusp) unsigned long NTStatus; /* map CM_ERROR_* errors to NT 32-bit status codes */ + /* NT Status codes are listed in ntstatus.h not winerror.h */ if (code == CM_ERROR_NOSUCHCELL) { NTStatus = 0xC000000FL; /* No such file */ } @@ -2100,11 +2095,7 @@ void smb_MapNTError(long code, unsigned long *NTStatusp) NTStatus = 0xC0000023L; /* Buffer too small */ } else if (code == CM_ERROR_AMBIGUOUS_FILENAME) { -#ifdef COMMENT - NTStatus = 0xC000049CL; /* Potential file found */ -#else NTStatus = 0xC0000035L; /* Object name collision */ -#endif } else { NTStatus = 0xC0982001L; /* SMB non-specific error */ @@ -2704,6 +2695,7 @@ long smb_ReceiveCoreGetDiskAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_pack long smb_ReceiveCoreTreeConnect(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *rsp) { smb_tid_t *tidp; + smb_user_t *uidp; unsigned short newTid; char shareName[256]; char *sharePath; @@ -2731,7 +2723,10 @@ long smb_ReceiveCoreTreeConnect(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t * lock_ReleaseMutex(&vcp->mx); tidp = smb_FindTID(vcp, newTid, SMB_FLAG_CREATE); - shareFound = smb_FindShare(vcp, inp, shareName, &sharePath); + uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0); + shareFound = smb_FindShare(vcp, uidp, shareName, &sharePath); + if (uidp) + smb_ReleaseUID(uidp); if (!shareFound) { smb_ReleaseTID(tidp); return CM_ERROR_BADSHARENAME; @@ -6693,7 +6688,8 @@ void smb_Listener(void *parmp) * we run out. */ - osi_assert(i < Sessionmax && numNCBs < NCBmax - 1); + osi_assert(i < Sessionmax - 1); + osi_assert(numNCBs < NCBmax - 1); /* if we pass this test we can allocate one more */ LSNs[i] = ncbp->ncb_lsn; lanas[i] = ncbp->ncb_lana_num; @@ -7030,6 +7026,7 @@ void smb_Init(osi_log_t *logp, char *snamep, int useV3, int LANadapt, smb_NetbiosInit(); /* Initialize listener and server structures */ + numVCs = 0; memset(dead_sessions, 0, sizeof(dead_sessions)); sprintf(eventName, "SessionEvents[0]"); SessionEvents[0] = thrd_CreateEvent(NULL, FALSE, FALSE, eventName); diff --git a/src/WINNT/afsd/smb.h b/src/WINNT/afsd/smb.h index caa7c1316..6396ad0e0 100644 --- a/src/WINNT/afsd/smb.h +++ b/src/WINNT/afsd/smb.h @@ -379,7 +379,7 @@ extern smb_fid_t *smb_FindFID(smb_vc_t *vcp, unsigned short fid, int flags); extern void smb_ReleaseFID(smb_fid_t *fidp); -extern int smb_FindShare(smb_vc_t *vcp, smb_packet_t *inp, char *shareName, char **pathNamep); +extern int smb_FindShare(smb_vc_t *vcp, smb_user_t *uidp, char *shareName, char **pathNamep); extern int smb_FindShareCSCPolicy(char *shareName); diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index 95097b7cb..8d3669e73 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -237,6 +237,7 @@ long smb_ReceiveV3UserLogoffX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *ou long smb_ReceiveV3TreeConnectX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) { smb_tid_t *tidp; + smb_user_t *uidp; unsigned short newTid; char shareName[256]; char *sharePath; @@ -271,7 +272,10 @@ long smb_ReceiveV3TreeConnectX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *o lock_ReleaseMutex(&vcp->mx); tidp = smb_FindTID(vcp, newTid, SMB_FLAG_CREATE); - shareFound = smb_FindShare(vcp, inp, shareName, &sharePath); + uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0); + shareFound = smb_FindShare(vcp, uidp, shareName, &sharePath); + if (uidp) + smb_ReleaseUID(uidp); if (!shareFound) { smb_ReleaseTID(tidp); return CM_ERROR_BADSHARENAME; diff --git a/src/WINNT/afsd/smb_ioctl.c b/src/WINNT/afsd/smb_ioctl.c index b8391d342..32d2bebc0 100644 --- a/src/WINNT/afsd/smb_ioctl.c +++ b/src/WINNT/afsd/smb_ioctl.c @@ -266,47 +266,49 @@ done: long smb_IoctlV3Read(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) { smb_ioctl_t *iop; - long count; - long code; - long leftToCopy; - char *op; - cm_user_t *userp; - - iop = fidp->ioctlp; - count = smb_GetSMBParm(inp, 5); + long count; + long code; + long leftToCopy; + char *op; + cm_user_t *userp; + smb_user_t *uidp; + + iop = fidp->ioctlp; + count = smb_GetSMBParm(inp, 5); userp = smb_GetUser(vcp, inp); - - { - smb_user_t *uidp; - - uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0); - if (uidp && uidp->unp) - osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s", - uidp->userID, userp, - osi_LogSaveString(afsd_logp, uidp->unp->name)); - else { - if (uidp) + osi_assert(userp != 0); + + uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0); + iop->uidp = uidp; + if (uidp && uidp->unp) + osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s", + uidp->userID, userp, + osi_LogSaveString(afsd_logp, uidp->unp->name)); + else { + if (uidp) osi_Log2(afsd_logp, "Ioctl uid %d user %x no name", - uidp->userID, userp); - else + uidp->userID, userp); + else osi_Log1(afsd_logp, "Ioctl no uid user %x no name", - userp); - } - if (uidp) smb_ReleaseUID(uidp); - } + userp); + } iop->tidPathp = smb_GetTIDPath(vcp, ((smb_t *)inp)->tid); code = smb_IoctlPrepareRead(fidp, iop, userp); - if (code) { + if (uidp) { + iop->uidp = 0; + smb_ReleaseUID(uidp); + } + if (code) { cm_ReleaseUser(userp); - smb_ReleaseFID(fidp); + smb_ReleaseFID(fidp); return code; - } + } leftToCopy = (iop->outDatap - iop->outAllocp) - iop->outCopied; - if (count > leftToCopy) count = leftToCopy; + if (count > leftToCopy) count = leftToCopy; /* 0 and 1 are reserved for request chaining, were setup by our caller, * and will be further filled in after we return. diff --git a/src/WINNT/install/NSIS/AFSCreds.ini b/src/WINNT/install/NSIS/AFSCreds.ini new file mode 100644 index 000000000..dc9bd468e --- /dev/null +++ b/src/WINNT/install/NSIS/AFSCreds.ini @@ -0,0 +1,115 @@ +[Settings] +NumFields=14 + +[Field 11] +Type=label +Text=Startup parameters for AFS Credentials: +Left=20 +Right=-1 +Top=10 +Bottom=20 + +[Field 1] +Type=checkbox +State=1 +Left=50 +Right=60 +Top=25 +Bottom=35 + +[Field 2] +Type=label +Text=Start AFS Credentials at system login +Left=65 +Right=-1 +Top=25 +Bottom=35 + +[Field 12] +Type=label +Text=Command line options for AFS Credentials: +Left=20 +Right=-1 +Top=40 +Bottom=50 + +[Field 3] +Type=checkbox +State=1 +Left=50 +Right=60 +Top=55 +Bottom=65 + +[Field 4] +Type=label +Text=Auto initialize AFS Credentials +Left=65 +Right=-1 +Top=55 +Bottom=65 + +[Field 5] +type=checkbox +State=1 +Left=50 +Right=60 +Top=70 +Bottom=80 + +[Field 6] +Type=label +Text=Renew drive maps +Left=65 +Right=-1 +Top=70 +Bottom=80 + +[Field 7] +Type=checkbox +State=1 +Left=50 +Right=60 +Top=85 +Bottom=95 + +[Field 8] +Type=label +Text=IP Address change detection +Left=65 +Right=-1 +Top=85 +Bottom=95 + +[Field 9] +Type=checkbox +State=1 +Left=50 +Right=60 +Top=100 +Bottom=110 + +[Field 10] +Type=label +Text=Quiet +Left=65 +Right=-1 +Top=100 +Bottom=110 + +[Field 13] +Type=checkbox +State=0 +Left=50 +Right=60 +Top=115 +Bottom=125 + +[Field 14] +Type=label +Text=Show credentials window on startup +Left=65 +Right=-1 +Top=115 +Bottom=125 + diff --git a/src/WINNT/install/NSIS/NTMakefile b/src/WINNT/install/NSIS/NTMakefile index 25f5308ed..b90525f31 100644 --- a/src/WINNT/install/NSIS/NTMakefile +++ b/src/WINNT/install/NSIS/NTMakefile @@ -8,6 +8,8 @@ NSISDIR = C:\Program Files\NSIS # Revise the rule for compiling sources to use static libraries C2OBJ = $(cc) /Fo$@ /Fd$*.pdb $(cflags) $(cdebug) $(cvars) $(afscflags) $(afscdefs) /c +LOOPBACK_LIBS = wbemuuid.lib setupapi.lib msi.lib ole32.lib shell32.lib oleaut32.lib user32.lib + $(OUT)\Service.obj: Service.cpp $(C2OBJ) Service.cpp diff --git a/src/WINNT/install/NSIS/OpenAFS.nsi b/src/WINNT/install/NSIS/OpenAFS.nsi index 231a76476..bf4bb790b 100644 --- a/src/WINNT/install/NSIS/OpenAFS.nsi +++ b/src/WINNT/install/NSIS/OpenAFS.nsi @@ -1,17 +1,34 @@ ;OpenAFS Install Script for NSIS +; This version compiles with NSIS v2.0 ; -; Written by Rob Murawski +; Originally written by Rob Murawski ; -;Based on: -;NSIS Modern User Interface version 1.63 -;MultiLanguage Example Script -;Written by Joost Verburg +;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. Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the documentation and/or other +; materials provided with the distribution. The name of the author may not be used to endorse or +; promote products derived from this software without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. +; +; +; Some code originally based on: +; NSIS Modern User Interface version 1.63 +; MultiLanguage Example Script +; Written by Joost Verburg ; Read in the environment information !include ${INCLUDEDIR}\nsi-includes.nsi -; Define DEBUG if building a DEBUG installer - -; This version compiles with NSIS v2.0 !ifndef RELEASE !ifndef DEBUG @@ -103,6 +120,7 @@ VIAddVersionKey "PrivateBuild" "Checked/Debug" !insertmacro MUI_PAGE_DIRECTORY Page custom AFSPageGetCellServDB Page custom AFSPageGetCellName + Page custom AFSPageConfigAFSCreds !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH @@ -175,6 +193,15 @@ VIAddVersionKey "PrivateBuild" "Checked/Debug" LangString DESC_secClient ${LANG_KOREAN} "OpenAFS Client: Allows you to access AFS from your Windows PC." LangString DESC_secClient ${LANG_PORTUGUESEBR} "OpenAFS Client: Allows you to access AFS from your Windows PC." + LangString DESC_secLoopback ${LANG_ENGLISH} "MS Loopback adapter: Installs the adapter for a more reliable AFS client." + LangString DESC_secLoopback ${LANG_GERMAN} "MS Loopback adapter: Installs the adapter for a more reliable AFS client." + LangString DESC_secLoopback ${LANG_SPANISH} "MS Loopback adapter: Installs the adapter for a more reliable AFS client." + LangString DESC_secLoopback ${LANG_SIMPCHINESE} "MS Loopback adapter: Installs the adapter for a more reliable AFS client." + LangString DESC_secLoopback ${LANG_TRADCHINESE} "MS Loopback adapter: Installs the adapter for a more reliable AFS client." + LangString DESC_secLoopback ${LANG_JAPANESE} "MS Loopback adapter: Installs the adapter for a more reliable AFS client." + LangString DESC_secLoopback ${LANG_KOREAN} "MS Loopback adapter: Installs the adapter for a more reliable AFS client." + LangString DESC_secLoopback ${LANG_PORTUGUESEBR} "MS Loopback adapter: Installs the adapter for a more reliable AFS client." + LangString DESC_secServer ${LANG_ENGLISH} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client." LangString DESC_secServer ${LANG_GERMAN} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client." LangString DESC_secServer ${LANG_SPANISH} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client." @@ -211,6 +238,15 @@ VIAddVersionKey "PrivateBuild" "Checked/Debug" LangString DESC_secSDK ${LANG_KOREAN} "SDK: Header files and libraries for developing software with OpenAFS." LangString DESC_secSDK ${LANG_PORTUGUESEBR} "SDK: Header files and libraries for developing software with OpenAFS." + LangString DESC_secDEBUG ${LANG_ENGLISH} "Debug symbols: Used for debugging problems with OpenAFS." + LangString DESC_secDEBUG ${LANG_GERMAN} "Debug symbols: Used for debugging problems with OpenAFS." + LangString DESC_secDEBUG ${LANG_SPANISH} "Debug symbols: Used for debugging problems with OpenAFS." + LangString DESC_secDEBUG ${LANG_SIMPCHINESE} "Debug symbols: Used for debugging problems with OpenAFS." + LangString DESC_secDEBUG ${LANG_TRADCHINESE} "Debug symbols: Used for debugging problems with OpenAFS." + LangString DESC_secDEBUG ${LANG_JAPANESE} "Debug symbols: Used for debugging problems with OpenAFS." + LangString DESC_secDEBUG ${LANG_KOREAN} "Debug symbols: Used for debugging problems with OpenAFS." + LangString DESC_secDEBUG ${LANG_PORTUGUESEBR} "Debug symbols: Used for debugging problems with OpenAFS." + ; Popup error messages LangString CellError ${LANG_ENGLISH} "You must specify a valid CellServDB file to copy during install" LangString CellError ${LANG_GERMAN} "You must specify a valid CellServDB file to copy during the install" @@ -506,32 +542,6 @@ Section "AFS Client" secClient File "${AFS_DESTDIR}\etc\rxdebug.exe" File "${AFS_DESTDIR}\etc\backup.exe" -!ifdef DEBUG - File "${AFS_CLIENT_BUILDDIR}\afsshare.pdb" - File "${AFS_CLIENT_BUILDDIR}\libosi.pdb" - File "${AFS_CLIENT_BUILDDIR}\libafsconf.pdb" - File "${AFS_CLIENT_BUILDDIR}\klog.pdb" - File "${AFS_CLIENT_BUILDDIR}\tokens.pdb" - File "${AFS_CLIENT_BUILDDIR}\unlog.pdb" - File "${AFS_CLIENT_BUILDDIR}\fs.pdb" - File "${AFS_CLIENT_BUILDDIR}\aklog.pdb" - File "${AFS_CLIENT_BUILDDIR}\afscreds.pdb" - File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext.pdb" - File "${AFS_CLIENT_BUILDDIR}\afsd_service.pdb" - File "${AFS_CLIENT_BUILDDIR}\afslogon.pdb" - File "${AFS_CLIENT_BUILDDIR}\symlink.pdb" - File "${AFS_DESTDIR}\bin\kpasswd.pdb" - File "${AFS_DESTDIR}\bin\pts.pdb" - File "${AFS_SERVER_BUILDDIR}\bos.pdb" - File "${AFS_SERVER_BUILDDIR}\kas.pdb" - File "${AFS_SERVER_BUILDDIR}\vos.pdb" - File "${AFS_SERVER_BUILDDIR}\udebug.pdb" - File "${AFS_DESTDIR}\bin\translate_et.pdb" - File "${AFS_DESTDIR}\etc\rxdebug.pdb" - File "${AFS_DESTDIR}\etc\backup.pdb" -!endif - - Call AFSLangFiles @@ -541,15 +551,9 @@ Section "AFS Client" secClient ; Do Windows SYSDIR (Control panel) SetOutPath "$SYSDIR" !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa.cpl" "$SYSDIR\afs_cpa.cpl" "$INSTDIR" -!ifdef DEBUG - File "${AFS_CLIENT_BUILDDIR}\afs_cpa.pdb" -!endif ; Get AFS CellServDB file Call afs.GetCellServDB -!ifdef INSTALL_LOOPBACK - Call afs.InstallMSLoopback -!endif !ifdef INSTALL_KFW ; Include Kerberos for Windows files in the installer... @@ -607,9 +611,33 @@ Section "AFS Client" secClient ;Write start menu entries CreateDirectory "$SMPROGRAMS\OpenAFS\Client" CreateShortCut "$SMPROGRAMS\OpenAFS\Uninstall OpenAFS.lnk" "$INSTDIR\Uninstall.exe" - CreateShortCut "$SMPROGRAMS\OpenAFS\Client\Authentication.lnk" "$INSTDIR\Client\Program\afscreds.exe" "-A -M -N -Q" - CreateShortCut "$SMSTARTUP\AFS Credentials.lnk" "$INSTDIR\Client\Program\afscreds.exe" "-A -M -N -Q" + + ; Create command line options for AFSCreds... + StrCpy $R2 "" + ReadINIStr $R1 $2 "Field 3" "State" + StrCmp $R1 "1" +1 +2 + StrCpy $R2 "-A " + ReadINIStr $R1 $2 "Field 5" "State" + StrCmp $R1 "1" +1 +2 + StrCpy $R2 "$R2-M " + ReadINIStr $R1 $2 "Field 7" "State" + StrCmp $R1 "1" +1 +2 + StrCpy $R2 "$R2-N " + ReadINIStr $R1 $2 "Field 9" "State" + StrCmp $R1 "1" +1 +2 + StrCpy $R2 "$R2-Q " + ReadINIStr $R1 $2 "Field 13" "State" + StrCmp $R1 "1" +1 +2 + StrCpy $R2 "$R2-S" + + CreateShortCut "$SMPROGRAMS\OpenAFS\Client\Authentication.lnk" "$INSTDIR\Client\Program\afscreds.exe" "$R2" + + ReadINIStr $R1 $2 "Field 1" "State" + StrCmp $R1 "1" +1 +2 + CreateShortCut "$SMSTARTUP\AFS Credentials.lnk" "$INSTDIR\Client\Program\afscreds.exe" "$R2" + + Push "$INSTDIR\Client\Program" Call AddToUniquePath Push "$INSTDIR\Common" @@ -671,7 +699,6 @@ skipremove: WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "RxMaxMTU" 1260 WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "IsGateway" 0 WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "HideDotFiles" 1 - WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "TruncateNetbios" "on" ; Find Lana By Name appears to be causing grief for many people ; I do not have time to track this down so I am simply going to disable it @@ -696,6 +723,16 @@ skipremove: SectionEnd + + +; MS Loopback adapter +Section "MS Loopback Adapter" secLoopback + +Call afs.InstallMSLoopback + +SectionEnd + + ;------------------------ ; OpenAFS SERVER Section "AFS Server" secServer @@ -748,25 +785,6 @@ skipCheck: File "${AFS_SERVER_BUILDDIR}\vlserver.exe" File "${AFS_SERVER_BUILDDIR}\volinfo.exe" File "${AFS_SERVER_BUILDDIR}\volserver.exe" - -!ifdef DEBUG - File "${AFS_SERVER_BUILDDIR}\afskill.pdb" - File "${AFS_SERVER_BUILDDIR}\afssvrcfg.pdb" - File "${AFS_SERVER_BUILDDIR}\bosctlsvc.pdb" - File "${AFS_SERVER_BUILDDIR}\bosserver.pdb" - File "${AFS_SERVER_BUILDDIR}\buserver.pdb" - File "${AFS_ETC_BUILDDIR}\butc.pdb" - File "${AFS_SERVER_BUILDDIR}\fileserver.pdb" - File "${AFS_ETC_BUILDDIR}\fms.pdb" - File "${AFS_SERVER_BUILDDIR}\kaserver.pdb" - File "${AFS_SERVER_BUILDDIR}\ptserver.pdb" - File "${AFS_SERVER_BUILDDIR}\salvager.pdb" - File "${AFS_SERVER_BUILDDIR}\upclient.pdb" - File "${AFS_SERVER_BUILDDIR}\upserver.pdb" - File "${AFS_SERVER_BUILDDIR}\vlserver.pdb" - File "${AFS_SERVER_BUILDDIR}\volinfo.pdb" - File "${AFS_SERVER_BUILDDIR}\volserver.pdb" -!endif ;AFS Server common files SetOutPath "$INSTDIR\Common" @@ -777,21 +795,12 @@ skipCheck: File "${AFS_SERVER_BUILDDIR}\afsptsadmin.dll" !ifdef DEBUG - File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb" - File "${AFS_SERVER_BUILDDIR}\afsbosadmin.pdb" - File "${AFS_SERVER_BUILDDIR}\afscfgadmin.pdb" - File "${AFS_SERVER_BUILDDIR}\afskasadmin.pdb" - File "${AFS_SERVER_BUILDDIR}\afsptsadmin.pdb" !endif SetOutPath "$INSTDIR\Common" Call AFSLangFiles SetOutPath "$SYSDIR" !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver.cpl" "$SYSDIR\afsserver.cpl" "$INSTDIR" - -!ifdef DEBUG - File "${AFS_SERVER_BUILDDIR}\afsserver.pdb" -!endif ;Store install folder WriteRegStr HKCU "${AFS_REGKEY_ROOT}\AFS Server" "" $INSTDIR @@ -865,11 +874,6 @@ Section "AFS Control Center" secControl File "${AFS_SERVER_BUILDDIR}\TaAfsAdmSvr.exe" File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager.exe" -!ifdef DEBUG - File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager.pdb" - File "${AFS_SERVER_BUILDDIR}\TaAfsAdmSvr.pdb" - File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager.pdb" -!endif ;AFS Server common files Call AFSCommon.Install @@ -880,11 +884,8 @@ Section "AFS Control Center" secControl !IFDEF DEBUG !IFDEF CL_1310 File "${SYSTEMDIR}\msvcr71d.dll" - File "${SYSTEMDIR}\msvcr71d.pdb" File "${SYSTEMDIR}\msvcp71d.dll" - File "${SYSTEMDIR}\msvcp71d.pdb" File "${SYSTEMDIR}\mfc71d.dll" - File "${SYSTEMDIR}\mfc71d.pdb" File "${SYSTEMDIR}\MFC71CHS.DLL" File "${SYSTEMDIR}\MFC71CHT.DLL" File "${SYSTEMDIR}\MFC71DEU.DLL" @@ -897,11 +898,8 @@ Section "AFS Control Center" secControl !ELSE !IFDEF CL_1300 File "${SYSTEMDIR}\msvcr70d.dll" - File "${SYSTEMDIR}\msvcr70d.pdb" File "${SYSTEMDIR}\msvcp70d.dll" - File "${SYSTEMDIR}\msvcp70d.pdb" File "${SYSTEMDIR}\mfc70d.dll" - File "${SYSTEMDIR}\mfc70d.pdb" File "${SYSTEMDIR}\MFC70CHS.DLL" File "${SYSTEMDIR}\MFC70CHT.DLL" File "${SYSTEMDIR}\MFC70DEU.DLL" @@ -913,11 +911,8 @@ Section "AFS Control Center" secControl File "${SYSTEMDIR}\MFC70KOR.DLL" !ELSE File "${SYSTEMDIR}\mfc42d.dll" - File "${SYSTEMDIR}\mfc42d.pdb" File "${SYSTEMDIR}\msvcp60d.dll" - File "${SYSTEMDIR}\msvcp60d.pdb" File "${SYSTEMDIR}\msvcrtd.dll" - File "${SYSTEMDIR}\msvcrtd.pdb" !ENDIF !ENDIF !ELSE @@ -1171,6 +1166,123 @@ Section "Software Development Kit (SDK)" secSDK Call AFSCommon.Install SectionEnd + +Section "Debug symbols" secDebug + SectionGetFlags ${secClient} $R0 + IntOp $R0 $R0 & ${SF_SELECTED} + IntCmp $R0 ${SF_SELECTED} +1 DoServer + + ; Do client components + SetOutPath "$INSTDIR\Client\Program" + File "${AFS_CLIENT_BUILDDIR}\afsshare.pdb" + File "${AFS_CLIENT_BUILDDIR}\libosi.pdb" + File "${AFS_CLIENT_BUILDDIR}\libafsconf.pdb" + File "${AFS_CLIENT_BUILDDIR}\klog.pdb" + File "${AFS_CLIENT_BUILDDIR}\tokens.pdb" + File "${AFS_CLIENT_BUILDDIR}\unlog.pdb" + File "${AFS_CLIENT_BUILDDIR}\fs.pdb" + File "${AFS_CLIENT_BUILDDIR}\aklog.pdb" + File "${AFS_CLIENT_BUILDDIR}\afscreds.pdb" + File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext.pdb" + File "${AFS_CLIENT_BUILDDIR}\afsd_service.pdb" + File "${AFS_CLIENT_BUILDDIR}\afslogon.pdb" + File "${AFS_CLIENT_BUILDDIR}\symlink.pdb" + File "${AFS_DESTDIR}\bin\kpasswd.pdb" + File "${AFS_DESTDIR}\bin\pts.pdb" + File "${AFS_SERVER_BUILDDIR}\bos.pdb" + File "${AFS_SERVER_BUILDDIR}\kas.pdb" + File "${AFS_SERVER_BUILDDIR}\vos.pdb" + File "${AFS_SERVER_BUILDDIR}\udebug.pdb" + File "${AFS_DESTDIR}\bin\translate_et.pdb" + File "${AFS_DESTDIR}\etc\rxdebug.pdb" + File "${AFS_DESTDIR}\etc\backup.pdb" + + SetOutPath "$SYSDIR" + File "${AFS_CLIENT_BUILDDIR}\afs_cpa.pdb" + +DoServer: + SectionGetFlags ${secServer} $R0 + IntOp $R0 $R0 & ${SF_SELECTED} + IntCmp $R0 ${SF_SELECTED} +1 DoControl + + ; Do server components + SetOutPath "$INSTDIR\Server\usr\afs\bin" + File "${AFS_SERVER_BUILDDIR}\afskill.pdb" + File "${AFS_SERVER_BUILDDIR}\afssvrcfg.pdb" + File "${AFS_SERVER_BUILDDIR}\bosctlsvc.pdb" + File "${AFS_SERVER_BUILDDIR}\bosserver.pdb" + File "${AFS_SERVER_BUILDDIR}\buserver.pdb" + File "${AFS_ETC_BUILDDIR}\butc.pdb" + File "${AFS_SERVER_BUILDDIR}\fileserver.pdb" + File "${AFS_ETC_BUILDDIR}\fms.pdb" + File "${AFS_SERVER_BUILDDIR}\kaserver.pdb" + File "${AFS_SERVER_BUILDDIR}\ptserver.pdb" + File "${AFS_SERVER_BUILDDIR}\salvager.pdb" + File "${AFS_SERVER_BUILDDIR}\upclient.pdb" + File "${AFS_SERVER_BUILDDIR}\upserver.pdb" + File "${AFS_SERVER_BUILDDIR}\vlserver.pdb" + File "${AFS_SERVER_BUILDDIR}\volinfo.pdb" + File "${AFS_SERVER_BUILDDIR}\volserver.pdb" + + ; Do server common components + File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb" + File "${AFS_SERVER_BUILDDIR}\afsbosadmin.pdb" + File "${AFS_SERVER_BUILDDIR}\afscfgadmin.pdb" + File "${AFS_SERVER_BUILDDIR}\afskasadmin.pdb" + File "${AFS_SERVER_BUILDDIR}\afsptsadmin.pdb" + + SetOutPath "$SYSDIR" + File "${AFS_SERVER_BUILDDIR}\afsserver.pdb" + + ; Do control center components +DoControl: + SectionGetFlags ${secControl} $R0 + IntOp $R0 $R0 & ${SF_SELECTED} + IntCmp $R0 ${SF_SELECTED} +1 DoCommon + + SetOutPath "$INSTDIR\Control Center" + File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager.pdb" + File "${AFS_SERVER_BUILDDIR}\TaAfsAdmSvr.pdb" + File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager.pdb" + +DoCommon: + SetOutPath "$INSTDIR\Common" +!IFDEF CL_1310 + File "${SYSTEMDIR}\msvcr71d.pdb" + File "${SYSTEMDIR}\msvcp71d.pdb" + File "${SYSTEMDIR}\mfc71d.pdb" +!ELSE +!IFDEF CL_1300 + File "${SYSTEMDIR}\msvcr70d.pdb" + File "${SYSTEMDIR}\msvcp70d.pdb" + File "${SYSTEMDIR}\mfc70d.pdb" +!ELSE + File "${SYSTEMDIR}\mfc42d.pdb" + File "${SYSTEMDIR}\msvcp60d.pdb" + File "${SYSTEMDIR}\msvcrtd.pdb" +!ENDIF +!ENDIF + +; Common Areas + SetOutPath "$INSTDIR\Common" + File "${AFS_CLIENT_BUILDDIR}\afs_config.pdb" + File "${AFS_SERVER_BUILDDIR}\afsadminutil.pdb" + File "${AFS_DESTDIR}\lib\afsauthent.pdb" + File "${AFS_DESTDIR}\lib\afspthread.pdb" + File "${AFS_DESTDIR}\lib\afsrpc.pdb" + File "${AFS_SERVER_BUILDDIR}\afsclientadmin.pdb" + File "${AFS_SERVER_BUILDDIR}\afsprocmgmt.pdb" + File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb" + File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib.pdb" + File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb" + File "${AFS_SERVER_BUILDDIR}\afsbosadmin.pdb" + File "${AFS_SERVER_BUILDDIR}\afscfgadmin.pdb" + File "${AFS_SERVER_BUILDDIR}\afskasadmin.pdb" + File "${AFS_SERVER_BUILDDIR}\afsptsadmin.pdb" + +SectionEnd + + ;Display the Finish header ;Insert this macro after the sections if you are not using a finish page ;!insertmacro MUI_SECTIONS_FINISHHEADER @@ -1208,6 +1320,27 @@ contInstall: contInstall2: +DoLoop: + ; If the Loopback is already installed, we mark the option OFF and Read Only + ; so the user can not select it. + Call afs.isLoopbackInstalled + IntCmp $R1 0 SkipLoop + SectionGetFlags ${secLoopback} $0 + IntOp $0 $0 & ${SECTION_OFF} + IntOp $0 $0 | ${SF_RO} + SectionSetFlags ${secLoopback} $0 + +SkipLoop: + ; Never install debug symbols unless explicitly selected, except in DEBUG mode + !IFNDEF DEBUG + SectionGetFlags ${secDebug} $0 + IntOp $0 $0 & ${SECTION_OFF} + SectionSetFlags ${secDebug} $0 + !ELSE + SectionGetFlags ${secDebug} $0 + IntOp $0 $0 | ${SF_SELECTED} + SectionSetFlags ${secDebug} $0 + !ENDIF ; Our logic should be like this. ; 1) If no AFS components are installed, we do a clean install with default options. (Client/Docs) ; 2) If existing modules are installed, we keep them selected @@ -1445,6 +1578,8 @@ Nope: File /oname=$0 CellServPage.ini GetTempFilename $1 File /oname=$1 AFSCell.ini + GetTempFilename $2 + File /oname=$2 AFSCreds.ini ;File /oname=$1 ConfigURL.ini FunctionEnd @@ -1475,6 +1610,8 @@ FunctionEnd !insertmacro MUI_DESCRIPTION_TEXT ${secControl} $(DESC_secControl) !insertmacro MUI_DESCRIPTION_TEXT ${secDocs} $(DESC_secDocs) !insertmacro MUI_DESCRIPTION_TEXT ${secSDK} $(DESC_secSDK) + !insertmacro MUI_DESCRIPTION_TEXT ${secLoopback} $(DESC_secLoopback) + !insertmacro MUI_DESCRIPTION_TEXT ${secDebug} $(DESC_secDebug) !insertmacro MUI_FUNCTION_DESCRIPTION_END ;-------------------------------- @@ -1548,7 +1685,6 @@ StartRemove: Delete /REBOOTOK "$INSTDIR\Common\afskasadmin.dll" Delete /REBOOTOK "$INSTDIR\Common\afsptsadmin.dll" -!IFDEF DEBUG Delete /REBOOTOK "$INSTDIR\Common\afs_config.pdb" Delete /REBOOTOK "$INSTDIR\Common\afs_shl_ext.pdb" Delete /REBOOTOK "$INSTDIR\Common\afsadminutil.pdb" @@ -1588,7 +1724,6 @@ StartRemove: Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.dll" Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.pdb" !ENDIF -!ENDIF !ELSE !IFDEF CL_1310 Delete /REBOOTOK "$INSTDIR\bin\mfc71.dll" @@ -1625,11 +1760,10 @@ StartRemove: !ENDIF !ENDIF - IfSilent SkipAsk + IfSilent SkipDel ; IfFileExists "$WINDIR\afsdcell.ini" CellExists SkipDelAsk ; CellExists: MessageBox MB_YESNO "Would you like to keep your configuration files?" IDYES SkipDel - SkipAsk: Delete "$WINDIR\afsdcell.ini" Delete "$WINDIR\afsdsbmt.ini" @@ -1663,7 +1797,6 @@ StartRemove: Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\volinfo.exe" Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\volserver.exe" -!ifdef DEBUG Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\afskill.pdb" Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\afssvrcfg.pdb" Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\bosctlsvc.pdb" @@ -1681,7 +1814,6 @@ StartRemove: Delete "$INSTDIR\Server\usr\afs\bin\vlserver.pdb" Delete "$INSTDIR\Server\usr\afs\bin\volinfo.pdb" Delete "$INSTDIR\Server\usr\afs\bin\volserver.pdb" -!endif RMDir /r "$INSTDIR\Server\usr\afs\bin" ; do not delete the server configuration files @@ -1695,10 +1827,8 @@ StartRemove: Delete /REBOOTOK "$SYSDIR\afsserver.cpl" Delete /REBOOTOK "$SYSDIR\afs_cpa.cpl" -!ifdef DEBUG Delete /REBOOTOK "$SYSDIR\afsserver.pdb" Delete /REBOOTOK "$SYSDIR\afs_cpa.pdb" -!endif RMDir /r "$INSTDIR\Documentation\html\CmdRef" RMDir /r "$INSTDIR\Documentation\html\InstallGd" @@ -1710,9 +1840,7 @@ StartRemove: ; Delete DOC short cut Delete /REBOOTOK "$INSTDIR\Client\Program\afscreds.exe" -!ifdef DEBUG Delete /REBOOTOK "$INSTDIR\Client\Program\afscreds.pdb" -!endif Delete /REBOOTOK "$INSTDIR\Client\Program\*" Delete /REBOOTOK "$INSTDIR\Client\Program\Include\*" @@ -1806,11 +1934,9 @@ StartRemove: Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAdmSvr.exe" Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsServerManager.exe" Delete /REBOOTOK "$INSTDIR\Control Center\CCUninst.dll" -!ifdef DEBUG Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAccountManager.pdb" Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAdmSvr.pdb" Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsServerManager.pdb" -!endif RMDir "$INSTDIR\Control Center" Delete "$SMPROGRAMS\OpenAFS\Uninstall OpenAFS.lnk" @@ -1861,7 +1987,9 @@ FunctionEnd Function un.onUninstSuccess - MessageBox MB_OK "Please reboot your machine to complete uninstallation of the software" + IfSilent SkipAsk + MessageBox MB_OK "Please reboot your machine to complete uninstallation of the software" + SkipAsk: FunctionEnd @@ -2143,6 +2271,30 @@ done: good: FunctionEnd + +;--------------------------------------------------------- +;Do the page to get the afscreds.exe startup configuration + +Function AFSPageConfigAFSCreds + ; Skip this page if we are not installing the client + SectionGetFlags ${secClient} $R0 + IntOp $R0 $R0 & ${SF_SELECTED} + StrCmp $R0 "0" done + + ; Set the install options here + + !insertmacro MUI_HEADER_TEXT "AFS Credentials Configuration" "Please choose default options for configuring the AFS Credentials program:" + InstallOptions::dialog $2 + Pop $R1 + StrCmp $R1 "cancel" exit + StrCmp $R1 "back" done + StrCmp $R1 "success" done +exit: Quit +done: + +FunctionEnd + + ;------------- ; Common install routines for each module Function AFSCommon.Install @@ -2578,23 +2730,6 @@ Function AFSLangFiles !ENDIF !ENDIF -!ifdef DEBUG - File "${AFS_CLIENT_BUILDDIR}\afs_config.pdb" - File "${AFS_SERVER_BUILDDIR}\afsadminutil.pdb" - File "${AFS_DESTDIR}\lib\afsauthent.pdb" - File "${AFS_DESTDIR}\lib\afspthread.pdb" - File "${AFS_DESTDIR}\lib\afsrpc.pdb" - File "${AFS_SERVER_BUILDDIR}\afsclientadmin.pdb" - File "${AFS_SERVER_BUILDDIR}\afsprocmgmt.pdb" - File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb" - File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib.pdb" - File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb" - File "${AFS_SERVER_BUILDDIR}\afsbosadmin.pdb" - File "${AFS_SERVER_BUILDDIR}\afscfgadmin.pdb" - File "${AFS_SERVER_BUILDDIR}\afskasadmin.pdb" - File "${AFS_SERVER_BUILDDIR}\afsptsadmin.pdb" -!endif - StrCmp $LANGUAGE ${LANG_ENGLISH} DoEnglish StrCmp $LANGUAGE ${LANG_GERMAN} DoGerman StrCmp $LANGUAGE ${LANG_SPANISH} DoSpanish @@ -3275,19 +3410,20 @@ FunctionEnd !endif - -!ifdef INSTALL_LOOPBACK +; Installs the loopback adpater and disables it on Windows 2000 Function afs.InstallMSLoopback GetTempFileName $R0 - File /oname=$R0 "loopback_install.dll" - nsExec::Exec "rundll32.exe $R0 doLoopBackEntry quiet" - Call GetWindowsVersion - Pop $R1 - StrCmp $R1 "2000" +1 +2 - nsExec::Exec "rundll32.exe $R0 disableLoopBackEntry" + File /oname=$R0 "${AFS_WININSTALL_DIR}\afsloopback.dll" + nsExec::Exec "rundll32.exe $R0 doLoopBackEntry AFS 10.254.254.253 255.255.255.252" Delete $R0 FunctionEnd -!endif + +Function afs.isLoopbackInstalled + SetOutPath $TEMP + File "${AFS_WININSTALL_DIR}\afsloopback.dll" + System::Call "$TEMP\afsloopback.dll::IsLoopbackInstalled() i().r11" + Delete "$TEMP\afsloopback.dll" +FunctionEnd ; GetWindowsVersion diff --git a/src/WINNT/install/loopback/NTMakefile b/src/WINNT/install/loopback/NTMakefile new file mode 100644 index 000000000..b134994c1 --- /dev/null +++ b/src/WINNT/install/loopback/NTMakefile @@ -0,0 +1,59 @@ +# rcsid : $Id: NTMakefile,v 1.3 2004/06/24 04:08:57 jaltman Exp $ + +RELDIR=WINNT\install\loopback +!INCLUDE ..\..\..\config\NTMakefile.$(SYS_NAME) +!INCLUDE ..\..\..\config\NTMakefile.version + +MEDIABINDIR = $(DESTDIR)\WinInstall\Config + +EXEFILE = $(MEDIABINDIR)\instloop.exe + +DLLFILE = $(MEDIABINDIR)\afsloopback.dll + +DLLEXPORTS=\ + -EXPORT:UnInstallLoopBack \ + -EXPORT:IsLoopbackInstalled \ + -EXPORT:InstallLoopBack \ + -EXPORT:doLoopBackEntryW \ + -EXPORT:uninstallLoopBackEntryW \ + -EXPORT:installLoopbackMSI \ + -EXPORT:uninstallLoopbackMSI + +DLLLIBFILES=\ + setupapi.lib msi.lib uuid.lib Shell32.lib ole32.lib advapi32.lib wbemuuid.lib + +LINK=link + +# afsloopback.dll + +DLLSOURCEFILES = loopbackutils.cpp renameconnection.cpp wmi.cpp +DLLOBJFILES = $(OUT)\loopbackutils.obj $(OUT)\renameconnection.obj $(OUT)\wmi.obj + +STATICC2OBJ=$(CC) $(cflags) $(afscflags) $(afscdefs) -ML + +$(OUT)\loopbackutils.obj: loopbackutils.cpp + $(STATICC2OBJ) -c -DUNICODE -D_UNICODE /Fo$@ $** + +$(OUT)\renameconnection.obj: renameconnection.cpp + $(STATICC2OBJ) -c -DUNICODE -D_UNICODE /Fo$@ $** + +$(OUT)\wmi.obj: wmi.cpp + $(STATICC2OBJ) -I$(NTDDKDIR) -c -DUNICODE -D_UNICODE /Fo$@ $** + +$(DLLFILE): $(DLLOBJFILES) + $(LINK) -DLL $(DLLEXPORTS) -OUT:$@ $(DLLOBJFILES) $(DLLLIBFILES) + +# instloop.exe + +EXEOBJFILES = $(OUT)\instloop.obj $(DLLOBJFILES) +#EXELIBFILES = $(MEDIABINDIR)\afsloopback.lib + +$(OUT)\instloop.obj: instloop.c + $(STATICC2OBJ) -c -DUNICODE -D_UNICODE /Fo$@ $** + +$(EXEFILE): $(EXEOBJFILES) + $(LINK) /OUT:$@ $(EXEOBJFILES) $(DLLLIBFILES) + +install: $(DLLFILE) $(EXEFILE) + +clean :: diff --git a/src/WINNT/install/loopback/instloop.c b/src/WINNT/install/loopback/instloop.c new file mode 100644 index 000000000..bb7427a38 --- /dev/null +++ b/src/WINNT/install/loopback/instloop.c @@ -0,0 +1,146 @@ +/* + +Copyright 2004 by the Massachusetts Institute of Technology + +All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of the Massachusetts +Institute of Technology (M.I.T.) not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*/ + +#include +#include +#define INITGUID +#include +#include +#include +#include +#include "loopbackutils.h" + +#undef REDIRECT_STDOUT + +static void +ShowUsage(void) +{ + printf("instloop [-i [name [ip mask]] | -u]\n\n"); + printf(" -i install the %s\n", DRIVER_DESC); + _tprintf(_T(" (if unspecified, uses name %s,\n"), DEFAULT_NAME); + _tprintf(_T(" ip %s, and mask %s)\n"), DEFAULT_IP, DEFAULT_MASK); + printf(" -u uninstall the %s\n", DRIVER_DESC); +} + +static void +DisplayStartup(BOOL bInstall) +{ + printf("%snstalling the %s\n" + " (Note: This may take up to a minute or two...)\n", + bInstall ? "I" : "Un", + DRIVER_DESC); + +} + +static void +DisplayResult(BOOL bInstall, DWORD rc) +{ + if (rc) + { + printf("Could not %sinstall the %s\n", bInstall ? "" : "un", + DRIVER_DESC); + SLEEP; + PAUSE; + } +} + + +int _tmain(int argc, TCHAR *argv[]) +{ + DWORD rc = 0; +#ifdef REDIRECT_STDOUT + FILE *fh = NULL; +#endif + + PAUSE; + +#ifdef REDIRECT_STDOUT + fh = freopen("instlog.txt","a+", stdout); +#endif + + if (argc > 1) + { + if (_tcsicmp(argv[1], _T("-i")) == 0) + { + TCHAR* name = DEFAULT_NAME; + TCHAR* ip = DEFAULT_IP; + TCHAR* mask = DEFAULT_MASK; + + if (argc > 2) + { + name = argv[2]; + if (argc > 3) + { + if (argc < 5) + { + ShowUsage(); +#ifdef REDIRECT_STDOUT + fflush(fh); fclose(fh); +#endif + return 1; + } + else + { + ip = argv[3]; + mask = argv[4]; + } + } + } + DisplayStartup(TRUE); + if(IsLoopbackInstalled()) { + printf("Loopback already installed\n"); + rc = 0; /* don't signal an error. */ + } else { + rc = InstallLoopBack(name, ip, mask); + } + DisplayResult(TRUE, rc); +#ifdef REDIRECT_STDOUT + fflush(fh); fclose(fh); +#endif + return rc; + } + else if (_tcsicmp(argv[1], _T("-u")) == 0) + { + DisplayStartup(FALSE); + rc = UnInstallLoopBack(); + DisplayResult(FALSE, rc); +#ifdef REDIRECT_STDOUT + fflush(fh); fclose(fh); +#endif + return rc; + } + ShowUsage(); +#ifdef REDIRECT_STDOUT + fflush(fh); fclose(fh); +#endif + return 1; + } + ShowUsage(); +#ifdef REDIRECT_STDOUT + fflush(fh); fclose(fh); +#endif + return 0; +} + diff --git a/src/WINNT/install/loopback/loopbackutils.cpp b/src/WINNT/install/loopback/loopbackutils.cpp new file mode 100644 index 000000000..7ec3e4ba9 --- /dev/null +++ b/src/WINNT/install/loopback/loopbackutils.cpp @@ -0,0 +1,709 @@ +/* + Copyright 2004 by the Massachusetts Institute of Technology + + All rights reserved. + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of the Massachusetts + Institute of Technology (M.I.T.) not be used in advertising or publicity + pertaining to distribution of the software without specific, written + prior permission. + + M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + SOFTWARE. +*/ + +#define _WIN32_DCOM +#include +#include +#include + +struct Args { + bool bQuiet; + LPWSTR lpIPAddr; + LPWSTR lpSubnetMask; + LPWSTR lpConnectionName; + Args () : bQuiet (0), lpIPAddr (0), lpSubnetMask (0), lpConnectionName (0) { } + ~Args () { + if (lpIPAddr) free (lpIPAddr); + if (lpSubnetMask) free (lpSubnetMask); + if (lpConnectionName) free (lpConnectionName); + } +}; + +#include +#define INITGUID +#include +#include +#include +#include +#include +#include +#include +#include "loopbackutils.h" + +extern "C" DWORD UnInstallLoopBack(void) +{ + BOOL ok; + DWORD ret = 0; + GUID netGuid; + HDEVINFO hDeviceInfo = INVALID_HANDLE_VALUE; + SP_DEVINFO_DATA DeviceInfoData; + TCHAR* deviceDesc; + DWORD index = 0; + BOOL found = FALSE; + DWORD size = 0; + + // initialize the structure size + DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); + + // copy the net class GUID + memcpy(&netGuid, &GUID_DEVCLASS_NET, sizeof(GUID_DEVCLASS_NET)); + + // return a device info set contains all installed devices of the Net class + hDeviceInfo = SetupDiGetClassDevs(&netGuid, NULL, NULL, DIGCF_PRESENT); + + if (hDeviceInfo == INVALID_HANDLE_VALUE) + return GetLastError(); + + deviceDesc = (TCHAR *)malloc(MAX_PATH*sizeof(TCHAR)); + // enumerate the driver info list + while (SetupDiEnumDeviceInfo(hDeviceInfo, index, &DeviceInfoData)) + { + // try to get the DeviceDesc registry property + ok = SetupDiGetDeviceRegistryProperty(hDeviceInfo, &DeviceInfoData, + SPDRP_DEVICEDESC, + NULL, (PBYTE)deviceDesc, + MAX_PATH * sizeof(TCHAR), &size); + if (!ok) + { + ret = GetLastError(); + if (ret != ERROR_INSUFFICIENT_BUFFER) + break; + // if the buffer is too small, reallocate + free(deviceDesc); + deviceDesc = (TCHAR *)malloc(size); + ok = SetupDiGetDeviceRegistryProperty(hDeviceInfo, + &DeviceInfoData, + SPDRP_DEVICEDESC, + NULL, (PBYTE)deviceDesc, + size, NULL); + if (!ok) + break; + } + + // case insensitive comparison + _tcslwr(deviceDesc); + if( _tcsstr(deviceDesc, DRIVER)) + { + found = TRUE; + break; + } + + index++; + } + + free(deviceDesc); + + if (found == FALSE) + { + ret = GetLastError(); + ReportMessage(0,"Driver does not seem to be installed", DRIVER_DESC, NULL, ret); + goto cleanup; + } + + ok = SetupDiSetSelectedDevice(hDeviceInfo, &DeviceInfoData); + if (!ok) + { + ret = GetLastError(); + goto cleanup; + } + ok = SetupDiCallClassInstaller(DIF_REMOVE, hDeviceInfo, &DeviceInfoData); + if (!ok) + { + ret = GetLastError(); + goto cleanup; + } + +cleanup: + // clean up the device info set + if (hDeviceInfo != INVALID_HANDLE_VALUE) + SetupDiDestroyDeviceInfoList(hDeviceInfo); + + return ret; +} + +BOOL IsLoopbackInstalled(void) +{ + TCHAR * hwid = _T("*MSLOOP"); + HDEVINFO DeviceInfoSet; + SP_DEVINFO_DATA DeviceInfoData; + DWORD i,err; + BOOL found; + + // + // Create a Device Information Set with all present devices. + // + DeviceInfoSet = SetupDiGetClassDevs(NULL, 0, 0, DIGCF_ALLCLASSES | DIGCF_PRESENT ); // All devices present on system + if (DeviceInfoSet == INVALID_HANDLE_VALUE) + { + return FALSE; // nothing installed? + } + + // + // Enumerate through all Devices. + // + found = FALSE; + DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); + for (i=0; SetupDiEnumDeviceInfo(DeviceInfoSet,i,&DeviceInfoData); i++) + { + DWORD DataT; + TCHAR *p, *buffer = NULL; + DWORD buffersize = 0; + + // + // We won't know the size of the HardwareID buffer until we call + // this function. So call it with a null to begin with, and then + // use the required buffer size to Alloc the nessicary space. + // Keep calling we have success or an unknown failure. + // + while (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet,&DeviceInfoData,SPDRP_HARDWAREID,&DataT,(PBYTE)buffer,buffersize,&buffersize)) + { + if (GetLastError() == ERROR_INVALID_DATA) + { + // May be a Legacy Device with no hwid. Continue. + break; + } + else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) + { + // We need to change the buffer size. + if (buffer) + LocalFree(buffer); + buffer = (TCHAR *)LocalAlloc(LPTR,buffersize); + } + else + { + goto cleanup_DeviceInfo; + } + } + + if (GetLastError() == ERROR_INVALID_DATA) + continue; + + // Compare each entry in the buffer multi-sz list with our hwid. + for (p=buffer; *p && (p < &buffer[buffersize]); p += _tcslen(p)+1) + { + if (!_tcsicmp(hwid,p)) + { + found = TRUE; + break; + } + } + + if (buffer) LocalFree(buffer); + if (found) break; + } + + // Cleanup. +cleanup_DeviceInfo: + err = GetLastError(); + SetupDiDestroyDeviceInfoList(DeviceInfoSet); + SetLastError(err); + + return found; +} + + +extern "C" DWORD InstallLoopBack(LPCTSTR pConnectionName, LPCTSTR ip, LPCTSTR mask) +{ + BOOL ok; + DWORD ret = 0; + GUID netGuid; + HDEVINFO hDeviceInfo = INVALID_HANDLE_VALUE; + SP_DEVINFO_DATA DeviceInfoData; + SP_DRVINFO_DATA DriverInfoData; + SP_DEVINSTALL_PARAMS DeviceInstallParams; + TCHAR className[MAX_PATH]; + TCHAR temp[MAX_PATH]; + DWORD index = 0; + BOOL found = FALSE; + BOOL registered = FALSE; + BOOL destroyList = FALSE; + + HKEY hkey = NULL; + DWORD cbSize; + DWORD dwValueType; + TCHAR pCfgGuidString[40]; + + // initialize the structure size + DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); + DriverInfoData.cbSize = sizeof(SP_DRVINFO_DATA); + + // copy the net class GUID + memcpy(&netGuid, &GUID_DEVCLASS_NET, sizeof(GUID_DEVCLASS_NET)); + + // create an empty device info set associated with the net class GUID + hDeviceInfo = SetupDiCreateDeviceInfoList(&netGuid, NULL); + if (hDeviceInfo == INVALID_HANDLE_VALUE) + return GetLastError(); + + // get the class name from GUID + ok = SetupDiClassNameFromGuid(&netGuid, className, MAX_PATH, NULL); + if (!ok) + { + ret = GetLastError(); + goto cleanup; + } + + // create a device info element and add the new device instance + // key to registry + ok = SetupDiCreateDeviceInfo(hDeviceInfo, className, &netGuid, NULL, NULL, + DICD_GENERATE_ID, &DeviceInfoData); + if (!ok) + { + ret = GetLastError(); + goto cleanup; + } + + // select the newly created device info to be the currently + // selected member + ok = SetupDiSetSelectedDevice(hDeviceInfo, &DeviceInfoData); + if (!ok) + { + ret = GetLastError(); + goto cleanup; + } + + // build a list of class drivers + ok = SetupDiBuildDriverInfoList(hDeviceInfo, &DeviceInfoData, + SPDIT_CLASSDRIVER); + if (!ok) + { + ret = GetLastError(); + goto cleanup; + } + + destroyList = TRUE; + + // enumerate the driver info list + while (SetupDiEnumDriverInfo(hDeviceInfo, &DeviceInfoData, + SPDIT_CLASSDRIVER, index, &DriverInfoData)) + { + // if the manufacture is microsoft + if (_tcsicmp(DriverInfoData.MfgName, MANUFACTURE) == 0) + { + // case insensitive search for loopback + _tcscpy(temp, DriverInfoData.Description); + _tcslwr(temp); + if( _tcsstr(temp, DRIVER)) + { + found = TRUE; + break; + } + } + index++; + } + + if (!found) + { + ret = GetLastError(); + ReportMessage(0,"Could not find the driver to install", DRIVER_DESC, NULL, 0); + goto cleanup; + } + + // set the loopback driver to be the currently selected + ok = SetupDiSetSelectedDriver(hDeviceInfo, &DeviceInfoData, + &DriverInfoData); + if (!ok) + { + ret = GetLastError(); + goto cleanup; + } + + // register the phantom device to repare for install + ok = SetupDiCallClassInstaller(DIF_REGISTERDEVICE, hDeviceInfo, + &DeviceInfoData); + if (!ok) + { + ret = GetLastError(); + goto cleanup; + } + + // registered, but remove if errors occur in the following code + registered = TRUE; + + // ask the installer if we can install the device + ok = SetupDiCallClassInstaller(DIF_ALLOW_INSTALL, hDeviceInfo, + &DeviceInfoData); + if (!ok) + { + ret = GetLastError(); + if (ret != ERROR_DI_DO_DEFAULT) + { + goto cleanup; + } + else + ret = 0; + } + + // install the files first + ok = SetupDiCallClassInstaller(DIF_INSTALLDEVICEFILES, hDeviceInfo, + &DeviceInfoData); + if (!ok) + { + ret = GetLastError(); + goto cleanup; + } + + // get the device install parameters and disable filecopy + DeviceInstallParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS); + ok = SetupDiGetDeviceInstallParams(hDeviceInfo, &DeviceInfoData, + &DeviceInstallParams); + if (ok) + { + DeviceInstallParams.Flags |= DI_NOFILECOPY; + ok = SetupDiSetDeviceInstallParams(hDeviceInfo, &DeviceInfoData, + &DeviceInstallParams); + if (!ok) + { + ret = GetLastError(); + goto cleanup; + } + } + + // + // Register any device-specific co-installers for this device, + // + + ok = SetupDiCallClassInstaller(DIF_REGISTER_COINSTALLERS, + hDeviceInfo, + &DeviceInfoData); + if (!ok) + { + ret = GetLastError(); + goto cleanup; + } + + // + // install any installer-specified interfaces. + // and then do the real install + // + ok = SetupDiCallClassInstaller(DIF_INSTALLINTERFACES, + hDeviceInfo, + &DeviceInfoData); + if (!ok) + { + ret = GetLastError(); + goto cleanup; + } + PAUSE; + ok = SetupDiCallClassInstaller(DIF_INSTALLDEVICE, + hDeviceInfo, + &DeviceInfoData); + if (!ok) + { + ret = GetLastError(); + PAUSE; + goto cleanup; + } + + /* Skip to the end if we aren't setting the name */ + if (!pConnectionName) goto cleanup; + + // Figure out NetCfgInstanceId + hkey = SetupDiOpenDevRegKey(hDeviceInfo, + &DeviceInfoData, + DICS_FLAG_GLOBAL, + 0, + DIREG_DRV, + KEY_READ); + if (hkey == INVALID_HANDLE_VALUE) + { + ret = GetLastError(); + goto cleanup; + } + + cbSize = sizeof(pCfgGuidString); + ret = RegQueryValueEx(hkey, _T("NetCfgInstanceId"), NULL, + &dwValueType, (LPBYTE)pCfgGuidString, &cbSize); + RegCloseKey(hkey); + + ret = RenameConnection(pCfgGuidString, pConnectionName); + if (ret) + { + ReportMessage(0,"Could not set the connection name", NULL, pConnectionName, 0); + goto cleanup; + } + + if (!ip) goto cleanup; + ret = SetIpAddress(pCfgGuidString, ip, mask); + if (ret) + { + ReportMessage(0,"Could not set the ip address and network mask",NULL,NULL,0); + goto cleanup; + } + ret = LoopbackBindings(pCfgGuidString); + if (ret) + { + ReportMessage(0,"Could not properly set the bindings",NULL,NULL,0); + goto cleanup; + } + ret = !UpdateHostsFile( pConnectionName, ip, "hosts", FALSE ); + if (ret) + { + ReportMessage(0,"Could not update hosts file",NULL,NULL,0); + goto cleanup; + } + ret = !UpdateHostsFile( pConnectionName, ip, "lmhosts", TRUE ); + if (ret) + { + ReportMessage(0,"Could not update lmhosts file",NULL,NULL,0); + goto cleanup; + } + + +cleanup: + // an error has occured, but the device is registered, we must remove it + if (ret != 0 && registered) + SetupDiCallClassInstaller(DIF_REMOVE, hDeviceInfo, &DeviceInfoData); + + found = SetupDiDeleteDeviceInfo(hDeviceInfo, &DeviceInfoData); + + // destroy the driver info list + if (destroyList) + SetupDiDestroyDriverInfoList(hDeviceInfo, &DeviceInfoData, + SPDIT_CLASSDRIVER); + // clean up the device info set + if (hDeviceInfo != INVALID_HANDLE_VALUE) + SetupDiDestroyDeviceInfoList(hDeviceInfo); + + return ret; +}; + +/* The following functions provide the RunDll32 interface + * RunDll32 loopback_install.dll doLoopBackEntry [Interface Name] [IP address] [Subnet Mask] + */ + +static void wcsMallocAndCpy (LPWSTR * dst, const LPWSTR src) { + *dst = (LPWSTR) malloc ((wcslen (src) + 1) * sizeof (WCHAR)); + wcscpy (*dst, src); +} + +static void display_usage() +{ + MessageBoxW( NULL, + L"Installation utility for the MS Loopback Adapter\r\n\r\n" + L"Usage:\r\n" + L"RunDll32 loopback_install.dll doLoopBackEntry [q|quiet] [Connection Name] [IP address] [Submask]\r\n", + L"loopback_install", MB_ICONINFORMATION | MB_OK ); +} + +static int process_args (LPWSTR lpCmdLine, int skip, Args & args) { + int i, iNumArgs; + LPWSTR * argvW; + + argvW = CommandLineToArgvW (lpCmdLine, &iNumArgs); + // Skip over the command name + for (i = skip; i < iNumArgs; i++) + { + if (wcsstr (argvW[i], L"help") + || !_wcsicmp (argvW[i], L"?") + || (wcslen(argvW[i]) == 2 && argvW[i][1] == L'?')) + { + display_usage(); + GlobalFree (argvW); + return 0; + } + + if (!_wcsicmp (argvW[i], L"q") || !_wcsicmp (argvW[i], L"quiet")) { + args.bQuiet = true; + continue; + } + + if (!args.lpConnectionName) { + wcsMallocAndCpy (&args.lpConnectionName, argvW[i]); + continue; + } + + if (!args.lpIPAddr) { + wcsMallocAndCpy (&args.lpIPAddr, argvW[i]); + continue; + } + + if (!args.lpSubnetMask) { + wcsMallocAndCpy (&args.lpSubnetMask, argvW[i]); + continue; + } + + display_usage(); + GlobalFree (argvW); + return 0; + } + + if (!args.lpConnectionName) + wcsMallocAndCpy (&args.lpConnectionName, DEFAULT_NAME); + if (!args.lpIPAddr) + wcsMallocAndCpy (&args.lpIPAddr, DEFAULT_IP); + if (!args.lpSubnetMask) + wcsMallocAndCpy (&args.lpSubnetMask, DEFAULT_MASK); + + GlobalFree (argvW); + + return 1; +} + +void CALLBACK doLoopBackEntryW (HWND hwnd, HINSTANCE hinst, LPWSTR lpCmdLine, int nCmdShow) +{ + Args args; + + if (!process_args(lpCmdLine, 0, args)) + return; + + InstallLoopBack(args.lpConnectionName, args.lpIPAddr, args.lpSubnetMask); +} + +void CALLBACK uninstallLoopBackEntryW (HWND hwnd, HINSTANCE hinst, LPWSTR lpCmdLine, int nCmdSHow) +{ + Args args; + + // initialize COM + // This and CoInitializeSecurity fail when running under the MSI + // engine, but there seems to be no ill effect (the security is now + // set on the specific object via CoSetProxyBlanket in loopback_configure) + if(CoInitializeEx(NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED )) + { + //Don't fail (MSI install will have already initialized COM) + //EasyErrorBox(0, L"Failed to initialize COM."); + //return 1; + } + + // Initialize COM security (otherwise we'll get permission denied when we try to use WMI or NetCfg) + CoInitializeSecurity( NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL); + + UnInstallLoopBack(); + + CoUninitialize(); +} + +/* And an MSI installer interface */ + +UINT __stdcall installLoopbackMSI (MSIHANDLE hInstall) +{ + LPWSTR szValueBuf; + DWORD cbValueBuf = 256; + Args args; + UINT rc; + + SetMsiReporter("InstallLoopback", "Installing loopback adapter", hInstall); + + /* check if there is already one installed. If there is, we shouldn't try to + * install another. + */ + if(IsLoopbackInstalled()) + return ERROR_SUCCESS; + + szValueBuf = (LPWSTR) malloc (cbValueBuf * sizeof (WCHAR)); + while (rc = MsiGetPropertyW(hInstall, L"CustomActionData", szValueBuf, &cbValueBuf)) { + free (szValueBuf); + if (rc == ERROR_MORE_DATA) { + cbValueBuf++; + szValueBuf = (LPWSTR) malloc (cbValueBuf * sizeof (WCHAR)); + } + else + return ERROR_INSTALL_FAILURE; + } + + if (!process_args(szValueBuf, 1, args)) + return ERROR_INSTALL_FAILURE; + + rc = InstallLoopBack (args.lpConnectionName, args.lpIPAddr, args.lpSubnetMask); + + if (rc != 2 && rc != 0) + return ERROR_INSTALL_FAILURE; + + if (rc == 2) { + MsiDoActionW (hInstall, L"ScheduleReboot"); + } + + return ERROR_SUCCESS; +} + +UINT __stdcall uninstallLoopbackMSI (MSIHANDLE hInstall) +{ + LPWSTR szValueBuf; + DWORD cbValueBuf = 256; + Args args; + UINT rc; + + SetMsiReporter("RemoveLoopback", "Removing loopback adapter", hInstall); + + szValueBuf = (LPWSTR) malloc (cbValueBuf * sizeof (WCHAR)); + while (rc = MsiGetPropertyW(hInstall, L"CustomActionData", szValueBuf, &cbValueBuf)) { + free (szValueBuf); + if (rc == ERROR_MORE_DATA) { + cbValueBuf++; + szValueBuf = (LPWSTR) malloc (cbValueBuf * sizeof (WCHAR)); + } + else + return ERROR_INSTALL_FAILURE; + } + + if (!process_args(szValueBuf, 1, args)) + return ERROR_INSTALL_FAILURE; + + rc = UnInstallLoopBack (); + + if (rc == 1) + return ERROR_INSTALL_FAILURE; + + if (rc == 2) { + MsiDoActionW (hInstall, L"ScheduleReboot"); + } + + return ERROR_SUCCESS; +} + +DWORD hMsiHandle = 0; +DWORD dwReporterType = REPORT_PRINTF; + +extern "C" void ReportMessage(int level, LPCSTR msg, LPCSTR str, LPCWSTR wstr, DWORD dw) { + if(dwReporterType == REPORT_PRINTF) + printf("%s:[%s][%S][%d]\n", (msg?msg:""), (str?str:""), (wstr?wstr:L""), dw); + else if(dwReporterType == REPORT_MSI && hMsiHandle && level == 0) { + MSIHANDLE hRec = MsiCreateRecord(5); + + MsiRecordClearData(hRec); + MsiRecordSetStringA(hRec,1,(msg)?msg:""); + MsiRecordSetStringA(hRec,2,(str)?str:""); + MsiRecordSetStringW(hRec,3,(wstr)?wstr:L""); + MsiRecordSetInteger(hRec,4,dw); + + MsiProcessMessage(hMsiHandle,INSTALLMESSAGE_ACTIONDATA,hRec); + + MsiCloseHandle(hRec); + } +} + +extern "C" void SetMsiReporter(LPCSTR strAction, LPCSTR strDesc,DWORD h) { + dwReporterType = REPORT_MSI; + hMsiHandle = h; + + MSIHANDLE hRec = MsiCreateRecord(4); + + MsiRecordClearData(hRec); + MsiRecordSetStringA(hRec,1,strAction); + MsiRecordSetStringA(hRec,2,strDesc); + MsiRecordSetStringA(hRec,3,"[1]:([2])([3])([4])"); + + MsiProcessMessage(h,INSTALLMESSAGE_ACTIONSTART, hRec); + + MsiCloseHandle(hRec); +} diff --git a/src/WINNT/install/loopback/loopbackutils.h b/src/WINNT/install/loopback/loopbackutils.h new file mode 100644 index 000000000..74b83fe31 --- /dev/null +++ b/src/WINNT/install/loopback/loopbackutils.h @@ -0,0 +1,74 @@ +/* + +Copyright 2004 by the Massachusetts Institute of Technology + +All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of the Massachusetts +Institute of Technology (M.I.T.) not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*/ + +#ifdef __cplusplus +extern "C" { +#endif +DWORD InstallLoopBack(LPCTSTR pConnectionName, LPCTSTR ip, LPCTSTR mask); +BOOL IsLoopbackInstalled(void); +DWORD UnInstallLoopBack(void); +int RenameConnection(PCWSTR GuidString, PCWSTR pszNewName); +DWORD SetIpAddress(LPCWSTR guid, LPCWSTR ip, LPCWSTR mask); +HRESULT LoopbackBindings (LPCWSTR loopback_guid); +BOOL UpdateHostsFile( LPCWSTR swName, LPCWSTR swIp, LPCSTR szFilename, BOOL bPre ); +void ReportMessage(int level, LPCSTR msg, LPCSTR str, LPCWSTR wstr, DWORD dw); +void SetMsiReporter(LPCSTR strAction, LPCSTR strDesc, DWORD h); +#ifdef __cplusplus +} +#endif + +#define DRIVER_DESC "Microsoft Loopback Adapter" +#define DRIVER _T("loopback") +#define MANUFACTURE _T("microsoft") +#define DEFAULT_NAME _T("AFS") +#define DEFAULT_IP _T("10.254.254.253") +#define DEFAULT_MASK _T("255.255.255.252") + +#ifdef USE_PAUSE +#define PAUSE \ + do { \ + char c; \ + printf("PAUSED - PRESS ENTER TO CONTINUE\n"); \ + scanf("%c", &c); \ + } while(0) +#else +#define PAUSE +#endif + +/*#define USE_SLEEP*/ + +#ifdef USE_SLEEP +#define SLEEP Sleep(10*1000) +#else +#define SLEEP +#endif + +/* Reporting mechanisms */ +#define REPORT_PRINTF 1 +#define REPORT_MSI 2 +#define REPORT_IGNORE 3 + +extern DWORD dwReporterType; +extern DWORD hMsiHandle; \ No newline at end of file diff --git a/src/WINNT/install/loopback/renameconnection.cpp b/src/WINNT/install/loopback/renameconnection.cpp new file mode 100644 index 000000000..5842f8f09 --- /dev/null +++ b/src/WINNT/install/loopback/renameconnection.cpp @@ -0,0 +1,121 @@ +/* + +Copyright 2004 by the Massachusetts Institute of Technology + +All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of the Massachusetts +Institute of Technology (M.I.T.) not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*/ + +#include +#include +#include +#include +#include +#include + +#include "loopbackutils.h" + +#define NETSHELL_LIBRARY _T("netshell.dll") + +// Use the IShellFolder API to rename the connection. +static HRESULT rename_shellfolder(PCWSTR wGuid, PCWSTR wNewName) +{ + // This is the GUID for the network connections folder. It is constant. + // {7007ACC7-3202-11D1-AAD2-00805FC1270E} + const GUID CLSID_NetworkConnections = { + 0x7007ACC7, 0x3202, 0x11D1, { + 0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E + } + }; + LPITEMIDLIST pidl; + IShellFolder *pShellFolder; + IMalloc *pShellMalloc; + + // Build the display name in the form "::{GUID}". + if (wcslen(wGuid) >= MAX_PATH) + return E_INVALIDARG; + WCHAR szAdapterGuid[MAX_PATH + 2]; + swprintf(szAdapterGuid, L"::%ls", wGuid); + + // Initialize COM. + CoInitialize(NULL); + + // Get the shell allocator. + HRESULT hr = SHGetMalloc(&pShellMalloc); + if (SUCCEEDED(hr)) + { + // Create an instance of the network connections folder. + hr = CoCreateInstance(CLSID_NetworkConnections, NULL, + CLSCTX_INPROC_SERVER, IID_IShellFolder, + reinterpret_cast(&pShellFolder)); + } + // Parse the display name. + if (SUCCEEDED(hr)) + { + hr = pShellFolder->ParseDisplayName(NULL, NULL, szAdapterGuid, NULL, + &pidl, NULL); + } + if (SUCCEEDED(hr)) + { + hr = pShellFolder->SetNameOf(NULL, pidl, wNewName, SHGDN_NORMAL, + &pidl); + pShellMalloc->Free(pidl); + } + CoUninitialize(); + return hr; +} + +extern "C" int RenameConnection(PCWSTR GuidString, PCWSTR NewName) +{ + typedef HRESULT (WINAPI *lpHrRenameConnection)(const GUID *, PCWSTR); + lpHrRenameConnection RenameConnectionFunc = NULL; + HRESULT status; + + // First try the IShellFolder interface, which was unimplemented + // for the network connections folder before XP. + status = rename_shellfolder(GuidString, NewName); + if (status == E_NOTIMPL) + { + // The IShellFolder interface is not implemented on this platform. + // Try the (undocumented) HrRenameConnection API in the netshell + // library. + CLSID clsid; + HINSTANCE hNetShell; + status = CLSIDFromString((LPOLESTR) GuidString, &clsid); + if (FAILED(status)) + return -1; + hNetShell = LoadLibrary(NETSHELL_LIBRARY); + if (hNetShell == NULL) + return -1; + RenameConnectionFunc = + (lpHrRenameConnection) GetProcAddress(hNetShell, + "HrRenameConnection"); + if (RenameConnectionFunc == NULL) + { + FreeLibrary(hNetShell); + return -1; + } + status = RenameConnectionFunc(&clsid, NewName); + FreeLibrary(hNetShell); + } + if (FAILED(status)) + return -1; + return 0; +} diff --git a/src/WINNT/install/loopback/wmi.cpp b/src/WINNT/install/loopback/wmi.cpp new file mode 100644 index 000000000..80cfaa627 --- /dev/null +++ b/src/WINNT/install/loopback/wmi.cpp @@ -0,0 +1,809 @@ +/* + +Copyright 2004 by the Massachusetts Institute of Technology + +All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of the Massachusetts +Institute of Technology (M.I.T.) not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*/ + +//************************************************************************** +// +// Description: +// +// Call EnableStatic method of Win32_NetworkAdapterConfiguration +// for some network adapter GUID. +// +// Note: +// +// The EnableStatic method is notsupported on Win9x platforms. +// +//************************************************************************** + +#define _WIN32_DCOM +#include +#include +#include +#include + +#include + +/* These two are from the Windows DDK */ +#include +#include + +#include +//#include + +//#ifndef TEST +//inline void printf(char*, ...) {} +//#else +#include +//#endif + +#include "loopbackutils.h" + +#define CLEANUP_ON_FAILURE(hr) \ + do { if (!SUCCEEDED(hr)) {goto cleanup;} } while (0) + +#define CLEANUP_ON_AND_SET(check, var, value) \ + do { if (check) { (var) = (value); goto cleanup; } } while (0) + +#define ETCDIR "\\drivers\\etc" + +#define EACCES (13) +#define ENOENT (2) + +DWORD AdjustMaxLana(DWORD dwMaxLana); + +typedef +HRESULT +(*FindNetworkAdapterConfigurationInstance_t)( + IN PVOID pContext, + IN IWbemServices *pSvc, + OUT BSTR* pPath + ); + +HRESULT +FindNetworkAdapterConfigurationInstanceByGUID( + IN PVOID pContext, + IN IWbemServices *pSvc, + OUT BSTR* pPath + ) +{ + HRESULT hr = 0; + BOOL bFound = FALSE; + BSTR Language = 0; + BSTR Query = 0; + IEnumWbemClassObject* pEnum = 0; + IWbemClassObject* pObj = 0; + VARIANT Value; + VariantInit(&Value); + LPCWSTR adapter_guid = (LPCWSTR)pContext; + + // Check arguments + if (!pPath || !adapter_guid || *pPath) + return E_INVALIDARG; + + *pPath = 0; + + // Query for all network adapters + Language = SysAllocString(L"WQL"); + Query = SysAllocString(L"select * from Win32_NetworkAdapterConfiguration"); + + // Issue the query. + hr = pSvc->ExecQuery(Language, + Query, + WBEM_FLAG_FORWARD_ONLY, // Flags + 0, // Context + &pEnum); + if (!SUCCEEDED(hr)) + { + ReportMessage(0,"ExecQuery() error",NULL,NULL, hr); + goto cleanup; + } + + // Retrieve the objects in the result set. + while (!bFound) + { + ULONG uReturned = 0; + + hr = pEnum->Next(0, // Time out + 1, // One object + &pObj, + &uReturned); + CLEANUP_ON_FAILURE(hr); + + if (uReturned == 0) + break; + + // Use the object. + hr = pObj->Get(L"SettingID", // property name + 0L, + &Value, // output to this variant + NULL, + NULL); + CLEANUP_ON_FAILURE(hr); + + bFound = !wcscmp(adapter_guid, V_BSTR(&Value)); + + if (bFound) + { + ReportMessage(1,"Found adapter", NULL,V_BSTR(&Value),0); + VariantClear(&Value); + hr = pObj->Get(L"__RELPATH", // property name + 0L, + &Value, // output to this variant + NULL, + NULL); + CLEANUP_ON_FAILURE(hr); + + *pPath = SysAllocString(V_BSTR(&Value)); + + } + + VariantClear(&Value); + + // Release it. + // =========== + pObj->Release(); // Release objects not owned. + pObj = 0; + } + + + // All done. + cleanup: + SysFreeString(Query); + SysFreeString(Language); + VariantClear(&Value); + if (pEnum) + pEnum->Release(); + if (pObj) + pObj->Release(); + + return *pPath ? 0 : ( SUCCEEDED(hr) ? WBEM_E_NOT_FOUND : hr ); +} + +HRESULT +SetupStringAsSafeArray(LPCWSTR s, VARIANT* v) +{ + HRESULT hr = 0; + BSTR b = 0; + SAFEARRAY* array = 0; + long index[] = {0}; + + if (V_VT(v) != VT_EMPTY) + return E_INVALIDARG; + + b = SysAllocString(s); + CLEANUP_ON_AND_SET(!b, hr, E_OUTOFMEMORY); + + array = SafeArrayCreateVector(VT_BSTR, 0, 1); + CLEANUP_ON_AND_SET(!array, hr, E_OUTOFMEMORY); + + hr = SafeArrayPutElement(array, index, b); + CLEANUP_ON_FAILURE(hr); + + V_VT(v) = VT_ARRAY|VT_BSTR; + V_ARRAY(v) = array; + + cleanup: + if (b) + SysFreeString(b); + if (!SUCCEEDED(hr)) + { + if (array) + SafeArrayDestroy(array); + } + return hr; +} + + +HRESULT +WMIEnableStatic( + FindNetworkAdapterConfigurationInstance_t pFindInstance, + PVOID pContext, + LPCWSTR ip, + LPCWSTR mask + ) +{ + HRESULT hr = 0; + + IWbemLocator* pLocator = 0; + IWbemServices* pNamespace = 0; + IWbemClassObject* pClass = 0; + IWbemClassObject* pOutInst = 0; + IWbemClassObject* pInClass = 0; + IWbemClassObject* pInInst = 0; + + BSTR NamespacePath = 0; + BSTR ClassPath = 0; + BSTR InstancePath = 0; + BSTR MethodName = 0; // needs to be BSTR for ExecMethod() + + VARIANT v_ip_list; + VariantInit(&v_ip_list); + + VARIANT v_mask_list; + VariantInit(&v_mask_list); + + VARIANT v_ret_value; + VariantInit(&v_ret_value); + + int count; + + // end of declarations & NULL initialization + + NamespacePath = SysAllocString(L"root\\cimv2"); + CLEANUP_ON_AND_SET(!NamespacePath, hr, E_OUTOFMEMORY); + + ClassPath = SysAllocString(L"Win32_NetWorkAdapterConfiguration"); + CLEANUP_ON_AND_SET(!ClassPath, hr, E_OUTOFMEMORY); + + MethodName = SysAllocString(L"EnableStatic"); + CLEANUP_ON_AND_SET(!MethodName, hr, E_OUTOFMEMORY); + + // Initialize COM and connect up to CIMOM + + hr = CoInitializeEx(0, COINIT_MULTITHREADED); + CLEANUP_ON_FAILURE(hr); + + /* When called from an MSI this will generally fail. This should only be called once + per process and not surprisingly MSI beats us to it. So ignore return value and + hope for the best. */ + hr = CoInitializeSecurity(NULL, -1, NULL, NULL, + RPC_C_AUTHN_LEVEL_CONNECT, + RPC_C_IMP_LEVEL_IMPERSONATE, + NULL, EOAC_NONE, 0); + /* CLEANUP_ON_FAILURE(hr); */ + + hr = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, + IID_IWbemLocator, (LPVOID *) &pLocator); + CLEANUP_ON_FAILURE(hr); + + hr = pLocator->ConnectServer(NamespacePath, NULL, NULL, NULL, 0, + NULL, NULL, &pNamespace); + CLEANUP_ON_FAILURE(hr); + + ReportMessage(0,"Connected to WMI",NULL,NULL,0); + + // Set the proxy so that impersonation of the client occurs. + hr = CoSetProxyBlanket(pNamespace, + RPC_C_AUTHN_WINNT, + RPC_C_AUTHZ_NONE, + NULL, + RPC_C_AUTHN_LEVEL_CALL, + RPC_C_IMP_LEVEL_IMPERSONATE, + NULL, + EOAC_NONE); + CLEANUP_ON_FAILURE(hr); + + // Get the class object + hr = pNamespace->GetObject(ClassPath, 0, NULL, &pClass, NULL); + CLEANUP_ON_FAILURE(hr); + + // Get the instance + hr = pFindInstance(pContext, pNamespace, &InstancePath); + CLEANUP_ON_FAILURE(hr); + + ReportMessage(0,"Found Adapter Instance",NULL, InstancePath,0); + +#if 0 + // Use the adapter instance index to set MAXLANA in the registry. + { + DWORD dwIndex; + if (swscanf(InstancePath, L"Win32_NetworkAdapterConfiguration.Index=%u", &dwIndex)==1) + { + DWORD ret = 0; + ReportMessage(1,"Setting MAXLANA",NULL,NULL,dwIndex+1); + ret = AdjustMaxLana(dwIndex+1); + if (ret) ReportMessage(0,"AdjustMaxLana returned the error code ",NULL,NULL,ret); + } + } +#endif + + // Get the input argument and set the property + hr = pClass->GetMethod(MethodName, 0, &pInClass, NULL); + CLEANUP_ON_FAILURE(hr); + + hr = pInClass->SpawnInstance(0, &pInInst); + CLEANUP_ON_FAILURE(hr); + + // Set up parameters + hr = SetupStringAsSafeArray(ip, &v_ip_list); + CLEANUP_ON_FAILURE(hr); + + hr = pInInst->Put(L"IPAddress", 0, &v_ip_list, 0); + CLEANUP_ON_FAILURE(hr); + + hr = SetupStringAsSafeArray(mask, &v_mask_list); + CLEANUP_ON_FAILURE(hr); + + hr = pInInst->Put(L"SubNetMask", 0, &v_mask_list, 0); + CLEANUP_ON_FAILURE(hr); + + // Sleep for a twenty seconds + ReportMessage(0,"Calling ExecMethod in 20 seconds...",NULL,NULL,0); + Sleep(10000); + ReportMessage(0,"Calling ExecMethod in 10 seconds...",NULL,NULL,0); + Sleep(5000); + ReportMessage(0,"Calling ExecMethod in 5 seconds...",NULL,NULL,0); + Sleep(2000); + +// printf("Skipping ExecMethod\n"); +// hr = 0; +// goto cleanup; + + // Try up to five times, sleeping 3 seconds between tries + for (count=0; count<5; count++) + { + if (count>0) ReportMessage(0,"Trying again in 3 seconds...",NULL,NULL,0); + + Sleep(3000); + + ReportMessage(0,"Calling ExecMethod NOW... ",NULL,NULL,0); + + // Call the method + + hr = pNamespace->ExecMethod(InstancePath, MethodName, 0, NULL, pInInst, + &pOutInst, NULL); + + if (!SUCCEEDED(hr)) + { + ReportMessage(0,"ExecMethod failed",NULL,NULL, hr); + continue; + } + + // Get the EnableStatic method return value + hr = pOutInst->Get(L"ReturnValue", 0, &v_ret_value, 0, 0); + + if (!SUCCEEDED(hr)) + { + ReportMessage(0,"WARNING: Could not determine return value for EnableStatic ",NULL,NULL, hr); + continue; + } + + hr = V_I4(&v_ret_value); + + + if(hr != 0) + ReportMessage(0,"EnableStatic failed ", NULL,NULL,hr); + else + { + ReportMessage(0,"EnableStatic succeeded",NULL,NULL,0); + break; + } + + } + + + + cleanup: + // Free up resources + VariantClear(&v_ret_value); + VariantClear(&v_ip_list); + VariantClear(&v_mask_list); + + SysFreeString(NamespacePath); + SysFreeString(ClassPath); + SysFreeString(InstancePath); + SysFreeString(MethodName); + + if (pClass) pClass->Release(); + if (pInInst) pInInst->Release(); + if (pInClass) pInClass->Release(); + if (pOutInst) pOutInst->Release(); + if (pLocator) pLocator->Release(); + if (pNamespace) pNamespace->Release(); + + CoUninitialize(); + return hr; +} + + +/********************************************************** +* LoopbackBindings : unbind all other +* protocols except TCP/IP, netbios, netbt. +*/ +extern "C" HRESULT LoopbackBindings (LPCWSTR loopback_guid) +{ + HRESULT hr = 0; + INetCfg *pCfg = NULL; + INetCfgLock *pLock = NULL; + INetCfgComponent *pAdapter = NULL; + IEnumNetCfgComponent *pEnumComponent = NULL; + BOOL bLockGranted = FALSE; + BOOL bInitialized = FALSE; + BOOL bConfigChanged = FALSE; + LPWSTR swName = NULL; + GUID g; + wchar_t device_guid[100]; + DWORD lenDeviceId; + + ReportMessage(0,"Running LoopbackBindings()...",NULL,NULL,0); + + hr = CoInitializeEx( NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED ); + CLEANUP_ON_FAILURE(hr); + + hr = CoCreateInstance( CLSID_CNetCfg, NULL, CLSCTX_INPROC_SERVER, IID_INetCfg, (void**)&pCfg ); + CLEANUP_ON_FAILURE(hr); + + hr = pCfg->QueryInterface( IID_INetCfgLock, (void**)&pLock ); + CLEANUP_ON_FAILURE(hr); + + hr = pLock->AcquireWriteLock( 1000, L"AFS Configuration", NULL ); + CLEANUP_ON_FAILURE(hr); + bLockGranted = TRUE; + + hr = pCfg->Initialize( NULL ); + CLEANUP_ON_FAILURE(hr); + bInitialized = TRUE; + + hr = pCfg->EnumComponents( &GUID_DEVCLASS_NET, &pEnumComponent ); + CLEANUP_ON_FAILURE(hr); + + + while( pEnumComponent->Next( 1, &pAdapter, NULL ) == S_OK ) + { + pAdapter->GetDisplayName( &swName ); + pAdapter->GetInstanceGuid( &g ); + StringFromGUID2(g, device_guid, 99); + + if(!wcscmp( device_guid, loopback_guid )) // found loopback adapter + { + INetCfgComponentBindings *pBindings; + INetCfgBindingPath *pPath; + IEnumNetCfgBindingPath *pEnumPaths; + INetCfgComponent *upper; + + ReportMessage(0,"LoopbackBindings found", NULL, device_guid,0 ); + + hr = pAdapter->QueryInterface( IID_INetCfgComponentBindings, (void**) &pBindings); + if(hr==S_OK) + { + hr = pBindings->EnumBindingPaths( EBP_ABOVE, &pEnumPaths ); + if(hr==S_OK) + { + while(pEnumPaths->Next( 1, &pPath, NULL ) == S_OK) + { + pPath->GetOwner( &upper ); + + LPWSTR swId = NULL, swName = NULL; + + upper->GetDisplayName( &swName ); + upper->GetId( &swId ); + + ReportMessage(1,"Looking at ",NULL, swName, 0); + + { + ReportMessage(1," Moving to the end of binding order...",NULL,NULL,0); + INetCfgComponentBindings *pBindings2; + hr = upper->QueryInterface( IID_INetCfgComponentBindings, (void**) &pBindings2); + if (hr==S_OK) + { + ReportMessage(1,"...",0,0,0); + hr = pBindings2->MoveAfter(pPath, NULL); + pBindings2->Release(); + bConfigChanged=TRUE; + } + if (hr==S_OK) ReportMessage(1,"success",0,0,0); else ReportMessage(0,"Binding change failed",0,0,hr); + + } + + if ( !_wcsicmp(swId, L"ms_netbios") || + !_wcsicmp(swId, L"ms_tcpip") || + !_wcsicmp(swId, L"ms_netbt") ) + { + if (pPath->IsEnabled()!=S_OK) + { + ReportMessage(1," Enabling ",0,swName,0); + hr = pPath->Enable(TRUE); + if (hr==S_OK) ReportMessage(1,"success",0,0,0); else ReportMessage(0,"Proto failed",0,0,hr); + bConfigChanged=TRUE; + } + + + } + else //if (!_wcsicmp(swId, L"ms_server") || (!_wcsicmp(swId, L"ms_msclient")) + { + if (pPath->IsEnabled()==S_OK) + { + ReportMessage(1," Disabling ",0,swName,0); + hr = pPath->Enable(FALSE); + if (hr==S_OK) ReportMessage(1,"success",0,0,0); else ReportMessage(0,"Proto failed",0,0,hr); + bConfigChanged=TRUE; + } + } + + CoTaskMemFree( swName ); + CoTaskMemFree( swId ); + + pPath->Release(); + } + pEnumPaths->Release(); + } + pBindings->Release(); + } // hr==S_OK for QueryInterface IID_INetCfgComponentBindings + } + + CoTaskMemFree( swName ); + + pAdapter->Release(); + } + + pEnumComponent->Release(); + + hr = 0; + +cleanup: + + if(bConfigChanged) pCfg->Apply(); + + if(pAdapter) pAdapter->Release(); + + if(bInitialized) pCfg->Uninitialize(); + if(bLockGranted) pLock->ReleaseWriteLock(); + + if(pLock) pLock->Release(); + if(pCfg) pCfg->Release(); + + if (hr) ReportMessage(0,"LoopbackBindings() is returning ",0,0,hr); + return hr; +} + + + extern "C" + DWORD +SetIpAddress( + LPCWSTR guid, + LPCWSTR ip, + LPCWSTR mask + ) +{ + ReportMessage(0,"Running SetIpAddress()...",0,0,0); + HRESULT hr = 0; + + hr = WMIEnableStatic(FindNetworkAdapterConfigurationInstanceByGUID, + (PVOID)guid, ip, mask); + return hr; +} + +/* Set MAXLANA in the registry to the specified value, unless the existing registry value is larger */ +DWORD AdjustMaxLana(DWORD dwMaxLana) +{ + + LONG ret = 0; + HKEY hNetBiosParamKey = NULL; + DWORD dwType, dwExistingMaxLana, dwSize; + + ReportMessage(0,"Making sure MaxLana is large enough",0,0, dwMaxLana); + + ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Services\\NetBIOS\\Parameters"), + 0, KEY_ALL_ACCESS , &hNetBiosParamKey); + if (ret) return ret; + + + + dwSize = 4; + ret = RegQueryValueEx(hNetBiosParamKey, _T("MaxLana"), 0, &dwType, (LPBYTE) &dwExistingMaxLana, &dwSize); + if ((ret) && (ret != ERROR_MORE_DATA) && (ret != ERROR_FILE_NOT_FOUND)) + { + RegCloseKey(hNetBiosParamKey); + return ret; + } + + if ((dwType != REG_DWORD) || (ret)) dwExistingMaxLana = 0; + + ReportMessage (1,"MaxLana is currently",0,0, dwExistingMaxLana); + + if (dwExistingMaxLana < dwMaxLana) + { + ReportMessage (1,"Changing MaxLana", 0,0,dwMaxLana); + ret = RegSetValueEx(hNetBiosParamKey, _T("MaxLana"), 0, REG_DWORD, (const BYTE*)&dwMaxLana, 4); + if (ret) + { + RegCloseKey(hNetBiosParamKey); + return ret; + } + + } + + RegCloseKey(hNetBiosParamKey); + return 0; + + +} + +extern "C" +BOOL UpdateHostsFile( LPCWSTR swName, LPCWSTR swIp, LPCSTR szFilename, BOOL bPre ) +{ + char szIp[2048], szName[2048]; + char etcPath[MAX_PATH]; + char tempPath[MAX_PATH]; + char buffer[2048], temp[2048]; + char *str; + HRESULT rv; + DWORD fa,len; + FILE *hFile, *hTemp; + + _snprintf(szIp, 2047, "%S", swIp); + _snprintf(szName, 2047, "%S", swName); + strupr(szName); + ReportMessage(0,"Starting UpdateHostsFile() on file",szFilename,0,0); + + rv = SHGetFolderPathA( NULL, CSIDL_SYSTEM, NULL, SHGFP_TYPE_CURRENT , etcPath ); + if(rv != S_OK) return FALSE; + + strcat( etcPath, ETCDIR ); + + fa = GetFileAttributesA( etcPath ); + + if(fa == INVALID_FILE_ATTRIBUTES) + { + // the directory doesn't exist + // it should be there. non-existence implies more things are wrong + ReportMessage(0, "Path does not exist ", etcPath,0,0 ); + return FALSE; + } + + strcpy( tempPath, etcPath ); + strcat( etcPath, "\\" ); + strcat( etcPath, szFilename ); + + fa = GetFileAttributesA( etcPath ); + + if(fa == INVALID_FILE_ATTRIBUTES) + { + ReportMessage(0, "File not found. Creating...", szFilename,0,0); + + hFile = fopen( etcPath, "w" ); + if(!hFile) + { + ReportMessage(0,"FAILED : can't create file",etcPath,0,errno); + return FALSE; + } + + fprintf(hFile, "%s\t%s%s\n", szIp, szName, (bPre)?"\t#PRE":""); + + fclose( hFile ); + + ReportMessage(1,"done",0,0,0); + } + else // the file exists. parse and update + { + + ReportMessage(1, "Updating file ...",szFilename,0,0 ); + + hFile = fopen( etcPath, "r"); + if(!hFile) + { + ReportMessage(0,"FAILED : can't open file",etcPath,0,errno); + return FALSE; + } + + strcat( tempPath, szFilename ); + strcat( tempPath, ".tmp" ); + hTemp = fopen( tempPath, "w"); + if(!hTemp) + { + ReportMessage(0,"FAILED : can't create temp file",tempPath,0,errno); + fclose(hFile); + return FALSE; + } + + while(fgets( buffer, 2046, hFile)) + { + strcpy( temp, buffer ); + strupr( temp ); + + if ((strlen(temp)<1) || (*(temp+strlen(temp)-1)!='\n')) strcat(temp, "\n"); + + if(!(str = strstr(temp, szName))) + { + fputs( buffer, hTemp ); + } + else + { + // check for FOOBAFS or AFSY + //if(str <= temp || (*(str-1) != '-' && !isspace(*(str+strlen(szName))))) + if ( (str == temp) || (!*(str+strlen(szName))) || (!isspace(*(str-1))) || (!isspace(*(str+strlen(szName)))) ) + fputs( buffer, hTemp ); + } + } + + + len = 2048; + GetComputerNameA( buffer, &len ); + buffer[11] = 0; + fprintf( hTemp, "%s\t%s%s\n", szIp, szName, (bPre)?"\t#PRE":""); + + fclose( hTemp ); + fclose( hFile ); + + strcpy(buffer, etcPath); + strcat(buffer, ".old"); + + errno = 0; + + if ((unlink( buffer ) != 0) && (errno == EACCES)) + { + ReportMessage(0,"FAILED : Can't delete file",buffer,0,errno); + return FALSE; + + } + + if ((errno) && (errno != ENOENT)) ReportMessage(0,"WEIRD : errno after unlink ",0,0,errno); + + if(rename( etcPath, buffer) != 0) + { + ReportMessage(0,"FAILED : Can't rename old file",etcPath,0,errno); + return FALSE; + } + + if(rename( tempPath, etcPath ) != 0) + { + ReportMessage(0,"FAILED : Can't rename new file",tempPath,0,errno); + return FALSE; + } + + } + + return TRUE; +} + +#ifdef TEST +#if 0 +int +wmain( + int argc, + wchar_t* argv[] + ) +{ + if (argc < 3) + { + printf("usage: %S ip mask\n" + " example: %S 10.0.0.1 255.0.0.0", argv[0], argv[0]); + return 0; + } + + return WMIEnableStatic(FindNetworkAdapterConfigurationInstanceByGUID, + L"{B4981E32-551C-4164-96B6-B8874BD2E555}", + argv[1], argv[2]); +} +#else +int +wmain( + int argc, + wchar_t* argv[] + ) +{ + if (argc < 4) + { + printf("usage: %S adapter_guid ip mask\n" + " example: %S {B4981E32-551C-4164-96B6-B8874BD2E555} " + "10.0.0.1 255.0.0.0", argv[0], argv[0]); + return 0; + } + + return WMIEnableStatic(FindNetworkAdapterConfigurationInstanceByGUID, + argv[1], argv[2], argv[3]); +} +#endif +#endif + diff --git a/src/WINNT/install/wix/Binary/New.ico b/src/WINNT/install/wix/Binary/New.ico new file mode 100644 index 000000000..27881dfe9 Binary files /dev/null and b/src/WINNT/install/wix/Binary/New.ico differ diff --git a/src/WINNT/install/wix/Binary/Up.ico b/src/WINNT/install/wix/Binary/Up.ico new file mode 100644 index 000000000..86f6b5a84 Binary files /dev/null and b/src/WINNT/install/wix/Binary/Up.ico differ diff --git a/src/WINNT/install/wix/Binary/bannrbmp.bmp b/src/WINNT/install/wix/Binary/bannrbmp.bmp new file mode 100644 index 000000000..423c631a9 Binary files /dev/null and b/src/WINNT/install/wix/Binary/bannrbmp.bmp differ diff --git a/src/WINNT/install/wix/Binary/completi.ico b/src/WINNT/install/wix/Binary/completi.ico new file mode 100644 index 000000000..93a95a1b1 Binary files /dev/null and b/src/WINNT/install/wix/Binary/completi.ico differ diff --git a/src/WINNT/install/wix/Binary/custicon.ico b/src/WINNT/install/wix/Binary/custicon.ico new file mode 100644 index 000000000..878d3ba54 Binary files /dev/null and b/src/WINNT/install/wix/Binary/custicon.ico differ diff --git a/src/WINNT/install/wix/Binary/dlgbmp.bmp b/src/WINNT/install/wix/Binary/dlgbmp.bmp new file mode 100644 index 000000000..18bcf3c99 Binary files /dev/null and b/src/WINNT/install/wix/Binary/dlgbmp.bmp differ diff --git a/src/WINNT/install/wix/Binary/exclamic.ico b/src/WINNT/install/wix/Binary/exclamic.ico new file mode 100644 index 000000000..906ce3246 Binary files /dev/null and b/src/WINNT/install/wix/Binary/exclamic.ico differ diff --git a/src/WINNT/install/wix/Binary/info.ico b/src/WINNT/install/wix/Binary/info.ico new file mode 100644 index 000000000..7e0ff7f14 Binary files /dev/null and b/src/WINNT/install/wix/Binary/info.ico differ diff --git a/src/WINNT/install/wix/Binary/insticon.ico b/src/WINNT/install/wix/Binary/insticon.ico new file mode 100644 index 000000000..94753ac29 Binary files /dev/null and b/src/WINNT/install/wix/Binary/insticon.ico differ diff --git a/src/WINNT/install/wix/Binary/removico.ico b/src/WINNT/install/wix/Binary/removico.ico new file mode 100644 index 000000000..097cafe27 Binary files /dev/null and b/src/WINNT/install/wix/Binary/removico.ico differ diff --git a/src/WINNT/install/wix/Binary/repairic.ico b/src/WINNT/install/wix/Binary/repairic.ico new file mode 100644 index 000000000..6fb68610c Binary files /dev/null and b/src/WINNT/install/wix/Binary/repairic.ico differ diff --git a/src/WINNT/install/wix/CellServDB b/src/WINNT/install/wix/CellServDB new file mode 100644 index 000000000..6d43dc846 --- /dev/null +++ b/src/WINNT/install/wix/CellServDB @@ -0,0 +1,483 @@ +>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/wix/Icon/ico_AcctManager.ico b/src/WINNT/install/wix/Icon/ico_AcctManager.ico new file mode 100644 index 000000000..321a135dd Binary files /dev/null and b/src/WINNT/install/wix/Icon/ico_AcctManager.ico differ diff --git a/src/WINNT/install/wix/Icon/ico_Help.ico b/src/WINNT/install/wix/Icon/ico_Help.ico new file mode 100644 index 000000000..2ed9e7a29 Binary files /dev/null and b/src/WINNT/install/wix/Icon/ico_Help.ico differ diff --git a/src/WINNT/install/wix/Icon/ico_ServerManager.ico b/src/WINNT/install/wix/Icon/ico_ServerManager.ico new file mode 100644 index 000000000..1827121ed Binary files /dev/null and b/src/WINNT/install/wix/Icon/ico_ServerManager.ico differ diff --git a/src/WINNT/install/wix/Icon/ico_afscreds.ico b/src/WINNT/install/wix/Icon/ico_afscreds.ico new file mode 100644 index 000000000..1abfe161e Binary files /dev/null and b/src/WINNT/install/wix/Icon/ico_afscreds.ico differ diff --git a/src/WINNT/install/wix/Icon/ico_afssvrcfg.ico b/src/WINNT/install/wix/Icon/ico_afssvrcfg.ico new file mode 100644 index 000000000..f06b8ace5 Binary files /dev/null and b/src/WINNT/install/wix/Icon/ico_afssvrcfg.ico differ diff --git a/src/WINNT/install/wix/NTMakefile b/src/WINNT/install/wix/NTMakefile new file mode 100644 index 000000000..ce69def93 --- /dev/null +++ b/src/WINNT/install/wix/NTMakefile @@ -0,0 +1,73 @@ +RELDIR=WINNT\install\wix +!INCLUDE ..\..\..\config\NTMakefile.$(SYS_NAME) +!INCLUDE ..\..\..\config\NTMakefile.version + +MEDIADIR = $(DESTDIR)\WinInstall +MEDIABINDIR = $(MEDIADIR)\Dll + +MSIFILE = $(MEDIADIR)\openafs-$(LANG).msi + +WIXINCLUDES = \ + config.wxi \ + feature.wxi \ + files.wxi \ + language_config.wxi \ + property.wxi \ + registry.wxi \ + lang\$(LANG)\ui.wxi + +WIXOBJ = $(OJT)\openafs-$(LANG).wixobj + +LANGUAGES=en_US de_DE es_ES ja_JP ko_KR pt_BR zh_CN zh_TW + +languages: +# Don't bother with non en_US for now. The other builds comprise of either +# verbatim copies of en_US files, partial translations or doesn't build +# (no languages resources). Someday when OpenAFS 8.1029828419 comes out we'll +# get someone to translate. +# for %l in ( $(LANGUAGES ) do ( +# $(MAKE) /f NTMakefile /nologo LANG=%l lang +# ) + $(MAKE) /f NTMakefile /nologo LANG=en_US lang + +lang:: $(MSIFILE) + +customactions: + $(CD) custom + $(MAKE) /f NTMakefile /nologo install + $(CD) .. + +install: customactions languages + +$(MSIFILE): $(WIXOBJ) + light -nologo -out $(MSIFILE) \ + -loc lang\$(LANG)\strings.wxl \ + $(WIXOBJ) + dir $(MSIFILE) + +$(WIXOBJ): openafs.wxs $(WIXINCLUDES) + candle -nologo -out $@ \ + "-dCellName=$(CELLNAME_DEFAULT)" \ + -dLanguage=$(LANG) \ + -dNumericVersion=$(AFSPRODUCT_VERSION) \ + -dVersionMajor=$(AFSPRODUCT_VER_MAJOR) \ + -dVersionMinor=$(AFSPRODUCT_VER_MINOR) \ + -dVersionPatch=$(AFSPRODUCT_VER_PATCH) \ + "-dDestDir=$(DESTDIR)\\" \ + -dCellDbFile=CellServDB \ + -v0 \ + -w0 \ + openafs.wxs + +# Cleanup +clean:: + for %l in ( $(LANGUAGES) ) do ( + $(MAKE) /f NTMakefile /nologo LANG=%l lang_clean + ) + $(CD) custom + $(MAKE) /f NTMakefile /nologo clean + $(CD) .. + +lang_clean: + -$(DEL) $(WIXOBJ) + -$(DEL) $(MSIFILE) diff --git a/src/WINNT/install/wix/config.wxi b/src/WINNT/install/wix/config.wxi new file mode 100644 index 000000000..e2d8b81e9 --- /dev/null +++ b/src/WINNT/install/wix/config.wxi @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/WINNT/install/wix/custom/NTMakefile b/src/WINNT/install/wix/custom/NTMakefile new file mode 100644 index 000000000..7d03602a1 --- /dev/null +++ b/src/WINNT/install/wix/custom/NTMakefile @@ -0,0 +1,35 @@ +# rcsid : $Id: NTMakefile,v 1.2 2004/06/23 07:48:23 jaltman Exp $ + +RELDIR=WINNT\install\wix\custom +!INCLUDE ..\..\..\..\config\NTMakefile.$(SYS_NAME) +!INCLUDE ..\..\..\..\config\NTMakefile.version + +MEDIABINDIR = $(DESTDIR)\WinInstall\Dll + +DLLFILE = $(MEDIABINDIR)\afscustom.dll + +DLLEXPORTS=\ + -EXPORT:InstallNetProvider \ + -EXPORT:UninstallNetProvider \ + -EXPORT:ConfigureClientService \ + -EXPORT:ConfigureServerService \ + -EXPORT:AbortMsiImmediate \ + -EXPORT:UninstallNsisInstallation + +DLLLIBFILES=\ + msi.lib advapi32.lib + +LINK=link + +# afscustom.dll + +$(OUT)\afscustom.obj: afscustom.cpp + $(CC) -ML -c /Fo$@ $** + +$(DLLFILE): $(OUT)\afscustom.obj + $(LINK) -DLL $(DLLEXPORTS) \ + -OUT:$@ $** $(DLLLIBFILES) + +install: $(DLLFILE) + +clean :: diff --git a/src/WINNT/install/wix/custom/afscustom.cpp b/src/WINNT/install/wix/custom/afscustom.cpp new file mode 100644 index 000000000..5783720fb --- /dev/null +++ b/src/WINNT/install/wix/custom/afscustom.cpp @@ -0,0 +1,378 @@ +/* + +Copyright 2004 by the Massachusetts Institute of Technology + +All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of the Massachusetts +Institute of Technology (M.I.T.) not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*/ + +/************************************************************** +* afscustom.cpp : Dll implementing custom action to install AFS +* +* The functions in this file are for use as entry points +* for calls from MSI only. The specific MSI parameters +* are noted in the comments section of each of the +* functions. +* +* rcsid: $Id: afscustom.cpp,v 1.2 2004/06/23 03:55:13 jaltman Exp $ +**************************************************************/ + +// Only works for Win2k and above + +#define _WIN32_WINNT 0x0500 + +#include "afscustom.h" +#include "tchar.h" + +void ShowMsiError( MSIHANDLE hInstall, DWORD errcode, DWORD param ){ + MSIHANDLE hRecord; + + hRecord = MsiCreateRecord(3); + MsiRecordClearData(hRecord); + MsiRecordSetInteger(hRecord, 1, errcode); + MsiRecordSetInteger(hRecord, 2, param); + + MsiProcessMessage( hInstall, INSTALLMESSAGE_ERROR, hRecord ); + + MsiCloseHandle( hRecord ); +} + +/* Abort the installation (called as an immediate custom action) */ +MSIDLLEXPORT AbortMsiImmediate( MSIHANDLE hInstall ) { + DWORD rv; + DWORD dwSize = 0; + LPTSTR sReason = NULL; + LPTSTR sFormatted = NULL; + MSIHANDLE hRecord = NULL; + LPTSTR cAbortReason = _T("ABORTREASON"); + + rv = MsiGetProperty( hInstall, cAbortReason, _T(""), &dwSize ); + if(rv != ERROR_MORE_DATA) goto _cleanup; + + sReason = new TCHAR[ ++dwSize ]; + + rv = MsiGetProperty( hInstall, cAbortReason, sReason, &dwSize ); + + if(rv != ERROR_SUCCESS) goto _cleanup; + + hRecord = MsiCreateRecord(3); + MsiRecordClearData(hRecord); + MsiRecordSetString(hRecord, 0, sReason); + + dwSize = 0; + + rv = MsiFormatRecord(hInstall, hRecord, "", &dwSize); + if(rv != ERROR_MORE_DATA) goto _cleanup; + + sFormatted = new TCHAR[ ++dwSize ]; + + rv = MsiFormatRecord(hInstall, hRecord, sFormatted, &dwSize); + + if(rv != ERROR_SUCCESS) goto _cleanup; + + MsiCloseHandle(hRecord); + + hRecord = MsiCreateRecord(3); + MsiRecordClearData(hRecord); + MsiRecordSetInteger(hRecord, 1, ERR_ABORT); + MsiRecordSetString(hRecord,2, sFormatted); + MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecord); + +_cleanup: + if(sFormatted) delete sFormatted; + if(hRecord) MsiCloseHandle( hRecord ); + if(sReason) delete sReason; + + return ~ERROR_SUCCESS; +} + +/* Configure the client and server services */ +MSIDLLEXPORT ConfigureClientService( MSIHANDLE hInstall ) { + DWORD rv = ConfigService( 1 ); + if(rv != ERROR_SUCCESS) { + ShowMsiError( hInstall, ERR_SCC_FAILED, rv ); + } + return rv; +} + +MSIDLLEXPORT ConfigureServerService( MSIHANDLE hInstall ) { + DWORD rv = ConfigService( 2 ); + if(rv != ERROR_SUCCESS) { + ShowMsiError( hInstall, ERR_SCS_FAILED, rv ); + } + return ERROR_SUCCESS; +} + +DWORD ConfigService( int svc ) { + SC_HANDLE scm = NULL; + SC_HANDLE hsvc = NULL; + SC_LOCK scl = NULL; + DWORD rv = ERROR_SUCCESS; + + scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); + if(scm == NULL) {rv = GetLastError(); goto _cleanup; } + + scl = LockServiceDatabase(scm); + if(scl == NULL) {rv = GetLastError(); goto _cleanup; } + + hsvc = OpenService( scm, ((svc==1)? _T("TransarcAFSDaemon") : _T("TransarcAFSServer")), SERVICE_ALL_ACCESS); + if(hsvc == NULL) {rv = GetLastError(); goto _cleanup; } + + SERVICE_FAILURE_ACTIONS sfa; + SC_ACTION saact[3]; + + sfa.dwResetPeriod = 3600; // one hour + sfa.lpRebootMsg = NULL; + sfa.lpCommand = NULL; + sfa.cActions = 3; + sfa.lpsaActions = saact; + + saact[0].Type = SC_ACTION_RESTART; + saact[0].Delay = 5000; + saact[1].Type = SC_ACTION_RESTART; + saact[1].Delay = 5000; + saact[2].Type = SC_ACTION_NONE; + saact[2].Delay = 5000; + + if(!ChangeServiceConfig2(hsvc, SERVICE_CONFIG_FAILURE_ACTIONS, &sfa)) + rv = GetLastError(); + +_cleanup: + if(hsvc) CloseServiceHandle(hsvc); + if(scl) UnlockServiceDatabase(scl); + if(scm) CloseServiceHandle(scm); + + return rv; +} + +/* Sets the registry keys required for the functioning of the network +provider */ + +MSIDLLEXPORT InstallNetProvider( MSIHANDLE hInstall ) { + return InstNetProvider( hInstall, 1 ); +} + +MSIDLLEXPORT UninstallNetProvider( MSIHANDLE hInstall) { + return InstNetProvider( hInstall, 0 ); +} + +DWORD InstNetProvider(MSIHANDLE hInstall, int bInst) { + LPTSTR strOrder; + HKEY hkOrder; + LONG rv; + DWORD dwSize; + HANDLE hProcHeap; + + strOrder = (LPTSTR) 0; + + CHECK(rv = RegOpenKeyEx( HKEY_LOCAL_MACHINE, STR_KEY_ORDER, 0, KEY_READ | KEY_WRITE, &hkOrder )); + + dwSize = 0; + CHECK(rv = RegQueryValueEx( hkOrder, STR_VAL_ORDER, NULL, NULL, NULL, &dwSize ) ); + + strOrder = new TCHAR[ (dwSize + STR_SERVICE_LEN) * sizeof(TCHAR) ]; + + CHECK(rv = RegQueryValueEx( hkOrder, STR_VAL_ORDER, NULL, NULL, (LPBYTE) strOrder, &dwSize)); + + npi_CheckAndAddRemove( strOrder, STR_SERVICE , bInst); + + dwSize = (lstrlen( strOrder ) + 1) * sizeof(TCHAR); + + CHECK(rv = RegSetValueEx( hkOrder, STR_VAL_ORDER, NULL, REG_SZ, (LPBYTE) strOrder, dwSize )); + + /* everything else should be set by the MSI tables */ + rv = ERROR_SUCCESS; +_cleanup: + + if( rv != ERROR_SUCCESS ) { + ShowMsiError( hInstall, ERR_NPI_FAILED, rv ); + } + + if(strOrder) delete strOrder; + + return rv; +} + +/* Check and add or remove networkprovider key value + str : target string + str2: string to add/remove + bInst: == 1 if string should be added to target if not already there, otherwise remove string from target if present. + */ +int npi_CheckAndAddRemove( LPTSTR str, LPTSTR str2, int bInst ) { + + LPTSTR target, charset, match; + int ret=0; + + target = new TCHAR[lstrlen(str)+3]; + lstrcpy(target,_T(",")); + lstrcat(target,str); + lstrcat(target,_T(",")); + charset = new TCHAR[lstrlen(str2)+3]; + lstrcpy(charset,_T(",")); + lstrcat(charset,str2); + lstrcat(charset,_T(",")); + + match = _tcsstr(target, charset); + + if ((match) && (bInst)) { + ret = INP_ERR_PRESENT; + goto cleanup; + } + + if ((!match) && (!bInst)) { + ret = INP_ERR_ABSENT; + goto cleanup; + } + + if (bInst) // && !match + { + lstrcat(str, _T(",")); + lstrcat(str, str2); + ret = INP_ERR_ADDED; + goto cleanup; + } + + // if (!bInst) && (match) + { + lstrcpy(str+(match-target),match+lstrlen(str2)+2); + str[lstrlen(str)-1]=_T('\0'); + ret = INP_ERR_REMOVED; + goto cleanup; + } + +cleanup: + + delete target; + delete charset; + return ret; +} + +/* Uninstall NSIS */ +MSIDLLEXPORT UninstallNsisInstallation( MSIHANDLE hInstall ) +{ + DWORD rv = ERROR_SUCCESS; + // lookup the NSISUNINSTALL property value + LPTSTR cNsisUninstall = _T("NSISUNINSTALL"); + HANDLE hIo = NULL; + DWORD dwSize = 0; + LPTSTR strPathUninst = NULL; + HANDLE hJob = NULL; + STARTUPINFO sInfo; + PROCESS_INFORMATION pInfo; + + pInfo.hProcess = NULL; + pInfo.hThread = NULL; + + rv = MsiGetProperty( hInstall, cNsisUninstall, _T(""), &dwSize ); + if(rv != ERROR_MORE_DATA) goto _cleanup; + + strPathUninst = new TCHAR[ ++dwSize ]; + + rv = MsiGetProperty( hInstall, cNsisUninstall, strPathUninst, &dwSize ); + if(rv != ERROR_SUCCESS) goto _cleanup; + + // Create a process for the uninstaller + sInfo.cb = sizeof(sInfo); + sInfo.lpReserved = NULL; + sInfo.lpDesktop = _T(""); + sInfo.lpTitle = _T("Foo"); + sInfo.dwX = 0; + sInfo.dwY = 0; + sInfo.dwXSize = 0; + sInfo.dwYSize = 0; + sInfo.dwXCountChars = 0; + sInfo.dwYCountChars = 0; + sInfo.dwFillAttribute = 0; + sInfo.dwFlags = 0; + sInfo.wShowWindow = 0; + sInfo.cbReserved2 = 0; + sInfo.lpReserved2 = 0; + sInfo.hStdInput = 0; + sInfo.hStdOutput = 0; + sInfo.hStdError = 0; + + if(!CreateProcess( + strPathUninst, + _T("Uninstall /S"), + NULL, + NULL, + FALSE, + CREATE_SUSPENDED, + NULL, + NULL, + &sInfo, + &pInfo)) { + pInfo.hProcess = NULL; + pInfo.hThread = NULL; + rv = 40; + goto _cleanup; + }; + + // Create a job object to contain the NSIS uninstall process tree + + JOBOBJECT_ASSOCIATE_COMPLETION_PORT acp; + + acp.CompletionKey = 0; + + hJob = CreateJobObject(NULL, _T("NSISUninstallObject")); + if(!hJob) { + rv = 41; + goto _cleanup; + } + + hIo = CreateIoCompletionPort(INVALID_HANDLE_VALUE,0,0,0); + if(!hIo) { + rv = 42; + goto _cleanup; + } + + acp.CompletionPort = hIo; + + SetInformationJobObject( hJob, JobObjectAssociateCompletionPortInformation, &acp, sizeof(acp)); + + AssignProcessToJobObject( hJob, pInfo.hProcess ); + + ResumeThread( pInfo.hThread ); + + DWORD a,b,c; + for(;;) { + if(!GetQueuedCompletionStatus(hIo, &a, (PULONG_PTR) &b, (LPOVERLAPPED *) &c, INFINITE)) { + Sleep(1000); + continue; + } + if(a == JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO) { + break; + } + } + + rv = ERROR_SUCCESS; + +_cleanup: + if(hIo) CloseHandle(hIo); + if(pInfo.hProcess) CloseHandle( pInfo.hProcess ); + if(pInfo.hThread) CloseHandle( pInfo.hThread ); + if(hJob) CloseHandle(hJob); + if(strPathUninst) delete strPathUninst; + + if(rv != ERROR_SUCCESS) { + ShowMsiError( hInstall, ERR_NSS_FAILED, rv ); + } + return rv; +} diff --git a/src/WINNT/install/wix/custom/afscustom.h b/src/WINNT/install/wix/custom/afscustom.h new file mode 100644 index 000000000..8dcda8a48 --- /dev/null +++ b/src/WINNT/install/wix/custom/afscustom.h @@ -0,0 +1,81 @@ +/* + +Copyright 2004 by the Massachusetts Institute of Technology + +All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of the Massachusetts +Institute of Technology (M.I.T.) not be used in advertising or publicity +pertaining to distribution of the software without specific, written +prior permission. + +M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +*/ + +/* afscustom.h + * + * Declarations for OpenAFS MSI setup tools + * + * rcsid : $Id: afscustom.h,v 1.2 2004/06/23 03:55:13 jaltman Exp $ + */ + +#ifndef __afsMsiTools_H__ +#define __afsMsiTools_H__ + +#include +#include +#include +#include +#include + +#define MSIDLLEXPORT UINT __stdcall + +#define CHECK(x) if((x)) goto _cleanup + +#define CHECKX(x,y) if(!(x)) { msiErr = (y); goto _cleanup; } + +#define CHECK2(x,y) if((x)) { msiErr = (y); goto _cleanup; } + +#define STR_KEY_ORDER _T("SYSTEM\\CurrentControlSet\\Control\\NetworkProvider\\Order") +#define STR_VAL_ORDER _T("ProviderOrder") + +#define STR_SERVICE _T("TransarcAFSDaemon") +#define STR_SERVICE_LEN 18 + +#define INP_ERR_PRESENT 1 +#define INP_ERR_ADDED 2 +#define INP_ERR_ABSENT 3 +#define INP_ERR_REMOVED 4 + +#define ERR_NPI_FAILED 4001 +#define ERR_SCC_FAILED 4002 +#define ERR_SCS_FAILED 4003 +#define ERR_ABORT 4004 +#define ERR_NSS_FAILED 4005 + +/* non-exported */ +int npi_CheckAndAddRemove( LPTSTR, LPTSTR, int ); +DWORD InstNetProvider(MSIHANDLE, int); +void ShowMsiError(MSIHANDLE, DWORD, DWORD); +DWORD ConfigService(int); + +/* exported */ +MSIDLLEXPORT InstallNetProvider( MSIHANDLE ); +MSIDLLEXPORT UninstallNetProvider ( MSIHANDLE ); +MSIDLLEXPORT ConfigureClientService( MSIHANDLE ); +MSIDLLEXPORT ConfigureServerService( MSIHANDLE ); +MSIDLLEXPORT AbortMsiImmediate( MSIHANDLE ); +MSIDLLEXPORT UninstallNsisInstallation( MSIHANDLE hInstall ); + +#endif /*__afsMsiTools_H__*/ diff --git a/src/WINNT/install/wix/feature.wxi b/src/WINNT/install/wix/feature.wxi new file mode 100644 index 000000000..7a5653755 --- /dev/null +++ b/src/WINNT/install/wix/feature.wxi @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + VersionNT = 500 And ServicePackLevel < 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/WINNT/install/wix/files.wxi b/src/WINNT/install/wix/files.wxi new file mode 100644 index 000000000..c87a2d828 --- /dev/null +++ b/src/WINNT/install/wix/files.wxi @@ -0,0 +1,1273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + While we would love to just use the merge modules, they are unfortunately + non-retargetable. Therefore we just use the DLLs directly. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/WINNT/install/wix/lang/de_DE/ActionText.wxi b/src/WINNT/install/wix/lang/de_DE/ActionText.wxi new file mode 100644 index 000000000..51183f48a --- /dev/null +++ b/src/WINNT/install/wix/lang/de_DE/ActionText.wxi @@ -0,0 +1,143 @@ + + +Anwendungsprogramm wird angeboten + +In der Registrierung wird Speicherplatz reserviert + +Installierte Anwendungsprogramme werden gesucht + +Ausführbare Dateien werden gebunden + +Kompatible Produkte werden gesucht + +Speicherbedarf wird berechnet + +Speicherbedarf wird berechnet + +Ordner werden erstellt + +Verknüpfungen werden erstellt + +Dienste werden gelöscht + +Dateien werden dupliziert + +Speicherbedarf wird berechnet + +Verwandte Anwendungen werden gesucht + +Skriptoperationen werden generiert für Aktion: + +Netzwerkinstallationsdateien werden kopiert + +Neue Dateien werden kopiert + +ODBC-Komponenten werden installiert + +Neue Dienste werden installiert + +Systemkatalog wird installiert + +Die Installation wird überprüft + +Die Startbedingungen werden überprüft + +Funktionszustände verwandter Anwendungen werden migriert + +Dateien werden verschoben + +Assemblierungsinformationen werden veröffentlicht + +Veröffentlichung der Assemblierungsinformationen wird aufgehoben + +Dateien werden gepatcht + +Registrierung der Komponente(n) wird aktualisiert + +Qualifizierte Komponenten werden veröffentlicht + +Produktfunktionen werden veröffentlicht + +Produktinformation wird veröffentlicht + +Klassenserver werden registriert + +COM+-Anwendungen und Komponenten werden registriert + +Erweiterungsserver werden registriert + +Schriftarten werden registriert + +MIME-Informationen werden registriert + +Produkt wird registriert + +Programmidentifikatoren werden registriert + +Typbibliotheken werden registriert + +Benutzer wird registriert + +Duplizierte Dateien werden entfernt + +Umgebungsstrings werden aktualisiert + +Anwendungen werden entfernt + +Dateien werden entfernt + +Ordner werden entfernt + +INI-Dateieinträge werden entfernt + +ODBC-Komponenten werden entfernt + +Werte werden aus der Systemregistrierung entfernt + +Verknüpfungen werden entfernt + +Kompatible Produkte werden gesucht + +Aktion wird rückgängig gemacht: + +Sicherungsdateien werden entfernt + +Module werden registriert + +Module werden aus der Registrierung entfernt + +ODBC-Ordner werden initialisiert + +Dienste werden gestartet + +Dienst werden angehalten + +Verschobene Dateien werden entfernt + +Veröffentlichung qualifizierter Komponenten wird rückgängig gemacht + +Veröffentlichung von Produktfunktionen wird rückgängig gemacht + +Veröffentlichung von Produktinformation wird rückgängig gemacht + +Klassenserver werden aus der Registrierung entfernt + +COM+-Anwendungen und Komponenten werden aus der Registrierung entfernt + +Erweiterungsserver werden aus der Registrierung entfernt + +Schriftarten werden aus der Registrierung entfernt + +MIME-Informationen werden aus der Registrierung entfernt + +Programmidentifikatoren werden aus der Registrierung entfernt + +Typbibliotheken werden aus der Registrierung entfernt + +Umgebungsstrings werden aktualisiert + +INI-Dateiwerte werden geschrieben + +Werte werden in die Systemregistrierung geschrieben + + diff --git a/src/WINNT/install/wix/lang/de_DE/Error.wxi b/src/WINNT/install/wix/lang/de_DE/Error.wxi new file mode 100644 index 000000000..e076f2d17 --- /dev/null +++ b/src/WINNT/install/wix/lang/de_DE/Error.wxi @@ -0,0 +1,319 @@ + + +{{Schwerwiegender Fehler: }} + +{{Fehler [1]. }} + +Warnung [1]. + + + +Information [1]. + +Bei der Installation dieses Pakets ist ein unerwarteter Fehler aufgetreten. Es liegt eventuell ein das Paket betreffendes Problem vor. Der Fehlercode ist [1]. {{Argumente: [2], [3], [4]}} + + + +{{Festplatte voll: }} + +Aktion [Time]: [1]. [2] + +[ProductName] + +{[2]}{, [3]}{, [4]} + +Art der Nachricht: [1], Argument: [2] + +=== Protokollierung gestartet: [Date] [Time] === + +=== Protokollierung beendet: [Date] [Time] === + +Aktion gestartet um [Time]: [1]. + +Aktion beendet um [Time]: [1]. Rückgabewert [2]. + +Verbleibende Zeit: {[1] Minute(n) }{[2] Sekunde(n)} + +Nicht genügend Arbeitsspeicher. Beenden Sie andere Anwendungen und wiederholen Sie den Vorgang. + +Installer antwortet nicht mehr. + +Installer wurde vorzeitig angehalten. + +Warten Sie, während Windows [ProductName] konfiguriert. + +Erforderliche Daten werden ermittelt... + +Ältere Versionen dieser Anwendung werden entfernt... + +Entfernen älterer Versionen dieser Anwendung wird vorbereitet... + +{[ProductName]-}Setup erfolgreich abgeschlossen. + +{[ProductName]-}Setup fehlgeschlagen. + +Fehler beim Lesen von Datei: [2]. {{ Systemfehler [3].}} Überprüfen Sie, ob die Datei existiert und ob Sie darauf zugreifen können. + +Datei "[2]" kann nicht erstellt werden. Es existiert bereits ein Ordner mit dem gleichen Namen. Brechen Sie die Installation ab und versuchen Sie, in einen anderen Ordner zu installieren. + +Legen Sie den Datenträger ein: [2] + +Die Rechte von Installer reichen nicht aus, um auf diesen Ordner zuzugreifen: [2]. Die Installation kann nicht fortgesetzt werden. Melden Sie sich als Administrator an oder wenden Sie sich an den Systemadministrator. + +Fehler beim Schreiben in Datei: [2]. Überprüfen Sie, ob Sie auf den Ordner zugreifen können. + +Fehler beim Lesen von Datei: [2] {{ Systemfehler [3].}} Überprüfen Sie, ob die Datei existiert und ob Sie darauf zugreifen können. + +Eine andere Anwendung hat exklusiven Zugriff auf die Datei "[2]". Beenden Sie alle anderen Anwendungen. Klicken Sie danach auf "Wiederholen". + +Auf der Festplatte ist nicht genügend freier Speicherplatz vorhanden, um diese Datei zu installieren: [2]. Sorgen Sie für zusätzlichen freien Speicher und klicken Sie auf "Wiederholen", oder klicken Sie auf "Abbrechen", um Installer zu beenden. + +Die Quelldatei wurde nicht gefunden: [2]. Überprüfen Sie, ob die Datei existiert und ob Sie darauf zugreifen können. + +Fehler beim Lesen von Datei: [3]. {{ Systemfehler [2].}} Überprüfen Sie, ob die Datei existiert und ob Sie darauf zugreifen können. + +Fehler beim Schreiben in Datei: [3]. {{ Systemfehler [2].}} Überprüfen Sie, ob Sie auf den Ordner zugreifen können. + +Die Quelldatei{{ (CAB-Datei)}} wurde nicht gefunden: [2]. Überprüfen Sie, ob die Datei existiert und ob Sie darauf zugreifen können. + +Ordner "[2]" kann nicht erstellt werden. Eine Datei mit diesem Namen existiert bereits. Benennen Sie die Datei um oder entfernen Sie die Datei, und klicken Sie dann auf "Wiederholen". Oder klicken Sie auf "Abbrechen", um das Programm zu beenden. + +Das Volume [2] steht im Augenblick nicht zur Verfügung. Wählen Sie ein anderes Volume aus. + +Der angegebene Pfad "[2]" ist nicht verfügbar. + +Schreibzugriff auf den angegebenen Ordner "[2]" ist nicht möglich. + +Beim Versuch, die Datei [2] zu lesen, ist ein Netzwerkfehler aufgetreten. + +Beim Versuch, den Ordner [2] zu erstellen, ist ein Fehler aufgetreten. + +Beim Versuch, den Ordner [2] zu erstellen, ist ein Netzwerkfehler aufgetreten. + +Beim Versuch, die Quelldatei (CAB-Datei) [2] zu öffnen, ist ein Netzwerkfehler aufgetreten. + +Der angegebene Pfad ist zu lang: [2] + +Installer besitzt keine ausreichenden Berechtigungen, um diese Datei zu verändern: [2]. + +Ein Teil des Ordnerpfads "[2]" ist ungültig. Er ist entweder leer, oder er überschreitet die vom System zugelassene Länge. + +Der Ordnerpfad "[2]" enthält Wörter, die in Ordnerpfaden ungültig sind. + +Der Ordnerpfad "[2]" enthält ein ungültiges Zeichen. + +"[2]" ist kein gültiger kurzer Dateiname. + +Fehler beim Abrufen der Dateisicherheit: [3] GetLastError: [2] + +Ungültiges Laufwerk: [2] + +Fehler bei der Anwendung des Patch auf Datei [2]. Die Datei wurde wahrscheinlich bereits auf andere Weise aktualisiert und kann von diesem Patch nicht mehr verändert werden. Wenden Sie sich mit Fragen an den Patchhersteller. {{Systemfehler: [3]}} + +Eine erforderliche Datei kann nicht installiert werden, da die Kabinettdatei [2] nicht digital signiert wurde. Dies kann darauf hindeuten, dass die Kabinettdatei beschädigt ist. + +Eine erforderliche Datei kann nicht installiert werden, da die Kabinettdatei [2] eine ungültige digitale Signatur hat. Dies kann darauf hindeuten, dass die Kabinettdatei beschädigt ist.{{ Der Fehler [3] wurde von WinVerifyTrust zurückgeliefert.}} + +Die Datei [2] konnte nicht kopiert werden: CRC-Fehler. + +Die Datei [2] konnte nicht verschoben werden: CRC-Fehler. + +Die Datei [2] konnte nicht gepatcht werden: CRC-Fehler. + +Die Datei "[2]" kann nicht installiert werden, da die Datei in der Kabinettdatei "[3]" nicht gefunden wurde. Dies deutet auf einen Netzwerkfehler, einen CD-ROM-Lesefehler oder auf ein das Paket betreffendes Problem hin. + +Die für die Installation erforderliche Datei "[2]" ist beschädigt und kann nicht verwendet werden. Dies deutet auf einen Netzwerkfehler, einen CD-ROM-Lesefehler oder auf ein das Paket betreffendes Problem hin. + +Beim Erstellen der für die Installation erforderlichen temporären Datei ist ein Fehler aufgetreten.{{ Ordner: [3]. Systemfehlercode: [2]}} + +Schlüssel konnte nicht erstellt werden: [2]. {{ Systemfehler [3].}} Überprüfen Sie, ob Sie ausreichende Zugriffsrechte auf diesen Schlüssel besitzen, oder setzen Sie sich mit dem Supportpersonal in Verbindung. + +Schlüssel konnte nicht geöffnet werden: [2]. {{ Systemfehler [3].}} Überprüfen Sie, ob Sie ausreichende Zugriffsrechte auf diesen Schlüssel besitzen, oder setzen Sie sich mit dem Supportpersonal in Verbindung. + +Wert [2] konnte nicht aus Schlüssel [3] gelöscht werden. {{ Systemfehler [4].}} Überprüfen Sie, ob Sie ausreichende Zugriffsrechte auf diesen Schlüssel besitzen, oder setzen Sie sich mit dem Supportpersonal in Verbindung. + +Schlüssel konnte nicht gelöscht werden: [2]. {{ Systemfehler [3].}} Überprüfen Sie, ob Sie ausreichende Zugriffsrechte auf diesen Schlüssel besitzen, oder setzen Sie sich mit dem Supportpersonal in Verbindung. + +Wert [2] konnte nicht aus Schlüssel [3] gelesen werden. {{ Systemfehler [4].}} Überprüfen Sie, ob Sie ausreichende Zugriffsrechte auf diesen Schlüssel besitzen, oder setzen Sie sich mit dem Supportpersonal in Verbindung. + +Wert [2] konnte nicht unter den Schlüssel [3] geschrieben werden. {{ Systemfehler [4].}} Überprüfen Sie, ob Sie ausreichende Zugriffsrechte auf diesen Schlüssel besitzen, oder setzen Sie sich mit dem Supportpersonal in Verbindung. + +Die Schlüsselnamen für den Schlüssel [2] konnten nicht gelesen werden. {{ Systemfehler [3].}} Überprüfen Sie, ob Sie ausreichende Zugriffsrechte auf diesen Schlüssel besitzen, oder setzen Sie sich mit dem Supportpersonal in Verbindung. + +Die Namen der untergeordneten Schlüssel des Schlüssels [2] konnten nicht bestimmt werden. {{ Systemfehler [3].}} Überprüfen Sie, ob Sie ausreichende Zugriffsrechte auf diesen Schlüssel besitzen, oder setzen Sie sich mit dem Supportpersonal in Verbindung. + +Die Sicherheitsinformation für den Schlüssel [2] konnte nicht gelesen werden. {{ Systemfehler [3].}} Überprüfen Sie, ob Sie über ausreichende Zugriffsrechte auf diesen Schlüssel verfügen, oder setzen Sie sich mit dem Supportpersonal in Verbindung. + +Der verfügbare Registrierungsspeicher konnte nicht vergrößert werden. [2] KB freier Registrierungsspeicher sind zum Installieren dieser Anwendung erforderlich. + +Im Augenblick wird eine weitere Installation ausgeführt. Sie müssen erst die zweite Installation abschließen, bevor Sie diese Installation fortsetzen können. + +Fehler beim Zugriff auf gesicherte Daten. Stellen Sie sicher, dass Windows Installer korrekt konfiguriert ist und wiederholen Sie die Installation. + +Benutzer "[2]" hat die Installation des Produkts "[3]" bereits initialisiert. Dieser Benutzer muss die Installation wiederholen, bevor dieses Produkt verwendet werden kann. Die aktuelle Installation wird jetzt fortgesetzt. + +Benutzer "[2]" hat die Installation des Produkts "[3]" bereits initialisiert. Dieser Benutzer muss die Installation wiederholen, bevor dieses Produkt verwendet werden kann. + +Nicht genügend freier Speicherplatz -- Volume: "[2]"; erforderlicher Speicher: [3] KB; verfügbarer Speicher: [4] KB. Geben Sie einigen Festplattenspeicher frei und wiederholen Sie den Vorgang. + +Sind Sie sicher, dass Sie abbrechen möchten? + +Die Datei [2][3] wird im Augenblick verwendet{ vom folgenden Prozess: Name: [4], Kennung: [5], Fenstertitel: "[6]"}. Schließen Sie diese Anwendung und wiederholen Sie den Vorgang. + +Das Produkt "[2]" ist bereits installiert und verhindert die Installation dieses Produkts. Die beiden Produkte sind inkompatibel. + +Auf Volume "[2]" steht nicht genügend Speicherplatz für die Installation bei aktivierter Wiederherstellungsoption zur Verfügung. [3] KB sind erforderlich, aber nur [4] KB sind verfügbar. Klicken Sie auf "Ignorieren", um die Installation ohne Speicherung von Wiederherstellungsinformationen fortzusetzen, klicken Sie auf "Wiederholen", um den verfügbaren Speicher erneut zu überprüfen oder auf "Abbrechen", um die Installation abzubrechen. + +Zugriff auf die Netzwerkadresse [2] war nicht möglich. + +Die folgenden Anwendungen sollten geschlossen werden, bevor Sie die Installationen fortsetzen: + +Es wurde keine Installation eines der zur Installation dieses Produkts erforderlichen passenden Produkte auf diesem Computer gefunden. + +Beim Übernehmen der Sicherheitseinstellungen ist ein Fehler aufgetreten. [2] ist kein gültiger Benutzer bzw. keine gültige Gruppe. Dies kann ein das Paket betreffendes Problem oder ein bei Herstellung der Netzwerkverbindung mit dem Domänencontroller aufgetretenes Problem sein. Überprüfen Sie die Netzwerkverbindung und klicken Sie auf "Wiederholen" oder "Abbrechen", um die Installation abzubrechen. {{Die SID des Benutzers wurde nicht gefunden, Systemfehler [3]}} + +Der Schlüssel [2] ist ungültig. Überprüfen Sie, ob Sie den korrekten Schlüssel eingegeben haben. + +Installer muss den Computer neu starten, bevor die Konfiguration von [2] fortgesetzt werden kann. Klicken Sie auf "Ja", um den Computer jetzt neu zu starten, oder auf "Nein", um den Computer später manuell neu zu starten. + +Sie müssen den Computer neu starten, damit die geänderte Konfiguration von [2] wirksam wird. Klicken Sie auf "Ja", um den Computer jetzt neu zu starten, oder auf "Nein", um den Computer später manuell neu zu starten. + +Eine Installation von [2] ist im Augenblick unterbrochen. Sie müssen die von dieser Installation vorgenommenen Änderungen rückgängig machen, bevor Sie den Vorgang fortsetzen können. Möchten Sie diese Änderungen rückgängig machen? + +Im Augenblick wird eine weitere Installation dieses Produkts durchgeführt. Sie müssen die von dieser Installation vorgenommenen Änderungen rückgängig machen, bevor Sie den Vorgang fortsetzen können. Möchten Sie diese Änderungen rückgängig machen? + +Für das Produkt [2] wurde kein Installationspaket gefunden. Wiederholen Sie die Installation und verwenden Sie dabei eine gültige Kopie des Installationspakets "[3]". + +Die Installation wurde erfolgreich abgeschlossen. + +Die Installation ist fehlgeschlagen. + +Produkt: [2] -- [3] + +Sie können entweder den ursprünglichen Zustand des Computers wiederherstellen oder die Installation später fortsetzen. Möchten Sie wiederherstellen? + +Beim Versuch, Installationsinformationen auf die Festplatte zu schreiben, ist ein Fehler aufgetreten. Überprüfen Sie, ob genügend Plattenspeicher verfügbar ist, und klicken Sie auf "Wiederholen". Oder klicken Sie auf "Abbrechen", um die Installation zu abzubrechen. + +Eine oder mehrere Datei(en), die zum Wiederherstellen des ursprünglichen Zustands des Computers erforderlich sind, wurden nicht gefunden. Wiederherstellen nicht möglich. + +[2] kann eines seiner erforderlichen Produkte nicht installieren. Setzen Sie sich mit dem technischen Supportpersonal in Verbindung. {{Systemfehler: [3].}} + +Die ältere Version von [2] kann nicht entfernt werden. Setzen Sie sich mit dem technischen Supportpersonal in Verbindung. {{Systemfehler: [3].}} + +[2] wird installiert + +[2] wird konfiguriert + +[2] wird entfernt + +Die Datei [2] wurde von Richtlinie für die digitale Signatur zurückgewiesen. + +Auf den Windows Installer-Dienst konnte nicht zugegriffen werden. Dies kann auftreten, wenn Windows im abgesicherten Modus ausgeführt wird oder wenn der Windows Installer nicht korrekt installiert wurde. Setzen Sie sich mit dem Supportpersonal in Verbindung, um weitere Unterstützung zu erhalten. + +Es liegt ein dieses Windows Installer-Paket betreffendes Problem vor. Ein für den Abschluss der Installation erforderliches Skript konnte nicht ausgeführt werden. Wenden Sie sich an das Supportpersonal oder den Hersteller des Pakets. {{Benutzerdefinierte Aktion: [2] Skriptfehler [3], [4]: [5] Zeile[6], Spalte [7], [8] }} + +Es liegt ein dieses Windows Installer-Paket betreffendes Problem vor. Ein für den Abschluss der Installation erforderliches Programm konnte nicht ausgeführt werden. Wenden Sie sich an das Supportpersonal oder den Hersteller des Pakets. {{Aktion: [2], Pfad: [3], Befehl: [4] }} + +Es liegt ein dieses Windows Installer-Paket betreffendes Problem vor. Ein Programm, das im Rahmen der Installation ausgeführt wurde, wurde nicht erfolgreich abgeschlossen. Wenden Sie sich an das Supportpersonal oder den Hersteller des Pakets. {{Aktion: [2], Pfad: [3], Befehl: [4] }} + +Es liegt ein dieses Windows Installer-Paket betreffendes Problem vor. Eine für den Abschluss der Installation erforderliche DLL konnte nicht ausgeführt werden. Wenden Sie sich an das Supportpersonal oder den Hersteller des Pakets. {{Aktion: [2], Eintrag: [3], Bibliothek: [4] }} + +Das Entfernen wurde erfolgreich abgeschlossen. + +Das Entfernen ist fehlgeschlagen. + +Die Ankündigung wurde erfolgreich abgeschlossen. + +Die Ankündigung ist fehlgeschlagen. + +Die Konfiguration wurde erfolgreich abgeschlossen. + +Die Konfiguration ist fehlgeschlagen. + +Sie müssen über Administratorrechte verfügen, um diese Anwendung entfernen zu können. Melden Sie sich als Administrator an oder wenden Sie sich an den technischen Support, um Unterstützung zu erhalten. + +Der Pfad [2] ist ungültig. Geben Sie einen gültigen Pfad an. + +Nicht genügend Arbeitsspeicher. Beenden Sie andere Anwendungen und wiederholen Sie den Vorgang. + +In Laufwerk [2] ist kein Datenträger eingelegt. Legen Sie einen Datenträger ein und klicken Sie auf "Wiederholen". Oder klicken Sie auf "Abbrechen", um zu dem zuvor ausgewählten Volume zurückzukehren. + +In Laufwerk [2] ist kein Datenträger eingelegt. Legen Sie einen Datenträger ein und klicken Sie auf "Wiederholen". Oder klicken Sie auf "Abbrechen", um zum Dialog "Durchsuchen" zurückzukehren und ein anderes Volume auszuwählen. + +Der Ordner [2] existiert nicht. Geben Sie den Pfad für einen existierenden Ordner ein. + +Die Zugriffsrechte reichen nicht aus, um diesen Ordner zu lesen. + +Es konnte kein gültiger Zielordner für die Installation bestimmt werden. + +Fehler beim Versuch, von der Quellinstallationsdatenbank zu lesen: [2]. + +Planung des Computerneustarts: Die Datei [2] wird in [3] umbenannt. Der Computer muss neu gestartet werden, um den Vorgang abzuschließen. + +Planung des Computerneustarts: Die Datei [2] wird gelöscht. Der Computer muss neu gestartet werden, um den Vorgang abzuschließen. + +Fehler beim Registrieren von Modul [2]. HRESULT [3]. Wenden Sie sich an den Support. + +Fehler beim Entfernen von Modul [2] aus der Registrierung. HRESULT [3]. Wenden Sie sich an den Support. + +Fehler beim Zwischenspeichern von Paket [2]. Fehler: [3]. Wenden Sie sich an den Support. + +Schriftart [2] konnte nicht registriert werden. Überprüfen Sie, ob Sie ausreichende Zugriffsrechte zum Installieren von Schriftarten besitzen und ob das System diese Schriftart unterstützt. + +Schriftart [2] konnte nicht aus der Registrierung entfernt werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Entfernen von Schriftarten besitzen. + +Verknüpfung [2] konnte nicht erstellt werden. Überprüfen Sie, ob der Zielordner vorhanden ist und ob Sie Zugriff darauf haben. + +Verknüpfung [2] konnte nicht entfernt werden. Überprüfen Sie, ob die Verknüpfungsdatei vorhanden ist und ob Sie darauf Zugriff haben. + +Typbibliothek für Datei [2] konnte nicht registriert werden. Setzen Sie sich mit dem Supportpersonal in Verbindung. + +Typbibliothek für Datei [2] konnte nicht aus der Registrierung entfernt werden. Setzen Sie sich mit dem Supportpersonal in Verbindung. + +Aktualisieren der INI-Datei war nicht möglich: [2][3]. Überprüfen Sie, ob die Datei vorhanden ist und ob Sie darauf Zugriff haben. + +Es war nicht möglich festzulegen, dass Datei [3] beim Neustart des Computers durch Datei [2] ersetzt wird. Überprüfen Sie, ob Sie Schreibzugriff auf Datei [3] haben. + +Fehler beim Entfernen des ODBC-Treibermanagers, ODBC-Fehler [2]: [3]. Setzen Sie sich mit dem Supportpersonal in Verbindung. + +Fehler bei der Installation des ODBC-Treibermanagers. ODBC-Fehler [2]: [3]. Setzen Sie sich mit dem Supportpersonal in Verbindung. + +Fehler beim Entfernen des ODBC-Treibers: [4], ODBC-Fehler [2]: [3]. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Entfernen von ODBC-Treibern besitzen. + +Fehler beim Installieren des ODBC-Treibers: [4], ODBC-Fehler [2]: [3]. Überprüfen Sie, ob die Datei [4] vorhanden ist und ob Sie darauf Zugriff haben. + +Fehler beim Konfigurieren der ODBC-Datenquelle: [4], ODBC-Fehler [2]: [3]. Überprüfen Sie, ob die Datei [4] vorhanden ist und ob Sie darauf Zugriff haben. + +Dienst "[2]" ([3]) konnte nicht gestartet werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Starten von Systemdiensten besitzen. + +Dienst "[2]" ([3]) konnte nicht angehalten werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Anhalten von Systemdiensten besitzen. + +Dienst "[2]" ([3]) konnte nicht gelöscht werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Entfernen von Systemdiensten besitzen. + +Dienst "[2]" ([3]) konnte nicht installiert werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Installieren von Systemdiensten besitzen. + +Umgebungsvariable "[2]" konnte nicht aktualisiert werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Ändern von Umgebungsvariablen besitzen. + +Sie besitzen keine ausreichenden Berechtigungen, um diese Installation für alle Benutzer dieses Computers auszuführen. Melden Sie sich als Administrator an, und wiederholen Sie diese Installation. + +Dateisicherheit für Datei "[3]" konnte nicht eingestellt werden. Fehler: [2]. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Ändern der Sicherheitsrechte für diese Datei besitzen. + +Komponentendienste (COM+ 1.0) sind auf diesem Computer nicht installiert. Um diese Installation erfolgreich abzuschließen, müssen Komponentendienste installiert sein. Komponentendienste stehen unter Windows 2000 zur Verfügung. + +Fehler beim Registrieren einer COM+-Anwendung. Setzen Sie sich mit dem Supportpersonal in Verbindung. + +Fehler beim Entfernen einer COM+-Anwendung aus der Registrierung. Setzen Sie sich mit dem Supportpersonal in Verbindung. + +Die Beschreibung für Dienst "[2]" ([3]) konnte nicht geändert werden. + +Der Windows Installer-Dienst kann die Systemdatei [2] nicht aktualisieren, weil die Datei von Windows geschützt wird. Sie müssen möglicherweise das Betriebssystem aktualisieren, damit dieses Programm korrekt funktionieren kann. {{Paketversion: [3], vom System geschützte Version: [4]}} + +Der Windows Installer-Dienst kann die geschützte Windows-Datei [2] nicht aktualisieren. {{Paketversion: [3], vom System geschützte Version: [4], SFP-Fehler: [5]}} + +Einige geschützte Windows-Dateien konnten nicht aktualisiert werden. {{SFP-Fehler: [2]. Liste der geschützten Dateien:\r\n[3]}} + +Benutzerinstallationen sind über die Computerrichtlinie deaktiviert. + +Während der Installation der Assemblierungskomponente [2] ist ein Fehler aufgetreten. HRESULT: [3]. {{Assemblierungsschnittstelle: [4], Funktion: [5], Assemblierungsname: [6]}} + + diff --git a/src/WINNT/install/wix/lang/en_US/ActionText.wxi b/src/WINNT/install/wix/lang/en_US/ActionText.wxi new file mode 100644 index 000000000..e16f004ce --- /dev/null +++ b/src/WINNT/install/wix/lang/en_US/ActionText.wxi @@ -0,0 +1,137 @@ + + +Advertising application + +Searching for installed applications + +Allocating registry space + +Binding executables + +Searching for qualifying products + +Computing space requirements + +Computing space requirements + +Creating folders + +Creating shortcuts + +Deleting services + +Creating duplicate files + +Computing space requirements + +Searching for related applications + +Generating script operations for action: + +Copying network install files + +Copying new files + +Installing ODBC components + +Installing new services + +Validating install + +Evaluating launch conditions + +Migrating feature states from related applications + +Moving files + +Patching files + +Updating component registration + +Publishing Qualified Components + +Publishing Product Features + +Publishing product information + +Registering Class servers + +Registering COM+ Applications and Components + +Registering extension servers + +Registering fonts + +Registering MIME info + +Registering product + +Unregistering program identifiers + +Registering type libraries + +Registering user + +Removing duplicated files + +Updating environment strings + +Removing applications + +Removing files + +Removing folders + +Removing INI files entries + +Removing ODBC components + +Removing system registry values + +Removing shortcuts + +Searching for qualifying products + +Rolling back action: + +Removing backup files + +Registering modules + +Unregistering modules + +Initializing ODBC directories + +Starting services + +Stopping services + +Removing moved files + +Unpublishing Qualified Components + +Unpublishing Product Features + +Unpublishing product information + +Unregister Class servers + +Unregistering COM+ Applications and Components + +Unregistering extension servers + +Unregistering fonts + +Unregistering MIME info + +Unregistering program identifiers + +Unregistering type libraries + +Updating environment strings + +Writing INI files values + +Writing system registry values + + diff --git a/src/WINNT/install/wix/lang/en_US/Error.wxi b/src/WINNT/install/wix/lang/en_US/Error.wxi new file mode 100644 index 000000000..004c98a9d --- /dev/null +++ b/src/WINNT/install/wix/lang/en_US/Error.wxi @@ -0,0 +1,263 @@ + + +{{Fatal error: }} + +{{Error [1]. }} + +Warning [1]. + + + +Info [1]. + +Internal Error [1]. [2]{, [3]}{, [4]} + + + +{{Disk full: }} + +Action [Time]: [1]. [2] + +[ProductName] + +{[2]}{, [3]}{, [4]} + +Message type: [1], Argument: [2] + +=== Logging started: [Date] [Time] === + +=== Logging stopped: [Date] [Time] === + +Action start [Time]: [1]. + +Action ended [Time]: [1]. Return value [2]. + +Time remaining: {[1] minutes }{[2] seconds} + +Out of memory. Shut down other applications before retrying. + +Installer is no longer responding. + +Installer stopped prematurely. + +Please wait while Windows configures [ProductName] + +Gathering required information... + +Removing older versions of this application... + +Preparing to remove older versions of this application... + +{[ProductName] }Setup completed successfully. + +{[ProductName] }Setup failed. + +Error reading from file: [2]. {{ System error [3].}} Verify that the file exists and that you can access it. + +Cannot create the file '[3]'. A directory with this name already exists. Cancel the install and try installing to a different location. + +Please insert the disk: [2] + +The installer has insufficient privileges to access this directory: [2]. The installation cannot continue. Log on as administrator or contact your system administrator. + +Error writing to file: [2]. Verify that you have access to that directory. + +Error reading from file [2]. {{ System error [3].}} Verify that the file exists and that you can access it. + +Another application has exclusive access to the file '[2]'. Please shut down all other applications, then click Retry. + +There is not enough disk space to install this file: [2]. Free some disk space and click Retry, or click Cancel to exit. + +Source file not found: [2]. Verify that the file exists and that you can access it. + +Error reading from file: [3]. {{ System error [2].}} Verify that the file exists and that you can access it. + +Error writing to file: [3]. {{ System error [2].}} Verify that you have access to that directory. + +Source file not found{{(cabinet)}}: [2]. Verify that the file exists and that you can access it. + +Cannot create the directory '[2]'. A file with this name already exists. Please rename or remove the file and click retry, or click Cancel to exit. + +The volume [2] is currently unavailable. Please select another. + +The specified path '[2]' is unavailable. + +Unable to write to the specified folder: [2]. + +A network error occurred while attempting to read from the file: [2] + +An error occurred while attempting to create the directory: [2] + +A network error occurred while attempting to create the directory: [2] + +A network error occurred while attempting to open the source file cabinet: [2] + +The specified path is too long: [2] + +The Installer has insufficient privileges to modify this file: [2]. + +A portion of the folder path '[2]' is invalid. It is either empty or exceeds the length allowed by the system. + +The folder path '[2]' contains words that are not valid in folder paths. + +The folder path '[2]' contains an invalid character. + +'[2]' is not a valid short file name. + +Error getting file security: [3] GetLastError: [2] + +Invalid Drive: [2] + +Error applying patch to file [2]. It has probably been updated by other means, and can no longer be modified by this patch. For more information contact your patch vendor. {{System Error: [3]}} + +Could not create key: [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. + +Could not open key: [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. + +Could not delete value [2] from key [3]. {{ System error [4].}} Verify that you have sufficient access to that key, or contact your support personnel. + +Could not delete key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. + +Could not read value [2] from key [3]. {{ System error [4].}} Verify that you have sufficient access to that key, or contact your support personnel. + +Could not write value [2] to key [3]. {{ System error [4].}} Verify that you have sufficient access to that key, or contact your support personnel. + +Could not get value names for key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. + +Could not get sub key names for key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. + +Could not read security information for key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. + +Could not increase the available registry space. [2] KB of free registry space is required for the installation of this application. + +Another installation is in progress. You must complete that installation before continuing this one. + +Error accessing secured data. Please make sure the Windows Installer is configured properly and try the install again. + +User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product. Your current install will now continue. + +User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product. + +Out of disk space -- Volume: '[2]'; required space: [3] KB; available space: [4] KB. Free some disk space and retry. + +Are you sure you want to cancel? + +The file [2][3] is being held in use{ by the following process: Name: [4], Id: [5], Window Title: '[6]'}. Close that application and retry. + +The product '[2]' is already installed, preventing the installation of this product. The two products are incompatible. + +Out of disk space -- Volume: '[2]'; required space: [3] KB; available space: [4] KB. If rollback is disabled, enough space is available. Click 'Cancel' to quit, 'Retry' to check available disk space again, or 'Ignore' to continue without rollback. + +Could not access network location [2]. + +The following applications should be closed before continuing the install: + +Could not find any previously installed compliant products on the machine for installing this product. + +The key [2] is not valid. Verify that you entered the correct key. + +The installer must restart your system before configuration of [2] can continue. Click Yes to restart now or No if you plan to manually restart later. + +You must restart your system for the configuration changes made to [2] to take effect. Click Yes to restart now or No if you plan to manually restart later. + +An installation for [2] is currently suspended. You must undo the changes made by that installation to continue. Do you want to undo those changes? + +A previous installation for this product is in progress. You must undo the changes made by that installation to continue. Do you want to undo those changes? + +An installation package for the product [2] cannot be found. Try the installation again using a valid copy of the installation package '[3]'. + +Installation operation completed successfully. + +Installation operation failed. + +Product: [2] -- [3] + +You may either restore your computer to its previous state or continue the install later. Would you like to restore? + +An error occurred while writing installation information to disk. Check to make sure enough disk space is available, and click Retry, or Cancel to end the install. + +One or more of the files required to restore your computer to its previous state could not be found. Restoration will not be possible. + +[2] cannot install one of its required products. Contact your technical support group. {{System Error: [3].}} + +The older version of [2] cannot be removed. Contact your technical support group. {{System Error [3].}} + +The path [2] is not valid. Please specify a valid path. + +Out of memory. Shut down other applications before retrying. + +There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to go back to the previously selected volume. + +There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to return to the browse dialog and select a different volume. + +The folder [2] does not exist. Please enter a path to an existing folder. + +You have insufficient privileges to read this folder. + +A valid destination folder for the install could not be determined. + +Error attempting to read from the source install database: [2]. + +Scheduling reboot operation: Renaming file [2] to [3]. Must reboot to complete operation. + +Scheduling reboot operation: Deleting file [2]. Must reboot to complete operation. + +Module [2] failed to register. HRESULT [3]. Contact your support personnel. + +Module [2] failed to unregister. HRESULT [3]. Contact your support personnel. + +Failed to cache package [2]. Error: [3]. Contact your support personnel. + +Could not register font [2]. Verify that you have sufficient permissions to install fonts, and that the system supports this font. + +Could not unregister font [2]. Verify that you that you have sufficient permissions to remove fonts. + +Could not create Shortcut [2]. Verify that the destination folder exists and that you can access it. + +Could not remove Shortcut [2]. Verify that the shortcut file exists and that you can access it. + +Could not register type library for file [2]. Contact your support personnel. + +Could not unregister type library for file [2]. Contact your support personnel. + +Could not update the ini file [2][3]. Verify that the file exists and that you can access it. + +Could not schedule file [2] to replace file [3] on reboot. Verify that you have write permissions to file [3]. + +Error removing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel. + +Error installing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel. + +Error removing ODBC driver: [4], ODBC error [2]: [3]. Verify that you have sufficient privileges to remove ODBC drivers. + +Error installing ODBC driver: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it. + +Error configuring ODBC data source: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it. + +Service '[2]' ([3]) failed to start. Verify that you have sufficient privileges to start system services. + +Service '[2]' ([3]) could not be stopped. Verify that you have sufficient privileges to stop system services. + +Service '[2]' ([3]) could not be deleted. Verify that you have sufficient privileges to remove system services. + +Service '[2]' ([3]) could not be installed. Verify that you have sufficient privileges to install system services. + +Could not update environment variable '[2]'. Verify that you have sufficient privileges to modify environment variables. + +You do not have sufficient privileges to complete this installation for all users of the machine. Log on as administrator and then retry this installation. + +Could not set file security for file '[3]'. Error: [2]. Verify that you have sufficient privileges to modify the security permissions for this file. + +Component Services (COM+ 1.0) are not installed on this computer. This installation requires Component Services in order to complete successfully. Component Services are available on Windows 2000. + +Error registering COM+ Application. Contact your support personnel for more information. + +Error unregistering COM+ Application. Contact your support personnel for more information. + +The description for service '[2]' ([3]) could not be changed." + +The Windows Installer service cannot update the system file [1] because the file is protected by Windows. You may need to update your operating system for this program to work correctly. {{Package version: [2], OS Protected version: [3]}}" + +The Windows Installer service cannot update the protected Windows file [1]. {{Package version: [2], OS Protected version: [3], SFP Error: [4]}}" + + diff --git a/src/WINNT/install/wix/lang/en_US/strings.wxl b/src/WINNT/install/wix/lang/en_US/strings.wxl new file mode 100644 index 000000000..1c342f2af --- /dev/null +++ b/src/WINNT/install/wix/lang/en_US/strings.wxl @@ -0,0 +1,55 @@ + + + + + Client and server components for AFS + AFS Client + Debug symbols + Provides client functionality for connecting to AFS servers with Kerberos authentication. + Debugging symbols for AFS client components. + AFS Server + Debug symbols + Provides AFS file server functionality. + Debugging symbols for AFS server components. + AFS Control Center + Debug symbols + Applications for managing and monitoring AFS servers. + Debugging symbols for AFS Control Center components. + AFS Software Development Kit + Debug symbols + Headers and libraries for developing applications for AFS + Debugging symbols for the AFS Software Development Kit. + AFS System Administration Documentation + Information on using and administering AFS. + Optional components + Optional components + Loopback adapter + Loopback adapter for AFS. It is recommended that you install the loopback adapter if you are installing the client components. + + AFS Context Menu Shell Extension + Authentication for AFS + AFS Client Help + Server Manager + Account Manager + AFS Documentation + Server Configuration Wizard + + OpenAFS for Windows is currently only packaged for Windows 2000,XP and 2003 + + Installation of Network Provider failed. System error [2] + Configuration of client service failed. System error [2] + Configuration of server service failed. System error [2] + Installation aborted : [2] + Uninstallation of the NSIS installation of OpenAFS failed with code [2] + + Installing loopback adapter + Removing existing loopback adapter + Installing the network provider + Removing the network provider + Configuring the AFS client service + Configuring the AFS server service + Removing existing installation of OpenAFS + + Installation of OpenAFS for Windows was prematurely terminated because OpenAFS [NSISVERSION] was already installed. + + diff --git a/src/WINNT/install/wix/lang/en_US/ui.wxi b/src/WINNT/install/wix/lang/en_US/ui.wxi new file mode 100644 index 000000000..c5ffea7c1 --- /dev/null +++ b/src/WINNT/install/wix/lang/en_US/ui.wxi @@ -0,0 +1,1086 @@ + + + + DlgFont8 + ErrorDlg + bannrbmp + no + removico + < &Back + Br&owse + Cancel + &Exit + &Finish + &Ignore + &Install + &Next > + &no + OK + &Remove + &Repair + &Reset + &Resume + &Retry + &Return + &yes + completi + custicon + dlgbmp + {&DlgFontBold8} + exclamic + info + insticon + Installing + installs + P + repairic + Setup + 0 + Setup Wizard + + + + + 1 + 1 + + + 1 + 1 + + + + + + + 1 + + + 1 + + + + + + Browse to the destination folder + + + + + [DlgTitleFont]Change current destination folder + + + + + &Enter a new network location or click Browse to browse to one. + + + + 1 + + + 1 + + + 1 + 1 + + + 1 + + + + Please specify a network location for the server image of [ProductName] product + + + + + [DlgTitleFont]Network Location + + + + + &Please enter the name of your organization in the box below. This will be used as default company name for subsequent installations of [ProductName]: + + + + CD &Key: + + + + 1 + + + 0 + ProductID + + + 1 + + + + Please enter your company information + + + + + [DlgTitleFont]Company Information + + + + + 1 + 1 + + + 1 + + + + + The [Wizard] will create a server image of [ProductName], at a specified network location. Click Next to continue or Cancel to exit the [Wizard]. + + + + {\VerdanaBold13}Welcome to the [ProductName] [Wizard] + + + + + + + 1 + 1 + + + 1 + 1 + + + + + + + 1 + + + 1 + + + + + + Browse to the destination folder + + + + + [DlgTitleFont]Change current destination folder + + + + + 1 + + + 1 + + + Are you sure you want to cancel [ProductName] installation? + + + + + + 1 + + + 1 + + + + + The [Wizard] will continue installation of [ProductName] on your computer. Click Next to continue or Cancel to exit the [Wizard]. + + + + {\VerdanaBold13}Welcome back to the [ProductName] [Wizard] + + + + + + 1 + Installed + + + 1 + + + + Disk &Usage + 1 + + + + InstallMode = "Change" + InstallMode = "Custom" + + + + 3 AND !feaClient<>3) OR &feaControlCenter=2 OR (&feaControlCenter<>3 AND !feaControlCenter<>3) ))]]> + + + 3 AND NOT ((&feaServer=3 OR (!feaServer=3 AND &feaServer<1)) AND (&feaClient=2 OR (&feaClient<>3 AND !feaClient<>3) OR &feaControlCenter=2 OR (&feaControlCenter<>3 AND !feaControlCenter<>3) ))]]> + + + 3 AND !feaClient<>3) OR &feaControlCenter=2 OR (&feaControlCenter<>3 AND !feaControlCenter<>3) )) ]]> + + + + + 1 + + + + Select the way you want features to be installed. + + + Click on the icons in the tree below to change the way features will be installed. + + + + + [DlgTitleFont]Custom Setup + + + + Multiline description of the currently selected item. + + + + The size of the currently selected item. + + + + <The selection's path> + + + Installed + + + + Installed + + + + + + 1 + + + 3 AND !feaClient<>3)]]> + 3 AND !feaControlCenter<>3)]]> + + + + + 3 ]]> + + + + + + 1 + + + Dependencies of the OpenAFS Server + + + The OpenAFS Server component requires the following component(s) which are currently not set to be installed. Click Next to add these components or click Back to review your selections. + + + + + + + + + [DlgTitleFont]Server Dependencies + + + + + + 1 + + + + The disk space required for the installation of the selected features. + + + The highlighted volumes (if any) do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s). + + + + + [DlgTitleFont]Disk Space Requirements + + + {120}{70}{70}{70}{70} + + + + + + 1 + + + 1 + + + 1 + + + + 1 + + + 1 + + + 1 + + + 1 + + + + + 1 + + + + + + Click the Finish button to exit the [Wizard]. + + + + {\VerdanaBold13}Completing the [ProductName] [Wizard] + + + + + 1 + + + + + + + {\VerdanaBold13}[ProductName] [Wizard] ended prematurely + + + [ProductName] setup ended prematurely because of an error. Your system has not been modified. To install this program at a later time, please run the installation again. + + + Click the Finish button to exit the [Wizard]. + + + + + 1 + + + 1 + + + 1 + + + + Some files that need to be updated are currently in use. + + + The following applications are using files that need to be updated by this setup. Close these applications and then click Retry to continue the installation or Cancel to exit it. + + + + + [DlgTitleFont]Files in Use + + + + + + + 1 + + + IAgree = "yes" AND ShowUserRegistrationDlg = 1 + CostingComplete = 1 + IAgree = "yes" AND ShowUserRegistrationDlg <> 1 AND (IBMAFS_UPGRADE OR OPENAFS_UPGRADE OR NSISUNINSTALL <> "") + IAgree = "yes" AND ShowUserRegistrationDlg <> 1 AND NOT (IBMAFS_UPGRADE OR OPENAFS_UPGRADE OR NSISUNINSTALL <> "") + IAgree <> "yes" + IAgree = "yes" + + + 1 + + + + {\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} {\f23\froman\fcharset128\fprq1{\*\panose 00000000000000000000}MS Mincho{\*\falt MS ??};}{\f54\froman\fcharset128\fprq1{\*\panose 00000000000000000000}@MS Mincho;}{\f55\froman\fcharset238\fprq2 Times New Roman CE;} {\f56\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f58\froman\fcharset161\fprq2 Times New Roman Greek;}{\f59\froman\fcharset162\fprq2 Times New Roman Tur;}{\f60\froman\fcharset177\fprq2 Times New Roman (Hebrew);} {\f61\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f62\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f71\fmodern\fcharset238\fprq1 Courier New CE;}{\f72\fmodern\fcharset204\fprq1 Courier New Cyr;} {\f74\fmodern\fcharset161\fprq1 Courier New Greek;}{\f75\fmodern\fcharset162\fprq1 Courier New Tur;}{\f76\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f77\fmodern\fcharset178\fprq1 Courier New (Arabic);} {\f78\fmodern\fcharset186\fprq1 Courier New Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255; \red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{ \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}{ \s15\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f2\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext15 Plain Text;}}{\info{\title Copyright 1998-2000 by the Massachusetts Institute of Technology} {\author Jamie Rasmussen}{\operator Jamie Rasmussen}{\creatim\yr2000\mo9\dy29\hr16\min17}{\revtim\yr2000\mo9\dy29\hr16\min17}{\version2}{\edmins0}{\nofpages1}{\nofwords0}{\nofchars0}{\*\company MIT Information Systems}{\nofcharsws0}{\vern8269}} \margl1319\margr1319 \widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1701\dgvorigin1984\dghshow1\dgvshow1 \jexpand\viewkind4\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule \fet0\sectd \linex0\endnhere\sectlinegrid360\sectdefaultcl {\*\pnseclvl1 \pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5 \pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s15\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \f2\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\dbch\af23 \hich\af2\dbch\af23\loch\f2 Copyright 1998-2000 by the Massachusetts Institute of Technology. \par \hich\af2\dbch\af23\loch\f2 All Rights Reserved. \par \hich\af2\dbch\af23\loch\f2 \par \hich\af2\dbch\af23\loch\f2 Export of this software from the United States of America may require a specific license from the United States Government. It is the responsibility of any person o\hich\af2\dbch\af23\loch\f2r organization contemplating export to obtain such a license before exporting.\par \hich\af2\dbch\af23\loch\f2 \par \hich\af2\dbch\af23\loch\f2 WITHIN THAT CONSTRAINT, permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that \hich\af2\dbch\af23\loch\f2 the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of M.I.T. not be used in advertising or publicity pertaining to distribution of the softwa\hich\af2\dbch\af23\loch\f2 r\hich\af2\dbch\af23\loch\f2 e without specific, written prior permission. M.I.T. makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. \par \par }} + + + Please read the following license agreement carefully + + + + + [DlgTitleFont]End-User License Agreement + + + + + [DlgTitleFont]&Modify + + + 1 + 1 + 1 + 1 + + + [DlgTitleFont]Re&pair + + + 1 + 1 + 1 + 1 + + + [DlgTitleFont]&Remove + + + 1 + 1 + 1 + 1 + + + 1 + + + + 1 + + + + Select the operation you wish to perform. + + + + + [DlgTitleFont]Modify, Repair or Remove installation + + + Allows users to change the way features are installed. + + + Removes [ProductName] from your computer. + + + Repairs errors in the most recent installation state - fixes missing or corrupt files, shortcuts and registry entries. + + + + + CostingComplete = 1 + 1 + + + 1 + + + + + The [Wizard] will allow you to change the way [ProductName] features are installed on your computer or even to remove [ProductName] from your computer. Click Next to continue or Cancel to exit the [Wizard]. + + + + {\VerdanaBold13}Welcome to the [ProductName] [Wizard] + + + + + 1 + + + + Disk space required for the installation exceeds available disk space. + + + The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s). + + + + + [DlgTitleFont]Out of Disk Space + + + {120}{70}{70}{70}{70} + + + + + 1 + + + 1 + 1 + + + + Disk space required for the installation exceeds available disk space. + + + The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s). + + + + + [DlgTitleFont]Out of Disk Space + + + {120}{70}{70}{70}{70} + + + Alternatively, you may choose to disable the installer's rollback functionality. This allows the installer to restore your computer's original state should the installation be interrupted in any way. Click yes if you wish to take the risk to disable rollback. + + + + + 1 + + + + + + + Please wait while the [Wizard] prepares to guide you through the installation. + + + + {\VerdanaBold13}Welcome to the [ProductName] [Wizard] + + + + + + + + + + 1 + + + + + + + + + + + + Please wait while the [Wizard] [Progress2] [ProductName]. This may take several minutes. + + + + + [DlgTitleFont][Progress1] [ProductName] + + + + + + + + + 1 + + + 1 + + + + ShowUserRegistrationDlg <> 1 + ShowUserRegistrationDlg = 1 + + + Other versions of [ProductName] need to be removed. + + + Click Confirm to uninstall the following version of AFS installed on this computer. Installation of [ProductName] cannot continue unless this program is removed. + + + + + [DlgTitleFont]Uninstall previous versions + + + + + + + + + CostingComplete = 1 + OutOfDiskSpace <> 1 + OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST) + OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D" + OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D" + (OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F") + + + 1 + + + + + The [Wizard] will complete the installation of [ProductName] on your computer. Click Install to continue or Cancel to exit the [Wizard]. + + + + {\VerdanaBold13}Resuming the [ProductName] [Wizard] + + + + + [DlgTitleFont]&Typical + + + 1 + 1 + 1 + + + [DlgTitleFont]C&ustom + + + 1 + 1 + + + [DlgTitleFont]C&omplete + + + 1 + 1 + 1 + + + ShowUserRegistrationDlg <> 1 AND NOT (IBMAFS_UPGRADE OR OPENAFS_UPGRADE) + ShowUserRegistrationDlg = 1 AND NOT (IBMAFS_UPGRADE OR OPENAFS_UPGRADE) + IBMAFS_UPGRADE OR OPENAFS_UPGRADE OR NSISUNINSTALL <> "" + + + + 1 + + + + Choose the setup type that best suits your needs + + + + + [DlgTitleFont]Choose Setup Type + + + All program features will be installed. (Requires most disk space) + + + Allows users to choose which program features will be installed and where they will be installed. Recommended for advanced users. + + + Installs the most common program features. Recommended for most users. + + + + + + 1 + + + 1 + + + 1 + + + + Choose the configuration options for the OpenAFS client. + + + + + [DlgTitleFont]Configure AFS Client + + + + + + + + + + + + + + 0 + 1 + + + 0 + 1 + + + 0 + 1 + + + 0 + 1 + 3 + + + + + 1 + + + CREDSSTARTUP = "1" + CREDSSTARTUP <> "1" + 1 + + + 1 + + + + Choose the configuration options for AFS credentials. + + + + + [DlgTitleFont]Options for AFS Credentials + + + + + + + + + + + + + + 1 + + + + + + + {\VerdanaBold13}[ProductName] [Wizard] was interrupted + + + [ProductName] setup was interrupted. Your system has not been modified. To install this program at a later time, please run the installation again. + + + Click the Finish button to exit the [Wizard]. + + + + + + + + + CD &Key: + + + + 1 + + + 0 + CostingComplete = 1 + ProductID + + + 1 + + + + Please enter your customer information + + + + + [DlgTitleFont]Customer Information + + + + + OutOfDiskSpace <> 1 + OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST) + OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D" + OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D" + (OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F") + + + 1 + + + + InstallMode = "Server Image" + (InstallMode = "Custom" OR InstallMode = "Change") AND &feaClient <> 3 + (InstallMode = "Custom" OR InstallMode = "Change") AND &feaClient = 3 + InstallMode = "Repair" + InstallMode = "Typical" OR InstallMode = "Complete" + + + The [Wizard] is ready to begin the [InstallMode] installation + + + Click Install to begin the installation. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard. + + + + + [DlgTitleFont]Ready to Install + + + + + 1 + + + OutOfDiskSpace <> 1 + OutOfDiskSpace <> 1 + OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST) + OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D" + OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D" + (OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F") + + + 1 + + + + You have chosen to remove the program from your computer. + + + Click Remove to remove [ProductName] from your computer. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard. + + + + + [DlgTitleFont]Remove [ProductName] + + + + + OutOfDiskSpace <> 1 + OutOfDiskSpace <> 1 + OutOfDiskSpace <> 1 + OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST) + OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D" + OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D" + (OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F") + + + 1 + + + + 1 + + + The [Wizard] is ready to begin the repair of [ProductName]. + + + Click Repair to repair the installation of [ProductName]. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard. + + + + + [DlgTitleFont]Repair [ProductName] + + + + + 1 + + + Please wait while the installer finishes determining your disk space requirements. + + + + + + 1 + + + 1 + + + + + The [Wizard] will install [ProductName] on your computer. Click Next to continue or Cancel to exit the [Wizard]. + + + + {\VerdanaBold13}Welcome to the [ProductName] [Wizard] + + + + yes + no + + + + + + bytes + GB + KB + MB + Entire feature will be unavailable + Feature will be installed when required + Entire feature will be installed to run from CD + Entire feature will be installed on local hard drive + Entire feature will be installed to run from network + Will be installed to run from CD + Will be installed on local hard drive + Will be installed to run from network + Gathering required information... + This feature will remain uninstalled + This feature will be set to be installed when required + This feature will be installed to run from CD + This feature will be installed on the local hard drive + This feature will be installed to run from the network + This feature will become unavailable + Will be installed when required + This feature will be available to run from CD + This feature will be installed on your local hard drive + This feature will be available to run from the network + This feature will be uninstalled completely, you won't be able to run it from CD + This feature will change from run from CD state to set to be installed when required + This feature will remain to be run from CD + This feature will change from run from CD state to be installed on the local hard drive + This feature frees up [1] on your hard drive. + This feature requires [1] on your hard drive. + Compiling cost for this feature... + This feature will be completely removed + This feature will be removed from your local hard drive, but will be set to be installed when required + This feature will be removed from your local hard drive, but will be still available to run from CD + This feature will remain on you local hard drive + This feature will be removed from your local hard drive, but will be still available to run from the network + This feature will be uninstalled completely, you won't be able to run it from the network + This feature will change from run from network state to set to be installed when required + This feature will change from run from network state to be installed on the local hard drive + This feature will remain to be run from the network + This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive. + This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive. + This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive. + This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive. + Time remaining: {[1] minutes }{[2] seconds} + Available + Difference + Required + Disk Size + Volume + + + + + + + $(loc.ErrNPIFailed) + $(loc.ErrSCCFailed) + $(loc.ErrSCSFailed) + $(loc.ErrAbort) + $(loc.ErrNsisFailed) + $(loc.ActRemoveLoopback) + $(loc.ActInstallLoopback) + $(loc.ActRemoveNetProvider) + $(loc.ActInstallNetProvider) + $(loc.ActConfigureClient) + $(loc.ActConfigureServer) + $(loc.ActRemoveNsisInstallation) + + + + + + + + + + + + + + + + (NOT Installed) AND (NOT AFTERREBOOT) + Installed AND (RESUME OR Preselected) + Installed AND NOT RESUME AND NOT Preselected + (NOT Installed) AND AFTERREBOOT + + + + + + + + + + + + + + + + + + + + diff --git a/src/WINNT/install/wix/lang/es_ES/ActionText.wxi b/src/WINNT/install/wix/lang/es_ES/ActionText.wxi new file mode 100644 index 000000000..1082c5fc7 --- /dev/null +++ b/src/WINNT/install/wix/lang/es_ES/ActionText.wxi @@ -0,0 +1,143 @@ + + +Mostrar aplicación + +Asignando espacio del registro + +Buscando aplicaciones instaladas + +Enlazando archivos ejecutables + +Buscando productos necesarios + +Calculando el espacio necesario + +Calculando el espacio necesario + +Creando carpetas + +Creando accesos directos + +Eliminando servicios + +Creando archivos duplicados + +Calculando el espacio necesario + +Buscando aplicaciones relacionadas + +Generando operaciones de secuencias de comandos para la acción: + +Copiando archivos de instalación de la red + +Copiando archivos nuevos + +Instalando componentes ODBC + +Instalando servicios nuevos + +Instalar catálogo de sistema + +Validando la instalación + +Evaluando condiciones de inicio + +Transfiriendo los estados de las características desde las aplicaciones relacionadas + +Moviendo archivos + +Publicar información de la asamblea + +No publicar información de la asamblea + +Revisando archivos + +Actualizando el registro de componentes + +Publicar componentes aceptables + +Publicar funciones del producto + +Publicar información del producto + +Registrando servidores de clases + +Registrando aplicaciones y componentes COM+ + +Registrando servidores de extensiones + +Registrando fuentes + +Registrando información MIME + +Registrando el producto + +Registrando identificadores de programa + +Registrando bibliotecas de tipos + +Registrando usuario + +Quitando archivos duplicados + +Actualizando cadenas de entorno + +Quitando aplicaciones + +Quitando archivos + +Quitando carpetas + +Quitando entradas de archivos INI + +Quitando componentes ODBC + +Quitando valores del registro del sistema + +Quitando accesos directos + +Buscando productos necesarios + +Acción de restauración: + +Quitando copias de seguridad + +Registrando módulos + +Eliminando módulos del registro + +Inicializando directorios ODBC + +Iniciando servicios + +Deteniendo servicios + +Quitando archivos movidos + +Anular publicación de componentes aceptables + +Anular publicación de funciones del producto + +Anular publicación de información del producto + +Eliminar del registro los servidores de clases + +Quitando aplicaciones y componentes COM+ del registro + +Eliminando del registro los servidores de extensiones + +Eliminando del registro las fuentes + +Eliminando del registro información MIME + +Eliminando identificadores de programa del registro + +Eliminando del registro bibliotecas de tipos + +Actualizando cadenas de entorno + +Escribiendo valores de los archivos INI + +Escribiendo valores del registro del sistema + + diff --git a/src/WINNT/install/wix/lang/es_ES/Error.wxi b/src/WINNT/install/wix/lang/es_ES/Error.wxi new file mode 100644 index 000000000..41d0edef0 --- /dev/null +++ b/src/WINNT/install/wix/lang/es_ES/Error.wxi @@ -0,0 +1,319 @@ + + +{{Error fatal: }} + +{{Error [1]. }} + +Advertencia [1]. + + + +Información [1]. + +El instalador encontró un error inesperado al instalar este paquete. Esto puede indicar un problema con este paquete. El código de error es [1]. {{Los argumentos son: [2], [3], [4]}} + + + +{{Disco lleno: }} + +Acción [Time]: [1]. [2] + +[ProductName] + +{[2]}{, [3]}{, [4]} + +Tipo de mensaje: [1], argumento: [2] + +=== Registro iniciado: [Date] [Time] === + +=== Registro detenido: [Date] [Time] === + +La acción se inició a las [Time]: [1]. + +La acción terminó a las [Time]: [1]. Valor devuelto: [2]. + +Tiempo restante: {[1] minutos }{[2] segundos} + +Memoria insuficiente. Cierre otras aplicaciones antes de intentarlo de nuevo. + +El instalador no responde. + +El instalador se detuvo antes de tiempo. + +Espere mientras Windows configura [ProductName] + +Recopilando la información necesaria... + +Quitando las versiones anteriores de esta aplicación... + +Preparando la eliminación de las versiones anteriores de esta aplicación... + +La instalación de {[ProductName] } finalizó correctamente. + +Fallo en la instalación de {[ProductName]}. + +Error al leer el archivo [2]. {{ Error del sistema [3].}} Compruebe que el archivo existe y que puede obtener acceso a él. + +No se puede crear el archivo '[2]'. Ya existe un directorio con ese nombre. Cancele la instalación e intente instalar en una ubicación distinta. + +Inserte el disco [2]. + +El instalador no dispone de privilegios suficientes para obtener acceso al directorio [2] y no se puede continuar con la instalación. Inicie la sesión como administrador o póngase en contacto con el administrador del sistema. + +Error al escribir en el archivo [2]. Compruebe que dispone de acceso a ese directorio. + +Error al leer el archivo [2]. {{ Error del sistema [3].}} Compruebe que el archivo existe y que puede obtener acceso a él. + +Otra aplicación tiene acceso exclusivo al archivo '[2]'. Cierre todas las demás aplicaciones y haga clic en Reintentar. + +No hay espacio en disco suficiente para instalar el archivo [2]. Libere espacio en disco y haga clic en Reintentar, o bien, haga clic en Cancelar para salir. + +No se encuentra el archivo de origen [2]. Compruebe que el archivo existe y que puede obtener acceso a él. + +Error al leer el archivo [3]. {{ Error del sistema [2].}} Compruebe que el archivo existe y que puede obtener acceso a él. + +Error al escribir en el archivo [3]. {{ Error del sistema [2].}} Compruebe que dispone de acceso a ese directorio. + +No se ha encontrado el archivo de origen {{(.CAB)}} [2]. Compruebe que el archivo existe y que puede obtener acceso a él. + +No se puede crear el directorio '[2]'. Ya existe un archivo con este nombre. Cambie el nombre al archivo o quítelo y haga clic en Reintentar, o bien haga clic en Cancelar para salir. + +El volumen [2] no está disponible en este momento. Seleccione otro volumen. + +La ruta de acceso especificada, '[2]', no está disponible. + +No se puede escribir en la carpeta especificada, [2]. + +Se produjo un error de red al intentar leer el archivo [2]. + +Se produjo un error al intentar crear el directorio [2]. + +Se produjo un error de red al intentar crear el directorio [2]. + +Se produjo un error de red al intentar abrir el archivo .CAB de origen [2]. + +La ruta de acceso especificada es demasiado larga: [2] + +El instalador no tiene suficientes privilegios para modificar el archivo [2]. + +Una parte de la ruta de acceso a la carpeta '[2]'no es válida porque está vacía o supera la longitud permitida por el sistema. + +La ruta de acceso a la carpeta '[2]' contiene palabras no válidas para rutas de acceso a carpetas. + +La ruta de acceso a la carpeta '[2]' contiene un carácter no válido. + +'[2]' no es un nombre corto de archivo válido. + +Error al obtener la seguridad del archivo: [3]. GetLastError: [2]. + +Unidad no válida: [2] + +Error al aplicar la revisión al archivo [2]. Probablemente el archivo ya se ha actualizado por otros medios y esta revisión no puede modificarlo. Para obtener más información, consulte al proveedor de la revisión. {{Error del sistema: [3]}} + +No se puede instalar un archivo que se se necesita porque el archivo .CAB [2] no está digitalmente firmado. Esto puede indicar que el archivo .CAB esté dañado. + +No se puede instalar un archivo que se necesita porque el archivo .CAB [2] tiene una firma digital no válida. Esto puede indicar que el archivo .CAB está dañado.{{ Error [3] devuelto por WinVerifyTrust.}} + +No se puede copiar el archivo [2] correctamente: error CRC. + +No se puede mover el archivo [2] correctamente: error CRC. + +No se puede revisar el archivo [2] correctamente: error CRC. + +No se puede instalar el archivo "[2]" porque este archivo no se puede encontrar en el .CAB "[3]". Esto puede indicar un error de red, un error al leer desde el CD-ROM, o un problema con este paquete. + +El archivo .CAB "[2]" que se necesita para esta instalación está dañado o no se puede usar. Esto puede indicar un error de red, un error al leer desde el CD-ROM, o un problema con este paquete. + +Error al crear un archivo temporal que se necesita para completar esta instalación.{{ Carpeta: [3]. Código de error del sistema: [2]}} + +No se puede crear la clave [2]. {{ Error del sistema [3].}} Compruebe que dispone de suficientes derechos de acceso a esa clave o póngase en contacto con el personal de soporte técnico. + +No se puede abrir la clave [2]. {{ Error del sistema [3].}} Compruebe que dispone de suficientes derechos de acceso a esa clave o póngase en contacto con el personal de soporte técnico. + +No se puede eliminar el valor [2] de la clave [3]. {{Error del sistema [4].}} Compruebe que dispone de suficientes derechos de acceso a esa clave o póngase en contacto con el personal de soporte técnico. + +No se puede eliminar la clave [2]. {{Error del sistema [3].}} Compruebe que dispone de suficientes derechos de acceso a esa clave o póngase en contacto con el personal de soporte técnico. + +No se puede leer el valor [2] de la clave [3]. {{Error del sistema [4].}} Compruebe que dispone de suficientes derechos de acceso a esa clave o póngase en contacto con el personal de soporte técnico. + +No se puede escribir el valor [2] en la clave [3]. {{Error del sistema [4].}} Compruebe que dispone de suficientes derechos de acceso a esa clave o póngase en contacto con el personal de soporte técnico. + +No se pueden obtener los nombres de los valores para la clave [2]. {{Error del sistema [3].}} Compruebe que dispone de suficientes derechos de acceso a esa clave o póngase en contacto con el personal de soporte técnico. + +No se pueden obtener los nombres de las subclaves de la clave [2]. {{Error del sistema [3].}} Compruebe que dispone de suficientes derechos de acceso a esa clave o póngase en contacto con el personal de soporte técnico. + +No se puede leer la información de seguridad de la clave [2]. {{Error del sistema [3].}} Compruebe que dispone de suficientes derechos de acceso a esa clave o póngase en contacto con el personal de soporte técnico. + +No se puede aumentar el espacio disponible en el registro de configuraciones. Para instalar esta aplicación se requieren [2] KB de espacio en el registro. + +Ya hay otra instalación en curso. Termine esa instalación antes de continuar con ésta. + +Error al obtener acceso a los datos protegidos. Asegúrese de que Windows Installer está configurado correctamente y vuelva a intentar realizar la instalación. + +El usuario '[2]' ya inició previamente una instalación del producto '[3]', pero deberá ejecutar la instalación de nuevo para poder utilizar el producto. La instalación actual de este producto continuará. + +El usuario '[2]' ya inició previamente una instalación del producto '[3]', pero deberá ejecutar la instalación de nuevo para poder utilizarlo. + +Espacio en disco insuficiente -- Volumen: '[2]'; espacio requerido: [3] KB; espacio disponible: [4] KB. Libere espacio en disco e inténtelo de nuevo. + +¿Está seguro de que desea cancelar la operación? + +El archivo [2][3] está en uso{ por el proceso siguiente: Nombre: [4], Id.: [5], Título de ventana: '[6]'}. Cierre esa aplicación e inténtelo de nuevo. + +El producto '[2]' ya está instalado, lo que impide que se instale este producto porque ambos productos son incompatibles entre sí. + +No hay suficiente espacio libre disponible en el volumen "[2]" para continuar la instalación con la recuperación habilitada. Se requieren [3] KB, pero sólo están disponibles [4] KB. Haga clic en Ignorar para continuar la instalación sin guardar la información de recuperación, haga clic en Reintentar para comprobar de nuevo si hay espacio disponible, o haga clic en Cancelar para salir de la instalación. + +No se puede obtener acceso a la ubicación de red [2]. + +Deben cerrarse las aplicaciones siguientes antes de continuar con la instalación: + +No se encuentra ningún producto compatible instalado en el equipo para instalar este producto. + +Error cuando se aplicaba la configuración de seguridad. [2] no es un usuario o grupo válidos. Esto podría ser un problema con el paquete, o un problema al conectar con el controlador de dominio en la red. Compruebe su conexión de red y haga clic en Reintentar o Cancelar para finalizar la instalación. {{No se puede encontrar el SID de usuario, error del sistema [3]}} + +La clave [2] no es válida. Compruebe que escribió la clave correcta. + +El instalador debe reiniciar el sistema para que pueda continuar la configuración de [2]. Haga clic en Sí para reiniciar el sistema ahora o elija No si tiene previsto reiniciarlo manualmente más tarde. + +Debe reiniciar el sistema para que los cambios de configuración efectuados en [2] surtan efecto. Haga clic en Sí para reiniciar el sistema ahora o elija No si tiene previsto reiniciarlo manualmente más tarde. + +Actualmente hay una instalación de [2] en suspenso. Debe deshacer los cambios realizados por dicha instalación para poder continuar. ¿Desea deshacer esos cambios? + +Ya hay en curso una instalación anterior de este producto. Debe deshacer los cambios realizados por dicha instalación para poder continuar. ¿Desea deshacer esos cambios? + +No se encuentra ningún paquete de instalación para el producto [2]. Vuelva a intentar la instalación utilizando una copia válida del paquete de instalación '[3]'. + +La instalación finalizó satisfactoriamente. + +Error en la instalación. + +Producto: [2] -- [3] + +Puede restaurar el equipo a su estado anterior o continuar con la instalación más tarde. ¿Desea restaurar el equipo? + +Se produjo un error mientras se escribía la información de instalación en el disco. Compruebe que hay suficiente espacio en disco disponible y haga clic en Reintentar, o bien haga clic en Cancelar para terminar la instalación. + +No se encuentran uno o varios archivos necesarios para restaurar el equipo a su estado anterior. La restauración no podrá realizarse. + +[2] no puede instalar los productos requeridos. Póngase en contacto con su grupo de soporte técnico. {{Error del sistema: [3].}} + +No se puede quitar la versión anterior de [2]. Póngase en contacto con su grupo de soporte técnico. {{Error del sistema: [3].}} + +Instalado [2] + +Configurado [2] + +Quitado [2] + +La directiva de firma digital ha rechazado el archivo [2]. + +No se puede tener acceso al servicio Windows Installer. Esto puede ocurrir si está ejecutando Windows en Modo a prueba de errores, o si Windows Installer no está correctamente instalado. Póngase en contacto con el personal de soporte técnico para obtener asistencia. + +Hay un problema con este paquete de Windows Installer. Hay una secuencia de comandos que se necesita para que esta instalación se complete y que no se puede ejecutar. Póngase en contacto con el personal de soporte técnico o el proveedor del paquete. {{Acción personalizada [2] error de secuencia de comandos [3], [4]: [5] Línea [6], Columna [7], [8] }} + +Hay un problema con este paquete de Windows Installer. Hay un programa que se necesita para que esta instalación se complete y que no se puede ejecutar. Póngase en contacto con el personal de soporte técnico o el proveedor del paquete. {{Acción [2], ubicación: [3], comando: [4] }} + +Hay un problema con este paquete de Windows Installer. Hay un programa que se ejecuta como parte de de la instalación que no ha finalizado como se esperaba. Póngase en contacto con el personal de soporte técnico o el proveedor del paquete. {{Acción [2], ubicación: [3], comando: [4] }} + +Hay un problema con este paquete de Windows Installer. Hay una DLL que se requiere para completar esta instalación que no se puede ejecutar. Póngase en contacto con el personal de soporte técnico o el proveedor del paquete. {{Acción [2], entrada: [3], biblioteca: [4] }} + +La eliminación se ha completado satisfactoriamente. + +Error en la eliminación. + +El anuncio se ha completado satisfactoriamente. + +Error en el anuncio. + +La configuración se ha completado satisfactoriamente. + +Error en la configuración. + +Debe ser un Administrador para quitar esta aplicación. Para quitarla, puede iniciar la sesión como un Administrador, o póngase en contacto con el grupo de soporte técnico para obtener asistencia. + +La ruta de acceso [2] no es válida. Especifique una ruta de acceso válida. + +Memoria insuficiente. Cierre otras aplicaciones antes de intentarlo de nuevo. + +No hay ningún disco en la unidad [2]. Inserte uno y haga clic en Reintentar, o bien haga clic en Cancelar para volver al volumen previamente seleccionado. + +No hay ningún disco en la unidad [2]. Inserte uno y haga clic en Reintentar, o bien haga clic en Cancelar para volver al cuadro de diálogo de examinar y seleccionar un volumen distinto. + +La carpeta [2] no existe. Escriba una ruta de acceso a una carpeta existente. + +No dispone de privilegios para leer esta carpeta. + +No se puede determinar una carpeta de destino válida para la instalación. + +Error al intentar leer la base de datos de instalación de origen: [2]. + +Programando la operación de reinicio: cambiando el nombre del archivo [2] a [3]. Para completar la operación se debe reiniciar el equipo. + +Programando la operación de reinicio: eliminando el archivo [2]. Para completar la operación se debe reiniciar el equipo. + +Error al registrar el módulo [2]. HRESULT [3]. Póngase en contacto con el personal de soporte técnico. + +Error al eliminar el módulo [2] del registro. HRESULT [3]. Póngase en contacto con el personal de soporte técnico. + +Fallo al almacenar el paquete [2] en la memoria caché. Error: [3]. Póngase en contacto con el personal de soporte técnico. + +No se puede registrar la fuente [2]. Compruebe que dispone de suficientes permisos para instalar fuentes y que el sistema admite esta fuente. + +No se puede eliminar del registro la fuente [2]. Compruebe que dispone de suficientes permisos para quitar fuentes. + +No se puede crear el acceso directo [2]. Compruebe que la carpeta de destino existe y que puede obtener acceso a ella. + +No se puede crear el acceso directo [2]. Compruebe que el archivo de acceso directo existe y que puede obtener acceso a él. + +No se puede registrar la biblioteca de tipos para el archivo [2]. Póngase en contacto con el personal de soporte técnico. + +No se puede quitar del registro la biblioteca de tipos del archivo [2]. Póngase en contacto con el personal de soporte técnico. + +No se puede actualizar el archivo .ini [2][3]. Compruebe que el archivo existe y que puede obtener acceso a él. + +No se puede programar el archivo [2] para que reemplace a [3] cuando se reinicie el sistema. Compruebe que dispone de permisos de escritura para el archivo [3]. + +Error al quitar el administrador de controladores ODBC; error de ODBC [2]: [3]. Póngase en contacto con el personal de soporte técnico. + +Error al instalar el administrador de controladores ODBC; error de ODBC [2]: [3]. Póngase en contacto con el personal de soporte técnico. + +Error al quitar el controlador ODBC [4]; error de ODBC [2]: [3]. Compruebe que dispone de suficientes privilegios para quitar controladores ODBC. + +Error al instalar el controlador ODBC [4]; error de ODBC [2]: [3]. Compruebe que el archivo [4] existe y que puede obtener acceso a él. + +Error al configurar el origen de datos de ODBC [4]; error de ODBC [2]: [3]. Compruebe que el archivo [4] y que puede obtener acceso a él. + +Fallo al iniciar el servicio '[2]' ([3]). Compruebe que dispone de suficientes privilegios para iniciar servicios del sistema. + +No se puede detener el servicio '[2]' ([3]). Compruebe que dispone de suficientes privilegios para detener servicios del sistema. + +No se puede eliminar el servicio '[2]' ([3]). Compruebe que dispone de suficientes privilegios para quitar servicios del sistema. + +No se puede instalar el servicio '[2]' ([3]). Compruebe que dispone de suficientes privilegios para instalar servicios del sistema. + +No se puede actualizar la variable de entorno '[2]'. Compruebe que dispone de suficientes privilegios para modificar variables de entorno. + +No tiene suficientes privilegios para completar esta instalación para todos los usuarios del equipo. Inicie la sesión como administrador y vuelva a realizar la instalación. + +No se puede establecer la seguridad para el archivo '[3]'. Error: [2]. Compruebe que dispone de suficientes privilegios para modificar los permisos de seguridad para este archivo. + +Los Servicios de componente (COM+ 1.0) no están instalados en este sistema. Para realizar esta instalación, es necesario que los Servicios de componente estén instalados. Encontrará los Servicios de componente en Windows 2000. + +Error al registrar la aplicación COM+. Póngase en contacto con el personal de soporte para obtener más información. + +Error al quitar la aplicación COM+ del registro. Póngase en contacto con el personal de soporte para obtener más información. + +No se puede cambiar la descripción del servicio '[2]' ([3]). + +El servicio Windows Installer no pudo actualizar el archivo del sistema [2] porque está protegido por Windows. Es posible que tenga que actualizar el sistema operativo para que este programa funcione correctamente. {{Versión del paquete: [3], Versión protegida del SO: [4]}} + +El servicio Windows Installer no pudo actualizar el archivo protegido de Windows [2]. {{Versión del paquete: [3], Versión protegida del SO: [4], Error SFP: [5]}} + +El servicio de Windows Installer no puede actualizar uno o más archivos protegidos de Windows. {{SFP Error: [2]. Lista de archivos protegidos:\r\n[3]}} + +Las instalaciones del usuario están deshabilitadas a través de la directiva en el equipo. + +Error durante la instalación del componente de asamblea [2]. HRESULT: [3]. {{interfaz de asamblea: [4], función: [5], nombre de asamblea: [6]}} + + diff --git a/src/WINNT/install/wix/lang/ja_JP/ActionText.wxi b/src/WINNT/install/wix/lang/ja_JP/ActionText.wxi new file mode 100644 index 000000000..893302e4a --- /dev/null +++ b/src/WINNT/install/wix/lang/ja_JP/ActionText.wxi @@ -0,0 +1,143 @@ + + +Œã‚ÅŽg—p‚·‚邽‚߂ɃAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðÝ’肵‚Ä‚¢‚Ü‚· + +ƒŒƒWƒXƒgƒŠ—̈æ‚ðŠ„‚è“–‚ĂĂ¢‚Ü‚· + +ƒCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ä‚¢‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðŒŸõ‚µ‚Ä‚¢‚Ü‚· + +ŽÀsƒtƒ@ƒCƒ‹‚ðƒoƒCƒ“ƒh‚µ‚Ä‚¢‚Ü‚· + +ðŒ‚ɍ‡‚¤»•i‚ðŒŸõ‚µ‚Ä‚¢‚Ü‚· + +•K—v‚ȗ̈æ‚ðŒvŽZ‚µ‚Ä‚¢‚Ü‚· + +•K—v‚ȗ̈æ‚ðŒvŽZ‚µ‚Ä‚¢‚Ü‚· + +ƒtƒHƒ‹ƒ_‚ðì¬‚µ‚Ä‚¢‚Ü‚· + +ƒVƒ‡[ƒgƒJƒbƒg‚ðì¬‚µ‚Ä‚¢‚Ü‚· + +ƒT[ƒrƒX‚ðíœ‚µ‚Ä‚¢‚Ü‚· + +d•¡‚µ‚Ä‚¢‚éƒtƒ@ƒCƒ‹‚ðì¬‚µ‚Ä‚¢‚Ü‚· + +•K—v‚ȗ̈æ‚ðŒvŽZ‚µ‚Ä‚¢‚Ü‚· + +ŠÖ˜A‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ðŒŸõ‚µ‚Ä‚¢‚Ü‚· + +‘€ì‚Ì‚½‚߂̃XƒNƒŠƒvƒg‘€ì‚ðì¬‚µ‚Ä‚¢‚Ü‚·: + +ƒlƒbƒgƒ[ƒN ƒCƒ“ƒXƒg[ƒ‹ ƒtƒ@ƒCƒ‹‚ðƒRƒs[‚µ‚Ä‚¢‚Ü‚· + +V‚µ‚¢ƒtƒ@ƒCƒ‹‚ðƒRƒs[‚µ‚Ä‚¢‚Ü‚· + +ODBC ƒRƒ“ƒ|[ƒlƒ“ƒg‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚¢‚Ü‚· + +V‚µ‚¢ƒT[ƒrƒX‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚¢‚Ü‚· + +ƒVƒXƒeƒ€ ƒJƒ^ƒƒO‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚¢‚Ü‚· + +ƒCƒ“ƒXƒg[ƒ‹‚ðŒŸØ‚µ‚Ä‚¢‚Ü‚· + +‹N“®ó‘Ô‚ðŒŸØ‚µ‚Ä‚¢‚Ü‚· + +ŠÖ˜A‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚©‚ç‹@”\‚̏ó‘Ô‚ðˆÚs‚µ‚Ä‚¢‚Ü‚· + +ƒtƒ@ƒCƒ‹‚ðˆÚ“®‚µ‚Ä‚¢‚Ü‚· + +ƒAƒZƒ“ƒuƒŠî•ñ‚ðŒöŠJ‚µ‚Ä‚¢‚Ü‚· + +ƒAƒZƒ“ƒuƒŠî•ñ‚ð”ñŒöŠJ‚É‚µ‚Ä‚¢‚Ü‚· + +ƒtƒ@ƒCƒ‹‚ðC³‚µ‚Ä‚¢‚Ü‚· + +ƒRƒ“ƒ|[ƒlƒ“ƒg‚Ì“o˜^‚ðXV‚µ‚Ä‚¢‚Ü‚· + +ðŒ‚ɍ‡‚¤ƒRƒ“ƒ|[ƒlƒ“ƒg‚ðŒöŠJ‚µ‚Ä‚¢‚Ü‚· + +»•i‹@”\‚ðŒöŠJ‚µ‚Ä‚¢‚Ü‚· + +»•iî•ñ‚ðŒöŠJ‚µ‚Ä‚¢‚Ü‚· + +ƒNƒ‰ƒX ƒT[ƒo[‚ð“o˜^‚µ‚Ä‚¢‚Ü‚· + +COM+ ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ƃRƒ“ƒ|[ƒlƒ“ƒg‚ð“o˜^‚µ‚Ä‚¢‚Ü‚· + +ƒGƒNƒXƒeƒ“ƒVƒ‡ƒ“ ƒT[ƒo[‚ð“o˜^‚µ‚Ä‚¢‚Ü‚· + +ƒtƒHƒ“ƒg‚ð“o˜^‚µ‚Ä‚¢‚Ü‚· + +MIME î•ñ‚ð“o˜^‚µ‚Ä‚¢‚Ü‚· + +»•i‚ð“o˜^‚µ‚Ä‚¢‚Ü‚· + +ƒvƒƒOƒ‰ƒ€Ž¯•ÊŽq‚ð“o˜^‚µ‚Ä‚¢‚Ü‚· + +Ží—ނ̃‰ƒCƒuƒ‰ƒŠ‚ð“o˜^‚µ‚Ä‚¢‚Ü‚· + +ƒ†[ƒU[‚ð“o˜^‚µ‚Ä‚¢‚Ü‚· + +d•¡‚µ‚Ä‚¢‚éƒtƒ@ƒCƒ‹‚ðíœ‚µ‚Ä‚¢‚Ü‚· + +ŠÂ‹«ƒXƒgƒŠƒ“ƒO‚ðXV‚µ‚Ä‚¢‚Ü‚· + +ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðíœ‚µ‚Ä‚¢‚Ü‚· + +ƒtƒ@ƒCƒ‹‚ðíœ‚µ‚Ä‚¢‚Ü‚· + +ƒtƒHƒ‹ƒ_‚ðíœ‚µ‚Ä‚¢‚Ü‚· + +INI ƒtƒ@ƒCƒ‹‚̃Gƒ“ƒgƒŠ‚ðíœ‚µ‚Ä‚¢‚Ü‚· + +ODBC ƒRƒ“ƒ|[ƒlƒ“ƒg‚ðíœ‚µ‚Ä‚¢‚Ü‚· + +ƒVƒXƒeƒ€ ƒŒƒWƒXƒgƒŠ‚Ì’l‚ðíœ‚µ‚Ä‚¢‚Ü‚· + +ƒVƒ‡[ƒgƒJƒbƒg‚ðíœ‚µ‚Ä‚¢‚Ü‚· + +ðŒ‚ɍ‡‚¤»•i‚ðŒŸõ‚µ‚Ä‚¢‚Ü‚· + +‘€ì‚ðŒ³‚É–ß‚µ‚Ä‚¢‚Ü‚·: + +ƒoƒbƒNƒAƒbƒv ƒtƒ@ƒCƒ‹‚ðíœ‚µ‚Ä‚¢‚Ü‚· + +ƒ‚ƒWƒ…[ƒ‹‚ð“o˜^‚µ‚Ä‚¢‚Ü‚· + +ƒ‚ƒWƒ…[ƒ‹‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚· + +ODBC ƒfƒBƒŒƒNƒgƒŠ‚ð‰Šú‰»‚µ‚Ä‚¢‚Ü‚· + +ƒT[ƒrƒX‚ðŠJŽn‚µ‚Ä‚¢‚Ü‚· + +ƒT[ƒrƒX‚ð’âŽ~‚µ‚Ä‚¢‚Ü‚· + +ˆÚ“®‚µ‚½ƒtƒ@ƒCƒ‹‚ðíœ‚µ‚Ä‚¢‚Ü‚· + +ðŒ‚ɍ‡‚¤ƒRƒ“ƒ|[ƒlƒ“ƒg‚ð”ñŒöŠJ‚É‚µ‚Ä‚¢‚Ü‚· + +»•i‹@”\‚ð”ñŒöŠJ‚É‚µ‚Ä‚¢‚Ü‚· + +»•iî•ñ‚ð”ñŒöŠJ‚É‚µ‚Ä‚¢‚Ü‚· + +ƒNƒ‰ƒX ƒT[ƒo[‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚· + +COM+ ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ƃRƒ“ƒ|[ƒlƒ“ƒg‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚· + +ƒGƒNƒXƒeƒ“ƒVƒ‡ƒ“ ƒT[ƒo[‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚· + +ƒtƒHƒ“ƒg‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚· + +MIME î•ñ‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚· + +ƒvƒƒOƒ‰ƒ€Ž¯•ÊŽq‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚· + +Ží—ނ̃‰ƒCƒuƒ‰ƒŠ‚Ì“o˜^‚ð‰ðœ‚µ‚Ä‚¢‚Ü‚· + +ŠÂ‹«ƒXƒgƒŠƒ“ƒO‚ðXV‚µ‚Ä‚¢‚Ü‚· + +INI ƒtƒ@ƒCƒ‹‚É’l‚ð‘‚«ž‚ñ‚Å‚¢‚Ü‚· + +Œã‚ÅŽg—p‚·‚邽‚߂ɃAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðÝ’肵‚Ä‚¢‚Ü‚· + + diff --git a/src/WINNT/install/wix/lang/ja_JP/Error.wxi b/src/WINNT/install/wix/lang/ja_JP/Error.wxi new file mode 100644 index 000000000..427ea6599 --- /dev/null +++ b/src/WINNT/install/wix/lang/ja_JP/Error.wxi @@ -0,0 +1,319 @@ + + +{{’v–½“I‚ȃGƒ‰[: }} + +{{ƒGƒ‰[ [1]B }} + +Œx [1]B + + + +î•ñ [1]B + +‚±‚̃pƒbƒP[ƒW‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚邯‚«‚É—\Šú‚µ‚È‚¢ƒGƒ‰[‚ªŒŸo‚³‚ê‚Ü‚µ‚½B‚±‚̃pƒbƒP[ƒW‚Í–â‘肪‚ ‚é‰Â”\«‚ª‚ ‚è‚Ü‚·BƒGƒ‰[ ƒR[ƒh‚Í [1] ‚Å‚·B {{ˆø”: [2], [3], [4]}} + + + +{{ƒfƒBƒXƒN‚ª‚¢‚Á‚Ï‚¢‚Å‚·: }} + +‘€ì [Time]: [1]B [2] + +[ProductName] + +{[2]}{, [3]}{, [4]} + +ƒƒbƒZ[ƒW‚ÌŽí—Þ: [1], ˆø”: [2] + +=== ƒƒOŠJŽn: [Date] [Time] === + +=== ƒƒOI—¹: [Date] [Time] === + +‘€ìŠJŽn [Time]: [1]B + +‘€ìI—¹ [Time]: [1]B –ß‚è’l [2]B + +Žc‚莞ŠÔ: {[1] •ª }{[2] •b} + +ƒƒ‚ƒŠ•s‘«‚Å‚·B‚Ù‚©‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ð•‚¶‚Ä‚©‚çAÄŽŽs‚µ‚Ä‚­‚¾‚³‚¢B + +ƒCƒ“ƒXƒg[ƒ‹ ƒvƒƒOƒ‰ƒ€‚©‚牞“š‚ª‚ ‚è‚Ü‚¹‚ñB + +ƒCƒ“ƒXƒg[ƒ‹ ƒvƒƒOƒ‰ƒ€‚ÍŠ®—¹‘O‚É’†’f‚³‚ê‚Ü‚µ‚½B + +Windows ‚É [ProductName] ‚ðÝ’肵‚Ä‚¢‚Ü‚·B‚µ‚΂炭‚¨‘Ò‚¿‚­‚¾‚³‚¢B + +•K—v‚ȏî•ñ‚ðW‚߂Ă¢‚Ü‚·... + +‚±‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚̌¢ƒo[ƒWƒ‡ƒ“‚ðíœ‚µ‚Ä‚¢‚Ü‚·... + +‚±‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚̌¢ƒo[ƒWƒ‡ƒ“‚ðíœ‚·‚鏀”õ‚ð‚µ‚Ä‚¢‚Ü‚·... + +{[ProductName] }‚̃ZƒbƒgƒAƒbƒv‚𐳂µ‚­Š®—¹‚µ‚Ü‚µ‚½B + +{[ProductName] }‚̃ZƒbƒgƒAƒbƒv‚ÉŽ¸”s‚µ‚Ü‚µ‚½B + +ƒtƒ@ƒCƒ‹‚ð“ǂݎæ‚邯‚«‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½: [2]B{{ ƒVƒXƒeƒ€ ƒGƒ‰[ [3]B}} ƒtƒ@ƒCƒ‹‚ª‘¶Ý‚µAƒAƒNƒZƒX‚Å‚«‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒtƒ@ƒCƒ‹ '[2]' ‚ðì¬‚Å‚«‚Ü‚¹‚ñB‚±‚Ì–¼‘O‚̃fƒBƒŒƒNƒgƒŠ‚ªŠù‚É‚ ‚è‚Ü‚·BƒCƒ“ƒXƒg[ƒ‹‚ðŽæ‚èÁ‚µA•ʂ̏ꏊ‚ɃCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚­‚¾‚³‚¢B + +ƒfƒBƒXƒN [2] ‚ð‘}“ü‚µ‚Ä‚­‚¾‚³‚¢B + +ƒCƒ“ƒXƒg[ƒ‹ ƒvƒƒOƒ‰ƒ€‚ɂ̓fƒBƒŒƒNƒgƒŠ [2] ‚ɃAƒNƒZƒX‚·‚邽‚߂̓ÁŒ ‚ª•s‘«‚µ‚Ä‚¢‚Ü‚·BƒCƒ“ƒXƒg[ƒ‹‚𑱍s‚Å‚«‚Ü‚¹‚ñBAdministrator ‚Æ‚µ‚ăƒOƒIƒ“‚·‚é‚©A‚Ü‚½‚̓VƒXƒeƒ€ŠÇ—ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒtƒ@ƒCƒ‹‚ɏ‘‚«ž‚Þ‚Æ‚«‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½: [2]B‚±‚̃fƒBƒŒƒNƒgƒŠ‚ɃAƒNƒZƒX‚Å‚«‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒtƒ@ƒCƒ‹ [2] ‚̓ǂݍž‚݂Ɏ¸”s‚µ‚Ü‚µ‚½B{{ ƒVƒXƒeƒ€ ƒGƒ‰[ [3]B}} ƒtƒ@ƒCƒ‹‚ª‘¶Ý‚µƒAƒNƒZƒXŒ ‚ª‚ ‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒtƒ@ƒCƒ‹ '[2]' ‚͕ʂ̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ÅŽg—p‚³‚ê‚Ä‚¢‚Ü‚·BŠJ‚¢‚Ä‚¢‚éƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ð‚·‚×‚ÄI—¹‚µ‚Ä‚©‚çA[\[]ÄŽŽs[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B + +ƒtƒ@ƒCƒ‹ [2] ‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚邽‚߂̃fƒBƒXƒN—̈悪•s‘«‚µ‚Ä‚¢‚Ü‚·BƒfƒBƒXƒN—̈æ‚ð‰ð•ú‚µ‚Ä‚©‚çA[\[]ÄŽŽs[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢BI—¹‚·‚éê‡‚Í [\[]ƒLƒƒƒ“ƒZƒ‹[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ü‚·B + +ƒ\[ƒX ƒtƒ@ƒCƒ‹ [2] ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñBƒtƒ@ƒCƒ‹‚ª‘¶Ý‚µAƒAƒNƒZƒX‚Å‚«‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒtƒ@ƒCƒ‹‚ð“ǂݎæ‚邯‚«‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½: [3]B{{ ƒVƒXƒeƒ€ ƒGƒ‰[ [2]B}} ƒtƒ@ƒCƒ‹‚ª‘¶Ý‚µAƒAƒNƒZƒX‚Å‚«‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒtƒ@ƒCƒ‹‚ɏ‘‚«ž‚Þ‚Æ‚«‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½: [3]B{{ ƒVƒXƒeƒ€ ƒGƒ‰[[2]B}} ‚±‚̃fƒBƒŒƒNƒgƒŠ‚ɃAƒNƒZƒX‚Å‚«‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒ\[ƒX ƒtƒ@ƒCƒ‹‚ªŒ©‚‚©‚è‚Ü‚¹‚ñB{{(cabinet)}}: [2]Bƒtƒ@ƒCƒ‹‚ª‘¶Ý‚µAƒAƒNƒZƒX‚Å‚«‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒfƒBƒŒƒNƒgƒŠ '[2]' ‚ðì¬‚Å‚«‚Ü‚¹‚ñB‚±‚Ì–¼‘O‚̃tƒ@ƒCƒ‹‚ªŠù‚É‚ ‚è‚Ü‚·Bƒtƒ@ƒCƒ‹‚Ì–¼‘O‚ð•ύX‚·‚é‚©Aƒtƒ@ƒCƒ‹‚ðíœ‚µ‚Ä‚©‚çA[\[]ÄŽŽs[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B‚Ü‚½‚́A[\[]ƒLƒƒƒ“ƒZƒ‹[\]] ‚ðƒNƒŠƒbƒN‚µ‚āAI—¹‚µ‚Ä‚­‚¾‚³‚¢B + +ƒ{ƒŠƒ…[ƒ€ [2] ‚ÍŒ»ÝŽg—p‚Å‚«‚Ü‚¹‚ñB•ʂ̃{ƒŠƒ…[ƒ€‚ð‘I‘ð‚µ‚Ä‚­‚¾‚³‚¢B + +Žw’肳‚ꂽƒpƒX '[2]' ‚ÍŽg—p‚Å‚«‚Ü‚¹‚ñB + +Žw’肳‚ꂽƒtƒHƒ‹ƒ_‚ɏ‘‚«ž‚߂܂¹‚ñ: [2]B + +ŽŸ‚̃tƒ@ƒCƒ‹‚ð“ǂݎæ‚è’†‚ɁAƒlƒbƒgƒ[ƒN ƒGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½: [2] + +ƒfƒBƒŒƒNƒgƒŠ [2] ‚ðì¬’†‚ɁAƒGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B + +ƒfƒBƒŒƒNƒgƒŠ [2] ‚ðì¬’†‚ɁAƒlƒbƒgƒ[ƒN ƒGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B + +ƒ\[ƒX ƒtƒ@ƒCƒ‹ ƒLƒƒƒrƒlƒbƒg‚ðŠJ‚¢‚Ä‚¢‚é“r’†‚ŁAƒlƒbƒgƒ[ƒN ƒGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½: [2]B + +Žw’肳‚ꂽƒpƒX‚Í’·‚·‚¬‚Ü‚·: [2] + +ƒCƒ“ƒXƒg[ƒ‹ ƒvƒƒOƒ‰ƒ€‚ɂ́Aƒtƒ@ƒCƒ‹‚ðC³‚·‚é“ÁŒ ‚ª‚ ‚è‚Ü‚¹‚ñ: [2]B + +ƒtƒHƒ‹ƒ_ ƒpƒX '[2]' ‚̈ꕔ‚ª•s³‚Å‚·BƒpƒX‚ª‹ó‚Å‚ ‚é‚©‚Ü‚½‚Í’·‚·‚¬‚é‚̂ŁA‚±‚̃VƒXƒeƒ€‚ł͎w’è‚Å‚«‚Ü‚¹‚ñB + +ƒtƒHƒ‹ƒ_ ƒpƒX '[2]' ‚ÉŽg—p‚³‚ê‚Ä‚¢‚é’PŒê‚Ì’†‚ɁAƒtƒHƒ‹ƒ_ ƒpƒX‚ł͎g—p‚Å‚«‚È‚¢‚à‚Ì‚ªŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·B + +ƒtƒHƒ‹ƒ_ ƒpƒX '[2]' ‚ÉŽg—p‚Å‚«‚È‚¢•¶Žš‚ªŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·B + +[2]' ‚̓Vƒ‡[ƒg ƒtƒ@ƒCƒ‹–¼‚Æ‚µ‚Ă͐³‚µ‚­‚ ‚è‚Ü‚¹‚ñB + +ƒtƒ@ƒCƒ‹ ƒZƒLƒ…ƒŠƒeƒB‚ðŽæ“¾‚·‚邯‚«‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½: [3] GetLastError: [2] + +ƒhƒ‰ƒCƒu‚ª³‚µ‚­‚ ‚è‚Ü‚¹‚ñ: [2] + +ƒtƒ@ƒCƒ‹ [2] ‚Ƀpƒbƒ`‚ð“K—p‚·‚鎞‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B‚¨‚»‚ç‚­•ʂ̕û–@‚É‚æ‚Á‚ăAƒbƒvƒf[ƒg‚³‚ꂽ‚½‚߂ł·B‚±‚̃pƒbƒ`‚ŕύX‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñBÚ×‚́A‚±‚̃pƒbƒ`‚̃xƒ“ƒ_[‚É‚¨–â‚¢‡‚킹‚­‚¾‚³‚¢B {{ƒVƒXƒeƒ€ ƒGƒ‰[ : [3]}} + +ƒLƒƒƒrƒlƒbƒg ƒtƒ@ƒCƒ‹ [2] ‚ɃfƒWƒ^ƒ‹–¼‚ª•t‚¢‚Ä‚¢‚È‚¢‚½‚߁A•K—v‚ȃtƒ@ƒCƒ‹‚ðƒCƒ“ƒXƒg[ƒ‹‚Å‚«‚Ü‚¹‚ñBƒLƒƒƒrƒlƒbƒg ƒtƒ@ƒCƒ‹‚ª‰ó‚ê‚Ä‚¢‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B + +ƒLƒƒƒrƒlƒbƒg ƒtƒ@ƒCƒ‹ [2] ‚É–³Œø‚ȃfƒWƒ^ƒ‹–¼‚ª•t‚¢‚Ä‚¢‚邽‚߁A•K—v‚ȃtƒ@ƒCƒ‹‚ðƒCƒ“ƒXƒg[ƒ‹‚Å‚«‚Ü‚¹‚ñBƒLƒƒƒrƒlƒbƒg ƒtƒ@ƒCƒ‹‚ª‰ó‚ê‚Ä‚¢‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B{{ ƒGƒ‰[ [3] ‚ª WinVerifyTrust ‚É‚æ‚Á‚ĕԂ³‚ê‚Ü‚µ‚½B}} + +[2] ƒtƒ@ƒCƒ‹‚𐳂µ‚­ƒRƒs[‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: CRC ƒGƒ‰[B + +[2] ƒtƒ@ƒCƒ‹‚𐳂µ‚­ˆÚ“®‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: CRC ƒGƒ‰[B + +C³ƒvƒƒOƒ‰ƒ€‚ðƒtƒ@ƒCƒ‹ [2] ‚ɐ³‚µ‚­“K—p‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: CRC ƒGƒ‰[B + +ƒtƒ@ƒCƒ‹ '[2]' ‚̓Lƒƒƒrƒlƒbƒg ƒtƒ@ƒCƒ‹ '[3]' ‚ÅŒ©‚‚©‚ç‚È‚¢‚½‚߁AƒCƒ“ƒXƒg[ƒ‹‚Å‚«‚Ü‚¹‚ñBƒlƒbƒgƒ[ƒN ƒGƒ‰[‚Ü‚½‚Í CD-ROM ‚©‚ç‚̓ǂݎæ‚èƒGƒ‰[‚ª”­¶‚µ‚½‚©A‚±‚̃pƒbƒP[ƒW‚É–â‘肪‚ ‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B + +‚±‚̃Cƒ“ƒXƒg[ƒ‹‚É•K—v‚ȃLƒƒƒrƒlƒbƒg ƒtƒ@ƒCƒ‹ '[2]' ‚͉ó‚ê‚Ä‚¢‚邽‚ߎg—p‚Å‚«‚Ü‚¹‚ñBƒlƒbƒgƒ[ƒN ƒGƒ‰[‚Ü‚½‚Í CD-ROM ‚©‚ç‚̓ǂݎæ‚èƒGƒ‰[‚ª”­¶‚µ‚½‚©A‚±‚̃pƒbƒP[ƒW‚É–â‘肪‚ ‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B + +‚±‚̃Cƒ“ƒXƒg[ƒ‹‚ðŠ®—¹‚·‚邽‚߂ɕK—v‚Ȉꎞƒtƒ@ƒCƒ‹‚ðì¬‚·‚邯‚«‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B{{ ƒtƒHƒ‹ƒ_: [3]. ƒVƒXƒeƒ€ ƒGƒ‰[ ƒR[ƒh: [2]}} + +ƒL[‚ðì¬‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: [2]B{{ ƒVƒXƒeƒ€ ƒGƒ‰[ [3]B}} ‚»‚̃L[‚ւ̏\•ª‚ȃAƒNƒZƒX‚ª‚ ‚邱‚Æ‚ðŠm”F‚·‚é‚©A‚Ü‚½‚̓Tƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒL[‚ðŠJ‚­‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: [2]B{{ ƒVƒXƒeƒ€ ƒGƒ‰[ [3]B}} ‚»‚̃L[‚ւ̏\•ª‚ȃAƒNƒZƒX‚ª‚ ‚邱‚Æ‚ðŠm”F‚·‚é‚©A‚Ü‚½‚̓Tƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒL[ [3] ‚©‚ç’l [2] ‚ðíœ‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B{{ ƒVƒXƒeƒ€ ƒGƒ‰[ [4]B}} ‚»‚̃L[‚ւ̏\•ª‚ȃAƒNƒZƒX‚ª‚ ‚邱‚Æ‚ðŠm”F‚·‚é‚©A‚Ü‚½‚̓Tƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒL[ [2] ‚ðíœ‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B{{ ƒVƒXƒeƒ€ ƒGƒ‰[ [3]B}} ‚»‚̃L[‚ւ̏\•ª‚ȃAƒNƒZƒX‚ª‚ ‚邱‚Æ‚ðŠm”F‚·‚é‚©A‚Ü‚½‚̓Tƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒL[ [3] ‚©‚ç’l [2] ‚ð“ǂݎæ‚ê‚Ü‚¹‚ñ‚Å‚µ‚½B{{ ƒVƒXƒeƒ€ ƒGƒ‰[ [4]B}} ‚»‚̃L[‚ւ̏\•ª‚ȃAƒNƒZƒX‚ª‚ ‚邱‚Æ‚ðŠm”F‚·‚é‚©A‚Ü‚½‚̓Tƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +’l [2] ‚ðƒL[ [3] ‚ɏ‘‚«ž‚߂܂¹‚ñB{{ ƒVƒXƒeƒ€ ƒGƒ‰[ [4]B}} ‚»‚̃L[‚ւ̏\•ª‚ȃAƒNƒZƒX‚ª‚ ‚邱‚Æ‚ðŠm”F‚·‚é‚©A‚Ü‚½‚̓Tƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒL[ [2] ‚ɑ΂·‚é’l‚Ì–¼‘O‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B{{ ƒVƒXƒeƒ€ ƒGƒ‰[ [3]B}} ‚»‚̃L[‚ւ̏\•ª‚ȃAƒNƒZƒX‚ª‚ ‚邱‚Æ‚ðŠm”F‚·‚é‚©A‚Ü‚½‚̓Tƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒL[ [2] ‚ɑ΂·‚éƒTƒu ƒL[–¼‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B{{ ƒVƒXƒeƒ€ ƒGƒ‰[ [3]B}} ‚»‚̃L[‚ւ̏\•ª‚ȃAƒNƒZƒX‚ª‚ ‚邱‚Æ‚ðŠm”F‚·‚é‚©A‚Ü‚½‚̓Tƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒL[ [2] ‚ɑ΂·‚éƒZƒLƒ…ƒŠƒeƒBî•ñ‚ð“ǂݎæ‚ê‚Ü‚¹‚ñ‚Å‚µ‚½B{{ ƒVƒXƒeƒ€ ƒGƒ‰[ [3]B}} ‚»‚̃L[‚ւ̏\•ª‚ȃAƒNƒZƒX‚ª‚ ‚邱‚Æ‚ðŠm”F‚·‚é‚©A‚Ü‚½‚̓Tƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +Žg—p‰Â”\‚ȃŒƒWƒXƒgƒŠ—̈æ‚𑝂₷‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B‚±‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚ɂ́A[2] KB ‚̃ŒƒWƒXƒgƒŠ—̈悪•K—v‚Å‚·B + +•ʂ̃Cƒ“ƒXƒg[ƒ‹‚ªŒ»Ýs‚í‚ê‚Ä‚¢‚Ü‚·BV‚½‚ɃCƒ“ƒXƒg[ƒ‹‚ðs‚¤‚ɂ́AŠù‚ÉŽÀs’†‚̃Cƒ“ƒXƒg[ƒ‹‚ðŠ®—¹‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB + +•ی삳‚ê‚Ä‚¢‚éƒf[ƒ^‚ւ̃AƒNƒZƒX‚ŃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½BWindows ƒCƒ“ƒXƒg[ƒ‰‚ª³‚µ‚­Ý’肳‚ê‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚Ä‚©‚çAÄ“xƒCƒ“ƒXƒg[ƒ‹‚ðŽÀs‚µ‚Ä‚­‚¾‚³‚¢B + +ƒ†[ƒU[ '[2]' ‚É‚æ‚Á‚āAŠù‚ɐ»•i '[3]' ‚̃Cƒ“ƒXƒg[ƒ‹‚ªŠJŽn‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚̐»•i‚ðŽg‚¤‘O‚ɁA‚±‚̃†[ƒU[‚͍ēxƒCƒ“ƒXƒg[ƒ‹‚ðŽÀs‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BŒ»Ý‚̃Cƒ“ƒXƒg[ƒ‹‚Í‚±‚̂܂ܑ±s‚³‚ê‚Ü‚·B + +ƒ†[ƒU[ '[2]' ‚É‚æ‚Á‚āAŠù‚ɐ»•i '[3]' ‚̃Cƒ“ƒXƒg[ƒ‹‚ªŠJŽn‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚̐»•i‚ðŽg‚¤‘O‚ɁA‚±‚̃†[ƒU[‚͍ēxƒCƒ“ƒXƒg[ƒ‹‚ðŽÀs‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B + +ƒfƒBƒXƒN—̈悪‘«‚è‚Ü‚¹‚ñ -- ƒ{ƒŠƒ…[ƒ€: '[2]'; •K—v‚ȗ̈æ: [3] KB; —˜—p‰Â”\‚ȗ̈æ: [4] KBBƒfƒBƒXƒN—̈æ‚ð‰ð•ú‚µ‚Ä‚©‚çAÄŽŽs‚µ‚Ä‚­‚¾‚³‚¢B + +Žæ‚èÁ‚µ‚Ü‚·‚©? + +ƒtƒ@ƒCƒ‹ [2][3] ‚ÍŽg—p’†‚Å‚· {ƒvƒƒZƒX–¼: [4]AID: [5]AƒEƒBƒ“ƒhƒE ƒ^ƒCƒgƒ‹: '[6]'} ‚±‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ðI—¹‚µ‚Ä‚©‚çAÄŽŽs‚µ‚Ä‚­‚¾‚³‚¢B + +'[2]' ‚ªŠù‚ɃCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ä‚¢‚邽‚߁A‚±‚̐»•i‚ðƒCƒ“ƒXƒg[ƒ‹‚Å‚«‚Ü‚¹‚ñB‚±‚Ì 2 ‚‚̐»•i‚ɂ͌݊·«‚ª‚ ‚è‚Ü‚¹‚ñB + +ƒ{ƒŠƒ…[ƒ€ '[2]' ‚̃fƒBƒXƒN—̈悪•s‘«‚µ‚Ä‚¢‚邽‚߁A‰ñ•œ‚ð—LŒø‚É‚µ‚½‚܂܃Cƒ“ƒXƒg[ƒ‹‚𑱍s‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB[3] KB •K—v‚Å‚·‚ªA[4] KB ‚µ‚©‚ ‚è‚Ü‚¹‚ñB‰ñ•œî•ñ‚ð•Û‘¶‚¹‚¸‚ɃCƒ“ƒXƒg[ƒ‹‚𑱍s‚·‚éê‡‚Í [\[]–³Ž‹[\]]A—˜—p‰Â”\‚ȗ̈æ‚ðÄŠm”F‚·‚éê‡‚Í [\[]ÄŽŽs[\]]AƒCƒ“ƒXƒg[ƒ‹‚ðI—¹‚·‚éê‡‚Í [\[]ƒLƒƒƒ“ƒZƒ‹[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B + +ƒlƒbƒgƒ[ƒNã‚̏ꏊ [2] ‚ÖƒAƒNƒZƒX‚Å‚«‚Ü‚¹‚ñB + +ƒCƒ“ƒXƒg[ƒ‹‚𑱍s‚·‚é‚ɂ́AŽŸ‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ðI—¹‚·‚é•K—v‚ª‚ ‚è‚Ü‚·: + +‚±‚̃Rƒ“ƒsƒ…[ƒ^‚É‚±‚̐»•i‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é‚̂ɁA‘O‚à‚Á‚ăCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ä‚¢‚È‚¯‚ê‚΂Ȃç‚È‚¢»•i‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B + +ƒZƒLƒ…ƒŠƒeƒB‚̐ݒè‚ð“K—p‚·‚邯‚«‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B[2] ‚Í—LŒø‚ȃ†[ƒU[‚Ü‚½‚̓Oƒ‹[ƒv‚ł͂ ‚è‚Ü‚¹‚ñB‚±‚ê‚̓pƒbƒP[ƒW‚Ì–â‘è‚©A‚Ü‚½‚̓lƒbƒgƒ[ƒNã‚̃hƒƒCƒ“ ƒRƒ“ƒgƒ[ƒ‰‚ɐڑ±‚·‚邯‚«‚Ì–â‘è‚̉”\«‚ª‚ ‚è‚Ü‚·Bƒlƒbƒgƒ[ƒN‚̐ڑ±‚ðŠm”F‚µ [\[]ÄŽŽs[\]] ‚ðƒNƒŠƒbƒN‚·‚é‚©AƒCƒ“ƒXƒg[ƒ‹‚ðI—¹‚·‚é‚É‚Í [\[]ƒLƒƒƒ“ƒZƒ‹[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B {{ƒ†[ƒU[‚Ì SID ‚ðŒŸo‚Å‚«‚Ü‚¹‚ñ, ƒVƒXƒeƒ€ ƒGƒ‰[ [3]}} + +ƒL[ [2] ‚͐³‚µ‚­‚ ‚è‚Ü‚¹‚ñB³‚µ‚¢ƒL[‚ª“ü—Í‚³‚ê‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +[2] ‚̍\¬‚𑱍s‚·‚é‘O‚ɁAƒVƒXƒeƒ€‚ðÄ‹N“®‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚·‚®‚ɍċN“®‚·‚éê‡‚Í [\[]‚Í‚¢[\]] ‚ðAŒã‚ÅŽè“®‚ōċN“®‚·‚éê‡‚Í [\[]‚¢‚¢‚¦[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B + +[2] ‚ɍs‚Á‚½\¬‚̕ύX‚ð—LŒø‚É‚·‚é‚ɂ́AƒVƒXƒeƒ€‚ðÄ‹N“®‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚·‚®‚ɍċN“®‚·‚éê‡‚Í [\[]‚Í‚¢[\]] ‚ðAŒã‚ÅŽè“®‚ōċN“®‚·‚éê‡‚Í [\[]‚¢‚¢‚¦[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B + +[2] ‚̃Cƒ“ƒXƒg[ƒ‹‚ÍŒ»Ý’†’f‚³‚ê‚Ä‚¢‚Ü‚·B‘±s‚·‚é‚ɂ́AƒCƒ“ƒXƒg[ƒ‹‚É‚æ‚Á‚čs‚í‚ꂽ•ύX‚ðŽæ‚èÁ‚·•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚̕ύX‚ðŽæ‚èÁ‚µ‚Ü‚·‚©? + +‚±‚̐»•i‚̃Cƒ“ƒXƒg[ƒ‹‚ÍŒ»Ýis’†‚Å‚·B‘±s‚·‚é‚ɂ́AƒCƒ“ƒXƒg[ƒ‹‚É‚æ‚Á‚čs‚í‚ꂽ•ύX‚ðŽæ‚èÁ‚·•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚̕ύX‚ðŽæ‚èÁ‚µ‚Ü‚·‚©? + +»•i [2] ‚̃Cƒ“ƒXƒg[ƒ‹ ƒpƒbƒP[ƒW‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B—LŒø‚ȃRƒs[‚̃Cƒ“ƒXƒg[ƒ‹ ƒpƒbƒP[ƒW '[3]' ‚ðŽg‚Á‚Ä‚à‚¤ˆê“xƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚­‚¾‚³‚¢B + +ƒCƒ“ƒXƒg[ƒ‹‚𐳂µ‚­Š®—¹‚µ‚Ü‚µ‚½B + +ƒCƒ“ƒXƒg[ƒ‹‚ÉŽ¸”s‚µ‚Ü‚µ‚½B + +»•i: [2] -- [3] + +ƒRƒ“ƒsƒ…[ƒ^‚𒼑O‚̏ó‘Ô‚É•œŒ³‚·‚é‚©AŒã‚ŃCƒ“ƒXƒg[ƒ‹‚𑱍s‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B•œŒ³‚µ‚Ü‚·‚©? + +ƒCƒ“ƒXƒg[ƒ‹î•ñ‚ðƒfƒBƒXƒN‚ɏ‘‚«ž‚Ý’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B\•ª‚ȃfƒBƒXƒN—̈悪‚ ‚邱‚Æ‚ðŠm”F‚µ‚Ä‚©‚çA[\[]ÄŽŽs[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ä‘±s‚·‚é‚©A‚Ü‚½‚Í [\[]ƒLƒƒƒ“ƒZƒ‹[\]] ‚ðƒNƒŠƒbƒN‚µ‚ăCƒ“ƒXƒg[ƒ‹‚𒆎~‚µ‚Ä‚­‚¾‚³‚¢B + +‚±‚̃Rƒ“ƒsƒ…[ƒ^‚𒼑O‚̏ó‘Ô‚É•œŒ³‚·‚邽‚߂ɕK—v‚ȃtƒ@ƒCƒ‹‚̈ꕔ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B•œŒ³‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB + +[2] ‚Í—v‹‚³‚ꂽ»•i‚Ì 1 ‚‚ðƒCƒ“ƒXƒg[ƒ‹‚Å‚«‚Ü‚¹‚ñB‹Zp“I‚ɏڂµ‚¢•û‚É‚¨–â‚¢‡‚킹‚­‚¾‚³‚¢B {{ƒVƒXƒeƒ€ ƒGƒ‰[ : [3]}} + +[2] ‚̌¢ƒo[ƒWƒ‡ƒ“‚ðíœ‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB‹Zp“I‚ɏڂµ‚¢•û‚É‚¨–â‚¢‡‚킹‚­‚¾‚³‚¢B {{ƒVƒXƒeƒ€ ƒGƒ‰[ : [3]}} + +[2] ‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ü‚µ‚½ + +[2] ‚ð\¬‚µ‚Ü‚µ‚½ + +[2] ‚ðíœ‚µ‚Ü‚µ‚½ + +ƒtƒ@ƒCƒ‹ [2] ‚̓fƒWƒ^ƒ‹–¼ƒ|ƒŠƒV[‚É‚æ‚Á‚Ä‹‘”Û‚³‚ê‚Ü‚µ‚½B + +Windows ƒCƒ“ƒXƒg[ƒ‰ ƒT[ƒrƒX‚ɃAƒNƒZƒX‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒZ[ƒt ƒ‚[ƒh‚Å Windows ‚ðŽÀs‚µ‚Ä‚¢‚éê‡A‚Ü‚½‚Í Windows ƒCƒ“ƒXƒg[ƒ‰‚ª³‚µ‚­ƒCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ä‚¢‚È‚¢ê‡‚É”­¶‚·‚é‰Â”\«‚ª‚ ‚è‚Ü‚·BƒTƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +‚±‚Ì Windows ƒCƒ“ƒXƒg[ƒ‰ ƒpƒbƒP[ƒW‚ɂ͖â‘肪‚ ‚è‚Ü‚·B‚±‚̃Cƒ“ƒXƒg[ƒ‹‚ðŠ®—¹‚·‚é‚̂ɕK—v‚ȃXƒNƒŠƒvƒg‚ðŽÀs‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒTƒ|[ƒg’S“–ŽÒ‚Ü‚½‚̓pƒbƒP[ƒW‚̃xƒ“ƒ_‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B {{ƒJƒXƒ^ƒ€‘€ì [2] ƒXƒNƒŠƒvƒg ƒGƒ‰[ [3], [4]: [5] s [6], —ñ [7], [8] }} + +‚±‚Ì Windows ƒCƒ“ƒXƒg[ƒ‰ ƒpƒbƒP[ƒW‚ɂ͖â‘肪‚ ‚è‚Ü‚·B‚±‚̃Cƒ“ƒXƒg[ƒ‹‚ðŠ®—¹‚·‚é‚̂ɕK—v‚ȃvƒƒOƒ‰ƒ€‚ðŽÀs‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒTƒ|[ƒg’S“–ŽÒ‚Ü‚½‚̓pƒbƒP[ƒW‚̃xƒ“ƒ_‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B {{‘€ì: [2], êŠ: [3], ƒRƒ}ƒ“ƒh: [4] }} + +‚±‚Ì Windows ƒCƒ“ƒXƒg[ƒ‰ ƒpƒbƒP[ƒW‚ɂ͖â‘肪‚ ‚è‚Ü‚·BƒZƒbƒgƒAƒbƒv‚̈ꕔ‚Æ‚µ‚ÄŽÀs‚³‚ê‚éƒvƒƒOƒ‰ƒ€‚͐³‚µ‚­Š®—¹‚µ‚Ü‚¹‚ñ‚Å‚µ‚½BƒTƒ|[ƒg’S“–ŽÒ‚Ü‚½‚̓pƒbƒP[ƒW‚̃xƒ“ƒ_‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B {{‘€ì [2], êŠ: [3], ƒRƒ}ƒ“ƒh: [4] }} + +‚±‚Ì Windows ƒCƒ“ƒXƒg[ƒ‰ ƒpƒbƒP[ƒW‚ɂ͖â‘肪‚ ‚è‚Ü‚·B‚±‚̃Cƒ“ƒXƒg[ƒ‹‚ðŠ®—¹‚·‚é‚̂ɕK—v‚È DLL ‚ðŽÀs‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒTƒ|[ƒg’S“–ŽÒ‚Ü‚½‚̓pƒbƒP[ƒW‚̃xƒ“ƒ_‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B {{‘€ì [2], ƒGƒ“ƒgƒŠ: [3], ƒ‰ƒCƒuƒ‰ƒŠ: [4] }} + +íœ‚𐳂µ‚­Š®—¹‚µ‚Ü‚µ‚½B + +íœ‚ÉŽ¸”s‚µ‚Ü‚µ‚½B + +ƒAƒhƒoƒ^ƒCƒY‚𐳂µ‚­Š®—¹‚µ‚Ü‚µ‚½B + +ƒAƒhƒoƒ^ƒCƒY‚ÉŽ¸”s‚µ‚Ü‚µ‚½B + +\¬‚𐳂µ‚­Š®—¹‚µ‚Ü‚µ‚½B + +\¬‚ÉŽ¸”s‚µ‚Ü‚µ‚½B + +‚±‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ðíœ‚·‚é‚É‚Í Administrator ‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚±‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ðíœ‚·‚é‚ɂ́AAdministrator ‚Æ‚µ‚ăƒOƒIƒ“‚·‚é‚©A‚Ü‚½‚̓eƒNƒjƒJƒ‹ ƒTƒ|[ƒg ƒOƒ‹[ƒv‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒpƒX [2] ‚ª³‚µ‚­‚ ‚è‚Ü‚¹‚ñB³‚µ‚¢ƒpƒX‚ðŽw’肵‚Ä‚­‚¾‚³‚¢B + +ƒƒ‚ƒŠ•s‘«‚Å‚·B‚Ù‚©‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ð•‚¶‚Ä‚©‚çAÄŽŽs‚µ‚Ä‚­‚¾‚³‚¢B + +ƒhƒ‰ƒCƒu [2] ‚ɂ̓fƒBƒXƒN‚ª‚ ‚è‚Ü‚¹‚ñBƒfƒBƒXƒN‚ð‘}“ü‚µ‚Ä‚©‚ç [\[]ÄŽŽs[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢BŠù‚É‘I‘ð‚³‚ê‚½ƒ{ƒŠƒ…[ƒ€‚É–ß‚éê‡‚́A[\[]ƒLƒƒƒ“ƒZƒ‹[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B + +ƒhƒ‰ƒCƒu [2] ‚ɂ̓fƒBƒXƒN‚ª‚ ‚è‚Ü‚¹‚ñBƒfƒBƒXƒN‚ð‘}“ü‚µ‚Ä‚©‚ç [\[]ÄŽŽs[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B[\[]ŒŸõ[\]] ƒ_ƒCƒAƒƒO ƒ{ƒbƒNƒX‚É–ß‚Á‚āA•ʂ̃{ƒŠƒ…[ƒ€‚ð‘I‘ð‚·‚éê‡‚́A[\[]ƒLƒƒƒ“ƒZƒ‹[\]] ‚ðƒNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B + +ƒtƒHƒ‹ƒ_ [2] ‚Í‘¶Ý‚µ‚Ü‚¹‚ñBŠù‘¶‚̃tƒHƒ‹ƒ_‚ւ̃pƒX‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B + +‚±‚̃tƒHƒ‹ƒ_‚ð“ǂݎæ‚邽‚߂̏\•ª‚È“ÁŒ ‚ª‚ ‚è‚Ü‚¹‚ñB + +ƒCƒ“ƒXƒg[ƒ‹‚Ì‚½‚߂̐³‚µ‚¢ƒRƒs[æ‚ðŠm’è‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B + +ƒ\[ƒX ƒCƒ“ƒXƒg[ƒ‹ ƒf[ƒ^ƒx[ƒX‚©‚ç“ǂݎæ‚邯‚«‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½: [2]B + +Ä‹N“®‘€ì‚ðƒXƒPƒWƒ…[ƒ‹‚µ‚Ä‚¢‚Ü‚·: ƒtƒ@ƒCƒ‹ [2] ‚Ì–¼‘O‚ð [3] ‚ɕύX‚µ‚Ä‚¢‚Ü‚·B‘€ì‚ðŠ®—¹‚·‚é‚ɂ́AÄ‹N“®‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB + +Ä‹N“®‘€ì‚ðƒXƒPƒWƒ…[ƒ‹‚µ‚Ä‚¢‚Ü‚·: ƒtƒ@ƒCƒ‹ [2] ‚̍폜B‘€ì‚ðŠ®—¹‚·‚é‚ɂ́AÄ‹N“®‚µ‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB + +ƒ‚ƒWƒ…[ƒ‹ [2] ‚Å“o˜^‚ÉŽ¸”s‚µ‚Ü‚µ‚½BHRESULT [3]BƒTƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒ‚ƒWƒ…[ƒ‹ [2] ‚Å“o˜^‚Ì‰ðœ‚ÉŽ¸”s‚µ‚Ü‚µ‚½BHRESULT [3]BƒTƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒpƒbƒP[ƒW [2] ‚̃LƒƒƒbƒVƒ…‚ÉŽ¸”s‚µ‚Ü‚µ‚½BƒGƒ‰[: [3]BƒTƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒtƒHƒ“ƒg [2] ‚ð“o˜^‚Å‚«‚Ü‚¹‚ñB‚±‚̃tƒHƒ“ƒg‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚錠—˜‚ª‚ ‚é‚©‚Ç‚¤‚©A‚Ü‚½ƒVƒXƒeƒ€‚ª‚±‚̃tƒHƒ“ƒg‚ðƒTƒ|[ƒg‚µ‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒtƒHƒ“ƒg [2] ‚Ì“o˜^‚ð‰ðœ‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒtƒHƒ“ƒg‚ðíœ‚·‚é‚̂ɏ\•ª‚ȃAƒNƒZƒX‹–‰Â‚ª‚ ‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒVƒ‡[ƒgƒJƒbƒg [2] ‚ðì¬‚Å‚«‚Ü‚¹‚ñB–Ú“I‚̃tƒHƒ‹ƒ_‚ª‘¶Ý‚µAƒAƒNƒZƒX‚Å‚«‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒVƒ‡[ƒgƒJƒbƒg [2] ‚ðíœ‚Å‚«‚Ü‚¹‚ñBƒVƒ‡[ƒgƒJƒbƒg ƒtƒ@ƒCƒ‹‚ª‘¶Ý‚µAƒAƒNƒZƒX‚Å‚«‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒtƒ@ƒCƒ‹ [2] ‚Ì‚½‚߂̎í—ނ̃‰ƒCƒuƒ‰ƒŠ‚ð“o˜^‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒTƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ƒtƒ@ƒCƒ‹ [2] ‚Ì‚½‚߂̎í—ނ̃‰ƒCƒuƒ‰ƒŠ‚Ì“o˜^‚ð‰ðœ‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒTƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +INI ƒtƒ@ƒCƒ‹ [2][3] ‚ðXV‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½Bƒtƒ@ƒCƒ‹‚ª‘¶Ý‚µAƒAƒNƒZƒX‚Å‚«‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +Ä‹N“®‚·‚邯‚«‚ɁAƒtƒ@ƒCƒ‹ [3] ‚ð [2] ‚Å’u‚«Š·‚¦‚邿‚¤‚ɃXƒPƒWƒ…[ƒ‹‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚¹‚ñBƒtƒ@ƒCƒ‹ [3] ‚ւ̏‘‚«ž‚݂̃AƒNƒZƒX‹–‰Â‚ðŽ‚Á‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ODBC ƒhƒ‰ƒCƒo ƒ}ƒl[ƒWƒƒ‚̍폜‚ŃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½BODBC ƒGƒ‰[ [2]: [3]BƒTƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ODBC ƒhƒ‰ƒCƒo ƒ}ƒl[ƒWƒƒ‚̃Cƒ“ƒXƒg[ƒ‹‚ŃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½BODBC ƒGƒ‰[ [2]: [3]BƒTƒ|[ƒg’S“–ŽÒ‚É–â‚¢‡‚킹‚Ä‚­‚¾‚³‚¢B + +ODBC ƒhƒ‰ƒCƒo [4] ‚̍폜‚ŃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½BODBC ƒGƒ‰[ [2]: [3]BODBC ƒhƒ‰ƒCƒo‚ðíœ‚·‚é“ÁŒ ‚ðŽ‚Á‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ODBC ƒhƒ‰ƒCƒo [4] ‚̃Cƒ“ƒXƒg[ƒ‹‚ŃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½BODBC ƒGƒ‰[ [2]: [3]Bƒtƒ@ƒCƒ‹ [4] ‚ª‘¶Ý‚µAƒAƒNƒZƒX‚Å‚«‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ODBC ƒf[ƒ^ ƒ\[ƒX‚̍\¬‚ŃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½: [4]BODBC ƒGƒ‰[ [2]: [3]Bƒtƒ@ƒCƒ‹ [4] ‚ª‘¶Ý‚µAƒAƒNƒZƒX‚Å‚«‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒT[ƒrƒX '[2]' ([3]) ‚ðŠJŽn‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒVƒXƒeƒ€ ƒT[ƒrƒX‚ðŠJŽn‚·‚é“ÁŒ ‚ðŽ‚Á‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒT[ƒrƒX '[2]' ([3]) ‚ð’âŽ~‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒVƒXƒeƒ€ ƒT[ƒrƒX‚ð’âŽ~‚·‚é“ÁŒ ‚ðŽ‚Á‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒT[ƒrƒX '[2]' ([3]) ‚ðíœ‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒVƒXƒeƒ€ ƒT[ƒrƒX‚ðíœ‚·‚é“ÁŒ ‚ðŽ‚Á‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒT[ƒrƒX '[2]' ([3]) ‚ðƒCƒ“ƒXƒg[ƒ‹‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BƒVƒXƒeƒ€ ƒT[ƒrƒX‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚é“ÁŒ ‚ðŽ‚Á‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ŠÂ‹«•ϐ” '[2]' ‚ðXV‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½BŠÂ‹«•ϐ”‚ðC³‚·‚é“ÁŒ ‚ðŽ‚Á‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢B + +“ÁŒ ‚ª•s\•ª‚È‚½‚߁A‚±‚̃Rƒ“ƒsƒ…[ƒ^‚Ì‚·‚ׂẴ†[ƒU[‚ªŽg—p‚Å‚«‚邿‚¤‚ɃAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðƒCƒ“ƒXƒg[ƒ‹‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñBAdministrator ‚Æ‚µ‚ăƒOƒIƒ“‚µAÄ“xƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä‚­‚¾‚³‚¢B + +ƒtƒ@ƒCƒ‹ '[3]' ‚ɑ΂·‚éƒZƒLƒ…ƒŠƒeƒB‚ðÝ’è‚Å‚«‚Ü‚¹‚ñBƒGƒ‰[ : [2]B ‚±‚̃tƒ@ƒCƒ‹‚ɑ΂µ‚ăZƒLƒ…ƒŠƒeƒB‚ð•ύX‚·‚錠ŒÀ‚ðŽ‚Á‚Ä‚¢‚é‚©‚Ç‚¤‚©Šm”F‚µ‚Ä‚­‚¾‚³‚¢B + +ƒRƒ“ƒ|[ƒlƒ“ƒg ƒT[ƒrƒX (COM+ 1.0) ‚́A‚±‚̃Rƒ“ƒsƒ…[ƒ^‚ɐ³‚µ‚­ƒCƒ“ƒXƒg[ƒ‹‚³‚ê‚Ä‚¢‚Ü‚¹‚ñBƒCƒ“ƒXƒg[ƒ‹‚ðŠ®—¹‚·‚é‚É‚Í ƒRƒ“ƒ|[ƒlƒ“ƒg ƒT[ƒrƒX‚ª•K—v‚Å‚·BƒRƒ“ƒ|[ƒlƒ“ƒg ƒT[ƒrƒX‚́AWindows 2000 ‚Å—˜—p‚Å‚«‚Ü‚·B + +COM+ ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì“o˜^ƒGƒ‰[‚Å‚·BÚ‚µ‚­‚̓Tƒ|[ƒg’S“–ŽÒ‚Ö‚¨–â‚¢‡‚킹‚­‚¾‚³‚¢B + +COM+ ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì“o˜^‰ðœ‚̃Gƒ‰[‚Å‚·BÚ‚µ‚­‚̓Tƒ|[ƒg’S“–ŽÒ‚Ö‚¨–â‚¢‡‚킹‚­‚¾‚³‚¢B + +ƒT[ƒrƒX '[2]' ([3]) ‚Ì‹Lq‚͕ύX‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B + +Windows ƒCƒ“ƒXƒg[ƒ‰ ƒT[ƒrƒX‚́AƒVƒXƒeƒ€ ƒtƒ@ƒCƒ‹ [2] ‚ðƒAƒbƒvƒf[ƒg‚Å‚«‚Ü‚¹‚ñB‚±‚̃tƒ@ƒCƒ‹‚Í Windows ‚É‚æ‚Á‚ĕی삳‚ê‚Ä‚¢‚Ü‚·B‚±‚̃vƒƒOƒ‰ƒ€‚𐳂µ‚­“®ì‚³‚¹‚é‚ɂ́AƒIƒyƒŒ[ƒeƒBƒ“ƒO ƒVƒXƒeƒ€‚ðƒAƒbƒvƒf[ƒg‚·‚é•K—v‚ª‚ ‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B {{ƒpƒbƒP[ƒW ƒo[ƒWƒ‡ƒ“ : [3], OS ƒvƒƒeƒNƒeƒbƒh ƒo[ƒWƒ‡ƒ“ : [4]}} + +Windows ƒCƒ“ƒXƒg[ƒ‰ ƒT[ƒrƒX‚ł́A•ی삳‚ꂽ Windows ƒtƒ@ƒCƒ‹ [2] ‚ðƒAƒbƒvƒf[ƒg‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñB {{ƒpƒbƒP[ƒW ƒo[ƒWƒ‡ƒ“ : [3], OS ƒvƒƒeƒNƒeƒbƒh ƒo[ƒWƒ‡ƒ“ 1 : [4], SFP ƒGƒ‰[ : [5]}}" + +•ی삳‚ꂽ Windows ƒtƒ@ƒCƒ‹‚ðXV‚Å‚«‚Ü‚¹‚ñB {{SFP ƒGƒ‰[: [2]. •ی삳‚ꂽƒtƒ@ƒCƒ‹‚̈ꗗ:\r\n[3]}} + +‚±‚̃Rƒ“ƒsƒ…[ƒ^‚ł́Aƒ†[ƒU[‚É‚æ‚éƒCƒ“ƒXƒg[ƒ‹‚̓|ƒŠƒV[‚Å–³Œø‚ɂȂÁ‚Ä‚¢‚Ü‚·B + +ƒAƒZƒ“ƒuƒŠ ƒRƒ“ƒ|[ƒlƒ“ƒg [2] ‚̃Cƒ“ƒXƒg[ƒ‹’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B HRESULT: [3]. {{ƒAƒZƒ“ƒuƒŠ ƒCƒ“ƒ^[ƒtƒFƒCƒX: [4], ŠÖ”: [5], ƒAƒZƒ“ƒuƒŠ–¼: [6]}} + + diff --git a/src/WINNT/install/wix/lang/ko_KR/ActionText.wxi b/src/WINNT/install/wix/lang/ko_KR/ActionText.wxi new file mode 100644 index 000000000..ac6ff0e41 --- /dev/null +++ b/src/WINNT/install/wix/lang/ko_KR/ActionText.wxi @@ -0,0 +1,143 @@ + + +óÀ½ »ç¿ë ½Ã ¼³Ä¡ÇÒ ÀÀ¿ë ÇÁ·Î±×·¥ + +·¹Áö½ºÆ®¸® °ø°£ ÇÒ´ç Áß + +¼³Ä¡ÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ È®ÀÎ Áß + +½ÇÇà ÆÄÀÏÀ» ¹ÙÀεùÇÏ´Â Áß + +Á¦Ç°À» È®ÀÎÇÏ´Â Áß + +ÇÊ¿äÇÑ °ø°£À» È®ÀÎÇÏ´Â Áß + +ÇÊ¿äÇÑ °ø°£À» È®ÀÎÇÏ´Â Áß + +Æú´õ ¸¸µå´Â Áß + +¹Ù·Î °¡±â ¸¸µå´Â Áß + +¼­ºñ½º »èÁ¦ Áß + +Áߺ¹ ÆÄÀÏÀ» ¸¸µå´Â Áß + +ÇÊ¿äÇÑ °ø°£À» È®ÀÎÇÏ´Â Áß + +°ü·Ã ÀÀ¿ë ÇÁ·Î±×·¥À» °Ë»öÇÏ´Â Áß + +¼öÇàÇÒ ½ºÅ©¸³Æ® ÀÛ¾÷À» »ý¼ºÇÏ´Â Áß: + +³×Æ®¿öÅ© ¼³Ä¡ ÆÄÀÏÀ» º¹»çÇÏ´Â Áß + +»õ ÆÄÀÏÀ» º¹»çÇÏ´Â Áß + +ODBC ±¸¼º ¿ä¼Ò ¼³Ä¡ Áß + +»õ ¼­ºñ½º ¼³Ä¡ Áß + +½Ã½ºÅÛ Ä«Å»·Î±× ¼³Ä¡ Áß + +¼³Ä¡¸¦ À¯È¿È­ÇÏ´Â Áß + +½ÇÇà Á¶°Ç È®ÀÎ Áß + +°ü·Ã ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ ±â´ÉÀ» À̵¿ÇÏ´Â Áß + +ÆÄÀÏÀ» ¿Å±â´Â Áß + +¾î¼Àºí¸® Á¤º¸¸¦ °Ô½ÃÇÏ´Â Áß + +¾î¼Àºí¸® Á¤º¸¸¦ °Ô½Ã Ãë¼ÒÇÏ´Â Áß + +ÆÄÀÏ ÆÐÄ¡ Áß + +±¸¼º ¿ä¼Ò µî·ÏÀ» ¾÷µ¥ÀÌÆ®ÇÏ´Â Áß + +ÇØ´ç ±¸¼º ¿ä¼Ò¸¦ °Ô½ÃÇÏ´Â Áß + +Á¦Ç° ±â´ÉÀ» °Ô½ÃÇÏ´Â Áß + +Á¦Ç° Á¤º¸¸¦ °Ô½ÃÇÏ´Â Áß + +Class ¼­¹ö¸¦ µî·ÏÇÏ´Â Áß + +COM+ ÀÀ¿ë ÇÁ·Î±×·¥°ú ±¸¼º ¿ä¼Ò¸¦ µî·ÏÇÏ´Â Áß + +ÀͽºÅÙ¼Ç ¼­¹ö¸¦ µî·ÏÇÏ´Â Áß + +±Û²ÃÀ» µî·ÏÇÏ´Â Áß + +MIME Á¤º¸¸¦ µî·ÏÇÏ´Â Áß + +Á¦Ç°À» µî·ÏÇÏ´Â Áß + +ÇÁ·Î±×·¥ È®ÀÎÀÚ¸¦ µî·ÏÇÏ´Â Áß + +Çü½Ä ¶óÀ̺귯¸®¸¦ µî·ÏÇÏ´Â Áß + +»ç¿ëÀÚ¸¦ µî·ÏÇÏ´Â Áß + +Áߺ¹ ÆÄÀÏÀ» Á¦°ÅÇÏ´Â Áß + +ȯ°æ ¹®ÀÚ¿­À» ¾÷µ¥ÀÌÆ®ÇÏ´Â Áß + +ÀÀ¿ë ÇÁ·Î±×·¥À» Á¦°ÅÇÏ´Â Áß + +ÆÄÀÏÀ» Á¦°ÅÇÏ´Â Áß + +Æú´õ¸¦ Á¦°ÅÇÏ´Â Áß + +INI ÆÄÀÏ Ç׸ñÀ» Á¦°ÅÇÏ´Â Áß + +ODBC ±¸¼º ¿ä¼Ò Á¦°ÅÇÏ´Â Áß + +½Ã½ºÅÛ ·¹Áö½ºÆ®¸® °ªÀ» Á¦°ÅÇÏ´Â Áß + +¹Ù·Î °¡±â¸¦ Á¦°ÅÇÏ´Â Áß + +Á¦Ç°À» È®ÀÎÇÏ´Â Áß + +·Ñ¹éÀ» ¼öÇàÇÏ´Â Áß: + +¹é¾÷ ÆÄÀÏÀ» Á¦°ÅÇÏ´Â Áß + +¸ðµâÀ» µî·ÏÇÏ´Â Áß + +¸ðµâ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß + +ODBC µð·ºÅ͸®¸¦ ÃʱâÈ­ÇÏ´Â Áß + +¼­ºñ½º¸¦ ½ÃÀÛÇÏ´Â Áß + +¼­ºñ½º¸¦ ÁßÁöÇÏ´Â Áß + +À̵¿ÇÑ ÆÄÀÏÀ» Á¦°ÅÇÏ´Â Áß + +ÇØ´ç ±¸¼º ¿ä¼ÒÀÇ °Ô½Ã¸¦ ÇØÁ¦ÇÏ´Â Áß + +Á¦Ç° ±â´ÉÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß + +Á¦Ç° Á¤º¸ÀÇ °Ô½Ã¸¦ ÇØÁ¦ÇÏ´Â Áß + +Class ¼­¹öÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß + +COM+ ÀÀ¿ë ÇÁ·Î±×·¥°ú ±¸¼º ¿ä¼ÒÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß + +extension ¼­¹öÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß + +±Û²Ã µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß + +MIME Á¤º¸ÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß + +ÇÁ·Î±×·¥ È®ÀÎÀÚÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß + +Çü½Ä ¶óÀ̺귯¸®ÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß + +ȯ°æ ¹®ÀÚ¿­À» ¾÷µ¥ÀÌÆ®ÇÏ´Â Áß + +INI ÆÄÀÏ °ªÀ» ¾²´Â Áß + +½Ã½ºÅÛ ·¹Áö½ºÆ®¸® °ªÀ» ¾²´Â Áß + + diff --git a/src/WINNT/install/wix/lang/ko_KR/Error.wxi b/src/WINNT/install/wix/lang/ko_KR/Error.wxi new file mode 100644 index 000000000..f30e6925e --- /dev/null +++ b/src/WINNT/install/wix/lang/ko_KR/Error.wxi @@ -0,0 +1,319 @@ + + +{{½É°¢ÇÑ ¿À·ù: }} + +{{¿À·ù [1]. }} + +°æ°í [1]. + + + +Info [1]. + +ÀÌ ÆÐŰÁö¸¦ ¼³Ä¡ÇÏ´Â µ¿¾È ¿¹»óÄ¡ ¾ÊÀº ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. À̰ÍÀº ÀÌ ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖÀ½À» ³ªÅ¸³À´Ï´Ù. ¿À·ù ÄÚµå : [1]. {{Àμö : [2], [3], [4]}} + + + +{{µð½ºÅ© ²Ë Âü: }} + +¼öÇà [Time]: [1]. [2] + +[ProductName] + +{[2]}{, [3]}{, [4]} + +¸Þ½ÃÁö À¯Çü: [1], Àμö: [2] + +=== ±â·Ï ½ÃÀÛ: [Date] [Time] === + +=== ±â·Ï ½ÃÀÛ: [Date] [Time] === + +¼öÇà ½ÃÀÛ [Time]: [1]. + +¼öÇà ³¡ [Time]: [1]. ¸®ÅÏ °ª [2]. + +³²Àº ½Ã°£: {[1] ºÐ }{[2] ÃÊ} + +¸Þ¸ð¸®°¡ ºÎÁ·ÇÕ´Ï´Ù. ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥À» Á¾·áÇÑ ÈÄ ´Ù½Ã ½ÃµµÇϽʽÿÀ. + +Windows Installer°¡ ´õ ÀÌ»ó ÀÀ´äÇÏÁö ¾Ê½À´Ï´Ù. + +Windows Installer°¡ ¿ÏÀüÈ÷ ÁßÁöµÇ¾ú½À´Ï´Ù. + +[ProductName]À»(¸¦) ±¸¼ºÇϰí ÀÖ½À´Ï´Ù. ±â´Ù¸®½Ê½Ã¿À. + +ÇÊ¿äÇÑ Á¤º¸¸¦ ¸ðÀ¸´Â Áß... + +ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÀÌÀü ¹öÀüÀ» Á¦°ÅÇÏ´Â Áß... + +ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÀÌÀü ¹öÀüÀ» Á¦°ÅÇϱâ À§ÇØ ÁغñÇÏ´Â Áß... + +{[ProductName] }¼³Ä¡°¡ ¼º°øÀûÀ¸·Î ¿Ï·áµÇ¾ú½À´Ï´Ù. + +{[ProductName] }¼³Ä¡¸¦ ½ÇÆÐÇß½À´Ï´Ù. + +ÆÄÀÏ Àб⠿À·ù: [2]. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏ¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +'[2]' ÆÄÀÏÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù. ÀÌ À̸§À» °¡Áø µð·ºÅ͸®°¡ ÀÌ¹Ì ÀÖ½À´Ï´Ù. ¼³Ä¡¸¦ Ãë¼ÒÇÏ°í ´Ù¸¥ À§Ä¡¿¡ ´Ù½Ã ¼³Ä¡ÇØ º¸½Ê½Ã¿À. + +´ÙÀ½ µð½ºÅ©¸¦ ³ÖÀ¸½Ê½Ã¿À: [2] + +ÀÌ µð·ºÅ͸®¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù:[2]. ¼³Ä¡¸¦ °è¼ÓÇÒ ¼ö ¾ø½À´Ï´Ù. °ü¸®ÀÚ ±ÇÇÑÀ¸·Î ·Î±×¿ÂÇϰųª ½Ã½ºÅÛ °ü¸®ÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +ÆÄÀÏ ¾²±â ¿À·ù: [2]. ±× µð·ºÅ͸®¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +[2] ÆÄÀÏÀ» Àдٰ¡ ¿À·ù°¡ »ý°å½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏ¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +'[2]' ÆÄÀÏÀ» ´Üµ¶À¸·Î ¾×¼¼½ºÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀ» ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ °®°í ÀÖ½À´Ï´Ù. ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥À» ¸ðµÎ ´ÝÀº ÈÄ "´Ù½Ã ½Ãµµ"¸¦ ´­·¯ ´Ù½Ã ½ÃµµÇϽʽÿÀ. + +´ÙÀ½ ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ÀÖ´Â µð½ºÅ© °ø°£ÀÌ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù: [2]. µð½ºÅ© °ø°£À» ´Ã¸° ÈÄ "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°Å³ª "Ãë¼Ò"¸¦ ´­·¯¼­ ³¡³»½Ê½Ã¿À. + +¿øº» ÆÄÀÏÀÌ ¾ø½À´Ï´Ù: [2]. ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏ¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +ÆÄÀÏ Àб⠿À·ù: [3]. {{ ½Ã½ºÅÛ ¿À·ù [2].}} ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏ¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +ÆÄÀÏ ¾²±â ¿À·ù: [3]. {{ ½Ã½ºÅÛ ¿À·ù [2].}} ±× µð·ºÅ͸®¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +¿øº» ÆÄÀÏÀÌ ¾ø½À´Ï´Ù{{(cabinet)}}: [2]. ±× ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏ¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +'[2]' µð·ºÅ͸®¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù. ÀÌ À̸§À» °¡Áø ÆÄÀÏÀÌ ÀÌ¹Ì ÀÖ½À´Ï´Ù. ±× ÆÄÀÏ À̸§À» ´Ù¸¥ °ÍÀ¸·Î ¹Ù²Ù°Å³ª Á¦°ÅÇÑ ÈÄ "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°Å³ª "Ãë¼Ò"¸¦ ´­·¯ ³¡³»½Ê½Ã¿À. + +º¼·ý [2]À»(¸¦) ÇöÀç »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ´Ù¸¥ º¼·ýÀ» ¼±ÅÃÇϽʽÿÀ. + +ÁöÁ¤ÇÑ °æ·Î '[2]'À»(¸¦) »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. + +ÁöÁ¤ÇÑ Æú´õ¿¡ ¾µ ¼ö ¾ø½À´Ï´Ù: [2]. + +ÆÄÀÏÀ» ÀÐÀ» ¶§ ³×Æ®¿öÅ© ¿À·ù°¡ »ý°å½À´Ï´Ù: [2] + +µð·ºÅ͸®¸¦ ¸¸µé ¶§ ¿À·ù°¡ »ý°å½À´Ï´Ù: [2] + +µð·ºÅ͸®¸¦ ¸¸µé ¶§ ³×Æ®¿öÅ© ¿À·ù°¡ »ý°å½À´Ï´Ù: [2] + +¿øº» ÆÄÀÏ Ä³ºñ³ÝÀ» ¿­ ¶§ ³×Æ®¿öÅ© ¿À·ù°¡ »ý°å½À´Ï´Ù: [2] + +ÁöÁ¤ÇÑ °æ·Î°¡ ³Ê¹« ±é´Ï´Ù: [2] + +ÀÌ ÆÄÀÏÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù: [2]. + +Æú´õ °æ·Î '[2]'ÀÌ(°¡) À߸ø µÇ¾ú½À´Ï´Ù. °æ·Î·Î ÁöÁ¤ÇÑ ¹®ÀÚ°¡ ¾ø°Å³ª °æ·Î°¡ ³Ê¹« ±é´Ï´Ù. + +Æú´õ °æ·Î '[2]'¿¡ Æú´õ °æ·Î·Î »ç¿ëÇÒ ¼ö ¾ø´Â ±ÛÀÚ°¡ µé¾î ÀÖ½À´Ï´Ù. + +Æú´õ °æ·Î '[2]'¿¡ »ç¿ëÇÒ ¼ö ¾ø´Â ±ÛÀÚ°¡ µé¾î ÀÖ½À´Ï´Ù. + +'[2]'Àº(´Â) ÆÄÀÏ À̸§À¸·Î À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù. + +ÆÄÀÏ º¸¾È ¿À·ù: [3] GetLastError: [2] + +»ç¿ëÇÒ ¼ö ¾ø´Â µå¶óÀ̺ê: [2] + +ÆÄÀÏ [2]¿¡ ÆÐÄ¡¸¦ Àû¿ëÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù. ´Ù¸¥ ¹æ¹ýÀ¸·Î ¾÷µ¥ÀÌÆ®µÇ¾ú±â ¶§¹®¿¡ ÀÌ ÆÐÄ¡¸¦ »ç¿ëÇØ¼­ ¼öÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº ÆÐÄ¡¸¦ ±¸ÀÔÇÑ ´ë¸®Á¡¿¡ ¹®ÀÇÇϽʽÿÀ. {{½Ã½ºÅÛ ¿À·ù: [3]}} + +ijºñ³Ý ÆÄÀÏ [2]ÀÌ(°¡) µðÁöÅÐ ¼­¸íµÇÁö ¾Ê¾Ò±â ¶§¹®¿¡, ÇÊ¿äÇÑ ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº ijºñ³Ý ÆÄÀÏÀÌ ¼Õ»óµÇ¾úÀ½À» ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù. + +ijºñ³Ý ÆÄÀÏ [2]ÀÌ(°¡) ¿Ã¹Ù¸£Áö ¾ÊÀº µðÁöÅÐ ¼­¸íÀ» °¡Áö°í Àֱ⠶§¹®¿¡, ÇÊ¿äÇÑ ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº ijºñ³Ý ÆÄÀÏÀÌ ¼Õ»óµÇ¾úÀ½À» ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.{{ WinVerifyTrust¿¡¼­ ¿À·ù [3]À»(¸¦) ¹ÝȯÇß½À´Ï´Ù.}} + +[2] ÆÄÀÏÀ» ¿Ã¹Ù¸£°Ô º¹»çÇÏÁö ¸øÇß½À´Ï´Ù: CRC ¿À·ùÀÔ´Ï´Ù. + +[2] ÆÄÀÏÀ» ¿Ã¹Ù¸£°Ô À̵¿ÇÏÁö ¸øÇß½À´Ï´Ù: CRC ¿À·ùÀÔ´Ï´Ù. + +[2] ÆÄÀÏÀ» ¿Ã¹Ù¸£°Ô ÆÐÄ¡ÇÏÁö ¸øÇß½À´Ï´Ù: CRC ¿À·ùÀÔ´Ï´Ù. + +ÆÄÀÏÀ» ijºñ³Ý ÆÄÀÏ '[3]'¿¡¼­ ãÀ» ¼ö ¾ø±â ¶§¹®¿¡, '[2]' ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº ³×Æ®¿öÅ© ¿À·ù, CD-ROMÀ¸·ÎºÎÅÍÀÇ Àб⠿À·ù, ¶Ç´Â ÀÌ ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖÀ½À» ³ªÅ¸³À´Ï´Ù. + +¼³Ä¡¿¡ ÇÊ¿äÇÑ Ä³ºñ³Ý ÆÄÀÏ '[2]'ÀÌ(°¡) ¼Õ»óµÇ¾î »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº ³×Æ®¿öÅ© ¿À·ù, CD-ROMÀ¸·ÎºÎÅÍÀÇ Àб⠿À·ù, ¶Ç´Â ÀÌ ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖÀ½À» ³ªÅ¸³À´Ï´Ù. + +¼³Ä¡¸¦ ¿Ï·áÇϴµ¥ ÇÊ¿äÇÑ Àӽà ÆÄÀÏÀ» ¸¸µå´Âµ¥ ¿À·ù°¡ ÀÖ¾ú½À´Ï´Ù.{{ Æú´õ: [3]. ½Ã½ºÅÛ ¿À·ù ÄÚµå: [2]}} + +۸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù: [2]. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +۸¦ ¿­ ¼ö ¾ø½À´Ï´Ù: [2]. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +Ű [3]¿¡¼­ °ª [2]À»(¸¦) »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [4].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +Ű [2]À»(¸¦) »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +Ű [3]¿¡¼­ °ª [2]À»(¸¦) ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [4].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +Ű [3]¿¡ °ª [2]À»(¸¦) ¾µ ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [4].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÃæºÐÇÑÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +Ű [2]ÀÇ °ª À̸§À» ±¸ÇÒ ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +Ű [2]ÀÇ ÇÏÀ§ Ű À̸§À» ±¸ÇÒ ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +Ű [2]ÀÇ º¸¾È Á¤º¸¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +»ç¿ë °¡´ÉÇÑ ·¹Áö½ºÆ®¸® °ø°£À» ´Ã¸± ¼ö ¾ø½À´Ï´Ù. ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥À» ¼³Ä¡Çϴµ¥ [2]KBÀÇ ·¹Áö½ºÆ®¸® °ø°£ÀÌ ÇÊ¿äÇÕ´Ï´Ù. + +´Ù¸¥ ¼³Ä¡ ÇÁ·Î±×·¥ÀÌ ½ÇÇà ÁßÀÔ´Ï´Ù. ±× ÇÁ·Î±×·¥ÀÇ ¼³Ä¡¸¦ ³¡³½ ÈÄ, ÀÌ ÀÛ¾÷À» °è¼ÓÇϽʽÿÀ. + +º¸¾È µ¥ÀÌÅÍ¿¡ ¾×¼¼½ºÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù. Windows Installer¸¦ ¿Ã¹Ù¸£°Ô ±¸¼ºÇß´ÂÁö È®ÀÎÇÑ ÈÄ ´Ù½Ã ¼³Ä¡ÇϽʽÿÀ. + +»ç¿ëÀÚ '[2]'ÀÌ(°¡) Á¦Ç° '[3]'ÀÇ ¼³Ä¡¸¦ ÀÌÀü¿¡ ÃʱâÈ­ÇÑ ÀûÀÌ ÀÖ½À´Ï´Ù. ±× »ç¿ëÀÚ°¡ ¼³Ä¡ ÇÁ·Î±×·¥À» ´Ù½Ã ½ÇÇàÇØ¾ß ±× Á¦Ç°À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Áö±Ý ½ÇÇàÇÏ´Â ¼³Ä¡ ÀÛ¾÷Àº °è¼ÓµË´Ï´Ù. + +»ç¿ëÀÚ '[2]'ÀÌ(°¡) Á¦Ç° '[3]'ÀÇ ¼³Ä¡¸¦ ÀÌÀü¿¡ ÃʱâÈ­ÇÑ ÀûÀÌ ÀÖ½À´Ï´Ù. ±× »ç¿ëÀÚ°¡ ¼³Ä¡ ÇÁ·Î±×·¥À» ´Ù½Ã ½ÇÇàÇØ¾ß ±× Á¦Ç°À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. + +µð½ºÅ© °ø°£ ºÎÁ· - º¼·ý: '[2]'; ÇÊ¿äÇÑ °ø°£: [3]KB; »ç¿ëÇÒ ¼ö ÀÖ´Â °ø°£: [4]KB. µð½ºÅ© °ø°£À» ´Ã¸° ÈÄ ´Ù½Ã ½ÃµµÇϽʽÿÀ. + +Ãë¼ÒÇϽðڽÀ´Ï±î? + +ÆÄÀÏ [2][3]À»(¸¦) ´ÙÀ½ ÇÁ·Î¼¼½º¿¡¼­ »ç¿ëÇϰí ÀÖ½À´Ï´Ù{ À̸§: [4], Id: [5], â Á¦¸ñ: '[6]'}. ±× ÀÀ¿ë ÇÁ·Î±×·¥À» ´ÝÀº ÈÄ ´Ù½Ã ½ÃµµÇϽʽÿÀ. + +Á¦Ç° '[2]'ÀÌ(°¡) ÀÌ¹Ì ¼³Ä¡µÇ¾î À־ ÀÌ Á¦Ç°À» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ µÎ Á¦Ç°Àº ȣȯµÇÁö ¾Ê½À´Ï´Ù. + +º¹±¸¸¦ »ç¿ëÇÏ¿© ¼³Ä¡¸¦ °è¼ÓÇϱâ À§ÇÑ µð½ºÅ© °ø°£ÀÌ º¼·ý '[2]'¿¡ ºÎÁ·ÇÕ´Ï´Ù. [3]KB°¡ ÇÊ¿äÇϳª, [4]KB¸¸ »ç¿ë °¡´ÉÇÕ´Ï´Ù. º¹±¸ Á¤º¸¸¦ ÀúÀåÇÏÁö ¾Ê°í °è¼ÓÇÏ·Á¸é "¹«½Ã"¸¦ ´©¸£°í, »ç¿ë °¡´É °ø°£À» È®ÀÎÇÏ·Á¸é "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°í, ¼³Ä¡¸¦ Ãë¼ÒÇÏ·Á¸é "Ãë¼Ò"¸¦ ´©¸£½Ê½Ã¿À. + +³×Æ®¿öÅ© À§Ä¡ [2]¿¡ ¾×¼¼½ºÇÒ ¼ö ¾ø½À´Ï´Ù. + +´ÙÀ½ ÀÀ¿ë ÇÁ·Î±×·¥À» ´Ý¾Æ¾ß ¼³Ä¡¸¦ °è¼ÓÇÒ ¼ö ÀÖ½À´Ï´Ù: + +ÀÌ Á¦Ç°À» ¼³Ä¡ÇÏ·Á´Â ½Ã½ºÅÛ¿¡ ÇØ´ç Á¦Ç°À» ÀÌÀü¿¡ ¼³Ä¡ÇÑ ÀûÀÌ ¾ø½À´Ï´Ù. + +º¸¾È ¼³Á¤À» Àû¿ëÇÏ´Â µ¿¾È ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. [2]Àº(´Â) ¿Ã¹Ù¸¥ »ç¿ëÀÚ³ª ±×·ìÀÌ ¾Æ´Õ´Ï´Ù. À̰ÍÀº ÆÐŰÁöÀÇ ¹®Á¦À̰ųª, ³×Æ®¿öÅ©ÀÇ µµ¸ÞÀÎ ÄÁÆ®·Ñ·¯¿¡ ¿¬°áÇÏ´Â ¹®Á¦ÀÏ ¼ö ÀÖ½À´Ï´Ù. ³×Æ®¿öÅ© ¿¬°áÀ» È®ÀÎÇϰí "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°Å³ª, ¼³Ä¡¸¦ ¸¶Ä¡·Á¸é "Ãë¼Ò"¸¦ ´©¸£½Ê½Ã¿À. {{»ç¿ëÀÚÀÇ SID¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù. ½Ã½ºÅÛ ¿À·ù [3]}} + +Ű [2]ÀÌ(°¡) À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù. Á¤È®ÇÑ Å°¸¦ ÀÔ·ÂÇß´ÂÁö È®ÀÎÇϽʽÿÀ. + +½Ã½ºÅÛÀ» ´Ù½Ã ½ÃÀÛÇÑ ÈÄ¿¡ [2]ÀÇ ±¸¼ºÀ» ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù. Áö±Ý ´Ù½Ã ½ÃÀÛÇÏ·Á¸é "¿¹"¸¦ ´©¸£°í, ³ªÁß¿¡ ¼öµ¿À¸·Î ´Ù½Ã ½ÃÀÛÇÏ·Á¸é "¾Æ´Ï¿À"¸¦ ´©¸£½Ê½Ã¿À. + +º¯°æµÈ ±¸¼º ¼³Á¤À» [2]¿¡ Àû¿ëÇÏ·Á¸é ½Ã½ºÅÛÀ» ´Ù½Ã ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù. Áö±Ý ´Ù½Ã ½ÃÀÛÇÏ·Á¸é "¿¹"¸¦ ´©¸£°í, ³ªÁß¿¡ ¼öµ¿À¸·Î ´Ù½Ã ½ÃÀÛÇÏ·Á¸é "¾Æ´Ï¿À"¸¦ ´©¸£½Ê½Ã¿À. + +[2]ÀÇ ¼³Ä¡°¡ ÇöÀç ÁßÁöµÈ »óÅÂÀÔ´Ï´Ù. °è¼ÓÇÏ·Á¸é ¼³Ä¡Çϸ鼭 º¯°æµÈ »çÇ×À» Ãë¼ÒÇØ¾ß ÇÕ´Ï´Ù. º¯°æµÈ »çÇ×µéÀ» Ãë¼ÒÇϽðڽÀ´Ï±î? + +ÀÌ Á¦Ç°ÀÇ ¼³Ä¡ ÀÛ¾÷ÀÌ ½ÇÇà ÁßÀÔ´Ï´Ù. °è¼ÓÇÏ·Á¸é Àü¿¡ ¼³Ä¡Çϸ鼭 º¯°æµÈ »çÇ×À» ´Ù½Ã µÇµ¹·Á¾ß ÇÕ´Ï´Ù. º¯°æµÈ »çÇ×À» Ãë¼ÒÇϽðڽÀ´Ï±î? + +Á¦Ç° [2]ÀÇ ¼³Ä¡ ÆÐŰÁö¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù. ¼³Ä¡ ÆÐŰÁö '[3]'ÀÇ »çº»À» »ç¿ëÇØ¼­ ¼³Ä¡¸¦ ´Ù½Ã ½ÃµµÇϽʽÿÀ. + +¼³Ä¡¸¦ ¼º°øÀûÀ¸·Î ¿Ï·áÇß½À´Ï´Ù. + +¼³Ä¡¸¦ ½ÇÆÐÇß½À´Ï´Ù. + +Á¦Ç°: [2] - [3] + +ÄÄÇ»Å͸¦ ÀÌÀü »óÅ·ΠµÇµ¹¸®°Å³ª, ³ªÁß¿¡ ´Ù½Ã ¼³Ä¡ÇØ¾ß ÇÕ´Ï´Ù. ÀÌÀü »óÅ·ΠµÇµ¹¸®½Ã°Ú½À´Ï±î? + +µð½ºÅ©¿¡ ¼³Ä¡ Á¤º¸¸¦ ¾²´Âµ¥ ¿À·ù°¡ »ý°å½À´Ï´Ù. µð½ºÅ© °ø°£ÀÌ ÃæºÐÇÑÁö È®ÀÎÇϰí "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°Å³ª, ¼³Ä¡¸¦ ³¡³»·Á¸é "Ãë¼Ò"¸¦ ´©¸£½Ê½Ã¿À. + +»ç¿ëÀÚÀÇ ÄÄÇ»Å͸¦ ÀÌÀü »óÅ·ΠµÇµ¹¸®´Âµ¥ ÇÊ¿äÇÑ ÆÄÀÏ Áß ÀϺθ¦ ãÀ» ¼ö ¾ø½À´Ï´Ù. º¹±¸ÇÒ ¼ö ¾ø½À´Ï´Ù. + +[2](ÀÌ)°¡ ÇÊ¿äÇÑ Á¦Ç° Áß Çϳª¸¦ ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. {{½Ã½ºÅÛ ¿À·ù: [3].}} + +ÀÌÀü ¹öÀüÀÇ [2]À»(¸¦) Á¦°ÅÇÒ ¼ö ¾ø½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. {{½Ã½ºÅÛ ¿À·ù [3].}} + +¼³Ä¡µÊ [2] + +±¸¼ºµÊ [2] + +Á¦°ÅµÊ [2] + +µðÁöÅÐ ¼­¸í Á¤Ã¥ÀÌ [2] ÆÄÀÏÀ» °ÅºÎÇß½À´Ï´Ù. + +Windows Installer ¼­ºñ½º¸¦ ¾×¼¼½ºÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº Windows¸¦ ¾ÈÀü ¸ðµå¿¡¼­ ½ÇÇà ÁßÀ̰ųª, Windows Installer°¡ ¿Ã¹Ù¸£°Ô ¼³Ä¡µÇÁö ¾Ê¾ÒÀ½À» ³ªÅ¸³À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô Áö¿øÀ» ¿äûÇϽʽÿÀ. + +ÀÌ Windows Installer ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. ÀÌ ¼³Ä¡¸¦ ¿Ï·áÇϱâ À§ÇØ ÇÊ¿äÇÑ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ³ª ÆÐŰÁö °ø±Þ¾÷ü¿¡ ¹®ÀÇÇϽʽÿÀ. {{»ç¿ëÀÚ ÁöÁ¤ ÀÛ¾÷ [2] ½ºÅ©¸³Æ® ¿À·ù [3], [4]: [5] ÁÙ:[6], ¿­:[7], [8] }} + +ÀÌ Windows Installer ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. ÀÌ ¼³Ä¡¸¦ ¿Ï·áÇϱâ À§ÇØ ÇÊ¿äÇÑ ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ³ª ÆÐŰÁö °ø±Þ¾÷ü¿¡ ¹®ÀÇÇϽʽÿÀ. {{ÀÛ¾÷: [2], À§Ä¡: [3], ¸í·É: [4] }} + +ÀÌ Windows Installer ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. ¼³Ä¡ ÇÁ·Î±×·¥ÀÇ ÀϺηΠ½ÇÇàµÇ´Â ÇÁ·Î±×·¥ÀÌ ¿¹»ó´ë·Î ¿Ï·áµÇÁö ¾Ê¾Ò½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ³ª ÆÐŰÁö °ø±Þ¾÷ü¿¡ ¹®ÀÇÇϽʽÿÀ. {{ÀÛ¾÷ [2], À§Ä¡: [3], ¸í·É: [4] }} + +ÀÌ Windows Installer ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. ÀÌ ¼³Ä¡¸¦ ¿Ï·áÇϱâ À§ÇØ ÇÊ¿äÇÑ DLLÀ» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ³ª ÆÐŰÁö °ø±Þ¾÷ü¿¡ ¹®ÀÇÇϽʽÿÀ. {{ÀÛ¾÷ [2], Ç׸ñ: [3], ¶óÀ̺귯¸®: [4] }} + +Á¦°Å¸¦ ¼º°øÀûÀ¸·Î ¿Ï·áÇß½À´Ï´Ù. + +Á¦°ÅÇÏÁö ¸øÇß½À´Ï´Ù. + +º¸±ÞÀ» ¼º°øÀûÀ¸·Î ¿Ï·áÇß½À´Ï´Ù. + +º¸±ÞÇÏÁö ¸øÇß½À´Ï´Ù. + +±¸¼ºÀ» ¼º°øÀûÀ¸·Î ¿Ï·áÇß½À´Ï´Ù. + +±¸¼ºÇÏÁö ¸øÇß½À´Ï´Ù. + +Administrator¸¸ÀÌ ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥À» Á¦°ÅÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥À» Á¦°ÅÇÏ·Á¸é, Administrator·Î ·Î±×¿ÂÇϰųª, ±â¼ú Áö¿ø ±×·ì¿¡ µµ¿òÀ» ¿äûÇϽʽÿÀ. + +°æ·Î [2]ÀÌ(°¡) À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù. Á¤È®ÇÑ °æ·Î¸¦ ÁöÁ¤ÇϽʽÿÀ. + +¸Þ¸ð¸®°¡ ºÎÁ·ÇÕ´Ï´Ù. ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥À» Á¾·áÇÑ ÈÄ ´Ù½Ã ½ÃµµÇϽʽÿÀ. + +µå¶óÀ̺ê [2]¿¡ µð½ºÅ©°¡ ¾ø½À´Ï´Ù. µð½ºÅ©¸¦ ³ÖÀº ÈÄ "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°Å³ª, "Ãë¼Ò"¸¦ ´­·¯¼­ ÀÌÀü¿¡ ¼±ÅÃÇÑ º¼·ýÀ¸·Î ´Ù½Ã µ¹¾Æ°¡½Ê½Ã¿À. + +µå¶óÀ̺ê [2]¿¡ µð½ºÅ©°¡ ¾ø½À´Ï´Ù. µð½ºÅ©¸¦ ³ÖÀº ÈÄ "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°Å³ª, "Ãë¼Ò"¸¦ ´­·¯¼­ "ã¾Æº¸±â" ´ëÈ­ »óÀÚ·Î À̵¿ÇÑ ÈÄ ´Ù¸¥ º¼·ýÀ» ¼±ÅÃÇϽʽÿÀ. + +Æú´õ [2]ÀÌ(°¡) Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ±âÁ¸¿¡ ÀÖ´ø Æú´õÀÇ °æ·Î¸¦ ÀÔ·ÂÇϽʽÿÀ. + +ÀÌ Æú´õ¿¡ ´ëÇÑ Àб⠱ÇÇÑÀÌ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù. + +¼³Ä¡ÇÒ ´ë»ó Æú´õ¸¦ ÁöÁ¤ÇÏÁö ¾Ê¾Ò½À´Ï´Ù. + +´ÙÀ½ ¿øº» ¼³Ä¡ µ¥ÀÌÅͺ£À̽º¸¦ Àд Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù: [2]. + +´Ù½Ã ºÎÆÃ ÀÛ¾÷À» ¼³Á¤Çϰí ÀÖ½À´Ï´Ù: ÆÄÀÏ [2]ÀÇ À̸§À» [3](À¸)·Î ¹Ù²Ù°í ÀÖ½À´Ï´Ù. ÀÛ¾÷À» ¿Ï·áÇÏ·Á¸é ´Ù½Ã ºÎÆÃÇØ¾ß ÇÕ´Ï´Ù. + +´Ù½Ã ºÎÆÃ ÀÛ¾÷À» ¼³Á¤Çϰí ÀÖ½À´Ï´Ù: ÆÄÀÏ [2]À»(¸¦) »èÁ¦Çϰí ÀÖ½À´Ï´Ù. ÀÛ¾÷À» ¿Ï·áÇÏ·Á¸é ´Ù½Ã ºÎÆÃÇØ¾ß ÇÕ´Ï´Ù. + +¸ðµâ [2]À»(¸¦) µî·ÏÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù. HRESULT [3]. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +¸ðµâ [2]ÀÇ µî·ÏÀ» ÇØÁ¦Çϴµ¥ ½ÇÆÐÇß½À´Ï´Ù. HRESULT [3]. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +ÆÐŰÁö [2]À»(¸¦) ij½ÃÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù. ¿À·ù: [3]. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +[2] ±Û²ÃÀ» µî·ÏÇÏÁö ¸øÇß½À´Ï´Ù. ±Û²ÃÀ» ¼³Ä¡ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÃæºÐÇÑÁö, ±×¸®°í ÀÌ ±Û²ÃÀ» ½Ã½ºÅÛ¿¡¼­ Áö¿øÇÏ´ÂÁö È®ÀÎÇϽʽÿÀ. + +[2] ±Û²ÃÀÇ µî·ÏÀ» ÇØÁ¦ÇÏÁö ¸øÇß½À´Ï´Ù. ±Û²ÃÀ» Á¦°ÅÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÃæºÐÈ÷ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +¹Ù·Î °¡±â [2]À»(¸¦) ¸¸µéÁö ¸øÇß½À´Ï´Ù. ´ë»ó Æú´õ°¡ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× Æú´õ¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +¹Ù·Î °¡±â [2]À»(¸¦) Á¦°ÅÇÏÁö ¸øÇß½À´Ï´Ù. ¹Ù·Î °¡±â ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏÀ» ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +ÆÄÀÏ [2]ÀÇ Çü½Ä ¶óÀ̺귯¸®¸¦ µî·ÏÇÏÁö ¸øÇß½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +ÆÄÀÏ [2]ÀÇ Çü½Ä ¶óÀ̺귯¸®¸¦ µî·ÏÇÏÁö ¸øÇß½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +ini ÆÄÀÏ [2][3]À»(¸¦) ¾÷µ¥ÀÌÆ®ÇÏÁö ¸øÇß½À´Ï´Ù. ±× ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ÆÄÀÏ¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +´Ù½Ã ºÎÆÃÇÒ ¶§ ÆÄÀÏ [2]À»(¸¦) [3](À¸)·Î ¹Ù²Ùµµ·Ï ¼³Á¤ÇÏÁö ¸øÇß½À´Ï´Ù. ÆÄÀÏ [3]¿¡ ¾²±â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +ODBC µå¶óÀ̹ö °ü¸®ÀÚ¸¦ Á¦°ÅÇϴµ¥ ¿À·ù°¡ »ý°å½À´Ï´Ù. ODBC ¿À·ù [2]: [3]. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +ODBC µå¶óÀ̹ö °ü¸®ÀÚ¸¦ ¼³Ä¡ÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù. ODBC ¿À·ù [2]: [3]. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÜ. + +ODBC µå¶óÀ̹ö Á¦°ÅÇϴµ¥ ¿À·ù°¡ »ý°å½À´Ï´Ù:[4]. ODBC ¿À·ù [2]: [3]. ODBC µå¶óÀ̹ö¸¦ Á¦°ÅÇÒ ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +ODBC µå¶óÀ̹ö¸¦ ¼³Ä¡ÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù: [4]. ODBC ¿À·ù [2]: [3]. [4] ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏÀ» ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +ODBC µ¥ÀÌÅÍ ¿øº»À» ±¸¼ºÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù: [4]. ODBC ¿À·ù [2]: [3]. [4] ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏ¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +¼­ºñ½º '[2]'([3])À»(¸¦) ½ÃÀÛÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù. ½Ã½ºÅÛ ¼­ºñ½º¸¦ ½ÃÀÛÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +¼­ºñ½º '[2]'([3])À»(¸¦) ÁßÁöÇÏÁö ¸øÇß½À´Ï´Ù. ½Ã½ºÅÛ ¼­ºñ½º¸¦ Áß´ÜÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +¼­ºñ½º '[2]'([3])À»(¸¦) »èÁ¦ÇÏÁö ¸øÇß½À´Ï´Ù. ½Ã½ºÅÛ ¼­ºñ½º¸¦ »èÁ¦ÇÒ ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +¼­ºñ½º '[2]'([3])À»(¸¦) ¼³Ä¡ÇÏÁö ¸øÇß½À´Ï´Ù. ½Ã½ºÅÛ ¼­ºñ½º¸¦ ¼³Ä¡ÇÒ ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +ȯ°æ º¯¼ö '[2]'À»(¸¦) ¾÷µ¥ÀÌÆ®ÇÏÁö ¸øÇß½À´Ï´Ù. ȯ°æ º¯¼ö¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +¸ðµç »ç¿ëÀÚ°¡ ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ´Â ½Ã½ºÅÛ¿¡ ¼³Ä¡ ÀÛ¾÷À» ½ÇÇàÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ¾ø½À´Ï´Ù. °ü¸®ÀÚ ±ÇÇÑÀ¸·Î ·Î±×¿ÂÇØ¼­ ¼³Ä¡¸¦ ´Ù½Ã ½ÇÇàÇϽʽÿÀ. + +'[3]' ÆÄÀÏ¿¡ ´ëÇÑ ÆÄÀÏ º¸¾ÈÀ» ¼³Á¤ÇÏÁö ¸øÇß½À´Ï´Ù. ¿À·ù: [2]. ÀÌ ÆÄÀÏ¿¡ ´ëÇÑ º¸¾ÈÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ. + +±¸¼º ¿ä¼Ò ¼­ºñ½º(COM+ 1.0)°¡ ÀÌ ÄÄÇ»ÅÍ¿¡ ¼³Ä¡µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù. Component Service°¡ ÀÖ¾î¾ß ¼³Ä¡¸¦ ³¡³¾ ¼ö ÀÖ½À´Ï´Ù. Component Service´Â Windows 2000¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. + +COM+ ÀÀ¿ë ÇÁ·Î±×·¥À» µî·ÏÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù. ÀÚ¼¼ÇÑ Á¤º¸´Â ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +COM+ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù. ÀÚ¼¼ÇÑ Á¤º¸´Â ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. + +¼­ºñ½º '[2]'([3])ÀÇ ¼³¸íÀ» ¹Ù²ÙÁö ¸øÇß½À´Ï´Ù. + +½Ã½ºÅÛ ÆÄÀÏ [2]À»(¸¦) Windows¿¡¼­ º¸È£Çϰí À־ ¾÷µ¥ÀÌÆ®ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ ÆÄÀÏÀ» Á¦´ë·Î ½ÇÇàÇÏ·Á¸é ÀÌ ÇÁ·Î±×·¥ÀÇ ¿î¿µ üÁ¦¸¦ ¾÷µ¥ÀÌÆ®ÇØ¾ß ÇÕ´Ï´Ù. {{ÆÐŰÁö ¹öÀü: [3], OS º¸È£ ¹öÀü: [4]}} + +Windows Installer ¼­ºñ½º°¡ º¸È£µÈ Windows ÆÄÀÏ [2]À»(¸¦) ¾÷µ¥ÀÌÆ®ÇÏÁö ¸øÇß½À´Ï´Ù. {{ÆÐŰÁö ¹öÀü: [3], OS º¸È£ ¹öÀü: [4], SFP ¿À·ù: [5]}} + +Windows Installer ¼­ºñ½º°¡ Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ º¸È£µÈ Windows ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ®ÇÒ ¼ö ¾ø½À´Ï´Ù. {{SFP ¿À·ù: [2]. º¸È£µÈ ÆÄÀÏ ¸ñ·Ï:\r\n[3]}} + +ÀÌ ÄÄÇ»ÅÍÀÇ Á¤Ã¥ÀÌ »ç¿ëÀÚ ¼³Ä¡¸¦ ÇÒ ¼ö ¾ø°Ô µÇ¾î ÀÖ½À´Ï´Ù. + +¾î¼Àºí¸® ±¸¼º ¿ä¼Ò [2]À»(¸¦) ¼³Ä¡ÇÏ´Â µ¿¾È ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. HRESULT: [3]. {{¾î¼Àºí¸® ÀÎÅÍÆäÀ̽º: [4], ÇÔ¼ö: [5], ¾î¼Àºí¸® À̸§: [6]}} + + diff --git a/src/WINNT/install/wix/lang/pt_BR/ActionText.wxi b/src/WINNT/install/wix/lang/pt_BR/ActionText.wxi new file mode 100644 index 000000000..9463da515 --- /dev/null +++ b/src/WINNT/install/wix/lang/pt_BR/ActionText.wxi @@ -0,0 +1,143 @@ + + +Aplicativo de anúncio + +Alocando espaço no Registro + +Procurando aplicativos instalados + +Vinculando executáveis + +Procurando produtos qualificados + +Calculando requisitos de espaço + +Calculando requisitos de espaço + +Criando pastas + +Criando atalhos + +Excluindo serviços + +Criando arquivos duplicados + +Calculando requisitos de espaço + +Procurando por aplicativos relacionados + +Gerando operações de script para ação: + +Copiando arquivos de instalação em rede + +Copiando novos arquivos + +Instalando componentes de ODBC + +Instalando novos serviços + +Instalando catálogo do sistema + +Validando instalação + +Avaliando condições de inicialização + +Migrando estados do recurso de aplicativos relacionados + +Movendo arquivos + +Publicando informações de montagem + +Cancelando publicação de informações de montagem + +Corrigindo arquivos + +Atualizando registro do componente + +Publicando componentes qualificados + +Publicando recursos do produto + +Publicando informações sobre o produto + +Registrando servidores de classes + +Registrando componentes e aplicativos do COM+ + +Registrando servidores de extensão + +Registrando fontes + +Registrando informações sobre MIME + +Registrando produto + +Registrando identificadores de programas + +Registrando bibliotecas de tipos + +Registrando usuário + +Removendo arquivos duplicados + +Atualizando seqüências de ambiente + +Removendo aplicativos + +Removendo arquivos + +Removendo pastas + +Removendo entradas dos arquivos INI + +Removendo componentes de ODBC + +Removendo valores do Registro do sistema + +Removendo atalhos + +Procurando produtos qualificados + +Repetindo a ação: + +Removendo arquivos de backup + +Registrando módulos + +Removendo registro de módulos + +Inicializando diretórios de ODBC + +Iniciando serviços + +Interrompendo serviços + +Removendo arquivos movidos + +Cancelando publicação de componentes qualificados + +Cancelando publicação de recursos do produto + +Cancelando publicação de informações sobre o produto + +Remover o registro de servidores de classes + +Removendo registro de componentes e aplicativos do COM+ + +Removendo o registro de servidores de extensão + +Removendo o registro de fontes + +Removendo registro de informações sobre MIME + +Removendo registro de identificadores de programas + +Removendo registro de bibliotecas de tipos + +Atualizando seqüências de ambiente + +Gravando valores de arquivos INI + +Gravando valores de Registro do sistema + + diff --git a/src/WINNT/install/wix/lang/pt_BR/Error.wxi b/src/WINNT/install/wix/lang/pt_BR/Error.wxi new file mode 100644 index 000000000..1fd868e8c --- /dev/null +++ b/src/WINNT/install/wix/lang/pt_BR/Error.wxi @@ -0,0 +1,319 @@ + + +{{Erro fatal: }} + +{{Erro [1]. }} + +Aviso [1]. + + + +Informações [1]. + +O Installer encontrou um erro inesperado ao instalar este pacote. Pode haver um problema com o pacote. O código de erro é [1]. {{Os argumentos são: [2], [3], [4]}} + + + +{{Disco cheio: }} + +Ação [Time]: [1]. [2] + +[ProductName] + +{[2]}{, [3]}{, [4]} + +Tipo de mensagem: [1], Argumento: [2] + +=== Log iniciado: [Date] [Time] === + +=== Log parado: [Date] [Time] === + +Ação iniciada [Time]: [1]. + +Ação concluída [Time]: [1]. Valor de retorno [2]. + +Tempo restante: {[1] minutos }{[2] segundos} + +Sem memória. Encerre outros aplicativos antes de tentar novamente. + +O Installer não está respondendo. + +Installer interrompido prematuramente. + +Aguarde enquanto o Windows configura o [ProductName] + +Reunindo as informações necessárias... + +Removendo versões anteriores deste aplicativo... + +Preparando para remover versões anteriores deste aplicativo... + +A instalação do {[ProductName] }foi concluída com êxito. + +A instalação do {[ProductName] }falhou. + +Erro ao ler do arquivo: [2]. {{ Erro do sistema [3].}} Verifique se o arquivo existe e se você pode acessá-lo. + +Não é possível criar o arquivo '[2]'. Já existe um diretório com este nome. Cancele a instalação e tente instalar em um local diferente. + +Insira o disco: [2] + +O Installer tem privilégios insuficientes para acessar este diretório: [2]. A instalação não pode continuar. Efetue logon como administrador ou entre em contato com o administrador do sistema. + +Erro ao gravar no arquivo: [2]. Verifique se você tem acesso a este diretório. + +Erro ao ler do arquivo: [2]. {{ Erro do sistema [3].}} Verifique se o arquivo existe e se você pode acessá-lo. + +Outro aplicativo tem acesso exclusivo ao arquivo '[2]'. Encerre todos os outros aplicativos e clique em 'Repetir'. + +Não há espaço em disco suficiente para instalar este arquivo: [2]. Libere espaço em disco e clique em 'Repetir', ou clique em 'Cancelar' para sair. + +Arquivo de origem não encontrado: [2]. Verifique se o arquivo existe e se você pode acessá-lo. + +Erro ao ler do arquivo: [3]. {{ Erro do sistema [2].}} Verifique se o arquivo existe e se você pode acessá-lo. + +Erro ao gravar no arquivo: [3]. {{ Erro do sistema [2].}} Verifique se você tem acesso a este diretório. + +Arquivo de origem não encontrado{{(gabinete)}}: [2]. Verifique se o arquivo existe e se você pode acessá-lo. + +Não é possível criar o diretório '[2]'. Já existe um arquivo com este nome. Renomeie ou remova o arquivo e clique em 'Repetir', ou clique em 'Cancelar' para sair. + +O volume [2] não está disponível no momento. Selecione outro volume. + +O caminho especificado '[2]' não está disponível. + +Não é possível gravar na pasta especificada: [2]. + +Ocorreu um erro na rede ao tentar ler do arquivo: [2] + +Ocorreu um erro ao tentar criar o diretório: [2] + +Ocorreu um erro na rede ao tentar criar o diretório: [2] + +Ocorreu um erro na rede ao tentar abrir o gabinete do arquivo de origem: [2] + +O caminho especificado é muito longo: [2] + +O Installer tem privilégios insuficientes para modificar este arquivo: [2]. + +Uma parte do caminho da pasta '[2]' é inválida. Talvez ela esteja vazia ou exceda o comprimento permitido pelo sistema. + +O caminho da pasta '[2]' contém palavras que não são válidas em caminhos de pastas. + +O caminho da pasta '[2]' contém um caractere inválido. + +'[2]' não é um nome de arquivo curto válido. + +Erro ao obter segurança do arquivo: [3] GetLastError: [2] + +Unidade inválida: [2] + +Erro ao aplicar patch no arquivo [2]. Provavelmente, ele foi atualizado por outros meios e não pode mais ser modificado por esse patch. Para obter mais informações, entre em contato com o fornecedor do patch. {{Erro do sistema: [3]}} + +Um arquivo necessário não pode ser instalado porque o arquivo de gabinete [2] não foi assinado digitalmente. Isso pode indicar que o arquivo de gabinete está corrompido. + +Um arquivo necessário não pode ser instalado porque o arquivo de gabinete [2] possui uma assinatura digital inválida. Isso pode indicar que o arquivo de gabinete está corrompido.{{ Erro [3] foi retornado pelo WinVerifyTrust.}} + +Falha ao copiar corretamente o arquivo [2]: erro de CRC. + +Falha ao mover corretamente o arquivo [2]: erro de CRC. + +Falha ao corrigir corretamente o arquivo [2]: erro de CRC. + +O arquivo '[2]' não pode ser instalado porque o arquivo não foi encontrado no arquivo de gabinete '[3]'. Isso pode indicar um erro de rede, um erro ao ler do CD-ROM ou um problema com este pacote. + +O arquivo de gabinete '[2]' necessário para esta instalação está corrompido e não pode ser usado. Isso pode indicar um erro de rede, um erro ao ler do CD-ROM ou um problema com este pacote. + +Erro ao criar um arquivo temporário necessário para concluir esta instalação.{{ Pasta: [3]. Código de erro do sistema: [2]}} + +Não foi possível criar a chave: [2]. {{ Erro do sistema [3].}} Verifique se você tem acesso suficiente a essa chave ou entre em contato com a equipe de suporte. + +Não foi possível abrir a chave: [2]. {{ Erro do sistema [3].}} Verifique se você tem acesso suficiente a essa chave ou entre em contato com a equipe de suporte. + +Não foi possível excluir o valor [2] da chave [3]. {{ Erro do sistema [4].}} Verifique se você tem acesso suficiente a essa chave ou entre em contato com a equipe de suporte. + +Não foi possível excluir a chave [2]. {{ Erro do sistema [3].}} Verifique se você tem acesso suficiente a essa chave ou entre em contato com a equipe de suporte. + +Não foi possível ler o valor [2] da chave [3]. {{ Erro do sistema [4].}} Verifique se você tem acesso suficiente a essa chave ou entre em contato com a equipe de suporte. + +Não foi possível gravar o valor [2] na chave [3]. {{ Erro do sistema [4].}} Verifique se você tem acesso suficiente a essa chave ou entre em contato com a equipe de suporte. + +Não foi possível obter nomes de valores para a chave [2]. {{ Erro do sistema [3].}} Verifique se você tem acesso suficiente a essa chave ou entre em contato com a equipe de suporte. + +Não foi possível obter nomes de sub-chaves para a chave [2]. {{ Erro do sistema [3].}} Verifique se você tem acesso suficiente a essa chave ou entre em contato com a equipe de suporte. + +Não foi possível ler informações de segurança para a chave [2]. {{ Erro do sistema [3].}} Verifique se você tem acesso suficiente a essa chave ou entre em contato com a equipe de suporte. + +Não foi possível aumentar o espaço disponível do Registro. São necessários [2] KB de espaço livre no Registro para a instalação deste aplicativo. + +Outra instalação está em andamento. Você deve concluir a instalação anterior antes de continuar a instalação atual. + +Erro ao acessar dados protegidos. Certifique-se de que o Windows Installer esteja configurado corretamente e tente instalar novamente. + +Usuário '[2]' iniciou previamente uma instalação do produto '[3]'. Esse usuário precisará executar essa instalação novamente antes do produto poder ser utilizado. Sua instalação atual continuará agora. + +Usuário '[2]' iniciou previamente a instalação do produto '[3]'. Esse usuário precisará executar essa instalação novamente antes do produto poder ser utilizado. + +Espaço insuficiente em disco -- Volume: '[2]'; espaço necessário: [3] KB; espaço disponível: [4] KB. Libere espaço em disco e tente novamente. + +Tem certeza de que deseja cancelar? + +O arquivo [2][3] está sendo mantido em uso { pelo seguinte processo: Nome: [4], Identificação: [5], Título da janela: '[6]'}. Feche esse aplicativo e tente novamente. + +O produto '[2]' já está instalado, impedindo a instalação deste produto. Os dois produtos são incompatíveis. + +Espaço insuficiente em disco no volume '[2]' para continuar a instalação com recuperação ativada. [3] KB são necessários, mas há apenas [4] KB disponíveis. Clique em 'Ignorar' para continuar a instalação sem salvar informações de recuperação, 'Repetir' para verificar o espaço disponível em disco novamente ou em 'Cancelar' para sair da instalação. + +Não foi possível acessar o local da rede [2]. + +Os seguintes aplicativos devem ser fechados antes de continuar a instalação: + +Não foi possível localizar qualquer produto compatível instalado anteriormente na máquina para a instalação deste produto. + +Erro ao aplicar as configurações de segurança. [2] não é um usuário ou grupo válido. Isso pode indicar um problema com o pacote ou na conexão com um controlador de domínio na rede. Verifique sua conexão de rede e clique em 'Repetir' ou em 'Cancelar' para encerrar a instalação. {{Não é possível localizar a SID do usuário, erro de sistema [3]}} + +A chave [2] não é válida. Verifique se você inseriu a chave correta. + +O Installer deve reiniciar o sistema para que a configuração de [2] possa continuar. Clique em 'Sim' para reiniciar agora ou em 'Não' se desejar reiniciar manualmente mais tarde. + +Você deve reiniciar o sistema para que as alterações de configuração de [2] tenham efeito. Clique em 'Sim' para reiniciar agora ou em 'Não' se desejar reiniciar manualmente mais tarde. + +Uma instalação do [2] está suspensa no momento. Você deve desfazer as alterações feitas por essa instalação para continuar. Deseja desfazer essas alterações? + +Uma instalação anterior deste produto está em andamento. Você deve desfazer as alterações feitas por essa instalação para continuar. Deseja desfazer essas alterações? + +Um pacote de instalação para o produto [2] não pode ser encontrado. Tente a instalação novamente usando uma cópia válida do pacote de instalação '[3]'. + +Instalação concluída com êxito. + +Falha na instalação. + +Produto: [2] -- [3] + +Talvez você precise recuperar o estado anterior do computador ou continuar a instalação mais tarde. Deseja recuperar? + +Ocorreu um erro ao gravar informações de instalação em disco. Certifique-se de que haja espaço em disco suficiente disponível e clique em 'Repetir', ou clique em 'Cancelar' para finalizar a instalação. + +Um ou mais dos arquivos necessários para recuperar o estado anterior do computador não pôde ser encontrado. A restauração não será possível. + +[2] não pode instalar um de seus produtos requeridos. Entre em contato com a equipe de suporte técnico. {{Erro do sistema: [3].}} + +A versão anterior de [2] não pode ser removida. Entre em contato com a equipe de suporte técnico. {{Erro do sistema [3].}} + +Instalado [2] + +Configurado [2] + +Removido [2] + +O arquivo [2] foi rejeitado pela diretiva de assinatura digital. + +O serviço do Windows Installer não pôde ser acessado. Isso pode ocorrer se você estiver executando o Windows em modo de segurança ou se o Windows Installer não tiver sido instalado corretamente. Entre em contato com sua equipe de suporte para obter ajuda. + +Há um problema com este pacote do Windows Installer. Um script necessário para a conclusão desta instalação não pôde ser executado. Entre em contato com sua equipe de suporte ou com o fornecedor do pacote. {{Ação personalizada [2] erro de script [3], [4]: [5] Linha [6], Coluna [7], [8] }} + +Há um problema com este pacote do Windows Installer. Um programa necessário para a conclusão desta instalação não pôde ser executado. Entre em contato com sua equipe de suporte ou com o fornecedor do pacote. {{Ação: [2], localização: [3], comando: [4] }} + +Há um problema com este pacote do Windows Installer. Um programa executado como parte da instalação não foi concluído como esperado. Entre em contato com sua equipe de suporte ou com o fornecedor do pacote. {{Ação: [2], localização: [3], comando: [4] }} + +Há um problema com este pacote do Windows Installer. Uma dll necessária para a conclusão desta instalação não pôde ser executada. Entre em contato com sua equipe de suporte ou com o fornecedor do pacote {{Ação [2], entrada: [3], biblioteca: [4] }} + +A remoção foi concluída com êxito. + +Falha na remoção. + +O anúncio foi concluído com êxito. + +Falha no anúncio. + +A configuração foi concluída com êxito. + +Falha na configuração. + +É preciso ser um administrador para remover este aplicativo. Para remover este aplicativo, faça logon como administrador ou contacte a equipe de suporte técnico para obter ajuda. + +O caminho [2] não é válido. Especifique um caminho válido. + +Sem memória. Encerre outros aplicativos antes de tentar novamente. + +Não há nenhum disco na unidade [2]. Insira um disco e clique em 'Repetir', ou clique em 'Cancelar' para voltar ao volume selecionado anteriormente. + +Não há nenhum disco na unidade [2]. Insira um disco e clique em 'Repetir', ou clique em 'Cancelar' para retornar à caixa de procura e selecione um volume diferente. + +A pasta [2] não existe. Insira um caminho para uma pasta existente. + +Você tem privilégios insuficientes para ler esta pasta. + +Uma pasta de destino válida não pôde ser determinada para a instalação. + +Erro ao tentar ler a partir do banco de dados de instalação de origem: [2]. + +Programando operação de reinicialização: renomeando o arquivo [2] para [3]. É preciso reinicializar o computador para concluir a operação. + +Programando operação de reinicialização: excluindo o arquivo [2]. É preciso reinicializar o computador para concluir a operação. + +Módulo [2] falhou ao registrar. HRESULT [3]. Entre em contato com a equipe de suporte. + +Módulo [2] falhou ao remover registro. HRESULT [3]. Entre em contato com a equipe de suporte. + +Falha ao armazenar o pacote em cache [2]. Erro: [3]. Entre em contato com a equipe de suporte. + +Não foi possível registrar a fonte [2]. Verifique se você tem permissões suficientes para instalar fontes e se o sistema oferece suporte para essa fonte. + +Não foi possível remover o registro da fonte [2]. Verifique se você tem permissões suficientes para remover fontes. + +Não foi possível criar o atalho [2]. Verifique se a pasta de destino existe e se você pode acessá-la. + +Não foi possível remover o atalho [2]. Verifique se o arquivo de atalho existe e se você pode acessá-lo. + +Não foi possível registrar a biblioteca de tipos para o arquivo [2]. Entre em contato com a equipe de suporte. + +Não foi possível remover o registro da biblioteca de tipos para o arquivo [2]. Entre em contato com a equipe de suporte. + +Não foi possível atualizar o arquivo ini [2][3]. Verifique se o arquivo existe e se você pode acessá-lo. + +Não foi possível agendar a substituição do arquivo [3] pelo arquivo [2] ao reinicializar. Verifique se você tem permissões de gravação para o arquivo [3]. + +Erro ao remover o gerenciador de driver ODBC; erro de ODBC [2]: [3]. Entre em contato com a equipe de suporte. + +Erro ao instalar o gerenciador de driver ODBC; erro de ODBC [2]: [3]. Entre em contato com a equipe de suporte. + +Erro ao remover o driver ODBC: [4]; erro de ODBC [2]: [3]. Verifique se você tem privilégios suficientes para remover drivers ODBC. + +Erro ao instalar o driver ODBC: [4]; erro de ODBC [2]: [3]. Verifique se o arquivo [4] existe e se você pode acessá-lo. + +Erro ao configurar fonte de dados ODBC: [4]; erro de ODBC [2]: [3]. Verifique se o arquivo [4] existe e se você pode acessá-lo. + +Serviço '[2]' ([3]) falhou ao iniciar. Verifique se você tem privilégios suficientes para iniciar os serviços do sistema. + +Serviço '[2]' ([3]) não pôde ser interrompido. Verifique se você tem privilégios suficientes para interromper os serviços do sistema. + +Serviço '[2]' ([3]) não pôde ser excluído. Verifique se você tem privilégios suficientes para remover serviços do sistema. + +Serviço '[2]' ([3]) não pôde ser instalado. Verifique se você tem privilégios suficientes para instalar os serviços do sistema. + +Não foi possível atualizar a variável de ambiente '[2]'. Verifique se você tem privilégios suficientes para modificar variáveis de ambiente. + +Você não tem privilégios suficientes para concluir esta instalação para todos os usuários da máquina. Efetue logon como administrador e tente essa instalação novamente. + +Não foi possível definir a segurança de arquivo para o arquivo '[3]'. Erro: [2]. Verifique se você tem privilégios suficientes para modificar as permissões de segurança desse arquivo. + +Os serviços de componentes (COM+ 1.0) não estão instalados neste computador. Esta instalação requer os serviços de componentes para ser concluída com êxito. Os serviços de componentes estão disponíveis no Windows 2000. + +Erro ao registrar o aplicativo do COM+. Entre em contato com a equipe de suporte para obter mais informações. + +Erro ao remover o registro do aplicativo do COM+. Entre em contato com a equipe de suporte para obter mais informações. + +A descrição do serviço '[2]' ([3]) não pôde ser alterada. + +O serviço Windows Installer não pode atualizar o arquivo do sistema [2] porque ele está protegido pelo Windows. Talvez você precise atualizar o sistema operacional para que o programa funcione devidamente. {{Versão do pacote: [3], Versão protegida do SO: [4]}} + +O serviço Windows Installer não pode atualizar o arquivo protegido pelo Windows [2]. {{Versão do pacote: [3], Versão protegida do SO: [4], Erro do SFP: [5]}} + +O serviço do Windows Installer não pode atualizar um ou mais arquivos protegidos do Windows. {{Erro SFP: [2]. Lista de arquivos protegidos:\r\n[3]}} + +As instalações de usuário estão desativadas por meio da diretiva neste computador. + +Erro ao instalar o componente de montagem [2]. HRESULT: [3]. {{interface de montagem: [4], função: [5], nome da montagem: [6]}} + + diff --git a/src/WINNT/install/wix/lang/zh_CN/ActionText.wxi b/src/WINNT/install/wix/lang/zh_CN/ActionText.wxi new file mode 100644 index 000000000..ba32b7dcd --- /dev/null +++ b/src/WINNT/install/wix/lang/zh_CN/ActionText.wxi @@ -0,0 +1,143 @@ + + +֪ͨӦÓóÌÐò + +ÕýÔÚ·ÖÅä×¢²á±í¿Õ¼ä + +ÕýÔÚËÑË÷ÒѰ²×°µÄÓ¦ÓóÌÐò + +°ó¶¨¿ÉÖ´ÐÐÎļþ + +ÕýÔÚËÑË÷·ûºÏ×ʸñµÄ²úÆ· + +ÕýÔÚ¼ÆËã¿Õ¼äÐèÇó + +ÕýÔÚ¼ÆËã¿Õ¼äÐèÇó + +ÕýÔÚ´´½¨Îļþ¼Ð + +ÕýÔÚ´´½¨¿ì½Ý·½Ê½ + +ÕýÔÚɾ³ý·þÎñ + +ÕýÔÚ´´½¨Öظ´Îļþ + +ÕýÔÚ¼ÆËã¿Õ¼äÐèÇó + +ÕýÔÚËÑË÷Ïà¹Ø²úÆ· + +ÕýÔÚÉú³É½Å±¾²Ù×÷£¬ÓÃÓÚ£º + +ÕýÔÚ¸´ÖÆÍøÂç°²×°Îļþ + +ÕýÔÚ¸´ÖÆÐÂÎļþ + +ÕýÔÚ°²×° ODBC ×é¼þ + +ÕýÔÚ°²×°Ð·þÎñ + +ÕýÔÚ°²×°ÏµÍ³Ä¿Â¼ + +ÕýÔÚÑéÖ¤°²×° + +ÕýÔÚÆÀ¹ÀÆô¶¯Ìõ¼þ + +ÕýÔÚ´ÓÏà¹ØÓ¦ÓóÌÐòÇ¨ÒÆ¹¦ÄÜ + +ÕýÔÚÒÆ¶¯Îļþ + +·¢Ðлã±àÐÅÏ¢ + +Í£Ö¹·¢Ðлã±àÐÅÏ¢ + +ÕýÔÚÐÞ²¹Îļþ + +ÕýÔÚ¸üÐÂ×é¼þ×¢²á±í + +ÕýÔÚ·¢²¼ºÏ¸ñµÄ×é¼þ + +ÕýÔÚ·¢²¼²úÆ·¹¦ÄÜ + +ÕýÔÚ·¢²¼²úÆ·ÐÅÏ¢ + +ÕýÔÚ×¢²áÀà·þÎñÆ÷ + +ÕýÔÚ×¢²á COM+ Ó¦ÓóÌÐòºÍ×é¼þ + +ÕýÔÚ×¢²áÀ©Õ¹·þÎñÆ÷ + +ÕýÔÚ×¢²á×ÖÌå + +ÕýÔÚ×¢²á MIME ÐÅÏ¢ + +ÕýÔÚ×¢²á²úÆ· + +ÕýÔÚ×¢²á³ÌÐò±êʶ·û + +ÕýÔÚ×¢²áÀàÐÍ¿â + +ÕýÔÚ×¢²áÓû§ + +ÕýÔÚɾ³ýÖØ¸´µÄÎļþ + +ÕýÔÚ¸üл·¾³×Ö·û´® + +ÕýÔÚɾ³ýÓ¦ÓóÌÐò + +ÕýÔÚɾ³ýÎļþ + +ÕýÔÚɾ³ýÎļþ¼Ð + +ÕýÔÚɾ³ý INI ÎļþÌõÄ¿ + +ÕýÔÚɾ³ý ODBC ×é¼þ + +ÕýÔÚɾ³ýϵͳע²á±íÖµ + +ÕýÔÚɾ³ý¿ì½Ý·½Ê½ + +ÕýÔÚËÑË÷·ûºÏ×ʸñµÄ²úÆ· + +»Ø¹ö²Ù×÷: + +ÕýÔÚɾ³ý±¸·ÝÎļþ + +ÕýÔÚ×¢²áÄ£¿é + +ÕýÔÚ³·ÏúÄ£¿éµÄ×¢²á + +ÕýÔÚ³õʼ»¯ ODBC Ŀ¼ + +ÕýÔÚÆô¶¯·þÎñ + +ÕýÔÚÍ£Ö¹·þÎñ + +ÕýÔÚɾ³ýÒÆ¶¯¹ýµÄÎļþ + +ÕýÔÚÈ¡ÏûºÏ¸ñ×é¼þµÄ·¢²¼ + +ÕýÔÚÈ¡Ïû²úÆ·¹¦Äܵķ¢²¼ + +ÕýÔÚÈ¡Ïû²úÆ·ÐÅÏ¢µÄ·¢²¼ + +ÕýÔÚ³·ÏúÀà·þÎñÆ÷µÄ×¢²á + +ÕýÔÚ³·Ïú COM+ Ó¦ÓóÌÐòºÍ×é¼þµÄ×¢²á + +ÕýÔÚ³·ÏúÀ©Õ¹·þÎñÆ÷µÄ×¢²á + +ÕýÔÚ³·Ïú×ÖÌåµÄ×¢²á + +ÕýÔÚ³·Ïú MIME ÐÅÏ¢µÄ×¢²á + +ÕýÔÚ³·Ïú³ÌÐò±êʶ·ûµÄ×¢²á + +ÕýÔÚ³·ÏúÀàÐÍ¿âµÄ×¢²á + +ÕýÔÚ¸üл·¾³×Ö·û´® + +ÕýÔÚдÈë INI ÎļþÊýÖµ + +ÕýÔÚдÈëϵͳע²á±íÖµ + + diff --git a/src/WINNT/install/wix/lang/zh_CN/Error.wxi b/src/WINNT/install/wix/lang/zh_CN/Error.wxi new file mode 100644 index 000000000..00726762b --- /dev/null +++ b/src/WINNT/install/wix/lang/zh_CN/Error.wxi @@ -0,0 +1,319 @@ + + +{{ÖÂÃü´íÎó: }} + +{{´íÎó [1]¡£}} + +¾¯¸æ [1]¡£ + + + +ÐÅÏ¢ [1]¡£ + +°²×°³ÌÐòÔÚ°²×°´ËÈí¼þ°üʱÓöµ½Ò»¸ö´íÎó¡£Õâ¿ÉÄܱíʾ´ËÈí¼þ°üÓÐ´í¡£´íÎóÂëÊÇ [1]¡£{{²ÎÊýÊÇ: [2], [3], [4]}} + + + +{{´ÅÅÌÒÑÂú: }} + +²Ù×÷ [Time]: [1]. [2] + +[ProductName] + +{[2]}{, [3]}{, [4]} + +ÏûÏ¢ÀàÐÍ: [1]£¬ ²ÎÊý: [2] + +=== ¼Ç¼¿ªÊ¼: [Date] [Time] === + +=== ¼Ç¼ֹͣ: [Date] [Time] === + +²Ù×÷¿ªÊ¼ [Time]: [1]¡£ + +²Ù×÷½áÊø [Time]: [1]¡£·µ»ØÖµ [2]¡£ + +Ê£Óàʱ¼ä: {[1] ·Ö }{[2] Ãë} + +ÄÚ´æ²»×ã¡£ÇëÏÈ¹Ø±ÕÆäËûÓ¦ÓóÌÐò£¬È»ºóÔÙÖØÊÔ¡£ + +°²×°³ÌÐòÒѲ»ÔÙÏìÓ¦¡£ + +°²×°³ÌÐò¹ýÔçÍ£Ö¹¡£ + +Windows ÕýÔÚÅäÖà [ProductName]£¬ÇëÉÔºò¡£ + +ÕýÔÚÊÕ¼¯ËùÐèÐÅÏ¢... + +ÕýÔÚɾ³ý´ËÓ¦ÓóÌÐò¾ÉµÄ°æ±¾... + +ÕýÔÚ×¼±¸É¾³ý´ËÓ¦ÓóÌÐò¾ÉµÄ°æ±¾... + +{[ProductName] }°²×°Òѳɹ¦Íê³É¡£ + +{[ProductName] }°²×°Ê§°Ü¡£ + +¶ÁÈ¡Îļþ [2] ʱ³ö´í¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÈ·ÈϸÃÎļþµÄÈ·´æÔÚ²¢ÇÒÄú¿ÉÒÔ¶ÔÆä½øÐзÃÎÊ¡£ + +ÎÞ·¨´´½¨Îļþ '[2]'¡£Í¬ÃûĿ¼ÒÑ´æÔÚ¡£ÇëÈ¡Ïû´Ë´Î°²×°£¬È»ºó°²×°µ½ÆäËûλÖᣠ+ +Çë²åÈë´ÅÅÌ: [2] + +°²×°³ÌÐòûÓзÃÎÊĿ¼ [2] µÄȨÏÞ£¬°²×°ÎÞ·¨¼ÌÐø½øÐС£ÇëÒÔ¹ÜÀíÔ±Éí·ÝµÇ¼£¬»òÓëÄúµÄϵͳ¹ÜÀíÔ±ÁªÏµ¡£ + +дÖÁÎļþ [2] ʱ³ö´í¡£ÇëÈ·ÈÏÄúÓзÃÎʸÃĿ¼µÄȨÏÞ¡£ + +¶ÁÈ¡Îļþ [2] ʱ³ö´í¡£{{ ϵͳ´íÎó [3]¡£}}ÇëÈ·ÈÏÎļþ´æÔÚ£¬²¢ÇÒÄúÄܹ»·ÃÎʸÃÎļþ¡£ + +ÁíÒ»Ó¦ÓóÌÐòÒѾ­ÒÔ¶Àռģʽ·ÃÎÊÁËÎļþ [2]¡£Çë¹Ø±ÕËùÓÐÆäËûµÄÓ¦ÓóÌÐò£¬È»ºóÔÙµ¥»÷¡°ÖØÊÔ¡±°´Å¥¡£ + +ûÓÐ×ã¹»µÄ´ÅÅ̿ռäÀ´°²×°Îļþ [2]¡£ÇëÊÍ·ÅһЩ´ÅÅ̿ռäºóµ¥»÷¡°ÖØÊÔ¡±£¬»òÕßµ¥»÷¡°È¡Ïû¡±Í˳ö¡£ + +ûÓÐÕÒµ½Ô´Îļþ [2]¡£ÇëÈ·ÈÏÎļþ´æÔÚ£¬²¢ÇÒÄúÄܹ»·ÃÎʸÃÎļþ¡£ + +¶ÁÈ¡Îļþ [3] ʱ³ö´í¡£{{ ϵͳ´íÎó [2]¡£}} ÇëÈ·ÈÏÎļþ´æÔÚ£¬²¢ÇÒÄúÄܹ»·ÃÎʸÃÎļþ¡£ + +дÖÁÎļþ [3] ʱ³ö´í¡£{{ ϵͳ´íÎó [2]¡£}} ÇëÈ·ÈÏÄúÓÐȨ·ÃÎʸÃĿ¼¡£ + +ûÓÐÕÒµ½Ô´Îļþ{{(°ü)}}: [2]¡£ÇëÈ·ÈÏÎļþ´æÔÚ£¬²¢ÇÒÄúÄܹ»·ÃÎʸÃÎļþ¡£ + +ÎÞ·¨´´½¨Ä¿Â¼ [2]¡£Í¬ÃûÎļþÒѾ­´æÔÚ¡£ÇëÖØÃüÃû»òɾ³ýÎļþ£¬È»ºóµ¥»÷¡°ÖØÊÔ¡±°´Å¥£¬»òÕßµ¥»÷¡°È¡Ïû¡±°´Å¥Í˳ö¡£ + +ĿǰÎÞ·¨Ê¹Óþí [2]£¬ÇëÁíÑ¡ÆäËû¾í¡£ + +ÎÞ·¨Ê¹ÓÃÖ¸¶¨µÄ·¾¶ [2]¡£ + +ÎÞ·¨Ð´ÈëÖ¸¶¨µÄÎļþ¼Ð [2]¡£ + +ÊÔͼ¶ÁÈ¡Îļþ [2] ʱ·¢ÉúÍøÂç´íÎó¡£ + +ÊÔͼ´´½¨Ä¿Â¼ [2] ʱ·¢Éú´íÎó¡£ + +ÊÔͼ´´½¨Ä¿Â¼ [2] ʱ·¢ÉúÍøÂç´íÎó¡£ + +ÊÔͼ´ò¿ªÔ´Îļþ°ü [2] ʱ·¢ÉúÍøÂç´íÎó¡£ + +Ö¸¶¨µÄ·¾¶¹ý³¤: [2] + +°²×°³ÌÐòûÓÐÐÞ¸ÄÎļþ [2] µÄȨÏÞ¡£ + +Îļþ¼Ð·¾¶ [2] µÄÒ»²¿·ÖÎÞЧ¡£»òÕßΪ¿Õ£¬»òÕß³¬³öÁËϵͳÔÊÐíµÄ³¤¶È¡£ + +Îļþ¼Ð·¾¶ [2] Öк¬ÓÐÎÞЧµ¥´Ê¡£ + +Îļþ¼Ð·¾¶ [2] Öк¬ÓÐÎÞЧµÄ×Ö·û¡£ + +[2] ²»ÊÇÒ»¸öÓÐЧµÄ¶ÌÎļþÃû¡£ + +»ñÈ¡Îļþ [3] °²È«È¨ÏÞʱ·¢Éú´íÎó GetLastError: [2] + +ÎÞЧÇý¶¯Æ÷: [2] + +¶ÔÎļþ [2] Ó¦ÓÃÐÞ²¹³ÌÐòʱ³ö´í¡£¸ÃÎļþ¿ÉÄܱ»¸üйý£¬ËùÒÔ±¾ÐÞ²¹³ÌÐò²»ÄÜÐÞ¸ÄËü¡£ÏêϸÐÅÏ¢£¬ÇëÓëÄúµÄÐÞ²¹³ÌÐò¹©Ó¦ÉÌÁªÏµ¡£ {{ϵͳ´íÎó: [3]}} + +ÐèÒªµÄÎļþ²»Äܰ²×°£¬ÒòΪ CAB Îļþ [2] ûÓÐÊý×ÖÇ©Ãû¡£Õâ¿ÉÄܱíʾ CAB ÎļþÒÑË𻵡£ + +ÐèÒªµÄÎļþ²»Äܰ²×°£¬ÒòΪ CAB Îļþ [2] µÄÊý×ÖÇ©ÃûÎÞЧ¡£Õâ¿ÉÄܱíʾ CAB ÎļþÒÑË𻵡£{{WinVerifyTrust ·µ»ØÁË´íÎó [3] ¡£}} + +¸´ÖÆ [2] Îļþʧ°Ü: CRC ´íÎó¡£ + +ÒÆ¶¯ [2] Îļþʧ°Ü: CRC ´íÎó¡£ + +ÐÞ²¹ [2] Îļþʧ°Ü: CRC ´íÎó¡£ + +²»Äܰ²×°Îļþ '[2]'£¬ÒòΪÔÚ CAB Îļþ '[3]' ÖÐÕÒ²»µ½´ËÎļþ¡£Õâ¿ÉÄܱíÊ¾ÍøÂç´íÎó¡¢¶Á¹âÅÌ´íÎó»ò´ËÈí¼þ°ü´íÎó¡£ + +°²×°ËùÐèµÄ CAB Îļþ '[2]' ÒÑË𻵣¬²»ÄÜʹÓá£Õâ¿ÉÄܱíÊ¾ÍøÂç´íÎó¡¢¶Á¹âÅÌ´íÎó»ò´ËÈí¼þ°ü´íÎó¡£ + +´´½¨Íê³É´Ë°²×°ÐèÒªµÄÁÙʱÎļþ³ö´í¡£{{Îļþ¼Ð: [3]¡£ÏµÍ³´íÎóÂë: [2]}} + +ÎÞ·¨´´½¨¼ü: [2]¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨´ò¿ª¼ü: [2]¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨É¾³ýÖµ [2]£¨´Ó¼ü [3] ÖУ©¡£{{ ϵͳ´íÎó [4]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨É¾³ý¼ü [2]¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨¶Áȡֵ [2]£¨´Ó¼ü [3] ÖУ©¡£{{ ϵͳ´íÎó [4]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨½«ÊýÖµ [2] дÈë¼ü [3]¡£{{ ϵͳ´íÎó [4]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨»ñÈ¡¼ü [2] µÄÊýÖµÃû³Æ¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨»ñÈ¡¼ü [2] µÄ×Ó¼ü¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨¶ÁÈ¡¼ü [2] µÄ°²È«ÐÅÏ¢¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨Ôö¼Ó¿ÉÓõÄ×¢²á±í¿Õ¼ä¡£°²×°±¾Ó¦ÓóÌÐòÐèÒª [2] ǧ×ֽڵĿÕÏÐ×¢²á±í¿Õ¼ä¡£ + +ÁíÒ»°²×°¹ý³ÌÕýÔÚ½øÐС£Äú±ØÐëÏÈÍê³ÉÄǴιý³Ì£¬È»ºó²ÅÄܼÌÐø±¾´Î¹ý³Ì¡£ + +·ÃÎÊÊܱ£»¤µÄÊý¾Ýʱ³ö´í¡£ÇëÈ·ÈÏ Windows Installer ÅäÖÃÊÇ·ñÕýÈ·£¬È»ºóÖØÐ°²×°¡£ + +Óû§ [2] ÒÔǰÆô¶¯¹ý²úÆ· [3] µÄ°²×°³ÌÐò¡£ÈôҪʹÓøòúÆ·£¬ÐèÒªÇë´ËÓû§ÔÙ´ÎÔËÐа²×°³ÌÐò¡£ÏÖÔÚ½«¼ÌÐø½øÐÐÄúµÄ°²×°¡£ + +Óû§ [2] ÒÔǰÆô¶¯¹ý²úÆ· [3] µÄ°²×°³ÌÐò¡£ÈôҪʹÓøòúÆ·£¬ÐèÒªÇë´ËÓû§ÔÙ´ÎÔËÐа²×°³ÌÐò¡£ + +´ÅÅ̿ռ䲻×ã -- ¾í: [2]£»ËùÐè¿Õ¼ä: [3] KB£»¿ÉÓÿռä: [4] KB¡£ÇëÔÚÊÍ·Å´ÅÅ̿ռäºóÔÙÊÔ¡£ + +ÊÇ·ñÈ·ÈÏҪȡÏû²Ù×÷£¿ + +Îļþ [2][3] Õý±»Ê¹Óà {ʹÓÃÕß: Ãû³Æ: [4]£¬Id: [5]£¬´°¿Ú±êÌâ: ¡°[6]¡±}¡£Çë¹Ø±ÕÄǸöÓ¦ÓóÌÐòºóÔÙÖØÊÔ¡£ + +²úÆ· [2] ÒѾ­°²×°£¬ÏÖÔÚÎÞ·¨°²×°±¾²úÆ·¡£ÕâÁ½ÖÖ²úÆ·²»¼æÈÝ¡£ + +ÖùÃæ'[2]' ÉÏûÓÐ×ã¹»µÄ´ÅÅ̿ռäÀ´×÷¾ßÓÐÆôÓûָ´µÄ°²×°¡£ÐèÒª [3] KB£¬µ«Ö»ÓÐ [4] KB¡£µ¥»÷¡°ºöÂÔ¡±À´¼ÌÐø°²×°£¬¶ø²»±£´æ»Ö¸´ÐÅÏ¢£»µ¥»÷¡°ÖØÊÔ¡±À´Ôٴμì²é¿ÉÓÿռ䣻µ¥»÷¡°È¡Ïû¡±À´Í˳ö°²×°¡£ + +ÎÞ·¨·ÃÎÊÍøÂçλÖà [2]¡£ + +ÔÚ¼ÌÐø°²×°Ö®Ç°£¬Çë¹Ø±ÕÒÔÏÂÓ¦ÓóÌÐò: + +ÎÞ·¨ÔÚ¼ÆËã»úÉÏÕÒµ½°²×°±¾²úÆ·ËùÐèµÄÈκÎÒÔǰ°²×°µÄÏàÓ¦²úÆ·¡£ + +Ó¦Óð²È«ÉèÖÃʱ³ö´í¡£[2] ²»ÊÇÓÐЧµÄÓû§»ò×é¡£Õâ¿ÉÄÜÊÇÈí¼þ°üµÄ´íÎ󣬻òÕßÊÇÁ¬½Óµ½ÍøÂçÉϵÄÓò¿ØÖÆÆ÷µÄ´íÎó¡£¼ì²éÄãµÄÍøÂçÁ¬½Ó£¬È»ºóµ¥»÷¡°ÖØÊÔ¡±£¬»òÕßµ¥»÷¡°È¡Ïû¡±À´½áÊø°²×°¡£{{²»ÄÜÕÒµ½ÓÉÓû§µÄ SID£¬ÏµÍ³´íÎó [3]}} + +¼ü [2] ÎÞЧ¡£ÇëÈ·ÈÏÄúÊäÈëµÄ¼üÊÇ·ñÕýÈ·¡£ + +°²×°³ÌÐò±ØÐëÏÈÖØÐÂÆô¶¯ÄúµÄϵͳ£¬È»ºó²ÅÄܼÌÐøÅäÖà [2]¡£µ¥»÷¡°ÊÇ¡±°´Å¥¿ÉÁ¢¼´ÖØÐÂÆô¶¯£»µ¥»÷¡°·ñ¡±°´Å¥Ôò¿ÉÔÚÒÔºóÒÔÈ˹¤·½Ê½Æô¶¯¡£ + +Äú±ØÐëÏÈÖØÐÂÆô¶¯ÏµÍ³£¬È»ºó²ÅÄÜʹ¶Ô [2] ×ö³öµÄÅäÖÃÐÞ¸ÄÉúЧ¡£µ¥»÷¡°ÊÇ¡±°´Å¥¿ÉÁ¢¼´ÖØÐÂÆô¶¯£»µ¥»÷¡°·ñ¡±°´Å¥Ôò¿ÉÔÚÒÔºóÒÔÈ˹¤·½Ê½Æô¶¯¡£ + +[2] µÄÒ»´Î°²×°¹ý³ÌÕý´¦ÓÚÔÝͣ״̬£¬Äú±ØÐëÏȳ·Ïú¸Ã°²×°¹ý³Ì×ö³öµÄÐ޸ģ¬È»ºó²ÅÄܼÌÐø²Ù×÷¡£ÊÇ·ñ³·ÏúÄÇЩÐ޸ģ¿ + +±¾²úÆ·µÄǰһ´Î°²×°ÕýÔÚ½øÐУ¬Äú±ØÐëÏȳ·Ïú¸Ã¹ý³Ì×ö³öµÄÐ޸ģ¬È»ºó²ÅÄܼÌÐø¡£ÊÇ·ñ³·ÏúÄÇЩÐ޸ģ¿ + +ÎÞ·¨ÕÒµ½²úÆ· [2] µÄ°²×°³ÌÐò°ü¡£ÇëʹÓð²×°³ÌÐò°ü [3] µÄÓÐЧ¸±±¾ÖØÐ½øÐа²×°¡£ + +°²×°Òѳɹ¦Íê³É¡£ + +°²×°Ê§°Ü¡£ + +²úÆ·: [2] -- [3] + +Äú¿ÉÒÔ½«¼ÆËã»ú»¹Ô­ÖÁÆäԭʼ״̬£¬Ò²¿ÉÔÚÒÔºó¼ÌÐø°²×°¡£ÊÇ·ñÒª½øÐл¹Ô­£¿ + +ÏòÓ²ÅÌдÈë°²×°ÐÅϢʱ·¢Éú´íÎó¡£ÇëÈ·ÈÏÊÇ·ñÓÐ×ã¹»µÄÓ²Å̿ռä¿É¹©Ê¹Óã¬È»ºóµ¥»÷¡°ÖØÊÔ¡±°´Å¥£¬»òÕßµ¥»÷¡°È¡Ïû¡±°´Å¥½áÊø°²×°¡£ + +ÎÞ·¨ÕÒµ½½«ÄúµÄ¼ÆËã»ú»Ö¸´ÖÁԭʼ״̬ËùÐèµÄÒ»¸ö»ò¶à¸öÎļþ¡£²»ÄܽøÐлָ´²Ù×÷¡£ + +[2] ²»Äܰ²×°Ä³Ò»ËùÐè²úÆ·¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ {{ϵͳ´íÎó: [3]¡£}} + +²»ÄÜɾ³ý¾É°æ±¾µÄ [2]¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ {{ϵͳ´íÎó: [3]¡£}} + +°²×°ÁË [2] + +ÅäÖÃÁË [2] + +ɾ³ýÁË [2] + +Îļþ [2] ±»Êý×ÖÇ©Ãû²ßÂԾܾø¡£ + +²»ÄÜ·ÃÎÊ Windows Installer ·þÎñ¡£¿ÉÄÜÊÇÄãÔÚ°²È«Ä£Ê½ÏÂÔËÐÐ Windows£¬»òÕß Windows Installer ûÓÐÕýÈ·µØ°²×°¡£ÇëºÍÄãµÄÖ§³ÖÈËÔ±ÁªÏµÒÔ»ñµÃ°ïÖú¡£ + +´Ë Windows Installer Èí¼þ°üÓÐÒ»¸öÎÊÌâ¡£Íê³É´Ë°²×°ÐèÒªµÄ½Å±¾²»ÄÜÔËÐС£ÇëºÍÄãµÄÖ§³ÖÈËÔ±»ò´úÀíÉÌÁªÏµ¡£{{×Ô¶¨Òå²Ù×÷ [2] ½Å±¾´í [3], [4]: [5] ÐÐ [6], ÁÐ [7], [8] }} + +´Ë Windows Installer Èí¼þ°üÓÐÒ»¸öÎÊÌâ¡£Íê³É´Ë°²×°ÐèÒªµÄ³ÌÐò²»ÄÜÔËÐС£ÇëºÍÄãµÄÖ§³ÖÈËÔ±»ò´úÀíÉÌÁªÏµ¡£{{²Ù×÷: [2], λÖÃ: [3], ÃüÁî: [4] }} + +´Ë Windows Installer Èí¼þ°üÓÐÒ»¸öÎÊÌâ¡£×÷Ϊ°²×°µÄÒ»²¿·ÖµÄ³ÌÐò²»Õý³£½áÊø¡£ÇëºÍÄãµÄÖ§³ÖÈËÔ±»ò´úÀíÉÌÁªÏµ¡£{{²Ù×÷: [2], λÖÃ: [3], ÃüÁî: [4] }} + +´Ë Windows Installer Èí¼þ°üÓÐÒ»¸öÎÊÌâ¡£Íê³É´Ë°²×°ÐèÒªµÄ DLL ²»ÄÜÔËÐС£ÇëºÍÄãµÄÖ§³ÖÈËÔ±»ò´úÀíÉÌÁªÏµ¡£{{²Ù×÷: [2], Èë¿Ú: [3], ¿â: [4] }} + +³É¹¦µØÍê³Éɾ³ý¡£ + +ɾ³ýʧ°Ü¡£ + +³É¹¦µØÍê³É¹«²¼¡£ + +¹«²¼Ê§°Ü¡£ + +³É¹¦µØÍê³ÉÅäÖᣠ+ +ÅäÖÃʧ°Ü¡£ + +Äã±ØÐëÊÇϵͳ¹ÜÀíÔ±²ÅÄÜɾ³ý´ËÓ¦ÓóÌÐò¡£Äã¿ÉÒÔ×÷Ϊϵͳ¹ÜÀíÔ±µÇ¼£¬»òÓëÄãµÄÖ§³ÖС×éÁªÏµÒÔ»ñµÃ°ïÖú¡£ + +·¾¶ [2] ÎÞЧ£¬ÇëÖ¸¶¨ÓÐЧ·¾¶¡£ + +ÄÚ´æ²»×ã¡£ÇëÏÈ¹Ø±ÕÆäËûÓ¦ÓóÌÐò£¬È»ºóÔÙÖØÊÔ¡£ + +Çý¶¯Æ÷ [2] ÖÐûÓдÅÅÌ¡£ÇëÏȲåÈë´ÅÅÌ£¬È»ºóµ¥»÷¡°ÖØÊÔ¡±°´Å¥£»»òÕßµ¥»÷¡°È¡Ïû¡±°´Å¥£¬·µ»ØÇ°ÃæÑ¡ÔñµÄ¾í¡£ + +Çý¶¯Æ÷ [2] ÖÐûÓдÅÅÌ¡£ÇëÏȲåÈë´ÅÅÌ£¬È»ºóµ¥»÷¡°ÖØÊÔ¡±°´Å¥£»»òÕßµ¥»÷¡°È¡Ïû¡±°´Å¥£¬·µ»Ø¡°ä¯ÀÀ¡±¶Ô»°¿ò²¢Ñ¡ÔñÆäËû¾í¡£ + +Îļþ¼Ð [2] ²»´æÔÚ¡£ÇëÊäÈëij¸öÔ­ÓÐÎļþ¼ÐµÄ·¾¶¡£ + +Äú¶ÁÈ¡´ËÎļþ¼ÐµÄȨÏÞ²»¹»¡£ + +ÎÞ·¨È·¶¨°²×°ËùÐèµÄÓÐЧ·¾¶¡£ + +ÊÔͼ¶ÁȡԴ°²×°Êý¾Ý¿â [2] ʱ³ö´í¡£ + +ÕýÔÚ°²ÅÅÖØÐÂÆô¶¯²Ù×÷: ½«Îļþ [2] ÖØÃüÃûΪ [3]¡£Ö»ÓÐÖØÐÂÆô¶¯ºó²Ù×÷²ÅÄÜÍê³É¡£ + +ÕýÔÚ°²ÅÅÖØÐÂÆô¶¯²Ù×÷: ɾ³ýÎļþ [2]¡£Ö»ÓÐÖØÐÂÆô¶¯ºó²Ù×÷²ÅÄÜÍê³É¡£ + +ÎÞ·¨×¢²áÄ£¿é [2]¡£HRESULT [3]¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨³·Ïú×¢²áÄ£¿é [2]¡£HRESULT [3]¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨»º´æ°ü [2]¡£´íÎó: [3]¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨×¢²á×ÖÌå [2]¡£Çë¼ì²éÄúÊÇ·ñÓÐ×ã¹»µÄȨÏÞ°²×°×ÖÌ壬ÒÔ¼°ÏµÍ³ÊÇ·ñÄܹ»Ö§³Ö¸Ã×ÖÌå¡£ + +ÎÞ·¨³·Ïú¶Ô×ÖÌå [2] µÄ×¢²á¡£Çë¼ì²éÄúÊÇ·ñÓÐ×ã¹»µÄȨÏÞɾ³ý×ÖÌå¡£ + +ÎÞ·¨´´½¨¿ì½Ý·½Ê½ [2]¡£Çë¼ì²éÄ¿±êÎļþ¼ÐÊÇ·ñ´æÔÚ£¬ÒÔ¼°ÄúÊÇ·ñ¿ÉÒÔ·ÃÎʸÃÎļþ¼Ð¡£ + +ÎÞ·¨É¾³ý¿ì½Ý·½Ê½ [2]¡£ÇëÈ·Èϸÿì½Ý·½Ê½Îļþ´æÔÚ£¬²¢ÇÒÄú¿ÉÒÔ·ÃÎʸÃÎļþ¡£ + +ÎÞ·¨½«Îļþ [2] ×¢²áµ½ÀàÐÍ¿âÖС£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨³·ÏúÎļþ [2] ÔÚÀàÐÍ¿âÖеÄ×¢²á¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ÎÞ·¨¸üРINI Îļþ [2][3]¡£ÇëÈ·ÈϸÃÎļþ´æÔÚ²¢ÇÒÄú¿ÉÒÔ·ÃÎÊËü¡£ + +ÎÞ·¨°²ÅÅÔÚÖØÐÂÆô¶¯Ê±ÓÃÎļþ [2] Ìæ»»Îļþ [3]¡£ÇëÈ·ÈÏÄúÓµÓжÔÎļþ [3] µÄдȨÏÞ¡£ + +ɾ³ý ODBC Çý¶¯³ÌÐò¹ÜÀíÆ÷ʱ·¢Éú´íÎó£¬ODBC ´íÎó [2]: [3]¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +°²×° ODBC Çý¶¯³ÌÐò¹ÜÀíÆ÷ʱ·¢Éú´íÎó£¬ODBC ´íÎó [2]: [3]¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +ɾ³ý ODBC Çý¶¯³ÌÐò [4] ʱ·¢Éú´íÎó£¬ODBC ´íÎó [2]: [3]¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞɾ³ý ODBC Çý¶¯³ÌÐò¡£ + +°²×° ODBC Çý¶¯³ÌÐò [4] ʱ·¢Éú´íÎó£¬ODBC ´íÎó [2]: [3]¡£ÇëÈ·ÈÏÎļþ [4] ´æÔÚ£¬²¢ÇÒÄú¿ÉÒÔ·ÃÎʸÃÎļþ¡£ + +ÅäÖà ODBC Êý¾ÝÔ´ [4] ʱ·¢Éú´íÎó£¬ODBC ´íÎó [2]: [3]¡£ÇëÈ·ÈÏÎļþ [4] ´æÔÚ£¬²¢ÇÒÄú¿ÉÒÔ·ÃÎʸÃÎļþ¡£ + +·þÎñ [2]£¨[3]£©µÄÆô¶¯Ê§°Ü¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞÆô¶¯ÏµÍ³·þÎñ¡£ + +ÎÞ·¨ÖÕÖ¹·þÎñ [2]£¨[3]£©¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞÖÕֹϵͳ·þÎñ¡£ + +ÎÞ·¨É¾³ý·þÎñ [2]£¨[3]£©¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞɾ³ýϵͳ·þÎñ¡£ + +ÎÞ·¨°²×°·þÎñ [2]£¨[3]£©¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞ°²×°ÏµÍ³·þÎñ¡£ + +ÎÞ·¨¸üл·¾³±äÁ¿ [2]¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞÐ޸Ļ·¾³±äÁ¿¡£ + +ÄúûÓÐ×ã¹»µÄȨÏÞΪ¸Ã¼ÆËã»úËùÓÐÓû§Íê³É´Ë°²×°¡£ÇëÒÔ¹ÜÀíÔ±µÄÉí·ÝµÇ¼£¬È»ºóÖØÐ³¢ÊÔ½øÐд˰²×°¡£ + +ÎÞ·¨¶ÔÎļþ [3] µÄ°²È«È¨ÏÞ½øÐÐÉèÖᣴíÎó: [2]¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞÐ޸ĴËÎļþµÄ°²È«È¨ÏÞ¡£ + +´Ë¼ÆËã»úÉÏδ°²×° Component Services (COM+ 1.0)¡£Òª³É¹¦Íê³É°²×°ÐèÒª Component Services¡£Component Services ÔÚ Windows 2000 ÉÏÓÐЧ¡£ + +×¢²á COM+ Ó¦ÓóÌÐòʱ³ö´í¡£ÏêϸÐÅÏ¢£¬ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +³·Ïú×¢²á COM+ Ó¦ÓóÌÐòʱ³ö´í¡£ÏêϸÐÅÏ¢£¬ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ + +²»Äܸü¸Ä·þÎñ '[2]' ([3]) µÄÃèÊö¡£ + +Windows Installer ·þÎñ²»ÄܸüÐÂϵͳÎļþ [2]£¬ÒòΪ¸ÃÎļþ±» Windows ±£»¤¡£ÎªÊ¹¸Ã³ÌÐòÕýÈ·¹¤×÷£¬Äú¿ÉÄÜÐèÒª¸üвÙ×÷ϵͳ¡£{{³ÌÐò°ü°æ±¾: [3]£¬²Ù×÷ϵͳ±£»¤°æ±¾: [4]}} + +Windows Installer ·þÎñ²»Äܸüб»±£»¤µÄ Windows Îļþ [2]¡£{{³ÌÐò°ü°æ±¾: [3]£¬²Ù×÷ϵͳ±£»¤°æ±¾: [4]£¬SFP ´íÎó: [5]}} + +Windows Installer ·þÎñ²»ÄܸüÐÂÒ»¸ö»ò¶à¸öÊܱ£»¤µÄ Windows Îļþ¡£{{SFP ´íÎó: [2]¡£Êܱ£»¤µÄÎļþÁбí:\r\n[3]}} + +±¾»úÉϵIJßÂÔ½ûÖ¹Óû§°²×°¡£ + +°²×°»ã±à×é¼þ [2] ʱ³ö´í¡£HRESULT: [3]¡£{{»ã±à½çÃæ: [4], º¯Êý: [5], »ã±àÃû: [6]}} + + diff --git a/src/WINNT/install/wix/lang/zh_TW/ActionText.wxi b/src/WINNT/install/wix/lang/zh_TW/ActionText.wxi new file mode 100644 index 000000000..892b2d949 --- /dev/null +++ b/src/WINNT/install/wix/lang/zh_TW/ActionText.wxi @@ -0,0 +1,143 @@ + + +¥¿¦b«Å¶ÇÀ³¥Îµ{¦¡ + +¾ã²zµn¿ý­ÈªÅ¶¡ + +·j´M¤w¦w¸ËªºÀ³¥Îµ{¦¡ + +¥¿¦bµ²¦X¥i°õÀÉ + +¥¿¦b·j´M²Å¦X±ø¥óªº²£«~ + +­pºâ©Ò»ÝªÅ¶¡ + +­pºâ©Ò»ÝªÅ¶¡ + +¥¿¦b«Ø¥ß¸ê®Æ§¨ + +¥¿¦b«Ø¥ß±¶®| + +§R°£ªA°È + +«Ø¥ß­«½ÆÀÉ®× + +­pºâ©Ò»ÝªÅ¶¡ + +·j´M¬ÛÃöÀ³¥Îµ{¦¡ + +¥¿¦b¬°°Ê§@²£¥Í script ¾Þ§@: + +¥¿¦b½Æ»sºô¸ô¦w¸ËÀÉ®× + +¥¿¦b½Æ»s·sªºÀÉ®× + +¦w¸Ë ODBC ¤¸¥ó + +¦w¸Ë + +¥¿¦b¦w¸Ë¨t²ÎÃþ§O¥Ø¿ý + +ÅçÃÒ¦w¸Ë + +ÀËÅç°õ¦æ±ø¥ó + +±q¬ÛÃöÀ³¥Îµ{¦¡Âà´«¥\¯àª¬ºA + +¥¿¦b²¾°ÊÀÉ®× + +¥¿¦b¤½§G²Õ¦X¸ê°T + +¥¿¦b¸Ñ°£¤½§G²Õ¦X¸ê°T + +­×¸ÉÀÉ®× + +§ó·s¤¸¥óµn¿ý + +µo§G¦X®æ¤¸¥ó + +µo§G²£«~¥\¯à + +µo§G²£«~¸ê°T + +µn¿ý Class ¦øªA¾¹ + +µn¿ý COM+ À³¥Îµ{¦¡¤Î¤¸¥ó + +µn¿ý©µ¦ù¦øªA¾¹ + +µn¿ý¦r«¬ + +µn¿ý MIME ¸ê°T + +¥¿¦bµn¿ý²£«~ + +µn¿ýµ{¦¡ÃѧO + +µn¿ý type libraries + +¥¿¦bµn¿ý¨Ï¥ÎªÌ + +²¾°£­«½ÆÀÉ®× + +§ó·sÀô¹Ò¦r¦ê + +²¾°£À³¥Îµ{¦¡ + +¥¿¦b²¾°£ÀÉ®× + +¥¿¦b²¾°£¸ê®Æ§¨ + +¥¿¦b²¾°£ INI ÀÉ®× + +¥¿¦b²¾°£ ODBC ¤¸¥ó + +¥¿¦b²¾°£¨t²Îµn¿ý­È + +¥¿¦b²¾°£±¶®| + +¥¿¦b·j´M²Å¦X±ø¥óªº²£«~ + +´_­ì°Ê§@: + +¥¿¦b²¾°£³Æ¥÷ÀÉ®× + +¥¿¦bµn¿ý¼Ò²Õ + +¸Ñ°£µn¿ý¼Ò²Õ + +±Ò°Ê ODBC ¥Ø¿ý + +±Ò°ÊªA°È + +°±¤îªA°È + +¥¿¦b²¾°£³Q²¾°ÊªºÀÉ®× + +¸Ñ°£µo§G¦X®æ¤¸¥ó + +¸Ñ°£µo§G²£«~¥\¯à + +¸Ñ°£µo§G²£«~¸ê°T + +¸Ñ°£µn¿ý Class ¦øªA¾¹ + +¸Ñ°£µn¿ý COM+ À³¥Îµ{¦¡¤Î¤¸¥ó + +¸Ñ°£µn¿ý©µ¦ù¦øªA¾¹ + +¸Ñ°£µn¿ý¦r«¬ + +¸Ñ°£µn¿ý MIME ¸ê°T + +¸Ñ°£µn¿ýµ{¦¡ÃѧO + +¸Ñ°£µn¿ý type libraries + +§ó·sÀô¹Ò¦r¦ê + +¼g¤J INI ÀÉ®× + +¥¿¦b¼g¤J¨t²Îµn¿ý + + diff --git a/src/WINNT/install/wix/lang/zh_TW/Error.wxi b/src/WINNT/install/wix/lang/zh_TW/Error.wxi new file mode 100644 index 000000000..45806e29f --- /dev/null +++ b/src/WINNT/install/wix/lang/zh_TW/Error.wxi @@ -0,0 +1,319 @@ + + +{{ÄY­«¿ù»~: }} + +{{¿ù»~ [1]. }} + +ĵ§i [1]. + + + +¸ê°T [1]. + +Installer ¦b¦w¸Ë³o­Ó«Ê¸Ë®É¹J¨ì·N¥~¿ù»~¡C³o¥i¯àªí¥Ü³o­Ó«Ê¸Ë¦³°ÝÃD¡C¿ù»~½X¬O [1]¡C {{¤Þ¼Æ¬O: [2], [3], [4]}} + + + +{{ºÏºÐ¤wº¡: }} + +°Ê§@ [Time]: [1]. [2] + +[ProductName] + +{[2]}{, [3]}{, [4]} + +°T®§Ãþ«¬: [1], ¤Þ¼Æ: [2] + +=== ¶}±Ò°O¿ý®É¶¡: [Date] [Time] === + +=== °±¤î°O¿ý®É¶¡: [Date] [Time] === + +°Ê§@¶}©l [Time]: [1]. + +°Ê§@µ²§ô [Time]: [1]. ¶Ç¦^­È [2]¡C + +³Ñ¾l®É¶¡: {[1] ¤À }{[2] ¬í} + +°O¾ÐÅ餣¨¬¡A½Ð¥ýÃö³¬¨ä¥¦À³¥Îµ{¦¡«á­«¸Õ¡C + +Installer ¨S¦³¦^À³¡C + +Installer ¤w§¹¥þ¤¤¤î¡C + +½Ðµy«Ý¡AWindows ¦b³]©w [ProductName] + +¥¿¦b»`¶°¥²­nªº¸ê°T... + +¥¿¦b²¾°£Âª©À³¥Îµ{¦¡... + +·Ç³Æ²¾°£Âª©À³¥Îµ{¦¡... + +{[ProductName] }¦¨¥\¦a§¹¦¨¦w¸Ë¡C + +{[ProductName] }¦w¸Ë¥¢±Ñ¡C + +Ū¨úÀɮ׿ù»~: [2]¡C {{ ¨t²Î¿ù»~ [3]¡C}} ÀˬdÀɮ׬O§_¦s¦b¡A¥H¤Î±z¬O§_¦³Åv­­¥i¥H¦s¨ú¥¦¡C + +µLªk«Ø¥ßÀÉ®× '[2]'¡C¦P¦Wªº¥Ø¿ý¤w¸g¦s¦b¡A¨ú®ø¦w¸ËµM«á¹Á¸Õ¦w¸Ë¦Ü§Oªº¦ì¸m¡C + +½Ð´¡¤JºÏ¤ù: [2] + +Installer ªºÅv­­¤£¨¬¡AµLªk¦s¨ú³o­Ó¥Ø¿ý: [2]¡A¦w¸ËµLªkÄ~Äò¡A½Ð¥ÎºÞ²z­ûªº¨­¥÷µn¤J¡A©Î¬O³sµ¸±zªº¨t²ÎºÞ²z­û¡C + +¼g¤JÀɮ׮ɵo¥Í¿ù»~: [2]¡CÀˬd±z¬O§_¦³Åv­­¥i¥H¦s¨ú¨º­Ó¥Ø¿ý¡C + +Ū¨úÀɮ׮ɵo¥Í¿ù»~: [2]¡C {{ ¨t²Î¿ù»~ [3]¡C}} ÀˬdÀɮ׬O§_¦s¦b¡A¥H¤Î±z¬O§_¦³Åv­­¥i¥H¦s¨ú¥¦¡C + +¨ä¥¦ªºÀ³¥Îµ{¦¡¹ïÀÉ®× '[2]' ¿W¦û¦s¨ú¡C½ÐÃö³¬©Ò¦³¨ä¥¦ªºÀ³¥Îµ{¦¡¡AµM«á«ö "­«¸Õ"¡C + +ºÏºÐªÅ¶¡¤£¨¬¡AµLªk¦w¸Ë³o­ÓÀÉ®×: [2]¡CÄÀ©ñ¤@¨ÇºÏºÐªÅ¶¡µM«á­«¸Õ¡A©Î«ö "©ñ±ó" µ²§ô¡C + +§ä¤£¨ì¨Ó·½ÀÉ®×: [2]¡CÀˬdÀɮ׬O§_¦s¦b¡A¥H¤Î±z¬O§_¦³Åv­­¥i¥H¦s¨ú¥¦¡C + +Ū¨úÀɮ׿ù»~: [3]¡C {{ ¨t²Î¿ù»~ [2]¡C}} ÀˬdÀɮ׬O§_¦s¦b¡A¥H¤Î±z¬O§_¦³Åv­­¥i¥H¦s¨ú¥¦¡C + +¼g¤JÀɮ׮ɵo¥Í¿ù»~: [3]¡C {{ ¨t²Î¿ù»~ [2]¡C}}Àˬd±z¬O§_¦³Åv­­¥i¥H¦s¨ú¨º­Ó¥Ø¿ý¡C + +§ä¤£¨ì¨Ó·½ÀÉ®×{{(cabinet)}}: [2]¡CÀˬdÀɮ׬O§_¦s¦b¡A¥H¤Î±z¬O§_¦³Åv­­¥i¥H¦s¨ú¥¦¡C + +µLªk«Ø¥ß¥Ø¿ý '[2]'¡C¦P¦WªºÀɮפw¸g¦s¦b¡A½Ð§ó¦W©Î²¾°£¦¹ÀɮסAµM«á­«¸Õ¡A©Î«ö "¨ú®ø" µ²§ô¡C + +¥Ø«eµL¨Ï¥ÎºÏºÐ¾÷ [2]¡A½Ð¿ï¨ú§OªººÏºÐ¾÷¡C + +«ü©wªº¸ô®| '[2]' µLªk¨Ï¥Î¡C + +µLªk¼g¤J«ü©wªº¸ê®Æ§¨ [2]¡C + +¹Á¸Õ±qÀÉ®×Ū¨ú®Éµo¥Íºô¸ô¿ù»~: [2] + +¹Á¸Õ«Ø¥ß¥Ø¿ý®Éµo¥Í¿ù»~: [2] + +¹Á¸Õ«Ø¥ß¥Ø¿ý®Éµo¥Íºô¸ô¿ù»~: [2] + +¹Á¸Õ¶}±Ò¨Ó·½Àɮ׮ɵo¥Íºô¸ô¿ù»~: [2] + +«ü©wªº¸ô®|¤Óªø: [2] + +Installer ªºÅv­­¤£¨¬¡AµLªk­×§ï³o­ÓÀÉ®×: [2]¡C + +¸ê®Æ§¨¸ô®| '[2]' ªº³¡¥÷¶W¹L¨t²Î¤¹³\ªºªø«×¡A©Î°ÑÂø¨t²Î¤£¤¹³\ªº¦r¤¸¡C + +¸ê®Æ§¨¸ô®| '[2]' §t¦³µL®Ä¸ê®Æ§¨¸ô®|¦r¤¸¡C + +¸ê®Æ§¨¸ô®| '[2]' §t¦³µL®Ä¦r¤¸¡C + +'[2]' ¤£¬O¦³®ÄªºµuÀɦW¡C + +¨ú±oÀɮצw¥þ©Ê®Éµo¥Í¿ù»~: [3] GetLastError: [2] + +µL®ÄªººÏºÐ¾÷: [2] + +®M¥Î­×¥¿¦ÜÀÉ®× [2] µo¥Í¿ù»~¡C¥i¯à¤w³Q¨ä¥L¤èªk§ó·s¹L¡A¨Ã¥BµLªk³Q¦¹­×¥¿§ó§ï¡C½Ð±µ¬¢¦¹­×¥¿µ{¦¡ªº¼t°Ó¥H¨ú±o§ó¦h°T®§¡C{{¨t²Î¿ù»~: [3]}} + +¦³¤@­Ó¥²»ÝªºÀÉ®×µLªk¦w¸Ë¡A¦]¬°À£ÁYÀÉ [2] ¨Ã¥¼¸g¹L¼Æ¦ìñ¸p¡C¥i¯à¬OÀ£ÁYÀɤw¸g·l·´¡C + +¦³¤@­Ó¥²»ÝªºÀÉ®×µLªk¦w¸Ë¡A¦]¬°À£ÁYÀÉ [2] ªº¼Æ¦ìñ³¹µL®Ä¡C¥i¯à¬OÀ£ÁYÀɤw¸g·l·´¡C{{ WinVerifyTrust ¶Ç¦^¿ù»~ [3]¡C}} + +µLªk¥¿½T½Æ»s [2] ÀÉ®×: CRC ¿ù»~¡C + +µLªk¥¿½T²¾°Ê [2] ÀÉ®×: CRC ¿ù»~¡C + +µLªk¥¿½T­×¸É [2] ÀÉ®×: CRC ¿ù»~¡C + +µLªk¦w¸ËÀÉ®× '[2]'¡A¦]¬°¦bÀ£ÁYÀÉ '[3]' ¤¤§ä¤£¨ì³o­ÓÀɮסC¥i¯à¬Oºô¸ôµo¥Í°ÝÃD¡B¥úºÐŪ¨ú¦³°ÝÃD¡B©Î¬O«Ê¸Ë¦³°ÝÃD¡C + +¦w¸Ë¥²»ÝªºÀ£ÁYÀÉ '[2]' ¤w·l·´µLªk¨Ï¥Î¡C¥i¯à¬Oºô¸ôµo¥Í°ÝÃD¡B¥úºÐŪ¨ú¦³°ÝÃD¡B©Î¬O«Ê¸Ë¦³°ÝÃD¡C + +«Ø¥ß¦w¸Ë©Ò¥²»Ýªº¼È¦sÀɮ׮ɵo¥Í¿ù»~¡C{{ ¸ê®Æ§¨: [3]¡C¨t²Î¿ù»~½X: [2]}} + +µLªk«Ø¥ß¾÷½X: [2]¡C {{ ¨t²Î¿ù»~ [3]¡C}} Àˬd±z¬O¦³¨¬°÷ªºÅv­­¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤H­û¡C + +µLªk¶}±Ò¾÷½X: [2]¡C {{ ¨t²Î¿ù»~ [3]¡C}} Àˬd±z¬O¦³¨¬°÷ªºÅv­­¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤H­û¡C + +µLªk§R°£­È: [2] ±q¾÷½X [3]¡C {{ ¨t²Î¿ù»~ [4]¡C}} Àˬd±z¬O¦³¨¬°÷ªºÅv­­¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤H­û¡C + +µLªk§R°£¾÷½X: [2]¡C {{ ¨t²Î¿ù»~ [3]¡C}} ½ÐÀˬd±z¬O§_¦³¨¬°÷ªºÅv­­¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤H­û¡C + +µLªk±q¾÷½X [3] Ū¨ú­È [2]¡C {{ ¨t²Î¿ù»~ [4]¡C}} ½ÐÀˬd±z¬O§_¦³¨¬°÷ªºÅv­­¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤H­û¡C + +µLªk¼g¤J­È [2] ¦Ü¾÷½X [3]¡C {{ ¨t²Î¿ù»~ [4]¡C}} ½ÐÀˬd±z¬O§_¦³¨¬°÷ªºÅv­­¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤H­û¡C + +µLªk¨ú¾÷½X [2] ªº­È¦WºÙ¡C{{ ¨t²Î¿ù»~ [3]¡C}} ½ÐÀˬd±z¬O§_¦³¨¬°÷ªºÅv­­¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤H­û¡C + +µLªk¨ú¤l¾÷½X [2] ªº­È¦WºÙ¡C{{ ¨t²Î¿ù»~ [3]¡C}} ½ÐÀˬd±z¬O§_¦³¨¬°÷ªºÅv­­¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤H­û¡C + +µLªkŪ¨ú¾÷½X [2] ªº¦w¥þ©Ê¸ê°T¡C{{ ¨t²Î¿ù»~ [3]¡C}} ½ÐÀˬd±z¬O§_¦³¨¬°÷ªºÅv­­¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤H­û¡C + +µLªk¼W¥[¥i¥Îªºµn¿ýªÅ¶¡¡C¦¹À³¥Îµ{¦¡¶·­n [2] KB ¥H¤WªºªÅ¶¡¡C + +¨ä¥¦ªº¦w¸Ë¥¿¦b¶i¦æ¤¤¡A±z¥²¶·§¹¦¨¸Ó¶µ¦w¸Ë¤§«á¤~¯àÄ~Äò¡C + +¦s¨ú¦w¥þ©Ê¸ê®Æ®Éµo¥Í¿ù»~¡A½Ð½T©w Windows Installer ¬O§_¥¿½T¦a³Q³]©w¡AµM«á¦A¸Õ¤@¦¸¡C + +¨Ï¥ÎªÌ '[2]' ¤w¥ý«e¦w¸Ë¤F²£«~ '[3]'¡C¨Ï¥ÎªÌ¥²¶·¦A¤@¦¸°õ¦æ¦w¸Ë¥H¨Ï¥Î¦¹²£«~¡C±z¥Ø«eªº¦w¸Ë±N·|Ä~Äò¡C + +¨Ï¥ÎªÌ '[2]' ¤w¥ý«e¦w¸Ë¤F²£«~ '[3]'¡C¨Ï¥ÎªÌ¥²¶·¦A¤@¦¸°õ¦æ¦w¸Ë¥H¨Ï¥Î¦¹²£«~¡C + +ºÏºÐªÅ¶¡¤£¨¬ -- ºÏºÐ¾÷: '[2]'; »Ý­nªÅ¶¡: [3] KB; ¥i¥ÎªÅ¶¡: [4] KB¡AÄÀ©ñ¤@¨ÇªÅ¶¡«á¦A­«¸Õ¡C + +±z½T©w­n¨ú®ø¶Ü ? + +ÀÉ®× [2][3] ¥¿³Q¤U¦CÀ³¥Îµ{¦¡: '[6]'{{, ¦WºÙ: [4], Id: [5]}}¡AÃö³¬¸ÓÀ³¥Îµ{¦¡µM«á­«¸Õ¡C + +¤w¸g¦w¸Ë²£«~ '[2]'¡A·|ªý¤î±z¦w¸Ë³o¶µ²£«~¡A³o¨â¶µ²£«~¤£¬Û®e¡C + +ºÏºÐ°Ï '[2]' ªºªÅ¶¡¤£¨¬¡AµLªkÄ~Äò°õ¦æ´_­ì¡CÁٻݭn [3] KB¡A¦ýºÏºÐ¤W¥u¦³ [4] KB¡C½Ð«ö "²¤¹L" ¨Ó¸õ¹LÀx¦s´_­ì¸ê°T¨ÃÄ~Äò°õ¦æ¦w¸Ë¡C©Î«ö "­«¸Õ" ­«·sÀˬd¥i¥ÎªººÏºÐªÅ¶¡¡C©Î«ö "¨ú®ø" ¨Óµ²§ô¦w¸Ë¡C + +µLªk¦s¨úºô¸ô¦ì¸m [2]¡C + +Ä~Äò¦w¸Ë¤§«e¤U¦CÀ³¥Îµ{¦¡À³¸Ó³QÃö³¬: + +µLªk§ä¨ì¥ý«e¦w¸Ë¦b³o¥x¾÷¾¹¤Wªº²£«~¡C + +¦b®M¥Î¦w¥þ©Ê³]©w®Éµo¥Í¿ù»~¡C[2] ¤£¬O¦³®Äªº¨Ï¥ÎªÌ©Î¸s²Õ¡C¥i¯à¬O«Ê¸Ë¦³°ÝÃD¡Bºô¸ôªººô°ì±±¨î¯¸³s½u¦³°ÝÃD¡C½ÐÀˬd±zªººô¸ô³s½u«á«ö "­«¸Õ"¡C©Î«ö "¨ú®ø" ¨Óµ²§ô¦w¸Ë¡C{{§ä¤£¨ì¨Ï¥ÎªÌªº SID¡A¨t²Î¿ù»~ [3]}} + +ÃѧO½X [2] µL®Ä¡A½ÐÀˬd±z¿é¤JªºÃѧO½X¬O§_¥¿½T¡C + +Installer ¥²¶·­«·s±Ò°Ê±zªº¨t²Î¤~¯àÄ~Äò³]©w [2]¡A«ö "¬O" ¥ß§Y­«·s±Ò°Ê¡A«ö "§_"¡A¦pªG±z·Q­nµy«á¤â°Ê­«·s±Ò°Ê¡C + +Installer ¥²¶·­«·s±Ò°Ê±zªº¨t²Î¡A¹ï [2] ³]©wªºÅܧó¤~·|¥Í®Ä¡A«ö "¬O" ¥ß§Y­«·s±Ò°Ê¡A«ö "§_"¡A¦pªG±z·Q­nµy«á¤â°Ê­«·s±Ò°Ê¡C + +¦w¸Ë [2] ¥Ø«e³Q¼È°±¡A±z¥²¶·´_­ì¸Ó¦w¸Ë©Ò°µªºÅܧó¤~¯àÄ~Äò¡A±z­n´_­ì³o¨ÇÅܧó¶Ü ? + +¥t¤@­Ó¦w¸Ë³o­Ó²£«~ªºµ{¦¡¥¿¦b¶i¦æ¤¤¡A±z¥²¶·´_­ì¸Ó¦w¸Ë©Ò°µªºÅܧó¤~¯àÄ~Äò¡A±z­n´_­ì³o¨ÇÅܧó¶Ü ? + +§ä¤£¨ì²£«~ [2] ªº¦³®Ä¨Ó·½¡AWindows Installer µLªkÄ~Äò¡C½Ð¹Á¸Õ¨Ï¥Î¥¿½Tªº¦w¸Ë«Ê¸Ë '[3]' ¦A¦w¸Ë¤@¦¸¡C + +¦¨¥\§¹¦¨¦w¸Ë¡C + +¦w¸Ë¥¢±Ñ¡C + +²£«~: [2] -- [3] + +±z¥i¥H±N¹q¸£Á٭즨¥ý«eªºª¬ºA©Î¬Oµy«áÄ~Äò¦w¸Ë¡A±z­nÁÙ­ì¶Ü ? + +¼g¤J¦w¸Ë¸ê°T¦ÜºÏºÐ®Éµo¥Í¿ù»~¡A½T©wºÏºÐªºªÅ¶¡¨¬°÷¡A¨Ã«ö "­«¸Õ"¡A©Î«ö "¨ú®ø" ¨Óµ²§ô¦w¸Ë¡C + +§ä¤£¨ìÁÙ­ì±zªº¹q¸£¦¨¤§«eªºª¬ºA©Ò»Ýªº¤@­Ó©Î¦h­ÓÀɮסC + +[2] µLªk¦w¸Ë¨ä¸Ë¨ä¤¤¤@­Ó¥²¶·ªº²£«~¡C½Ð±µ¬¢§Þ³N¤ä´©¤H­û¡C {{¨t²Î¿ù»~: [3].}} + +ª©¥»ªº [2] µLªk²¾°£¡C½Ð±µ¬¢§Þ³N¤ä´©¤H­û¡C {{¨t²Î¿ù»~: [3].}} + +¤w¦w¸Ë [2] + +¤w³]©w [2] + +¤w²¾°£ [2] + +ÀÉ®× [2] ¤w³Q¼Æ¦ìñ³¹­ì«h©Ò©Úµ´¡C + +µLªk¦s¨ú Windows Installer ªA°È¡C¥i¯à¬O¦]¬° Windows ³B©ó¦w¥þ¼Ò¦¡¡A©Î¬O Windows Installer ¨Ã¥¼¥¿½T¦w¸Ë¡C½Ð³sµ¸±zªº¤ä´©¤H­û¡C + +Windows Installer «Ê¸Ë¦³°ÝÃD¡CµLªk°õ¦æ¦w¸Ë©Ò»Ýªº«ü¥O½X¡C½Ð³sµ¸±zªº¤ä´©¤H­û©Î«Ê¸Ë»s³y°Ó¡C {{¦Û­q°Ê§@ [2] «ü¥O½X¿ù»~ [3]¡A[4]: [5] ²Ä [6] ¦æ¡A²Ä [7] Äæ¡A[8] }} + +Windows Installer «Ê¸Ë¦³°ÝÃD¡CµLªk°õ¦æ¦w¸Ë©Ò»Ýªºµ{¦¡¡C½Ð³sµ¸±zªº¤ä´©¤H­û©Î«Ê¸Ë»s³y°Ó¡C {{°Ê§@: [2]¡A¦ì¸m: [3]¡A©R¥O: [4] }} + +Windows Installer «Ê¸Ë¦³°ÝÃD¡C¦w¸Ë®É©Ò­n°õ¦æªºµ{¦¡¨Ã¥¼¦p¹w´Á§¹¦¨¡C½Ð³sµ¸±zªº¤ä´©¤H­û©Î«Ê¸Ë»s³y°Ó¡C {{°Ê§@: [2]¡A¦ì¸m: [3]¡A©R¥O: [4] }} + +Windows Installer «Ê¸Ë¦³°ÝÃD¡CµLªk°õ¦æ¦w¸Ë©Ò»Ýªº DLL¡C½Ð³sµ¸±zªº¤ä´©¤H­û©Î«Ê¸Ë»s³y°Ó¡C {{°Ê§@: [2]¡A¶µ¥Ø: [3]¡Aµ{¦¡®w: [4] }} + +¤w¦¨¥\²¾°£¡C + +²¾°£¥¢±Ñ¡C + +¤w¦¨¥\³qª¾¡C + +³qª¾¥¢±Ñ¡C + +¤w¦¨¥\³]©w¡C + +³]©w¥¢±Ñ¡C + +±z¥²¶·¬O¨t²ÎºÞ²z­û¤~¯à²¾°£³o­ÓÀ³¥Îµ{¦¡¡C±z¥i¥H¥Î¨t²ÎºÞ²z­û¨­¤Àµn¤J¨Ó²¾°£µ{¦¡¡A©Î³sµ¸±zªº§Þ³N¤ä´©¤H­û¨Ó¨ó§U±z¡C + +¸ô®| [2] µL®Ä¡A½Ð«ü©w¦³®Äªº¸ô®|¡C + +°O¾ÐÅ餣¨¬¡A½Ð¥ýÃö³¬¨ä¥¦À³¥Îµ{¦¡«á­«¸Õ¡C + +ºÏºÐ¾÷ [2] ¤¤¨S¦³ºÏ¤ù¡A½Ð´¡¤JºÏ¤ùµM«á­«¸Õ¡A©Î«ö "¨ú®ø" ¦^¨ì¤W¦¸¿ï¨úªººÏºÐ¾÷¥N¸¹¡C + +ºÏºÐ¾÷ [2] ¤¤¨S¦³ºÏ¤ù¡A½Ð´¡¤JºÏ¤ùµM«á­«¸Õ¡A©Î«ö "¨ú®ø" ¦^¨ìÂsÄý¹ï¸Ü¤è¶ô¡A¨Ã¿ï¨ú§OªººÏºÐ¾÷¥N¸¹¡C + +¸ê®Æ§¨ [2] ¤£¦s¦b¡A½Ð¿é¤J¤@­Ó«ü¦V²{¦s¸ê®Æ§¨ªº¸ô®|¡C + +±zªºÅv­­¤£¨¬¡AµLªkŪ¨ú³o­Ó¸ê®Æ§¨¡C + +µLªk¨M©w¥¿½Tªº¥Ø¦a¸ê®Æ§¨¡C + +¹Á¸ÕŪ¨ú¨Ó·½¦w¸Ë¸ê®Æ®w®Éµo¥Í¿ù»~: [2]¡C + +¥¿¦b±Æ©w­«·s¶}¾÷§@·~: ¥¿¦b§ó§ïÀɮצWºÙ [2] ¦¨ [3]¡A¥²¶·­«·s¶}¾÷¤~¯à§¹¦¨§@·~¡C + +¥¿¦b±Æ©w­«·s¶}¾÷§@·~: ¥¿¦b§R°£ÀÉ®× [2]¡A¥²¶·­«·s¶}¾÷¤~¯à§¹¦¨§@·~¡C + +¼Ò²Õ [2] µn¿ý¥¢±Ñ¡C HRESULT [3]. ³sµ¸±zªº¤ä´©¤H­û¡C + +¼Ò²Õ [2] µn¿ý¥¢±Ñ¡C HRESULT [3]. ³sµ¸±zªº¤ä´©¤H­û¡C + +µLªk§Ö¨ú [2]. ¿ù»~: [3]. ½Ð³sµ¸¤ä´©¤H­û¡C + +µLªkµn¿ý¦r«¬ [2]¡C½Ð½T»{±z¦³¨¬°÷ªºÅv­­¤Î¨t²Î¤ä´©¡C + +µLªk¸Ñ°£µn¿ý¦r«¬ [2]¡C½Ð½T»{±z¦³¨¬°÷ªºÅv­­¨Ó²¾°£¦r«¬¡C + +µLªk«Ø¥ß±¶®| [2]¡C½Ð½T»{¥Ø¦a¸ê®Æ§¨¬O§_¦s¦b¤Î±zªº¦s¨úÅv¡C + +µLªk²¾°£±¶®| [2]¡C½Ð½T»{¥Ø¦a¸ê®Æ§¨¬O§_¦s¦b¡A¤Î±z¬O§_¦³¦s¨úÅv¡C + +µLªkµn¿ýÀÉ®× [2] ªºÃþ«¬µ{¦¡®w¡C½Ð³sµ¸¨t²Î¤ä´©¤H­û"¡C + +µLªk¸Ñ°£µù¥UÀÉ®× [2] ªºÃþ«¬µ{¦¡®w¡C½Ð³sµ¸¨t²Î¤ä´©¤H­û"¡C + +µLªk§ó·s ini ÀÉ [2][3]¡C ½Ð½T»{Àɮ׬O§_¦s¦b¡A¤Î±z¬O§_¦³¦s¨úÅv¡C + +µLªk¹w©w¦b­«¶}¾÷®É±NÀÉ®× [2] ¨ú¥N [3] ¡C½Ð½T»{±z¬O§_¦³ [3] ªº¦s¨úÅv¡C + +²¾°£ ODBC ÅX°Êµ{¦¡ºÞ²z­û¿ù»~¡AODBC ¿ù»~ [2]: [3]¡C½Ð³sµ¸¨t²Î¤ä´©¤H­û¡C + +¦w¸Ë ODBC ÅX°Êµ{¦¡ºÞ²z­û¿ù»~¡AODBC ¿ù»~ [2]: [3]¡C½Ð³sµ¸¨t²Î¤ä´©¤H­û¡C + +²¾°£ ODBC ÅX°Êµ{¦¡ºÞ²z­û¿ù»~[4]¡AODBC ¿ù»~ [2]: [3]¡C½Ð½T»{±z¬O§_¦³¨¬°÷Åv­­¡C + +¦w¸Ë ODBC ÅX°Êµ{¦¡ºÞ²z­û¿ù»~[4]¡AODBC ¿ù»~ [2]: [3]¡C½Ð½T»{ÀÉ®× [4] ¦s¦b¨Ã¥i¦s¨ú¡C + +³]©w ODBC ÅX°Êµ{¦¡ºÞ²z­û¿ù»~[4]¡AODBC ¿ù»~ [2]: [3]¡C½Ð½T»{ÀÉ®× [4] ¦s¦b¨Ã¥i¦s¨ú¡C + +ªA°È '[2]' ([3]) µLªk±Ò°Ê¡C½Ð½T»{±z¬O§_¦³¨¬°÷Åv­­¡C + +ªA°È '[2]' ([3]) µLªk°±¤î¡C½Ð½T»{±z¬O§_¦³¨¬°÷Åv­­¡C + +ªA°È '[2]' ([3]) µLªk§R°£¡C½Ð½T»{±z¬O§_¦³¨¬°÷Åv­­¡C + +ªA°È '[2]' ([3]) µLªk¦w¸Ë¡C½Ð½T»{±z¬O§_¦³¨¬°÷Åv­­¡C + +µLªk§ó·sÀô¹ÒÅÜ¼Æ '[2]'¡C½Ð½T»{±z¬O§_¦³¨¬°÷Åv­­¡C + +±z¨S¦³¨¬°÷ªºÅv­­§¹¦¨©Ò¦³¨Ï¥ÎªÌªº¦w¸Ë¡C½Ð¥Î¨t²ÎºÞ²z­û¨­¥÷µn¤J¦A­«·s¦w¸Ë¤@¦¸¡C + +µLªk³]©wÀÉ®× '[3]' ªº¦w¥þ¸ê°T¡C¿ù»~: [2]¡C ½Ð½T»{±z¬O§_¦³¨¬°÷Åv­­¡C + +Component Services (COM+ 1.0) ¨Ã¥¼¦w¸Ë³o¥x¹q¸£¤W¡C³o­Ó¦w¸Ë¥²¶·¦³ Component Services ¤~¯à¦w¸Ë¦¨¥\¡CComponent Services ¤º«Ø¦b Windows 2000¡C + +µn¿ý COM+ À³¥Îµ{¦¡¿ù»~¡C ½Ð±µ¬¢§Þ³N¤ä´©¤H­û¡C + +¸Ñ°£µn¿ý COM+ À³¥Îµ{¦¡¿ù»~¡C ½Ð±µ¬¢§Þ³N¤ä´©¤H­û¡C + +µLªkÅܧóªA°È '[2]' ([3]) ªº±Ô­z¡C + +Windows Installer ªA°ÈµLªk§ó°Ê¨t²ÎÀÉ®× [2] ¡A¦]¬°¤w³Q Windows ©Ò«OÅ@¡C±z¥i¯à­n§ó·s§@·~¨t²Î¨Ï¦¹µ{¦¡¥¿±`¤u§@¡C{{«Ê¸Ëª©¥»: [3], OS «OÅ@ª©¥»: [4]}} + +Windows Installer ªA°ÈµLªk§ó°Ê¨t²Î«OÅ@ÀÉ®× [2]¡C {{«Ê¸Ëª©¥»: [3], OS «OÅ@ª©¥»: [4], SFP ¿ù»~: [5]}} + +Windows Installer ªA°ÈµLªk§ó·s¬Y¨Ç³Q¨¾¼g«OÅ@ªº Windows ÀɮסC {{SFP ¿ù»~: [2]¡C¨¾¼gÀɮײM³æ:\r\n[3]}} + +³o¥x¾÷¾¹ªº­ì«h¸T¤î¨Ï¥ÎªÌ¦w¸Ë¡C + +¦b¦w¸Ë²Õ¦X¤¸¥ó [2] ®Éµo¥Í¿ù»~¡CHRESULT: [3]¡C {{²Õ¦X¤¶­±: [4]¡A¥\¯à: [5]¡A²Õ¦X¦WºÙ: [6]}} + + diff --git a/src/WINNT/install/wix/language_config.wxi b/src/WINNT/install/wix/language_config.wxi new file mode 100644 index 000000000..d82090eb3 --- /dev/null +++ b/src/WINNT/install/wix/language_config.wxi @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/WINNT/install/wix/openafs.wxs b/src/WINNT/install/wix/openafs.wxs new file mode 100644 index 000000000..dc4eb00ff --- /dev/null +++ b/src/WINNT/install/wix/openafs.wxs @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + = 500]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IBMAFS_UPGRADE OR OPENAFS_UPGRADE + NSISUNINSTALL <> "" AND UILevel >= 4 + NSISUNINSTALL <> "" AND UILevel < 4 + + + 3 AND !feaClient<>3) OR &feaControlCenter=2 OR (&feaControlCenter<>3 AND !feaControlCenter<>3) ))]]> + + + &feaLoopback=2 OR &feaLoopback=3 + &feaLoopback=3 + &feaLoopback=3 + + &feaLoopback=3 + + &feaClient=3 + &feaClient=3 + &feaClient=2 + &feaClient=3 + &feaServer=3 + &feaClient=3 OR &feaServer=3 OR &feaClient=2 OR &feaServer=2 + + + + + + + + + + + + + + + + + + + + diff --git a/src/WINNT/install/wix/property.wxi b/src/WINNT/install/wix/property.wxi new file mode 100644 index 000000000..70a469792 --- /dev/null +++ b/src/WINNT/install/wix/property.wxi @@ -0,0 +1,112 @@ + + + + $(var.CellName) + $(var.LogonOptions) + $(var.FreelanceMode) + $(var.UseDNS) + $(var.NoFindLanaByName) + $(var.MountRoot) + $(var.NetbiosName) + $(var.RxMaxMTU) + $(var.HideDotFiles) + $(var.SecurityLevel) + + 1 + -a + -m + -n + -q + + + + $(var.ProductComments) + openafs-info@openafs.org + http://openafs.org + http://openafs.org + http://openafs.org + + + 1 + INSTALL + 100 + + Typical + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(loc.StrNsisAbortReason) + + diff --git a/src/WINNT/install/wix/registry.wxi b/src/WINNT/install/wix/registry.wxi new file mode 100644 index 000000000..3f50ea557 --- /dev/null +++ b/src/WINNT/install/wix/registry.wxi @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/WINNT/install/wix/runtime.wxi b/src/WINNT/install/wix/runtime.wxi new file mode 100644 index 000000000..569d0160d --- /dev/null +++ b/src/WINNT/install/wix/runtime.wxi @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/WINNT/install/wix/runtime_debug.wxi b/src/WINNT/install/wix/runtime_debug.wxi new file mode 100644 index 000000000..2a7686713 --- /dev/null +++ b/src/WINNT/install/wix/runtime_debug.wxi @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/afs/DARWIN/osi_vm.c b/src/afs/DARWIN/osi_vm.c index be31ed6a6..9ae45f43b 100644 --- a/src/afs/DARWIN/osi_vm.c +++ b/src/afs/DARWIN/osi_vm.c @@ -11,7 +11,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/DARWIN/osi_vm.c,v 1.11 2003/07/15 23:14:18 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/DARWIN/osi_vm.c,v 1.14 2004/06/23 18:34:48 shadow Exp $"); #include "afs/sysincludes.h" /* Standard vendor system headers */ #include "afsincludes.h" /* Afs-based standard headers */ @@ -42,7 +42,7 @@ osi_VM_FlushVCache(struct vcache *avc, int *slept) if (UBCINFOEXISTS(vp)) return EBUSY; #endif - if (avc->vrefCount) + if (avc->vrefCount > DARWIN_REFBASE) return EBUSY; if (avc->opens) @@ -61,6 +61,30 @@ osi_VM_FlushVCache(struct vcache *avc, int *slept) ubc_release(vp); ubc_info_free(vp); } +#else + /* This is literally clean_up_name_parent_ptrs() */ + /* Critical to clean up any state attached to the vnode here since it's + being recycled, and we're not letting refcnt drop to 0 to trigger + normal recycling. */ + if (VNAME(vp) || VPARENT(vp)) { + char *tmp1; + struct vnode *tmp2; + + /* do it this way so we don't block before clearing + these fields. */ + tmp1 = VNAME(vp); + tmp2 = VPARENT(vp); + VNAME(vp) = NULL; + VPARENT(vp) = NULL; + + if (tmp1) { + remove_name(tmp1); + } + + if (tmp2) { + vrele(tmp2); + } + } #endif AFS_GLOCK(); @@ -165,6 +189,9 @@ osi_VM_TryReclaim(struct vcache *avc, int *slept) struct proc *p = current_proc(); struct vnode *vp = AFSTOV(avc); void *obj; +#ifdef AFS_DARWIN14_ENV + int didhold; +#endif if (slept) *slept = 0; @@ -173,17 +200,28 @@ osi_VM_TryReclaim(struct vcache *avc, int *slept) AFS_RELE(vp); return; } - if (!UBCINFOEXISTS(vp) || vp->v_count != 2) { + if (!UBCINFOEXISTS(vp) || vp->v_usecount != 2+DARWIN_REFBASE) { simple_unlock(&vp->v_interlock); AFS_RELE(vp); return; } + if (ISSET(vp->v_flag, VUINACTIVE)) { + simple_unlock(&vp->v_interlock); + AFS_RELE(vp); + printf("vnode %x still inactive!", vp); + return; + } #ifdef AFS_DARWIN14_ENV if (vp->v_ubcinfo->ui_refcount > 1 || vp->v_ubcinfo->ui_mapped) { simple_unlock(&vp->v_interlock); AFS_RELE(vp); return; } + if (ISSET(vp->v_flag, VORECLAIM)) { + simple_unlock(&vp->v_interlock); + AFS_RELE(vp); + return; + } #else if (vp->v_ubcinfo->ui_holdcnt) { simple_unlock(&vp->v_interlock); @@ -198,7 +236,9 @@ osi_VM_TryReclaim(struct vcache *avc, int *slept) return; } +#ifndef AFS_DARWIN14_ENV vp->v_usecount--; /* we want the usecount to be 1 */ +#endif if (slept) { ReleaseWriteLock(&afs_xvcache); @@ -216,47 +256,91 @@ osi_VM_TryReclaim(struct vcache *avc, int *slept) #endif if (ubc_issetflags(vp, UI_HASOBJREF)) printf("ubc_release didn't release the reference?!\n"); - } else if (!vn_lock(vp, LK_EXCLUSIVE | LK_INTERLOCK, current_proc())) { + } else { #ifdef AFS_DARWIN14_ENV - obj = ubc_getobject(vp, UBC_HOLDOBJECT); + SET(vp->v_flag, VORECLAIM); +#endif + if (!vn_lock(vp, LK_EXCLUSIVE|LK_INTERLOCK,current_proc())) { +#ifdef AFS_DARWIN14_ENV + obj = ubc_getobject(vp,UBC_HOLDOBJECT); + if ((didhold = ubc_hold(vp))) + (void)ubc_clean(vp, 0); #else #ifdef AFS_DARWIN13_ENV - obj = ubc_getobject(vp, (UBC_NOREACTIVATE | UBC_HOLDOBJECT)); + obj = ubc_getobject(vp,(UBC_NOREACTIVATE|UBC_HOLDOBJECT)); +#else + obj = ubc_getobject(vp); +#endif + (void)ubc_clean(vp, 1); +#endif + vinvalbuf(vp, V_SAVE, &afs_osi_cred, p, 0, 0); + if (vp->v_usecount == +#ifdef AFS_DARWIN14_ENV + 2 + DARWIN_REFBASE #else - obj = ubc_getobject(vp); + 1 #endif + ) + VOP_INACTIVE(vp, p); + else + VOP_UNLOCK(vp, 0, p); +#ifdef AFS_DARWIN14_ENV + if (didhold) + ubc_rele(vp); #endif - (void)ubc_clean(vp, 1); - vinvalbuf(vp, V_SAVE, &afs_osi_cred, p, 0, 0); - if (vp->v_usecount == 1) - VOP_INACTIVE(vp, p); - else - VOP_UNLOCK(vp, 0, p); - if (obj) { - if (ISSET(vp->v_flag, VTERMINATE)) - panic("afs_vnreclaim: already teminating"); - SET(vp->v_flag, VTERMINATE); - memory_object_destroy(obj, 0); - while (ISSET(vp->v_flag, VTERMINATE)) { - SET(vp->v_flag, VTERMWANT); - tsleep((caddr_t) & vp->v_ubcinfo, PINOD, "afs_vnreclaim", 0); + if (obj) { + if (ISSET(vp->v_flag, VTERMINATE)) + panic("afs_vnreclaim: already teminating"); + SET(vp->v_flag, VTERMINATE); + memory_object_destroy(obj, 0); + while (ISSET(vp->v_flag, VTERMINATE)) { + SET(vp->v_flag, VTERMWANT); + tsleep((caddr_t)&vp->v_ubcinfo, PINOD, "afs_vnreclaim", 0); + } } - } - } else { - if (simple_lock_try(&vp->v_interlock)) - panic("afs_vnreclaim: slept, but did no work :("); - if (UBCINFOEXISTS(vp) && vp->v_count == 1) { - vp->v_usecount++; - simple_unlock(&vp->v_interlock); - VN_RELE(vp); - } else +#ifdef AFS_DARWIN14_ENV + simple_lock(&vp->v_interlock); + CLR(vp->v_flag, VORECLAIM); + if (ISSET((vp)->v_flag, VXWANT)) { + CLR((vp)->v_flag, VXWANT); + wakeup((caddr_t)(vp)); + } + vp->v_usecount--; simple_unlock(&vp->v_interlock); +#endif + } else { +#ifdef AFS_DARWIN14_ENV + CLR(vp->v_flag, VORECLAIM); +#endif + if (simple_lock_try(&vp->v_interlock)) + panic("afs_vnreclaim: slept, but did no work :("); + if (UBCINFOEXISTS(vp) && vp->v_count == DARWIN_REFBASE + +#ifdef AFS_DARWIN14_ENV + 2 +#else + 1 +#endif + ) { +#ifndef AFS_DARWIN14_ENV + /* We left the refcount high in 1.4 */ + vp->v_usecount++; +#endif + simple_unlock(&vp->v_interlock); + VN_RELE(vp); + } else { +#ifdef AFS_DARWIN14_ENV + /* We left the refcount high in 1.4 */ + vp->v_usecount--; +#endif + simple_unlock(&vp->v_interlock); + } + } } AFS_GLOCK(); if (slept) - ObtainWriteLock(&afs_xvcache, 175); + ObtainWriteLock(&afs_xvcache,175); else - ObtainReadLock(&afs_xvcache); + ObtainReadLock(&afs_xvcache); } void diff --git a/src/afs/DARWIN/osi_vnodeops.c b/src/afs/DARWIN/osi_vnodeops.c index b914bbc5f..9f4189cfd 100644 --- a/src/afs/DARWIN/osi_vnodeops.c +++ b/src/afs/DARWIN/osi_vnodeops.c @@ -5,7 +5,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/afs/DARWIN/osi_vnodeops.c,v 1.16 2004/04/05 06:21:33 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/DARWIN/osi_vnodeops.c,v 1.18 2004/06/23 18:34:48 shadow Exp $"); #include /* Standard vendor system headers */ #include /* Afs-based standard headers */ @@ -188,6 +188,16 @@ afs_vop_lookup(ap) vp = AFSTOV(vcp); /* always get a node if no error */ vp->v_vfsp = dvp->v_vfsp; + if (UBCINFOMISSING(vp) || + UBCINFORECLAIMED(vp)) { +#ifdef AFS_DARWIN14_ENV + if (UBCINFORECLAIMED(vp) && ISSET(vp->v_flag, (VXLOCK|VORECLAIM))) { + DROPNAME(); + return (ENXIO); + } else +#endif + ubc_info_init(vp); + } /* The parent directory comes in locked. We unlock it on return * unless the caller wants it left locked. * we also always return the vnode locked. */ @@ -253,8 +263,17 @@ afs_vop_create(ap) *ap->a_vpp = AFSTOV(vcp); (*ap->a_vpp)->v_vfsp = dvp->v_vfsp; vn_lock(*ap->a_vpp, LK_EXCLUSIVE | LK_RETRY, p); - if (UBCINFOMISSING(*ap->a_vpp) || UBCINFORECLAIMED(*ap->a_vpp)) - ubc_info_init(*ap->a_vpp); + if (UBCINFOMISSING(*ap->a_vpp) || UBCINFORECLAIMED(*ap->a_vpp)) { +#ifdef AFS_DARWIN14_ENV + if (UBCINFORECLAIMED(*ap->a_vpp) && ISSET((*ap->a_vpp)->v_flag, + (VXLOCK|VORECLAIM))) { + vput(dvp); + DROPNAME(); + return (ENXIO); + } else +#endif + ubc_info_init(*ap->a_vpp); + } } else *ap->a_vpp = 0; @@ -352,6 +371,17 @@ afs_vop_close(ap) printf("afs: WARNING: ui_refcount panic averted\n"); } } + if (UBCINFOMISSING(ap->a_vp) || + UBCINFORECLAIMED(ap->a_vp)) { + if (UBCINFORECLAIMED(ap->a_vp) && ISSET(ap->a_vp->v_flag, + (VXLOCK|VORECLAIM))) { + printf("no ubc for %x in close, reclaim set\n", ap->a_vp); + return (ENXIO); + } else { + printf("no ubc for %x in close, put back\n", ap->a_vp); + ubc_info_init(ap->a_vp); + } + } #endif return code; @@ -833,7 +863,8 @@ afs_vop_remove(ap) cache_purge(vp); if (!error && UBCINFOEXISTS(vp)) { #ifdef AFS_DARWIN14_ENV - (void)ubc_uncache(vp); + /* If crashes continue in ubc_hold, comment this out */ + /* (void)ubc_uncache(vp);*/ #else int wasmapped = ubc_issetflags(vp, UI_WASMAPPED); int hasobjref = ubc_issetflags(vp, UI_HASOBJREF); @@ -957,8 +988,22 @@ afs_vop_rename(ap) if ((fcnp->cn_flags & SAVESTART) == 0) panic("afs_rename: lost from startdir"); fcnp->cn_nameiop = DELETE; - (void)relookup(fdvp, &fvp, fcnp); - return (VOP_REMOVE(fdvp, fvp, fcnp)); + + VREF(fdvp); + error=relookup(fdvp, &fvp, fcnp); + if (error == 0) + vrele(fdvp); + if (fvp == NULL) { + return (ENOENT); + } + + error=VOP_REMOVE(fdvp, fvp, fcnp); + if (fdvp == fvp) + vrele(fdvp); + else + vput(fdvp); + vput(fvp); + return (error); } if (error = vn_lock(fvp, LK_EXCLUSIVE, p)) goto abortit; diff --git a/src/afs/LINUX/osi_groups.c b/src/afs/LINUX/osi_groups.c index 52f1e6036..02d4023f3 100644 --- a/src/afs/LINUX/osi_groups.c +++ b/src/afs/LINUX/osi_groups.c @@ -17,7 +17,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/LINUX/osi_groups.c,v 1.22 2004/04/21 02:20:23 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/LINUX/osi_groups.c,v 1.23 2004/06/02 06:15:45 shadow Exp $"); #include "afs/sysincludes.h" #include "afsincludes.h" @@ -156,10 +156,9 @@ setpag(cred_t ** cr, afs_uint32 pagvalue, afs_uint32 * newpag, AFS_STATCNT(setpag); group_info = afs_getgroups(*cr); - g0 = GROUP_AT(group_info, 0); - g1 = GROUP_AT(group_info, 1); - - if (afs_get_pag_from_groups(g0, g1) == NOPAG) { + if (group_info->ngroups < 2 + || afs_get_pag_from_groups(GROUP_AT(group_info, 0), + GROUP_AT(group_info, 1)) == NOPAG) { /* We will have to make sure group_info is big enough for pag */ struct group_info *tmp; int i; diff --git a/src/afs/LINUX/osi_misc.c b/src/afs/LINUX/osi_misc.c index 9a6d1a2c5..2ef2eeabf 100644 --- a/src/afs/LINUX/osi_misc.c +++ b/src/afs/LINUX/osi_misc.c @@ -15,7 +15,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/LINUX/osi_misc.c,v 1.33 2004/05/08 03:58:27 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/LINUX/osi_misc.c,v 1.34 2004/05/15 06:43:12 shadow Exp $"); #include "afs/sysincludes.h" #include "afsincludes.h" @@ -334,7 +334,8 @@ afs_osi_SetTime(osi_timeval_t * tvp) AFS_STATCNT(osi_SetTime); TO_USER_SPACE(); - (void)(*sys_settimeofdayp) (tvp, NULL); + if (sys_settimeofdayp) + (void)(*sys_settimeofdayp) (tvp, NULL); TO_KERNEL_SPACE(); #endif } diff --git a/src/afs/LINUX/osi_module.c b/src/afs/LINUX/osi_module.c index 4eafd9d40..fc86e54ff 100644 --- a/src/afs/LINUX/osi_module.c +++ b/src/afs/LINUX/osi_module.c @@ -15,7 +15,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/LINUX/osi_module.c,v 1.48 2004/05/11 20:36:13 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/LINUX/osi_module.c,v 1.52 2004/06/21 21:46:17 shadow Exp $"); #include "afs/sysincludes.h" #include "afsincludes.h" @@ -37,14 +37,6 @@ RCSID #include #endif -#if defined(AFS_LINUX26_ENV) -#include -#include - -MODULE_INFO(vermagic, VERMAGIC_STRING); - -#endif - #ifdef AFS_SPARC64_LINUX24_ENV #define __NR_setgroups32 82 /* This number is not exported for some bizarre reason. */ #endif @@ -147,7 +139,7 @@ afsproc_init() struct proc_dir_entry *entry1; openafs_procfs = proc_mkdir(PROC_FSDIRNAME, proc_root_fs); - entry1 = create_proc_entry(PROC_SYSCALL_NAME, 0, openafs_procfs); + entry1 = create_proc_entry(PROC_SYSCALL_NAME, 0666, openafs_procfs); entry1->proc_fops = &afs_syscall_fops; @@ -163,6 +155,9 @@ afsproc_exit() remove_proc_entry(PROC_FSDIRNAME, proc_root_fs); } +extern asmlinkage long +afs_syscall(long syscall, long parm1, long parm2, long parm3, long parm4); + static int afs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) @@ -239,7 +234,6 @@ init_module(void) unsigned long kernel_gp = 0; static struct fptr sys_setgroups; #endif /* defined(AFS_IA64_LINUX20_ENV) */ - extern int afs_syscall(); extern long afs_xsetgroups(); #if defined(__NR_setgroups32) extern int afs_xsetgroups32(); @@ -369,7 +363,6 @@ init_module(void) #endif /* EXPORTED_KALLSYMS_ADDRESS */ if (!sys_call_table) { printf("Failed to find address of sys_call_table\n"); - sys_settimeofdayp = 0; } else { printf("Found sys_call_table at %x\n", sys_call_table); #ifdef AFS_SPARC64_LINUX20_ENV diff --git a/src/afs/LINUX/osi_sleep.c b/src/afs/LINUX/osi_sleep.c index b559dd2c9..b86855299 100644 --- a/src/afs/LINUX/osi_sleep.c +++ b/src/afs/LINUX/osi_sleep.c @@ -11,7 +11,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/LINUX/osi_sleep.c,v 1.21 2003/07/15 23:14:24 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/LINUX/osi_sleep.c,v 1.22 2004/06/21 19:30:21 shadow Exp $"); #include "afs/sysincludes.h" /* Standard vendor system headers */ #include "afsincludes.h" /* Afs-based standard headers */ @@ -193,6 +193,10 @@ afs_osi_SleepSig(void *event) AFS_ASSERT_GLOCK(); AFS_GUNLOCK(); schedule(); +#ifdef AFS_LINUX26_ENV + if (current->flags & PF_FREEZE) + refrigerator(PF_FREEZE); +#endif AFS_GLOCK(); if (signal_pending(current)) { retval = EINTR; @@ -271,6 +275,10 @@ osi_TimedSleep(char *event, afs_int32 ams, int aintok) code = EINTR; } else schedule_timeout(ticks); +#ifdef AFS_LINUX26_ENV + if (current->flags & PF_FREEZE) + refrigerator(PF_FREEZE); +#endif AFS_GLOCK(); remove_wait_queue(&evp->cond, &wait); diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index fad6b7687..f64c21573 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -22,7 +22,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.74 2004/04/21 02:20:23 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.78 2004/06/24 17:28:03 shadow Exp $"); #include "afs/sysincludes.h" #include "afsincludes.h" @@ -464,8 +464,9 @@ afs_linux_vma_close(struct vm_area_struct *vmap) (void)afs_close(vcp, vmap->vm_file->f_flags, credp); /* only decrement the execsOrWriters flag if this is not a * writable file. */ - if (!(vmap->vm_file->f_flags & (FWRITE | FTRUNC))) - vcp->execsOrWriters--; + if (!(vcp->states & CRO) ) + if (! (vmap->vm_file->f_flags & (FWRITE | FTRUNC))) + vcp->execsOrWriters--; vcp->states &= ~CMAPPED; crfree(credp); } else if ((vmap->vm_file->f_flags & (FWRITE | FTRUNC))) @@ -546,7 +547,8 @@ afs_linux_mmap(struct file *fp, struct vm_area_struct *vmap) /* Add an open reference on the first mapping. */ if (vcp->mapcnt == 0) { - vcp->execsOrWriters++; + if (!(vcp->states & CRO)) + vcp->execsOrWriters++; vcp->opens++; vcp->states |= CMAPPED; } @@ -850,13 +852,15 @@ afs_linux_dentry_revalidate(struct dentry *dp) struct vcache *lookupvcp = NULL; int code, bad_dentry = 1; struct sysname_info sysState; - struct vcache *vcp = ITOAFS(dp->d_inode); - struct vcache *parentvcp = ITOAFS(dp->d_parent->d_inode); + struct vcache *vcp, *parentvcp; + + sysState.allocked = 0; AFS_GLOCK(); lock_kernel(); - sysState.allocked = 0; + vcp = ITOAFS(dp->d_inode); + parentvcp = ITOAFS(dp->d_parent->d_inode); /* If it's a negative dentry, then there's nothing to do. */ if (!vcp || !parentvcp) @@ -907,14 +911,14 @@ afs_linux_dentry_revalidate(struct dentry *dp) if (sysState.allocked) osi_FreeLargeSpace(name); - AFS_GUNLOCK(); - crfree(credp); - if (bad_dentry) { shrink_dcache_parent(dp); d_drop(dp); } + unlock_kernel(); + AFS_GUNLOCK(); + crfree(credp); return !bad_dentry; } @@ -1138,7 +1142,7 @@ afs_linux_unlink(struct inode *dip, struct dentry *dp) if (!code) d_drop(dp); #if defined(AFS_LINUX26_ENV) - lock_kernel(); + unlock_kernel(); #endif AFS_GUNLOCK(); crfree(credp); @@ -1380,7 +1384,7 @@ afs_linux_readpage(struct file *fp, struct page *pp) uio_t tuio; struct iovec iovec; struct inode *ip = FILE_INODE(fp); - int cnt = atomic_read(&pp->count); + int cnt = page_count(pp); struct vcache *avc = ITOAFS(ip); AFS_GLOCK(); @@ -1525,7 +1529,7 @@ afs_linux_writepage_sync(struct inode *ip, struct page *pp, credp = crref(); afs_Trace4(afs_iclSetp, CM_TRACE_UPDATEPAGE, ICL_TYPE_POINTER, vcp, - ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, atomic_read(&pp->count), + ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, page_count(pp), ICL_TYPE_INT32, 99999); setup_uio(&tuio, &iovec, buffer, base, count, UIO_WRITE, AFS_UIOSYS); @@ -1547,7 +1551,7 @@ afs_linux_writepage_sync(struct inode *ip, struct page *pp, code = code ? -code : count - tuio.uio_resid; afs_Trace4(afs_iclSetp, CM_TRACE_UPDATEPAGE, ICL_TYPE_POINTER, vcp, - ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, atomic_read(&pp->count), + ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, page_count(pp), ICL_TYPE_INT32, code); crfree(credp); @@ -1586,7 +1590,7 @@ afs_linux_updatepage(struct file *fp, struct page *pp, unsigned long offset, credp = crref(); AFS_GLOCK(); afs_Trace4(afs_iclSetp, CM_TRACE_UPDATEPAGE, ICL_TYPE_POINTER, vcp, - ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, atomic_read(&pp->count), + ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, page_count(pp), ICL_TYPE_INT32, 99999); setup_uio(&tuio, &iovec, page_addr + offset, (afs_offs_t) (pageoff(pp) + offset), count, UIO_WRITE, @@ -1598,7 +1602,7 @@ afs_linux_updatepage(struct file *fp, struct page *pp, unsigned long offset, code = code ? -code : count - tuio.uio_resid; afs_Trace4(afs_iclSetp, CM_TRACE_UPDATEPAGE, ICL_TYPE_POINTER, vcp, - ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, atomic_read(&pp->count), + ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, page_count(pp), ICL_TYPE_INT32, code); AFS_GUNLOCK(); diff --git a/src/afs/Makefile.in b/src/afs/Makefile.in index d31ce8dc5..9a289ef6e 100644 --- a/src/afs/Makefile.in +++ b/src/afs/Makefile.in @@ -55,7 +55,7 @@ install: ${DESTDIR}${includedir}/afs/afs.h ${DESTDIR}${includedir}/afs/osi_in clean: -$(RM) -f *.o core AFS_component_version_number.c afs_trace.h afs_trace.msf afszcm.cat - + -$(RM) -f unified_afs.c unified_afs.h include ../config/Makefile.version ${DEST}/include/afs/afs.h: afs.h ${INSTALL} $? $@ diff --git a/src/afs/SOLARIS/osi_file.c b/src/afs/SOLARIS/osi_file.c index 657e68f43..8c86720df 100644 --- a/src/afs/SOLARIS/osi_file.c +++ b/src/afs/SOLARIS/osi_file.c @@ -11,7 +11,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_file.c,v 1.12 2003/07/15 23:14:26 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_file.c,v 1.13 2004/06/24 17:38:24 shadow Exp $"); #include "afs/sysincludes.h" /* Standard vendor system headers */ #include "afsincludes.h" /* Afs-based standard headers */ @@ -271,7 +271,15 @@ osi_UFSTruncate(register struct osi_file *afile, afs_int32 asize) * The only time a flag is used (ATTR_UTIME) is when we're changing the time */ AFS_GUNLOCK(); +#ifdef AFS_SUN510_ENV + { + caller_context_t ct; + + code = VOP_SETATTR(afile->vnode, &tvattr, 0, &afs_osi_cred, &ct); + } +#else code = VOP_SETATTR(afile->vnode, &tvattr, 0, &afs_osi_cred); +#endif AFS_GLOCK(); MReleaseWriteLock(&afs_xosi); return code; diff --git a/src/afs/SOLARIS/osi_inode.c b/src/afs/SOLARIS/osi_inode.c index a7b66bcf7..c1eb7baba 100644 --- a/src/afs/SOLARIS/osi_inode.c +++ b/src/afs/SOLARIS/osi_inode.c @@ -17,7 +17,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_inode.c,v 1.14 2003/07/15 23:14:26 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_inode.c,v 1.15 2004/06/24 17:38:24 shadow Exp $"); #include "afs/sysincludes.h" /* Standard vendor system headers */ #include "afsincludes.h" /* Afs-based standard headers */ @@ -129,7 +129,11 @@ igetinode(vfsp, dev, inode, ipp, credp, perror) * Don't call dnlc for the cm inodes since it's a big performance * penalty there! */ +#ifdef AFS_SUN510_ENV + dnlc_enter(ITOV(ip), "a", ITOV(ip)); +#else dnlc_enter(ITOV(ip), "a", ITOV(ip), (struct AFS_UCRED *)0); +#endif } *ipp = ip; @@ -201,7 +205,11 @@ afs_syscall_icreate(dev, near_inode, param1, param2, param3, param4, rvp, #endif newip->i_nlink = 1; newip->i_mode = IFREG; +#ifdef AFS_SUN510_ENV + newip->i_vnode->v_type = VREG; +#else newip->i_vnode.v_type = VREG; +#endif newip->i_vicep1 = param1; if (param2 == 0x1fffffff /*INODESPECIAL*/) { diff --git a/src/afs/SOLARIS/osi_vfsops.c b/src/afs/SOLARIS/osi_vfsops.c index 371241824..57a2419ac 100644 --- a/src/afs/SOLARIS/osi_vfsops.c +++ b/src/afs/SOLARIS/osi_vfsops.c @@ -14,7 +14,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_vfsops.c,v 1.17 2003/07/15 23:14:26 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_vfsops.c,v 1.18 2004/06/24 17:38:24 shadow Exp $"); #include "afs/sysincludes.h" /* Standard vendor system headers */ #include "afsincludes.h" /* Afs-based standard headers */ @@ -237,6 +237,19 @@ afs_swapvp(struct vfs *afsp, struct vnode **avpp, char *nm) } +#ifdef AFS_SUN510_ENV +struct fs_operation_def afs_vfsops_template[] = { + { VFSNAME_MOUNT, afs_mount }, + { VFSNAME_UNMOUNT, afs_unmount }, + { VFSNAME_ROOT, afs_root }, + { VFSNAME_STATVFS, afs_statvfs }, + { VFSNAME_SYNC, afs_sync }, + { VFSNAME_VGET, afs_vget }, + { VFSNAME_MOUNTROOT, afs_mountroot }, + { VFSNAME_FREEVFS, fs_freevfs }, +}; +struct vfsops *afs_vfsopsp; +#else struct vfsops Afs_vfsops = { afs_mount, afs_unmount, @@ -250,6 +263,7 @@ struct vfsops Afs_vfsops = { fs_freevfs, #endif }; +#endif /* @@ -264,10 +278,14 @@ int (*afs_orig_ioctl) (), (*afs_orig_ioctl32) (); int (*afs_orig_setgroups) (), (*afs_orig_setgroups32) (); struct streamtab *udp_infop = 0; +#ifndef AFS_SUN510_ENV struct ill_s *ill_g_headp = 0; +#endif int afs_sinited = 0; +extern struct fs_operation_def afs_vnodeops_template[]; + #if !defined(AFS_NONFSTRANS) int (*nfs_rfsdisptab_v2) (); int (*nfs_rfsdisptab_v3) (); @@ -279,7 +297,11 @@ int (*nfs_checkauth) (); extern Afs_syscall(); +#ifdef AFS_SUN510_ENV +afsinit(int fstype, char *dummy) +#else afsinit(struct vfssw *vfsswp, int fstype) +#endif { extern int afs_xioctl(); extern int afs_xsetgroups(); @@ -298,8 +320,14 @@ afsinit(struct vfssw *vfsswp, int fstype) sysent32[SYS_ioctl].sy_call = afs_xioctl; #endif +#ifdef AFS_SUN510_ENV + vfs_setfsops(fstype, afs_vfsops_template, &afs_vfsopsp); + afsfstype = fstype; + vn_make_ops("afs", afs_vnodeops_template, &afs_ops); +#else vfsswp->vsw_vfsops = &Afs_vfsops; afsfstype = fstype; +#endif #if !defined(AFS_NONFSTRANS) @@ -337,23 +365,38 @@ afsinit(struct vfssw *vfsswp, int fstype) ufs_igetp = (int (*)())modlookup("ufs", "ufs_iget"); ufs_itimes_nolockp = (void (*)())modlookup("ufs", "ufs_itimes_nolock"); udp_infop = (struct streamtab *)modlookup("udp", "udpinfo"); +#ifdef AFS_SUN510_ENV + if (!ufs_iallocp || !ufs_iupdatp || !ufs_itimes_nolockp || !ufs_igetp + || !udp_infop) + afs_warn("AFS to UFS mapping cannot be fully initialised\n"); +#else ill_g_headp = (struct ill_s *)modlookup("ip", "ill_g_head"); if (!ufs_iallocp || !ufs_iupdatp || !ufs_itimes_nolockp || !ufs_igetp || !udp_infop || !ill_g_headp) afs_warn("AFS to UFS mapping cannot be fully initialised\n"); +#endif afs_sinited = 1; return 0; } +#ifdef AFS_SUN510_ENV +static struct vfsdef_v3 afs_vfsdef = { + VFSDEF_VERSION, + "afs", + afsinit, + 0 +}; +#else static struct vfssw afs_vfw = { "afs", afsinit, &Afs_vfsops, 0 }; +#endif static struct sysent afssysent = { 6, @@ -373,7 +416,11 @@ extern struct mod_ops mod_syscallops; static struct modlfs afsmodlfs = { &mod_fsops, "afs filesystem", +#ifdef AFS_SUN510_ENV + &afs_vfsdef +#else &afs_vfw +#endif }; static struct modlsys afsmodlsys = { diff --git a/src/afs/SOLARIS/osi_vnodeops.c b/src/afs/SOLARIS/osi_vnodeops.c index 752e92b3f..9270e1ab0 100644 --- a/src/afs/SOLARIS/osi_vnodeops.c +++ b/src/afs/SOLARIS/osi_vnodeops.c @@ -11,7 +11,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_vnodeops.c,v 1.19 2003/07/15 23:14:26 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_vnodeops.c,v 1.20 2004/06/24 17:38:24 shadow Exp $"); #if defined(AFS_SUN_ENV) || defined(AFS_SUN5_ENV) /* @@ -139,12 +139,22 @@ afs_delmap(avp, offset, asp, addr, length, prot, maxprot, flags, credp) return (0); } +#ifdef AFS_SUN510_ENV +int +afs_vmread(avp, auio, ioflag, acred, ct) + register struct vnode *avp; + struct uio *auio; + int ioflag; + struct AFS_UCRED *acred; + caller_context_t *ct; +#else int afs_vmread(avp, auio, ioflag, acred) register struct vnode *avp; struct uio *auio; int ioflag; struct AFS_UCRED *acred; +#endif { register int code; @@ -157,12 +167,22 @@ afs_vmread(avp, auio, ioflag, acred) } +#ifdef AFS_SUN510_ENV +int +afs_vmwrite(avp, auio, ioflag, acred, ct) + register struct vnode *avp; + struct uio *auio; + int ioflag; + struct AFS_UCRED *acred; + caller_context_t *ct; +#else int afs_vmwrite(avp, auio, ioflag, acred) register struct vnode *avp; struct uio *auio; int ioflag; struct AFS_UCRED *acred; +#endif { register int code; @@ -1761,6 +1781,55 @@ extern int gafs_fid(), gafs_readlink(), fs_setfl(), afs_pathconf(); extern int afs_lockctl(); extern void gafs_inactive(); +#ifdef AFS_SUN510_ENV +struct fs_operation_def afs_vnodeops_template[] = { + { VOPNAME_OPEN, gafs_open }, + { VOPNAME_CLOSE, gafs_close }, + { VOPNAME_READ, afs_vmread }, + { VOPNAME_WRITE, afs_vmwrite }, + { VOPNAME_IOCTL, afs_ioctl }, + { VOPNAME_SETFL, fs_setfl }, + { VOPNAME_GETATTR, gafs_getattr }, + { VOPNAME_SETATTR, gafs_setattr }, + { VOPNAME_ACCESS, gafs_access }, + { VOPNAME_LOOKUP, gafs_lookup }, + { VOPNAME_CREATE, gafs_create }, + { VOPNAME_REMOVE, gafs_remove }, + { VOPNAME_LINK, gafs_link }, + { VOPNAME_RENAME, gafs_rename }, + { VOPNAME_MKDIR, gafs_mkdir }, + { VOPNAME_RMDIR, gafs_rmdir }, + { VOPNAME_READDIR, gafs_readdir }, + { VOPNAME_SYMLINK, gafs_symlink }, + { VOPNAME_READLINK, gafs_readlink }, + { VOPNAME_FSYNC, gafs_fsync }, + { VOPNAME_INACTIVE, gafs_inactive }, + { VOPNAME_FID, gafs_fid }, + { VOPNAME_RWLOCK, afs_rwlock }, + { VOPNAME_RWUNLOCK, afs_rwunlock }, + { VOPNAME_SEEK, afs_seek }, + { VOPNAME_CMP, afs_cmp }, + { VOPNAME_FRLOCK, afs_frlock }, + { VOPNAME_SPACE, afs_space }, + { VOPNAME_REALVP, afs_realvp }, + { VOPNAME_GETPAGE, afs_getpage }, + { VOPNAME_PUTPAGE, afs_putpage }, + { VOPNAME_MAP, afs_map }, + { VOPNAME_ADDMAP, afs_addmap }, + { VOPNAME_DELMAP, afs_delmap }, + { VOPNAME_POLL, fs_poll }, + { VOPNAME_DUMP, afs_dump }, + { VOPNAME_PATHCONF, afs_pathconf }, + { VOPNAME_PAGEIO, afs_pageio }, + { VOPNAME_DUMPCTL, afs_dumpctl }, + { VOPNAME_DISPOSE, afs_dispose }, + { VOPNAME_GETSECATTR, afs_getsecattr }, + { VOPNAME_SETSECATTR, afs_setsecattr }, + { VOPNAME_SHRLOCK, fs_shrlock }, + NULL, +}; +struct vnodeops *afs_ops; +#else struct vnodeops Afs_vnodeops = { gafs_open, gafs_close, @@ -1811,6 +1880,7 @@ struct vnodeops Afs_vnodeops = { #endif }; struct vnodeops *afs_ops = &Afs_vnodeops; +#endif diff --git a/src/afs/UKERNEL/afs_usrops.c b/src/afs/UKERNEL/afs_usrops.c index 410713fa9..b6f6cfb97 100644 --- a/src/afs/UKERNEL/afs_usrops.c +++ b/src/afs/UKERNEL/afs_usrops.c @@ -15,7 +15,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/UKERNEL/afs_usrops.c,v 1.26 2004/05/10 13:51:16 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/UKERNEL/afs_usrops.c,v 1.27 2004/05/20 19:15:04 kolya Exp $"); #ifdef UKERNEL @@ -2751,6 +2751,10 @@ uafs_open_r(char *path, int flags, int mode) if (flags & (O_WRONLY | O_RDWR)) { openFlags |= FWRITE; } + if ((openFlags & (FREAD | FWRITE)) == 0) { + /* O_RDONLY is 0, so ... */ + openFlags |= FREAD; + } /* * Truncate if necessary @@ -3064,7 +3068,6 @@ uafs_fstat_r(int fd, struct stat *buf) return -1; } code = uafs_GetAttr(vp, buf); - VN_RELE(vp); if (code) { errno = code; return -1; diff --git a/src/afs/VNOPS/afs_vnop_read.c b/src/afs/VNOPS/afs_vnop_read.c index 960d2aadf..51501d036 100644 --- a/src/afs/VNOPS/afs_vnop_read.c +++ b/src/afs/VNOPS/afs_vnop_read.c @@ -19,7 +19,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_read.c,v 1.25 2003/08/27 21:43:19 rees Exp $"); + ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_read.c,v 1.26 2004/06/24 17:38:25 shadow Exp $"); #include "afs/sysincludes.h" /* Standard vendor system headers */ #include "afsincludes.h" /* Afs-based standard headers */ @@ -27,6 +27,7 @@ RCSID #include "afs/afs_cbqueue.h" #include "afs/nfsclient.h" #include "afs/afs_osidnlc.h" +#include "afs/afs_osi.h" extern char afs_zeros[AFS_ZEROS]; @@ -755,9 +756,19 @@ afs_UFSRead(register struct vcache *avc, struct uio *auio, &tuio, NULL, NULL, -1); #elif defined(AFS_SUN5_ENV) AFS_GUNLOCK(); +#ifdef AFS_SUN510_ENV + { + caller_context_t ct; + + VOP_RWLOCK(tfile->vnode, 0, &ct); + code = VOP_READ(tfile->vnode, &tuio, 0, afs_osi_credp, &ct); + VOP_RWUNLOCK(tfile->vnode, 0, &ct); + } +#else VOP_RWLOCK(tfile->vnode, 0); code = VOP_READ(tfile->vnode, &tuio, 0, afs_osi_credp); VOP_RWUNLOCK(tfile->vnode, 0); +#endif AFS_GLOCK(); #elif defined(AFS_SGI_ENV) AFS_GUNLOCK(); diff --git a/src/afs/VNOPS/afs_vnop_remove.c b/src/afs/VNOPS/afs_vnop_remove.c index 55c060eaf..c484b466a 100644 --- a/src/afs/VNOPS/afs_vnop_remove.c +++ b/src/afs/VNOPS/afs_vnop_remove.c @@ -23,7 +23,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_remove.c,v 1.28 2004/04/05 06:26:17 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_remove.c,v 1.31 2004/06/23 22:25:06 shadow Exp $"); #include "afs/sysincludes.h" /* Standard vendor system headers */ #include "afsincludes.h" /* Afs-based standard headers */ @@ -402,11 +402,16 @@ OSI_VC_DECL(adp); Ttvcr = VREFCOUNT(tvc); #ifdef AFS_AIX_ENV if (tvc && (VREFCOUNT(tvc) > 2) && tvc->opens > 0 - && !(tvc->states & CUnlinked)) { + && !(tvc->states & CUnlinked)) +#else +#ifdef AFS_DARWIN14_ENV + if (tvc && (VREFCOUNT(tvc) > 1 + DARWIN_REFBASE) && tvc->opens > 0 && !(tvc->states & CUnlinked)) #else if (tvc && (VREFCOUNT(tvc) > 1) && tvc->opens > 0 - && !(tvc->states & CUnlinked)) { + && !(tvc->states & CUnlinked)) +#endif #endif + { char *unlname = newname(); ReleaseWriteLock(&adp->lock); @@ -454,6 +459,7 @@ afs_remunlink(register struct vcache *avc, register int doit) struct VenusFid dirFid; register struct dcache *tdc; afs_int32 code = 0; + int oldref; if (NBObtainWriteLock(&avc->lock, 423)) return 0; @@ -470,7 +476,7 @@ afs_remunlink(register struct vcache *avc, register int doit) cred = avc->uncred; avc->uncred = NULL; -#ifdef AFS_DARWIN_ENV +#if defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN14_ENV) /* this is called by vrele (via VOP_INACTIVE) when the refcount * is 0. we can't just call VN_HOLD since vref will panic. * we can't just call osi_vnhold because a later AFS_RELE will call @@ -488,6 +494,12 @@ afs_remunlink(register struct vcache *avc, register int doit) */ avc->states &= ~(CUnlinked | CUnlinkedDel); +#ifdef AFS_DARWIN14_ENV + if (VREFCOUNT(avc) < 4) { + oldref = 4 - VREFCOUNT(avc); + VREFCOUNT_SET(avc, 4); + } +#endif ReleaseWriteLock(&avc->lock); dirFid.Cell = avc->fid.Cell; @@ -512,8 +524,15 @@ afs_remunlink(register struct vcache *avc, register int doit) osi_FreeSmallSpace(unlname); crfree(cred); #ifdef AFS_DARWIN_ENV +#ifndef AFS_DARWIN14_ENV osi_Assert(VREFCOUNT(avc) == 1); VREFCOUNT_SET(avc, 0); +#else + if (oldref) { + int newref = VREFCOUNT(avc) - oldref; + VREFCOUNT_SET(avc, newref); + } +#endif #endif } } else { diff --git a/src/afs/VNOPS/afs_vnop_write.c b/src/afs/VNOPS/afs_vnop_write.c index 57b702f76..7fa94c4b6 100644 --- a/src/afs/VNOPS/afs_vnop_write.c +++ b/src/afs/VNOPS/afs_vnop_write.c @@ -21,7 +21,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_write.c,v 1.35 2003/08/29 22:00:04 rees Exp $"); + ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_write.c,v 1.36 2004/06/24 17:38:25 shadow Exp $"); #include "afs/sysincludes.h" /* Standard vendor system headers */ #include "afsincludes.h" /* Afs-based standard headers */ @@ -530,9 +530,19 @@ afs_UFSWrite(register struct vcache *avc, struct uio *auio, int aio, &tuio, NULL, NULL, -1); #elif defined(AFS_SUN5_ENV) AFS_GUNLOCK(); +#ifdef AFS_SUN510_ENV + { + caller_context_t ct; + + VOP_RWLOCK(tfile->vnode, 1, &ct); + code = VOP_WRITE(tfile->vnode, &tuio, 0, afs_osi_credp, &ct); + VOP_RWUNLOCK(tfile->vnode, 1, &ct); + } +#else VOP_RWLOCK(tfile->vnode, 1); code = VOP_WRITE(tfile->vnode, &tuio, 0, afs_osi_credp); VOP_RWUNLOCK(tfile->vnode, 1); +#endif AFS_GLOCK(); if (code == ENOSPC) afs_warnuser diff --git a/src/afs/afs.h b/src/afs/afs.h index 355a29345..49f2c408d 100644 --- a/src/afs/afs.h +++ b/src/afs/afs.h @@ -633,8 +633,8 @@ struct vcache { afs_uint32 Date; afs_uint32 Owner; afs_uint32 Group; - ushort Mode; /* XXXX Should be afs_int32 XXXX */ - ushort LinkCount; + afs_uint16 Mode; /* XXXX Should be afs_int32 XXXX */ + afs_uint16 LinkCount; /* vnode type is in v.v_type */ } m; afs_rwlock_t lock; /* The lock on the vcache contents. */ diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index add1b6902..b387709d4 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -11,7 +11,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/afs_call.c,v 1.66 2004/04/12 16:04:31 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/afs_call.c,v 1.69 2004/06/24 17:38:22 shadow Exp $"); #include "afs/sysincludes.h" /* Standard vendor system headers */ #include "afsincludes.h" /* Afs-based standard headers */ @@ -130,7 +130,7 @@ afs_InitSetup(int preallocs) rx_extraPackets = AFS_NRXPACKETS; /* smaller # of packets */ code = rx_Init(htons(7001)); if (code) { - printf("AFS: RX failed to initialize.\n"); + printf("AFS: RX failed to initialize %d).\n", code); return code; } rx_SetRxDeadTime(afs_rx_deadtime); @@ -270,7 +270,7 @@ afsd_thread(void *rock) complete_and_exit(0, 0); break; default: - printf("Unknown op %d in StartDaemon()\n"); + printf("Unknown op %d in StartDaemon()\n", parm); break; } return 0; @@ -708,7 +708,6 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6) afs_int32 *mtubuffer = afs_osi_Alloc(sizeof(afs_int32) * AFS_MAX_INTERFACE_ADDR); int i; - int code; if (count > AFS_MAX_INTERFACE_ADDR) { code = ENOMEM; diff --git a/src/afs/afs_callback.c b/src/afs/afs_callback.c index dba98a250..c97edaa5b 100644 --- a/src/afs/afs_callback.c +++ b/src/afs/afs_callback.c @@ -17,7 +17,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/afs_callback.c,v 1.26 2004/04/16 04:57:01 kolya Exp $"); + ("$Header: /cvs/openafs/src/afs/afs_callback.c,v 1.27 2004/06/24 16:56:20 shadow Exp $"); #include "afs/sysincludes.h" /*Standard vendor system headers */ #include "afsincludes.h" /*AFS-based standard headers */ @@ -221,16 +221,12 @@ SRXAFSCB_GetCE64(struct rx_call *a_call, afs_int32 a_index, a_result->lock.pid_writer = 0; a_result->lock.src_indicator = 0; #endif /* AFS_OSF20_ENV */ -#ifdef AFS_64BIT_ENV - a_result->Length = tvc->m.Length; -#else /* AFS_64BIT_ENV */ -#ifdef AFS_64BIT_CLIENT - a_result->Length = tvc->m.Length; -#else /* AFS_64BIT_CLIENT */ +#if !defined(AFS_64BIT_ENV) a_result->Length.high = 0; a_result->Length.low = tvc->m.Length; -#endif /* AFS_64BIT_CLIENT */ -#endif /* AFS_64BIT_ENV */ +#else + a_result->Length = tvc->m.Length; +#endif a_result->DataVersion = hgetlo(tvc->m.DataVersion); a_result->callback = afs_data_pointer_to_int32(tvc->callback); /* XXXX Now a pointer; change it XXXX */ a_result->cbExpires = tvc->cbExpires; diff --git a/src/afs/afs_osi.c b/src/afs/afs_osi.c index 145d6e465..6066c82f3 100644 --- a/src/afs/afs_osi.c +++ b/src/afs/afs_osi.c @@ -11,7 +11,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/afs_osi.c,v 1.44 2004/04/21 02:20:21 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/afs_osi.c,v 1.45 2004/06/21 20:01:50 shadow Exp $"); #include "afs/sysincludes.h" /* Standard vendor system headers */ #include "afsincludes.h" /* Afs-based standard headers */ @@ -74,13 +74,14 @@ osi_Init(void) #endif /* AFS_HPUX_ENV */ if (!afs_osicred_initialized) { -#if defined(AFS_LINUX26_ENV) - afs_osi_credp = crref(); -#elif defined(AFS_XBSD_ENV) +#if defined(AFS_XBSD_ENV) /* Can't just invent one, must use crget() because of mutex */ afs_osi_credp = crdup(osi_curcred()); #else memset(&afs_osi_cred, 0, sizeof(struct AFS_UCRED)); +#if defined(AFS_LINUX26_ENV) + afs_osi_cred.cr_group_info = groups_alloc(0); +#endif crhold(&afs_osi_cred); /* don't let it evaporate */ afs_osi_credp = &afs_osi_cred; #endif diff --git a/src/afs/afs_osi.h b/src/afs/afs_osi.h index a573e8978..923c92e95 100644 --- a/src/afs/afs_osi.h +++ b/src/afs/afs_osi.h @@ -174,7 +174,7 @@ extern struct vnodeops *afs_ops; */ -#if defined(AFS_HPUX_ENV) || defined(AFS_SUN57_ENV) || defined(AFS_LINUX_64BIT_KERNEL) || (defined(AFS_SGI61_ENV) && defined(KERNEL) && defined(_K64U64)) +#if defined(AFS_HPUX_ENV) || (defined(AFS_SUN57_ENV) && !defined(AFS_SUN510_ENV)) || defined(AFS_LINUX_64BIT_KERNEL) || (defined(AFS_SGI61_ENV) && defined(KERNEL) && defined(_K64U64)) typedef struct { afs_int32 tv_sec; afs_int32 tv_usec; diff --git a/src/afs/afs_pioctl.c b/src/afs/afs_pioctl.c index 663fe0eb6..289d5cf0a 100644 --- a/src/afs/afs_pioctl.c +++ b/src/afs/afs_pioctl.c @@ -11,7 +11,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/afs_pioctl.c,v 1.78 2004/04/18 06:13:47 kolya Exp $"); + ("$Header: /cvs/openafs/src/afs/afs_pioctl.c,v 1.81 2004/06/08 17:27:46 rees Exp $"); #include "afs/sysincludes.h" /* Standard vendor system headers */ #ifdef AFS_OBSD_ENV @@ -88,6 +88,7 @@ DECL_PIOCTL(PRxStatProc); DECL_PIOCTL(PRxStatPeer); DECL_PIOCTL(PPrefetchFromTape); DECL_PIOCTL(PResidencyCmd); +DECL_PIOCTL(PCallBackAddr); /* * A macro that says whether we're going to need HandleClientContext(). @@ -188,6 +189,7 @@ static int (*(CpioctlSw[])) () = { PBogus, /* 0 */ PNewAlias, /* 1 -- create new cell alias */ PListAliases, /* 2 -- list cell aliases */ + PCallBackAddr, /* 3 -- request addr for callback rxcon */ }; #define PSetClientContext 99 /* Special pioctl to setup caller's creds */ @@ -3744,3 +3746,100 @@ DECL_PIOCTL(PResidencyCmd) } return code; } + +DECL_PIOCTL(PCallBackAddr) +{ +#ifndef UKERNEL + afs_uint32 addr, code; + int srvAddrCount; + struct server *ts; + struct srvAddr *sa; + struct conn *tc; + afs_int32 i, j; + struct unixuser *tu; + struct srvAddr **addrs; + + /*AFS_STATCNT(PCallBackAddr);*/ + if ( !afs_resourceinit_flag ) /* afs deamons havn't started yet */ + return EIO; /* Inappropriate ioctl for device */ + + if (!afs_osi_suser(acred)) + return EACCES; + + if ( ainSize < sizeof(afs_int32) ) + return EINVAL; + + memcpy(&addr, ain, sizeof(afs_int32)); + + ObtainReadLock(&afs_xinterface); + for ( i=0; (unsigned short)i < afs_cb_interface.numberOfInterfaces; i++) { + if (afs_cb_interface.addr_in[i] == addr) break; + } + + ReleaseWriteLock(&afs_xinterface); + + if (afs_cb_interface.addr_in[i] != addr) + return EINVAL; + + ObtainReadLock(&afs_xserver); /* Necessary? */ + ObtainReadLock(&afs_xsrvAddr); + + srvAddrCount = 0; + for (i=0;inext_bkt) { + srvAddrCount++; + } + } + + addrs = afs_osi_Alloc(srvAddrCount * sizeof(*addrs)); + j = 0; + for (i=0;inext_bkt) { + if (j >= srvAddrCount) break; + addrs[j++] = sa; + } + } + + ReleaseReadLock(&afs_xsrvAddr); + ReleaseReadLock(&afs_xserver); + + for (i=0; iserver; + if (!ts) + continue; + + /* vlserver has no callback conn */ + if (sa->sa_portal == AFS_VLPORT) { + continue; + } + + if (!ts->cell) /* not really an active server, anyway, it must */ + continue; /* have just been added by setsprefs */ + + /* get a connection, even if host is down; bumps conn ref count */ + tu = afs_GetUser(areq->uid, ts->cell->cellNum, SHARED_LOCK); + tc = afs_ConnBySA(sa, ts->cell->fsport, ts->cell->cellNum, tu, + 1/*force*/, 1/*create*/, SHARED_LOCK); + afs_PutUser(tu, SHARED_LOCK); + if (!tc) + continue; + + if ((sa->sa_flags & SRVADDR_ISDOWN) || afs_HaveCallBacksFrom(ts)) { + if (sa->sa_flags & SRVADDR_ISDOWN) { + rx_SetConnDeadTime(tc->id, 3); + } + +#ifdef RX_ENABLE_LOCKS + AFS_GUNLOCK(); +#endif /* RX_ENABLE_LOCKS */ + code = RXAFS_CallBackRxConnAddr(tc->id, &addr); +#ifdef RX_ENABLE_LOCKS + AFS_GLOCK(); +#endif /* RX_ENABLE_LOCKS */ + } + afs_PutConn(tc, SHARED_LOCK); /* done with it now */ + } /* Outer loop over addrs */ +#endif /* UKERNEL */ + return 0; +} diff --git a/src/afs/afs_prototypes.h b/src/afs/afs_prototypes.h index 43aa28236..84e787b2c 100644 --- a/src/afs/afs_prototypes.h +++ b/src/afs/afs_prototypes.h @@ -685,7 +685,7 @@ extern struct srvAddr *afs_srvAddrs[NSERVERS]; extern struct server *afs_servers[NSERVERS]; extern int afs_totalServers; extern struct server *afs_setTimeHost; -extern struct server *afs_FindServer(afs_int32 aserver, ushort aport, +extern struct server *afs_FindServer(afs_int32 aserver, afs_uint16 aport, afsUUID * uuidp, afs_int32 locktype); extern struct server *afs_GetServer(afs_uint32 * aserver, afs_int32 nservers, afs_int32 acell, u_short aport, @@ -711,6 +711,7 @@ extern int afsi_SetServerIPRank(struct srvAddr *sa, afs_int32 addr, void afsi_SetServerIPRank(struct srvAddr *sa, struct in_ifaddr *ifa); #endif #endif +extern int afs_HaveCallBacksFrom(struct server *aserver); diff --git a/src/afs/afs_server.c b/src/afs/afs_server.c index 4688ac977..a5055bcc3 100644 --- a/src/afs/afs_server.c +++ b/src/afs/afs_server.c @@ -33,7 +33,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/afs_server.c,v 1.29 2004/05/08 04:23:56 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/afs_server.c,v 1.33 2004/06/24 17:38:23 shadow Exp $"); #include "afs/stds.h" #include "afs/sysincludes.h" /* Standard vendor system headers */ @@ -259,8 +259,8 @@ afs_ServerDown(struct srvAddr *sa) /* return true if we have any callback promises from this server */ -static int -HaveCallBacksFrom(struct server *aserver) +int +afs_HaveCallBacksFrom(struct server *aserver) { register afs_int32 now; register int i; @@ -583,7 +583,7 @@ afs_CheckServers(int adown, struct cell *acellp) if (!tc) continue; - if ((sa->sa_flags & SRVADDR_ISDOWN) || HaveCallBacksFrom(sa->server) + if ((sa->sa_flags & SRVADDR_ISDOWN) || afs_HaveCallBacksFrom(sa->server) || (tc->srvr->server == afs_setTimeHost)) { conns[nconns]=tc; rxconns[nconns]=tc->id; @@ -714,7 +714,7 @@ afs_CheckServers(int adown, struct cell *acellp) /* find a server structure given the host address */ struct server * -afs_FindServer(afs_int32 aserver, ushort aport, afsUUID * uuidp, +afs_FindServer(afs_int32 aserver, afs_uint16 aport, afsUUID * uuidp, afs_int32 locktype) { struct server *ts; @@ -1212,16 +1212,24 @@ 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; +#else extern struct ill_s *ill_g_headp; + long *addr = (long *)ill_g_headp; +#endif ill_t *ill; ipif_t *ipif; int subnet, subnetmask, net, netmask; - long *addr = (long *)ill_g_headp; if (sa) sa->sa_iprank = 0; +#ifdef AFS_SUN510_ENV + for (ill = ILL_START_WALK_ALL(&ctx) ; ill ; ill = ill_next(&ctx, ill)) { +#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) diff --git a/src/afs/afs_vcache.c b/src/afs/afs_vcache.c index 5fde338b3..9d067e91e 100644 --- a/src/afs/afs_vcache.c +++ b/src/afs/afs_vcache.c @@ -39,7 +39,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/afs/afs_vcache.c,v 1.62 2004/05/08 04:20:39 shadow Exp $"); + ("$Header: /cvs/openafs/src/afs/afs_vcache.c,v 1.64 2004/06/23 18:34:45 shadow Exp $"); #include "afs/sysincludes.h" /*Standard vendor system headers */ #include "afsincludes.h" /*AFS-based standard headers */ @@ -822,8 +822,15 @@ afs_NewVCache(struct VenusFid *afid, struct server *serverp) refpanic("VLRU inconsistent"); } #ifdef AFS_DARWIN_ENV + if ((VREFCOUNT(tvc) < DARWIN_REFBASE) || + (VREFCOUNT(tvc) < 1+DARWIN_REFBASE && + UBCINFOEXISTS(&tvc->v))) { + VREFCOUNT_SET(tvc, + DARWIN_REFBASE + (UBCINFOEXISTS(&tvc->v) ? 1 : 0)); + } if (tvc->opens == 0 && ((tvc->states & CUnlinkedDel) == 0) - && VREFCOUNT(tvc) == 1 && UBCINFOEXISTS(&tvc->v)) { + && VREFCOUNT(tvc) == DARWIN_REFBASE+1 + && UBCINFOEXISTS(&tvc->v)) { osi_VM_TryReclaim(tvc, &fv_slept); if (fv_slept) { uq = VLRU.prev; @@ -843,7 +850,13 @@ afs_NewVCache(struct VenusFid *afid, struct server *serverp) } #endif - if (VREFCOUNT(tvc) == 0 && tvc->opens == 0 + if (VREFCOUNT(tvc) == +#ifdef AFS_DARWIN_ENV + DARWIN_REFBASE +#else + 0 +#endif + && tvc->opens == 0 && (tvc->states & CUnlinkedDel) == 0) { #if defined(AFS_XBSD_ENV) /* @@ -1051,6 +1064,12 @@ afs_NewVCache(struct VenusFid *afid, struct server *serverp) #if !defined(AFS_LINUX26_ENV) if (afs_globalVFS) ip->i_dev = afs_globalVFS->s_dev; +#else +#ifdef STRUCT_INODE_HAS_I_SECURITY + ip->i_security = NULL; + if (security_inode_alloc(ip)) + panic("Cannot allocate inode security"); +#endif #endif ip->i_sb = afs_globalVFS; put_inode_on_dummy_list(ip); @@ -1142,7 +1161,7 @@ afs_NewVCache(struct VenusFid *afid, struct server *serverp) /* VLISTNONE(&tvc->v); */ tvc->v.v_freelist.tqe_next = 0; tvc->v.v_freelist.tqe_prev = (struct vnode **)0xdeadb; - /*tvc->vrefCount++; */ + tvc->vrefCount+=DARWIN_REFBASE; #endif /* * The proper value for mvstat (for root fids) is setup by the caller. @@ -1355,7 +1374,8 @@ afs_FlushActiveVcaches(register afs_int32 doflocks) } } #ifdef AFS_DARWIN_ENV - if (VREFCOUNT(tvc) == 1 && UBCINFOEXISTS(&tvc->v)) { + if (VREFCOUNT(tvc) == 1+DARWIN_REFBASE + && UBCINFOEXISTS(&tvc->v)) { if (tvc->opens) panic("flushactive open, hasubc, but refcnt 1"); osi_VM_TryReclaim(tvc, 0); @@ -2172,6 +2192,22 @@ afs_GetRootVCache(struct VenusFid *afid, struct vrequest *areq, if (vg) continue; #endif /* AFS_OSF_ENV */ +#ifdef AFS_DARWIN14_ENV + /* It'd really suck if we allowed duplicate vcaches for the + same fid to happen. Wonder if this will work? */ + struct vnode *vp = AFSTOV(tvc); + if (vp->v_flag & (VXLOCK|VORECLAIM|VTERMINATE)) { + printf("precluded FindVCache on %x (%d:%d:%d)\n", + vp, tvc->fid.Fid.Volume, tvc->fid.Fid.Vnode, + tvc->fid.Fid.Unique); + simple_lock(&vp->v_interlock); + SET(vp->v_flag, VTERMWANT); + simple_unlock(&vp->v_interlock); + (void)tsleep((caddr_t)&vp->v_ubcinfo, PINOD, "vget1", 0); + printf("VTERMWANT ended on %x\n", vp); + continue; + } +#endif break; } } diff --git a/src/afs/sysincludes.h b/src/afs/sysincludes.h index 2146b7e58..1b0fec866 100644 --- a/src/afs/sysincludes.h +++ b/src/afs/sysincludes.h @@ -64,6 +64,10 @@ #include #include #include +#ifdef STRUCT_INODE_HAS_I_SECURITY +#include +#endif +#include #endif /* Avoid conflicts with coda overloading AFS type namespace. Must precede * inclusion of uaccess.h. @@ -182,6 +186,10 @@ typedef unsigned short etap_event_t; #include "h/stream.h" /* stops SUN56 socketvar.h errors */ #endif +#ifdef AFS_SUN510_ENV +#include +#endif + #include "h/socket.h" #include "h/socketvar.h" #include "h/protosw.h" diff --git a/src/afsweb/Makefile.in b/src/afsweb/Makefile.in index f5080e806..7f4d0c757 100644 --- a/src/afsweb/Makefile.in +++ b/src/afsweb/Makefile.in @@ -168,7 +168,7 @@ LIBOBJS=$(LIBCOMMON_OBJS) $(LIBAPACHE_OBJS) OBJS=$(LIBOBJS) apache_afs_weblog.o weblog.o .c.o: - $(CC) -c $(CFLAGS) $(AFS_INCL) $(AUX_CFLAGS) $< + $(CCOBJ) -c $(CFLAGS) $(AFS_INCL) $(AUX_CFLAGS) $< weblog: weblog.o $(APACHE_AFS_COMMON_LIB) $(DCE_ADK_LIB) diff --git a/src/auth/NTMakefile b/src/auth/NTMakefile index 0a3d3a00f..0658ce949 100644 --- a/src/auth/NTMakefile +++ b/src/auth/NTMakefile @@ -84,7 +84,7 @@ EXELIBS =\ $(SETKEY_EXEFILE): $(SETKEY_EXEOBJS) $(EXELIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) # build copyauth @@ -108,7 +108,9 @@ ktc_errors.c auth.h: ktc_errors.et auth.p.h $(DEL) auth.h ktc_errors.c $(COMPILE_ET) ktc_errors.et -h auth -install: $(INCFILES) $(AFSAUTH_LIBFILE) $(OUT)\setkey.exe # $(COPYAUTH_EXEFILE) $(AFSAUTH_KRB_LIBFILE) +install_headers: $(INCFILES) + +install: $(AFSAUTH_LIBFILE) $(OUT)\setkey.exe # $(COPYAUTH_EXEFILE) $(AFSAUTH_KRB_LIBFILE) install9x: install diff --git a/src/auth/cellconfig.c b/src/auth/cellconfig.c index ed74a815c..4fd0792b3 100644 --- a/src/auth/cellconfig.c +++ b/src/auth/cellconfig.c @@ -11,7 +11,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/auth/cellconfig.c,v 1.36 2004/03/10 07:38:17 shadow Exp $"); + ("$Header: /cvs/openafs/src/auth/cellconfig.c,v 1.37 2004/05/29 23:48:05 jaltman Exp $"); #include #include @@ -25,9 +25,6 @@ RCSID #include #include #include -#ifdef AFS_AFSDB_ENV -#include -#endif /* AFS_AFSDB_ENV */ #else #include #include @@ -64,7 +61,12 @@ RCSID #include #include "cellconfig.h" #include "keys.h" - +#ifdef AFS_NT40_ENV +#ifdef AFS_AFSDB_ENV +/* cm_dns.h depends on cellconfig.h */ +#include +#endif /* AFS_AFSDB_ENV */ +#endif static struct afsconf_servPair serviceTable[] = { {"afs", 7000,}, {"afscb", 7001,}, @@ -792,14 +794,15 @@ afsconf_GetAfsdbInfo(char *acellName, char *aservice, register afs_int32 i; int tservice; struct afsconf_entry DNSce; - afs_int32 cellHosts[AFSMAXCELLHOSTS]; + afs_int32 cellHostAddrs[AFSMAXCELLHOSTS]; + char cellHostNames[AFSMAXCELLHOSTS][MAXHOSTCHARS]; int numServers; int rc; int ttl; DNSce.cellInfo.numServers = 0; DNSce.next = NULL; - rc = getAFSServer(acellName, cellHosts, &numServers, &ttl); + rc = getAFSServer(acellName, cellHostAddrs, cellHostNames, &numServers, &ttl); /* ignore the ttl here since this code is only called by transitory programs * like klog, etc. */ if (rc < 0) @@ -808,8 +811,9 @@ afsconf_GetAfsdbInfo(char *acellName, char *aservice, return -1; for (i = 0; i < numServers; i++) { - memcpy(&acellInfo->hostAddr[i].sin_addr.s_addr, &cellHosts[i], + memcpy(&acellInfo->hostAddr[i].sin_addr.s_addr, &cellHostAddrs[i], sizeof(long)); + memcpy(acellInfo->hostName[i], cellHostNames[i], MAXHOSTCHARS); acellInfo->hostAddr[i].sin_family = AF_INET; /* sin_port supplied by connection code */ diff --git a/src/bozo/NTMakefile b/src/bozo/NTMakefile index e59bcd29e..8d7b8a72b 100644 --- a/src/bozo/NTMakefile +++ b/src/bozo/NTMakefile @@ -70,7 +70,7 @@ BOSSERVER_EXELIBS =\ $(DESTDIR)\lib\cm_dns.obj $(BOSSERVER_EXEFILE): $(BOSSERVER_EXEOBJS) $(BOSSERVER_EXELIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) @@ -106,7 +106,7 @@ BOS_EXELIBS =\ $(RS_BOS_EXEFILE): $(BOS_EXEOBJS) $(BOS_EXELIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) $(CL_BOS_EXEFILE): $(RS_BOS_EXEFILE) diff --git a/src/bucoord/NTMakefile b/src/bucoord/NTMakefile index a055a7cb6..71bf0ceab 100644 --- a/src/bucoord/NTMakefile +++ b/src/bucoord/NTMakefile @@ -90,7 +90,7 @@ EXELIBS =\ $(EXEFILE): $(EXEOBJS) $(EXELIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) diff --git a/src/budb/NTMakefile b/src/budb/NTMakefile index 96a3c4f9f..e9b716082 100644 --- a/src/budb/NTMakefile +++ b/src/budb/NTMakefile @@ -80,7 +80,7 @@ EXELIBS =\ $(EXEFILE): $(EXEOBJS) $(EXELIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) ############################################################################ diff --git a/src/butc/NTMakefile b/src/butc/NTMakefile index 5f466a25f..a644f9ce2 100644 --- a/src/butc/NTMakefile +++ b/src/butc/NTMakefile @@ -53,7 +53,7 @@ EXELIBS =\ $(DESTDIR)\lib\cm_dns.obj $(EXEFILE): $(EXEOBJS) $(EXELIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) ############################################################################ diff --git a/src/cf/aix-cc.m4 b/src/cf/aix-cc.m4 index c4374295d..dd19ecd8a 100644 --- a/src/cf/aix-cc.m4 +++ b/src/cf/aix-cc.m4 @@ -1,5 +1,5 @@ dnl -dnl $Id: aix-cc.m4,v 1.1 2002/08/15 21:10:23 shadow Exp $ +dnl $Id: aix-cc.m4,v 1.2 2004/06/03 05:13:29 shadow Exp $ dnl dnl We do not quite know how the version number of the xlc @@ -14,7 +14,7 @@ dnl vac.C 4.4.0.0 440 dnl vac.C 5.0.2.1 502 dnl -AC_DEFUN(AC_AIX_CC_GOOD, [ +AC_DEFUN([AC_AIX_CC_GOOD], [ AIXCC="$CC" save_CC="$CC" if test "$CC" ; then diff --git a/src/cf/bigendian.m4 b/src/cf/bigendian.m4 index 5a2087a4b..87c627e00 100644 --- a/src/cf/bigendian.m4 +++ b/src/cf/bigendian.m4 @@ -1,5 +1,5 @@ dnl -dnl $Id: bigendian.m4,v 1.2 2001/06/28 05:03:55 shadow Exp $ +dnl $Id: bigendian.m4,v 1.3 2004/06/03 05:13:29 shadow Exp $ dnl dnl check if this computer is little or big-endian @@ -7,7 +7,7 @@ dnl if we can figure it out at compile-time then don't define the cpp symbol dnl otherwise test for it and define it. also allow options for overriding dnl it when cross-compiling -AC_DEFUN(OPENAFS_CHECK_BIGENDIAN, [ +AC_DEFUN([OPENAFS_CHECK_BIGENDIAN], [ AC_ARG_ENABLE(bigendian, [ --enable-bigendian the target is big endian], openafs_cv_c_bigendian=yes) diff --git a/src/cf/function-macro.m4 b/src/cf/function-macro.m4 index ea11ecb6a..18d729162 100644 --- a/src/cf/function-macro.m4 +++ b/src/cf/function-macro.m4 @@ -1,4 +1,4 @@ -AC_DEFUN(COMPILER_HAS_FUNCTION_MACRO, [ +AC_DEFUN([COMPILER_HAS_FUNCTION_MACRO], [ AC_MSG_CHECKING(for __FUNCTION__ and __LINE__ macros) AC_CACHE_VAL(ac_cv_compiler_has_function_macro, [ diff --git a/src/cf/irix-test.m4 b/src/cf/irix-test.m4 index 354d15945..81b23c5c6 100644 --- a/src/cf/irix-test.m4 +++ b/src/cf/irix-test.m4 @@ -1,4 +1,4 @@ -AC_DEFUN(IRIX_SYS_SYSTM_H_HAS_MEM_FUNCS, [ +AC_DEFUN([IRIX_SYS_SYSTM_H_HAS_MEM_FUNCS], [ AC_MSG_CHECKING(for mem* in sys/systm.h) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_KERNEL -D__STRING_H__" diff --git a/src/cf/linux-test1.m4 b/src/cf/linux-test1.m4 index ee298b29a..44f2d9f94 100644 --- a/src/cf/linux-test1.m4 +++ b/src/cf/linux-test1.m4 @@ -1,4 +1,4 @@ -AC_DEFUN(LINUX_INODE_SETATTR_RETURN_TYPE,[ +AC_DEFUN([LINUX_INODE_SETATTR_RETURN_TYPE],[ AC_MSG_CHECKING(for inode_setattr return type) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" diff --git a/src/cf/linux-test2.m4 b/src/cf/linux-test2.m4 index ff54411c4..cc7d39c1c 100644 --- a/src/cf/linux-test2.m4 +++ b/src/cf/linux-test2.m4 @@ -1,4 +1,4 @@ -AC_DEFUN(LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_GFP_MASK, [ +AC_DEFUN([LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_GFP_MASK], [ AC_MSG_CHECKING(for gfp_mask in struct address_space) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -13,7 +13,7 @@ ac_cv_linux_fs_struct_address_space_has_gfp_mask=no)]) AC_MSG_RESULT($ac_cv_linux_fs_struct_address_space_has_gfp_mask) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_BYTES, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_BYTES], [ AC_MSG_CHECKING(for i_bytes in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -28,7 +28,7 @@ ac_cv_linux_fs_struct_inode_has_i_bytes=no)]) AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_bytes) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_ALLOC_SEM, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_ALLOC_SEM], [ AC_MSG_CHECKING(for i_alloc_sem in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -43,7 +43,7 @@ ac_cv_linux_fs_struct_inode_has_i_alloc_sem=no)]) AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_alloc_sem) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM], [ AC_MSG_CHECKING(for i_truncate_sem in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -58,7 +58,7 @@ ac_cv_linux_fs_struct_inode_has_i_truncate_sem=no)]) AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_truncate_sem) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK, [ +AC_DEFUN([LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK], [ AC_MSG_CHECKING(for page_lock in struct address_space) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -77,7 +77,7 @@ CPPFLAGS="$save_CPPFLAGS"]) dnl LINUX_BUILD_VNODE_FROM_INODE (configdir, outputdir, tmpldir) dnl defaults: (src/config, src/afs/LINUX, src/afs/linux) -AC_DEFUN(LINUX_BUILD_VNODE_FROM_INODE, [ +AC_DEFUN([LINUX_BUILD_VNODE_FROM_INODE], [ AC_MSG_CHECKING(whether to build osi_vfs.h) configdir=ifelse([$1], ,[src/config],$1) outputdir=ifelse([$2], ,[src/afs/LINUX],$2) diff --git a/src/cf/linux-test3.m4 b/src/cf/linux-test3.m4 index 53abcfab1..1f2afc072 100644 --- a/src/cf/linux-test3.m4 +++ b/src/cf/linux-test3.m4 @@ -1,4 +1,4 @@ -AC_DEFUN(LINUX_KERNEL_LINUX_SYSCALL_H,[ +AC_DEFUN([LINUX_KERNEL_LINUX_SYSCALL_H],[ AC_MSG_CHECKING(for linux/syscall.h in kernel) if test -f "${LINUX_KERNEL_PATH}/include/linux/syscall.h"; then ac_linux_syscall=yes @@ -9,7 +9,7 @@ AC_DEFUN(LINUX_KERNEL_LINUX_SYSCALL_H,[ fi ]) -AC_DEFUN(LINUX_NEED_RHCONFIG,[ +AC_DEFUN([LINUX_NEED_RHCONFIG],[ RHCONFIG_SP="" RHCONFIG_MP="" if test "x$enable_redhat_buildsys" = "xyes"; then @@ -33,7 +33,7 @@ AC_SUBST(RHCONFIG_SP) AC_SUBST(RHCONFIG_MP) ]) -AC_DEFUN(LINUX_WHICH_MODULES,[ +AC_DEFUN([LINUX_WHICH_MODULES],[ if test "x$enable_redhat_buildsys" = "xyes"; then MPS=Default else @@ -79,3 +79,18 @@ fi AC_SUBST(MPS) ]) +AC_DEFUN([LINUX_KERNEL_SELINUX],[ +AC_MSG_CHECKING(for SELinux kernel) +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS" +AC_CACHE_VAL(ac_cv_linux_kernel_is_selinux, +[ +AC_TRY_COMPILE( + [#include ], + [#ifndef CONFIG_SECURITY_SELINUX + #error not SELINUX + #endif], + ac_cv_linux_kernel_is_selinux=yes, + ac_cv_linux_kernel_is_selinux=no)]) +AC_MSG_RESULT($ac_cv_linux_kernel_is_selinux) +CPPFLAGS="$save_CPPFLAGS"]) diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4 index fb8c796ad..08e0c974b 100644 --- a/src/cf/linux-test4.m4 +++ b/src/cf/linux-test4.m4 @@ -1,4 +1,4 @@ -AC_DEFUN(LINUX_COMPLETION_H_EXISTS, [ +AC_DEFUN([LINUX_COMPLETION_H_EXISTS], [ AC_MSG_CHECKING(for linux/completion.h existance) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -18,7 +18,7 @@ AC_MSG_RESULT($ac_cv_linux_completion_h_exists) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_DEFINES_FOR_EACH_PROCESS, [ +AC_DEFUN([LINUX_DEFINES_FOR_EACH_PROCESS], [ AC_MSG_CHECKING(for defined for_each_process) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -35,7 +35,7 @@ AC_MSG_RESULT($ac_cv_linux_defines_for_each_process) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_DEFINES_PREV_TASK, [ +AC_DEFUN([LINUX_DEFINES_PREV_TASK], [ AC_MSG_CHECKING(for defined prev_task) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -52,7 +52,7 @@ AC_MSG_RESULT($ac_cv_linux_defines_prev_task) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_INIT_MM, [ +AC_DEFUN([LINUX_EXPORTS_INIT_MM], [ AC_MSG_CHECKING(for exported init_mm) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -69,7 +69,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_init_mm) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_KALLSYMS_ADDRESS, [ +AC_DEFUN([LINUX_EXPORTS_KALLSYMS_ADDRESS], [ AC_MSG_CHECKING(for exported kallsyms_address_to_symbol) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -86,7 +86,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_kallsyms_address) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_KALLSYMS_SYMBOL, [ +AC_DEFUN([LINUX_EXPORTS_KALLSYMS_SYMBOL], [ AC_MSG_CHECKING(for exported kallsyms_symbol_to_address) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -103,7 +103,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_kallsyms_symbol) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_SYS_CALL_TABLE, [ +AC_DEFUN([LINUX_EXPORTS_SYS_CALL_TABLE], [ AC_MSG_CHECKING(for exported sys_call_table) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -120,7 +120,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_call_table) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_IA32_SYS_CALL_TABLE, [ +AC_DEFUN([LINUX_EXPORTS_IA32_SYS_CALL_TABLE], [ AC_MSG_CHECKING(for exported ia32_sys_call_table) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -137,7 +137,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_ia32_sys_call_table) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_SYS_CHDIR, [ +AC_DEFUN([LINUX_EXPORTS_SYS_CHDIR], [ AC_MSG_CHECKING(for exported sys_chdir) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -154,7 +154,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_chdir) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_SYS_CLOSE, [ +AC_DEFUN([LINUX_EXPORTS_SYS_CLOSE], [ AC_MSG_CHECKING(for exported sys_close) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -171,7 +171,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_close) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_SYS_WAIT4, [ +AC_DEFUN([LINUX_EXPORTS_SYS_WAIT4], [ AC_MSG_CHECKING(for exported sys_wait4) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -188,7 +188,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_wait4) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_EXPORTS_TASKLIST_LOCK, [ +AC_DEFUN([LINUX_EXPORTS_TASKLIST_LOCK], [ AC_MSG_CHECKING(for exported tasklist_lock) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -205,7 +205,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_tasklist_lock) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_CDEV, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_CDEV], [ AC_MSG_CHECKING(for i_cdev in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -221,7 +221,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_cdev) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_DEVICES, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_DEVICES], [ AC_MSG_CHECKING(for i_devices in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -237,7 +237,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_devices) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS], [ AC_MSG_CHECKING(for i_dirty_data_buffers in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -253,7 +253,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_dirty_data_buffers) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_MAPPING_OVERLOAD, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_MAPPING_OVERLOAD], [ AC_MSG_CHECKING(for i_mapping_overload in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -269,7 +269,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_mapping_overload) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_MMAP_SHARED, [ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_MMAP_SHARED], [ AC_MSG_CHECKING(for i_mmap_shared in struct inode) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -285,7 +285,23 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_mmap_shared) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_RECALC_SIGPENDING_ARG_TYPE,[ +AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_SECURITY], [ +AC_MSG_CHECKING(for i_security in struct inode) +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" +AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_security, +[ +AC_TRY_COMPILE( +[#include ], +[struct inode _inode; +printf("%d\n", _inode.i_security);], +ac_cv_linux_fs_struct_inode_has_i_security=yes, +ac_cv_linux_fs_struct_inode_has_i_security=no)]) +AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_security) +CPPFLAGS="$save_CPPFLAGS"]) + + +AC_DEFUN([LINUX_RECALC_SIGPENDING_ARG_TYPE],[ AC_MSG_CHECKING(for recalc_sigpending arg type) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -300,7 +316,7 @@ AC_MSG_RESULT($ac_cv_linux_func_recalc_sigpending_takes_void) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT, [ +AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT], [ AC_MSG_CHECKING(for parent in struct task_struct) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -316,7 +332,7 @@ AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_parent) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_REAL_PARENT, [ +AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_REAL_PARENT], [ AC_MSG_CHECKING(for real_parent in struct task_struct) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -332,7 +348,7 @@ AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_real_parent) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIG, [ +AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIG], [ AC_MSG_CHECKING(for sig in struct task_struct) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -347,7 +363,7 @@ ac_cv_linux_sched_struct_task_struct_has_sig=no)]) AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_sig) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGMASK_LOCK, [ +AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGMASK_LOCK], [ AC_MSG_CHECKING(for sigmask_lock in struct task_struct) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" @@ -362,7 +378,7 @@ ac_cv_linux_sched_struct_task_struct_has_sigmask_lock=no)]) AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_sigmask_lock) CPPFLAGS="$save_CPPFLAGS"]) -AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGHAND, [ +AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGHAND], [ AC_MSG_CHECKING(for sighand in struct task_struct) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS" diff --git a/src/cf/linux-test5.m4 b/src/cf/linux-test5.m4 index 73724f66c..209683da4 100644 --- a/src/cf/linux-test5.m4 +++ b/src/cf/linux-test5.m4 @@ -1,5 +1,5 @@ -AC_DEFUN(OPENAFS_GCC_SUPPORTS_MARCH, [ +AC_DEFUN([OPENAFS_GCC_SUPPORTS_MARCH], [ AC_MSG_CHECKING(if $CC accepts -march=pentium) save_CFLAGS="$CFLAGS" CFLAGS="-MARCH=pentium" @@ -18,7 +18,7 @@ fi CFLAGS="$save_CFLAGS" ]) -AC_DEFUN(OPENAFS_GCC_NEEDS_NO_STRICT_ALIASING, [ +AC_DEFUN([OPENAFS_GCC_NEEDS_NO_STRICT_ALIASING], [ AC_MSG_CHECKING(if $CC needs -fno-strict-aliasing) save_CFLAGS="$CFLAGS" CFLAGS="-fno-strict-aliasing" @@ -35,7 +35,7 @@ fi CFLAGS="$save_CFLAGS" ]) -AC_DEFUN(OPENAFS_GCC_NEEDS_NO_STRENGTH_REDUCE, [ +AC_DEFUN([OPENAFS_GCC_NEEDS_NO_STRENGTH_REDUCE], [ AC_MSG_CHECKING(if $CC needs -fno-strength-reduce) save_CFLAGS="$CFLAGS" CFLAGS="-fno-strength-reduce" @@ -52,7 +52,7 @@ fi CFLAGS="$save_CFLAGS" ]) -AC_DEFUN(OPENAFS_GCC_SUPPORTS_NO_COMMON, [ +AC_DEFUN([OPENAFS_GCC_SUPPORTS_NO_COMMON], [ AC_MSG_CHECKING(if $CC supports -fno-common) save_CFLAGS="$CFLAGS" CFLAGS="-fno-common" @@ -69,7 +69,7 @@ fi CFLAGS="$save_CFLAGS" ]) -AC_DEFUN(OPENAFS_GCC_SUPPORTS_PIPE, [ +AC_DEFUN([OPENAFS_GCC_SUPPORTS_PIPE], [ AC_MSG_CHECKING(if $CC supports -pipe) save_CFLAGS="$CFLAGS" CFLAGS="-pipe" diff --git a/src/cf/osconf.m4 b/src/cf/osconf.m4 index 751444e65..75d5ce4e1 100644 --- a/src/cf/osconf.m4 +++ b/src/cf/osconf.m4 @@ -1,5 +1,5 @@ -AC_DEFUN(OPENAFS_OSCONF, [ +AC_DEFUN([OPENAFS_OSCONF], [ dnl defaults, override in case below as needed XCFLAGS='${DBG} ${OPTMZ}' @@ -253,22 +253,6 @@ case $AFS_SYSNAME in SHLIB_LINKER="${MT_CC} -shared" ;; - i386_linux22) - CC="gcc -pipe" - CCOBJ="gcc -pipe" - MT_CC="gcc -pipe" - KERN_OPTMZ=-O2 - LEX="flex -l" - MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}' - MT_LIBS="-lpthread" - PAM_CFLAGS="-O2 -Dlinux -DLINUX_PAM -fPIC" - SHLIB_LDFLAGS="-shared -Xlinker -x" - TXLIBS="-lncurses" - XCFLAGS="-O2 -D_LARGEFILE64_SOURCE" - YACC="bison -y" - SHLIB_LINKER="${MT_CC} -shared" - ;; - i386_umlinux22) CC="gcc -pipe" CCOBJ="gcc -pipe" @@ -285,7 +269,7 @@ case $AFS_SYSNAME in SHLIB_LINKER="${MT_CC} -shared" ;; - i386_linux24) + i386_linux*) CC="gcc -pipe" CCOBJ="gcc -pipe" MT_CC="gcc -pipe" @@ -701,7 +685,7 @@ case $AFS_SYSNAME in SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" ;; - sunx86_57) + sun4x_510) CC="/opt/SUNWspro/bin/cc" CCOBJ="/opt/SUNWspro/bin/cc" LEX="lex" @@ -722,6 +706,26 @@ case $AFS_SYSNAME in SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" ;; + sunx86_57) + CC="/opt/SUNWspro/bin/cc" + CCOBJ="/opt/SUNWspro/bin/cc" + LEX="lex" + LD="/usr/ccs/bin/ld" + MT_CC="/opt/SUNWspro/bin/cc" + MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}' + MT_LIBS="-lpthread -lsocket" + PAM_CFLAGS="-KPIC" + PAM_LIBS="-lc -lpam -lsocket -lnsl -lm" + SHLIB_CFLAGS="-KPIC" + SHLIB_LDFLAGS="-G -Bsymbolic" + TXLIBS="-lcurses" + XCFLAGS64='${XCFLAGS} -xarch=v9' + XCFLAGS="-dy -Bdynamic" + XLIBELFA="-lelf" + XLIBKVM="-lkvm" + XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl" + SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" + ;; sunx86_58) CC="/opt/SUNWspro/bin/cc" @@ -744,7 +748,26 @@ case $AFS_SYSNAME in SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" ;; - + sunx86_510) + CC="/opt/SUNWspro/bin/cc" + CCOBJ="/opt/SUNWspro/bin/cc" + LEX="lex" + LD="/usr/ccs/bin/ld" + MT_CC="/opt/SUNWspro/bin/cc" + MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}' + MT_LIBS="-lpthread -lsocket" + PAM_CFLAGS="-KPIC" + PAM_LIBS="-lc -lpam -lsocket -lnsl -lm" + SHLIB_CFLAGS="-KPIC" + SHLIB_LDFLAGS="-G -Bsymbolic" + TXLIBS="-lcurses" + XCFLAGS64='${XCFLAGS} -xarch=v9' + XCFLAGS="-dy -Bdynamic" + XLIBELFA="-lelf" + XLIBKVM="-lkvm" + XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl" + SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text" + ;; esac # diff --git a/src/cf/ressearch.m4 b/src/cf/ressearch.m4 index a0861dea2..c8cc0f4cc 100644 --- a/src/cf/ressearch.m4 +++ b/src/cf/ressearch.m4 @@ -1,4 +1,4 @@ -AC_DEFUN(AC_FUNC_RES_SEARCH, [ +AC_DEFUN([AC_FUNC_RES_SEARCH], [ ac_cv_func_res_search=no AC_TRY_LINK([ #include diff --git a/src/cf/solaris-cc.m4 b/src/cf/solaris-cc.m4 index 8b4752dda..7bee1cd96 100644 --- a/src/cf/solaris-cc.m4 +++ b/src/cf/solaris-cc.m4 @@ -1,5 +1,5 @@ dnl -dnl $Id: solaris-cc.m4,v 1.2 2002/08/15 21:10:23 shadow Exp $ +dnl $Id: solaris-cc.m4,v 1.3 2004/06/03 05:13:30 shadow Exp $ dnl dnl @@ -8,7 +8,7 @@ dnl whose digits correspond to the digits in the compiler dnl version. Thus compiler version 4.2.0 is 0x420. dnl -AC_DEFUN(AC_SOLARIS_CC_GOOD, [ +AC_DEFUN([AC_SOLARIS_CC_GOOD], [ SOLARISCC="$CC" save_CC="$CC" if test "$CC" ; then diff --git a/src/cf/solaris-dqrwlock.m4 b/src/cf/solaris-dqrwlock.m4 index b5aa65702..c26aa1c01 100644 --- a/src/cf/solaris-dqrwlock.m4 +++ b/src/cf/solaris-dqrwlock.m4 @@ -1,4 +1,4 @@ -AC_DEFUN(SOLARIS_UFSVFS_HAS_DQRWLOCK, [ +AC_DEFUN([SOLARIS_UFSVFS_HAS_DQRWLOCK], [ AC_MSG_CHECKING(for vfs_dqrwlock in struct ufsvfs) AC_CACHE_VAL(ac_cv_solaris_ufsvfs_has_dqrwlock, [ diff --git a/src/cf/solaris-fs-rolled.m4 b/src/cf/solaris-fs-rolled.m4 index 01d78d0f5..3fc22c6ad 100644 --- a/src/cf/solaris-fs-rolled.m4 +++ b/src/cf/solaris-fs-rolled.m4 @@ -1,4 +1,4 @@ -AC_DEFUN(SOLARIS_FS_HAS_FS_ROLLED, [ +AC_DEFUN([SOLARIS_FS_HAS_FS_ROLLED], [ AC_MSG_CHECKING(for fs_rolled in struct proc) AC_CACHE_VAL(ac_cv_solaris_fs_has_fs_rolled, [ diff --git a/src/cf/solaris-pcorefile.m4 b/src/cf/solaris-pcorefile.m4 index 6764e4215..a350a6000 100644 --- a/src/cf/solaris-pcorefile.m4 +++ b/src/cf/solaris-pcorefile.m4 @@ -1,4 +1,4 @@ -AC_DEFUN(SOLARIS_PROC_HAS_P_COREFILE, [ +AC_DEFUN([SOLARIS_PROC_HAS_P_COREFILE], [ AC_MSG_CHECKING(for p_corefile in struct proc) AC_CACHE_VAL(ac_cv_solaris_proc_has_p_corefile, [ diff --git a/src/config/NTMakefile b/src/config/NTMakefile index fb073793a..310173125 100644 --- a/src/config/NTMakefile +++ b/src/config/NTMakefile @@ -347,9 +347,18 @@ idirs: doclink ! IF (!EXIST($(OJT)\WINNT\install\InstallShield5)) $(MKDIR) $(OJT)\WINNT\install\InstallShield5 ! ENDIF +! IF (!EXIST($(OJT)\WINNT\install\loopback)) + $(MKDIR) $(OJT)\WINNT\install\loopback +! ENDIF ! IF (!EXIST($(OJT)\WINNT\install\NSIS)) $(MKDIR) $(OJT)\WINNT\install\NSIS ! ENDIF +! IF (!EXIST($(OJT)\WINNT\install\wix)) + $(MKDIR) $(OJT)\WINNT\install\wix +! ENDIF +! IF (!EXIST($(OJT)\WINNT\install\wix\custom)) + $(MKDIR) $(OJT)\WINNT\install\wix\custom +! ENDIF ! IF (!EXIST($(OJT)\WINNT\install\Win9x)) $(MKDIR) $(OJT)\WINNT\install\Win9x ! ENDIF diff --git a/src/config/NTMakefile.i386_nt40 b/src/config/NTMakefile.i386_nt40 index b820297a0..7ab2fe65a 100644 --- a/src/config/NTMakefile.i386_nt40 +++ b/src/config/NTMakefile.i386_nt40 @@ -79,11 +79,12 @@ LIB = $(AFSDEV_LIB) #define used in WinNT/2000 installation and program version display AFSPRODUCT_VER_MAJOR=1 AFSPRODUCT_VER_MINOR=3 -AFSPRODUCT_VER_PATCH=6400 +AFSPRODUCT_VER_PATCH=6500 AFSPRODUCT_VER_BUILD=0 AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH) AFSPRODUCT_FILE_VERSION=$(AFSPRODUCT_VER_MAJOR),$(AFSPRODUCT_VER_MINOR),$(AFSPRODUCT_VER_PATCH),$(AFSPRODUCT_VER_BUILD) -CELLNAME_DEFAULT=Your Cell Name +# Set CELLNAME_DEFAULT to "your cell name" +CELLNAME_DEFAULT=openafs.org CELLSERVDB_INSTALL=CellServDB.GrandCentral CELLSERVDB_WEB=http://grand.central.org/dl/cellservdb/CellServDB TARGETOS = WINNT @@ -166,7 +167,7 @@ OUT=$(OJT)\$(RELDIR) # !ENDIF !IF ("$(APPVER)" == "") -APPVER=4.0 +APPVER=5.0 !ENDIF @@ -242,7 +243,7 @@ afscdefs = $(afscdefs) /G7 /GT /GS !IF ("$(AFSDEV_BUILDTYPE)" == "FREE") -afscflags = $(afscflags) /Ox +afscflags = $(afscflags) /Ox /Zi cdebug = $(cdebug:-Od=) # avoid annoying override warning (D4025) cvarsdll = $(cvarsdll:-MDd=-MD) NODEBUG=1 @@ -350,7 +351,7 @@ mfclibsdll = $(mfclibsdll:msvcrt.lib=) # Link with binmode.obj; files will be opened in binary mode by default. !IF ("$(AFSDEV_BUILDTYPE)" == "FREE") -ldebug= +ldebug=/DEBUG /PDB:$*.pdb EXEPREP = rebase -b 0x00400000 -x $(@D) -q $@ DLLPREP = rebase -i $(DESTDIR)\NTDllmap.txt -x $(@D) -q $@ diff --git a/src/config/afs_sysnames.h b/src/config/afs_sysnames.h index c568352cb..ceda90e57 100644 --- a/src/config/afs_sysnames.h +++ b/src/config/afs_sysnames.h @@ -46,8 +46,8 @@ #define SYS_NAME_ID_hp_ux102 414 #define SYS_NAME_ID_hp_ux110 415 #define SYS_NAME_ID_hp_ux11i 416 -#define SYS_NAME_ID_ia64_hpux1122 417 -#define SYS_NAME_ID_ia64_hpux1123 418 +#define SYS_NAME_ID_ia64_hpux1122 417 +#define SYS_NAME_ID_ia64_hpux1123 418 #define SYS_NAME_ID_mac2_51 500 #define SYS_NAME_ID_mac_aux10 501 @@ -92,12 +92,14 @@ #define SYS_NAME_ID_sun4x_57 938 #define SYS_NAME_ID_sun4x_58 939 #define SYS_NAME_ID_sun4x_59 940 +#define SYS_NAME_ID_sun4x_510 941 /* Sigh. If I leave a gap here IBM will do this sequentially. If I don't they won't allocate sunx86 IDs at all. So leave a gap and pray. */ -#define SYS_NAME_ID_sunx86_57 950 -#define SYS_NAME_ID_sunx86_58 951 -#define SYS_NAME_ID_sunx86_59 952 +#define SYS_NAME_ID_sunx86_57 950 +#define SYS_NAME_ID_sunx86_58 951 +#define SYS_NAME_ID_sunx86_59 952 +#define SYS_NAME_ID_sunx86_510 953 #define SYS_NAME_ID_vax_ul4 1003 #define SYS_NAME_ID_vax_ul40 1004 diff --git a/src/config/afsconfig.h.in b/src/config/afsconfig.h.in index 9ec0a3fe5..150c3bf3a 100644 --- a/src/config/afsconfig.h.in +++ b/src/config/afsconfig.h.in @@ -266,12 +266,18 @@ /* define if you struct inode has i_devices */ #undef STRUCT_INODE_HAS_I_DEVICES +/* define if you struct inode has i_security */ +#undef STRUCT_INODE_HAS_I_SECURITY + /* define if your struct inode has data_buffers */ #undef STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS /* define if your recalc_sigpending takes void */ #undef RECALC_SIGPENDING_TAKES_VOID +/* define if your linux kernel uses SELinux features */ +#undef LINUX_KERNEL_IS_SELINUX + /* define if your linux kernel has linux/syscall.h */ #undef HAVE_KERNEL_LINUX_SYSCALL_H diff --git a/src/config/param.i386_linux26.h b/src/config/param.i386_linux26.h index 641dc8d05..392c469bc 100644 --- a/src/config/param.i386_linux26.h +++ b/src/config/param.i386_linux26.h @@ -49,11 +49,6 @@ #define AFS_GLOBAL_SUNLOCK #endif -#if defined(MODULE) && defined(CONFIG_MODVERSIONS) -#define MODVERSIONS -#include -#endif - #endif /* __KERNEL__ && !DUMP_KERNEL */ #include diff --git a/src/config/param.nbsd20.h b/src/config/param.nbsd20.h index 9c1ef4063..2d1fdd04c 100644 --- a/src/config/param.nbsd20.h +++ b/src/config/param.nbsd20.h @@ -52,7 +52,7 @@ #endif #define AFS_HAVE_FFS 1 /* Use system's ffs. */ -#define AFS_HAVE_STATVFS 0 /* System doesn't supports statvfs */ +#define AFS_HAVE_STATVFS 1 /* System supports statvfs */ #define AFS_GCPAGS 0 /* if nonzero, garbage collect PAGs */ #define AFS_USE_GETTIMEOFDAY 1 /* use gettimeofday to implement rx clock */ diff --git a/src/config/param.ppc_darwin_12.h b/src/config/param.ppc_darwin_12.h index becb46773..7d2b162aa 100644 --- a/src/config/param.ppc_darwin_12.h +++ b/src/config/param.ppc_darwin_12.h @@ -14,6 +14,7 @@ #define AFS_DARWIN_ENV #define AFS_NONFSTRANS #define AFS_SYSCALL 230 +#define DARWIN_REFBASE 0 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" @@ -77,6 +78,7 @@ #define AFS_USR_DARWIN_ENV #define AFS_NONFSTRANS #define AFS_SYSCALL 230 +#define DARWIN_REFBASE 0 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" diff --git a/src/config/param.ppc_darwin_13.h b/src/config/param.ppc_darwin_13.h index 59b9c0421..2c36b97f3 100644 --- a/src/config/param.ppc_darwin_13.h +++ b/src/config/param.ppc_darwin_13.h @@ -15,6 +15,7 @@ #define AFS_DARWIN13_ENV #define AFS_NONFSTRANS #define AFS_SYSCALL 230 +#define DARWIN_REFBASE 0 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" @@ -80,6 +81,7 @@ #define AFS_USR_DARWIN13_ENV #define AFS_NONFSTRANS #define AFS_SYSCALL 230 +#define DARWIN_REFBASE 0 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" diff --git a/src/config/param.ppc_darwin_14.h b/src/config/param.ppc_darwin_14.h index 6652e2f84..cb4644804 100644 --- a/src/config/param.ppc_darwin_14.h +++ b/src/config/param.ppc_darwin_14.h @@ -17,6 +17,7 @@ #define AFS_NONFSTRANS #define AFS_SYSCALL 230 #define AFS_NAMEI_ENV 1 +#define DARWIN_REFBASE 0 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" @@ -84,6 +85,7 @@ #define AFS_USR_DARWIN14_ENV #define AFS_NONFSTRANS #define AFS_SYSCALL 230 +#define DARWIN_REFBASE 0 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" diff --git a/src/config/param.ppc_darwin_70.h b/src/config/param.ppc_darwin_70.h index e0cb9c05e..82d695c32 100644 --- a/src/config/param.ppc_darwin_70.h +++ b/src/config/param.ppc_darwin_70.h @@ -20,6 +20,7 @@ #define AFS_NONFSTRANS #define AFS_SYSCALL 230 #define AFS_NAMEI_ENV 1 +#define DARWIN_REFBASE 3 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" @@ -92,6 +93,7 @@ #define AFS_USR_DARWIN70_ENV #define AFS_NONFSTRANS #define AFS_SYSCALL 230 +#define DARWIN_REFBASE 0 /* File system entry (used if mount.h doesn't define MOUNT_AFS */ #define AFS_MOUNT_AFS "afs" diff --git a/src/config/param.sgi_65.h b/src/config/param.sgi_65.h index d69c1e16e..433f81df7 100644 --- a/src/config/param.sgi_65.h +++ b/src/config/param.sgi_65.h @@ -159,8 +159,6 @@ #define AFS_USR_SGI64_ENV 1 #define AFS_USR_SGI65_ENV 1 -#include - /*#define AFS_GLOBAL_SUNLOCK 1 *//* For global locking */ #define AFS_3DISPARES 1 /* Utilize the 3 available disk inode 'spares' */ @@ -179,6 +177,10 @@ #define AFS_HAVE_FFS 1 /* Use system's ffs. */ #define AFS_HAVE_STATVFS 0 /* System doesn't support statvfs */ +#define AFS_64BIT_ENV 1 /* Defines afs_int32 as int, not long. */ + +#include + /* Extra kernel definitions (from kdefs file) */ #ifdef KERNEL #define AFS_UIOFMODE 1 /* Only in afs/afs_vnodeops.c (afs_ustrategy) */ diff --git a/src/config/param.sun4x_510.h b/src/config/param.sun4x_510.h new file mode 100644 index 000000000..840314185 --- /dev/null +++ b/src/config/param.sun4x_510.h @@ -0,0 +1,190 @@ +#ifndef UKERNEL +/* This section for kernel libafs compiles only */ + +#ifndef AFS_PARAM_H +#define AFS_PARAM_H + +#define AFS_VFS_ENV 1 +/* Used only in vfsck code; is it needed any more???? */ + +#define AFS_VFSINCL_ENV 1 /* NOBODY uses this.... */ +#define AFS_GREEDY43_ENV 1 /* Used only in rx/rx_user.c */ +#define AFS_ENV 1 +#define AFS_SUN_ENV 1 +#define AFS_SUN5_ENV 1 +#define AFS_SUN52_ENV 1 +#define AFS_SUN53_ENV 1 +#define AFS_SUN54_ENV 1 +#define AFS_SUN55_ENV 1 +#define AFS_SUN56_ENV 1 +#define AFS_SUN57_ENV 1 +#define AFS_SUN58_ENV 1 +#define AFS_SUN59_ENV 1 +#define AFS_SUN510_ENV 1 + +#define AFS_64BIT_ENV 1 /* Defines afs_int32 as int, not long. */ + +#define AFS_HAVE_FLOCK_SYSID 1 + +#ifdef AFS_NAMEI_ENV +#define AFS_64BIT_IOPS_ENV 1 /* needed for NAMEI... */ +#else /* AFS_NAMEI_ENV */ +#define AFS_3DISPARES 1 /* Utilize the 3 available disk inode 'spares' */ +#endif /* AFS_NAMEI_ENV */ + +#include + +#define AFS_GLOBAL_SUNLOCK 1 /* For global locking */ +#define RXK_LISTENER_ENV 1 +#define AFS_GCPAGS 1 /* if nonzero, garbage collect PAGs */ + +#define AFS_SYSCALL 65 + +/* File system entry (used if mount.h doesn't define MOUNT_AFS */ +#define AFS_MOUNT_AFS "afs" + +/* Machine / Operating system information */ +#define sys_sun4x_510 1 +#define SYS_NAME "sun4x_510" +#define SYS_NAME_ID SYS_NAME_ID_sun4x_510 +#define AFSBIG_ENDIAN 1 +#define AFS_HAVE_FFS 1 /* Use system's ffs. */ +#define AFS_HAVE_VXFS 1 /* Support cache on Veritas vxfs file system */ +#define AFS_HAVE_STATVFS 1 /* System supports statvfs */ +#define AFS_VM_RDWR_ENV 1 /* read/write implemented via VM */ +#define AFS_USE_GETTIMEOFDAY 1 /* use gettimeofday to implement rx clock */ + +#define NEARINODE_HINT 1 /* hint to ufs module to scatter inodes on disk */ +#define nearInodeHash(volid, hval) { \ + unsigned char* ts = (unsigned char*)&(volid)+sizeof(volid)-1;\ + for ( (hval)=0; ts >= (unsigned char*)&(volid); ts--){\ + (hval) *= 173; \ + (hval) += *ts; \ + } \ + } + +/* Extra kernel definitions (from kdefs file) */ +#ifdef KERNEL +/* sun definitions here */ +#define AFS_UIOFMODE 1 /* Only in afs/afs_vnodeops.c (afs_ustrategy) */ +#define AFS_SYSVLOCK 1 /* sys v locking supported */ +/*#define AFS_USEBUFFERS 1*/ +#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 osi_GetTime(x) uniqtime(x) + +/** + * These defines are for the 64 bit Solaris 7 port + * AFS_SYSCALL32 is used to protect the ILP32 syscall interface + * AFS_64BIT_ENV is for use of 64 bit inode numbers + */ +#if defined(__sparcv9) +#define AFS_SUN57_64BIT_ENV 1 +#define AFS_64BIT_INO 1 +#endif + +/** + * Solaris 7 64 bit has two versions of uniqtime. Since we consistently + * use 32 bit quantities for time in afs, we now use uniqtime32 + */ +#if defined(AFS_SUN57_64BIT_ENV) +#undef osi_GetTime +#define osi_GetTime(x) uniqtime32(x) +#endif + + + +#define AFS_KALLOC(n) kmem_alloc(n, KM_SLEEP) +#define AFS_KALLOC_NOSLEEP(n) kmem_alloc(n, KM_NOSLEEP) +#define AFS_KFREE kmem_free +#define VATTR_NULL vattr_null +#define memset(A, B, S) bzero(A, S) +#define memcpy(B, A, S) bcopy(A, B, S) +#define memcmp(A, B, S) bcmp(A, B, S) +#endif /* KERNEL */ +#define AFS_DIRENT +#ifndef CMSERVERPREF +#define CMSERVERPREF +#endif +#define ROOTINO UFSROOTINO + +#endif /* AFS_PARAM_H */ + +#else /* !defined(UKERNEL) */ + +/* This section for user space compiles only */ + +#ifndef AFS_PARAM_H +#define AFS_PARAM_H + +#define AFS_VFS_ENV 1 +/* Used only in vfsck code; is it needed any more???? */ +#define RXK_LISTENER_ENV 1 +#define AFS_USERSPACE_IP_ADDR 1 +#define AFS_GCPAGS 0 /* if nonzero, garbage collect PAGs */ + +#define UKERNEL 1 /* user space kernel */ +#define AFS_GREEDY43_ENV 1 /* Used only in rx/rx_user.c */ +#define AFS_ENV 1 +#define AFS_USR_SUN5_ENV 1 +#define AFS_USR_SUN6_ENV 1 +#define AFS_USR_SUN7_ENV 1 +#define AFS_USR_SUN8_ENV 1 +#define AFS_USR_SUN9_ENV 1 + +#define AFS_64BIT_ENV 1 + +#include + +#if 0 +#define AFS_GLOBAL_SUNLOCK 1 /* For global locking */ +#endif + +#define AFS_3DISPARES 1 /* Utilize the 3 available disk inode 'spares' */ +#define AFS_SYSCALL 65 + +/* File system entry (used if mount.h doesn't define MOUNT_AFS */ +#define AFS_MOUNT_AFS 1 + +/* Machine / Operating system information */ +#define sys_sun4x_59 1 +#define SYS_NAME "sun4x_59" +#define SYS_NAME_ID SYS_NAME_ID_sun4x_59 +#define AFSBIG_ENDIAN 1 +#define AFS_HAVE_FFS 1 /* Use system's ffs. */ +#define AFS_HAVE_STATVFS 0 /* System doesn't support statvfs */ + +/* Extra kernel definitions (from kdefs file) */ +#ifdef KERNEL +#define AFS_UIOFMODE 1 /* Only in afs/afs_vnodeops.c (afs_ustrategy) */ +#define AFS_SYSVLOCK 1 /* sys v locking supported */ +/*#define AFS_USEBUFFERS 1*/ +#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 1 +#define AFS_UIOUSER UIO_USERSPACE +#define AFS_CLBYTES MCLBYTES +#define AFS_MINCHANGE 2 +#define VATTR_NULL usr_vattr_null +#endif /* KERNEL */ +#define AFS_DIRENT +#ifndef CMSERVERPREF +#define CMSERVERPREF +#endif +#define ROOTINO UFSROOTINO + +#endif /* AFS_PARAM_H */ + +#endif /* !defined(UKERNEL) */ diff --git a/src/config/param.sunx86_510.h b/src/config/param.sunx86_510.h new file mode 100644 index 000000000..102a96f2f --- /dev/null +++ b/src/config/param.sunx86_510.h @@ -0,0 +1,204 @@ +#ifndef UKERNEL +/* This section for kernel libafs compiles only */ + +/* + * 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 AFS_PARAM_H +#define AFS_PARAM_H + +#define AFS_VFS_ENV 1 +/* Used only in vfsck code; is it needed any more???? */ + +#define AFS_VFSINCL_ENV 1 /* NOBODY uses this.... */ +#define AFS_GREEDY43_ENV 1 /* Used only in rx/rx_user.c */ +#define AFS_ENV 1 +#define AFS_SUN_ENV 1 +#define AFS_SUN5_ENV 1 +#define AFS_SUN52_ENV 1 +#define AFS_SUN53_ENV 1 +#define AFS_SUN54_ENV 1 +#define AFS_SUN55_ENV 1 +#define AFS_SUN56_ENV 1 +#define AFS_SUN57_ENV 1 +#define AFS_SUN58_ENV 1 +#define AFS_SUN59_ENV 1 +#define AFS_SUN510_ENV 1 +#define AFS_X86_ENV 1 + +#define AFS_64BIT_ENV 1 /* Defines afs_int32 as int, not long. */ + +#define AFS_HAVE_FLOCK_SYSID 1 + +#include + +#define AFS_GLOBAL_SUNLOCK 1 /* For global locking */ +#define RXK_LISTENER_ENV 1 +#define AFS_GCPAGS 1 /* if nonzero, garbage collect PAGs */ + +#ifdef AFS_NAMEI_ENV +#define AFS_64BIT_IOPS_ENV 1 /* needed for NAMEI... */ +#else /* AFS_NAMEI_ENV */ +#define AFS_3DISPARES 1 /* Utilize the 3 available disk inode 'spares' */ +#endif /* AFS_NAMEI_ENV */ + +#define AFS_SYSCALL 65 + +/* File system entry (used if mount.h doesn't define MOUNT_AFS */ +#define AFS_MOUNT_AFS "afs" + +/* Machine / Operating system information */ +#define sys_sunx86_510 1 +#define SYS_NAME "sunx86_510" +#define SYS_NAME_ID SYS_NAME_ID_sunx86_510 +#define AFSLITTLE_ENDIAN 1 +#define AFS_HAVE_FFS 1 /* Use system's ffs. */ +#define AFS_HAVE_VXFS 1 /* Support cache on Veritas vxfs file system */ +#define AFS_HAVE_STATVFS 1 /* System supports statvfs */ +#define AFS_VM_RDWR_ENV 1 /* read/write implemented via VM */ +#define AFS_USE_GETTIMEOFDAY 1 /* use gettimeofday to implement rx clock */ + +#define NEARINODE_HINT 1 /* hint to ufs module to scatter inodes on disk */ +#define nearInodeHash(volid, hval) { \ + unsigned char* ts = (unsigned char*)&(volid)+sizeof(volid)-1;\ + for ( (hval)=0; ts >= (unsigned char*)&(volid); ts--){\ + (hval) *= 173; \ + (hval) += *ts; \ + } \ + } + +/* Extra kernel definitions (from kdefs file) */ +#ifdef KERNEL +/* sun definitions here */ +#define AFS_UIOFMODE 1 /* Only in afs/afs_vnodeops.c (afs_ustrategy) */ +#define AFS_SYSVLOCK 1 /* sys v locking supported */ +/*#define AFS_USEBUFFERS 1*/ +#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 osi_GetTime(x) uniqtime(x) + +/** + * These defines are for the 64 bit Solaris 7 port + * AFS_SYSCALL32 is used to protect the ILP32 syscall interface + * AFS_64BIT_ENV is for use of 64 bit inode numbers + */ +#if defined(__sparcv9) +#define AFS_SUN57_64BIT_ENV 1 +#define AFS_64BIT_INO 1 +#endif + +/** + * Solaris 7 64 bit has two versions of uniqtime. Since we consistently + * use 32 bit quantities for time in afs, we now use uniqtime32 + */ +#if defined(AFS_SUN57_64BIT_ENV) +#undef osi_GetTime +#define osi_GetTime(x) uniqtime32(x) +#endif + + + +#define AFS_KALLOC(n) kmem_alloc(n, KM_SLEEP) +#define AFS_KALLOC_NOSLEEP(n) kmem_alloc(n, KM_NOSLEEP) +#define AFS_KFREE kmem_free +#define VATTR_NULL vattr_null +#define memset(A, B, S) bzero(A, S) +#define memcpy(B, A, S) bcopy(A, B, S) +#define memcmp(A, B, S) bcmp(A, B, S) +#endif /* KERNEL */ +#define AFS_DIRENT +#ifndef CMSERVERPREF +#define CMSERVERPREF +#endif +#define ROOTINO UFSROOTINO + +#endif /* AFS_PARAM_H */ + +#else /* !defined(UKERNEL) */ + +/* This section for user space compiles only */ + +/* + * 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 AFS_PARAM_H +#define AFS_PARAM_H + +#define AFS_VFS_ENV 1 +/* Used only in vfsck code; is it needed any more???? */ +#define RXK_LISTENER_ENV 1 +#define AFS_USERSPACE_IP_ADDR 1 +#define AFS_GCPAGS 0 /* if nonzero, garbage collect PAGs */ + +#define UKERNEL 1 /* user space kernel */ +#define AFS_GREEDY43_ENV 1 /* Used only in rx/rx_user.c */ +#define AFS_ENV 1 +#define AFS_USR_SUN5_ENV 1 +#define AFS_USR_SUN6_ENV 1 + +#include + +#if 0 +#define AFS_GLOBAL_SUNLOCK 1 /* For global locking */ +#endif + +#define AFS_3DISPARES 1 /* Utilize the 3 available disk inode 'spares' */ +#define AFS_SYSCALL 65 + +/* File system entry (used if mount.h doesn't define MOUNT_AFS */ +#define AFS_MOUNT_AFS 1 + +/* Machine / Operating system information */ +#define sys_sun4x_55 1 +#define SYS_NAME "sun4x_55" +#define SYS_NAME_ID SYS_NAME_ID_sun4x_55 +#define AFSLITTLE_ENDIAN 1 +#define AFS_HAVE_FFS 1 /* Use system's ffs. */ +#define AFS_HAVE_STATVFS 0 /* System doesn't support statvfs */ + +/* Extra kernel definitions (from kdefs file) */ +#ifdef KERNEL +#define AFS_UIOFMODE 1 /* Only in afs/afs_vnodeops.c (afs_ustrategy) */ +#define AFS_SYSVLOCK 1 /* sys v locking supported */ +/*#define AFS_USEBUFFERS 1*/ +#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 1 +#define AFS_UIOUSER UIO_USERSPACE +#define AFS_CLBYTES MCLBYTES +#define AFS_MINCHANGE 2 +#define VATTR_NULL usr_vattr_null +#endif /* KERNEL */ +#define AFS_DIRENT +#ifndef CMSERVERPREF +#define CMSERVERPREF +#endif +#define ROOTINO UFSROOTINO + +#endif /* AFS_PARAM_H */ + +#endif /* !defined(UKERNEL) */ diff --git a/src/config/venus.h b/src/config/venus.h index c887475fa..f5380264f 100644 --- a/src/config/venus.h +++ b/src/config/venus.h @@ -179,5 +179,6 @@ struct cm_initparams { /* Coordinated 'C' pioctl's */ #define VIOC_NEWALIAS _CVICEIOCTL(1) /* create new cell alias */ #define VIOC_GETALIAS _CVICEIOCTL(2) /* get alias info */ +#define VIOC_CBADDR _CVICEIOCTL(3) /* push callback addr */ #endif /* AFS_VENUS_H */ diff --git a/src/des/Makefile.in b/src/des/Makefile.in index ac46e5d2a..9dbefd946 100644 --- a/src/des/Makefile.in +++ b/src/des/Makefile.in @@ -53,9 +53,6 @@ all: \ # # Build rules # -.c.o: - ${CC} -c ${CFLAGS} $< - libdes.a: ${OBJS} AFS_component_version_number.o $(RM) -f libdes.a $(AR) crv libdes.a ${OBJS} AFS_component_version_number.o diff --git a/src/fsint/Makefile.in b/src/fsint/Makefile.in index 6903771bf..40cb7dafc 100644 --- a/src/fsint/Makefile.in +++ b/src/fsint/Makefile.in @@ -119,7 +119,8 @@ ${DEST}/include/afs/afsint.h: afsint.h clean: $(RM) -f *.o *.cs.c *.ss.c *.er.c *.a *.xdr.c core \ - afsint.h afscbint.h AFS_component_version_number.c + afsint.h afscbint.h AFS_component_version_number.c \ + Kvice.h Kcallback.h include ../config/Makefile.version diff --git a/src/fsint/afsint.xg b/src/fsint/afsint.xg index bc00cd9c7..7637d22f4 100644 --- a/src/fsint/afsint.xg +++ b/src/fsint/afsint.xg @@ -698,3 +698,7 @@ GiveUpAllCallBacks( GetCapabilities( Capabilities *capabilities ) = 65540; + +CallBackRxConnAddr( + IN afs_int32 *addr +) = 65541; diff --git a/src/kauth/NTMakefile b/src/kauth/NTMakefile index 447bf4d78..d89b5a842 100644 --- a/src/kauth/NTMakefile +++ b/src/kauth/NTMakefile @@ -125,7 +125,7 @@ KASERVER_EXELIBS =\ $(DESTDIR)\lib\afs\afsprocmgmt.lib $(KASERVER): $(KASERVER_OBJS) $(AFSLIBS) $(KASERVER_EXELIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) #build $(OUT)\kadatabase.obj @@ -149,7 +149,7 @@ KAS_OBJS =\ $(OUT)\kas.res $(KAS): $(KAS_OBJS) $(AFSLIBS) $(KAUTH_LIBFILE) $(TOKENLIB) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) ########### Misc Exes ####################################################### @@ -162,20 +162,20 @@ KPASSWD_OBJS =\ $(OUT)\kpasswd.res $(KPASSWD_EXEFILE): $(KPASSWD_OBJS) $(AFSLIBS) $(KAUTH_LIBFILE) $(TOKENLIB) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) #kpwvalid.exe $(OUT)\kpwvalid.exe: $(OUT)\kpwvalid.obj $(AFSLIBS) $(KAUTH_LIBFILE) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib #kdb.exe - Not implemented for NT - because dbm not available on NT #kdb.exe: $(OUT)\kdb.obj $(AFSLIBS) $(KAUTH_LIBFILE) -# $(EXECONLINK) +# $(EXECONLINK) dnsapi.lib #rebuild.exe $(OUT)\rebuild.exe: $(OUT)\rebuild.obj $(OUT)\kautils.obj $(AFSLIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib ############################################################################ # Definitions for generating versioninfo resources diff --git a/src/kauth/kpasswd.c b/src/kauth/kpasswd.c index 176e19dbc..7f1ba2145 100644 --- a/src/kauth/kpasswd.c +++ b/src/kauth/kpasswd.c @@ -12,7 +12,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/kauth/kpasswd.c,v 1.13 2003/12/07 22:49:26 jaltman Exp $"); + ("$Header: /cvs/openafs/src/kauth/kpasswd.c,v 1.14 2004/06/05 20:11:06 jaltman Exp $"); #include #include @@ -211,10 +211,10 @@ CommandProc(as, arock) char *arock; struct cmd_syndesc *as; { - char name[MAXKTCNAMELEN]; - char instance[MAXKTCNAMELEN]; - char cell[MAXKTCREALMLEN]; - char realm[MAXKTCREALMLEN]; + char name[MAXKTCNAMELEN]=""; + char instance[MAXKTCNAMELEN]=""; + char cell[MAXKTCREALMLEN]=""; + char realm[MAXKTCREALMLEN]=""; afs_int32 serverList[MAXSERVERS]; char *lcell; /* local cellname */ int code; diff --git a/src/libafs/MakefileProto.AIX.in b/src/libafs/MakefileProto.AIX.in index ef3443c2a..610427718 100644 --- a/src/libafs/MakefileProto.AIX.in +++ b/src/libafs/MakefileProto.AIX.in @@ -85,7 +85,7 @@ setup: ln -fs /usr/include/sys sys ln -fs /usr/include/nfs nfs ln -fs /usr/include/jfs ufs - for m in $${KMODS} ; do \ + for m in ${KMODS} ; do \ KDIR=MODLOAD-$$m ; \ mkdir -p $${KDIR} ; \ ln -fs ../Makefile $${KDIR}/Makefile ; \ @@ -94,7 +94,7 @@ setup: done ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}: - for m in $${KMODS} ; do \ + for m in ${KMODS} ; do \ KDIR=MODLOAD-$$m ; \ echo Building in directory: $${KDIR} ; \ if [ "$$m" = "32" ] ; then \ diff --git a/src/libafs/MakefileProto.LINUX.in b/src/libafs/MakefileProto.LINUX.in index efba6f412..620de5095 100644 --- a/src/libafs/MakefileProto.LINUX.in +++ b/src/libafs/MakefileProto.LINUX.in @@ -36,8 +36,10 @@ LINUX_KERNEL_PATH=@LINUX_KERNEL_PATH@ # System specific build commands and flags -CCFLAGS = $(COMMON_KERN_CFLAGS) @P5PLUS_KOPTS@ -I../mach -DEFINES = $(COMMON_DEFINES) -DCPU=586 -DKBUILD_BASENAME=libafs_$(subst .,_,$(subst -,_,${CLIENT})) -DKBUILD_MODNAME=libafs_$(subst .,_,$(subst -,_,${CLIENT})) +# All the platform-specific and kernel-related things are provided by +# the kernel build system. So we should _not_ use COMMON_KERN_CFLAGS! +CCFLAGS = -Wno-strict-prototypes +DEFINES = $(COMMON_DEFINES) CCFLAGS = $(COMMON_KERN_CFLAGS) @P5PLUS_KOPTS@ @@ -86,7 +88,8 @@ CCFLAGS = $(COMMON_KERN_CFLAGS) -ffixed-r13 -mfixed-range=f10-f15,f32-f127 -fali DEFINES = $(COMMON_DEFINES) -INCLUDES = -I. -I../ -I${TOP_OBJDIR}/src/config +INCLUDES = -I. -I../ -I${TOP_OBJDIR}/src/config \ + -I${TOP_SRCDIR}/rx -I${TOP_OBJDIR}/src/rxstat CFLAGS = $(CCFLAGS) $(DEFINES) $(INCLUDES) @@ -101,6 +104,12 @@ DESTDIRS=linux_destdirs include Makefile.common + +LINUX_MODULE_EXT=ko + +LINUX_MODULE_EXT=o + + LINUX_MODULE_NAME= LOCAL_SMP_DEF= @@ -110,7 +119,7 @@ setup: for m in ${MPS} ; do \ KDIR=$(KOBJ)-${LINUX_VERSION}${LINUX_MODULE_NAME}-$$m; \ mkdir -p $${KDIR}; \ - ln -fs ../Makefile $${KDIR}/Makefile ; \ + ln -fs ../Makefile $${KDIR}/Makefile.afs ; \ ln -fs ../Makefile.common $${KDIR}/Makefile.common; \ ln -fs ../config $${KDIR}/config; \ done @@ -135,7 +144,7 @@ ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}: ln -fs ${LINUX_KERNEL_PATH}/include/asm-parisc asm ln -fs ${LINUX_KERNEL_PATH}/include/asm-alpha asm - + ln -fs ${LINUX_KERNEL_PATH}/include/asm-i386 asm ln -fs ${LINUX_KERNEL_PATH}/include/asm-um asm @@ -153,8 +162,6 @@ ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}: ln -fs ${LINUX_KERNEL_PATH}/include/asm-sparc64 asm ln -fs ${LINUX_KERNEL_PATH}/include/asm-ia64 asm - - ln -fs ${LINUX_KERNEL_PATH}/include/asm-i386/mach-default mach for m in ${MPS} ; do \ KDIR=${KOBJ}-${LINUX_VERSION}${LINUX_MODULE_NAME}-$$m ; \ @@ -173,8 +180,9 @@ ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}: TARG=libafs ; \ fi ; \ cd $${KDIR} ; \ - $(MAKE) SMP_DEF="$${SMP_DEF}" $@_$${TARG} CLIENT=${LINUX_VERSION}${LINUX_MODULE_NAME} || exit $$?; \ + $(MAKE) -f Makefile.afs SMP_DEF="$${SMP_DEF}" $@_$${TARG} CLIENT=${LINUX_VERSION}${LINUX_MODULE_NAME} KDIR=$${KDIR} || exit $$?; \ cd ../ ; \ + done linux_compdirs_libafs: depsrcs libafs @@ -193,10 +201,10 @@ linux_destdirs_libafs.bm: dest_libafs.bm # Below this line are targets when in the COMMON directory: # For Linux there is no kernel NFS server. -LIBAFS = libafs-${CLIENT}.o -LIBAFS_MP = libafs-${CLIENT}.mp.o -LIBAFS_EP = libafs-${CLIENT}.ep.o -LIBAFS_BM = libafs-${CLIENT}.bm.o +LIBAFS = libafs-${CLIENT}.${LINUX_MODULE_EXT} +LIBAFS_MP = libafs-${CLIENT}.mp.${LINUX_MODULE_EXT} +LIBAFS_EP = libafs-${CLIENT}.ep.${LINUX_MODULE_EXT} +LIBAFS_BM = libafs-${CLIENT}.bm.${LINUX_MODULE_EXT} INST_LIBAFS = ${DESTDIR}${afskerneldir}/${LIBAFS} INST_LIBAFS_MP = ${DESTDIR}${afskerneldir}/${LIBAFS_MP} @@ -221,6 +229,17 @@ libafs.ep: $(LIBAFS_EP) libafs.bm: $(LIBAFS_BM) echo BM Build Complete + +${LIBAFS} ${LIBAFS_MP} ${LIBAFS_EP} ${LIBAFS_BM}: libafs.ko + cp libafs.ko $@ + +.FORCE: +libafs.ko: .FORCE + ../$(srcdir)/make_kbuild_makefile.pl ${KDIR} $@ \ + @TOP_OBJDIR@/src/config/Makefile.config Makefile.afs Makefile.common + $(MAKE) -C ${LINUX_KERNEL_PATH} M=@TOP_OBJDIR@/src/libafs/${KDIR} modules + + ${LIBAFS}: $(AFSAOBJS) $(AFSNONFSOBJS) $(RM) -f $@ $(LD) -r -o $@ $(AFSAOBJS) $(AFSNONFSOBJS) @@ -236,6 +255,7 @@ ${LIBAFS_EP}: $(AFSAOBJS) $(AFSNONFSOBJS) ${LIBAFS_BM}: $(AFSAOBJS) $(AFSNONFSOBJS) $(RM) -f $@ $(LD) -r -o $@ $(AFSAOBJS) $(AFSNONFSOBJS) + install_libafs: $(INST_LIBAFS) echo SP Install Complete diff --git a/src/libafs/MakefileProto.SOLARIS.in b/src/libafs/MakefileProto.SOLARIS.in index 8cc86d72c..ae3886a9f 100644 --- a/src/libafs/MakefileProto.SOLARIS.in +++ b/src/libafs/MakefileProto.SOLARIS.in @@ -33,7 +33,7 @@ DEFINES= -DAFSDEBUG -DKERNEL -DAFS -DVICE -DNFS -DUFS -DINET -DQUOTA -DGETMOUNT KDEFS= -Dsun4c -DSUN4C_60 -DNFSCLIENT -DSYSACCT -DOLDSCSI -DVDDRV -D_KERNEL \ -DSYSV -dn ${ARCH_DEFS} - + KDEFS_32 = KDEFS_64 = -xarch=v9 @@ -43,7 +43,7 @@ CFLAGS=-I. -I.. -I${TOP_OBJDIR}/src/config ${FSINCLUDES} $(DEFINES) $(KDEFS) $(K # Name of directory to hold object files and libraries. KOBJ = MODLOAD - + KOBJ = MODLOAD32 MODLOAD64 @@ -53,7 +53,7 @@ COMPDIRS = single_compdir INSTDIRS = single_instdir DESTDIRS = single_destdir - + COMPDIRS = solaris_compdirs INSTDIRS = solaris_instdirs DESTDIRS = solaris_destdirs @@ -85,7 +85,7 @@ setup: ## This is the target for a Solaris 7. Here we build both the 32 bit and ## the 64 bit libafs in MODLOAD32 and MODLOAD64 directories respectively - + ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}: for t in ${KOBJ} ; do \ echo Building directory: $$t ; \ @@ -121,7 +121,7 @@ INST_LIBAFSNONFS = ${DESTDIR}${afskerneldir}/${LIBAFSNONFS} DEST_LIBAFS = ${DEST}/root.client/usr/vice/etc/modload/${LIBAFS} DEST_LIBAFSNONFS = ${DEST}/root.client/usr/vice/etc/modload/${LIBAFSNONFS} - + INST_LIBAFSNONFS = ${DESTDIR}${afskerneldir}/libafs${BITS}.nonfs.o INST_LIBAFS = ${DESTDIR}${afskerneldir}/libafs${BITS}.o diff --git a/src/libafs/libafsdep b/src/libafs/libafsdep index 3355afa7f..47cb2eec7 100644 --- a/src/libafs/libafsdep +++ b/src/libafs/libafsdep @@ -6,3 +6,4 @@ afs.startup redhat.sh sgi_master sgi_system +make_kbuild_makefile.pl diff --git a/src/libafs/make_kbuild_makefile.pl b/src/libafs/make_kbuild_makefile.pl new file mode 100644 index 000000000..03584cc74 --- /dev/null +++ b/src/libafs/make_kbuild_makefile.pl @@ -0,0 +1,104 @@ +#!/usr/bin/perl +# make_kbuild_makefile.pl +# Generate a Makefile for use with the Linux 2.6+ kernel build system +# +# Usage: make_kbuild_makefile.pl ${KDIR} ${TARG} Makefiles... +# +# The specified makefiles will be scanned for variable values +# The module ${TARG} will be built in ${TOP_SRCDIR}/src/libafs/${KDIR}. +# It will include objects listed in ${AFSAOBJS} and ${AFSNONFSOBJS} +# Appropriate source files for each object will be symlinked into ${KDIR} +# EXTRA_CFLAGS will be set to ${CFLAGS} ${COMMON_INCLUDE} + +# Produces ${KDIR}/Makefile, suitable for use with kbuild + +use IO::File; + + +if (@ARGV < 3) { + die "Usage: echo objects... | $0 KDIR TARG Makefiles...\n"; +} + +($KDIR, $TARG, @Makefiles) = @ARGV; +$TARG =~ s/\.k?o$//; + +## Read in all of the Makefiles given on the command line +## Our ultimate goal is to find the correct source file for each object. +## We make the following assumptions: +## - Every variable is defined before it is used. +## - Each of our objects has exactly one dependency, which is the name +## of the source file that needs to be symlinked into $KDIR +foreach $mf (@Makefiles) { + $F = new IO::File($mf, O_RDONLY) or die "$mf: $!\n"; + $text = ''; + while (<$F>) { + chomp; + $text .= $_; + next if $text =~ s/\\$/ /; ## Continuation + if ($text =~ /^#/) { $text = ''; next } ## Comment + #print STDERR "<< $text\n"; + + $text =~ s/\$\((\w+)\)/$vars{$1}/g; # Substitute variables + $text =~ s/\$\{(\w+)\}/$vars{$1}/g; + #print STDERR ">> $text\n"; + + if ($text =~ /^\s*(\S+)\s*=/) { ## Variable definition + ($key, $value) = ($1, $'); + $value =~ s/^\s*//; # Remove leading and + $value =~ s/\s*$//; # trailing whitespace + $vars{$key} = $value; # Store it + } + elsif ($text =~ /^(\S+\.o):\s*(\S+\.c)/) { ## Dependency + $deps{$1} = $2; + } + $text = ''; + } + $F->close(); +} + + +$KDIR = "$vars{TOP_OBJDIR}/src/libafs/$KDIR"; +@objects = (split(' ', $vars{AFSAOBJS}), split(' ', $vars{AFSNONFSOBJS})); + +$MV = new IO::File("$vars{TOP_OBJDIR}/src/config/Makefile.version", O_RDONLY) + or die "$vars{TOP_OBJDIR}/src/config/Makefile.version: $!\n"; +while (<$MV>) { + s#AFS_component_version_number#$KDIR/AFS_component_version_number#g; + $MakefileVersion .= $_; +} +$MV->close(); + +if (! -d $KDIR) { + mkdir($KDIR, 0777) or die "$KDIR: $!\n"; +} + + +foreach (@objects) { + ($src = $_) =~ s/\.o$/.c/; + die "No source known for $_\n" unless exists $deps{$_}; + if (-e "$KDIR/$src" || -l "$KDIR/$src") { + unlink("$KDIR/$src") or die "$KDIR/$src: $!\n"; + } + next unless $deps{$_} =~ m#/#; + symlink($deps{$_}, "$KDIR/$src") or die "$KDIR/$src: $!\n"; +} + +foreach $src (qw(h sys netinet)) { + if (-e "$KDIR/$src" || -l "$KDIR/$src") { + unlink("$KDIR/$src") or die "$KDIR/$src: $!\n"; + } + symlink("$vars{LINUX_KERNEL_PATH}/include/linux", "$KDIR/$src") + or die "$KDIR/$src: $!\n"; +} + +$cflags = "$vars{CFLAGS} $vars{COMMON_INCLUDE}"; +$cflags =~ s#-I(?!/)#-I$KDIR/#g; +$cflags =~ s/\s+/ \\\n /g; +$F = new IO::File("$KDIR/Makefile", O_WRONLY|O_CREAT|O_TRUNC, 0666) + or die "$KDIR/Makefile: $!\n"; +print $F "EXTRA_CFLAGS=$cflags\n"; +print $F "obj-m := $TARG.o\n"; +print $F "$TARG-objs := ", join("\\\n $_", @objects), "\n"; +print $F "\n$MakefileVersion\n"; +$F->close() or die "$KDIR/Makefile: $!\n"; + diff --git a/src/lwp/Makefile.in b/src/lwp/Makefile.in index ec4625470..903903f4f 100644 --- a/src/lwp/Makefile.in +++ b/src/lwp/Makefile.in @@ -56,7 +56,7 @@ 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 -I${TOP_INCDIR} ${srcdir}/process.i386.s process.ss; \ + /usr/ccs/lib/cpp -P -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* ) \ @@ -71,7 +71,7 @@ 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} ${srcdir}/process.i386.s process.ss; \ + /lib/cpp -P -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s process.ss; \ ${AS} process.ss -o process.o; \ $(RM) process.ss ;; \ *) \ diff --git a/src/lwp/lwp_elf.h b/src/lwp/lwp_elf.h index 6ca4c4075..3b88ef70a 100644 --- a/src/lwp/lwp_elf.h +++ b/src/lwp/lwp_elf.h @@ -34,8 +34,9 @@ /* * For common usage of elf platforms * - * $Id: lwp_elf.h,v 1.1 2003/09/24 19:02:05 shadow Exp $ + * $Id: lwp_elf.h,v 1.2 2004/06/24 17:38:32 shadow Exp $ */ +#include #ifndef _C_LABEL #if !defined(SYSV) && !defined(__ELF__) && !defined(AFS_SUN5_ENV) diff --git a/src/mpp/mpp.c b/src/mpp/mpp.c index dec729919..aab27c2dd 100644 --- a/src/mpp/mpp.c +++ b/src/mpp/mpp.c @@ -45,38 +45,23 @@ static char inline[maxlinesize]; static char outline[maxlinesize]; static struct macro *macrohashtable[macrohashsize]; -static -error(a0, a1) - char *a0, *a1; +static int +error(char *a0, char *a1) { fprintf(stderr, a0, a1); putc('\n', stderr); exit(1); } -static -fileerror(a0, a1) - char *a0, *a1; +static int +fileerror(char *a0, char *a1); { fprintf(stderr, "%s; line %d: ", filep->name, filep->lineno); error(a0, a1); } -static char * -strsav(s) - char *s; -{ - char *p; - - if ((p = malloc(strlen(s) + 1)) == NULL) - error("Out of Memory"); - strcpy(p, s); - return p; -} - static struct macro ** -macrolookup(name) - char *name; +macrolookup(char *name) { register struct macro **mpp, *mp; register char *cp; @@ -89,9 +74,8 @@ macrolookup(name) return mpp; } -static -macroundefine(name) - char *name; +static void +macroundefine(char *name) { register struct macro **mpp, *mp; @@ -104,11 +88,8 @@ macroundefine(name) } } -static -macrodefine(name, value, mode) - char *name; - char *value; - enum macromode mode; +static void +macrodefine(char *name, char *value, enum macromode mode) { register struct macro **mpp, *mp; @@ -120,18 +101,17 @@ macrodefine(name, value, mode) } else { if ((mp = (struct macro *)malloc(sizeof(struct macro))) == 0) error("Out of memory"); - mp->name = strsav(name); + mp->name = strdup(name); mp->next = 0; *mpp = mp; } mp->mode = mode; - mp->value = strsav(value); + mp->value = strdup(value); } static char * -macroexpand(dst, src) - register char *dst, *src; +macroexpand(register char *dst, register char *src) { char name[macronamesize]; register char *np; @@ -174,9 +154,8 @@ macroexpand(dst, src) -static -readline(line) - char *line; +static int +readline(char *line) { while (filep >= &files[0]) { filep->lineno++; @@ -192,17 +171,15 @@ readline(line) return 0; } -static -writeline(line) - char *line; +static void +writeline(char *line) { fputs(line, stdout); } -static -directive(what) - char *what; +static int +directive(char *what) { char *arg[3], *cp; int n; @@ -271,7 +248,7 @@ directive(what) filep--; fileerror("Can't open %s", arg[1]); } - filep->name = strsav(arg[1]); + filep->name = strdup(arg[1]); filep->lineno = 0; return 1; } @@ -286,18 +263,18 @@ directive(what) fileerror("Unknown directive %s", arg[0]); } -expandfile(name) - char *name; +void +expandfile(char *name) { if (strcmp(name, "-") == 0) { filep->stream = stdin; - filep->name = strsav("(stdin)"); + filep->name = strdup("(stdin)"); } else { if ((filep->stream = fopen(name, "r")) == NULL) { fileerror("Can't open %s", name); exit(1); } - filep->name = strsav(name); + filep->name = strdup(name); } filep->lineno = 0; while (readline(inline)) { @@ -316,7 +293,7 @@ expandfile(name) } } -static +static int usage() { fprintf(stderr, "Usage: mpp [-cC][-s][-Dname=value][-Uname][-][files]\n"); @@ -325,9 +302,8 @@ usage() #include "AFS_component_version_number.c" -main(argc, argv) - int argc; - char **argv; +int +main(int argc, char **argv) { argv++, argc--; if (argc == 0) diff --git a/src/package/check.c b/src/package/check.c index 16166ecde..97434dc86 100644 --- a/src/package/check.c +++ b/src/package/check.c @@ -52,12 +52,9 @@ static char path3[MAXPATHLEN + 1]; /* $$get rid of this */ * May exit from package. *------------------------------------------------------------------------*/ -static -CheckMount(path) - char *path; - +static void +CheckMount(char *path) { /*CheckMount */ - struct stat stb; /*Parent's stat block */ struct stat stb2; /*Child's stat block */ char dir[MAXPATHLEN]; /*Pathname of candidate mount point */ @@ -122,7 +119,6 @@ CheckMount(path) * verbose, tell everyone. */ verbose_message("Found Unix mountpoint %s", dir); - } /*CheckMount */ /*------------------------------------------------------------------------ @@ -149,10 +145,7 @@ CheckMount(path) *------------------------------------------------------------------------*/ int -check(np, path) - register CTREEPTR np; - char *path; - +check(register CTREEPTR np, char *path) { /*check */ register CTREEPTR np2; /*Node ptr for np's child */ @@ -326,5 +319,4 @@ check(np, path) */ (void)closedir(dp); return (retval); - } /*check */ diff --git a/src/package/conftree.c b/src/package/conftree.c index 555404e80..1fdfda57a 100644 --- a/src/package/conftree.c +++ b/src/package/conftree.c @@ -54,9 +54,7 @@ extern FILE *yyin; /*Input file for the YACC parser */ *------------------------------------------------------------------------*/ static int -namehash(name) - register char *name; - +namehash(register char *name) { /*namehash */ register int hash; @@ -123,10 +121,7 @@ AllocConfigNode() *------------------------------------------------------------------------*/ static int -ValidUpdtSpec(ftype, uspec) - u_short ftype; - u_short uspec; - +ValidUpdtSpec(u_short ftype, u_short uspec) { /*ValidUpdtSpec */ register struct updatetype *u; @@ -169,10 +164,7 @@ ValidUpdtSpec(ftype, uspec) *------------------------------------------------------------------------*/ static int -ValidateUserName(name, uidp) - register char *name; - register short *uidp; - +ValidateUserName(register char *name, register short *uidp) { /*ValidateUserName */ register afs_int32 uid; @@ -242,10 +234,7 @@ ValidateUserName(name, uidp) *------------------------------------------------------------------------*/ static int -ValidateGroupName(name, gidp) - register char *name; - register short *gidp; - +ValidateGroupName(register char *name, register short *gidp) { /*ValidateGroupName */ register afs_int32 gid; @@ -342,11 +331,7 @@ InitializeConfigTree() *------------------------------------------------------------------------*/ CTREEPTR -LocateChildNode(dp, name, lmode) - register CTREEPTR dp; - register char *name; - register int lmode; - +LocateChildNode(register CTREEPTR dp, register char *name, register int lmode) { /*LocateChildNode */ register int hash; /*Hash value for given name */ @@ -442,13 +427,8 @@ LocateChildNode(dp, name, lmode) *------------------------------------------------------------------------*/ CTREEPTR -LocatePathNode(dp, path, lmode) - register CTREEPTR dp; - register char *path; - register int lmode; - +LocatePathNode(register CTREEPTR dp, register char *path, register int lmode) { /*LocatePathNode */ - register char *name; /*Points to start of new subdir/file in path */ register char savech; /*Saves chars being murdered during search */ @@ -497,7 +477,6 @@ LocatePathNode(dp, path, lmode) * just return it. */ return (dp); - } /*LocatePathNode */ /*------------------------------------------------------------------------ @@ -521,17 +500,13 @@ LocatePathNode(dp, path, lmode) *------------------------------------------------------------------------*/ int -BuildConfigTree(f) - FILE *f; - +BuildConfigTree(FILE *f) { /*BuildConfigTree */ - int ret; yyin = f; ret = yyparse(); return (ret); - } /*BuildConfigTree */ /*------------------------------------------------------------------------ @@ -564,16 +539,8 @@ BuildConfigTree(f) *------------------------------------------------------------------------*/ int -AddEntry(filetype, updtspec, filename, prototype, ownershipinfo, mode) - u_short filetype; - u_short updtspec; - char *filename; - PROTOTYPE prototype; - OWNER ownershipinfo; - MODE mode; - +AddEntry(u_short filetype, u_short updtspec, char *filename, PROTOTYPE prototype, OWNER ownershipinfo, MODE mode) { /*AddEntry */ - CTREEPTR np; /*Ptr to config tree node holding info on filename */ short uid, gid; /*Uid, gid returned from validation functions */ @@ -723,9 +690,7 @@ AddEntry(filetype, updtspec, filename, prototype, ownershipinfo, mode) *------------------------------------------------------------------------*/ void -ApplyConfigTree(func) - int (*func) (); - +ApplyConfigTree(int (*func) ()) { /*ApplyConfigTree */ char *path; /*Path to pass on down */ @@ -764,13 +729,9 @@ ApplyConfigTree(func) * Whatever func might do. *------------------------------------------------------------------------*/ -TraverseConfigTree(np, path, func) - register CTREEPTR np; - char *path; - int (*func) (); - +void +TraverseConfigTree(register CTREEPTR np, char *path, int (*func) ()) { /*TraverseConfigTree */ - register char *endp; /*Marks the end of a string */ register ENTRYPTR ep; /*Current entry pointer */ register int len; /*Length of the pathname */ @@ -820,5 +781,4 @@ TraverseConfigTree(np, path, func) * the path properly before returning. */ *--endp = 0; - } /*TraverseConfigTree */ diff --git a/src/package/globfuncs.c b/src/package/globfuncs.c index e62410355..b53963f75 100644 --- a/src/package/globfuncs.c +++ b/src/package/globfuncs.c @@ -40,9 +40,7 @@ *------------------------------------------------------------------------*/ char * -emalloc(size) - unsigned size; - +emalloc(unsigned int size) { /*emalloc */ char *malloc(); @@ -55,7 +53,6 @@ emalloc(size) exit(ERR_OUTOFMEMORY); } else return (ptr); - } /*emalloc */ /*------------------------------------------------------------------------ @@ -80,10 +77,7 @@ emalloc(size) *------------------------------------------------------------------------*/ char * -ecalloc(nelem, size) - unsigned nelem; - unsigned size; - +ecalloc(unsigned int nelem, unsigned int size) { /*ecalloc */ char *calloc(); @@ -120,10 +114,7 @@ ecalloc(nelem, size) *------------------------------------------------------------------------*/ FILE * -efopen(filename, type) - char *filename; - char *type; - +efopen(char *filename, char *type) { /*efopen */ FILE *f; diff --git a/src/package/messages.c b/src/package/messages.c index 5d018ccc9..6da38f439 100644 --- a/src/package/messages.c +++ b/src/package/messages.c @@ -57,11 +57,7 @@ static char * -putnum(dp, n, b) - register char *dp; - register unsigned n; - register int b; - +putnum(register char *dp, register unsigned n, register int b) { /*putnum */ register int s; @@ -79,10 +75,7 @@ putnum(dp, n, b) } /*putnum */ static char * -putstr(dp, s) - register char *dp; - register char *s; - +putstr(register char *dp, register char *s) { /*putstr */ while (*s) @@ -93,11 +86,7 @@ putstr(dp, s) } /*putstr */ static char * -putformat(dp, fp, ap) - register char *dp; - register char *fp; - register va_list ap; - +putformat(register char *dp, register char *fp, register va_list ap) { /*putformat */ while (*fp) { diff --git a/src/package/misc.c b/src/package/misc.c index f4d2d17e9..8ed56d71c 100644 --- a/src/package/misc.c +++ b/src/package/misc.c @@ -19,14 +19,14 @@ yywrap() return 1; } -sprint(s) - char *s; +void +sprint(char *s) { printf("sprint - %s", s); } -allprint(i) - int i; +void +allprint(int i) { printf("allprint - %d\n", i); } diff --git a/src/package/package.c b/src/package/package.c index 927d6119c..98629bd9c 100644 --- a/src/package/package.c +++ b/src/package/package.c @@ -204,12 +204,8 @@ getsystype() *------------------------------------------------------------------------*/ static int -packageInit(as, arock) - struct cmd_syndesc *as; - char *arock; - +packageInit(struct cmd_syndesc *as, char *arock) { /*packageInit */ - systype = getsystype(); /* @@ -287,10 +283,8 @@ packageInit(as, arock) #include "AFS_component_version_number.c" -main(argc, argv) - int argc; - char **argv; - +int +main(int argc, char **argv) { /*main */ register afs_int32 code; /*Return code */ diff --git a/src/package/test.c b/src/package/test.c index 20e10f79c..6e76d4863 100644 --- a/src/package/test.c +++ b/src/package/test.c @@ -44,12 +44,9 @@ int opt_debug = 1; /*Debugging output enabled? */ #include "AFS_component_version_number.c" -main(argc, argv) - int argc; - char **argv; - +int +main(int argc, char **argv) { /*main */ - int code; /*Return code */ if (argc > 1) @@ -62,7 +59,6 @@ main(argc, argv) test_linecounter); if (yyin != stdin) fclose(yyin); - } /*main */ /*------------------------------------------------------------------------ @@ -91,15 +87,9 @@ main(argc, argv) *------------------------------------------------------------------------*/ int -AddRegEntry(f, p, o, m, u) - char *f; - PROTOTYPE p; - OWNER o; - MODE m; - u_short u; +AddRegEntry(char *f, PROTOTYPE p, OWNER o, MODE m, u_short u) { /*AddRegEntry */ - printf("F"); echo_updateoptions(u); printf("%s", f); @@ -107,7 +97,6 @@ AddRegEntry(f, p, o, m, u) echo_ownerinfo(o); echo_modeinfo(m); return (0); - } /*AddRegEntry */ /*------------------------------------------------------------------------ @@ -136,13 +125,7 @@ AddRegEntry(f, p, o, m, u) *------------------------------------------------------------------------*/ int -AddDirEntry(f, p, o, m, u) - char *f; - PROTOTYPE p; - OWNER o; - MODE m; - u_short u; - +AddDirEntry(char *f, PROTOTYPE p, OWNER o, MODE m, u_short u) { /*AddDirEntry */ printf("D"); @@ -181,15 +164,8 @@ AddDirEntry(f, p, o, m, u) *------------------------------------------------------------------------*/ int -AddLnkEntry(f, p, o, m, u) - char *f; - PROTOTYPE p; - OWNER o; - MODE m; - u_short u; - +AddLnkEntry(char *f, PROTOTYPE p, OWNER o, MODE m, u_short u) { /*AddLnkEntry */ - printf("L"); echo_updateoptions(u); printf("%s", f); @@ -197,7 +173,6 @@ AddLnkEntry(f, p, o, m, u) echo_ownerinfo(o); echo_modeinfo(m); return (0); - } /*AddLnkEntry */ /*------------------------------------------------------------------------ @@ -226,15 +201,8 @@ AddLnkEntry(f, p, o, m, u) *------------------------------------------------------------------------*/ int -AddBlkEntry(f, p, o, m, u) - char *f; - PROTOTYPE p; - OWNER o; - MODE m; - u_short u; - +AddBlkEntry(char *f, PROTOTYPE p, OWNER o, MODE m, u_short u) { /*AddBlkEntry */ - printf("B"); echo_updateoptions(u); printf("%s", f); @@ -242,7 +210,6 @@ AddBlkEntry(f, p, o, m, u) echo_ownerinfo(o); echo_modeinfo(m); return (0); - } /*AddBlkEntry */ /*------------------------------------------------------------------------ @@ -271,15 +238,8 @@ AddBlkEntry(f, p, o, m, u) *------------------------------------------------------------------------*/ int -AddChrEntry(f, p, o, m, u) - char *f; - PROTOTYPE p; - OWNER o; - MODE m; - u_short u; - +AddChrEntry(char *f, PROTOTYPE p, OWNER o, MODE m, u_short u) { /*AddChrEntry */ - printf("C"); echo_updateoptions(u); printf("%s", f); @@ -287,7 +247,6 @@ AddChrEntry(f, p, o, m, u) echo_ownerinfo(o); echo_modeinfo(m); return (0); - } /*AddChrEntry */ /*------------------------------------------------------------------------ @@ -312,9 +271,7 @@ AddChrEntry(f, p, o, m, u) *------------------------------------------------------------------------*/ int -AddSktEntry(f) - char *f; - +AddSktEntry(char *f) { /*AddSktEntry */ printf("S"); @@ -348,15 +305,8 @@ AddSktEntry(f) *------------------------------------------------------------------------*/ int -AddPipeEntry(f, p, o, m, u) - char *f; - PROTOTYPE p; - OWNER o; - MODE m; - u_short u; - +AddPipeEntry(char *f, PROTOTYPE p, OWNER o, MODE m, u_short u) { /*AddPipeEntry */ - printf("P"); echo_updateoptions(u); printf("\t%s\n", f); @@ -364,7 +314,6 @@ AddPipeEntry(f, p, o, m, u) echo_ownerinfo(o); echo_modeinfo(m); return (0); - } /*AddPipeEntry */ /*------------------------------------------------------------------------ @@ -388,11 +337,8 @@ AddPipeEntry(f, p, o, m, u) *------------------------------------------------------------------------*/ int -echo_updateoptions(u) - u_short u; - +echo_updateoptions(u_short u) { /*echo_updateoptions */ - if (u & U_LOSTFOUND) printf("X"); if (u & U_RMEXTRA) @@ -407,7 +353,6 @@ echo_updateoptions(u) printf("Q"); printf("\t"); return (0); - } /*echo_updateoptions */ /*------------------------------------------------------------------------ @@ -431,11 +376,8 @@ echo_updateoptions(u) *------------------------------------------------------------------------*/ int -echo_prototypeinfo(p) - PROTOTYPE p; - +echo_prototypeinfo(PROTOTYPE p) { /*echo_prototypeinfo */ - switch (p.flag) { case P_FILE: printf("\t%s", p.info.path); @@ -454,7 +396,6 @@ echo_prototypeinfo(p) printf("\t[Neither file nor device]"); break; } - } /*echo_prototypeinfo */ /*------------------------------------------------------------------------ @@ -478,11 +419,8 @@ echo_prototypeinfo(p) *------------------------------------------------------------------------*/ int -echo_ownerinfo(o) - OWNER o; - +echo_ownerinfo(OWNER o) { /*echo_ownerinfo */ - if (o.username != NULL) printf("\t%s", o.username); else @@ -491,7 +429,6 @@ echo_ownerinfo(o) printf("\t%s", o.groupname); else printf("\t[No group info]"); - } /*echo_ownerinfo */ /*------------------------------------------------------------------------ @@ -515,17 +452,13 @@ echo_ownerinfo(o) *------------------------------------------------------------------------*/ int -echo_modeinfo(m) - MODE m; - +echo_modeinfo(MODE m) { /*echo_modeinfo */ - if (m.inherit_flag != TRUE) printf("\t%o", m.modeval); else printf("\t[Inherited mode]"); printf("\n"); - } /*echo_modeinfo */ /*------------------------------------------------------------------------ @@ -558,16 +491,8 @@ echo_modeinfo(m) *------------------------------------------------------------------------*/ int -testAddEntry(a_ftype, a_updspecs, a_filename, a_proto, a_owner, a_mode) - u_short a_ftype; - u_short a_updspecs; - char *a_filename; - PROTOTYPE a_proto; - OWNER a_owner; - MODE a_mode; - +testAddEntry(u_short a_ftype, u_short a_updspecs, char *a_filename, PROTOTYPE a_proto, OWNER a_owner, MODE a_mode) { /*testAddEntry */ - switch (a_ftype) { case S_IFREG: /*Regular file */ AddRegEntry(a_filename, a_proto, a_owner, a_mode, a_updspecs); @@ -606,5 +531,4 @@ testAddEntry(a_ftype, a_updspecs, a_filename, a_proto, a_owner, a_mode) break; } /*switch a_ftype */ - } /*testAddEntry */ diff --git a/src/package/update.c b/src/package/update.c index 70d94e1ec..0e74e095d 100644 --- a/src/package/update.c +++ b/src/package/update.c @@ -55,10 +55,7 @@ static FixReg(); /* $$important: these will have to be fixed with an error recovery mechanism */ int -update(np, path) - CTREEPTR np; - char *path; - +update(CTREEPTR np, char *path) { /*update */ switch (np->type) { @@ -94,11 +91,8 @@ update(np, path) } /*update */ -static -UpdateSock(np, path) - CTREEPTR np; - char *path; - +static void +UpdateSock(CTREEPTR np, char *path) { /*UpdateSock */ (void)dochtyp(np, path); @@ -106,11 +100,8 @@ UpdateSock(np, path) } /*UpdateSock */ -static -UpdateDev(np, path) - CTREEPTR np; - char *path; - +static void +UpdateDev(CTREEPTR np, char *path) { /*UpdateDev */ register int ret; @@ -167,11 +158,8 @@ UpdateDev(np, path) } /*UpdateDev */ -static -UpdatePipe(np, path) - CTREEPTR np; - char *path; - +static void +UpdatePipe(CTREEPTR np, char *path) { /*UpdatePipe */ register int ret; @@ -214,11 +202,8 @@ UpdatePipe(np, path) } /*UpdatePipe */ -static -UpdateLnk(np, path) - CTREEPTR np; - char *path; - +static void +UpdateLnk(CTREEPTR np, char *path) { /*UpdateLnk */ register int ret; @@ -260,11 +245,8 @@ UpdateLnk(np, path) } /*UpdateLnk */ -static -UpdateDir(np, path) - CTREEPTR np; - char *path; - +static void +UpdateDir(CTREEPTR np, char *path) { /*UpdateDir */ register int ret; @@ -295,11 +277,8 @@ UpdateDir(np, path) } /*UpdateDir */ -static -UpdateReg(np, path) - CTREEPTR np; - char *path; - +static void +UpdateReg(CTREEPTR np, char *path) { /*UpdateReg */ register int ret; @@ -343,13 +322,9 @@ UpdateReg(np, path) * reboot scenario is true), we return 0. */ -static -dochtyp(np, path) - CTREEPTR np; - char *path; - +static int +dochtyp(CTREEPTR np, char *path) { /*dochtyp */ - if (lstat(path, &stb) < 0) return -1; #ifdef KFLAG @@ -367,16 +342,11 @@ dochtyp(np, path) rm(path); return -1; } - } /*dochtyp */ -static -dochmod(np, path) - CTREEPTR np; - char *path; - +static void +dochmod(CTREEPTR np, char *path) { /*dochmod */ - if ((np->flag & F_MODE) == 0) return; if ((np->mode & ~S_IFMT) == (stb.st_mode & ~S_IFMT)) @@ -384,16 +354,11 @@ dochmod(np, path) loudonly_message("chmod %s %o", path, np->mode & ~S_IFMT); if (!opt_lazy && chmod(path, (int)np->mode & ~S_IFMT) < 0) message("chmod %s; %m", path); - } /*dochmod */ -static -dochown(np, path) - CTREEPTR np; - char *path; - +static void +dochown(CTREEPTR np, char *path) { /*dochown */ - if ((np->flag & F_UID) == 0) np->uid = stb.st_uid; if ((np->flag & F_GID) == 0) @@ -403,16 +368,11 @@ dochown(np, path) loudonly_message("chown %s %d %d", path, np->uid, np->gid); if (!opt_lazy && chown(path, np->uid, np->gid) < 0) message("chown %s; %m", path); - } /*dochown */ -static -dochtim(np, path) - CTREEPTR np; - char *path; - +static void +dochtim(CTREEPTR np, char *path) { /*dochtim */ - struct timeval tm[2]; if (np->mtime == stb.st_mtime @@ -429,28 +389,19 @@ dochtim(np, path) } if (!opt_lazy && utimes(path, tm) < 0) message("utimes %s; %m", path); - } /*dochtim */ static int -FixLostFoundDir(path) - char *path; - +FixLostFoundDir(char *path) { /*FixLostFoundDir */ - if (stb.st_size >= 3584) return 0; return mklostfound(path); - } /*FixLostFoundDir */ static int -FixDir(np, path) - CTREEPTR np; - char *path; - +FixDir(CTREEPTR np, char *path) { /*FixDir */ - register DIR *dp; register struct dirent *de; register char *endp; @@ -477,16 +428,11 @@ FixDir(np, path) *--endp = 0; (void)closedir(dp); return 0; - } /*FixDir */ -static -FixReg(np, path) - CTREEPTR np; - char *path; - +static int +FixReg(CTREEPTR np, char *path) { /*FixReg */ - char new[MAXPATHLEN], old[MAXPATHLEN], temp[MAXPATHLEN]; if (!opt_reboot && (np->updtspec & U_REBOOT)) { @@ -511,5 +457,4 @@ FixReg(np, path) if (np->updtspec & U_REBOOT) status = status_reboot; return 0; - } /*FixReg */ diff --git a/src/ptserver/NTMakefile b/src/ptserver/NTMakefile index 28f42bc81..ae2c058a9 100644 --- a/src/ptserver/NTMakefile +++ b/src/ptserver/NTMakefile @@ -73,7 +73,7 @@ PTSERVER_EXELIBS =$(PTSERVER_EXELIBS) $(DESTDIR)\lib\afs\afsprocmgmt.lib !ENDIF $(PTSERVER): $(PTSERVER_EXEOBJS) $(RXKADOBJS) $(PTSERVER_EXELIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) @@ -104,7 +104,7 @@ PTS_EXELIBS =\ $(DESTDIR)\lib\cm_dns.obj $(PTS): $(PTS_EXEOBJS) $(PTS_EXELIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) @@ -180,16 +180,16 @@ clean:: TEST_LIBS = $(PTS_EXELIBS) $(OUT)\readgroup.exe: $(OUT)\readgroup.obj $(LIBFILE) $(TEST_LIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(OUT)\readpwd.exe: $(OUT)\readpwd.obj $(LIBFILE) $(TEST_LIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(OUT)\testpt.exe: $(OUT)\testpt.obj $(LIBFILE) $(TEST_LIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(OUT)\db_verify.exe: $(OUT)\db_verify.obj $(OUT)\pterror.obj $(OUT)\display.obj $(LIBFILE) $(TEST_LIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib mkdir: diff --git a/src/ptserver/db_verify.c b/src/ptserver/db_verify.c index d3b187812..df6d7e924 100644 --- a/src/ptserver/db_verify.c +++ b/src/ptserver/db_verify.c @@ -12,7 +12,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/ptserver/db_verify.c,v 1.15 2004/04/18 06:13:50 kolya Exp $"); + ("$Header: /cvs/openafs/src/ptserver/db_verify.c,v 1.16 2004/06/23 14:27:41 shadow Exp $"); /* * (3) Define a structure, idused, instead of an @@ -69,8 +69,7 @@ char *whoami = "db_verify"; #define UBIK_HEADERSIZE 64 afs_int32 -printheader(h) - struct prheader *h; +printheader(struct prheader *h) { printf("Version = %d\n", ntohl(h->version)); printf("Header Size = %d\n", ntohl(h->headerSize)); @@ -91,10 +90,7 @@ printheader(h) } static afs_int32 -pr_Read(pos, buff, len) - afs_int32 pos; - char *buff; - afs_int32 len; +pr_Read(afs_int32 pos, char *buff, afs_int32 len) { afs_int32 code; @@ -140,16 +136,14 @@ ReadHeader() } static afs_int32 -IDHash(x) - afs_int32 x; +IDHash(afs_int32 x) { /* returns hash bucket for x */ return ((abs(x)) % HASHSIZE); } static afs_int32 -NameHash(aname) - register unsigned char *aname; +NameHash(register unsigned char *aname) { /* returns hash bucket for aname */ register unsigned int hash = 0; @@ -208,8 +202,7 @@ int idcount(struct idused **idmapp, int id); #endif int -readUbikHeader(misc) - struct misc_data *misc; +readUbikHeader(struct misc_data *misc) { int offset, r; struct ubik_hdr uheader; @@ -252,9 +245,7 @@ readUbikHeader(misc) } afs_int32 -ConvertDiskAddress(ea, eiP) - afs_uint32 ea; - int *eiP; +ConvertDiskAddress(afs_uint32 ea, int *eiP) { int i; @@ -274,11 +265,7 @@ ConvertDiskAddress(ea, eiP) } int -PrintEntryError(misc, ea, e, indent) - struct misc_data *misc; - afs_int32 ea; - struct prentry *e; - int indent; +PrintEntryError(struct misc_data *misc, afs_int32 ea, struct prentry *e, int indent) { pr_PrintEntry(stderr, /*net order */ 0, ea, e, indent); @@ -286,11 +273,10 @@ PrintEntryError(misc, ea, e, indent) } afs_int32 -WalkHashTable(hashtable, hashType, map, misc) - afs_int32 hashtable[]; /* hash table to walk */ - int hashType; /* hash function to use */ - char map[]; /* one byte per db entry */ - struct misc_data *misc; /* stuff to keep track of */ +WalkHashTable(afs_int32 hashtable[], /* hash table to walk */ + int hashType, /* hash function to use */ + char map[], /* one byte per db entry */ + struct misc_data *misc) /* stuff to keep track of */ { afs_int32 code; int hi; /* index in hash table */ @@ -404,11 +390,9 @@ WalkHashTable(hashtable, hashType, map, misc) } afs_int32 -WalkNextChain(map, misc, ea, e) - char map[]; /* one byte per db entry */ - struct misc_data *misc; /* stuff to keep track of */ - afs_int32 ea; - struct prentry *e; +WalkNextChain(char map[], /* one byte per db entry */ + struct misc_data *misc, /* stuff to keep track of */ + afs_int32 ea, struct prentry *e) { afs_int32 head; int bit; @@ -725,11 +709,9 @@ WalkNextChain(map, misc, ea, e) } afs_int32 -WalkOwnedChain(map, misc, ea, e) - char map[]; /* one byte per db entry */ - struct misc_data *misc; /* stuff to keep track of */ - afs_int32 ea; - struct prentry *e; +WalkOwnedChain(char map[], /* one byte per db entry */ + struct misc_data *misc, /* stuff to keep track of */ + afs_int32 ea, struct prentry *e) { afs_int32 head; afs_int32 code; @@ -809,9 +791,8 @@ WalkOwnedChain(map, misc, ea, e) } afs_int32 -WalkChains(map, misc) - char map[]; /* one byte per db entry */ - struct misc_data *misc; /* stuff to keep track of */ +WalkChains(char map[], /* one byte per db entry */ + struct misc_data *misc) /* stuff to keep track of */ { afs_int32 code; int ei; @@ -924,9 +905,7 @@ WalkChains(map, misc) } afs_int32 -GC(map, misc) - char map[]; - struct misc_data *misc; +GC(char map[], struct misc_data *misc) { afs_int32 code; int ei; @@ -958,13 +937,14 @@ GC(map, misc) id = ntohl(e.id); #if defined(SUPERGROUPS) if ((id != ANONYMOUSID) - && ((refCount = idcount(&misc->idmap, id)) != ntohl(e.count))) { + && ((refCount = idcount(&misc->idmap, id)) != ntohl(e.count))) #else if ((id >= misc->minId) && (id <= misc->maxId) && (id != ANONYMOUSID) && ((refCount = misc->idmap[id - misc->minId]) != - ntohl(e.count))) { + ntohl(e.count))) #endif /* SUPERGROUPS */ + { afs_int32 na; fprintf(stderr, "Entry membership count is inconsistent: %d entries refer to this one\n", @@ -991,8 +971,7 @@ GC(map, misc) } char * -QuoteName(s) - char *s; +QuoteName(char *s) { char *qs; if (strpbrk(s, " \t")) { @@ -1006,9 +985,7 @@ QuoteName(s) } afs_int32 -DumpRecreate(map, misc) - char map[]; - struct misc_data *misc; +DumpRecreate(char map[], struct misc_data *misc) { afs_int32 code; int ei; @@ -1069,10 +1046,11 @@ DumpRecreate(map, misc) /* check for duplicate id. This may still lead to duplicate * names. */ #if defined(SUPERGROUPS) - if (idcount(&idmap, id)) { + if (idcount(&idmap, id)) #else - if (idmap[id - misc->minId]) { + if (idmap[id - misc->minId]) #endif + { fprintf(stderr, "Skipping entry with duplicate id %di\n", id); goto user_done; @@ -1179,10 +1157,11 @@ DumpRecreate(map, misc) owner = ntohl(e.owner); #if defined(SUPERGROUPS) - if (!idcount(&idmap, owner)) { + if (!idcount(&idmap, owner)) #else - if (idmap[owner - misc->minId] == 0) { + if (idmap[owner - misc->minId] == 0) #endif + { fprintf(stderr, "Skipping chown of '%s' to non-existant owner %di\n", e.name, owner); @@ -1310,8 +1289,7 @@ DumpRecreate(map, misc) } afs_int32 -CheckPrDatabase(misc) - struct misc_data *misc; /* info & statistics */ +CheckPrDatabase(struct misc_data *misc) /* info & statistics */ { afs_int32 code; afs_int32 eof; @@ -1450,12 +1428,11 @@ CheckPrDatabase(misc) free(map); return code; } - + #include "AFS_component_version_number.c" -WorkerBee(as, arock) - struct cmd_syndesc *as; - char *arock; +int +WorkerBee(struct cmd_syndesc *as, char *arock) { afs_int32 code; char *recreateFile; @@ -1508,9 +1485,8 @@ WorkerBee(as, arock) exit(0); } -main(argc, argv) - int argc; - char *argv[]; +int +main(int argc, char *argv[]) { struct cmd_syndesc *ts; @@ -1536,8 +1512,7 @@ main(argc, argv) /* new routines to deal with very large ID numbers */ void -zeromap(idmap) - struct idused *idmap; +zeromap(struct idused *idmap) { while (idmap) { bzero((char *)idmap->idcount, sizeof idmap->idcount); @@ -1574,8 +1549,7 @@ inccount(struct idused **idmapp, int id) } int -idcount(idmapp, id) - struct idused **idmapp; +idcount(struct idused **idmapp, int id) { struct idused *idmap; @@ -1591,5 +1565,4 @@ idcount(idmapp, id) } return 0; } - #endif /* SUPERGROUPS */ diff --git a/src/ptserver/display.c b/src/ptserver/display.c index 365ee1718..90b617ef6 100644 --- a/src/ptserver/display.c +++ b/src/ptserver/display.c @@ -11,7 +11,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/ptserver/display.c,v 1.8 2003/07/15 23:16:02 shadow Exp $"); + ("$Header: /cvs/openafs/src/ptserver/display.c,v 1.9 2004/06/23 14:27:41 shadow Exp $"); #include #include @@ -62,12 +62,7 @@ pr_TimeToString(time_t clock) #define host(a) (hostOrder ? (a) : ntohl(a)) static void -PrintEntries(f, hostOrder, indent, e, n) - FILE *f; - int hostOrder; /* structures in host order */ - int indent; - struct prentry *e; - int n; +PrintEntries(FILE *f, int hostOrder, int indent, struct prentry *e, int n) { int i; int newline; @@ -98,12 +93,7 @@ PrintEntries(f, hostOrder, indent, e, n) } int -pr_PrintEntry(f, hostOrder, ea, e, indent) - FILE *f; - int hostOrder; /* structures in host order */ - afs_int32 ea; - struct prentry *e; - int indent; +pr_PrintEntry(FILE *f, int hostOrder, afs_int32 ea, struct prentry *e, int indent) { int i; diff --git a/src/ptserver/map.c b/src/ptserver/map.c index cd155edc6..48bc06a66 100644 --- a/src/ptserver/map.c +++ b/src/ptserver/map.c @@ -35,7 +35,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/ptserver/map.c,v 1.2 2003/07/15 23:16:02 shadow Exp $"); + ("$Header: /cvs/openafs/src/ptserver/map.c,v 1.3 2004/06/23 14:27:41 shadow Exp $"); #ifdef SUPERGROUPS #include @@ -69,15 +69,8 @@ struct bitmap { #define Aflag (debug_mask & (1L<<('Z'-'@'))) extern int debug_mask; -#if __STDC__ int in_map(struct map *parm, long node) -#else -int -in_map(parm, node) - struct map *parm; - long node; -#endif { struct bitmap *map; long bit; @@ -117,8 +110,7 @@ in_map(parm, node) } void -free_map(parm) - struct map *parm; +free_map(struct map *parm) { struct bitmap *map, *next; #ifdef MAP_DEBUG @@ -137,9 +129,7 @@ free_map(parm) } struct map * -add_map(parm, node) - struct map *parm; - long node; +add_map(struct map *parm, long node) { struct bitmap *map; long bit; @@ -198,8 +188,7 @@ add_map(parm, node) } struct bitmap * -simplify_bitmap(map) - struct bitmap *map; +simplify_bitmap(struct bitmap *map) { struct bitmap **mpp, *mp2; int i; @@ -221,8 +210,7 @@ simplify_bitmap(map) } struct bitmap * -or_bitmap(left, right) - struct bitmap *left, *right; +or_bitmap(struct bitmap *left, struct bitmap *right) { struct bitmap **rightmp, *lmap, *rmap; int i; @@ -242,8 +230,7 @@ or_bitmap(left, right) } struct bitmap * -and_bitmap(left, right) - struct bitmap *left, *right; +and_bitmap(struct bitmap *left, struct bitmap *right) { struct bitmap **rightmp, *lmap, *rmap, **leftmp; int i; @@ -271,8 +258,7 @@ and_bitmap(left, right) /* bit set in left, but not in right */ struct bitmap * -bic_bitmap(left, right) - struct bitmap *left, *right; +bic_bitmap(struct bitmap *left, struct bitmap *right) { struct bitmap **rightmp, *lmap, *rmap, **leftmp; int i; @@ -310,8 +296,7 @@ bic_bitmap(left, right) } struct map * -and_map(mp1, mp2) - struct map *mp1, *mp2; +and_map(struct map *mp1, struct map *mp2) { #ifdef MAP_DEBUG if (Mflag) { @@ -341,8 +326,7 @@ and_map(mp1, mp2) } struct map * -or_map(mp1, mp2) - struct map *mp1, *mp2; +or_map(struct map *mp1, struct map *mp2) { #ifdef MAP_DEBUG if (Mflag) { @@ -372,8 +356,7 @@ or_map(mp1, mp2) } struct map * -not_map(map) - struct map *map; +not_map(struct map *map) { #ifdef MAP_DEBUG if (Mflag) { @@ -386,8 +369,7 @@ not_map(map) } struct map * -copy_map(parm) - struct map *parm; +copy_map(struct map *parm) { struct bitmap *result, **mpp, *map; #ifdef MAP_DEBUG @@ -419,8 +401,7 @@ copy_map(parm) } long -count_map(parm) - struct map *parm; +count_map(struct map *parm) { long nf; struct bitmap *map; @@ -451,9 +432,7 @@ count_map(parm) } long -next_map(parm, node) - struct map *parm; - long node; +next_map(struct map *parm, long node) { struct bitmap *map, *lowest; long bit, mask; @@ -525,16 +504,13 @@ next_map(parm, node) } long -first_map(parm) - struct map *parm; +first_map(struct map *parm) { return next_map(parm, -9999); } long -prev_map(parm, node) - struct map *parm; - long node; +prev_map(struct map *parm, long node) { struct bitmap *map, *lowest; long bit, mask; @@ -609,22 +585,19 @@ prev_map(parm, node) } long -last_map(parm) - struct map *parm; +last_map(struct map *parm) { return prev_map(parm, 0x7fffffff); } struct map * -negative_map(map) - struct map *map; +negative_map(struct map *map) { return (struct map *)NEGMAP(map); } struct map * -bic_map(mp1, mp2) - struct map *mp1, *mp2; +bic_map(struct map *mp1, struct map *mp2) { #ifdef MAP_DEBUG if (Mflag) { @@ -646,8 +619,8 @@ bic_map(mp1, mp2) } #ifdef PRINT_MAP_ERROR -print_map(parm) - struct map *parm; +void +print_map(struct map *parm) { struct bitmap *map; int i, j; @@ -694,9 +667,7 @@ print_map(parm) #ifdef NEED_READ_WRITE struct map * -read_map(f, arg) - int (*f) (); - char *arg; +read_map(int (*f) (), char *arg) { struct bitmap *map, *result, **mp; int page; @@ -752,10 +723,8 @@ read_map(f, arg) return (struct map *)result; } -write_map(parm, f, arg) - struct map *parm; - int (*f) (); - char *arg; +int +write_map(struct map *parm, int (*f) (), char *arg) { struct bitmap *map; int page; diff --git a/src/ptserver/pt_util.c b/src/ptserver/pt_util.c index 4a7b76526..7739f45e1 100644 --- a/src/ptserver/pt_util.c +++ b/src/ptserver/pt_util.c @@ -1,4 +1,4 @@ -/* $Id: pt_util.c,v 1.8 2003/08/08 21:20:46 shadow Exp $ */ +/* $Id: pt_util.c,v 1.9 2004/06/23 14:27:41 shadow Exp $ */ /* * @@ -23,7 +23,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/ptserver/pt_util.c,v 1.8 2003/08/08 21:20:46 shadow Exp $"); + ("$Header: /cvs/openafs/src/ptserver/pt_util.c,v 1.9 2004/06/23 14:27:41 shadow Exp $"); #include /*Command line parsing */ #include @@ -97,9 +97,8 @@ int nflag = 0; int wflag = 0; int flags = 0; -main(argc, argv) - int argc; - char **argv; +int +main(int argc, char **argv) { register struct cmd_syndesc *cs; /*Command line syntax descriptor */ @@ -129,8 +128,7 @@ main(argc, argv) } int -CommandProc(a_as) - register struct cmd_syndesc *a_as; +CommandProc(register struct cmd_syndesc *a_as) { register int i; register long code; @@ -342,8 +340,7 @@ CommandProc(a_as) } int -display_entry(offset) - int offset; +display_entry(int offset) { register int i; @@ -367,8 +364,7 @@ display_entry(offset) } void -add_group(id) - long id; +add_group(long id) { struct grp_list *g; register long i; @@ -403,8 +399,7 @@ display_groups() } void -display_group(id) - int id; +display_group(int id) { register int i, offset; int print_grp = 0; @@ -475,8 +470,7 @@ display_group(id) } void -fix_pre(pre) - struct prentry *pre; +fix_pre(struct prentry *pre) { register int i; @@ -503,8 +497,7 @@ fix_pre(pre) } char * -id_to_name(id) - int id; +id_to_name(int id) { register int offset; static struct prentry pre; @@ -531,8 +524,7 @@ id_to_name(id) } char * -checkin(pre) - struct prentry *pre; +checkin(struct prentry *pre) { struct hash_entry *he, *last; register int id; @@ -562,8 +554,7 @@ checkin(pre) } char * -check_core(id) - register int id; +check_core(register int id) { struct hash_entry *he; he = hat[IDHash(id)]; diff --git a/src/ptserver/ptprocs.c b/src/ptserver/ptprocs.c index 8c868cb4e..70e91481d 100644 --- a/src/ptserver/ptprocs.c +++ b/src/ptserver/ptprocs.c @@ -51,7 +51,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/ptserver/ptprocs.c,v 1.20 2003/11/23 04:53:37 jaltman Exp $"); + ("$Header: /cvs/openafs/src/ptserver/ptprocs.c,v 1.21 2004/06/23 13:45:09 shadow Exp $"); #include #include @@ -103,6 +103,9 @@ afs_int32 listSuperGroups(); static stolower(); extern int IDCmp(); +extern int prp_group_default; +extern int prp_user_default; + /* When abort, reset initd so that the header is read in on next call. * Abort the transaction and return the code. */ @@ -1513,9 +1516,9 @@ listEntry(call, aid, aentry) aentry->flags = tentry.flags >> PRIVATE_SHIFT; if (aentry->flags == 0) { if (tentry.flags & PRGRP) - aentry->flags = PRP_GROUP_DEFAULT >> PRIVATE_SHIFT; + aentry->flags = prp_group_default >> PRIVATE_SHIFT; else - aentry->flags = PRP_USER_DEFAULT >> PRIVATE_SHIFT; + aentry->flags = prp_user_default >> PRIVATE_SHIFT; } aentry->owner = tentry.owner; aentry->id = tentry.id; @@ -1659,7 +1662,7 @@ put_prentries(tentry, bulkentries) if (entry->flags == 0) { entry->flags = ((tentry-> - flags & PRGRP) ? PRP_GROUP_DEFAULT : PRP_USER_DEFAULT) >> + flags & PRGRP) ? prp_group_default : prp_user_default) >> PRIVATE_SHIFT; } entry->owner = tentry->owner; diff --git a/src/ptserver/pts.c b/src/ptserver/pts.c index bd0b38a9d..2377b9199 100644 --- a/src/ptserver/pts.c +++ b/src/ptserver/pts.c @@ -23,7 +23,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/ptserver/pts.c,v 1.12 2004/04/18 03:16:14 jaltman Exp $"); + ("$Header: /cvs/openafs/src/ptserver/pts.c,v 1.13 2004/06/23 14:27:42 shadow Exp $"); #include #include @@ -73,24 +73,21 @@ struct sourcestack { } *shead; int -Interactive(as) - register struct cmd_syndesc *as; +Interactive(register struct cmd_syndesc *as) { finished = 0; return 0; } int -Quit(as) - register struct cmd_syndesc *as; +Quit(register struct cmd_syndesc *as) { finished = 1; return 0; } int -Source(as) - register struct cmd_syndesc *as; +Source(register struct cmd_syndesc *as) { FILE *fd; struct sourcestack *sp; @@ -118,8 +115,7 @@ Source(as) } int -Sleep(as) - register struct cmd_syndesc *as; +Sleep(register struct cmd_syndesc *as) { int delay; if (!as->parms[0].items) { @@ -157,8 +153,7 @@ osi_audit() } int -GetGlobals(as) - register struct cmd_syndesc *as; +GetGlobals(register struct cmd_syndesc *as) { register afs_int32 code; char *cell; @@ -190,8 +185,7 @@ GetGlobals(as) } int -CleanUp(as) - register struct cmd_syndesc *as; +CleanUp(register struct cmd_syndesc *as) { #if defined(SUPERGROUPS) if (as && !strcmp(as->name, "help")) @@ -212,8 +206,8 @@ CleanUp(as) return 0; } -CreateGroup(as) - register struct cmd_syndesc *as; +int +CreateGroup(register struct cmd_syndesc *as) { register afs_int32 code; afs_int32 id; @@ -272,8 +266,8 @@ CreateGroup(as) return 0; } -CreateUser(as) - register struct cmd_syndesc *as; +int +CreateUser(register struct cmd_syndesc *as) { register afs_int32 code; afs_int32 id; @@ -319,10 +313,7 @@ CreateUser(as) #ifdef notdef int -GetNameOrId(as, lids, lnames) - register struct cmd_syndesc *as; - struct idlist *lids; - struct namelist *lnames; +GetNameOrId(register struct cmd_syndesc *as, struct idlist *lids, struct namelist *lnames) { register afs_int32 code = 0; int n = 0; @@ -413,10 +404,7 @@ GetNameOrId(as, lids, lnames) int -GetNameOrId(as, lids, lnames) - register struct cmd_syndesc *as; - struct idlist *lids; - struct namelist *lnames; +GetNameOrId(register struct cmd_syndesc *as, struct idlist *lids, struct namelist *lnames) { register afs_int32 code = 0; int n = 0, nd = 0, nm = 0, id, x; @@ -503,8 +491,8 @@ GetNameOrId(as, lids, lnames) } -AddToGroup(as) - register struct cmd_syndesc *as; +int +AddToGroup(register struct cmd_syndesc *as) { register afs_int32 code; struct cmd_item *u, *g; @@ -524,8 +512,8 @@ AddToGroup(as) return 0; } -RemoveFromGroup(as) - register struct cmd_syndesc *as; +int +RemoveFromGroup(register struct cmd_syndesc *as) { register afs_int32 code; struct cmd_item *u, *g; @@ -545,8 +533,8 @@ RemoveFromGroup(as) return 0; } -ListMembership(as) - register struct cmd_syndesc *as; +int +ListMembership(register struct cmd_syndesc *as) { register afs_int32 code; idlist ids; @@ -590,8 +578,8 @@ ListMembership(as) return 0; } -Delete(as) - register struct cmd_syndesc *as; +int +Delete(register struct cmd_syndesc *as) { register afs_int32 code; idlist ids; @@ -629,8 +617,8 @@ char *flags_upcase = "SOMA "; /* legal all access values */ char *flags_dncase = "s mar"; /* legal member acces values */ int flags_shift[5] = { 2, 1, 2, 2, 1 }; /* bits for each */ -CheckEntry(as) - register struct cmd_syndesc *as; +int +CheckEntry(register struct cmd_syndesc *as) { register afs_int32 code; afs_int32 rcode = 1; @@ -728,8 +716,8 @@ CheckEntry(as) return (rcode); } -ListEntries(as) - struct cmd_syndesc *as; +int +ListEntries(struct cmd_syndesc *as) { afs_int32 code = 0; afs_int32 flag, startindex, nentries, nextstartindex; @@ -765,8 +753,8 @@ ListEntries(as) return code; } -ChownGroup(as) - register struct cmd_syndesc *as; +int +ChownGroup(register struct cmd_syndesc *as) { register afs_int32 code; char *name; @@ -781,8 +769,8 @@ ChownGroup(as) return code; } -ChangeName(as) - register struct cmd_syndesc *as; +int +ChangeName(register struct cmd_syndesc *as) { register afs_int32 code; char *oldname; @@ -797,8 +785,8 @@ ChangeName(as) return code; } -ListMax(as) - register struct cmd_syndesc *as; +int +ListMax(register struct cmd_syndesc *as) { register afs_int32 code; afs_int32 maxUser, maxGroup; @@ -818,8 +806,8 @@ ListMax(as) return code; } -SetMax(as) - register struct cmd_syndesc *as; +int +SetMax(register struct cmd_syndesc *as) { register afs_int32 code; afs_int32 maxid; @@ -858,8 +846,8 @@ SetMax(as) return code; } -SetFields(as) - register struct cmd_syndesc *as; +int +SetFields(register struct cmd_syndesc *as) { register afs_int32 code; idlist ids; @@ -953,8 +941,8 @@ SetFields(as) return 0; } -ListOwned(as) - register struct cmd_syndesc *as; +int +ListOwned(register struct cmd_syndesc *as) { register afs_int32 code; idlist ids; @@ -1004,8 +992,7 @@ ListOwned(as) } static void -add_std_args(ts) - register struct cmd_syndesc *ts; +add_std_args(register struct cmd_syndesc *ts) { char test_help[AFSDIR_PATH_MAX]; @@ -1031,9 +1018,7 @@ static void add_NameOrId_args (ts) #include "AFS_component_version_number.c" int -main(argc, argv) - int argc; - char **argv; +main(int argc, char **argv) { register afs_int32 code; register struct cmd_syndesc *ts; diff --git a/src/ptserver/ptserver.c b/src/ptserver/ptserver.c index 819cd2160..1fdab155d 100644 --- a/src/ptserver/ptserver.c +++ b/src/ptserver/ptserver.c @@ -112,7 +112,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/ptserver/ptserver.c,v 1.19 2003/11/29 22:08:15 jaltman Exp $"); + ("$Header: /cvs/openafs/src/ptserver/ptserver.c,v 1.21 2004/06/23 14:27:42 shadow Exp $"); #include #ifdef AFS_AIX32_ENV @@ -165,12 +165,37 @@ char *pr_realmName; static struct afsconf_cell info; +extern int prp_group_default; +extern int prp_user_default; + #include "AFS_component_version_number.c" +int +prp_access_mask(s) + char *s; +{ + int r; + if (*s >= '0' && *s <= '9') { + return strtol(s, NULL, 0); + } + r = 0; + while (*s) switch(*s++) + { + case 'S': r |= PRP_STATUS_ANY; break; + case 's': r |= PRP_STATUS_MEM; break; + case 'O': r |= PRP_OWNED_ANY; break; + case 'M': r |= PRP_MEMBER_ANY; break; + case 'm': r |= PRP_MEMBER_MEM; break; + case 'A': r |= PRP_ADD_ANY; break; + case 'a': r |= PRP_ADD_MEM; break; + case 'r': r |= PRP_REMOVE_MEM; break; + } + return r; +} + /* check whether caller is authorized to manage RX statistics */ int -pr_rxstat_userok(call) - struct rx_call *call; +pr_rxstat_userok(struct rx_call *call) { return afsconf_SuperUser(prdir, call, NULL); } @@ -267,6 +292,10 @@ main(int argc, char **argv) depthsg = atoi(argv[++a]); /* Max search depth for supergroups */ } #endif + else if (strncmp(arg, "-default_access", alen) == 0) { + prp_user_default = prp_access_mask(argv[++a]); + prp_group_default = prp_access_mask(argv[++a]); + } else if (strncmp(arg, "-enable_peer_stats", alen) == 0) { rx_enablePeerRPCStats(); } else if (strncmp(arg, "-enable_process_stats", alen) == 0) { @@ -291,10 +320,12 @@ main(int argc, char **argv) "[-p ] [-rebuild] " "[-groupdepth ] " "[-enable_peer_stats] [-enable_process_stats] " + "[-default_access default_user_access default_group_access] " "[-help]\n"); #else /* AFS_NT40_ENV */ printf("Usage: ptserver [-database ] " "[-p ] [-rebuild] " + "[-default_access default_user_access default_group_access] " "[-groupdepth ] " "[-help]\n"); #endif #else @@ -303,9 +334,11 @@ main(int argc, char **argv) "[-syslog[=FACILITY]] " "[-p ] [-rebuild] " "[-enable_peer_stats] [-enable_process_stats] " + "[-default_access default_user_access default_group_access] " "[-help]\n"); #else /* AFS_NT40_ENV */ printf("Usage: ptserver [-database ] " + "[-default_access default_user_access default_group_access] " "[-p ] [-rebuild] " "[-help]\n"); #endif #endif diff --git a/src/ptserver/ptuser.c b/src/ptserver/ptuser.c index f16ad89e9..5d6ba833c 100644 --- a/src/ptserver/ptuser.c +++ b/src/ptserver/ptuser.c @@ -15,7 +15,7 @@ #endif RCSID - ("$Header: /cvs/openafs/src/ptserver/ptuser.c,v 1.15 2003/12/11 19:06:16 shadow Exp $"); + ("$Header: /cvs/openafs/src/ptserver/ptuser.c,v 1.16 2004/06/23 14:27:42 shadow Exp $"); #if defined(UKERNEL) #include "afs/sysincludes.h" @@ -64,10 +64,7 @@ static afs_int32 lastLevel; /* security level pruclient, if any */ static char *whoami = "libprot"; afs_int32 -pr_Initialize(secLevel, confDir, cell) - IN afs_int32 secLevel; - IN char *confDir; - IN char *cell; +pr_Initialize(IN afs_int32 secLevel, IN char *confDir, IN char *cell) { afs_int32 code; struct rx_connection *serverconns[MAXSERVERS]; @@ -212,7 +209,7 @@ pr_Initialize(secLevel, confDir, cell) return code; } - +int pr_End() { int code = 0; @@ -226,9 +223,8 @@ pr_End() -pr_CreateUser(name, id) - char name[PR_MAXNAMELEN]; - afs_int32 *id; +int +pr_CreateUser(char name[PR_MAXNAMELEN], afs_int32 *id) { register afs_int32 code; @@ -243,10 +239,8 @@ pr_CreateUser(name, id) } -pr_CreateGroup(name, owner, id) - char name[PR_MAXNAMELEN]; - char owner[PR_MAXNAMELEN]; - afs_int32 *id; +int +pr_CreateGroup(char name[PR_MAXNAMELEN], char owner[PR_MAXNAMELEN], afs_int32 *id) { register afs_int32 code; afs_int32 oid = 0; @@ -270,8 +264,8 @@ pr_CreateGroup(name, owner, id) } } -pr_Delete(name) - char *name; +int +pr_Delete(char *name) { register afs_int32 code; afs_int32 id; @@ -286,8 +280,8 @@ pr_Delete(name) return code; } -pr_DeleteByID(id) - afs_int32 id; +int +pr_DeleteByID(afs_int32 id) { register afs_int32 code; @@ -295,9 +289,8 @@ pr_DeleteByID(id) return code; } -pr_AddToGroup(user, group) - char *user; - char *group; +int +pr_AddToGroup(char *user, char *group) { register afs_int32 code; namelist lnames; @@ -329,9 +322,8 @@ pr_AddToGroup(user, group) return code; } -pr_RemoveUserFromGroup(user, group) - char *user; - char *group; +int +pr_RemoveUserFromGroup(char *user, char *group) { register afs_int32 code; namelist lnames; @@ -364,9 +356,8 @@ pr_RemoveUserFromGroup(user, group) } -pr_NameToId(names, ids) - namelist *names; - idlist *ids; +int +pr_NameToId(namelist *names, idlist *ids) { register afs_int32 code; register afs_int32 i; @@ -377,9 +368,8 @@ pr_NameToId(names, ids) return code; } -pr_SNameToId(name, id) - char name[PR_MAXNAMELEN]; - afs_int32 *id; +int +pr_SNameToId(char name[PR_MAXNAMELEN], afs_int32 *id) { namelist lnames; idlist lids; @@ -401,11 +391,8 @@ pr_SNameToId(name, id) return code; } - - -pr_IdToName(ids, names) - idlist *ids; - namelist *names; +int +pr_IdToName(idlist *ids, namelist *names) { register afs_int32 code; @@ -413,9 +400,8 @@ pr_IdToName(ids, names) return code; } -pr_SIdToName(id, name) - afs_int32 id; - char name[PR_MAXNAMELEN]; +int +pr_SIdToName(afs_int32 id, char name[PR_MAXNAMELEN]) { namelist lnames; idlist lids; @@ -436,11 +422,8 @@ pr_SIdToName(id, name) return code; } - - -pr_GetCPS(id, CPS) - afs_int32 id; - prlist *CPS; +int +pr_GetCPS(afs_int32 id, prlist *CPS) { register afs_int32 code; afs_int32 over; @@ -458,11 +441,8 @@ pr_GetCPS(id, CPS) return 0; } - -pr_GetCPS2(id, host, CPS) - afs_int32 id; - afs_int32 host; - prlist *CPS; +int +pr_GetCPS2(afs_int32 id, afs_int32 host, prlist *CPS) { register afs_int32 code; afs_int32 over; @@ -480,9 +460,8 @@ pr_GetCPS2(id, host, CPS) return 0; } -pr_GetHostCPS(host, CPS) - afs_int32 host; - prlist *CPS; +int +pr_GetHostCPS(afs_int32 host, prlist *CPS) { register afs_int32 code; afs_int32 over; @@ -501,10 +480,8 @@ pr_GetHostCPS(host, CPS) return 0; } - -pr_ListMembers(group, lnames) - char *group; - namelist *lnames; +int +pr_ListMembers(char *group, namelist *lnames) { register afs_int32 code; afs_int32 gid; @@ -518,10 +495,8 @@ pr_ListMembers(group, lnames) return code; } -pr_ListOwned(oid, lnames, moreP) - afs_int32 oid; - namelist *lnames; - afs_int32 *moreP; +int +pr_ListOwned(afs_int32 oid, namelist *lnames, afs_int32 *moreP) { register afs_int32 code; prlist alist; @@ -547,9 +522,8 @@ pr_ListOwned(oid, lnames, moreP) return PRSUCCESS; } -pr_IDListMembers(gid, lnames) - afs_int32 gid; - namelist *lnames; +int +pr_IDListMembers(afs_int32 gid, namelist *lnames) { register afs_int32 code; prlist alist; @@ -574,10 +548,8 @@ pr_IDListMembers(gid, lnames) return PRSUCCESS; } - -pr_ListEntry(id, aentry) - afs_int32 id; - struct prcheckentry *aentry; +int +pr_ListEntry(afs_int32 id, struct prcheckentry *aentry) { register afs_int32 code; @@ -586,11 +558,7 @@ pr_ListEntry(id, aentry) } afs_int32 -pr_ListEntries(flag, startindex, nentries, entries, nextstartindex) - afs_int32 startindex; - afs_int32 *nentries; - struct prlistentries **entries; - afs_int32 *nextstartindex; +pr_ListEntries(int flag, afs_int32 startindex, afs_int32 *nentries, struct prlistentries **entries, afs_int32 *nextstartindex) { afs_int32 code; prentries bulkentries; @@ -609,11 +577,8 @@ pr_ListEntries(flag, startindex, nentries, entries, nextstartindex) return code; } -pr_CheckEntryByName(name, id, owner, creator) - char *name; - afs_int32 *id; - char *owner; - char *creator; +int +pr_CheckEntryByName(char *name, afs_int32 *id, char *owner, char *creator) { /* struct prcheckentry returns other things, which aren't useful to show at this time. */ register afs_int32 code; @@ -637,11 +602,8 @@ pr_CheckEntryByName(name, id, owner, creator) return PRSUCCESS; } -pr_CheckEntryById(name, id, owner, creator) - char *name; - afs_int32 id; - char *owner; - char *creator; +int +pr_CheckEntryById(char *name, afs_int32 id, char *owner, char *creator) { /* struct prcheckentry returns other things, which aren't useful to show at this time. */ register afs_int32 code; @@ -665,11 +627,8 @@ pr_CheckEntryById(name, id, owner, creator) return PRSUCCESS; } -pr_ChangeEntry(oldname, newname, newid, newowner) - char *oldname; - char *newname; - afs_int32 *newid; - char *newowner; +int +pr_ChangeEntry(char *oldname, char *newname, afs_int32 *newid, char *newowner) { register afs_int32 code; afs_int32 id; @@ -691,10 +650,8 @@ pr_ChangeEntry(oldname, newname, newid, newowner) return code; } -pr_IsAMemberOf(uname, gname, flag) - char *uname; - char *gname; - afs_int32 *flag; +int +pr_IsAMemberOf(char *uname, char *gname, afs_int32 *flag) { register afs_int32 code; namelist lnames; @@ -726,9 +683,8 @@ pr_IsAMemberOf(uname, gname, flag) return code; } - -pr_ListMaxUserId(mid) - afs_int32 *mid; +int +pr_ListMaxUserId(afs_int32 *mid) { register afs_int32 code; afs_int32 gid; @@ -736,8 +692,8 @@ pr_ListMaxUserId(mid) return code; } -pr_SetMaxUserId(mid) - afs_int32 mid; +int +pr_SetMaxUserId(afs_int32 mid) { register afs_int32 code; afs_int32 flag = 0; @@ -745,8 +701,8 @@ pr_SetMaxUserId(mid) return code; } -pr_ListMaxGroupId(mid) - afs_int32 *mid; +int +pr_ListMaxGroupId(afs_int32 *mid) { register afs_int32 code; afs_int32 id; @@ -754,8 +710,8 @@ pr_ListMaxGroupId(mid) return code; } -pr_SetMaxGroupId(mid) - afs_int32 mid; +int +pr_SetMaxGroupId(afs_int32 mid) { register afs_int32 code; afs_int32 flag = 0; @@ -766,10 +722,7 @@ pr_SetMaxGroupId(mid) } afs_int32 -pr_SetFieldsEntry(id, mask, flags, ngroups, nusers) - afs_int32 id; - afs_int32 mask; - afs_int32 flags, ngroups, nusers; +pr_SetFieldsEntry(afs_int32 id, afs_int32 mask, afs_int32 flags, afs_int32 ngroups, afs_int32 nusers) { register afs_int32 code; @@ -779,10 +732,8 @@ pr_SetFieldsEntry(id, mask, flags, ngroups, nusers) return code; } - int -stolower(s) - char *s; +stolower(char *s) { while (*s) { if (isupper(*s)) diff --git a/src/ptserver/ptutils.c b/src/ptserver/ptutils.c index 87185e18f..96cbabf4e 100644 --- a/src/ptserver/ptutils.c +++ b/src/ptserver/ptutils.c @@ -24,7 +24,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/ptserver/ptutils.c,v 1.15 2004/04/18 06:13:50 kolya Exp $"); + ("$Header: /cvs/openafs/src/ptserver/ptutils.c,v 1.18 2004/06/23 15:01:04 shadow Exp $"); #include #include @@ -62,6 +62,9 @@ extern int IDCmp(); extern afs_int32 AddToEntry(); static char *whoami = "ptserver"; +int prp_user_default = PRP_USER_DEFAULT; +int prp_group_default = PRP_GROUP_DEFAULT; + #if defined(SUPERGROUPS) #include "map.h" @@ -91,10 +94,7 @@ struct map *sg_found; int (*pt_save_dbase_write) (); int -pt_mywrite(tdb, fno, bp, pos, count) - struct ubik_dbase *tdb; - afs_int32 fno, pos, count; - char *bp; +pt_mywrite(struct ubik_dbase *tdb, afs_int32 fno, char *bp, afs_int32 pos, afs_int32 count) { afs_uint32 headersize = ntohl(cheader.headerSize); @@ -188,6 +188,7 @@ pt_mywrite(tdb, fno, bp, pos, count) * just after ubik_ServerInit. */ +void pt_hook_write() { extern struct ubik_dbase *ubik_dbase; @@ -208,8 +209,7 @@ pt_hook_write() * return one if name is OK and zero if name is bogus. */ static int -CorrectUserName(name) - char *name; +CorrectUserName(char *name) { extern int pr_realmNameLen; @@ -227,12 +227,10 @@ CorrectUserName(name) * rename, which then compares the correct name with the requested new name. */ static afs_int32 -CorrectGroupName(ut, aname, cid, oid, cname) - struct ubik_trans *ut; - char aname[PR_MAXNAMELEN]; /* name for group */ - afs_int32 cid; /* caller id */ - afs_int32 oid; /* owner of group */ - char cname[PR_MAXNAMELEN]; /* correct name for group */ +CorrectGroupName(struct ubik_trans *ut, char aname[PR_MAXNAMELEN], /* name for group */ + afs_int32 cid, /* caller id */ + afs_int32 oid, /* owner of group */ + char cname[PR_MAXNAMELEN]) /* correct name for group */ { afs_int32 code; int admin; @@ -308,12 +306,10 @@ CorrectGroupName(ut, aname, cid, oid, cname) } int -AccessOK(ut, cid, tentry, mem, any) - struct ubik_trans *ut; - afs_int32 cid; /* caller id */ - struct prentry *tentry; /* object being accessed */ - int mem; /* check membership in aid, if group */ - int any; /* if set return true */ +AccessOK(struct ubik_trans *ut, afs_int32 cid, /* caller id */ + struct prentry *tentry, /* object being accessed */ + int mem, /* check membership in aid, if group */ + int any) /* if set return true */ { afs_int32 flags; afs_int32 oid; @@ -332,9 +328,9 @@ AccessOK(ut, cid, tentry, mem, any) } if (!(flags & PRACCESS)) { /* provide default access */ if (flags & PRGRP) - flags |= PRP_GROUP_DEFAULT; + flags |= prp_group_default; else - flags |= PRP_USER_DEFAULT; + flags |= prp_user_default; } if (flags & any) @@ -360,14 +356,7 @@ AccessOK(ut, cid, tentry, mem, any) } afs_int32 -CreateEntry(at, aname, aid, idflag, flag, oid, creator) - struct ubik_trans *at; - char aname[PR_MAXNAMELEN]; - afs_int32 *aid; - afs_int32 idflag; - afs_int32 flag; - afs_int32 oid; - afs_int32 creator; +CreateEntry(struct ubik_trans *at, char aname[PR_MAXNAMELEN], afs_int32 *aid, afs_int32 idflag, afs_int32 flag, afs_int32 oid, afs_int32 creator) { /* get and init a new entry */ afs_int32 code; @@ -633,10 +622,7 @@ CreateEntry(at, aname, aid, idflag, flag, oid, creator) * entry if appropriate */ afs_int32 -RemoveFromEntry(at, aid, bid) - struct ubik_trans *at; - afs_int32 aid; - afs_int32 bid; +RemoveFromEntry(struct ubik_trans *at, afs_int32 aid, afs_int32 bid) { afs_int32 code; struct prentry tentry; @@ -724,11 +710,7 @@ RemoveFromEntry(at, aid, bid) * entry if appropriate */ afs_int32 -ChangeIDEntry(at, aid, newid, bid) - register struct ubik_trans *at; - register afs_int32 aid; - register afs_int32 bid; - afs_int32 newid; +ChangeIDEntry(register struct ubik_trans *at, register afs_int32 aid, afs_int32 newid, register afs_int32 bid) { register afs_int32 code; struct prentry tentry; @@ -796,10 +778,7 @@ ChangeIDEntry(at, aid, newid, bid) * continuation entry if appropriate */ afs_int32 -RemoveFromSGEntry(at, aid, bid) - register struct ubik_trans *at; - register afs_int32 aid; - register afs_int32 bid; +RemoveFromSGEntry(register struct ubik_trans *at, register afs_int32 aid, register afs_int32 bid) { register afs_int32 code; struct prentry tentry; @@ -897,10 +876,7 @@ RemoveFromSGEntry(at, aid, bid) * groups, putting groups owned by it on orphan chain, and freeing the space */ afs_int32 -DeleteEntry(at, tentry, loc) - struct ubik_trans *at; - struct prentry *tentry; - afs_int32 loc; +DeleteEntry(struct ubik_trans *at, struct prentry *tentry, afs_int32 loc) { afs_int32 code; struct contentry centry; @@ -1051,11 +1027,7 @@ DeleteEntry(at, tentry, loc) * Note the entry is written out by this routine. */ afs_int32 -AddToEntry(tt, entry, loc, aid) - struct ubik_trans *tt; - struct prentry *entry; - afs_int32 loc; - afs_int32 aid; +AddToEntry(struct ubik_trans *tt, struct prentry *entry, afs_int32 loc, afs_int32 aid) { afs_int32 code; afs_int32 i; @@ -1168,11 +1140,7 @@ AddToEntry(tt, entry, loc, aid) * Note the entry is written out by this routine. */ afs_int32 -AddToSGEntry(tt, entry, loc, aid) - struct ubik_trans *tt; - struct prentry *entry; - afs_int32 loc; - afs_int32 aid; +AddToSGEntry(struct ubik_trans *tt, struct prentry *entry, afs_int32 loc, afs_int32 aid) { register afs_int32 code; afs_int32 i; @@ -1281,10 +1249,7 @@ AddToSGEntry(tt, entry, loc, aid) #endif /* SUPERGROUPS */ afs_int32 -AddToPRList(alist, sizeP, id) - prlist *alist; - int *sizeP; - afs_int32 id; +AddToPRList(prlist *alist, int *sizeP, afs_int32 id) { char *tmp; int count; @@ -1307,11 +1272,7 @@ AddToPRList(alist, sizeP, id) } afs_int32 -GetList(at, tentry, alist, add) - struct ubik_trans *at; - struct prentry *tentry; - prlist *alist; - afs_int32 add; +GetList(struct ubik_trans *at, struct prentry *tentry, prlist *alist, afs_int32 add) { afs_int32 code; afs_int32 i; @@ -1386,12 +1347,7 @@ GetList(at, tentry, alist, add) afs_int32 -GetList2(at, tentry, tentry2, alist, add) - struct ubik_trans *at; - struct prentry *tentry; - struct prentry *tentry2; - prlist *alist; - afs_int32 add; +GetList2(struct ubik_trans *at, struct prentry *tentry, struct prentry *tentry2, prlist *alist, afs_int32 add) { afs_int32 code = 0; afs_int32 i; @@ -1499,12 +1455,7 @@ GetList2(at, tentry, tentry2, alist, add) #if defined(SUPERGROUPS) afs_int32 -GetListSG2(at, gid, alist, sizeP, depth) - struct ubik_trans *at; - afs_int32 gid; - prlist *alist; - afs_int32 depth; - afs_int32 *sizeP; +GetListSG2(struct ubik_trans *at, afs_int32 gid, prlist *alist, afs_int32 *sizeP, afs_int32 depth) { register afs_int32 code; struct prentry tentry; @@ -1620,10 +1571,7 @@ GetListSG2(at, gid, alist, sizeP, depth) } afs_int32 -GetSGList(at, tentry, alist) - struct ubik_trans *at; - struct prentry *tentry; - prlist *alist; +GetSGList(struct ubik_trans *at, struct prentry *tentry, prlist *alist) { register afs_int32 code; afs_int32 i; @@ -1677,10 +1625,7 @@ GetSGList(at, tentry, alist) #endif /* SUPERGROUPS */ afs_int32 -GetOwnedChain(ut, next, alist) - struct ubik_trans *ut; - afs_int32 *next; - prlist *alist; +GetOwnedChain(struct ubik_trans *ut, afs_int32 *next, prlist *alist) { afs_int32 code; struct prentry tentry; @@ -1711,10 +1656,7 @@ GetOwnedChain(ut, next, alist) } afs_int32 -GetMax(at, uid, gid) - struct ubik_trans *at; - afs_int32 *uid; - afs_int32 *gid; +GetMax(struct ubik_trans *at, afs_int32 *uid, afs_int32 *gid) { *uid = ntohl(cheader.maxID); *gid = ntohl(cheader.maxGroup); @@ -1722,10 +1664,7 @@ GetMax(at, uid, gid) } afs_int32 -SetMax(at, id, flag) - struct ubik_trans *at; - afs_int32 id; - afs_int32 flag; +SetMax(struct ubik_trans *at, afs_int32 id, afs_int32 flag) { afs_int32 code; if (flag & PRGRP) { @@ -1747,8 +1686,7 @@ SetMax(at, id, flag) } afs_int32 -read_DbHeader(tt) - struct ubik_trans *tt; +read_DbHeader(struct ubik_trans *tt) { afs_int32 code; @@ -1904,13 +1842,7 @@ Initdb() } afs_int32 -ChangeEntry(at, aid, cid, name, oid, newid) - struct ubik_trans *at; - afs_int32 aid; - afs_int32 cid; - char *name; - afs_int32 oid; - afs_int32 newid; +ChangeEntry(struct ubik_trans *at, afs_int32 aid, afs_int32 cid, char *name, afs_int32 oid, afs_int32 newid) { afs_int32 code; afs_int32 i, nptr, pos; @@ -2243,10 +2175,8 @@ inRange(struct prentry *cellEntry, afs_int32 aid) } -AddAuthGroup(tentry, alist, size) - struct prentry *tentry; - prlist *alist; - afs_int32 *size; +int +AddAuthGroup(struct prentry *tentry, prlist *alist, afs_int32 *size) { if (!(strchr(tentry->name, '@'))) return (AddToPRList(alist, size, AUTHUSERID)); diff --git a/src/ptserver/readgroup.c b/src/ptserver/readgroup.c index 11cf01e89..6b138fd79 100644 --- a/src/ptserver/readgroup.c +++ b/src/ptserver/readgroup.c @@ -11,7 +11,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/ptserver/readgroup.c,v 1.9 2004/04/18 06:13:50 kolya Exp $"); + ("$Header: /cvs/openafs/src/ptserver/readgroup.c,v 1.10 2004/06/23 14:27:42 shadow Exp $"); #include #ifdef AFS_NT40_ENV @@ -36,10 +36,7 @@ int verbose = 0; void skip(); void -report_error(code, name, gname) - afs_int32 code; - char *name; - char *gname; +report_error(afs_int32 code, char *name, char *gname) { if (code == 0) { if (verbose) @@ -65,9 +62,8 @@ osi_audit() #include "AFS_component_version_number.c" -main(argc, argv) - afs_int32 argc; - char **argv; +int +main(int argc, char **argv) { register afs_int32 code; char name[PR_MAXNAMELEN]; @@ -218,8 +214,7 @@ main(argc, argv) } void -skip(s) - char **s; +skip(char **s) { while (**s != ' ' && **s != '\t' && **s != '\0') (*s)++; diff --git a/src/ptserver/readpwd.c b/src/ptserver/readpwd.c index 52f1aa0ca..e7996d598 100644 --- a/src/ptserver/readpwd.c +++ b/src/ptserver/readpwd.c @@ -11,7 +11,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/ptserver/readpwd.c,v 1.8 2004/04/18 06:13:50 kolya Exp $"); + ("$Header: /cvs/openafs/src/ptserver/readpwd.c,v 1.9 2004/06/23 14:27:42 shadow Exp $"); #include #ifdef AFS_NT40_ENV @@ -42,9 +42,8 @@ osi_audit() #include "AFS_component_version_number.c" -main(argc, argv) - afs_int32 argc; - char **argv; +int +main(afs_int32 argc, char **argv) { register afs_int32 code; diff --git a/src/ptserver/testpt.c b/src/ptserver/testpt.c index 175a4926a..63c614150 100644 --- a/src/ptserver/testpt.c +++ b/src/ptserver/testpt.c @@ -11,7 +11,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/ptserver/testpt.c,v 1.13 2003/12/07 22:49:35 jaltman Exp $"); + ("$Header: /cvs/openafs/src/ptserver/testpt.c,v 1.14 2004/06/23 14:27:42 shadow Exp $"); #include #include @@ -55,9 +55,8 @@ static struct afsconf_dir *conf; /* cell info, set by MyBeforeProc */ static char conf_dir[100]; static char lcell[MAXCELLCHARS]; -ListUsedIds(as, arock) - struct cmd_syndesc *as; - char *arock; +int +ListUsedIds(struct cmd_syndesc *as, char *arock) { afs_int32 code; namelist lnames; @@ -184,9 +183,7 @@ afs_int32 *groupOwners; /* ids of owners of groups */ int nUsers, nGroups, nAdds, nRems, nUDels, nGDels; int -IdCmp(a, b) - afs_int32 *a; - afs_int32 *b; +IdCmp(afs_int32 *a, afs_int32 *b) { if (*a > *b) { return 1; @@ -198,16 +195,13 @@ IdCmp(a, b) } static int -sqr(n) - int n; +sqr(int n) { return n * n; } static int -GetGroupLimit(N, x) - int N; - int x; +GetGroupLimit(int N, int x) { int y; double sqrt(); @@ -239,8 +233,7 @@ GetGroupLimit(N, x) } void -CreateUser(u) - int u; +CreateUser(int u) { afs_int32 code; char name[16]; @@ -278,8 +271,7 @@ CreateUser(u) } void -CreateGroup(g) - int g; +CreateGroup(int g) { afs_int32 code; char name[16]; @@ -347,8 +339,7 @@ CreateGroup(g) } int -DeleteRandomId(list) - afs_int32 *list; +DeleteRandomId(afs_int32 *list) { afs_int32 code; afs_int32 id; @@ -376,8 +367,7 @@ DeleteRandomId(list) } void -AddUser(u, g) - int u, g; +AddUser(int u, int g) { afs_int32 code; afs_int32 ui, gi; @@ -400,8 +390,7 @@ AddUser(u, g) } void -RemUser(u, g) - int u, g; +RemUser(int u, int g) { afs_int32 code; afs_int32 ui, gi; @@ -419,9 +408,8 @@ RemUser(u, g) nRems++; } -TestManyMembers(as, arock) - struct cmd_syndesc *as; - char *arock; +int +TestManyMembers(struct cmd_syndesc *as, char *arock) { char *filled; /* users filled up */ char *cleaned; /* users cleaned up */ @@ -736,11 +724,10 @@ TestManyMembers(as, arock) /* Converts a byte string to ascii. Return the number of unconverted bytes. */ static int -ka_ConvertBytes(ascii, alen, bs, bl) - char *ascii; /* output buffer */ - int alen; /* buffer length */ - char bs[]; /* byte string */ - int bl; /* number of bytes */ +ka_ConvertBytes(char *ascii, /* output buffer */ + int alen, /* buffer length */ + char bs[], /* byte string */ + int bl) /* number of bytes */ { int i; unsigned char c; @@ -778,9 +765,8 @@ ka_ConvertBytes(ascii, alen, bs, bl) * must be correct. */ -TestPrServ(as, arock) - struct cmd_syndesc *as; - char *arock; +int +TestPrServ(struct cmd_syndesc *as, char *arock) { afs_int32 id; char name[PR_MAXNAMELEN + 1]; @@ -926,9 +912,7 @@ static char tmp_cell_file[128] = ""; static char tmp_noauth_file[128] = ""; static int -MyAfterProc(as, arock) - struct cmd_syndesc *as; - char *arock; +MyAfterProc(struct cmd_syndesc *as, char *arock) { if (strlen(tmp_conf_file)) unlink(tmp_conf_file); @@ -942,9 +926,7 @@ MyAfterProc(as, arock) } static int -MyBeforeProc(as, arock) - struct cmd_syndesc *as; - char *arock; +MyBeforeProc(struct cmd_syndesc *as, char *arock) { afs_int32 code; int i; @@ -1079,8 +1061,7 @@ MyBeforeProc(as, arock) } static void -add_std_args(ts) - register struct cmd_syndesc *ts; +add_std_args(register struct cmd_syndesc *ts) { cmd_Seek(ts, 12); cmd_AddParm(ts, "-confdir", CMD_SINGLE, CMD_OPTIONAL, @@ -1102,9 +1083,8 @@ osi_audit() #include "AFS_component_version_number.c" -main(argc, argv) - int argc; - char *argv[]; +int +main(int argc, char *argv[]) { afs_int32 code; struct cmd_syndesc *ts; /* ptr to parsed command line syntax */ diff --git a/src/ptserver/utils.c b/src/ptserver/utils.c index 0f2f393de..4be9bd13b 100644 --- a/src/ptserver/utils.c +++ b/src/ptserver/utils.c @@ -11,7 +11,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/ptserver/utils.c,v 1.14 2003/11/23 04:53:37 jaltman Exp $"); + ("$Header: /cvs/openafs/src/ptserver/utils.c,v 1.15 2004/06/23 14:27:42 shadow Exp $"); #include #include @@ -40,16 +40,14 @@ afs_int32 IsAMemberOfSG(struct ubik_trans *at, afs_int32 aid, afs_int32 gid, #endif afs_int32 -IDHash(x) - afs_int32 x; +IDHash(afs_int32 x) { /* returns hash bucket for x */ return ((abs(x)) % HASHSIZE); } afs_int32 -NameHash(aname) - register unsigned char *aname; +NameHash(register unsigned char *aname) { /* returns hash bucket for aname */ register unsigned int hash = 0; @@ -62,12 +60,7 @@ NameHash(aname) afs_int32 -pr_Write(tt, afd, pos, buff, len) - struct ubik_trans *tt; - afs_int32 afd; - afs_int32 pos; - char *buff; - afs_int32 len; +pr_Write(struct ubik_trans *tt, afs_int32 afd, afs_int32 pos, char *buff, afs_int32 len) { /* package up seek and write into one procedure for ease of use */ afs_int32 code; @@ -84,12 +77,7 @@ pr_Write(tt, afd, pos, buff, len) } afs_int32 -pr_Read(tt, afd, pos, buff, len) - struct ubik_trans *tt; - afs_int32 afd; - afs_int32 pos; - char *buff; - afs_int32 len; +pr_Read(struct ubik_trans *tt, afs_int32 afd, afs_int32 pos, char *buff, afs_int32 len) { /* same thing for read */ afs_int32 code; @@ -100,11 +88,8 @@ pr_Read(tt, afd, pos, buff, len) return code; } -pr_WriteEntry(tt, afd, pos, tentry) - struct ubik_trans *tt; - afs_int32 afd; - afs_int32 pos; - struct prentry *tentry; +int +pr_WriteEntry(struct ubik_trans *tt, afs_int32 afd, afs_int32 pos, struct prentry *tentry) { afs_int32 code; register afs_int32 i; @@ -144,11 +129,8 @@ pr_WriteEntry(tt, afd, pos, tentry) return (code); } -pr_ReadEntry(tt, afd, pos, tentry) - struct ubik_trans *tt; - afs_int32 afd; - afs_int32 pos; - struct prentry *tentry; +int +pr_ReadEntry(struct ubik_trans *tt, afs_int32 afd, afs_int32 pos, struct prentry *tentry) { afs_int32 code; register afs_int32 i; @@ -193,11 +175,8 @@ pr_ReadEntry(tt, afd, pos, tentry) return (code); } -pr_WriteCoEntry(tt, afd, pos, tentry) - struct ubik_trans *tt; - afs_int32 afd; - afs_int32 pos; - struct contentry *tentry; +int +pr_WriteCoEntry(struct ubik_trans *tt, afs_int32 afd, afs_int32 pos, struct contentry *tentry) { afs_int32 code; register afs_int32 i; @@ -217,11 +196,8 @@ pr_WriteCoEntry(tt, afd, pos, tentry) return (code); } -pr_ReadCoEntry(tt, afd, pos, tentry) - struct ubik_trans *tt; - afs_int32 afd; - afs_int32 pos; - struct contentry *tentry; +int +pr_ReadCoEntry(struct ubik_trans *tt, afs_int32 afd, afs_int32 pos, struct contentry *tentry) { afs_int32 code; register afs_int32 i; @@ -250,8 +226,7 @@ pr_ReadCoEntry(tt, afd, pos, tentry) * new entry */ afs_int32 -AllocBlock(at) - register struct ubik_trans *at; +AllocBlock(register struct ubik_trans *at) { register afs_int32 code; afs_int32 temp; @@ -284,9 +259,7 @@ AllocBlock(at) } afs_int32 -FreeBlock(at, pos) - register struct ubik_trans *at; - afs_int32 pos; +FreeBlock(register struct ubik_trans *at, afs_int32 pos) { /* add a block of storage to the free list */ register afs_int32 code; @@ -307,9 +280,7 @@ FreeBlock(at, pos) } afs_int32 -FindByID(at, aid) - register struct ubik_trans *at; - afs_int32 aid; +FindByID(register struct ubik_trans *at, afs_int32 aid) { /* returns address of entry if found, 0 otherwise */ register afs_int32 code; @@ -342,13 +313,8 @@ FindByID(at, aid) return 0; } - - afs_int32 -FindByName(at, aname, tentryp) - register struct ubik_trans *at; - char aname[PR_MAXNAMELEN]; - struct prentry *tentryp; +FindByName(register struct ubik_trans *at, char aname[PR_MAXNAMELEN], struct prentry *tentryp) { /* ditto */ register afs_int32 code; @@ -379,10 +345,7 @@ FindByName(at, aname, tentryp) } afs_int32 -AllocID(at, flag, aid) - register struct ubik_trans *at; - afs_int32 flag; - afs_int32 *aid; +AllocID(register struct ubik_trans *at, afs_int32 flag, afs_int32 *aid) { /* allocs an id from the proper area of address space, based on flag */ register afs_int32 code = 1; @@ -441,10 +404,7 @@ AllocID(at, flag, aid) } afs_int32 -IDToName(at, aid, aname) - register struct ubik_trans *at; - afs_int32 aid; - char aname[PR_MAXNAMELEN]; +IDToName(register struct ubik_trans *at, afs_int32 aid, char aname[PR_MAXNAMELEN]) { afs_int32 temp; struct prentry tentry; @@ -461,10 +421,7 @@ IDToName(at, aid, aname) } afs_int32 -NameToID(at, aname, aid) - register struct ubik_trans *at; - char aname[PR_MAXNAMELEN]; - afs_int32 *aid; +NameToID(register struct ubik_trans *at, char aname[PR_MAXNAMELEN], afs_int32 *aid) { afs_int32 temp; struct prentry tentry; @@ -477,9 +434,7 @@ NameToID(at, aname, aid) } int -IDCmp(a, b) - afs_int32 *a; - afs_int32 *b; +IDCmp(afs_int32 *a, afs_int32 *b) { /* used to sort CPS's so that comparison with acl's is easier */ if (*a > *b) { @@ -492,10 +447,7 @@ IDCmp(a, b) } afs_int32 -RemoveFromIDHash(tt, aid, loc) - struct ubik_trans *tt; - afs_int32 aid; - afs_int32 *loc; /* ??? in case ID hashed twice ??? */ +RemoveFromIDHash(struct ubik_trans *tt, afs_int32 aid, afs_int32 *loc) /* ??? in case ID hashed twice ??? */ { /* remove entry designated by aid from id hash table */ register afs_int32 code; @@ -546,10 +498,7 @@ RemoveFromIDHash(tt, aid, loc) } afs_int32 -AddToIDHash(tt, aid, loc) - struct ubik_trans *tt; - afs_int32 aid; - afs_int32 loc; /* ??? */ +AddToIDHash(struct ubik_trans *tt, afs_int32 aid, afs_int32 loc) { /* add entry at loc designated by aid to id hash table */ register afs_int32 code; @@ -577,10 +526,7 @@ AddToIDHash(tt, aid, loc) } afs_int32 -RemoveFromNameHash(tt, aname, loc) - struct ubik_trans *tt; - char *aname; - afs_int32 *loc; +RemoveFromNameHash(struct ubik_trans *tt, char *aname, afs_int32 *loc) { /* remove from name hash */ register afs_int32 code; @@ -629,10 +575,7 @@ RemoveFromNameHash(tt, aname, loc) } afs_int32 -AddToNameHash(tt, aname, loc) - struct ubik_trans *tt; - char *aname; - afs_int32 loc; +AddToNameHash(struct ubik_trans *tt, char *aname, afs_int32 loc) { /* add to name hash */ register afs_int32 code; @@ -658,10 +601,7 @@ AddToNameHash(tt, aname, loc) } afs_int32 -AddToOwnerChain(at, gid, oid) - struct ubik_trans *at; - afs_int32 gid; - afs_int32 oid; +AddToOwnerChain(struct ubik_trans *at, afs_int32 gid, afs_int32 oid) { /* add entry designated by gid to owner chain of entry designated by oid */ register afs_int32 code; @@ -699,10 +639,7 @@ AddToOwnerChain(at, gid, oid) /* RemoveFromOwnerChain - remove gid from owner chain for oid */ afs_int32 -RemoveFromOwnerChain(at, gid, oid) - struct ubik_trans *at; - afs_int32 gid; - afs_int32 oid; +RemoveFromOwnerChain(struct ubik_trans *at, afs_int32 gid, afs_int32 oid) { register afs_int32 code; afs_int32 nptr; @@ -761,9 +698,7 @@ RemoveFromOwnerChain(at, gid, oid) /* AddToOrphan - add gid to orphan list, as it's owner has died */ afs_int32 -AddToOrphan(at, gid) - struct ubik_trans *at; - afs_int32 gid; +AddToOrphan(struct ubik_trans *at, afs_int32 gid) { register afs_int32 code; afs_int32 loc; @@ -787,9 +722,7 @@ AddToOrphan(at, gid) } afs_int32 -RemoveFromOrphan(at, gid) - struct ubik_trans *at; - afs_int32 gid; +RemoveFromOrphan(struct ubik_trans *at, afs_int32 gid) { /* remove gid from the orphan list */ register afs_int32 code; @@ -844,10 +777,7 @@ RemoveFromOrphan(at, gid) } afs_int32 -IsOwnerOf(at, aid, gid) - struct ubik_trans *at; - afs_int32 aid; - afs_int32 gid; +IsOwnerOf(struct ubik_trans *at, afs_int32 aid, afs_int32 gid) { /* returns 1 if aid is the owner of gid, 0 otherwise */ register afs_int32 code; @@ -866,9 +796,7 @@ IsOwnerOf(at, aid, gid) } afs_int32 -OwnerOf(at, gid) - struct ubik_trans *at; - afs_int32 gid; +OwnerOf(struct ubik_trans *at, afs_int32 gid) { /* returns the owner of gid */ register afs_int32 code; @@ -886,10 +814,7 @@ OwnerOf(at, gid) afs_int32 -IsAMemberOf(at, aid, gid) - struct ubik_trans *at; - afs_int32 aid; - afs_int32 gid; +IsAMemberOf(struct ubik_trans *at, afs_int32 aid, afs_int32 gid) { /* returns true if aid is a member of gid */ #if !defined(SUPERGROUPS) @@ -947,13 +872,8 @@ IsAMemberOf(at, aid, gid) #if defined(SUPERGROUPS) - afs_int32 -IsAMemberOfSG(at, aid, gid, depth) - struct ubik_trans *at; - afs_int32 aid; - afs_int32 gid; - afs_int32 depth; +IsAMemberOfSG(struct ubik_trans *at, afs_int32 aid, afs_int32 gid, afs_int32 depth) { /* returns true if aid is a member of gid */ struct prentry tentry; @@ -1017,5 +937,4 @@ IsAMemberOfSG(at, aid, gid, depth) } return 0; /* actually, should never get here */ } - #endif /* SUPERGROUPS */ diff --git a/src/rx/LINUX/rx_knet.c b/src/rx/LINUX/rx_knet.c index d3ce2a96e..d407e6905 100644 --- a/src/rx/LINUX/rx_knet.c +++ b/src/rx/LINUX/rx_knet.c @@ -16,7 +16,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/rx/LINUX/rx_knet.c,v 1.19 2003/07/15 23:16:22 shadow Exp $"); + ("$Header: /cvs/openafs/src/rx/LINUX/rx_knet.c,v 1.20 2004/06/21 20:06:26 shadow Exp $"); #include #ifdef AFS_LINUX22_ENV @@ -37,7 +37,11 @@ rxk_NewSocket(short aport) int code; +#ifdef LINUX_KERNEL_IS_SELINUX + code = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sockp, 0); +#else code = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sockp); +#endif if (code < 0) return NULL; diff --git a/src/rx/SOLARIS/rx_knet.c b/src/rx/SOLARIS/rx_knet.c index 4834c5b26..678e2769f 100644 --- a/src/rx/SOLARIS/rx_knet.c +++ b/src/rx/SOLARIS/rx_knet.c @@ -11,7 +11,7 @@ #include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/rx/SOLARIS/rx_knet.c,v 1.16 2003/07/15 23:16:26 shadow Exp $"); + ("$Header: /cvs/openafs/src/rx/SOLARIS/rx_knet.c,v 1.17 2004/06/24 17:38:34 shadow Exp $"); #ifdef AFS_SUN5_ENV #include "rx/rx_kcommon.h" @@ -52,10 +52,12 @@ int (*sockfs_sosendmsg) (struct sonode *, struct nmsghdr *, struct uio *) = NULL; int (*sockfs_sosetsockopt) (struct sonode *, int, int, void *, int) = NULL; +#ifndef AFS_SUN510_ENV int (*sockfs_sounbind) (struct sonode *, int); void (*sockfs_sockfree) (struct sonode *); +#endif static afs_uint32 myNetAddrs[ADDRSPERSITE]; static int myNetMTUs[ADDRSPERSITE]; @@ -70,6 +72,9 @@ rxi_GetIFInfo() ill_t *ill; ipif_t *ipif; int rxmtu, maxmtu; +#ifdef AFS_SUN510_ENV + ill_walk_context_t ctx; +#endif int mtus[ADDRSPERSITE]; afs_uint32 addrs[ADDRSPERSITE]; @@ -78,7 +83,11 @@ rxi_GetIFInfo() memset(mtus, 0, sizeof(mtus)); memset(addrs, 0, sizeof(addrs)); +#ifdef AFS_SUN510_ENV + for (ill = ILL_START_WALK_ALL(&ctx) ; ill ; ill = ill_next(&ctx, ill)) { +#else for (ill = ill_g_head; ill; ill = ill->ill_next) { +#endif #ifdef AFS_SUN58_ENV /* Make sure this is an IPv4 ILL */ if (ill->ill_isv6) @@ -144,6 +153,9 @@ rxi_FindIfMTU(afs_uint32 addr) afs_uint32 myAddr, netMask; int match_value = 0; int mtu = -1; +#ifdef AFS_SUN510_ENV + ill_walk_context_t ctx; +#endif if (numMyNetAddrs == 0) rxi_GetIFInfo(); @@ -158,7 +170,11 @@ rxi_FindIfMTU(afs_uint32 addr) else netMask = 0; +#ifdef AFS_SUN510_ENV + for (ill = ILL_START_WALK_ALL(&ctx) ; ill ; ill = ill_next(&ctx, ill)) { +#else for (ill = ill_g_head; ill; ill = ill->ill_next) { +#endif #ifdef AFS_SUN58_ENV /* Make sure this is an IPv4 ILL */ if (ill->ill_isv6) @@ -254,6 +270,7 @@ rxk_NewSocket(short aport) return NULL; } } +#ifndef AFS_SUN510_ENV if (sockfs_sounbind == NULL) { sockfs_sounbind = (int (*)())modlookup("sockfs", "sounbind"); if (sockfs_sounbind == NULL) @@ -264,6 +281,7 @@ rxk_NewSocket(short aport) if (sockfs_sockfree == NULL) return NULL; } +#endif accessvp = sockfs_solookup(AF_INET, SOCK_DGRAM, 0, "/dev/udp", &error); if (accessvp == NULL) { @@ -307,6 +325,7 @@ osi_FreeSocket(register struct osi_socket *asocket) struct sockaddr_in taddr; struct iovec dvec; char c; + vnode_t *vp; AFS_STATCNT(osi_FreeSocket); @@ -322,8 +341,14 @@ osi_FreeSocket(register struct osi_socket *asocket) afs_osi_Sleep(&rxk_ListenerPid); } +#ifdef AFS_SUN510_ENV + vp = SOTOV(so); + VOP_CLOSE(vp, FREAD|FWRITE, 1, (offset_t)0, CRED()); + VN_RELE(vp); +#else sockfs_sounbind(so, 0); sockfs_sockfree(so); +#endif return 0; } diff --git a/src/rx/rx.c b/src/rx/rx.c index 6bb49e2dc..6930ee4c1 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -17,7 +17,7 @@ #endif RCSID - ("$Header: /cvs/openafs/src/rx/rx.c,v 1.54 2004/04/18 06:13:51 kolya Exp $"); + ("$Header: /cvs/openafs/src/rx/rx.c,v 1.56 2004/06/02 06:08:01 shadow Exp $"); #ifdef KERNEL #include "afs/sysincludes.h" @@ -3993,7 +3993,8 @@ rxi_AttachServerProc(register struct rx_call *call, MUTEX_ENTER(&rx_stats_mutex); rx_nWaiting--; MUTEX_EXIT(&rx_stats_mutex); - queue_Remove(call); + if (queue_IsOnQueue(call)) + queue_Remove(call); } call->state = RX_STATE_ACTIVE; call->mode = RX_MODE_RECEIVING; @@ -6127,16 +6128,18 @@ MakeDebugCall(osi_socket socket, afs_uint32 remoteAddr, afs_uint16 remotePort, tv.tv_sec = 1; tv.tv_usec = 0; code = select(socket + 1, &imask, 0, 0, &tv); - if (code > 0) { + if (code == 1 && FD_ISSET(socket,&imask)) { /* now receive a packet */ faddrLen = sizeof(struct sockaddr_in); code = recvfrom(socket, tbuffer, sizeof(tbuffer), 0, (struct sockaddr *)&faddr, &faddrLen); - memcpy(&theader, tbuffer, sizeof(struct rx_header)); - if (counter == ntohl(theader.callNumber)) - break; + if (code > 0) { + memcpy(&theader, tbuffer, sizeof(struct rx_header)); + if (counter == ntohl(theader.callNumber)) + break; + } } /* see if we've timed out */ diff --git a/src/rx/rx_clock.c b/src/rx/rx_clock.c index 4d97357b0..75b594a32 100644 --- a/src/rx/rx_clock.c +++ b/src/rx/rx_clock.c @@ -10,19 +10,19 @@ /* Elapsed time package */ /* See rx_clock.h for calling conventions */ +#include #ifdef KERNEL #include "afs/param.h" #else #include #endif -#include #ifdef AFS_SUN59_ENV #include #endif RCSID - ("$Header: /cvs/openafs/src/rx/rx_clock.c,v 1.12 2003/07/15 23:16:09 shadow Exp $"); + ("$Header: /cvs/openafs/src/rx/rx_clock.c,v 1.13 2004/05/15 04:53:30 shadow Exp $"); #ifdef KERNEL #ifndef UKERNEL diff --git a/src/rx/rx_conncache.c b/src/rx/rx_conncache.c index 41a4d997d..e70a9d428 100644 --- a/src/rx/rx_conncache.c +++ b/src/rx/rx_conncache.c @@ -11,15 +11,15 @@ * Implement caching of rx connections. */ +#include #ifdef UKERNEL #include "afs/param.h" #else #include #endif -#include RCSID - ("$Header: /cvs/openafs/src/rx/rx_conncache.c,v 1.8 2003/07/15 23:16:09 shadow Exp $"); + ("$Header: /cvs/openafs/src/rx/rx_conncache.c,v 1.9 2004/05/15 04:53:30 shadow Exp $"); #ifdef UKERNEL #include "afs/sysincludes.h" diff --git a/src/rx/rx_null.c b/src/rx/rx_null.c index e15d82307..ca41daf53 100644 --- a/src/rx/rx_null.c +++ b/src/rx/rx_null.c @@ -7,15 +7,15 @@ * directory or online at http://www.openafs.org/dl/license10.html */ +#include #ifdef KERNEL #include "afs/param.h" #else #include #endif -#include RCSID - ("$Header: /cvs/openafs/src/rx/rx_null.c,v 1.6 2003/07/15 23:16:09 shadow Exp $"); + ("$Header: /cvs/openafs/src/rx/rx_null.c,v 1.7 2004/05/15 04:53:30 shadow Exp $"); #ifdef KERNEL #ifndef UKERNEL diff --git a/src/rx/rx_packet.c b/src/rx/rx_packet.c index cb46a78ea..a24f25e4d 100644 --- a/src/rx/rx_packet.c +++ b/src/rx/rx_packet.c @@ -15,7 +15,7 @@ #endif RCSID - ("$Header: /cvs/openafs/src/rx/rx_packet.c,v 1.33 2003/11/29 21:46:30 jaltman Exp $"); + ("$Header: /cvs/openafs/src/rx/rx_packet.c,v 1.35 2004/06/02 14:50:23 jaltman Exp $"); #ifdef KERNEL #if defined(UKERNEL) @@ -64,6 +64,9 @@ RCSID #if defined(AFS_NT40_ENV) || defined(AFS_DJGPP_ENV) #ifdef AFS_NT40_ENV #include +#ifndef EWOULDBLOCK +#define EWOULDBLOCK WSAEWOULDBLOCK +#endif #else #include #include @@ -826,13 +829,11 @@ rxi_ReadPacket(int socket, register struct rx_packet *p, afs_uint32 * host, if ((nbytes > tlen) || (p->length & 0x8000)) { /* Bogus packet */ if (nbytes > 0) rxi_MorePackets(rx_initSendWindow); -#ifndef AFS_NT40_ENV else if (nbytes < 0 && errno == EWOULDBLOCK) { MUTEX_ENTER(&rx_stats_mutex); rx_stats.noPacketOnRead++; MUTEX_EXIT(&rx_stats_mutex); } -#endif else { MUTEX_ENTER(&rx_stats_mutex); rx_stats.bogusPacketOnRead++; @@ -1154,6 +1155,7 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket, #ifndef RX_ENABLE_LOCKS tstat.waitingForPackets = rx_waitingForPackets; #endif + MUTEX_ENTER(&rx_serverPool_lock); tstat.nFreePackets = htonl(rx_nFreePackets); tstat.callsExecuted = htonl(rxi_nCalls); tstat.packetReclaims = htonl(rx_packetReclaims); @@ -1161,6 +1163,7 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket, tstat.nWaiting = htonl(rx_nWaiting); queue_Count(&rx_idleServerQueue, np, nqe, rx_serverQueueEntry, tstat.idleThreads); + MUTEX_EXIT(&rx_serverPool_lock); tstat.idleThreads = htonl(tstat.idleThreads); tl = sizeof(struct rx_debugStats) - ap->length; if (tl > 0) diff --git a/src/rx/rx_xmit_nt.c b/src/rx/rx_xmit_nt.c index 8dee03af8..04f37cfa6 100644 --- a/src/rx/rx_xmit_nt.c +++ b/src/rx/rx_xmit_nt.c @@ -18,7 +18,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/rx/rx_xmit_nt.c,v 1.6 2003/07/15 23:16:11 shadow Exp $"); + ("$Header: /cvs/openafs/src/rx/rx_xmit_nt.c,v 1.7 2004/06/02 14:50:24 jaltman Exp $"); #if defined(AFS_NT40_ENV) || defined(AFS_DJGPP_ENV) @@ -78,6 +78,14 @@ recvmsg(int socket, struct msghdr *msgP, int flags) /* Accounts for any we didn't copy in to iovecs. */ code -= size; } else { +#ifdef AFS_NT40_ENV + if (code == SOCKET_ERROR) + code = WSAGetLastError(); + if (code == WSAEWOULDBLOCK) + errno = WSAEWOULDBLOCK; + else + errno = EIO; +#endif /* AFS_NT40_ENV */ code = -1; } @@ -125,10 +133,12 @@ sendmsg(int socket, struct msghdr *msgP, int flags) switch (code) { case WSAEINPROGRESS: case WSAENETRESET: - case WSAEWOULDBLOCK: case WSAENOBUFS: errno = 0; break; + case WSAEWOULDBLOCK: + errno = WSAEWOULDBLOCK; + break; default: errno = EIO; break; @@ -145,8 +155,4 @@ sendmsg(int socket, struct msghdr *msgP, int flags) return code; } - - - - #endif /* AFS_NT40_ENV || AFS_DJGPP_ENV */ diff --git a/src/rx/xdr.h b/src/rx/xdr.h index ca18695f9..b13983b12 100644 --- a/src/rx/xdr.h +++ b/src/rx/xdr.h @@ -172,8 +172,12 @@ enum xdr_op { #if 0 typedef bool_t(*xdrproc_t) (); #else +#ifdef AFS_I386_LINUX26_ENV +typedef bool_t(*xdrproc_t) (void *, caddr_t *, u_int); +#else typedef bool_t(*xdrproc_t) (void *, ...); #endif +#endif /* diff --git a/src/rx/xdr_afsuuid.c b/src/rx/xdr_afsuuid.c index aa1fa8ae2..04106554d 100644 --- a/src/rx/xdr_afsuuid.c +++ b/src/rx/xdr_afsuuid.c @@ -11,11 +11,11 @@ * xdr_afsuuid.c, XDR routine for built in afsUUID data type. */ -#include "afs/param.h" #include +#include "afs/param.h" RCSID - ("$Header: /cvs/openafs/src/rx/xdr_afsuuid.c,v 1.7 2003/07/15 23:16:12 shadow Exp $"); + ("$Header: /cvs/openafs/src/rx/xdr_afsuuid.c,v 1.8 2004/05/15 04:53:30 shadow Exp $"); #if defined(KERNEL) && !defined(UKERNEL) #ifdef AFS_LINUX20_ENV diff --git a/src/rx/xdr_rx.c b/src/rx/xdr_rx.c index e968d94d5..0bf95d953 100644 --- a/src/rx/xdr_rx.c +++ b/src/rx/xdr_rx.c @@ -11,15 +11,15 @@ * xdr_rx.c. XDR using RX. */ +#include #ifdef KERNEL #include "afs/param.h" #else #include #endif -#include RCSID - ("$Header: /cvs/openafs/src/rx/xdr_rx.c,v 1.9 2003/07/15 23:16:13 shadow Exp $"); + ("$Header: /cvs/openafs/src/rx/xdr_rx.c,v 1.10 2004/05/15 04:53:30 shadow Exp $"); #ifdef KERNEL #ifndef UKERNEL diff --git a/src/rxkad/rxkad_common.c b/src/rxkad/rxkad_common.c index a571ee540..37441430e 100644 --- a/src/rxkad/rxkad_common.c +++ b/src/rxkad/rxkad_common.c @@ -23,7 +23,7 @@ #define INCLUDE_RXKAD_PRIVATE_DECLS RCSID - ("$Header: /cvs/openafs/src/rxkad/rxkad_common.c,v 1.19 2004/03/10 07:46:34 shadow Exp $"); + ("$Header: /cvs/openafs/src/rxkad/rxkad_common.c,v 1.20 2004/06/23 14:27:44 shadow Exp $"); #ifdef KERNEL #ifndef UKERNEL @@ -526,3 +526,27 @@ rxkad_GetStats(struct rx_securityClass *aobj, struct rx_connection *aconn, } return 0; } + +rxkad_level +rxkad_StringToLevel(char *name) +{ + if (strcmp(name, "clear") == 0) + return rxkad_clear; + if (strcmp(name, "auth") == 0) + return rxkad_auth; + if (strcmp(name, "crypt") == 0) + return rxkad_crypt; + return -1; +} + +char * +rxkad_LevelToString(rxkad_level level) +{ + if (level == rxkad_clear) + return "clear"; + if (level == rxkad_auth) + return "auth"; + if (level == rxkad_crypt) + return "crypt"; + return "unknown"; +} diff --git a/src/rxkad/rxkad_prototypes.h b/src/rxkad/rxkad_prototypes.h index 3dc8930b7..c689ea2d8 100644 --- a/src/rxkad/rxkad_prototypes.h +++ b/src/rxkad/rxkad_prototypes.h @@ -76,6 +76,8 @@ extern int rxkad_PreparePacket(struct rx_securityClass *aobj, extern int rxkad_GetStats(struct rx_securityClass *aobj, struct rx_connection *aconn, struct rx_securityObjectStats *astats); +extern rxkad_level rxkad_StringToLevel(char *string); +extern char *rxkad_LevelToString(rxkad_level level); /* rxkad_errs.c */ diff --git a/src/sys/.cvsignore b/src/sys/.cvsignore index 78c6ce87c..8489fedb0 100644 --- a/src/sys/.cvsignore +++ b/src/sys/.cvsignore @@ -7,3 +7,5 @@ rmtsys.h rmtsys.ss.c rmtsys.xdr.c rmtsysd +afs.exp +afsl.exp diff --git a/src/sys/Makefile.in b/src/sys/Makefile.in index 23033ffb8..4a197c8e0 100644 --- a/src/sys/Makefile.in +++ b/src/sys/Makefile.in @@ -45,7 +45,7 @@ tests: pagsh pagsh.krb fixit iinc idec icreate iopen istat rmtsysd syscall.o: syscall.s case "$(SYS_NAME)" in \ - sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53 | sun4_53 | sun4_52 | sun4_54 | sun4c_54 | sun4m_54 | sun4x_5? | sunx86_5?) \ + sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53 | sun4_53 | sun4_52 | sun4_54 | sun4c_54 | sun4m_54 | sun4x_5? | sun4x_5?? | sunx86_5? | sunx86_5?? ) \ /usr/ccs/lib/cpp ${SFLAGS} ${srcdir}/syscall.s syscall.ss; \ as -o syscall.o syscall.ss; \ $(RM) syscall.ss;; \ diff --git a/src/sys/pioctl_nt.c b/src/sys/pioctl_nt.c index 2784d6a0e..0fd2dcab8 100644 --- a/src/sys/pioctl_nt.c +++ b/src/sys/pioctl_nt.c @@ -11,7 +11,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/sys/pioctl_nt.c,v 1.11 2004/03/05 23:09:36 jaltman Exp $"); + ("$Header: /cvs/openafs/src/sys/pioctl_nt.c,v 1.14 2004/06/04 06:00:38 jaltman Exp $"); #include #include @@ -103,7 +103,7 @@ GetIoctlHandle(char *fileNamep, HANDLE * handlep) { char *drivep; char netbiosName[MAX_NB_NAME_LENGTH]; - char tbuffer[100]; + char tbuffer[256]=""; HANDLE fh; if (fileNamep) { @@ -112,10 +112,47 @@ GetIoctlHandle(char *fileNamep, HANDLE * handlep) tbuffer[0] = *(drivep - 1); tbuffer[1] = ':'; strcpy(tbuffer + 2, SMB_IOCTL_FILENAME); - } else - strcpy(tbuffer, SMB_IOCTL_FILENAME); - } else { - /* No file name specified, use UNC name */ + } else if (fileNamep[0] == fileNamep[1] && + fileNamep[0] == '\\') + { + int count = 0, i = 0; + + while (count < 4 && fileNamep[i]) { + tbuffer[i] = fileNamep[i]; + if ( tbuffer[i++] == '\\' ) + count++; + } + if (tbuffer[i] == 0) + tbuffer[i++] = '\\'; + tbuffer[i] = 0; + strcat(tbuffer, SMB_IOCTL_FILENAME); + } else { + char curdir[256]=""; + + GetCurrentDirectory(sizeof(curdir), curdir); + if ( curdir[1] == ':' ) { + tbuffer[0] = curdir[0]; + tbuffer[1] = ':'; + strcpy(tbuffer + 2, SMB_IOCTL_FILENAME); + } else if (curdir[0] == curdir[1] && + curdir[0] == '\\') + { + int count = 0, i = 0; + + while (count < 4 && curdir[i]) { + tbuffer[i] = curdir[i]; + if ( tbuffer[i++] == '\\' ) + count++; + } + if (tbuffer[i] == 0) + tbuffer[i++] = '\\'; + tbuffer[i] = 0; + strcat(tbuffer, SMB_IOCTL_FILENAME); + } + } + } + if (!tbuffer[0]) { + /* No file name starting with drive colon specified, use UNC name */ lana_GetNetbiosName(netbiosName,LANA_NETBIOS_NAME_FULL); sprintf(tbuffer,"\\\\%s\\all%s",netbiosName,SMB_IOCTL_FILENAME); } @@ -256,11 +293,16 @@ fs_GetFullPath(char *pathp, char *outPathp, long outSize) /* now get the absolute path to the current wdir in this drive */ GetCurrentDirectory(sizeof(tpath), tpath); - strcpy(outPathp, tpath + 2); /* skip drive letter */ + if (tpath[1] == ':') + strcpy(outPathp, tpath + 2); /* skip drive letter */ + else + strcpy(outPathp, tpath); /* copy entire UNC path */ /* if there is a non-null name after the drive, append it */ if (*firstp != 0) { - strcat(outPathp, "\\"); - strcat(outPathp, firstp); + int len = strlen(outPathp); + if (outPathp[len-1] != '\\' && outPathp[len-1] != '/') + strcat(outPathp, "\\"); + strcat(outPathp, firstp); } /* finally, if necessary, switch back to our home drive letter */ diff --git a/src/tbutc/NTMakefile b/src/tbutc/NTMakefile index f8bd9794f..779059455 100644 --- a/src/tbutc/NTMakefile +++ b/src/tbutc/NTMakefile @@ -111,7 +111,7 @@ BUTCLIBS=$(DESTDIR)\lib\afs\afsbudb.lib \ #----------------------------------------------- BUTC $(BUTCEXE): $(BUTCOBJS) $(BUTCLIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) .c.$(OUT)\obj: diff --git a/src/tvolser/.cvsignore b/src/tvolser/.cvsignore new file mode 100644 index 000000000..8aea0ea12 --- /dev/null +++ b/src/tvolser/.cvsignore @@ -0,0 +1,3 @@ +AFS_component_version_number.c +Makefile +volserver diff --git a/src/update/NTMakefile b/src/update/NTMakefile index 9d92ca209..55713835d 100644 --- a/src/update/NTMakefile +++ b/src/update/NTMakefile @@ -42,7 +42,7 @@ USVR_OBJS = \ $(OUT)\upserver.res $(UPSERVER): $(USVR_OBJS) $(LIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) ############################################################################ @@ -57,7 +57,7 @@ UCLNT_OBJS = \ $(OUT)\upclient.res $(UPCLIENT): $(UCLNT_OBJS) $(LIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) ############################################################################ diff --git a/src/update/client.c b/src/update/client.c index f419a4a05..f8f00c13b 100644 --- a/src/update/client.c +++ b/src/update/client.c @@ -11,7 +11,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/update/client.c,v 1.11 2003/07/15 23:17:07 shadow Exp $"); + ("$Header: /cvs/openafs/src/update/client.c,v 1.12 2004/06/23 14:27:46 shadow Exp $"); #include #ifdef AFS_AIX32_ENV @@ -55,6 +55,9 @@ RCSID #include #include #include +#ifdef AFS_AIX_ENV +#include +#endif #include "update.h" #include "global.h" @@ -69,8 +72,7 @@ static int RenameNewFiles(struct filestr *modFiles); static int PathsAreEquivalent(char *path1, char *path2); afs_int32 -GetServer(aname) - char *aname; +GetServer(char *aname) { register struct hostent *th; afs_int32 addr; @@ -98,9 +100,7 @@ osi_audit() #endif int -main(argc, argv) - int argc; - char **argv; +main(int argc, char **argv) { struct rx_connection *conn; struct rx_call *call; @@ -405,10 +405,9 @@ main(argc, argv) } /* returns 1 if the file is upto date else returns 0*/ +/*check the dir case more carefully */ int -IsCompatible(filename, time, length) /*check the dir case more carefully */ - char *filename; - afs_int32 time, length; +IsCompatible(char *filename, afs_int32 time, afs_int32 length) { struct stat status; afs_int32 error; @@ -425,7 +424,7 @@ IsCompatible(filename, time, length) /*check the dir case more carefully */ free(localname); if (error == -1) - return 0; /*a non-existent file, has to be fetched fresh */ + return 0; /*a non-existent file, has to be fetched fresh */ if ((status.st_mode & S_IFMT) == S_IFDIR || ((status.st_mtime == time) && (status.st_size == length))) return (1); @@ -434,10 +433,7 @@ IsCompatible(filename, time, length) /*check the dir case more carefully */ } int -FetchFile(call, remoteFile, localFile, dirFlag) - struct rx_call *call; - char *localFile, *remoteFile; - int dirFlag; +FetchFile(struct rx_call *call, char *remoteFile, char *localFile, int dirFlag) { int fd = -1, error = 0; struct stat status; @@ -473,33 +469,20 @@ FetchFile(call, remoteFile, localFile, dirFlag) int -update_ReceiveFile(fd, call, status) - register int fd; - register struct rx_call *call; - register struct stat *status; +update_ReceiveFile(register int fd, register struct rx_call *call, register struct stat *status) { register char *buffer = (char *)0; afs_int32 length; -#ifdef notdef - XDR xdr; -#endif register int blockSize; afs_int32 error = 0, len; #ifdef AFS_AIX_ENV -#include struct statfs tstatfs; #endif -#ifdef notdef - xdrrx_create(&xdr, call, XDR_DECODE); - if (!xdr_afs_int32(&xdr, &length)) - return UPDATE_ERROR; -#else len = rx_Read(call, &length, sizeof(afs_int32)); length = ntohl(length); if (len != sizeof(afs_int32)) return UPDATE_ERROR; -#endif #ifdef AFS_AIX_ENV /* Unfortunately in AIX valuable fields such as st_blksize are gone from the stat structure!! */ fstatfs(fd, &tstatfs); @@ -585,9 +568,7 @@ PathsAreEquivalent(char *path1, char *path2) * deleted on client site) else it returns 0 */ int -NotOnHost(filename, okhostfiles) - char *filename; - struct filestr *okhostfiles; +NotOnHost(char *filename, struct filestr *okhostfiles) { int i, rc; struct stat status; @@ -663,8 +644,7 @@ RenameNewFiles(struct filestr *modFiles) * and the uid, gid, file mode, access and modification times will be set to * the passed in values. */ -static - int +static int GetFileFromUpServer(struct rx_connection *conn, /* handle for upserver */ char *filename, /* name of file to be fetched */ short uid, short gid, /* uid/gid for fetched file */ diff --git a/src/update/server.c b/src/update/server.c index 084f4e1f0..4ca37f185 100644 --- a/src/update/server.c +++ b/src/update/server.c @@ -11,7 +11,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/update/server.c,v 1.12 2003/12/07 22:49:39 jaltman Exp $"); + ("$Header: /cvs/openafs/src/update/server.c,v 1.13 2004/06/23 14:27:46 shadow Exp $"); #include #ifdef AFS_AIX32_ENV @@ -50,11 +50,13 @@ RCSID #include #include #include +#ifdef AFS_AIX_ENV +#include +#endif #include "update.h" #include "global.h" extern int UPDATE_ExecuteRequest(); -extern rxkad_level StringToLevel(char *name); static int AddObject(char **expPath, char *dir); static int PathInDirectory(char *dir, char *path); @@ -69,8 +71,7 @@ static int Quit(); /* check whether caller is authorized to manage RX statistics */ int -update_rxstat_userok(call) - struct rx_call *call; +update_rxstat_userok(struct rx_call *call) { return afsconf_SuperUser(cdir, call, NULL); } @@ -131,11 +132,8 @@ PathInDirectory(char *dir, char *path) return inDir; } - int -AuthOkay(call, name) - struct rx_call *call; - char *name; +AuthOkay(struct rx_call *call, char *name) { int i; rxkad_level level; @@ -181,9 +179,7 @@ osi_audit() #endif int -main(argc, argv) - int argc; - char *argv[]; +main(int argc, char *argv[]) { struct rx_securityClass *securityObjects[3]; struct rx_service *service; @@ -240,7 +236,7 @@ main(argc, argv) if (argv[a][0] == '-') { /* parse options */ char arg[256]; lcstring(arg, argv[a], sizeof(arg)); - newLevel = StringToLevel(&argv[a][1]); + newLevel = rxkad_StringToLevel(&argv[a][1]); if (newLevel != -1) { level = newLevel; /* set new level */ continue; @@ -317,9 +313,7 @@ main(argc, argv) /* fetch the file name and send it to the remote requester specified by call */ int -UPDATE_FetchFile(call, name) - struct rx_call *call; - char *name; +UPDATE_FetchFile(struct rx_call *call, char *name) { int fd = -1; int error = 0; @@ -352,9 +346,7 @@ UPDATE_FetchFile(call, name) /* fetch dir info about directory name and send it to remote host associated with call. */ int -UPDATE_FetchInfo(call, name) - struct rx_call *call; - char *name; +UPDATE_FetchInfo(struct rx_call *call, char *name) { int error = 0; struct stat status; @@ -395,19 +387,12 @@ Quit(msg, a, b) } int -update_SendFile(fd, call, status) - register int fd; - register struct rx_call *call; - register struct stat *status; +update_SendFile(register int fd, register struct rx_call *call, register struct stat *status) { char *buffer = (char *)0; int blockSize; afs_int32 length, tlen; -#ifdef notdef - XDR xdr; -#endif #ifdef AFS_AIX_ENV -#include struct statfs tstatfs; #endif @@ -427,14 +412,8 @@ update_SendFile(fd, call, status) printf("malloc failed\n"); return UPDATE_ERROR; } -#ifdef notdef - xdrrx_create(&xdr, call, XDR_ENCODE); - if (!xdr_afs_int32(&xdr, &length)) - error = UPDATE_ERROR; -#else tlen = htonl(length); rx_Write(call, &tlen, sizeof(afs_int32)); /* send length on fetch */ -#endif while (!error && length) { register int nbytes = (length > blockSize ? blockSize : length); nbytes = read(fd, buffer, nbytes); @@ -456,11 +435,10 @@ update_SendFile(fd, call, status) /* Enumerate dir (name) and write dir entry info into temp file. */ int -update_SendDirInfo(name, call, status, origDir) - char *name; /* Name of dir to enumerate */ - register struct rx_call *call; /* rx call */ - register struct stat *status; /* stat struct for dir */ - char *origDir; /* orig name of dir before being localized */ +update_SendDirInfo(char *name, /* Name of dir to enumerate */ + register struct rx_call *call, /* rx call */ + register struct stat *status, /* stat struct for dir */ + char *origDir) /* orig name of dir before being localized */ { DIR *dirp; struct dirent *dp; diff --git a/src/update/utils.c b/src/update/utils.c index 37d7f7fd4..bdf291853 100644 --- a/src/update/utils.c +++ b/src/update/utils.c @@ -11,7 +11,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/update/utils.c,v 1.9 2003/07/15 23:17:07 shadow Exp $"); + ("$Header: /cvs/openafs/src/update/utils.c,v 1.10 2004/06/23 14:27:46 shadow Exp $"); #include #include @@ -35,9 +35,7 @@ RCSID #include int -AddToList(ah, aname) - struct filestr **ah; - char *aname; +AddToList(struct filestr **ah, char *aname) { register struct filestr *tf; tf = (struct filestr *)malloc(sizeof(struct filestr)); @@ -49,8 +47,7 @@ AddToList(ah, aname) } int -ZapList(ah) - struct filestr **ah; +ZapList(struct filestr **ah) { register struct filestr *tf, *nf; for (tf = *ah; tf; tf = nf) { @@ -61,19 +58,3 @@ ZapList(ah) *ah = NULL; return 0; } - -/* StringToLevel - converts the name of an rxkad security level to a integer - * suitable for calling rxkad_New*SecurityObject. */ - -rxkad_level -StringToLevel(name) - char *name; -{ - if (strcmp(name, "clear") == 0) - return rxkad_clear; - if (strcmp(name, "auth") == 0) - return rxkad_auth; - if (strcmp(name, "crypt") == 0) - return rxkad_crypt; - return -1; -} diff --git a/src/venus/Makefile.in b/src/venus/Makefile.in index c0bddbba1..105e209a5 100644 --- a/src/venus/Makefile.in +++ b/src/venus/Makefile.in @@ -41,14 +41,7 @@ CMLIBS=${TOP_LIBDIR}/libsys.a \ LIBS = ${FSLIBS} -# -# In order not to rebuild kdump* again and again we use -# AFS_SYSNAME dependent targets (generated by configure) -# -KDUMP=@KDUMP@ -KDUMP64=@KDUMP64@ - -all: fs up fstrace cmdebug livesys ${KDUMP} ${KDUMP64} +all: fs up fstrace cmdebug livesys kdump-build # # Build targets @@ -73,43 +66,6 @@ ${DEST}/etc/fstrace: fstrace ${DEST}/bin/cmdebug: cmdebug ${INSTALL} -s $? $@ -${DEST}/etc/${KDUMP}: ${KDUMP} - -set -x; \ - case ${SYS_NAME} in \ - sgi_6? ) \ - ${INSTALLex} -f ${srcdir}/kdump.sh.sgi_ipnos ${DEST}/etc/kdump; \ - ln -fs kdump ${DEST}/etc/kdump32; \ - ln -fs kdump.IP20 ${DEST}/etc/kdump.IP22; \ - ln -fs kdump.IP20 ${DEST}/etc/kdump.IP32; \ - for f in kdump.IP??; \ - do ${INSTALL} -s $$f ${DEST}/etc/$$f || exit $$? ; \ - done ;; \ - sun*_5[789] ) \ - ${INSTALLex} -f ${srcdir}/kdump.sh.solaris7 ${DEST}/etc/kdump; \ - ${INSTALL} -s -f $? $@;; \ - *alpha_linux* ) \ - ${INSTALLex} -f ${srcdir}/kdump.sh.linux ${DEST}/etc/kdump; \ - ${INSTALL} -s kdump-alpha_linux-${LINUX_VERSION} $@ ;; \ - *linux* ) \ - ${INSTALLex} -f ${srcdir}/kdump.sh.linux ${DEST}/etc/kdump; \ - ${INSTALL} -s kdump-linux-${LINUX_VERSION} $@ ;; \ - hp_ux11* ) \ - ${INSTALLex} -f ${srcdir}/kdump.sh.hp_ux11 ${DEST}/etc/kdump; \ - ${INSTALL} -s -f $? $@;; \ - *nbsd*) \ - ;; \ - *) \ - ${INSTALL} -s $? $@ ;; \ - esac - -${DEST}/etc/${KDUMP64}: ${KDUMP64} - -set -x; \ - case ${SYS_NAME} in \ - sun4x_5[789] | hp_ux11* |sunx86_5[789] ) \ - ${INSTALL} -s $? $@ ;;\ - * ) \ - echo skipping kdump64 for ${SYS_NAME} ;; \ - esac up.o: up.c AFS_component_version_number.c @@ -167,43 +123,70 @@ cmdebug.o: cmdebug.c ${INCLS} AFS_component_version_number.c cmdebug: cmdebug.o ${CMLIBS} $(CC) -o cmdebug cmdebug.o ${CFLAGS} ${CMLIBS} ${XLIBS} + + # # Kernel info dumper - these are done with submakes so that # the build process does not attempt to rebuild them every time it runs. # -# *linux* - Builds kdump-X.Y.Z according to kernel version -kdump-linux-@LINUX_VERSION@.o: kdump.c ${INCLS} AFS_component_version_number.c - ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${LINUX_KERNEL_PATH}/include -I${TOP_INCDIR}/afs \ - -I${TOP_OBJDIR}/src \ - -I${TOP_OBJDIR}/src/afs/${MKAFS_OSTYPE} \ - -I${TOP_OBJDIR}/src/config -I${TOP_OBJDIR}/src/libafs/afs \ - -I${TOP_SRCDIR} -I${TOP_SRCDIR}/afs/${MKAFS_OSTYPE} \ - -I${TOP_INCDIR} ${XCFLAGS} -o kdump-linux-${LINUX_VERSION}.o \ - -c ${srcdir}/kdump.c +# +# Branching target, run the actual build depending on sysname +# +kdump-build: kdump.c ${INCLS} AFS_component_version_number.c + $(MAKE) kdump kdump64 + touch kdump-build -kdump-linux-@LINUX_VERSION@: kdump-linux-@LINUX_VERSION@.o - ${CC} ${KERN_DBG} ${KERN_OPTMZ} -o kdump-linux-${LINUX_VERSION} kdump-linux-${LINUX_VERSION}.o \ - ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS} +# +# Build targets - one for each type of kdump build process we have +# +kdump: kdump.o + -set -x; \ + case ${SYS_NAME} in \ + sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53 | sun4_53 | sun4_54 | sun4c_54 | sun4m_54 | sunx86_5? ) \ + ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a /usr/lib/libkvm.a -lelf ${XLIBS} ;; \ + sun*_5? | sun*_5?? ) \ + ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBELFA} ${XLIBKVM} ${XLIBS} ;; \ + sgi_6? ) \ + for f in ../libafs/STATIC.IP*/CPU_KDEFS; \ + do IP=`expr "$$f" : '../libafs/STATIC.\(IP..\)'`; \ + CPU_KDEFS=`sed 's/-mips.//' $$f`; \ + echo IP = $$IP; \ + echo CPU_KDEFS = $$CPU_KDEFS; \ + case $$CPU_KDEFS in \ + *-64*) ${CC} ${XCFLAGS64} \ + $$CPU_KDEFS \ + -o kdump.$$IP kdump.$$IP.o \ + ${TOP_LIBDIR}/libcmd64.a -lelf \ + ;; \ + *) ${CC} ${XCFLAGS} \ + $$CPU_KDEFS \ + -o kdump.$$IP kdump.$$IP.o \ + ${TOP_LIBDIR}/libcmd.a -lelf \ + ;; \ + esac || exit $$? ; \ + done ;; \ + *alpha_linux* ) \ + $(MAKE) kdump-alpha_linux-@LINUX_VERSION@ ;; \ + *linux* ) \ + $(MAKE) kdump-linux-@LINUX_VERSION@ ;; \ + alpha_osf1 | alpha_osf20 | alpha_osf30 | alpha_osf32 | alpha_osf32c | alpha_dux??) \ + ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS} -ll -lmld;; \ + ncrx86_* ) ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a -lelf ${XLIBS} ;; \ + *nbsd*) touch kdump ;; \ + * ) ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS} ;; \ + esac -# *alpha_linux* - Builds kdump-X.Y.Z according to kernel version -kdump-alpha_linux-@LINUX_VERSION@.o: kdump.c ${INCLS} AFS_component_version_number.c - ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${LINUX_KERNEL_PATH}/include -I${TOP_INCDIR}/afs \ - -I${TOP_OBJDIR}/src \ - -I${TOP_OBJDIR}/src/afs/${MKAFS_OSTYPE} \ - -I${TOP_OBJDIR}/src/config -I${TOP_OBJDIR}/src/libafs/afs \ - -I${TOP_SRCDIR} -I${TOP_SRCDIR}/afs/${MKAFS_OSTYPE} \ - -I${TOP_INCDIR} ${XCFLAGS} -mno-fp-regs -ffixed-8 \ - -o kdump-alpha_linux-${LINUX_VERSION}.o -c ${srcdir}/kdump.c ;; \ +kdump64: + -set -x; \ + case ${SYS_NAME} in \ + sun4x_5[789] | hp_ux11* |sunx86_5[789] ) \ + $(MAKE) kdump64.o ; \ + ${CC} ${XCFLAGS64} -o kdump64 kdump64.o ${TOP_LIBDIR}/libcmd64.a ${XLIBELFA} ${XLIBKVM} ${XLIBS} ;; \ + esac -kdump-alpha_linux-@LINUX_VERSION@: kdump-alpha_linux-@LINUX_VERSION@.o - ${CC} ${KERN_DBG} ${KERN_OPTMZ} -o kdump-alpha_linux-${LINUX_VERSION} kdump-alpha_linux-${LINUX_VERSION}.o \ - ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS} -# -# Default target -# -${KDUMP}.o: kdump.c ${INCLS} AFS_component_version_number.c +kdump.o: kdump.c ${INCLS} AFS_component_version_number.c -set -x; \ case ${SYS_NAME} in \ alpha_linux* ) \ @@ -239,61 +222,85 @@ ${KDUMP}.o: kdump.c ${INCLS} AFS_component_version_number.c *nbsd*) \ touch kdump.o ;; \ *) \ - ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${TOP_SRCDIR} -I${TOP_INCDIR}/afs -I${TOP_OBJDIR}/src/config -I${TOP_INCDIR} ${XCFLAGS} -o ${KDUMP}.o -c ${srcdir}/kdump.c ;; \ + ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${TOP_SRCDIR} -I${TOP_INCDIR}/afs \ + -I${TOP_OBJDIR}/src/config -I${TOP_OBJDIR}/src -I${TOP_INCDIR} ${XCFLAGS} \ + -o kdump.o -c ${srcdir}/kdump.c ;; \ esac ; -${KDUMP64}.o : kdump.c ${INCLS} AFS_component_version_number.c +kdump64.o : kdump.c ${INCLS} AFS_component_version_number.c -set -x; \ case ${SYS_NAME} in \ sun4x_5[789] | hp_ux11* |sunx86_5[789] ) \ - ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${TOP_SRCDIR} -I${TOP_INCDIR}/afs -I${TOP_OBJDIR}/src/config -I${TOP_INCDIR} ${XCFLAGS64} -o ${KDUMP64}.o -c ${srcdir}/kdump.c ;; \ + ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${TOP_SRCDIR} -I${TOP_INCDIR}/afs \ + -I${TOP_OBJDIR}/src/config -I${TOP_OBJDIR}/src -I${TOP_INCDIR} ${XCFLAGS64} \ + -o kdump64.o -c ${srcdir}/kdump.c ;; \ esac -${KDUMP}: ${KDUMP}.o +# *linux* - Builds kdump-X.Y.Z according to kernel version +kdump-linux-@LINUX_VERSION@.o: kdump.c ${INCLS} AFS_component_version_number.c + ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${LINUX_KERNEL_PATH}/include -I${TOP_INCDIR}/afs \ + -I${TOP_OBJDIR}/src \ + -I${TOP_OBJDIR}/src/afs/${MKAFS_OSTYPE} \ + -I${TOP_OBJDIR}/src/config -I${TOP_OBJDIR}/src/libafs/afs \ + -I${TOP_SRCDIR} -I${TOP_SRCDIR}/afs/${MKAFS_OSTYPE} \ + -I${TOP_INCDIR} ${XCFLAGS} -o kdump-linux-${LINUX_VERSION}.o \ + -c ${srcdir}/kdump.c + +kdump-linux-@LINUX_VERSION@: kdump-linux-@LINUX_VERSION@.o + ${CC} ${KERN_DBG} ${KERN_OPTMZ} -o kdump-linux-${LINUX_VERSION} kdump-linux-${LINUX_VERSION}.o \ + ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS} + +# *alpha_linux* - Builds kdump-X.Y.Z according to kernel version +kdump-alpha_linux-@LINUX_VERSION@.o: kdump.c ${INCLS} AFS_component_version_number.c + ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${LINUX_KERNEL_PATH}/include -I${TOP_INCDIR}/afs \ + -I${TOP_OBJDIR}/src \ + -I${TOP_OBJDIR}/src/afs/${MKAFS_OSTYPE} \ + -I${TOP_OBJDIR}/src/config -I${TOP_OBJDIR}/src/libafs/afs \ + -I${TOP_SRCDIR} -I${TOP_SRCDIR}/afs/${MKAFS_OSTYPE} \ + -I${TOP_INCDIR} ${XCFLAGS} -mno-fp-regs -ffixed-8 \ + -o kdump-alpha_linux-${LINUX_VERSION}.o -c ${srcdir}/kdump.c ;; \ + +kdump-alpha_linux-@LINUX_VERSION@: kdump-alpha_linux-@LINUX_VERSION@.o + ${CC} ${KERN_DBG} ${KERN_OPTMZ} -o kdump-alpha_linux-${LINUX_VERSION} kdump-alpha_linux-${LINUX_VERSION}.o \ + ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS} + +# +# kdump install targets +# +${DEST}/etc/kdump: kdump-build -set -x; \ case ${SYS_NAME} in \ - sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53 | sun4_53 | sun4_54 | sun4c_54 | sun4m_54 | sunx86_5? ) \ - ${CC} -o ${KDUMP} ${KDUMP}.o ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a /usr/lib/libkvm.a -lelf ${XLIBS} ;; \ - sun*_5? ) \ - ${CC} -o ${KDUMP} ${KDUMP}.o ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBELFA} ${XLIBKVM} ${XLIBS} ;; \ sgi_6? ) \ - for f in ../libafs/STATIC.IP*/CPU_KDEFS; \ - do IP=`expr "$$f" : '../libafs/STATIC.\(IP..\)'`; \ - CPU_KDEFS=`sed 's/-mips.//' $$f`; \ - echo IP = $$IP; \ - echo CPU_KDEFS = $$CPU_KDEFS; \ - case $$CPU_KDEFS in \ - *-64*) ${CC} ${XCFLAGS64} \ - $$CPU_KDEFS \ - -o kdump.$$IP kdump.$$IP.o \ - ${TOP_LIBDIR}/libcmd64.a -lelf \ - ;; \ - *) ${CC} ${XCFLAGS} \ - $$CPU_KDEFS \ - -o kdump.$$IP kdump.$$IP.o \ - ${TOP_LIBDIR}/libcmd.a -lelf \ - ;; \ - esac || exit $$? ; \ + ${INSTALLex} -f ${srcdir}/kdump.sh.sgi_ipnos ${DEST}/etc/kdump; \ + ln -fs kdump ${DEST}/etc/kdump32; \ + ln -fs kdump.IP20 ${DEST}/etc/kdump.IP22; \ + ln -fs kdump.IP20 ${DEST}/etc/kdump.IP32; \ + for f in kdump.IP??; \ + do ${INSTALL} -s $$f ${DEST}/etc/$$f || exit $$? ; \ done ;; \ + sun*_5[789] ) \ + ${INSTALLex} -f ${srcdir}/kdump.sh.solaris7 ${DEST}/etc/kdump; \ + ${INSTALL} -s -f $? $@;; \ *alpha_linux* ) \ - $(MAKE) kdump-alpha_linux-@LINUX_VERSION@ ;; \ + ${INSTALLex} -f ${srcdir}/kdump.sh.linux ${DEST}/etc/kdump; \ + ${INSTALL} -s kdump-alpha_linux-${LINUX_VERSION} $@ ;; \ *linux* ) \ - $(MAKE) kdump-linux-@LINUX_VERSION@ ;; \ - alpha_osf1 | alpha_osf20 | alpha_osf30 | alpha_osf32 | alpha_osf32c | alpha_dux??) \ - ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS} -ll -lmld;; \ - ncrx86_* ) ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a -lelf ${XLIBS} ;; \ - *nbsd*) touch kdump ;; \ - * ) ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS} ;; \ + ${INSTALLex} -f ${srcdir}/kdump.sh.linux ${DEST}/etc/kdump; \ + ${INSTALL} -s kdump-linux-${LINUX_VERSION} $@ ;; \ + hp_ux11* ) \ + ${INSTALLex} -f ${srcdir}/kdump.sh.hp_ux11 ${DEST}/etc/kdump; \ + ${INSTALL} -s -f $? $@;; \ + *nbsd*) \ + ;; \ + *) \ + ${INSTALL} -s $? $@ ;; \ esac -## kdump to read from 64 bit kernel dumps +${DEST}/etc/kdump64: kdump-build + if [ -f kdump64 ]; then \ + ${INSTALL} -s kdump64 $@; \ + fi -${KDUMP64}: ${KDUMP64}.o - -set -x; \ - case ${SYS_NAME} in \ - sun4x_5[789] | hp_ux11* |sunx86_5[789] ) \ - ${CC} ${XCFLAGS64} -o ${KDUMP64} ${KDUMP64}.o ${TOP_LIBDIR}/libcmd64.a ${XLIBELFA} ${XLIBKVM} ${XLIBS} ;; \ - esac # # Install targets @@ -305,15 +312,15 @@ install: \ ${DESTDIR}${bindir}/up \ ${DESTDIR}${sbindir}/fstrace \ ${DESTDIR}${bindir}/cmdebug \ - ${DESTDIR}${sbindir}/${KDUMP} \ - ${DESTDIR}${sbindir}/${KDUMP64} + ${DESTDIR}${sbindir}/kdump \ + ${DESTDIR}${sbindir}/kdump64 # # Misc targets # clean: - $(RM) -f *.o *.a up fs kdump-* kdump kdump64 core cmdebug AFS_component_version_number.c fstrace gcpags + $(RM) -f *.o *.a up fs kdump-* kdump kdump64 core cmdebug AFS_component_version_number.c fstrace gcpags livesys test: cd test; $(MAKE) @@ -338,7 +345,7 @@ ${DESTDIR}${sbindir}/fstrace: fstrace ${DESTDIR}${bindir}/cmdebug: cmdebug ${INSTALL} -s $? $@ -${DESTDIR}${sbindir}/${KDUMP}: ${KDUMP} +${DESTDIR}${sbindir}/kdump: kdump-build -set -x; \ case ${SYS_NAME} in \ sgi_6? ) \ @@ -362,14 +369,10 @@ ${DESTDIR}${sbindir}/${KDUMP}: ${KDUMP} ${INSTALL} -s $? $@ ;; \ esac -${DESTDIR}${sbindir}/kdump64: kdump64 - -set -x; \ - case ${SYS_NAME} in \ - sun4x_5[789] | hp_ux11* ) \ - ${INSTALL} -s $? $@ ;;\ - * ) \ - echo skipping kdump64 for ${SYS_NAME} ;; \ - esac +${DESTDIR}${sbindir}/kdump64: kdump-build + if [ -f kdump64 ]; then \ + ${INSTALL} -s kdump64 $@; \ + fi dest: \ ${DEST}/bin/fs \ @@ -378,6 +381,6 @@ dest: \ ${DEST}/bin/up \ ${DEST}/etc/fstrace \ ${DEST}/bin/cmdebug \ - ${DEST}/etc/${KDUMP} \ - ${DEST}/etc/${KDUMP64} + ${DEST}/etc/kdump \ + ${DEST}/etc/kdump64 diff --git a/src/venus/fs.c b/src/venus/fs.c index e72171350..89143d6f9 100644 --- a/src/venus/fs.c +++ b/src/venus/fs.c @@ -11,7 +11,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/venus/fs.c,v 1.23 2004/04/18 06:09:49 kolya Exp $"); + ("$Header: /cvs/openafs/src/venus/fs.c,v 1.24 2004/06/02 06:57:37 shadow Exp $"); #include #include @@ -2075,6 +2075,45 @@ ListAliasesCmd(struct cmd_syndesc *as) return 0; } +static int +CallBackRxConnCmd(struct cmd_syndesc *as) +{ + afs_int32 code; + struct ViceIoctl blob; + struct cmd_item *ti; + afs_int32 hostAddr; + struct hostent *thp; + char *tp; + int setp; + + ti = as->parms[0].items; + setp = 1; + if (ti) { + thp = hostutil_GetHostByName(ti->data); + if (!thp) { + fprintf(stderr, "host %s not found in host table.\n", ti->data); + return 1; + } + else memcpy(&hostAddr, thp->h_addr, sizeof(afs_int32)); + } else { + hostAddr = 0; /* means don't set host */ + setp = 0; /* aren't setting host */ + } + + /* now do operation */ + blob.in_size = sizeof(afs_int32); + blob.out_size = sizeof(afs_int32); + blob.in = (char *) &hostAddr; + blob.out = (char *) &hostAddr; + + code = pioctl(0, VIOC_CBADDR, &blob, 1); + if (code < 0) { + Die(errno, 0); + return 1; + } + return 0; +} + static int NewCellCmd(struct cmd_syndesc *as) { @@ -3417,6 +3456,9 @@ defect 3069 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("setcbaddr", CallBackRxConnCmd, 0, "configure callback connection address"); + cmd_AddParm(ts, "-addr", CMD_SINGLE, CMD_OPTIONAL, "host name or address"); + code = cmd_Dispatch(argc, argv); if (rxInitDone) rx_Finalize(); @@ -3773,3 +3815,4 @@ RxStatPeerCmd(struct cmd_syndesc *as) return 0; } + diff --git a/src/vfsck/setup.c b/src/vfsck/setup.c index a1f660e2b..76b3cd46d 100644 --- a/src/vfsck/setup.c +++ b/src/vfsck/setup.c @@ -19,7 +19,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/vfsck/setup.c,v 1.9 2003/07/15 23:17:27 shadow Exp $"); + ("$Header: /cvs/openafs/src/vfsck/setup.c,v 1.10 2004/06/24 17:38:39 shadow Exp $"); #include #define VICE @@ -380,6 +380,7 @@ setup(dev) return (-1); #endif #ifdef AFS_NEWCG_ENV +# ifndef AFS_SUN510_ENV if (sblock.fs_interleave < 1) { pwarn("IMPOSSIBLE INTERLEAVE=%d IN SUPERBLOCK", sblock.fs_interleave); sblock.fs_interleave = 1; @@ -390,6 +391,7 @@ setup(dev) dirty(&asblk); } } +# endif /* AFS_SUN510_ENV */ #endif /* AFS_NEWCG_ENV */ #ifdef AFS_NEWCG_ENV if (sblock.fs_npsect < sblock.fs_nsect) { @@ -471,7 +473,9 @@ setup(dev) #if defined(AFS_SUN_ENV) && !defined(AFS_SUN3_ENV) #ifdef AFS_SUN5_ENV sblock.fs_npsect = 0; +# ifndef AFS_SUN510_ENV sblock.fs_interleave = 0; +# endif sblock.fs_state = FSOKAY - sblock.fs_time; /* make mountable */ #else fs_set_state(&sblock, FSOKAY - sblock.fs_time); @@ -739,7 +743,9 @@ readsb(listerr) */ altsblock.fs_fsbtodb = sblock.fs_fsbtodb; #ifdef AFS_NEWCG_ENV +# ifndef AFS_SUN510_ENV altsblock.fs_interleave = sblock.fs_interleave; +# endif altsblock.fs_npsect = sblock.fs_npsect; altsblock.fs_nrpos = sblock.fs_nrpos; #endif /* AFS_NEWCG_ENV */ diff --git a/src/viced/afsfileprocs.c b/src/viced/afsfileprocs.c index 108f0012c..9b9dec575 100644 --- a/src/viced/afsfileprocs.c +++ b/src/viced/afsfileprocs.c @@ -29,7 +29,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/viced/afsfileprocs.c,v 1.78 2004/04/13 20:41:11 kenh Exp $"); + ("$Header: /cvs/openafs/src/viced/afsfileprocs.c,v 1.81 2004/06/02 08:23:39 shadow Exp $"); #include #include @@ -7225,6 +7225,82 @@ init_sys_error_to_et(void) sys2et[EMEDIUMTYPE] = UAEMEDIUMTYPE; } +afs_int32 +SRXAFS_CallBackRxConnAddr (struct rx_call * acall, afs_int32 *addr) +{ + Error errorCode = 0; + struct host *thost; + struct client *tclient; + static struct rx_securityClass *sc = 0; + int i,j; + struct rx_connection *tcon; + struct rx_connection *conn; + + if (errorCode = CallPreamble(acall, ACTIVECALL, &tcon)) + goto Bad_CallBackRxConnAddr1; + +#ifndef __EXPERIMENTAL_CALLBACK_CONN_MOVING + errorCode = 1; +#else + + H_LOCK + tclient = h_FindClient_r(tcon); + thost = tclient->host; + + /* nothing more can be done */ + if ( !thost->interface ) + goto Bad_CallBackRxConnAddr; + + assert(thost->interface->numberOfInterfaces > 0 ); + + /* the only address is the primary interface */ + /* can't change when there's only 1 address, anyway */ + if ( thost->interface->numberOfInterfaces == 1 ) + goto Bad_CallBackRxConnAddr; + + /* initialise a security object only once */ + if ( !sc ) + sc = (struct rx_securityClass *) rxnull_NewClientSecurityObject(); + + for ( i=0; i < thost->interface->numberOfInterfaces; i++) + { + if ( *addr == thost->interface->addr[i] ) { + break; + } + } + + if ( *addr != thost->interface->addr[i] ) + goto Bad_CallBackRxConnAddr; + + conn = rx_NewConnection (thost->interface->addr[i], + thost->port, 1, sc, 0); + rx_SetConnDeadTime(conn, 2); + rx_SetConnHardDeadTime(conn, AFS_HARDDEADTIME); + H_UNLOCK + errorCode = RXAFSCB_Probe(conn); + H_LOCK + if (!errorCode) { + if ( thost->callback_rxcon ) + rx_DestroyConnection(thost->callback_rxcon); + thost->callback_rxcon = conn; + thost->host = addr; + rx_SetConnDeadTime(thost->callback_rxcon, 50); + rx_SetConnHardDeadTime(thost->callback_rxcon, AFS_HARDDEADTIME); + H_UNLOCK; + errorCode = CallPostamble(tcon, errorCode); + return errorCode; + } else { + rx_DestroyConnection(conn); + } +#endif + + Bad_CallBackRxConnAddr: + H_UNLOCK; + errorCode = CallPostamble(tcon, errorCode); + Bad_CallBackRxConnAddr1: + return errorCode; /* failure */ +} + afs_int32 sys_error_to_et(afs_int32 in) { diff --git a/src/vlserver/NTMakefile b/src/vlserver/NTMakefile index b0dfcb109..86f6a3e0d 100644 --- a/src/vlserver/NTMakefile +++ b/src/vlserver/NTMakefile @@ -89,7 +89,7 @@ VLSERVER_EXECLIBS = \ $(VLSERVER): $(VLSERVER_EXEOBJS) $(LIBFILE) $(VLSERVER_EXECLIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) ############################################################################ @@ -135,7 +135,7 @@ VLCLIENT_LIBS = \ $(DESTDIR)\lib\afs\afspioctl.lib $(OUT)\vlclient.exe: $(OUT)\vlclient.obj $(LIBFILE) $(VLSERVER_EXECLIBS) $(VLCLIENT_LIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib ############################################################################ diff --git a/src/vol/vnode.c b/src/vol/vnode.c index 1bfde891d..d1d427f57 100644 --- a/src/vol/vnode.c +++ b/src/vol/vnode.c @@ -17,7 +17,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/vol/vnode.c,v 1.18 2003/11/29 21:38:05 jaltman Exp $"); + ("$Header: /cvs/openafs/src/vol/vnode.c,v 1.19 2004/06/23 14:27:48 shadow Exp $"); #include #include @@ -103,6 +103,7 @@ void StickOnLruChain_r(register Vnode * vnp, #define THELOGSIZE 5120 static afs_int32 theLog[THELOGSIZE]; static afs_int32 vnLogPtr = 0; +void VNLog(aop, anparms, av1, av2, av3, av4) afs_int32 aop, anparms; afs_int32 av1, av2, av3, av4; diff --git a/src/vol/vol-info.c b/src/vol/vol-info.c index 81839e62f..482e6a453 100644 --- a/src/vol/vol-info.c +++ b/src/vol/vol-info.c @@ -18,7 +18,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/vol/vol-info.c,v 1.16 2003/11/29 21:38:05 jaltman Exp $"); + ("$Header: /cvs/openafs/src/vol/vol-info.c,v 1.18 2004/06/23 14:27:48 shadow Exp $"); #include #include @@ -78,6 +78,7 @@ int online = 0; int dheader = 0; int dsizeOnly = 0, totvolsize = 0, Vauxsize = 0, Vdiskused = 0, Vvnodesize = 0; +int Vvnodesize_k = 0, Vauxsize_k = 0; int Totvolsize = 0, TVauxsize = 0, TVdiskused = 0, TVvnodesize = 0; int Stotvolsize = 0, SVauxsize = 0, SVdiskused = 0, SVvnodesize = 0; int fixheader = 0, saveinodes = 0, orphaned = 0; @@ -580,6 +581,7 @@ HandleVolume(struct DiskPartition *dp, char *name) } #endif Vauxsize = size; + Vauxsize_k = size / 1024; } close(fd); vp = AttachVolume(dp, name, &header); @@ -602,19 +604,16 @@ HandleVolume(struct DiskPartition *dp, char *name) PrintVnodes(vp, vSmall); } if (dsizeOnly) { - Vauxsize = Vauxsize / 1024; - Vvnodesize = Vvnodesize / 1024; - totvolsize = Vauxsize + Vvnodesize; + totvolsize = Vauxsize_k + Vvnodesize_k; if (saveinodes) printf ("Volume-Id\t Volsize Auxsize Inodesize AVolsize SizeDiff (VolName)\n"); - - printf("%u\t%9d%9d%10d%10d%9d\t%24s\n", V_id(vp), Vdiskused, Vauxsize, - Vvnodesize, totvolsize, totvolsize - Vdiskused, V_name(vp)); + printf("%u\t%9d%9d%10d%10d%9d\t%24s\n", V_id(vp), Vdiskused, Vauxsize_k, + Vvnodesize_k, totvolsize, totvolsize - Vdiskused, V_name(vp)); } } - +int main(int argc, char **argv) { register struct cmd_syndesc *ts; @@ -880,6 +879,7 @@ PrintVnode(int offset, VnodeDiskObject * vnode, VnodeId vnodeNumber, VNDISK_GET_LEN(fileLength, vnode); Vvnodesize += fileLength; + Vvnodesize_k += fileLength / 1024; if (dsizeOnly) return; if (orphaned && (fileLength == 0 || vnode->parent || !offset)) diff --git a/src/vol/vol-salvage.c b/src/vol/vol-salvage.c index fc3ddc890..91b9e1468 100644 --- a/src/vol/vol-salvage.c +++ b/src/vol/vol-salvage.c @@ -92,7 +92,7 @@ Vnodes with 0 inode pointers in RW volumes are now deleted. #include RCSID - ("$Header: /cvs/openafs/src/vol/vol-salvage.c,v 1.40 2003/12/07 22:49:43 jaltman Exp $"); + ("$Header: /cvs/openafs/src/vol/vol-salvage.c,v 1.41 2004/05/15 06:11:40 shadow Exp $"); #include #include @@ -864,7 +864,12 @@ ObtainSalvageLock(void) #else salvageLock = afs_open(AFSDIR_SERVER_SLVGLOCK_FILEPATH, O_CREAT | O_RDWR, 0666); - assert(salvageLock >= 0); + if (salvageLock < 0) { + fprintf(stderr, + "salvager: can't open salvage lock file %s, aborting\n", + AFSDIR_SERVER_SLVGLOCK_FILEPATH); + Exit(1); + } #ifdef AFS_DARWIN_ENV if (flock(salvageLock, LOCK_EX) == -1) { #else diff --git a/src/volser/.cvsignore b/src/volser/.cvsignore index 8d0ac8660..4d410a409 100644 --- a/src/volser/.cvsignore +++ b/src/volser/.cvsignore @@ -9,3 +9,4 @@ volint.xdr.c volser.h volserver vos +voldump diff --git a/src/volser/NTMakefile b/src/volser/NTMakefile index ff0e91446..e86eb8d6a 100644 --- a/src/volser/NTMakefile +++ b/src/volser/NTMakefile @@ -93,7 +93,7 @@ VOLSERVER_EXELIBS = \ $(DESTDIR)\lib\afs\afsprocmgmt.lib $(VOLSERVER_EXEFILE): $(VOLSERVER_EXEOBJS) $(VOLSERVER_EXELIBS) $(EXEC_LIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) ############################################################################ @@ -118,7 +118,7 @@ VOS_EXELIBS = \ $(DESTDIR)\lib\afs\afspioctl.lib $(RS_VOS_EXEFILE): $(VOS_EXEOBJS) $(VOS_EXELIBS) $(EXEC_LIBS) - $(EXECONLINK) + $(EXECONLINK) dnsapi.lib $(EXEPREP) $(CL_VOS_EXEFILE): $(RS_VOS_EXEFILE) diff --git a/src/volser/vsprocs.c b/src/volser/vsprocs.c index 7faec4158..544336e77 100644 --- a/src/volser/vsprocs.c +++ b/src/volser/vsprocs.c @@ -11,7 +11,7 @@ #include RCSID - ("$Header: /cvs/openafs/src/volser/vsprocs.c,v 1.30 2004/01/08 21:54:10 shadow Exp $"); + ("$Header: /cvs/openafs/src/volser/vsprocs.c,v 1.32 2004/06/02 08:39:34 shadow Exp $"); #include #include @@ -532,9 +532,10 @@ SubEnumerateEntry(struct nvldbentry *entry) fprintf(STDOUT, "RO Site "); if (isMixed) { if (entry->serverFlags[i] & NEW_REPSITE) - fprintf(STDOUT, " -- New release"); + fprintf(STDOUT," -- New release"); else - fprintf(STDOUT, " -- Old release"); + if (!(entry->serverFlags[i] & ITSRWVOL)) + fprintf(STDOUT," -- Old release"); } else { if (entry->serverFlags[i] & RO_DONTUSE) fprintf(STDOUT, " -- Not released"); @@ -3213,11 +3214,13 @@ UV_ReleaseVolume(afs_int32 afromvol, afs_int32 afromserver, } /* Will we be completing a previously unfinished release. -force overrides */ - for (fullrelease = 1, i = 0; (fullrelease && (i < entry.nServers)); i++) { - if (entry.serverFlags[i] & NEW_REPSITE) - fullrelease = 0; + for (s = 0, m = 0, fullrelease=0, i=0; (i