-${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}
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
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)
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.
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
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.
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 <?endforeach?> processing instruction without a matching <?foreach?>.");
++ 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 @@
+ }
+
+ /// <summary>
++ /// Returns true if the symbol exists.
++ /// </summary>
++ /// <param name="symbol">symbol name to check</param>
++ /// <returns>true if symbol is defined</returns>
++ 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);
++ }
++
++ /// <summary>
+ /// Replaces parameters in the source text.
+ /// </summary>
+ /// <param name="value">Text that may contain parameters to replace.</param>
+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 @@
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
++ <xs:attribute name="Separator" type="xs:string"/>
+ <xs:attribute name="Permanent" type="YesNoType"/>
+ <xs:attribute name="System" type="YesNoType"/>
+ </xs:complexType>
+
+
+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:
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
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`
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
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
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"
i386-pc-solaris2.9)
AFS_SYSNAME="sunx86_59"
;;
+ i386-pc-solaris2.10)
+ AFS_SYSNAME="sunx86_510"
+ ;;
alpha*-dec-osf4.0*)
AFS_SYSNAME="alpha_dux40"
;;
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
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`
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
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
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"
i386-pc-solaris2.9)
AFS_SYSNAME="sunx86_59"
;;
+ i386-pc-solaris2.10)
+ AFS_SYSNAME="sunx86_510"
+ ;;
alpha*-dec-osf4.0*)
AFS_SYSNAME="alpha_dux40"
;;
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
])
-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,
[
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
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)
])
-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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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)
$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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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 <linux/fs.h>],
+[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"
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"
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"
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"
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"
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"
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"
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
fi
])
-AC_DEFUN(LINUX_NEED_RHCONFIG,[
+AC_DEFUN([LINUX_NEED_RHCONFIG],[
RHCONFIG_SP=""
RHCONFIG_MP=""
if test "x$enable_redhat_buildsys" = "xyes"; then
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
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 <linux/autoconf.h>],
+ [#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,
[
])
-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,
[
])
-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,
[
])
-AC_DEFUN(AC_FUNC_RES_SEARCH, [
+AC_DEFUN([AC_FUNC_RES_SEARCH], [
ac_cv_func_res_search=no
AC_TRY_LINK([
#include <sys/types.h>
])
-AC_DEFUN(OPENAFS_OSCONF, [
+AC_DEFUN([OPENAFS_OSCONF], [
dnl defaults, override in case below as needed
XCFLAGS='${DBG} ${OPTMZ}'
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"
SHLIB_LINKER="${MT_CC} -shared"
;;
- i386_linux24)
+ i386_linux*)
CC="gcc -pipe"
CCOBJ="gcc -pipe"
MT_CC="gcc -pipe"
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"
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"
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
#
])
-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__"
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; }
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 <<EOF
+#line 2772 "configure"
+#include "confdefs.h"
+#include <linux/fs.h>
+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
else
cat > conftest.$ac_ext <<EOF
-#line 2772 "configure"
+#line 2804 "configure"
#include "confdefs.h"
#include <linux/fs.h>
int main() {
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
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
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 <<EOF
+#line 2849 "configure"
+#include "confdefs.h"
+#include <linux/autoconf.h>
+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"
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
else
cat > conftest.$ac_ext <<EOF
-#line 2841 "configure"
+#line 2906 "configure"
#include "confdefs.h"
#include <linux/sched.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 2872 "configure"
+#line 2937 "configure"
#include "confdefs.h"
#include <linux/sched.h>
int main() {
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 2904 "configure"
+#line 2969 "configure"
#include "confdefs.h"
#include <linux/sched.h>
int main() {
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 2936 "configure"
+#line 3001 "configure"
#include "confdefs.h"
#include <linux/sched.h>
int main() {
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 2968 "configure"
+#line 3033 "configure"
#include "confdefs.h"
#include <linux/sched.h>
int main() {
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3000 "configure"
+#line 3065 "configure"
#include "confdefs.h"
#include <linux/sched.h>
int main() {
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
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 <<EOF
-#line 3035 "configure"
+#line 3100 "configure"
#include "confdefs.h"
#include <linux/version.h>
#include <linux/config.h>
; 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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3070 "configure"
+#line 3135 "configure"
#include "confdefs.h"
#include <linux/config.h>
; 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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3121 "configure"
+#line 3186 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3154 "configure"
+#line 3219 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3187 "configure"
+#line 3252 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3220 "configure"
+#line 3285 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3253 "configure"
+#line 3318 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3286 "configure"
+#line 3351 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3319 "configure"
+#line 3384 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3352 "configure"
+#line 3417 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
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
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 <<EOF
-#line 3555 "configure"
+#line 3632 "configure"
#include "confdefs.h"
#define _KERNEL
#include <sys/fs/ufs_inode.h>
(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
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 <<EOF
-#line 3592 "configure"
+#line 3669 "configure"
#include "confdefs.h"
#define _KERNEL
#include <sys/proc.h>
(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
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 <<EOF
-#line 3629 "configure"
+#line 3706 "configure"
#include "confdefs.h"
#include <sys/fs/ufs_fs.h>
int main() {
(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
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"
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"
i386-pc-solaris2.9)
AFS_SYSNAME="sunx86_59"
;;
+ i386-pc-solaris2.10)
+ AFS_SYSNAME="sunx86_510"
+ ;;
alpha*-dec-osf4.0*)
AFS_SYSNAME="alpha_dux40"
;;
save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS"
cat > conftest.$ac_ext <<EOF
-#line 3968 "configure"
+#line 4051 "configure"
#include "confdefs.h"
#include <linux/autoconf.h>
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
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
;;
*)
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 <<EOF
-#line 4029 "configure"
+#line 4097 "configure"
#include "confdefs.h"
#include <sys/buf.h>
int main() {
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
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 <<EOF
-#line 4067 "configure"
+#line 4135 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/socket.h>
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
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 <<EOF
-#line 4106 "configure"
+#line 4174 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4129: \"$ac_link\") 1>&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
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
ac_save_LIBS="$LIBS"
LIBS="-l${lib} $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4166 "configure"
+#line 4234 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
socket()
; return 0; }
EOF
-if { (eval echo configure:4177: \"$ac_link\") 1>&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
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 <<EOF
-#line 4212 "configure"
+#line 4280 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4235: \"$ac_link\") 1>&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
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
ac_save_LIBS="$LIBS"
LIBS="-l${lib} $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4272 "configure"
+#line 4340 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
connect()
; return 0; }
EOF
-if { (eval echo configure:4283: \"$ac_link\") 1>&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
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 <<EOF
-#line 4318 "configure"
+#line 4386 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4341: \"$ac_link\") 1>&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
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
ac_save_LIBS="$LIBS"
LIBS="-l${lib} $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4377 "configure"
+#line 4445 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
gethostbyname()
; return 0; }
EOF
-if { (eval echo configure:4388: \"$ac_link\") 1>&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
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 <<EOF
-#line 4418 "configure"
+#line 4486 "configure"
#include "confdefs.h"
#include <stdlib.h>
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
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 <<EOF
-#line 4457 "configure"
+#line 4525 "configure"
#include "confdefs.h"
#include <sys/types.h>
; 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
ac_cv_func_res_search=no
cat > conftest.$ac_ext <<EOF
-#line 4498 "configure"
+#line 4566 "configure"
#include "confdefs.h"
#include <sys/types.h>
; 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
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
ac_save_LIBS="$LIBS"
LIBS="-lpthread $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4564 "configure"
+#line 4632 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
pthread_attr_init()
; return 0; }
EOF
-if { (eval echo configure:4575: \"$ac_link\") 1>&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
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
ac_save_LIBS="$LIBS"
LIBS="-lpthreads $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4605 "configure"
+#line 4673 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
pthread_attr_init()
; return 0; }
EOF
-if { (eval echo configure:4616: \"$ac_link\") 1>&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
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
ac_save_LIBS="$LIBS"
LIBS="-lc_r $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4647 "configure"
+#line 4715 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
pthread_attr_init()
; return 0; }
EOF
-if { (eval echo configure:4658: \"$ac_link\") 1>&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
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 <<EOF
-#line 4686 "configure"
+#line 4754 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char pthread_attr_init(); below. */
; return 0; }
EOF
-if { (eval echo configure:4709: \"$ac_link\") 1>&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
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
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 <<EOF
-#line 4855 "configure"
+#line 4923 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <float.h>
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*
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
-#line 4880 "configure"
+#line 4948 "configure"
#include "confdefs.h"
#include <string.h>
EOF
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
-#line 4898 "configure"
+#line 4966 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
:
else
cat > conftest.$ac_ext <<EOF
-#line 4919 "configure"
+#line 4987 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
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
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 <<EOF
-#line 4959 "configure"
+#line 5027 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
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
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 <<EOF
-#line 5005 "configure"
+#line 5073 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_hdr>
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
# 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
ac_save_LIBS="$LIBS"
LIBS="-ldir $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5046 "configure"
+#line 5114 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
opendir()
; return 0; }
EOF
-if { (eval echo configure:5057: \"$ac_link\") 1>&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
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
ac_save_LIBS="$LIBS"
LIBS="-lx $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5087 "configure"
+#line 5155 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
opendir()
; return 0; }
EOF
-if { (eval echo configure:5098: \"$ac_link\") 1>&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
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
-#line 5129 "configure"
+#line 5197 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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
-#line 5169 "configure"
+#line 5237 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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
-#line 5209 "configure"
+#line 5277 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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
-#line 5249 "configure"
+#line 5317 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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
-#line 5289 "configure"
+#line 5357 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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
-#line 5329 "configure"
+#line 5397 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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 <<EOF
-#line 5383 "configure"
+#line 5451 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:5406: \"$ac_link\") 1>&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
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 <<EOF
-#line 5438 "configure"
+#line 5506 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:5461: \"$ac_link\") 1>&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
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 <<EOF
-#line 5494 "configure"
+#line 5562 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:5517: \"$ac_link\") 1>&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
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" && \
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 <<EOF
-#line 5562 "configure"
+#line 5630 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
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
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
else
cat > conftest.$ac_ext <<EOF
-#line 5598 "configure"
+#line 5666 "configure"
#include "confdefs.h"
#include <stdio.h>
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
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 <<EOF
-#line 5637 "configure"
+#line 5705 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:5660: \"$ac_link\") 1>&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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
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"
SHLIB_LINKER="${MT_CC} -shared"
;;
- i386_linux24)
+ i386_linux*)
CC="gcc -pipe"
CCOBJ="gcc -pipe"
MT_CC="gcc -pipe"
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"
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"
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
#
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
else
cat > conftest.$ac_ext <<EOF
-#line 6803 "configure"
+#line 6894 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/systm.h>
; 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
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
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; }
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 <<EOF
+#line 2772 "configure"
+#include "confdefs.h"
+#include <linux/fs.h>
+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
else
cat > conftest.$ac_ext <<EOF
-#line 2772 "configure"
+#line 2804 "configure"
#include "confdefs.h"
#include <linux/fs.h>
int main() {
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
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
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 <<EOF
+#line 2849 "configure"
+#include "confdefs.h"
+#include <linux/autoconf.h>
+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"
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
else
cat > conftest.$ac_ext <<EOF
-#line 2841 "configure"
+#line 2906 "configure"
#include "confdefs.h"
#include <linux/sched.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 2872 "configure"
+#line 2937 "configure"
#include "confdefs.h"
#include <linux/sched.h>
int main() {
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 2904 "configure"
+#line 2969 "configure"
#include "confdefs.h"
#include <linux/sched.h>
int main() {
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 2936 "configure"
+#line 3001 "configure"
#include "confdefs.h"
#include <linux/sched.h>
int main() {
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 2968 "configure"
+#line 3033 "configure"
#include "confdefs.h"
#include <linux/sched.h>
int main() {
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3000 "configure"
+#line 3065 "configure"
#include "confdefs.h"
#include <linux/sched.h>
int main() {
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
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 <<EOF
-#line 3035 "configure"
+#line 3100 "configure"
#include "confdefs.h"
#include <linux/version.h>
#include <linux/config.h>
; 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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3070 "configure"
+#line 3135 "configure"
#include "confdefs.h"
#include <linux/config.h>
; 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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3121 "configure"
+#line 3186 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3154 "configure"
+#line 3219 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3187 "configure"
+#line 3252 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3220 "configure"
+#line 3285 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3253 "configure"
+#line 3318 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3286 "configure"
+#line 3351 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3319 "configure"
+#line 3384 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
else
cat > conftest.$ac_ext <<EOF
-#line 3352 "configure"
+#line 3417 "configure"
#include "confdefs.h"
#include <linux/modversions.h>
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
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
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
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 <<EOF
-#line 3555 "configure"
+#line 3632 "configure"
#include "confdefs.h"
#define _KERNEL
#include <sys/fs/ufs_inode.h>
(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
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 <<EOF
-#line 3592 "configure"
+#line 3669 "configure"
#include "confdefs.h"
#define _KERNEL
#include <sys/proc.h>
(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
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 <<EOF
-#line 3629 "configure"
+#line 3706 "configure"
#include "confdefs.h"
#include <sys/fs/ufs_fs.h>
int main() {
(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
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"
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"
i386-pc-solaris2.9)
AFS_SYSNAME="sunx86_59"
;;
+ i386-pc-solaris2.10)
+ AFS_SYSNAME="sunx86_510"
+ ;;
alpha*-dec-osf4.0*)
AFS_SYSNAME="alpha_dux40"
;;
save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS"
cat > conftest.$ac_ext <<EOF
-#line 3968 "configure"
+#line 4051 "configure"
#include "confdefs.h"
#include <linux/autoconf.h>
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
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
;;
*)
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 <<EOF
-#line 4029 "configure"
+#line 4097 "configure"
#include "confdefs.h"
#include <sys/buf.h>
int main() {
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
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 <<EOF
-#line 4067 "configure"
+#line 4135 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/socket.h>
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
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 <<EOF
-#line 4106 "configure"
+#line 4174 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4129: \"$ac_link\") 1>&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
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
ac_save_LIBS="$LIBS"
LIBS="-l${lib} $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4166 "configure"
+#line 4234 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
socket()
; return 0; }
EOF
-if { (eval echo configure:4177: \"$ac_link\") 1>&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
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 <<EOF
-#line 4212 "configure"
+#line 4280 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4235: \"$ac_link\") 1>&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
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
ac_save_LIBS="$LIBS"
LIBS="-l${lib} $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4272 "configure"
+#line 4340 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
connect()
; return 0; }
EOF
-if { (eval echo configure:4283: \"$ac_link\") 1>&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
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 <<EOF
-#line 4318 "configure"
+#line 4386 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4341: \"$ac_link\") 1>&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
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
ac_save_LIBS="$LIBS"
LIBS="-l${lib} $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4377 "configure"
+#line 4445 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
gethostbyname()
; return 0; }
EOF
-if { (eval echo configure:4388: \"$ac_link\") 1>&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
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 <<EOF
-#line 4418 "configure"
+#line 4486 "configure"
#include "confdefs.h"
#include <stdlib.h>
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
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 <<EOF
-#line 4457 "configure"
+#line 4525 "configure"
#include "confdefs.h"
#include <sys/types.h>
; 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
ac_cv_func_res_search=no
cat > conftest.$ac_ext <<EOF
-#line 4498 "configure"
+#line 4566 "configure"
#include "confdefs.h"
#include <sys/types.h>
; 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
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
ac_save_LIBS="$LIBS"
LIBS="-lpthread $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4564 "configure"
+#line 4632 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
pthread_attr_init()
; return 0; }
EOF
-if { (eval echo configure:4575: \"$ac_link\") 1>&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
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
ac_save_LIBS="$LIBS"
LIBS="-lpthreads $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4605 "configure"
+#line 4673 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
pthread_attr_init()
; return 0; }
EOF
-if { (eval echo configure:4616: \"$ac_link\") 1>&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
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
ac_save_LIBS="$LIBS"
LIBS="-lc_r $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4647 "configure"
+#line 4715 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
pthread_attr_init()
; return 0; }
EOF
-if { (eval echo configure:4658: \"$ac_link\") 1>&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
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 <<EOF
-#line 4686 "configure"
+#line 4754 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char pthread_attr_init(); below. */
; return 0; }
EOF
-if { (eval echo configure:4709: \"$ac_link\") 1>&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
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
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 <<EOF
-#line 4855 "configure"
+#line 4923 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <float.h>
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*
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
-#line 4880 "configure"
+#line 4948 "configure"
#include "confdefs.h"
#include <string.h>
EOF
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
-#line 4898 "configure"
+#line 4966 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
:
else
cat > conftest.$ac_ext <<EOF
-#line 4919 "configure"
+#line 4987 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
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
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 <<EOF
-#line 4959 "configure"
+#line 5027 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
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
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 <<EOF
-#line 5005 "configure"
+#line 5073 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_hdr>
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
# 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
ac_save_LIBS="$LIBS"
LIBS="-ldir $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5046 "configure"
+#line 5114 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
opendir()
; return 0; }
EOF
-if { (eval echo configure:5057: \"$ac_link\") 1>&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
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
ac_save_LIBS="$LIBS"
LIBS="-lx $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5087 "configure"
+#line 5155 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
opendir()
; return 0; }
EOF
-if { (eval echo configure:5098: \"$ac_link\") 1>&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
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
-#line 5129 "configure"
+#line 5197 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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
-#line 5169 "configure"
+#line 5237 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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
-#line 5209 "configure"
+#line 5277 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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
-#line 5249 "configure"
+#line 5317 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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
-#line 5289 "configure"
+#line 5357 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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
-#line 5329 "configure"
+#line 5397 "configure"
#include "confdefs.h"
#include <$ac_hdr>
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*
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 <<EOF
-#line 5383 "configure"
+#line 5451 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:5406: \"$ac_link\") 1>&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
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 <<EOF
-#line 5438 "configure"
+#line 5506 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:5461: \"$ac_link\") 1>&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
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 <<EOF
-#line 5494 "configure"
+#line 5562 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:5517: \"$ac_link\") 1>&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
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" && \
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 <<EOF
-#line 5562 "configure"
+#line 5630 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
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
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
else
cat > conftest.$ac_ext <<EOF
-#line 5598 "configure"
+#line 5666 "configure"
#include "confdefs.h"
#include <stdio.h>
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
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 <<EOF
-#line 5637 "configure"
+#line 5705 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:5660: \"$ac_link\") 1>&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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
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"
SHLIB_LINKER="${MT_CC} -shared"
;;
- i386_linux24)
+ i386_linux*)
CC="gcc -pipe"
CCOBJ="gcc -pipe"
MT_CC="gcc -pipe"
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"
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"
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
#
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
else
cat > conftest.$ac_ext <<EOF
-#line 6803 "configure"
+#line 6894 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/systm.h>
; 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
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
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)
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
!IFNDEF AFS_OBJDIR
AFS_OBJDIR=$(AFSROOT)\obj
!ENDIF
+!IFNDEF DESTDIR
DESTDIR=$(AFSROOT)\dest
+!ENDIF
CD = cd
NTMAKE = nmake /nologo /f ntmakefile install
$(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
$(DOCD) $(SRC)\$@
$(CD) $(SRC)\$@
$(NTMAKE)
- $(CD) ..\..
+ $(CD) ..\..
ubik: auth
echo ***** $@
-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
$(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
dnsapi.lib \
rpcrt4.lib \
user32.lib \
- Dbghelp.lib
+ Dbghelp.lib \
+ strsafe.lib
AFSD_EXELIBS =\
$(DESTDIR)\lib\libosi.lib \
#include "afsd.h"
#include "afsd_init.h"
#include "smb.h"
+#include "cm_conn.h"
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
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
);
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
+#include <strsafe.h>
#include <osi.h>
#include "afsd.h"
cm_initparams_v1 cm_initParams;
+char *cm_sysName = 0;
+int cm_sysNameCount = 0;
+char *cm_sysNameList[MAXNUMSYSNAMES];
+
/*
* AFSD Initialization Log
*
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=";
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
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) {
/*int freelanceEnabled;*/
WSADATA WSAjunk;
lana_number_t lanaNum;
+ int i;
WSAStartup(0x0101, &WSAjunk);
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__);
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");
}
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 */
}
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);
}
/* 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,
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 */
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__);
}
}
#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);
/* 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,
* 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];
DWORD dwResult;
char szKeyName[256];
HKEY hKey;
- DWORD dwIndex = 0;
+ DWORD dwIndex = 0, dwRetry = 0;
DWORD dwDriveSize;
DWORD dwSubMountSize;
char szSubMount[256];
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);
}
}
+ for ( ; dwRetry < MAX_RETRIES; dwRetry++)
{
NETRESOURCE nr;
memset (&nr, 0x00, sizeof(NETRESOURCE));
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);
#include <loadfuncs-profile.h>
#include <loadfuncs-krb.h>
#include <loadfuncs-krb524.h>
-#include <loadfuncs-afs36.h>
#include <loadfuncs-leash.h>
// service definitions
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),
};
#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,
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;
#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);
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);
}
}
FreeLibrary(hKrb4);
if (hProfile)
FreeLibrary(hProfile);
- if (hAfsTokens)
- FreeLibrary(hAfsTokens);
- if (hAfsConf)
- FreeLibrary(hAfsConf);
if (hComErr)
FreeLibrary(hComErr);
if (hService)
hSecur32 &&
#endif /* USE_MS2MIT */
hKrb524 &&
- hProfile && hAfsTokens && hAfsConf && hLeash && hCCAPI )
+ hProfile && hLeash && hCCAPI )
return TRUE;
return FALSE;
}
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)
code = pkrb5_unparse_name(ctx,princ,&pname);
if ( code ) goto cleanup;
- realm = krb5_princ_realm(ctx, princ);
- for ( i=0; i<realm->length; i++ ) {
- cell[i] = tolower(realm->data[i]);
+ princ_realm = krb5_princ_realm(ctx, princ);
+ for ( i=0; i<princ_realm->length; 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);
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;
int
-KFW_AFS_get_cred(char * username,
+KFW_AFS_get_cred( char * username,
char * cell,
char * password,
int lifetime,
char **cells = NULL;
int cell_count=0;
struct afsconf_cell cellconfig;
+ char * dot;
+
if (!pkrb5_init_context)
return 0;
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: ");
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 )
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);
cleanup:
if ( pname )
- pkrb5_free_unparsed_name(ctx,pname);
+ free(pname);
if ( cc )
pkrb5_cc_close(ctx, cc);
}
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);
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);
if (CurrentState != SERVICE_RUNNING)
return(0);
- rc = pktc_ForgetAllTokens();
+ rc = ktc_ForgetAllTokens();
return(0);
}
krb5_creds * k5creds = 0;
krb5_error_code code;
krb5_principal client_principal = 0;
- char * cname = 0, *sname = 0;
int i, retry = 0;
CurrentState = 0;
#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");
if ( IsDebuggerPresent() ) {
+ char * cname, *sname;
pkrb5_unparse_name(ctx, increds.client, &cname);
pkrb5_unparse_name(ctx, increds.server, &sname);
OutputDebugString("Getting tickets for \"");
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);
OutputDebugString("\"\n");
pkrb5_free_unparsed_name(ctx,cname);
pkrb5_free_unparsed_name(ctx,sname);
- cname = sname = 0;
}
if (!code)
OutputDebugString("\"\n");
pkrb5_free_unparsed_name(ctx,cname);
pkrb5_free_unparsed_name(ctx,sname);
- cname = sname = 0;
}
if (!code)
OutputDebugString("\"\n");
pkrb5_free_unparsed_name(ctx,cname);
pkrb5_free_unparsed_name(ctx,sname);
- cname = sname = 0;
}
if (!code)
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);
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 */
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);
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;
}
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 */
/* 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] )
{
}
/**************************************/
-/* KFW_AFS_get_cellconfig(): */
+/* KFW_AFS_get_cellconfig(): */
/**************************************/
int
KFW_AFS_get_cellconfig(char *cell, struct afsconf_cell *cellconfig, char *local_cell)
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);
}
/* 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;
}
/**************************************/
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);
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 */
/* 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
// 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 {
// 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
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 */
{
cm_server_t *tsp;
cm_serverRef_t *tsrp;
- cm_cell_t *cellp;
+ cm_cell_t *cellp;
cellp = rockp;
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;
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",
#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");
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;
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);
#include <afs/param.h>
#include <afs/stds.h>
+#include <afs/cellconfig.h>
#ifndef DJGPP
#include <windows.h>
#include "cm_config.h"
#ifdef AFS_AFSDB_ENV
-#if !defined(DJGPP) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x500
-#include <windns.h>
-#define DNSAPI_ENV
-#else
#include "cm_dns.h"
-#endif
#include <afs/afsint.h>
#endif
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
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 */
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;
#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);
}
}
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;i<nvlServers;i++) vlAddrs[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<nvlServers;i++)
- if(stricmp(pDnsIter->pName, vlServers[i]) == 0)
- vlAddrs[i] = pDnsIter->Data.A.IpAddress;
- }
-
- for(i=0;i<nvlServers;i++) {
- /* if we don't have an IP yet, then we should try resolving the volserver hostname
- in a separate query. */
- if(!vlAddrs[i]) {
- if(DnsQuery_A(vlServers[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(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 */
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"
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);
{
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);
}
}
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)
{
#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);
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,
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 */
#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 */
*/
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 */
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);
* 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)
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;
}
/*
*/
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;
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);
* 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);
}
*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
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 */
{
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);
}
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 */
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);
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)
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;
}
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;
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
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.
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 */
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);
| 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;
}
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.
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
*/
/* 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;
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);
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
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.
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
// 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);
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;
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
// 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) {
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 {
#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.
}
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;
}
#include <afs/param.h>
#include <afs/stds.h>
+#include <afs/cellconfig.h>
#ifndef DJGPP
#include <windows.h>
#include <winsock2.h>
#include "cm_dns.h"
#include <lwp.h>
#include <afs/afsint.h>
+#if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500)
+#include <windns.h>
+#define DNSAPI_ENV
+#endif
/*extern void afsi_log(char *pattern, ...);*/
int cm_InitDNS(int enabled)
{
+#ifndef DNSAPI_ENV
char configpath[100];
int len;
int code;
}
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;
};
-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;
#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 {
};
-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;
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 */
}
/*printReplyBuffer_AFSDB(pDNShdr);*/
if (pDNShdr)
- processReplyBuffer_AFSDB(commSock, pDNShdr, cellHosts, numServers, ttl);
+ processReplyBuffer_AFSDB(commSock, pDNShdr, cellHostAddrs, cellHostNames, numServers, ttl);
else
*numServers = 0;
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 */
/* 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
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
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.
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;
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;
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;
}
}
// 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
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;
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);
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;
}
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
#include "afsd_init.h"
#include "smb.h"
+#include "cm_server.h"
#ifndef DJGPP
#include <rx/rxkad.h>
osi_mutex_t cm_Afsdsbmt_Lock;
extern afs_int32 cryptall;
+extern char cm_NetbiosName[];
void cm_InitIoctl(void)
{
{
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)
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;
* 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);
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)
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;
}
} 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);
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
// 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);
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);
// 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
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;
}
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.
&& (!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)) {
/* 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 */
// 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;
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 */
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;
while (current)
{
- next = current->next;
- free(current);
- current = next;
+ next = current->next;
+ cm_FreeServer(current->server);
+ free(current);
+ current = next;
}
lock_ReleaseWrite(&cm_serverLock);
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__ */
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.
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)
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 */
// 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 */
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);
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;
} 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)) {
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;
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;
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;
}
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 {
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 */
}
-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;
gblob.out = space;
gblob.out_size = MAXSIZE;
-
#ifdef WIN32
if ( !IsAdmin() ) {
fprintf (stderr,"Permission denied: requires Administrator access.\n");
}
} 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) {
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()
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 */
;
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;
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";
{
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)
int smb_NumServerThreads;
-int numNCBs, numSessions;
+int numNCBs, numSessions, numVCs;
int smb_maxVCPerServer;
int smb_maxMpxRequests;
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;
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 : ""));
}
}
/* 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];
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))
{
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 */
}
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 */
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;
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;
* 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;
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);
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);
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;
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;
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.
--- /dev/null
+[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
+
# 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
;OpenAFS Install Script for NSIS
+; This version compiles with NSIS v2.0
;
-; Written by Rob Murawski <rsm4@ieee.org>
+; Originally written by Rob Murawski <rsm4@ieee.org>
;
-;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
!insertmacro MUI_PAGE_DIRECTORY
Page custom AFSPageGetCellServDB
Page custom AFSPageGetCellName
+ Page custom AFSPageConfigAFSCreds
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
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."
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"
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
; 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...
;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"
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
SectionEnd
+
+
+; MS Loopback adapter
+Section "MS Loopback Adapter" secLoopback
+
+Call afs.InstallMSLoopback
+
+SectionEnd
+
+
;------------------------
; OpenAFS SERVER
Section "AFS Server" secServer
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"
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
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
!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"
!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"
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
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
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
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
!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
;--------------------------------
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"
Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.dll"
Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.pdb"
!ENDIF
-!ENDIF
!ELSE
!IFDEF CL_1310
Delete /REBOOTOK "$INSTDIR\bin\mfc71.dll"
!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"
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"
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
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"
; 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\*"
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"
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
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
!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
!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
--- /dev/null
+# 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 ::
--- /dev/null
+/*
+
+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 <windows.h>
+#include <stdio.h>
+#define INITGUID
+#include <guiddef.h>
+#include <devguid.h>
+#include <setupapi.h>
+#include <tchar.h>
+#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;
+}
+
--- /dev/null
+/*
+ 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 <windows.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+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 <shellapi.h>
+#define INITGUID
+#include <guiddef.h>
+#include <devguid.h>
+#include <objbase.h>
+#include <setupapi.h>
+#include <tchar.h>
+#include <Msi.h>
+#include <Msiquery.h>
+#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);
+}
--- /dev/null
+/*
+
+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
--- /dev/null
+/*
+
+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 <afx.h>
+#include <windows.h>
+#include <shellapi.h>
+#include <objbase.h>
+#include <shlobj.h>
+#include <wtypes.h>
+
+#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<LPVOID *>(&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;
+}
--- /dev/null
+/*
+
+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 <windows.h>
+#include <comdef.h>
+#include <wbemidl.h>
+#include <tchar.h>
+
+#include <devguid.h>
+
+/* These two are from the Windows DDK */
+#include <netcfgx.h>
+#include <netcfgn.h>
+
+#include <shlobj.h>
+//#include <objbase.h>
+
+//#ifndef TEST
+//inline void printf(char*, ...) {}
+//#else
+#include <stdio.h>
+//#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
+
--- /dev/null
+>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
--- /dev/null
+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)
--- /dev/null
+<?xml version="1.0"?>
+
+<Include>
+ <!--
+ config.wxi defines the following variables :
+ General:
+ NumericVersion : Version number of the form a.b.c
+ VersionMajor : a
+ VersionMinor : b
+ VersionPatch : c
+ PackageCode : Package code
+ Debug : Whether or not to include debugging information
+ ReleaseType : AFS release type
+ InstallTimestamp: Timestamp for when the installer was generated.
+
+ CellName : Default cell name
+ CellDbFile : Path to default CellServDB file
+
+ RemoveLoopback : Defined if we want to remove the loopback adapter
+
+
+ Directory specs: (all dir. specs end in a '\')
+ MediaDllDir : Installer Dlls
+ MediaBinDir : Installer Exes
+ SrcDir : openafs\src\
+ DestDir : $(DEST)\
+ BinDir : $(DEST)\bin\
+ LibDir : $(DEST)\lib\
+ IncDir : $(DEST)\include\
+ EtcDir : $(DEST)\etc\
+ ClientDir : $(DEST)\root.client\usr\vice\etc\
+ ServerDir : $(DEST)\root.server\usr\afs\bin\
+
+ SystemDir : %SystemRoot%\System32\
+ -->
+
+ <!-- Configuration options, allow for commandline specification -->
+ <?ifndef CellName?>
+ <?define CellName="openafs.org"?>
+ <?endif?>
+ <?ifndef LogonOptions?>
+ <?define LogonOptions="1"?>
+ <?endif?>
+ <?ifndef FreelanceMode?>
+ <?define FreelanceMode="1"?>
+ <?endif?>
+ <?ifndef UseDNS?>
+ <?define UseDNS="1"?>
+ <?endif?>
+ <?ifndef NoFindLanaByName?>
+ <?define NoFindLanaByName="1"?>
+ <?endif?>
+ <?ifndef MountRoot?>
+ <?define MountRoot="/afs"?>
+ <?endif?>
+ <?ifndef NetbiosName?>
+ <?define NetbiosName="AFS"?>
+ <?endif?>
+ <?ifndef RxMaxMTU?>
+ <?define RxMaxMTU="1260"?>
+ <?endif?>
+ <?ifndef HideDotFiles?>
+ <?define HideDotFiles="1"?>
+ <?endif?>
+ <?ifndef SecurityLevel?>
+ <?define SecurityLevel="0"?>
+ <?endif?>
+
+ <?define InstallTimestamp="[Date] [Time]"?>
+
+ <!-- The following general parameters may be specified on the commandline to candle -->
+ <?ifndef NumericVersion?>
+ <?error NumericVersion should have been specified on the commandline?>
+ <?endif?>
+ <!-- We can't currently break down a numeric version into components in here,
+ so we also need the major, minor and patch on the command line as well
+ -->
+ <?ifndef VersionMajor?>
+ <?error VersionMajor should have been specified on the commandline?>
+ <?endif?>
+ <?ifndef VersionMinor?>
+ <?error VersionMinor should be specified on the commandline?>
+ <?endif?>
+ <?ifndef VersionPatch?>
+ <?error VersionRevision should be specified on the commandline?>
+ <?endif?>
+
+ <!-- define some packagecode, though we aren't really using it. See openafs.wxs -->
+ <?ifndef PackageCode?>
+ <?define PackageCode="6086552D-3EFA-436C-A0BD-25668849F0DB"?>
+ <?endif?>
+ <?if $(env.AFSDEV_BUILDTYPE) = "CHECKED"?>
+ <?define Debug?>
+ <?define ReleaseType="DT"?>
+ <?elseif $(env.AFSDEV_BUILDTYPE) = "FREE"?>
+ <?define ReleaseType="GA"?>
+ <?else?>
+ <?error AFSDEV_BUILDTYPE is not set in the environment.?>
+ <?endif?>
+
+ <!-- We are including debug symbols anyway. Undefine this for a leaner installer witout debug syms. -->
+ <?define DebugSyms?>
+
+ <!-- Use the afsloopback.dll instead of instloop.exe -->
+ <?define UseDllLoopbackInstaller?>
+
+ <!-- Note that if the follwing file does not exist, the build will fail -->
+ <?ifndef CellDbFile?>
+ <?define CellDbFile="CellServDB"?>
+ <?endif?>
+
+ <!-- Directories -->
+ <!-- DestDir must be specified -->
+ <?ifndef DestDir?>
+ <?define DestDir="$(env.AFSROOT)\dest\"?>
+ <?endif?>
+ <?ifndef SrcDir?>
+ <?define SrcDir="$(env.AFSROOT)\src\"?>
+ <?endif?>
+ <?ifndef MediaDllDir?>
+ <?define MediaDllDir="$(var.DestDir)WinInstall\Dll\"?>
+ <?endif?>
+ <?ifndef MediaBinDir?>
+ <?define MediaBinDir="$(var.DestDir)WinInstall\Config\"?>
+ <?endif?>
+ <?ifndef BinDir?>
+ <?define BinDir="$(var.DestDir)bin\"?>
+ <?endif?>
+ <?ifndef LibDir?>
+ <?define LibDir="$(var.DestDir)lib\"?>
+ <?endif?>
+ <?ifndef IncDir?>
+ <?define IncDir="$(var.DestDir)include\"?>
+ <?endif?>
+ <?ifndef EtcDir?>
+ <?define EtcDir="$(var.DestDir)etc\"?>
+ <?endif?>
+ <?ifndef ClientDir?>
+ <?define ClientDir="$(var.DestDir)root.client\usr\vice\etc\"?>
+ <?endif?>
+ <?ifndef ServerDir?>
+ <?define ServerDir="$(var.DestDir)root.server\usr\afs\bin\"?>
+ <?endif?>
+
+ <!-- We need the following to locate the proper runtime libraries -->
+ <?ifndef env.AFSVER_CL?>
+ <?error AFSVER_CL needs to be set to the compiler version?>
+ <?endif?>
+ <?define SystemDir="$(env.SystemRoot)\System32\"?>
+</Include>
--- /dev/null
+# 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 ::
--- /dev/null
+/*
+
+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;
+}
--- /dev/null
+/*
+
+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<windows.h>
+#include<setupapi.h>
+#include<msiquery.h>
+#include<stdio.h>
+#include<string.h>
+
+#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__*/
--- /dev/null
+<?xml version="1.0" ?>
+<Include>
+
+ <?ifdef DebugSyms?>
+ <?ifdef Debug?>
+ <?define DebugSymFollowParent="yes"?>
+ <?define DebugSymLowLevel="30"?>
+ <?define DebugSymHighLevel="130"?>
+ <?else?>
+ <?define DebugSymFollowParent="no"?>
+ <?define DebugSymLowLevel="130"?>
+ <?define DebugSymHighLevel="130"?>
+ <?endif?>
+ <?endif?>
+
+ <Feature Id="feaOpenAFS" AllowAdvertise="no" Absent="disallow" ConfigurableDirectory="AFSDIR"
+ Description="$(loc.StrAFSProdDesc)" Display="expand" InstallDefault="local" Level="30"
+ Title="OpenAFS">
+ <Feature Id="feaClient" AllowAdvertise="no" Description="$(loc.StrAFSClientLongDesc)" Display="expand"
+ FollowParent="yes" InstallDefault="local" Level="30" Title="$(loc.StrAFSClientDesc)">
+
+ <Feature Id="feaLoopback" FollowParent="yes" AllowAdvertise="no" Description="$(loc.StrLoopbackLongDesc)"
+ Display="expand" InstallDefault="local" Level="30" Title="$(loc.StrLoopbackDesc)">
+ <ComponentRef Id="rcm_Loopback"/>
+ </Feature>
+
+ <Feature Id="feaKB301673" AllowAdvertise="no" Absent="disallow" Display="hidden" InstallDefault="local" Level="0" FollowParent="yes">
+ <ComponentRef Id="rcm_KB301673" />
+ <Condition Level="30">VersionNT = 500 And ServicePackLevel < 3</Condition>
+ </Feature>
+
+ <Feature Id="feaCredsStartup" AllowAdvertise="no" FollowParent="yes" Display="hidden" InstallDefault="local" Level="30">
+ <ComponentRef Id="cmp_credsStartup" />
+ </Feature>
+
+ <?ifdef DebugSyms?>
+ <Feature Id="feaClientDebug" AllowAdvertise="no" Description="$(loc.StrAFSClientDebugLongDesc)" Display="expand"
+ FollowParent="$(var.DebugSymFollowParent)" InstallDefault="local" Level="$(var.DebugSymLowLevel)" Title="$(loc.StrAFSClientDebugDesc)">
+ <ComponentRef Id="cmp_ClientProgramDebug" />
+ <ComponentRef Id="cmp_CommonCommonDebug" />
+ <ComponentRef Id="cmp_ClientCommonDebug" />
+ <?include runtime_debug.wxi?>
+ </Feature>
+ <?endif?>
+
+ <ComponentRef Id="rcm_Client" />
+ <ComponentRef Id="cmp_CommonDir" />
+
+ <ComponentRef Id="efl_Readme_TXT_$(var.Language)" />
+ <ComponentRef Id="efl_afsdcell_INI" />
+ <ComponentRef Id="cmf_afs_cpa_CPL" />
+
+ <ComponentRef Id="cmf_afsrpc_DLL" />
+ <ComponentRef Id="cmf_afsauthent2_DLL" />
+ <ComponentRef Id="cmf_afspthread_DLL" />
+ <ComponentRef Id="cmf_TaAfsAppLib_DLL" />
+ <ComponentRef Id="cmf_afsprocmgmt_DLL" />
+ <ComponentRef Id="cmf_afs_config_EXE" />
+
+ <ComponentRef Id="cmf_afs_nt_HLP_$(var.Language)"/>
+ <ComponentRef Id="cmf_TaAfsAppLib_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afscreds_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afs_config_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afs_cpa_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afs_shl_ext_$(var.LanguageCode)_DLL" />
+
+ <ComponentRef Id="cmf_afsshare_EXE" />
+ <ComponentRef Id="cmf_libosi_DLL" />
+ <ComponentRef Id="cmf_libafsconf_DLL" />
+ <ComponentRef Id="cmf_klog_EXE" />
+ <ComponentRef Id="cmf_tokens_EXE" />
+ <ComponentRef Id="cmf_unlog_EXE" />
+ <ComponentRef Id="cmf_fs_EXE" />
+ <ComponentRef Id="cmf_afscreds_EXE" />
+ <ComponentRef Id="cmf_afs_shl_ext_DLL" />
+ <ComponentRef Id="cmf_afsd_service_EXE" />
+ <ComponentRef Id="cmf_afslogon_DLL" />
+ <ComponentRef Id="cmf_symlink_EXE" />
+ <ComponentRef Id="cmf_kpasswd_EXE" />
+ <ComponentRef Id="cmf_pts_EXE" />
+ <ComponentRef Id="cmf_bos_EXE" />
+ <ComponentRef Id="cmf_kas_EXE" />
+ <ComponentRef Id="cmf_vos_EXE" />
+ <ComponentRef Id="cmf_udebug_EXE" />
+ <ComponentRef Id="cmf_translate_et_EXE" />
+ <ComponentRef Id="cmf_rxdebug_EXE" />
+ <ComponentRef Id="cmf_backup_EXE" />
+ <ComponentRef Id="cmf_aklog_EXE" />
+
+ <!-- Runtime -->
+ <?include runtime.wxi?>
+ </Feature>
+
+ <Feature Id="feaServer" AllowAdvertise="no" Description="$(loc.StrAFSServerLongDesc)" Display="expand"
+ FollowParent="yes" InstallDefault="local" Level="130" Title="$(loc.StrAFSServerDesc)">
+
+ <ComponentRef Id="rcm_Server" />
+ <ComponentRef Id="cmp_CommonDir" />
+
+ <ComponentRef Id="cmf_afsserver_CPL" />
+ <ComponentRef Id="cmf_afsbosadmin_DLL" />
+ <ComponentRef Id="cmf_afscfgadmin_DLL" />
+ <ComponentRef Id="cmf_afsclientadmin_DLL" />
+ <ComponentRef Id="cmf_afskasadmin_DLL" />
+ <ComponentRef Id="cmf_afsptsadmin_DLL" />
+ <ComponentRef Id="cmf_afsvosadmin_DLL" />
+ <ComponentRef Id="cmf_afsadminutil_DLL" />
+
+ <ComponentRef Id="cmf_afsrpc_DLL" />
+ <ComponentRef Id="cmf_afsauthent2_DLL" />
+ <ComponentRef Id="cmf_afspthread_DLL" />
+ <ComponentRef Id="cmf_TaAfsAppLib_DLL" />
+ <ComponentRef Id="cmf_afsprocmgmt_DLL" />
+
+ <ComponentRef Id="cmf_afseventmsg_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afsserver_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afssvrcfg_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_TaAfsAppLib_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afs_nt_HLP_$(var.Language)" />
+ <ComponentRef Id="cmp_Lang_$(var.Language)" />
+
+ <ComponentRef Id="efl_Readme_TXT_$(var.Language)" />
+
+ <ComponentRef Id="cmf_vlserver_EXE" />
+ <ComponentRef Id="cmf_volinfo_EXE" />
+ <ComponentRef Id="cmf_volserver_EXE" />
+ <ComponentRef Id="cmf_afskill_EXE" />
+ <ComponentRef Id="cmf_afssvrcfg_EXE" />
+ <ComponentRef Id="cmf_bosctlsvc_EXE" />
+ <ComponentRef Id="cmf_bosserver_EXE" />
+ <ComponentRef Id="cmf_buserver_EXE" />
+ <ComponentRef Id="cmf_fileserver_EXE" />
+ <ComponentRef Id="cmf_fms_EXE" />
+ <ComponentRef Id="cmf_butc_EXE" />
+ <ComponentRef Id="cmf_kaserver_EXE" />
+ <ComponentRef Id="cmf_ptserver_EXE" />
+ <ComponentRef Id="cmf_salvager_EXE" />
+ <ComponentRef Id="cmf_upclient_EXE" />
+ <ComponentRef Id="cmf_upserver_EXE" />
+ <ComponentRef Id="cmp_Server_Program" />
+
+ <?ifdef DebugSyms?>
+ <Feature Id="feaServerDebug" AllowAdvertise="no" Description="$(loc.StrAFSServerDebugLongDesc)" Display="expand"
+ FollowParent="$(var.DebugSymFollowParent)" InstallDefault="local" Level="$(var.DebugSymHighLevel)" Title="$(loc.StrAFSServerDebugDesc)">
+ <ComponentRef Id="cmp_Server_Program_Debug" />
+ <ComponentRef Id="cmp_ServerCommonDebug" />
+ <ComponentRef Id="cmp_CommonCommonDebug" />
+ <?include runtime_debug.wxi?>
+ </Feature>
+ <?endif?>
+
+ <!-- Runtime -->
+ <?include runtime.wxi?>
+ </Feature>
+ <Feature Id="feaControlCenter" AllowAdvertise="no" Description="$(loc.StrAFSCCLongDesc)"
+ Display="expand" FollowParent="yes" InstallDefault="local" Level="130" Title="$(loc.StrAFSCCDesc)">
+
+ <ComponentRef Id="rcm_Control_Center" />
+ <ComponentRef Id="cmp_CommonDir" />
+
+ <ComponentRef Id="cmf_afs_cpa_CPL" />
+ <ComponentRef Id="cmf_afsbosadmin_DLL" />
+ <ComponentRef Id="cmf_afscfgadmin_DLL" />
+ <ComponentRef Id="cmf_afsclientadmin_DLL" />
+ <ComponentRef Id="cmf_afskasadmin_DLL" />
+ <ComponentRef Id="cmf_afsptsadmin_DLL" />
+ <ComponentRef Id="cmf_afsvosadmin_DLL" />
+ <ComponentRef Id="cmf_afsadminutil_DLL" />
+ <ComponentRef Id="cmf_afsrpc_DLL" />
+ <ComponentRef Id="cmf_afsauthent2_DLL" />
+ <ComponentRef Id="cmf_afspthread_DLL" />
+ <ComponentRef Id="cmf_TaAfsAppLib_DLL" />
+ <ComponentRef Id="cmf_afsprocmgmt_DLL" />
+ <ComponentRef Id="cmf_afs_config_EXE" />
+ <ComponentRef Id="cmf_TaAfsServerManager_EXE" />
+ <ComponentRef Id="cmf_TaAfsAdmSvr_EXE" />
+ <ComponentRef Id="cmf_TaAfsAccountManager_EXE" />
+
+ <ComponentRef Id="cmf_afseventmsg_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afsserver_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afssvrcfg_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_TaAfsAccountManager_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_TaAfsAppLib_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_TaAfsServerManager_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afscreds_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afs_config_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afs_cpa_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afs_shl_ext_$(var.LanguageCode)_DLL" />
+ <ComponentRef Id="cmf_afs_nt_HLP_$(var.Language)" />
+ <ComponentRef Id="cmp_Lang_$(var.Language)" />
+
+ <?ifdef DebugSyms?>
+ <Feature Id="feaControlCenterDebug" AllowAdvertise="no" Description="$(loc.StrAFSCCDebugLongDesc)"
+ Display="expand" FollowParent="$(var.DebugSymFollowParent)" InstallDefault="local" Level="$(var.DebugSymHighLevel)" Title="$(loc.StrAFSCCDebugDesc)">
+ <ComponentRef Id="cmp_Control_CenterDebug" />
+ <ComponentRef Id="cmp_ServerCommonDebug" />
+ <ComponentRef Id="cmp_CommonCommonDebug" />
+ <ComponentRef Id="cmp_ClientCommonDebug" />
+ <?include runtime_debug.wxi?>
+ </Feature>
+ <?endif?>
+
+ <ComponentRef Id="efl_Readme_TXT_$(var.Language)" />
+
+ <!-- Runtime -->
+ <?include runtime.wxi?>
+ </Feature>
+ <Feature Id="feaSDK" AllowAdvertise="no" Description="$(loc.StrAFSSDKLongDesc)" Display="expand"
+ FollowParent="yes" InstallDefault="local" Level="130" Title="$(loc.StrAFSSDKDesc)">
+
+ <ComponentRef Id="rcm_SDK" />
+
+ <ComponentRef Id="efl_Readme_TXT_$(var.Language)" />
+ <ComponentRef Id="cmp_SDK_Sample" />
+ <ComponentRef Id="cmp_SDK_Include" />
+ <ComponentRef Id="cmp_SDK_Include_afs" />
+ <ComponentRef Id="cmp_SDK_Include_rx" />
+ <ComponentRef Id="cmp_SDK_Include_Winnt" />
+ <ComponentRef Id="cmp_SDK_Lib" />
+ <ComponentRef Id="cmp_SDK_Lib_Afs" />
+
+ <?ifdef DebugSyms?>
+ <Feature Id="feaSDKDebug" AllowAdvertise="no" Description="$(loc.StrAFSSDKDebugLongDesc)" Display="expand"
+ FollowParent="$(var.DebugSymFollowParent)" InstallDefault="local" Level="$(var.DebugSymHighLevel)" Title="$(loc.StrAFSSDKDebugDesc)">
+ <?include runtime_debug.wxi?>
+ </Feature>
+ <?endif?>
+ <!-- Runtime -->
+ <?include runtime.wxi?>
+ </Feature>
+
+ <Feature Id="feaDocumentation" AllowAdvertise="no" Description="$(loc.StrAFSDocLongDesc)"
+ Display="expand" FollowParent="yes" InstallDefault="local" Level="130" Title="$(loc.StrAFSDocDesc)">
+
+ <ComponentRef Id="rcm_Documentation" />
+
+ <ComponentRef Id="efl_Readme_TXT_$(var.Language)" />
+ <ComponentRef Id="cmf_index2_HTM_en_US" />
+ <ComponentRef Id="efl_DocHtml_en_US" />
+ <ComponentRef Id="cmp_Cmd_Ref_en_US" />
+ <ComponentRef Id="cmp_Install_Guide_en_US" />
+ <ComponentRef Id="cmp_Sys_Admin_Guide_en_US" />
+ <ComponentRef Id="cmp_Release_Notes_en_US" />
+ <ComponentRef Id="cmf_afs_nt_HLP_en_US" />
+ <ComponentRef Id="cmp_Lang_en_US" />
+
+ </Feature>
+ </Feature>
+</Include>
--- /dev/null
+<?xml version="1.0"?>
+<Include>
+ <Directory Id="WindowsFolder" Name="Windows">
+ <Component Id="efl_afsdcell_INI" Guid="009F9A2D-5B53-4449-824F-7B063AF6F81C" Permanent="yes" NeverOverwrite="yes">
+ <File Id="file_afsdcell_INI" Name="afsdcell.ini" LongName="afsdcell.ini" KeyPath="yes" DiskId="1" src="$(var.CellDbFile)"/>
+ </Component>
+ </Directory>
+ <Directory Id="ProgramFilesFolder" Name=".">
+ <Directory Id="AFSDIR" Name="OpenAFS" SourceName=".">
+ <Directory Id="dirCommon" Name="Common" LongName="Common" SourceName=".">
+ <Component Id="cmp_CommonDir" Guid="C86B03A1-AE97-48B1-A77B-1B2395F1E117" KeyPath="yes">
+ <Environment Id="envCommon" Name="PATH" Action="create" System="yes" Permanent="no" Part="last" Separator=";" Value="[AFSDIR]Common" />
+ <CreateFolder />
+ </Component>
+ <Component Id="cmf_afsbosadmin_DLL" Guid="B4E5799E-BC68-4C17-B924-7DA206DD88D7">
+ <File Id="fileafsbosadmin_DLL" Name="afsbosad.dll" LongName="afsbosadmin.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\afsbosadmin.dll"/>
+ </Component>
+ <Component Id="cmf_afscfgadmin_DLL" Guid="2D5E8B3A-55F2-43CC-953B-7630FF0A7326">
+ <File Id="fileafscfgadmin_DLL" Name="afscfgad.dll" LongName="afscfgadmin.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\afscfgadmin.dll"/>
+ </Component>
+ <Component Id="cmf_afsclientadmin_DLL" Guid="735F75B1-EBCF-4AE1-B401-D48A1DD160F2">
+ <File Id="fileafsclientadmin_DLL" Name="afscliad.dll" LongName="afsclientadmin.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\afsclientadmin.dll"/>
+ </Component>
+ <Component Id="cmf_afskasadmin_DLL" Guid="2B4E37E4-ECEA-4435-8028-D60BAC9C647B">
+ <File Id="fileafskasadmin_DLL" Name="afskasad.dll" LongName="afskasadmin.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\afskasadmin.dll"/>
+ </Component>
+ <Component Id="cmf_afsptsadmin_DLL" Guid="CC902A5A-5CEF-47D1-B4ED-F922EB8F7FF0">
+ <File Id="fileafsptsadmin_DLL" Name="afsptsad.dll" LongName="afsptsadmin.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\afsptsadmin.dll"/>
+ </Component>
+ <Component Id="cmf_afsvosadmin_DLL" Guid="A97E0801-06A5-465C-99E1-E5F0E07166F0">
+ <File Id="fileafsvosadmin_DLL" Name="afsvosad.dll" LongName="afsvosadmin.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\afsvosadmin.dll"/>
+ </Component>
+ <Component Id="cmf_afsadminutil_DLL" Guid="A9782D0F-768F-40F4-A600-A7240EFBEC8C">
+ <File Id="fileafsadminutil_DLL" Name="afsadmut.dll" LongName="afsadminutil.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\afsadminutil.dll"/>
+ </Component>
+ <Component Id="cmf_afsrpc_DLL" Guid="E75E2FC0-D011-494A-8142-670B3286C5C2">
+ <File Id="fileafsrpc_DLL" Name="afsrpc.dll" LongName="afsrpc.dll" KeyPath="yes" DiskId="1" src="$(var.LibDir)\afsrpc.dll"/>
+ </Component>
+ <Component Id="cmf_afsauthent2_DLL" Guid="7B806F96-0542-4BCC-865B-E126CE3BCDA6">
+ <File Id="fileafsauthent2_DLL" Name="afsauth.dll" LongName="afsauthent.dll" KeyPath="yes" DiskId="1" src="$(var.LibDir)\afsauthent.dll"/>
+ </Component>
+ <Component Id="cmf_afspthread_DLL" Guid="77650315-9F19-47BF-A923-54B77DA5EA5C">
+ <File Id="fileafspthread_DLL" Name="afspthrd.dll" LongName="afspthread.dll" KeyPath="yes" DiskId="1" src="$(var.LibDir)\afspthread.dll"/>
+ </Component>
+ <Component Id="cmf_TaAfsAppLib_DLL" Guid="D6D8A744-2352-477D-9ECD-4859C475162B">
+ <File Id="fileTaAfsAppLib_DLL" Name="TaAfsApL.dll" LongName="TaAfsAppLib.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\TaAfsAppLib.dll"/>
+ </Component>
+ <Component Id="cmf_afsprocmgmt_DLL" Guid="DAAA35B5-0E95-4DEF-9E87-A99A0A24B0BE">
+ <File Id="fileafsprocmgmt_DLL" Name="afsprcmg.dll" LongName="afsprocmgmt.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\afsprocmgmt.dll"/>
+ </Component>
+ <Component Id="cmf_afs_config_EXE" Guid="3E73EA24-4B0D-4834-96C3-8AF38FDBCA6F">
+ <File Id="fileafs_config_EXE" Name="afs_cfg.exe" LongName="afs_config.exe" KeyPath="yes" DiskId="1" src="$(var.ClientDir)\afs_config.exe"/>
+ </Component>
+
+ <?ifdef DebugSyms?>
+ <Component Id="cmp_ServerCommonDebug" Guid="4132C211-5577-48DE-9C66-214EEC0E6BC4">
+ <File Id="fileafsbosadmin_PDB" Name="afsbosad.pdb" LongName="afsbosadmin.pdb" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\afsbosadmin.pdb"/>
+ <File Id="fileafscfgadmin_PDB" Name="afscfgad.pdb" LongName="afscfgadmin.pdb" DiskId="1" src="$(var.ServerDir)\afscfgadmin.pdb"/>
+ <File Id="fileafsclientadmin_PDB" Name="afscliad.pdb" LongName="afsclientadmin.pdb" DiskId="1" src="$(var.ServerDir)\afsclientadmin.pdb"/>
+ <File Id="fileafskasadmin_PDB" Name="afskasad.pdb" LongName="afskasadmin.pdb" DiskId="1" src="$(var.ServerDir)\afskasadmin.pdb"/>
+ <File Id="fileafsptsadmin_PDB" Name="afsptsad.pdb" LongName="afsptsadmin.pdb" DiskId="1" src="$(var.ServerDir)\afsptsadmin.pdb"/>
+ <File Id="fileafsvosadmin_PDB" Name="afsvosad.pdb" LongName="afsvosadmin.pdb" DiskId="1" src="$(var.ServerDir)\afsvosadmin.pdb"/>
+ <File Id="fileafsadminutil_PDB" Name="afsadmut.pdb" LongName="afsadminutil.pdb" DiskId="1" src="$(var.ServerDir)\afsadminutil.pdb"/>
+ </Component>
+ <Component Id="cmp_CommonCommonDebug" Guid="7F47902F-B92D-42A3-BDEF-AFFC79C66F0C">
+ <File Id="fileafsrpc_PDB" Name="afsrpc.pdb" LongName="afsrpc.pdb" KeyPath="yes" DiskId="1" src="$(var.LibDir)\afsrpc.pdb"/>
+ <File Id="fileafsauthent_PDB" Name="afsauth.pdb" LongName="afsauthent.pdb" DiskId="1" src="$(var.LibDir)\afsauthent.pdb"/>
+ <File Id="fileafspthread_PDB" Name="afspthrd.pdb" LongName="afspthread.pdb" DiskId="1" src="$(var.LibDir)\afspthread.pdb"/>
+ <File Id="fileTaAfsAppLib_PDB" Name="TaAfsApL.pdb" LongName="TaAfsAppLib.pdb" DiskId="1" src="$(var.ServerDir)\TaAfsAppLib.pdb"/>
+ <File Id="fileafsprocmgmt_PDB" Name="afsprcmg.pdb" LongName="afsprocmgmt.pdb" DiskId="1" src="$(var.ServerDir)\afsprocmgmt.pdb"/>
+ </Component>
+ <Component Id="cmp_ClientCommonDebug" Guid="BFA4097D-3013-46AD-86EB-2160376FB55C">
+ <File Id="fileafs_config_PDB" Name="afs_cfg.pdb" LongName="afs_config.pdb" KeyPath="yes" DiskId="1" src="$(var.ClientDir)\afs_config.pdb"/>
+ </Component>
+ <?endif?>
+
+ <!-- <<LanguageSpecific:1033/en_US>> -->
+ <?if $(var.Language) ="en_US"?>
+ <Component Id="cmf_afseventmsg_1033_DLL" Guid="2DBBE232-2DA5-421F-9C83-93278598634A">
+ <File Id="fileafseventmsg_1033_DLL" Name="afse1033.dll" LongName="afseventmsg_1033.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\afseventmsg_1033.dll"/>
+ </Component>
+ <Component Id="cmf_afsserver_1033_DLL" Guid="2EC8BA3C-0A5C-48C5-A370-36265C43A93F">
+ <File Id="fileafsserver_1033_DLL" Name="afss1033.dll" LongName="afsserver_1033.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\afsserver_1033.dll"/>
+ </Component>
+ <Component Id="cmf_afssvrcfg_1033_DLL" Guid="70F7B4AA-E89F-4786-A3F1-27725E613F53">
+ <File Id="fileafssvrcfg_1033_DLL" Name="afsv1033.dll" LongName="afssvrcfg_1033.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\afssvrcfg_1033.dll"/>
+ </Component>
+ <Component Id="cmf_TaAfsAccountManager_1033_DLL" Guid="1BD9FA36-3DD8-4AA4-B7C0-9AC26D872068">
+ <File Id="fileTaAfsAccountManager_1033_DLL" Name="tacm1033.dll" LongName="TaAfsAccountManager_1033.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\TaAfsAccountManager_1033.dll"/>
+ </Component>
+ <Component Id="cmf_TaAfsAppLib_1033_DLL" Guid="40989EC2-EB2B-495A-BA6D-5E22AB785457">
+ <File Id="fileTaAfsAppLib_1033_DLL" Name="taal1033.dll" LongName="TaAfsAppLib_1033.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\TaAfsAppLib_1033.dll"/>
+ </Component>
+ <Component Id="cmf_TaAfsServerManager_1033_DLL" Guid="54876C77-299F-496B-A5D0-F89DF8759A40">
+ <File Id="fileTaAfsServerManager_1033_DLL" Name="tasm1033.dll" LongName="TaAfsServerManager_1033.dll" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\TaAfsServerManager_1033.dll"/>
+ </Component>
+ <Component Id="cmf_afscreds_1033_DLL" Guid="76AC935C-E558-4D1C-810D-47F3A8923429">
+ <File Id="fileafscreds_1033_DLL" Name="acrd1033.dll" LongName="afscreds_1033.dll" KeyPath="yes" DiskId="1" src="$(var.ClientDir)\afscreds_1033.dll"/>
+ </Component>
+ <Component Id="cmf_afs_config_1033_DLL" Guid="6DE08ED9-2B64-4D39-A50E-62FEAC91DF88">
+ <File Id="fileafs_config_1033_DLL" Name="acfg1033.dll" LongName="afs_config_1033.dll" KeyPath="yes" DiskId="1" src="$(var.ClientDir)\afs_config_1033.dll"/>
+ </Component>
+ <Component Id="cmf_afs_cpa_1033_DLL" Guid="12EE2B31-4320-4A6B-90F7-7A03ECF5A0DA">
+ <File Id="fileafs_cpa_1033_DLL" Name="acpa1033.dll" LongName="afs_cpa_1033.dll" KeyPath="yes" DiskId="1" src="$(var.ClientDir)\afs_cpa_1033.dll"/>
+ </Component>
+ <Component Id="cmf_afs_shl_ext_1033_DLL" Guid="9FF6C6CA-C731-4319-8777-E6DBAEFC3A4B">
+ <File Id="fileafs_shl_ext_1033_DLL" Name="ashl1033.dll" LongName="afs_shl_ext_1033.dll" KeyPath="yes" DiskId="1" src="$(var.ClientDir)\afs_shl_ext_1033.dll"/>
+ </Component>
+
+ <Directory Id="dirCommon_en_US" Name="en_US" LongName="en_US" SourceName="." src="$(var.SrcDir)\WINNT\doc\help\en_US\">
+ <Component Id="cmf_afs_nt_HLP_en_US" Guid="A59FF1E3-984F-47E0-8A65-590A01B6E1C4">
+ <File Id="fileafs_nt_HLP_en_US" Name="afs-nt.hlp" LongName="afs-nt.hlp" KeyPath="yes" DiskId="1">
+ <Shortcut Id="scClientHelp_en_US" Directory="dirShortCut" Name="CliHelp.lnk" LongName="Client Help.lnk" Description="$(loc.StrHlpFileDesc)" Icon="ico_Help" IconIndex="0" Show="normal" WorkingDirectory="dirCommon" />
+ </File>
+ <File Id="fileafs_nt2_CNT_en_US" Name="afs-nt.cnt" LongName="afs-nt.cnt" DiskId="1" />
+ </Component>
+
+ <Component Id="cmp_Lang_en_US" Guid="9B6B5AB2-8BD1-402D-BFC0-63255740A653">
+ <File Id="filetaafssvrmgr_CNT_en_US" Name="taafs.cnt" LongName="taafssvrmgr.cnt" DiskId="1" />
+ <File Id="filetaafsusrmgr_CNT_en_US" Name="taafsusr.cnt" LongName="taafsusrmgr.cnt" DiskId="1" />
+ <File Id="fileafs_cc_CNT_en_US" Name="afs-cc.cnt" LongName="afs-cc.cnt" DiskId="1" />
+ <File Id="fileafs_light_CNT_en_US" Name="afs-lgt.cnt" LongName="afs-light.cnt" DiskId="1" />
+ <File Id="filetaafscfg_CNT_en_US" Name="taafscfg.cnt" LongName="taafscfg.cnt" DiskId="1" />
+ <File Id="filetaafssvrmgr2_HLP_en_US" Name="taafsvrm.hlp" LongName="taafssvrmgr.hlp" KeyPath="yes" DiskId="1" />
+ <File Id="filetaafsusrmgr2_HLP_en_US" Name="taafusrm.hlp" LongName="taafsusrmgr.hlp" DiskId="1" />
+ <File Id="fileafs_cc2_HLP_en_US" Name="afs-cc.hlp" LongName="afs-cc.hlp" DiskId="1" />
+ <File Id="fileafs_light2_HLP_en_US" Name="afs-lgt.hlp" LongName="afs-light.hlp" DiskId="1" />
+ <File Id="filetaafscfg2_HLP_en_US" Name="taafscfg.hlp" LongName="taafscfg.hlp" DiskId="1" />
+ </Component>
+ </Directory>
+ <?endif?>
+ <!-- <</LanguageSpecific:1033/en_US>> -->
+
+ <!-- Runtime libraries -->
+ <?ifndef Debug?>
+ <?if $(env.AFSVER_CL) = "1310"?>
+ <?ifdef comment?>
+ While we would love to just use the merge modules, they are unfortunately
+ non-retargetable. Therefore we just use the DLLs directly.
+ <Merge Id="mergeVC1310LibMFC" Language="$(var.LanguageCode)" DiskId="1" FileCompression="yes" src="$(env.PROGRAMFILES)\Common Files\Merge Modules\VC_User_MFC71_RTL_X86_---.msm" />
+ <Merge Id="mergeVC1310LibCRT" Language="$(var.LanguageCode)" DiskId="1" FileCompression="yes" src="$(env.PROGRAMFILES)\Common Files\Merge Modules\VC_User_CRT71_RTL_X86_---.msm" />
+ <?else?>
+ <Component Id="cmp_VC1310msvcr71" Guid="EBD3B721-A613-4457-BB9A-FF9EC1AC541C">
+ <File Id="filemsvcr71_DLL" Name="msvcr71.dll" LongName="msvcr71.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcr71.dll" />
+ </Component>
+ <Component Id="cmp_VC1310msvcp71" Guid="0598EFE6-A755-46E1-95F6-31FD0999D4C6">
+ <File Id="filemsvcp71_DLL" Name="msvcp71.dll" LongName="msvcp71.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcp71.dll" />
+ </Component>
+ <Component Id="cmp_VC1310mfc71" Guid="40B16D8F-919E-4D65-8AE7-383EFD8D9885">
+ <File Id="filemfc71_DLL" Name="mfc71.dll" LongName="mfc71.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc71.dll" />
+ </Component>
+ <Component Id="cmp_VC1310mfc71u" Guid="846BF4DC-14D3-4FFE-97EA-A5C17F5B667F">
+ <File Id="filemfc71u_DLL" Name="mfc71u.dll" LongName="mfc71u.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc71u.dll" />
+ </Component>
+ <?ifdef DebugSyms?>
+ <Component Id="cmp_VC1310msvcr71PDB" Guid="1EB72EAB-1129-4DA3-9CF2-26B3E4FB7A31">
+ <File Id="filemsvcr71_PDB" Name="msvcr71.pdb" LongName="msvcr71.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcr71.pdb" />
+ </Component>
+ <Component Id="cmp_VC1310msvcp71PDB" Guid="1A89DE42-0C88-49AE-A1F8-A7E66EE2D8AB">
+ <File Id="filemsvcp71_PDB" Name="msvcp71.pdb" LongName="msvcp71.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcp71.pdb" />
+ </Component>
+ <Component Id="cmp_VC1310mfc71PDB" Guid="F95968F4-49EB-4AAE-90F1-34FB6D972D92">
+ <File Id="filemfc71_PDB" Name="mfc71.pdb" LongName="mfc71.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc71.pdb" />
+ </Component>
+ <Component Id="cmp_VC1310mfc71uPDB" Guid="B0184770-5285-4CFA-910A-D4531AE0043C">
+ <File Id="filemfc71u_PDB" Name="mfc71u.pdb" LongName="mfc71u.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc71u.pdb" />
+ </Component>
+ <?endif?>
+ <?endif?>
+ <?elseif $(env.AFSVER_CL) = "1300"?>
+ <Merge Id="mergeVC1300LibMFC" Language="$(var.LanguageCode)" DiskId="1" FileCompression="yes" src="$(env.PROGRAMFILES)\Common Files\Merge Modules\VC_User_MFC70_RTL_X86_---.msm" />
+ <Merge Id="mergeVC1300LibCRT" Language="$(var.LanguageCode)" DiskId="1" FileCompression="yes" src="$(env.PROGRAMFILES)\Common Files\Merge Modules\VC_User_CRT70_RTL_X86_---.msm" />
+ <?ifdef DebugSyms?>
+ <Component Id="cmp_VC1300msvcr70PDB" Guid="E2A402C2-1A66-4432-9659-32627C6EB0E7">
+ <File Id="filemsvcr70_PDB" Name="msvcr70.pdb" LongName="msvcr70.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcr70.pdb" />
+ </Component>
+ <Component Id="cmp_VC1300msvcp70PDB" Guid="7017FC16-6662-4891-8FA0-0E11817FC1EC">
+ <File Id="filemsvcp70_PDB" Name="msvcp70.pdb" LongName="msvcp70.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcp70.pdb" />
+ </Component>
+ <Component Id="cmp_VC1300mfc70PDB" Guid="47514F18-BB28-4422-8701-B7152F102AA6">
+ <File Id="filemfc70_PDB" Name="mfc70.pdb" LongName="mfc70.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc70.pdb" />
+ </Component>
+ <?endif?>
+ <?elseif $(env.AFSVER_CL) = "1200"?>
+ <Component Id="cmpVC1200msvcrt" Guid="718CDA4A-532F-43E8-9618-4D3CFE27D730">
+ <File Id="filemsvcrt_DLL" Name="msvcrt.dll" LongName="msvcrt.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcrt.dll" />
+ </Component>
+ <Component Id="cmpVC1200msvcp60" Guid="B20EE912-9C5D-4DAB-95BC-DB2249FED3EF">
+ <File Id="filemsvcp60_DLL" Name="msvcp60.dll" LongName="msvcp60.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcp60.dll" />
+ </Component>
+ <Component Id="cmpVC1200mfc42" Guid="2C16F608-AE33-45D1-B072-0C05E99482A7">
+ <File Id="filemfc42_DLL" Name="mfc42.dll" LongName="mfc42.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc42.dll" />
+ </Component>
+ <?ifdef DebugSyms?>
+ <Component Id="cmp_VC1200msvcrtPDB" Guid="A702C2AB-C99F-443A-A420-063FFD866FBC">
+ <File Id="filemsvcrt_PDB" Name="msvcrt.pdb" LongName="msvcrt.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcrt.pdb" />
+ </Component>
+ <Component Id="cmp_VC1200msvcp60PDB" Guid="56CCAE2C-0CAD-43B2-A7BD-F56E9E4F74E1">
+ <File Id="filemsvcp60_PDB" Name="msvcp60.pdb" LongName="msvcp60.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcp60.pdb" />
+ </Component>
+ <Component Id="cmp_VC1200mfc42PDB" Guid="0B615363-EB3C-4785-A8E6-9AB42D85293D">
+ <File Id="filemfc42_PDB" Name="mfc42.pdb" LongName="mfc42.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc42.pdb" />
+ </Component>
+ <?endif?>
+ <?endif?>
+ <?else?> <!-- Debug -->
+ <?if $(env.AFSVER_CL) = "1310"?>
+ <Component Id="cmp_VC1310msvcr71d" Guid="84D8212D-2F03-40B7-86CA-CB54F9DF05F3">
+ <File Id="filemsvcr71d_DLL" Name="msvcr71d.dll" LongName="msvcr71d.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcr71d.dll" />
+ </Component>
+ <Component Id="cmp_VC1310msvcp71d" Guid="96CC7709-6945-4CDF-9A81-5F110FE1BAC0">
+ <File Id="filemsvcp71d_DLL" Name="msvcp71d.dll" LongName="msvcp71d.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcp71d.dll" />
+ </Component>
+ <Component Id="cmp_VC1310mfc71d" Guid="1A2898CE-9C5F-4191-8722-D198C31F17E0">
+ <File Id="filemfc71d_DLL" Name="mfc71d.dll" LongName="mfc71d.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc71d.dll" />
+ </Component>
+ <Component Id="cmp_VC1310mfc71ud" Guid="4DCFABFC-B914-4805-BEFC-71C29D46730C">
+ <File Id="filemfc71ud_DLL" Name="mfc71ud.dll" LongName="mfc71ud.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc71ud.dll" />
+ </Component>
+ <?ifdef DebugSyms?>
+ <Component Id="cmp_VC1310msvcr71dPDB" Guid="2F1BAF2D-F977-49C4-9971-C933206DEB17">
+ <File Id="filemsvcr71d_PDB" Name="msvcr71d.pdb" LongName="msvcr71d.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcr71d.pdb" />
+ </Component>
+ <Component Id="cmp_VC1310msvcp71dPDB" Guid="4D8FE0AE-B926-4675-BF48-E6802802901D">
+ <File Id="filemsvcp71d_PDB" Name="msvcp71d.pdb" LongName="msvcp71d.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcp71d.pdb" />
+ </Component>
+ <Component Id="cmp_VC1310mfc71dPDB" Guid="BFC908C3-186A-4E27-8399-CCC65350B05E">
+ <File Id="filemfc71d_PDB" Name="mfc71d.pdb" LongName="mfc71d.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc71d.pdb" />
+ </Component>
+ <Component Id="cmp_VC1310mfc71udPDB" Guid="B5DCF017-6FE3-49BC-9298-9D96EF90EAE8">
+ <File Id="filemfc71ud_PDB" Name="mfc71ud.pdb" LongName="mfc71ud.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc71ud.pdb" />
+ </Component>
+ <?endif?>
+ <?elseif $(env.AFSVER_CL) = "1300"?>
+ <Component Id="cmp_VC1300msvcr70d" Guid="F54C0DDB-3BDC-4824-8A63-100CB01E4CA4">
+ <File Id="filemsvcr70d_DLL" Name="msvcr70d.dll" LongName="msvcr70d.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcr70d.dll" />
+ </Component>
+ <Component Id="cmp_VC1300msvcp70d" Guid="F42363A0-20D6-43BD-AFB3-C22B6DFBFCB4">
+ <File Id="filemsvcp70d_DLL" Name="msvcp70d.dll" LongName="msvcp70d.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcp70d.dll" />
+ </Component>
+ <Component Id="cmp_VC1300mfc70d" Guid="635200A5-B02A-41FA-B1BD-8BCB97103E7D">
+ <File Id="filemfc70d_DLL" Name="mfc70d.dll" LongName="mfc70d.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc70d.dll" />
+ </Component>
+ <?ifdef DebugSyms?>
+ <Component Id="cmp_VC1300msvcr70dPDB" Guid="B8928CC3-F0D3-4BC1-9574-D35EA0F3F288">
+ <File Id="filemsvcr70d_PDB" Name="msvcr70d.pdb" LongName="msvcr70d.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcr70d.pdb" />
+ </Component>
+ <Component Id="cmp_VC1300msvcp70dPDB" Guid="ED9F3A34-79E0-48F0-B474-612757E4B684">
+ <File Id="filemsvcp70d_PDB" Name="msvcp70d.pdb" LongName="msvcp70d.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcp70d.pdb" />
+ </Component>
+ <Component Id="cmp_VC1300mfc70dPDB" Guid="4A6939FA-C7AC-436A-9D2F-E2475C88F249">
+ <File Id="filemfc70d_PDB" Name="mfc70d.pdb" LongName="mfc70d.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc70d.pdb" />
+ </Component>
+ <?endif?>
+ <?elseif $(env.AFSVER_CL) = "1200"?>
+ <Component Id="cmp_VC1200msvcrtd" Guid="9EFFE734-020C-4748-B074-86E15B50B6E5">
+ <File Id="filemsvcrtd_DLL" Name="msvcrtd.dll" LongName="msvcrtd.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcrtd.dll" />
+ </Component>
+ <Component Id="cmp_VC1200msvcp60d" Guid="D2816BE5-7B0D-4245-8345-B2408644EDF1">
+ <File Id="filemsvcp60d_DLL" Name="msvcp60d.dll" LongName="msvcp60d.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcp60d.dll" />
+ </Component>
+ <Component Id="cmp_VC1200mfc42d" Guid="6D983D53-2E7F-48CE-953E-7A9D0215C6B8">
+ <File Id="filemfc42d_DLL" Name="mfc42d.dll" LongName="mfc42d.dll" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc42d.dll" />
+ </Component>
+ <?ifdef DebugSyms?>
+ <Component Id="cmp_VC1200msvcrtdPDB" Guid="420C311B-EC0F-47CB-883A-06A82808C06B">
+ <File Id="filemsvcrtd_PDB" Name="msvcrtd.pdb" LongName="msvcrtd.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcrtd.pdb" />
+ </Component>
+ <Component Id="cmp_VC1200msvcp60dPDB" Guid="1523259A-1819-44B3-B2DA-59CEA7AA1DE6">
+ <File Id="filemsvcp60d_PDB" Name="msvcp60d.pdb" LongName="msvcp60d.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)msvcp60d.pdb" />
+ </Component>
+ <Component Id="cmp_VC1200mfc42dPDB" Guid="60A1BE7B-86ED-4A4E-8374-943C2C7241E8">
+ <File Id="filemfc42d_PDB" Name="mfc42d.pdb" LongName="mfc42d.pdb" KeyPath="yes" DiskId="1" src="$(var.SystemDir)mfc42d.pdb" />
+ </Component>
+ <?endif?>
+ <?endif?>
+ <?endif?>
+ </Directory> <!-- /common -->
+
+ <Directory Id="dirControl_Center" Name="Contr" LongName="Control Center" SourceName=".">
+ <Component Id="cmf_TaAfsServerManager_EXE" Guid="B890FB93-2EFD-44B6-8CB3-7A6AFABFF029">
+ <File Id="fileTaAfsServerManager_EXE" Name="TaAfsSvM.exe" LongName="TaAfsServerManager.exe" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\TaAfsServerManager.exe">
+ <Shortcut Id="scServerManager" Directory="dirShortCut" Name="SvrMgr.lnk" LongName="Server Manager.lnk" Description="$(loc.StrSvrMgrDesc)" Icon="ico_ServerManager" IconIndex="0" Show="normal" WorkingDirectory="dirCommon" />
+ </File>
+ </Component>
+ <Component Id="cmf_TaAfsAdmSvr_EXE" Guid="99E23413-8261-4007-9DC9-B2C7453EF1EE">
+ <File Id="fileTaAfsAdmSvr_EXE" Name="TaAfsAdS.exe" LongName="TaAfsAdmSvr.exe" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\TaAfsAdmSvr.exe"/>
+ </Component>
+ <Component Id="cmf_TaAfsAccountManager_EXE" Guid="BDFA5B64-2A69-41D5-8260-3DAB3CE9A10B">
+ <File Id="fileTaAfsAccountManager_EXE" Name="TaAfsAcM.exe" LongName="TaAfsAccountManager.exe" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\TaAfsAccountManager.exe">
+ <Shortcut Id="scAcctManager" Directory="dirShortCut" Name="AcctMgr.lnk" LongName="Account Manager.lnk" Description="$(loc.StrAcctMgrDesc)" Icon="ico_AcctManager" IconIndex="0" Show="normal" WorkingDirectory="dirCommon" />
+ </File>
+ </Component>
+ <?ifdef DebugSyms?>
+ <Component Id="cmp_Control_CenterDebug" Guid="B14EEC50-8ADF-4FE4-B00F-431861A5620C">
+ <File Id="fileTaAfsServerManager_PDB" Name="TaAfsSvM.pdb" LongName="TaAfsServerManager.pdb" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\TaAfsServerManager.pdb"/>
+ <File Id="fileTaAfsAdmSvr_PDB" Name="TaAfsAdS.pdb" LongName="TaAfsAdmSvr.pdb" DiskId="1" src="$(var.ServerDir)\TaAfsAdmSvr.pdb"/>
+ <File Id="fileTaAfsAccountManager_PDB" Name="TaAfsAcM.pdb" LongName="TaAfsAccountManager.pdb" DiskId="1" src="$(var.ServerDir)\TaAfsAccountManager.pdb"/>
+ </Component>
+ <?endif?>
+ </Directory> <!-- /Control center -->
+
+ <?if $(var.Language) = "en_US"?>
+ <Component Id="efl_Readme_TXT_en_US" Guid="959DC63A-6C67-4B51-9F7D-2CDEE91F0099">
+ <File Id="fileREADME_TXT_en_US" Name="README.txt" LongName="README.txt" DiskId="1" src="$(var.SrcDir)\WINNT\doc\install\Documentation\en_US\README.txt"/>
+ </Component>
+ <?endif?>
+
+ <?if $(var.Language) = "zh_TW"?>
+ <Component Id="efl_Readme_TXT_zh_TW" Guid="BF25CD95-7BCD-4B0C-9999-B246199236F6">
+ <File Id="fileREADME_TXT_zh_TW" Name="README.txt" LongName="README.txt" DiskId="1" src="$(var.SrcDir)\WINNT\doc\install\Documentation\zh_TW\README.txt"/>
+ </Component>
+ <?endif?>
+
+ <?if $(var.Language) = "de_DE"?>
+ <Component Id="efl_Readme_TXT_de_DE" Guid="5F1433F0-C57D-46C8-857B-4265B95CEF24">
+ <File Id="fileREADME_TXT_de_DE" Name="README.txt" LongName="README.txt" DiskId="1" src="$(var.SrcDir)\WINNT\doc\install\Documentation\de_DE\README.txt"/>
+ </Component>
+ <?endif?>
+
+ <?if $(var.Language) = "es_ES"?>
+ <Component Id="efl_Readme_TXT_es_ES" Guid="8B0C573E-B33E-4EC5-8B3B-C08347FFAB79">
+ <File Id="fileREADME_TXT_es_ES" Name="README.txt" LongName="README.txt" DiskId="1" src="$(var.SrcDir)\WINNT\doc\install\Documentation\es_ES\README.txt"/>
+ </Component>
+ <?endif?>
+
+ <?if $(var.Language) = "ja_JP"?>
+ <Component Id="efl_Readme_TXT_ja_JP" Guid="5A15925E-00EB-4B00-A5BE-7461EE7D6C95">
+ <File Id="fileREADME_TXT_ja_JP" Name="README.txt" LongName="README.txt" DiskId="1" src="$(var.SrcDir)\WINNT\doc\install\Documentation\ja_JP\README.txt"/>
+ </Component>
+ <?endif?>
+
+ <?if $(var.Language) = "ko_KR"?>
+ <Component Id="efl_Readme_TXT_ko_KR" Guid="715D4A97-6356-41E8-8660-76D74DC88495">
+ <File Id="fileREADME_TXT_ko_KR" Name="README.txt" LongName="README.txt" DiskId="1" src="$(var.SrcDir)\WINNT\doc\install\Documentation\ko_KR\README.txt"/>
+ </Component>
+ <?endif?>
+
+ <?if $(var.Language) = "pt_BR"?>
+ <Component Id="efl_Readme_TXT_pt_BR" Guid="03682CAA-66D4-472F-86DE-C508F33AE50C">
+ <File Id="fileREADME_TXT_pt_BR" Name="README.txt" LongName="README.txt" DiskId="1" src="$(var.SrcDir)\WINNT\doc\install\Documentation\pt_BR\README.txt"/>
+ </Component>
+ <?endif?>
+
+ <?if $(var.Language) = "zh_CN"?>
+ <Component Id="efl_Readme_TXT_zh_CN" Guid="6D1DD8B0-0D61-4BC4-976B-F72E087F83D4">
+ <File Id="fileREADME_TXT_zh_CN" Name="README.txt" LongName="README.txt" DiskId="1" src="$(var.SrcDir)\WINNT\doc\install\Documentation\zh_CN\README.txt"/>
+ </Component>
+ <?endif?>
+
+ <Directory Id="dirDocumentation" Name="Docum" LongName="Documentation" SourceName=".">
+ <!-- The following directory and everything below it is language dependent. -->
+ <Directory Id="dirDoc_$(var.Language)" Name="$(var.Language)" LongName="$(var.Language)" SourceName=".">
+ <Directory Id="dirHtml_$(var.Language)" Name="Html" LongName="Html" SourceName="." src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\">
+ <Component Id="cmf_index2_HTM_$(var.Language)" Guid="$(var.DocHtmlIndexGuid)">
+ <File Id="fileindex2_HTM_$(var.Language)" Name="index.htm" LongName="index.htm" KeyPath="yes" DiskId="1">
+ <Shortcut Id="scDoc_$(var.Language)" Directory="dirShortCut" Name="Doc$(var.Language).lnk" LongName="Documentation ($(var.Language)).lnk" Description="$(loc.StrDocLnkDesc)" Icon="ico_Help" IconIndex="0" Show="normal" WorkingDirectory="dirCommon" />
+ </File>
+ </Component>
+ <Component Id="efl_DocHtml_$(var.Language)" Guid="$(var.DocHtmlGuid)">
+ <File Id="filebanner_GIF_$(var.Language)" Name="banner.gif" LongName="banner.gif" DiskId="1" />
+ <File Id="filebooks_GIF_$(var.Language)" Name="books.gif" LongName="books.gif" DiskId="1" />
+ <File Id="filebot_GIF_$(var.Language)" Name="bot.gif" LongName="bot.gif" DiskId="1" />
+ <File Id="fileindex_GIF_$(var.Language)" Name="index.gif" LongName="index.gif" DiskId="1" />
+ <File Id="filenext_GIF_$(var.Language)" Name="next.gif" LongName="next.gif" DiskId="1" />
+ <File Id="fileprev_GIF_$(var.Language)" Name="prev.gif" LongName="prev.gif" DiskId="1" />
+ <File Id="filetoc_GIF_$(var.Language)" Name="toc.gif" LongName="toc.gif" DiskId="1" />
+ <File Id="filetop_GIF_$(var.Language)" Name="top.gif" LongName="top.gif" DiskId="1" />
+ <File Id="file$(var.Language)_RTF" Name="$(var.Language).rtf" LongName="$(var.Language).rtf" KeyPath="yes" DiskId="1" src="$(var.SrcDir)\WINNT\license\lang\$(var.Language).rtf"/>
+ </Component>
+ <Directory Id="dirCmdRef_$(var.Language)" Name="CmdRef" LongName="CmdRef" SourceName="." src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\CmdRef\">
+ <Component Id="cmp_Cmd_Ref_$(var.Language)" Guid="$(var.DocHtmlCmdRefGuid)">
+ <File Id="fileauarf000_HTM_$(var.Language)" Name="auarf000.htm" LongName="auarf000.htm" KeyPath="yes" DiskId="1" />
+ <File Id="fileauarf002_HTM_$(var.Language)" Name="auarf002.htm" LongName="auarf002.htm" DiskId="1" />
+ <File Id="fileauarf003_HTM_$(var.Language)" Name="auarf003.htm" LongName="auarf003.htm" DiskId="1" />
+ <File Id="fileauarf004_HTM_$(var.Language)" Name="auarf004.htm" LongName="auarf004.htm" DiskId="1" />
+ <File Id="fileauarf005_HTM_$(var.Language)" Name="auarf005.htm" LongName="auarf005.htm" DiskId="1" />
+ <File Id="fileauarf006_HTM_$(var.Language)" Name="auarf006.htm" LongName="auarf006.htm" DiskId="1" />
+ <File Id="fileauarf007_HTM_$(var.Language)" Name="auarf007.htm" LongName="auarf007.htm" DiskId="1" />
+ <File Id="fileauarf008_HTM_$(var.Language)" Name="auarf008.htm" LongName="auarf008.htm" DiskId="1" />
+ <File Id="fileauarf009_HTM_$(var.Language)" Name="auarf009.htm" LongName="auarf009.htm" DiskId="1" />
+ <File Id="fileauarf010_HTM_$(var.Language)" Name="auarf010.htm" LongName="auarf010.htm" DiskId="1" />
+ <File Id="fileauarf011_HTM_$(var.Language)" Name="auarf011.htm" LongName="auarf011.htm" DiskId="1" />
+ <File Id="fileauarf012_HTM_$(var.Language)" Name="auarf012.htm" LongName="auarf012.htm" DiskId="1" />
+ <File Id="fileauarf013_HTM_$(var.Language)" Name="auarf013.htm" LongName="auarf013.htm" DiskId="1" />
+ <File Id="fileauarf014_HTM_$(var.Language)" Name="auarf014.htm" LongName="auarf014.htm" DiskId="1" />
+ <File Id="fileauarf015_HTM_$(var.Language)" Name="auarf015.htm" LongName="auarf015.htm" DiskId="1" />
+ <File Id="fileauarf016_HTM_$(var.Language)" Name="auarf016.htm" LongName="auarf016.htm" DiskId="1" />
+ <File Id="fileauarf017_HTM_$(var.Language)" Name="auarf017.htm" LongName="auarf017.htm" DiskId="1" />
+ <File Id="fileauarf018_HTM_$(var.Language)" Name="auarf018.htm" LongName="auarf018.htm" DiskId="1" />
+ <File Id="fileauarf019_HTM_$(var.Language)" Name="auarf019.htm" LongName="auarf019.htm" DiskId="1" />
+ <File Id="fileauarf020_HTM_$(var.Language)" Name="auarf020.htm" LongName="auarf020.htm" DiskId="1" />
+ <File Id="fileauarf021_HTM_$(var.Language)" Name="auarf021.htm" LongName="auarf021.htm" DiskId="1" />
+ <File Id="fileauarf022_HTM_$(var.Language)" Name="auarf022.htm" LongName="auarf022.htm" DiskId="1" />
+ <File Id="fileauarf023_HTM_$(var.Language)" Name="auarf023.htm" LongName="auarf023.htm" DiskId="1" />
+ <File Id="fileauarf024_HTM_$(var.Language)" Name="auarf024.htm" LongName="auarf024.htm" DiskId="1" />
+ <File Id="fileauarf025_HTM_$(var.Language)" Name="auarf025.htm" LongName="auarf025.htm" DiskId="1" />
+ <File Id="fileauarf026_HTM_$(var.Language)" Name="auarf026.htm" LongName="auarf026.htm" DiskId="1" />
+ <File Id="fileauarf027_HTM_$(var.Language)" Name="auarf027.htm" LongName="auarf027.htm" DiskId="1" />
+ <File Id="fileauarf028_HTM_$(var.Language)" Name="auarf028.htm" LongName="auarf028.htm" DiskId="1" />
+ <File Id="fileauarf029_HTM_$(var.Language)" Name="auarf029.htm" LongName="auarf029.htm" DiskId="1" />
+ <File Id="fileauarf030_HTM_$(var.Language)" Name="auarf030.htm" LongName="auarf030.htm" DiskId="1" />
+ <File Id="fileauarf031_HTM_$(var.Language)" Name="auarf031.htm" LongName="auarf031.htm" DiskId="1" />
+ <File Id="fileauarf032_HTM_$(var.Language)" Name="auarf032.htm" LongName="auarf032.htm" DiskId="1" />
+ <File Id="fileauarf033_HTM_$(var.Language)" Name="auarf033.htm" LongName="auarf033.htm" DiskId="1" />
+ <File Id="fileauarf034_HTM_$(var.Language)" Name="auarf034.htm" LongName="auarf034.htm" DiskId="1" />
+ <File Id="fileauarf035_HTM_$(var.Language)" Name="auarf035.htm" LongName="auarf035.htm" DiskId="1" />
+ <File Id="fileauarf036_HTM_$(var.Language)" Name="auarf036.htm" LongName="auarf036.htm" DiskId="1" />
+ <File Id="fileauarf037_HTM_$(var.Language)" Name="auarf037.htm" LongName="auarf037.htm" DiskId="1" />
+ <File Id="fileauarf038_HTM_$(var.Language)" Name="auarf038.htm" LongName="auarf038.htm" DiskId="1" />
+ <File Id="fileauarf039_HTM_$(var.Language)" Name="auarf039.htm" LongName="auarf039.htm" DiskId="1" />
+ <File Id="fileauarf040_HTM_$(var.Language)" Name="auarf040.htm" LongName="auarf040.htm" DiskId="1" />
+ <File Id="fileauarf041_HTM_$(var.Language)" Name="auarf041.htm" LongName="auarf041.htm" DiskId="1" />
+ <File Id="fileauarf042_HTM_$(var.Language)" Name="auarf042.htm" LongName="auarf042.htm" DiskId="1" />
+ <File Id="fileauarf043_HTM_$(var.Language)" Name="auarf043.htm" LongName="auarf043.htm" DiskId="1" />
+ <File Id="fileauarf044_HTM_$(var.Language)" Name="auarf044.htm" LongName="auarf044.htm" DiskId="1" />
+ <File Id="fileauarf045_HTM_$(var.Language)" Name="auarf045.htm" LongName="auarf045.htm" DiskId="1" />
+ <File Id="fileauarf046_HTM_$(var.Language)" Name="auarf046.htm" LongName="auarf046.htm" DiskId="1" />
+ <File Id="fileauarf047_HTM_$(var.Language)" Name="auarf047.htm" LongName="auarf047.htm" DiskId="1" />
+ <File Id="fileauarf048_HTM_$(var.Language)" Name="auarf048.htm" LongName="auarf048.htm" DiskId="1" />
+ <File Id="fileauarf049_HTM_$(var.Language)" Name="auarf049.htm" LongName="auarf049.htm" DiskId="1" />
+ <File Id="fileauarf050_HTM_$(var.Language)" Name="auarf050.htm" LongName="auarf050.htm" DiskId="1" />
+ <File Id="fileauarf051_HTM_$(var.Language)" Name="auarf051.htm" LongName="auarf051.htm" DiskId="1" />
+ <File Id="fileauarf052_HTM_$(var.Language)" Name="auarf052.htm" LongName="auarf052.htm" DiskId="1" />
+ <File Id="fileauarf053_HTM_$(var.Language)" Name="auarf053.htm" LongName="auarf053.htm" DiskId="1" />
+ <File Id="fileauarf054_HTM_$(var.Language)" Name="auarf054.htm" LongName="auarf054.htm" DiskId="1" />
+ <File Id="fileauarf055_HTM_$(var.Language)" Name="auarf055.htm" LongName="auarf055.htm" DiskId="1" />
+ <File Id="fileauarf056_HTM_$(var.Language)" Name="auarf056.htm" LongName="auarf056.htm" DiskId="1" />
+ <File Id="fileauarf057_HTM_$(var.Language)" Name="auarf057.htm" LongName="auarf057.htm" DiskId="1" />
+ <File Id="fileauarf058_HTM_$(var.Language)" Name="auarf058.htm" LongName="auarf058.htm" DiskId="1" />
+ <File Id="fileauarf059_HTM_$(var.Language)" Name="auarf059.htm" LongName="auarf059.htm" DiskId="1" />
+ <File Id="fileauarf060_HTM_$(var.Language)" Name="auarf060.htm" LongName="auarf060.htm" DiskId="1" />
+ <File Id="fileauarf061_HTM_$(var.Language)" Name="auarf061.htm" LongName="auarf061.htm" DiskId="1" />
+ <File Id="fileauarf062_HTM_$(var.Language)" Name="auarf062.htm" LongName="auarf062.htm" DiskId="1" />
+ <File Id="fileauarf063_HTM_$(var.Language)" Name="auarf063.htm" LongName="auarf063.htm" DiskId="1" />
+ <File Id="fileauarf064_HTM_$(var.Language)" Name="auarf064.htm" LongName="auarf064.htm" DiskId="1" />
+ <File Id="fileauarf065_HTM_$(var.Language)" Name="auarf065.htm" LongName="auarf065.htm" DiskId="1" />
+ <File Id="fileauarf066_HTM_$(var.Language)" Name="auarf066.htm" LongName="auarf066.htm" DiskId="1" />
+ <File Id="fileauarf067_HTM_$(var.Language)" Name="auarf067.htm" LongName="auarf067.htm" DiskId="1" />
+ <File Id="fileauarf068_HTM_$(var.Language)" Name="auarf068.htm" LongName="auarf068.htm" DiskId="1" />
+ <File Id="fileauarf069_HTM_$(var.Language)" Name="auarf069.htm" LongName="auarf069.htm" DiskId="1" />
+ <File Id="fileauarf070_HTM_$(var.Language)" Name="auarf070.htm" LongName="auarf070.htm" DiskId="1" />
+ <File Id="fileauarf071_HTM_$(var.Language)" Name="auarf071.htm" LongName="auarf071.htm" DiskId="1" />
+ <File Id="fileauarf072_HTM_$(var.Language)" Name="auarf072.htm" LongName="auarf072.htm" DiskId="1" />
+ <File Id="fileauarf073_HTM_$(var.Language)" Name="auarf073.htm" LongName="auarf073.htm" DiskId="1" />
+ <File Id="fileauarf074_HTM_$(var.Language)" Name="auarf074.htm" LongName="auarf074.htm" DiskId="1" />
+ <File Id="fileauarf075_HTM_$(var.Language)" Name="auarf075.htm" LongName="auarf075.htm" DiskId="1" />
+ <File Id="fileauarf076_HTM_$(var.Language)" Name="auarf076.htm" LongName="auarf076.htm" DiskId="1" />
+ <File Id="fileauarf077_HTM_$(var.Language)" Name="auarf077.htm" LongName="auarf077.htm" DiskId="1" />
+ <File Id="fileauarf078_HTM_$(var.Language)" Name="auarf078.htm" LongName="auarf078.htm" DiskId="1" />
+ <File Id="fileauarf079_HTM_$(var.Language)" Name="auarf079.htm" LongName="auarf079.htm" DiskId="1" />
+ <File Id="fileauarf080_HTM_$(var.Language)" Name="auarf080.htm" LongName="auarf080.htm" DiskId="1" />
+ <File Id="fileauarf081_HTM_$(var.Language)" Name="auarf081.htm" LongName="auarf081.htm" DiskId="1" />
+ <File Id="fileauarf082_HTM_$(var.Language)" Name="auarf082.htm" LongName="auarf082.htm" DiskId="1" />
+ <File Id="fileauarf083_HTM_$(var.Language)" Name="auarf083.htm" LongName="auarf083.htm" DiskId="1" />
+ <File Id="fileauarf084_HTM_$(var.Language)" Name="auarf084.htm" LongName="auarf084.htm" DiskId="1" />
+ <File Id="fileauarf085_HTM_$(var.Language)" Name="auarf085.htm" LongName="auarf085.htm" DiskId="1" />
+ <File Id="fileauarf086_HTM_$(var.Language)" Name="auarf086.htm" LongName="auarf086.htm" DiskId="1" />
+ <File Id="fileauarf087_HTM_$(var.Language)" Name="auarf087.htm" LongName="auarf087.htm" DiskId="1" />
+ <File Id="fileauarf088_HTM_$(var.Language)" Name="auarf088.htm" LongName="auarf088.htm" DiskId="1" />
+ <File Id="fileauarf089_HTM_$(var.Language)" Name="auarf089.htm" LongName="auarf089.htm" DiskId="1" />
+ <File Id="fileauarf090_HTM_$(var.Language)" Name="auarf090.htm" LongName="auarf090.htm" DiskId="1" />
+ <File Id="fileauarf091_HTM_$(var.Language)" Name="auarf091.htm" LongName="auarf091.htm" DiskId="1" />
+ <File Id="fileauarf092_HTM_$(var.Language)" Name="auarf092.htm" LongName="auarf092.htm" DiskId="1" />
+ <File Id="fileauarf093_HTM_$(var.Language)" Name="auarf093.htm" LongName="auarf093.htm" DiskId="1" />
+ <File Id="fileauarf094_HTM_$(var.Language)" Name="auarf094.htm" LongName="auarf094.htm" DiskId="1" />
+ <File Id="fileauarf095_HTM_$(var.Language)" Name="auarf095.htm" LongName="auarf095.htm" DiskId="1" />
+ <File Id="fileauarf096_HTM_$(var.Language)" Name="auarf096.htm" LongName="auarf096.htm" DiskId="1" />
+ <File Id="fileauarf097_HTM_$(var.Language)" Name="auarf097.htm" LongName="auarf097.htm" DiskId="1" />
+ <File Id="fileauarf098_HTM_$(var.Language)" Name="auarf098.htm" LongName="auarf098.htm" DiskId="1" />
+ <File Id="fileauarf099_HTM_$(var.Language)" Name="auarf099.htm" LongName="auarf099.htm" DiskId="1" />
+ <File Id="fileauarf100_HTM_$(var.Language)" Name="auarf100.htm" LongName="auarf100.htm" DiskId="1" />
+ <File Id="fileauarf101_HTM_$(var.Language)" Name="auarf101.htm" LongName="auarf101.htm" DiskId="1" />
+ <File Id="fileauarf102_HTM_$(var.Language)" Name="auarf102.htm" LongName="auarf102.htm" DiskId="1" />
+ <File Id="fileauarf103_HTM_$(var.Language)" Name="auarf103.htm" LongName="auarf103.htm" DiskId="1" />
+ <File Id="fileauarf104_HTM_$(var.Language)" Name="auarf104.htm" LongName="auarf104.htm" DiskId="1" />
+ <File Id="fileauarf105_HTM_$(var.Language)" Name="auarf105.htm" LongName="auarf105.htm" DiskId="1" />
+ <File Id="fileauarf106_HTM_$(var.Language)" Name="auarf106.htm" LongName="auarf106.htm" DiskId="1" />
+ <File Id="fileauarf107_HTM_$(var.Language)" Name="auarf107.htm" LongName="auarf107.htm" DiskId="1" />
+ <File Id="fileauarf108_HTM_$(var.Language)" Name="auarf108.htm" LongName="auarf108.htm" DiskId="1" />
+ <File Id="fileauarf109_HTM_$(var.Language)" Name="auarf109.htm" LongName="auarf109.htm" DiskId="1" />
+ <File Id="fileauarf110_HTM_$(var.Language)" Name="auarf110.htm" LongName="auarf110.htm" DiskId="1" />
+ <File Id="fileauarf111_HTM_$(var.Language)" Name="auarf111.htm" LongName="auarf111.htm" DiskId="1" />
+ <File Id="fileauarf112_HTM_$(var.Language)" Name="auarf112.htm" LongName="auarf112.htm" DiskId="1" />
+ <File Id="fileauarf113_HTM_$(var.Language)" Name="auarf113.htm" LongName="auarf113.htm" DiskId="1" />
+ <File Id="fileauarf114_HTM_$(var.Language)" Name="auarf114.htm" LongName="auarf114.htm" DiskId="1" />
+ <File Id="fileauarf115_HTM_$(var.Language)" Name="auarf115.htm" LongName="auarf115.htm" DiskId="1" />
+ <File Id="fileauarf116_HTM_$(var.Language)" Name="auarf116.htm" LongName="auarf116.htm" DiskId="1" />
+ <File Id="fileauarf117_HTM_$(var.Language)" Name="auarf117.htm" LongName="auarf117.htm" DiskId="1" />
+ <File Id="fileauarf118_HTM_$(var.Language)" Name="auarf118.htm" LongName="auarf118.htm" DiskId="1" />
+ <File Id="fileauarf119_HTM_$(var.Language)" Name="auarf119.htm" LongName="auarf119.htm" DiskId="1" />
+ <File Id="fileauarf120_HTM_$(var.Language)" Name="auarf120.htm" LongName="auarf120.htm" DiskId="1" />
+ <File Id="fileauarf121_HTM_$(var.Language)" Name="auarf121.htm" LongName="auarf121.htm" DiskId="1" />
+ <File Id="fileauarf122_HTM_$(var.Language)" Name="auarf122.htm" LongName="auarf122.htm" DiskId="1" />
+ <File Id="fileauarf123_HTM_$(var.Language)" Name="auarf123.htm" LongName="auarf123.htm" DiskId="1" />
+ <File Id="fileauarf124_HTM_$(var.Language)" Name="auarf124.htm" LongName="auarf124.htm" DiskId="1" />
+ <File Id="fileauarf125_HTM_$(var.Language)" Name="auarf125.htm" LongName="auarf125.htm" DiskId="1" />
+ <File Id="fileauarf126_HTM_$(var.Language)" Name="auarf126.htm" LongName="auarf126.htm" DiskId="1" />
+ <File Id="fileauarf127_HTM_$(var.Language)" Name="auarf127.htm" LongName="auarf127.htm" DiskId="1" />
+ <File Id="fileauarf128_HTM_$(var.Language)" Name="auarf128.htm" LongName="auarf128.htm" DiskId="1" />
+ <File Id="fileauarf129_HTM_$(var.Language)" Name="auarf129.htm" LongName="auarf129.htm" DiskId="1" />
+ <File Id="fileauarf130_HTM_$(var.Language)" Name="auarf130.htm" LongName="auarf130.htm" DiskId="1" />
+ <File Id="fileauarf131_HTM_$(var.Language)" Name="auarf131.htm" LongName="auarf131.htm" DiskId="1" />
+ <File Id="fileauarf132_HTM_$(var.Language)" Name="auarf132.htm" LongName="auarf132.htm" DiskId="1" />
+ <File Id="fileauarf133_HTM_$(var.Language)" Name="auarf133.htm" LongName="auarf133.htm" DiskId="1" />
+ <File Id="fileauarf134_HTM_$(var.Language)" Name="auarf134.htm" LongName="auarf134.htm" DiskId="1" />
+ <File Id="fileauarf135_HTM_$(var.Language)" Name="auarf135.htm" LongName="auarf135.htm" DiskId="1" />
+ <File Id="fileauarf136_HTM_$(var.Language)" Name="auarf136.htm" LongName="auarf136.htm" DiskId="1" />
+ <File Id="fileauarf137_HTM_$(var.Language)" Name="auarf137.htm" LongName="auarf137.htm" DiskId="1" />
+ <File Id="fileauarf138_HTM_$(var.Language)" Name="auarf138.htm" LongName="auarf138.htm" DiskId="1" />
+ <File Id="fileauarf139_HTM_$(var.Language)" Name="auarf139.htm" LongName="auarf139.htm" DiskId="1" />
+ <File Id="fileauarf140_HTM_$(var.Language)" Name="auarf140.htm" LongName="auarf140.htm" DiskId="1" />
+ <File Id="fileauarf141_HTM_$(var.Language)" Name="auarf141.htm" LongName="auarf141.htm" DiskId="1" />
+ <File Id="fileauarf142_HTM_$(var.Language)" Name="auarf142.htm" LongName="auarf142.htm" DiskId="1" />
+ <File Id="fileauarf143_HTM_$(var.Language)" Name="auarf143.htm" LongName="auarf143.htm" DiskId="1" />
+ <File Id="fileauarf144_HTM_$(var.Language)" Name="auarf144.htm" LongName="auarf144.htm" DiskId="1" />
+ <File Id="fileauarf145_HTM_$(var.Language)" Name="auarf145.htm" LongName="auarf145.htm" DiskId="1" />
+ <File Id="fileauarf146_HTM_$(var.Language)" Name="auarf146.htm" LongName="auarf146.htm" DiskId="1" />
+ <File Id="fileauarf147_HTM_$(var.Language)" Name="auarf147.htm" LongName="auarf147.htm" DiskId="1" />
+ <File Id="fileauarf148_HTM_$(var.Language)" Name="auarf148.htm" LongName="auarf148.htm" DiskId="1" />
+ <File Id="fileauarf149_HTM_$(var.Language)" Name="auarf149.htm" LongName="auarf149.htm" DiskId="1" />
+ <File Id="fileauarf150_HTM_$(var.Language)" Name="auarf150.htm" LongName="auarf150.htm" DiskId="1" />
+ <File Id="fileauarf151_HTM_$(var.Language)" Name="auarf151.htm" LongName="auarf151.htm" DiskId="1" />
+ <File Id="fileauarf152_HTM_$(var.Language)" Name="auarf152.htm" LongName="auarf152.htm" DiskId="1" />
+ <File Id="fileauarf153_HTM_$(var.Language)" Name="auarf153.htm" LongName="auarf153.htm" DiskId="1" />
+ <File Id="fileauarf154_HTM_$(var.Language)" Name="auarf154.htm" LongName="auarf154.htm" DiskId="1" />
+ <File Id="fileauarf155_HTM_$(var.Language)" Name="auarf155.htm" LongName="auarf155.htm" DiskId="1" />
+ <File Id="fileauarf156_HTM_$(var.Language)" Name="auarf156.htm" LongName="auarf156.htm" DiskId="1" />
+ <File Id="fileauarf157_HTM_$(var.Language)" Name="auarf157.htm" LongName="auarf157.htm" DiskId="1" />
+ <File Id="fileauarf158_HTM_$(var.Language)" Name="auarf158.htm" LongName="auarf158.htm" DiskId="1" />
+ <File Id="fileauarf159_HTM_$(var.Language)" Name="auarf159.htm" LongName="auarf159.htm" DiskId="1" />
+ <File Id="fileauarf160_HTM_$(var.Language)" Name="auarf160.htm" LongName="auarf160.htm" DiskId="1" />
+ <File Id="fileauarf161_HTM_$(var.Language)" Name="auarf161.htm" LongName="auarf161.htm" DiskId="1" />
+ <File Id="fileauarf162_HTM_$(var.Language)" Name="auarf162.htm" LongName="auarf162.htm" DiskId="1" />
+ <File Id="fileauarf163_HTM_$(var.Language)" Name="auarf163.htm" LongName="auarf163.htm" DiskId="1" />
+ <File Id="fileauarf164_HTM_$(var.Language)" Name="auarf164.htm" LongName="auarf164.htm" DiskId="1" />
+ <File Id="fileauarf165_HTM_$(var.Language)" Name="auarf165.htm" LongName="auarf165.htm" DiskId="1" />
+ <File Id="fileauarf166_HTM_$(var.Language)" Name="auarf166.htm" LongName="auarf166.htm" DiskId="1" />
+ <File Id="fileauarf167_HTM_$(var.Language)" Name="auarf167.htm" LongName="auarf167.htm" DiskId="1" />
+ <File Id="fileauarf168_HTM_$(var.Language)" Name="auarf168.htm" LongName="auarf168.htm" DiskId="1" />
+ <File Id="fileauarf169_HTM_$(var.Language)" Name="auarf169.htm" LongName="auarf169.htm" DiskId="1" />
+ <File Id="fileauarf170_HTM_$(var.Language)" Name="auarf170.htm" LongName="auarf170.htm" DiskId="1" />
+ <File Id="fileauarf171_HTM_$(var.Language)" Name="auarf171.htm" LongName="auarf171.htm" DiskId="1" />
+ <File Id="fileauarf172_HTM_$(var.Language)" Name="auarf172.htm" LongName="auarf172.htm" DiskId="1" />
+ <File Id="fileauarf173_HTM_$(var.Language)" Name="auarf173.htm" LongName="auarf173.htm" DiskId="1" />
+ <File Id="fileauarf174_HTM_$(var.Language)" Name="auarf174.htm" LongName="auarf174.htm" DiskId="1" />
+ <File Id="fileauarf175_HTM_$(var.Language)" Name="auarf175.htm" LongName="auarf175.htm" DiskId="1" />
+ <File Id="fileauarf176_HTM_$(var.Language)" Name="auarf176.htm" LongName="auarf176.htm" DiskId="1" />
+ <File Id="fileauarf177_HTM_$(var.Language)" Name="auarf177.htm" LongName="auarf177.htm" DiskId="1" />
+ <File Id="fileauarf178_HTM_$(var.Language)" Name="auarf178.htm" LongName="auarf178.htm" DiskId="1" />
+ <File Id="fileauarf179_HTM_$(var.Language)" Name="auarf179.htm" LongName="auarf179.htm" DiskId="1" />
+ <File Id="fileauarf180_HTM_$(var.Language)" Name="auarf180.htm" LongName="auarf180.htm" DiskId="1" />
+ <File Id="fileauarf181_HTM_$(var.Language)" Name="auarf181.htm" LongName="auarf181.htm" DiskId="1" />
+ <File Id="fileauarf182_HTM_$(var.Language)" Name="auarf182.htm" LongName="auarf182.htm" DiskId="1" />
+ <File Id="fileauarf183_HTM_$(var.Language)" Name="auarf183.htm" LongName="auarf183.htm" DiskId="1" />
+ <File Id="fileauarf184_HTM_$(var.Language)" Name="auarf184.htm" LongName="auarf184.htm" DiskId="1" />
+ <File Id="fileauarf185_HTM_$(var.Language)" Name="auarf185.htm" LongName="auarf185.htm" DiskId="1" />
+ <File Id="fileauarf186_HTM_$(var.Language)" Name="auarf186.htm" LongName="auarf186.htm" DiskId="1" />
+ <File Id="fileauarf187_HTM_$(var.Language)" Name="auarf187.htm" LongName="auarf187.htm" DiskId="1" />
+ <File Id="fileauarf188_HTM_$(var.Language)" Name="auarf188.htm" LongName="auarf188.htm" DiskId="1" />
+ <File Id="fileauarf189_HTM_$(var.Language)" Name="auarf189.htm" LongName="auarf189.htm" DiskId="1" />
+ <File Id="fileauarf190_HTM_$(var.Language)" Name="auarf190.htm" LongName="auarf190.htm" DiskId="1" />
+ <File Id="fileauarf191_HTM_$(var.Language)" Name="auarf191.htm" LongName="auarf191.htm" DiskId="1" />
+ <File Id="fileauarf192_HTM_$(var.Language)" Name="auarf192.htm" LongName="auarf192.htm" DiskId="1" />
+ <File Id="fileauarf193_HTM_$(var.Language)" Name="auarf193.htm" LongName="auarf193.htm" DiskId="1" />
+ <File Id="fileauarf194_HTM_$(var.Language)" Name="auarf194.htm" LongName="auarf194.htm" DiskId="1" />
+ <File Id="fileauarf195_HTM_$(var.Language)" Name="auarf195.htm" LongName="auarf195.htm" DiskId="1" />
+ <File Id="fileauarf196_HTM_$(var.Language)" Name="auarf196.htm" LongName="auarf196.htm" DiskId="1" />
+ <File Id="fileauarf197_HTM_$(var.Language)" Name="auarf197.htm" LongName="auarf197.htm" DiskId="1" />
+ <File Id="fileauarf198_HTM_$(var.Language)" Name="auarf198.htm" LongName="auarf198.htm" DiskId="1" />
+ <File Id="fileauarf199_HTM_$(var.Language)" Name="auarf199.htm" LongName="auarf199.htm" DiskId="1" />
+ <File Id="fileauarf200_HTM_$(var.Language)" Name="auarf200.htm" LongName="auarf200.htm" DiskId="1" />
+ <File Id="fileauarf201_HTM_$(var.Language)" Name="auarf201.htm" LongName="auarf201.htm" DiskId="1" />
+ <File Id="fileauarf202_HTM_$(var.Language)" Name="auarf202.htm" LongName="auarf202.htm" DiskId="1" />
+ <File Id="fileauarf203_HTM_$(var.Language)" Name="auarf203.htm" LongName="auarf203.htm" DiskId="1" />
+ <File Id="fileauarf204_HTM_$(var.Language)" Name="auarf204.htm" LongName="auarf204.htm" DiskId="1" />
+ <File Id="fileauarf205_HTM_$(var.Language)" Name="auarf205.htm" LongName="auarf205.htm" DiskId="1" />
+ <File Id="fileauarf206_HTM_$(var.Language)" Name="auarf206.htm" LongName="auarf206.htm" DiskId="1" />
+ <File Id="fileauarf207_HTM_$(var.Language)" Name="auarf207.htm" LongName="auarf207.htm" DiskId="1" />
+ <File Id="fileauarf208_HTM_$(var.Language)" Name="auarf208.htm" LongName="auarf208.htm" DiskId="1" />
+ <File Id="fileauarf209_HTM_$(var.Language)" Name="auarf209.htm" LongName="auarf209.htm" DiskId="1" />
+ <File Id="fileauarf210_HTM_$(var.Language)" Name="auarf210.htm" LongName="auarf210.htm" DiskId="1" />
+ <File Id="fileauarf211_HTM_$(var.Language)" Name="auarf211.htm" LongName="auarf211.htm" DiskId="1" />
+ <File Id="fileauarf212_HTM_$(var.Language)" Name="auarf212.htm" LongName="auarf212.htm" DiskId="1" />
+ <File Id="fileauarf213_HTM_$(var.Language)" Name="auarf213.htm" LongName="auarf213.htm" DiskId="1" />
+ <File Id="fileauarf214_HTM_$(var.Language)" Name="auarf214.htm" LongName="auarf214.htm" DiskId="1" />
+ <File Id="fileauarf215_HTM_$(var.Language)" Name="auarf215.htm" LongName="auarf215.htm" DiskId="1" />
+ <File Id="fileauarf216_HTM_$(var.Language)" Name="auarf216.htm" LongName="auarf216.htm" DiskId="1" />
+ <File Id="fileauarf217_HTM_$(var.Language)" Name="auarf217.htm" LongName="auarf217.htm" DiskId="1" />
+ <File Id="fileauarf218_HTM_$(var.Language)" Name="auarf218.htm" LongName="auarf218.htm" DiskId="1" />
+ <File Id="fileauarf219_HTM_$(var.Language)" Name="auarf219.htm" LongName="auarf219.htm" DiskId="1" />
+ <File Id="fileauarf220_HTM_$(var.Language)" Name="auarf220.htm" LongName="auarf220.htm" DiskId="1" />
+ <File Id="fileauarf221_HTM_$(var.Language)" Name="auarf221.htm" LongName="auarf221.htm" DiskId="1" />
+ <File Id="fileauarf222_HTM_$(var.Language)" Name="auarf222.htm" LongName="auarf222.htm" DiskId="1" />
+ <File Id="fileauarf223_HTM_$(var.Language)" Name="auarf223.htm" LongName="auarf223.htm" DiskId="1" />
+ <File Id="fileauarf224_HTM_$(var.Language)" Name="auarf224.htm" LongName="auarf224.htm" DiskId="1" />
+ <File Id="fileauarf225_HTM_$(var.Language)" Name="auarf225.htm" LongName="auarf225.htm" DiskId="1" />
+ <File Id="fileauarf226_HTM_$(var.Language)" Name="auarf226.htm" LongName="auarf226.htm" DiskId="1" />
+ <File Id="fileauarf227_HTM_$(var.Language)" Name="auarf227.htm" LongName="auarf227.htm" DiskId="1" />
+ <File Id="fileauarf228_HTM_$(var.Language)" Name="auarf228.htm" LongName="auarf228.htm" DiskId="1" />
+ <File Id="fileauarf229_HTM_$(var.Language)" Name="auarf229.htm" LongName="auarf229.htm" DiskId="1" />
+ <File Id="fileauarf230_HTM_$(var.Language)" Name="auarf230.htm" LongName="auarf230.htm" DiskId="1" />
+ <File Id="fileauarf231_HTM_$(var.Language)" Name="auarf231.htm" LongName="auarf231.htm" DiskId="1" />
+ <File Id="fileauarf232_HTM_$(var.Language)" Name="auarf232.htm" LongName="auarf232.htm" DiskId="1" />
+ <File Id="fileauarf233_HTM_$(var.Language)" Name="auarf233.htm" LongName="auarf233.htm" DiskId="1" />
+ <File Id="fileauarf234_HTM_$(var.Language)" Name="auarf234.htm" LongName="auarf234.htm" DiskId="1" />
+ <File Id="fileauarf235_HTM_$(var.Language)" Name="auarf235.htm" LongName="auarf235.htm" DiskId="1" />
+ <File Id="fileauarf236_HTM_$(var.Language)" Name="auarf236.htm" LongName="auarf236.htm" DiskId="1" />
+ <File Id="fileauarf237_HTM_$(var.Language)" Name="auarf237.htm" LongName="auarf237.htm" DiskId="1" />
+ <File Id="fileauarf238_HTM_$(var.Language)" Name="auarf238.htm" LongName="auarf238.htm" DiskId="1" />
+ <File Id="fileauarf239_HTM_$(var.Language)" Name="auarf239.htm" LongName="auarf239.htm" DiskId="1" />
+ <File Id="fileauarf240_HTM_$(var.Language)" Name="auarf240.htm" LongName="auarf240.htm" DiskId="1" />
+ <File Id="fileauarf241_HTM_$(var.Language)" Name="auarf241.htm" LongName="auarf241.htm" DiskId="1" />
+ <File Id="fileauarf242_HTM_$(var.Language)" Name="auarf242.htm" LongName="auarf242.htm" DiskId="1" />
+ <File Id="fileauarf243_HTM_$(var.Language)" Name="auarf243.htm" LongName="auarf243.htm" DiskId="1" />
+ <File Id="fileauarf244_HTM_$(var.Language)" Name="auarf244.htm" LongName="auarf244.htm" DiskId="1" />
+ <File Id="fileauarf245_HTM_$(var.Language)" Name="auarf245.htm" LongName="auarf245.htm" DiskId="1" />
+ <File Id="fileauarf246_HTM_$(var.Language)" Name="auarf246.htm" LongName="auarf246.htm" DiskId="1" />
+ <File Id="fileauarf247_HTM_$(var.Language)" Name="auarf247.htm" LongName="auarf247.htm" DiskId="1" />
+ <File Id="fileauarf248_HTM_$(var.Language)" Name="auarf248.htm" LongName="auarf248.htm" DiskId="1" />
+ <File Id="fileauarf249_HTM_$(var.Language)" Name="auarf249.htm" LongName="auarf249.htm" DiskId="1" />
+ <File Id="fileauarf250_HTM_$(var.Language)" Name="auarf250.htm" LongName="auarf250.htm" DiskId="1" />
+ <File Id="fileauarf251_HTM_$(var.Language)" Name="auarf251.htm" LongName="auarf251.htm" DiskId="1" />
+ <File Id="fileauarf252_HTM_$(var.Language)" Name="auarf252.htm" LongName="auarf252.htm" DiskId="1" />
+ <File Id="fileauarf253_HTM_$(var.Language)" Name="auarf253.htm" LongName="auarf253.htm" DiskId="1" />
+ <File Id="fileauarf254_HTM_$(var.Language)" Name="auarf254.htm" LongName="auarf254.htm" DiskId="1" />
+ <File Id="fileauarf255_HTM_$(var.Language)" Name="auarf255.htm" LongName="auarf255.htm" DiskId="1" />
+ <File Id="fileauarf256_HTM_$(var.Language)" Name="auarf256.htm" LongName="auarf256.htm" DiskId="1" />
+ <File Id="fileauarf257_HTM_$(var.Language)" Name="auarf257.htm" LongName="auarf257.htm" DiskId="1" />
+ <File Id="fileauarf258_HTM_$(var.Language)" Name="auarf258.htm" LongName="auarf258.htm" DiskId="1" />
+ <File Id="fileauarf259_HTM_$(var.Language)" Name="auarf259.htm" LongName="auarf259.htm" DiskId="1" />
+ <File Id="fileauarf260_HTM_$(var.Language)" Name="auarf260.htm" LongName="auarf260.htm" DiskId="1" />
+ <File Id="fileauarf261_HTM_$(var.Language)" Name="auarf261.htm" LongName="auarf261.htm" DiskId="1" />
+ <File Id="fileauarf262_HTM_$(var.Language)" Name="auarf262.htm" LongName="auarf262.htm" DiskId="1" />
+ <File Id="fileauarf263_HTM_$(var.Language)" Name="auarf263.htm" LongName="auarf263.htm" DiskId="1" />
+ <File Id="fileauarf264_HTM_$(var.Language)" Name="auarf264.htm" LongName="auarf264.htm" DiskId="1" />
+ <File Id="fileauarf265_HTM_$(var.Language)" Name="auarf265.htm" LongName="auarf265.htm" DiskId="1" />
+ <File Id="fileauarf266_HTM_$(var.Language)" Name="auarf266.htm" LongName="auarf266.htm" DiskId="1" />
+ <File Id="fileauarf267_HTM_$(var.Language)" Name="auarf267.htm" LongName="auarf267.htm" DiskId="1" />
+ <File Id="fileauarf268_HTM_$(var.Language)" Name="auarf268.htm" LongName="auarf268.htm" DiskId="1" />
+ <File Id="fileauarf269_HTM_$(var.Language)" Name="auarf269.htm" LongName="auarf269.htm" DiskId="1" />
+ <File Id="fileauarf270_HTM_$(var.Language)" Name="auarf270.htm" LongName="auarf270.htm" DiskId="1" />
+ <File Id="fileauarf271_HTM_$(var.Language)" Name="auarf271.htm" LongName="auarf271.htm" DiskId="1" />
+ <File Id="fileauarf272_HTM_$(var.Language)" Name="auarf272.htm" LongName="auarf272.htm" DiskId="1" />
+ <File Id="fileauarf273_HTM_$(var.Language)" Name="auarf273.htm" LongName="auarf273.htm" DiskId="1" />
+ <File Id="fileauarf274_HTM_$(var.Language)" Name="auarf274.htm" LongName="auarf274.htm" DiskId="1" />
+ <File Id="fileauarf275_HTM_$(var.Language)" Name="auarf275.htm" LongName="auarf275.htm" DiskId="1" />
+ <File Id="fileauarf276_HTM_$(var.Language)" Name="auarf276.htm" LongName="auarf276.htm" DiskId="1" />
+ <File Id="fileauarf277_HTM_$(var.Language)" Name="auarf277.htm" LongName="auarf277.htm" DiskId="1" />
+ <File Id="fileauarf278_HTM_$(var.Language)" Name="auarf278.htm" LongName="auarf278.htm" DiskId="1" />
+ <File Id="fileauarf279_HTM_$(var.Language)" Name="auarf279.htm" LongName="auarf279.htm" DiskId="1" />
+ <File Id="fileauarf280_HTM_$(var.Language)" Name="auarf280.htm" LongName="auarf280.htm" DiskId="1" />
+ <File Id="fileauarf281_HTM_$(var.Language)" Name="auarf281.htm" LongName="auarf281.htm" DiskId="1" />
+ <File Id="fileauarf282_HTM_$(var.Language)" Name="auarf282.htm" LongName="auarf282.htm" DiskId="1" />
+ <File Id="fileauarf283_HTM_$(var.Language)" Name="auarf283.htm" LongName="auarf283.htm" DiskId="1" />
+ <File Id="fileauarf284_HTM_$(var.Language)" Name="auarf284.htm" LongName="auarf284.htm" DiskId="1" />
+ </Component>
+ </Directory> <!-- CmdRef -->
+ <Directory Id="dirInstallGd_$(var.Language)" Name="InstalGd" LongName="InstallGd" SourceName="." src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\InstallGd\">
+ <Component Id="cmp_Install_Guide_$(var.Language)" Guid="$(var.DocHtmlInstallGuid)">
+ <File Id="fileawqbg000_HTM_$(var.Language)" Name="awqbg000.htm" LongName="awqbg000.htm" KeyPath="yes" DiskId="1" />
+ <File Id="fileawqbg002_HTM_$(var.Language)" Name="awqbg002.htm" LongName="awqbg002.htm" DiskId="1" />
+ <File Id="fileawqbg003_HTM_$(var.Language)" Name="awqbg003.htm" LongName="awqbg003.htm" DiskId="1" />
+ <File Id="fileawqbg004_HTM_$(var.Language)" Name="awqbg004.htm" LongName="awqbg004.htm" DiskId="1" />
+ </Component>
+ </Directory> <!-- InstallGd -->
+ <Directory Id="dirSysAdminGd_$(var.Language)" Name="SysAd" LongName="SysAdminGd" SourceName="." src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\SysAdminGd\">
+ <Component Id="cmp_Sys_Admin_Guide_$(var.Language)" Guid="$(var.DocHtmlSysAdminGuid)">
+ <File Id="fileauagd000_HTM_$(var.Language)" Name="auagd.htm" LongName="auagd000.htm" KeyPath="yes" DiskId="1" />
+ <File Id="fileauagd002_HTM_$(var.Language)" Name="auagd~2.htm" LongName="auagd002.htm" DiskId="1" />
+ <File Id="fileauagd003_HTM_$(var.Language)" Name="auagd~3.htm" LongName="auagd003.htm" DiskId="1" />
+ <File Id="fileauagd004_HTM_$(var.Language)" Name="auagd~4.htm" LongName="auagd004.htm" DiskId="1" />
+ <File Id="fileauagd005_HTM_$(var.Language)" Name="auagd~5.htm" LongName="auagd005.htm" DiskId="1" />
+ <File Id="fileauagd006_HTM_$(var.Language)" Name="auagd~6.htm" LongName="auagd006.htm" DiskId="1" />
+ <File Id="fileauagd007_HTM_$(var.Language)" Name="auagd~7.htm" LongName="auagd007.htm" DiskId="1" />
+ <File Id="fileauagd008_HTM_$(var.Language)" Name="auagd~8.htm" LongName="auagd008.htm" DiskId="1" />
+ <File Id="fileauagd009_HTM_$(var.Language)" Name="auagd~9.htm" LongName="auagd009.htm" DiskId="1" />
+ <File Id="fileauagd010_HTM_$(var.Language)" Name="auagd~10.htm" LongName="auagd010.htm" DiskId="1" />
+ <File Id="fileauagd011_HTM_$(var.Language)" Name="auagd~11.htm" LongName="auagd011.htm" DiskId="1" />
+ <File Id="fileauagd012_HTM_$(var.Language)" Name="auagd~12.htm" LongName="auagd012.htm" DiskId="1" />
+ <File Id="fileauagd013_HTM_$(var.Language)" Name="auagd~13.htm" LongName="auagd013.htm" DiskId="1" />
+ <File Id="fileauagd014_HTM_$(var.Language)" Name="auagd~14.htm" LongName="auagd014.htm" DiskId="1" />
+ <File Id="fileauagd015_HTM_$(var.Language)" Name="auagd~15.htm" LongName="auagd015.htm" DiskId="1" />
+ <File Id="fileauagd016_HTM_$(var.Language)" Name="auagd~16.htm" LongName="auagd016.htm" DiskId="1" />
+ <File Id="fileauagd017_HTM_$(var.Language)" Name="auagd~17.htm" LongName="auagd017.htm" DiskId="1" />
+ <File Id="fileauagd018_HTM_$(var.Language)" Name="auagd~18.htm" LongName="auagd018.htm" DiskId="1" />
+ <File Id="fileauagd019_HTM_$(var.Language)" Name="auagd~19.htm" LongName="auagd019.htm" DiskId="1" />
+ <File Id="fileauagd020_HTM_$(var.Language)" Name="auagd~20.htm" LongName="auagd020.htm" DiskId="1" />
+ <File Id="fileauagd021_HTM_$(var.Language)" Name="auagd~21.htm" LongName="auagd021.htm" DiskId="1" />
+ <File Id="fileauagd022_HTM_$(var.Language)" Name="auagd~22.htm" LongName="auagd022.htm" DiskId="1" />
+ <File Id="fileauagd023_HTM_$(var.Language)" Name="auagd~23.htm" LongName="auagd023.htm" DiskId="1" />
+ <File Id="fileauagd024_HTM_$(var.Language)" Name="auagd~24.htm" LongName="auagd024.htm" DiskId="1" />
+ <File Id="fileauagd025_HTM_$(var.Language)" Name="auagd~25.htm" LongName="auagd025.htm" DiskId="1" />
+ <File Id="fileauagd026_HTM_$(var.Language)" Name="auagd~26.htm" LongName="auagd026.htm" DiskId="1" />
+ <File Id="filevnode_GIF_$(var.Language)" Name="vnode.gif" LongName="vnode.gif" DiskId="1" />
+ <File Id="filefserver1_GIF_$(var.Language)" Name="fserv.gif" LongName="fserver1.gif" DiskId="1" />
+ <File Id="filefserver2_GIF_$(var.Language)" Name="fserv~2.gif" LongName="fserver2.gif" DiskId="1" />
+ <File Id="fileoverview_GIF_$(var.Language)" Name="overv.gif" LongName="overview.gif" DiskId="1" />
+ <File Id="filescout1_GIF_$(var.Language)" Name="scout.gif" LongName="scout1.gif" DiskId="1" />
+ <File Id="filescout2_GIF_$(var.Language)" Name="scout~2.gif" LongName="scout2.gif" DiskId="1" />
+ <File Id="filescout3_GIF_$(var.Language)" Name="scout~3.gif" LongName="scout3.gif" DiskId="1" />
+ <File Id="filescout4_GIF_$(var.Language)" Name="scout~4.gif" LongName="scout4.gif" DiskId="1" />
+ <File Id="filecachmgr_GIF_$(var.Language)" Name="cachm.gif" LongName="cachmgr.gif" DiskId="1" />
+ </Component>
+ </Directory> <!-- Sys Admin guide -->
+ <Directory Id="dirReleaseNotes_$(var.Language)" Name="Relea" LongName="ReleaseNotes" SourceName="." src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\ReleaseNotes\">
+ <Component Id="cmp_Release_Notes_$(var.Language)" Guid="$(var.DocHtmlRelNotesGuid)">
+ <File Id="fileawrns000_HTM_$(var.Language)" Name="awrns.htm" LongName="awrns000.htm" KeyPath="yes" DiskId="1" />
+ <File Id="fileawrns002_HTM_$(var.Language)" Name="awrns~2.htm" LongName="awrns002.htm" DiskId="1" />
+ <File Id="fileawrns003_HTM_$(var.Language)" Name="awrns~3.htm" LongName="awrns003.htm" DiskId="1" />
+ <File Id="fileawrns004_HTM_$(var.Language)" Name="awrns~4.htm" LongName="awrns004.htm" DiskId="1" />
+ <File Id="fileawrns005_HTM_$(var.Language)" Name="awrns~5.htm" LongName="awrns005.htm" DiskId="1" />
+ <File Id="fileawrns006_HTM_$(var.Language)" Name="awrns~6.htm" LongName="awrns006.htm" DiskId="1" />
+ <File Id="fileawrns007_HTM_$(var.Language)" Name="awrns~7.htm" LongName="awrns007.htm" DiskId="1" />
+ </Component>
+ </Directory> <!-- Release Notes -->
+ </Directory> <!-- Html -->
+ </Directory> <!-- $(var.Language) -->
+ </Directory> <!-- Documentation -->
+
+ <Directory Id="dirClient" Name="Client" LongName="Client" SourceName=".">
+ <Directory Id="dirProgram" Name="Program" LongName="Program" SourceName="." src="$(var.ClientDir)">
+ <Component Id="cmf_afsshare_EXE" Guid="E972DA35-E950-4736-AE48-E6DDCE8C97D0">
+ <File Id="fileafsshare_EXE" Name="afsshare.exe" LongName="afsshare.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_libosi_DLL" Guid="0E10B3CC-533B-4EAC-AFC5-3D2B529385D7">
+ <File Id="filelibosi_DLL" Name="libosi.dll" LongName="libosi.dll" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_libafsconf_DLL" Guid="D72DA435-878D-42BE-9383-69FB97D63624">
+ <File Id="filelibafsconf_DLL" Name="libafscf.dll" LongName="libafsconf.dll" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_klog_EXE" Guid="DCE60DF8-6BB3-4090-B525-8CF8843C878B">
+ <File Id="fileklog_EXE" Name="klog.exe" LongName="klog.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_tokens_EXE" Guid="C6F79AAF-0EF4-4751-BB56-015B7E847D71">
+ <File Id="filetokens_EXE" Name="tokens.exe" LongName="tokens.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_unlog_EXE" Guid="D2C19113-8379-424D-9C90-BB4C955D8F17">
+ <File Id="fileunlog_EXE" Name="unlog.exe" LongName="unlog.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_fs_EXE" Guid="D19D5998-E8E1-424B-9D0D-655840DBC571">
+ <File Id="filefs_EXE" Name="fs.exe" LongName="fs.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_afscreds_EXE" Guid="A17567CF-866E-49AF-A717-0B4F17CA88D4">
+ <File Id="fileafscreds_EXE" Name="afscreds.exe" LongName="afscreds.exe" KeyPath="yes" DiskId="1">
+ <Shortcut Id="scAfsCreds" Directory="dirShortCut" Name="Auth.lnk" LongName="Authentication.lnk" Description="$(loc.StrAfsCredsDesc)" Arguments="[CREDSAUTOINIT] [CREDSRENEWDRMAP] [CREDSIPCHDET] [CREDSQUIET] [CREDSSHOW]" Icon="ico_afscreds" IconIndex="0" Show="normal" WorkingDirectory="dirCommon" />
+ </File>
+ </Component>
+ <Component Id="cmp_credsStartup" Guid="3F40BA8D-16A2-4990-A74F-35AF3012E3F8">
+ <Shortcut Id="scAfsCredsStart" Directory="StartupFolder" Name="AFSAuth.lnk" LongName="AFS Credentials.lnk" Description="$(loc.StrAfsCredsDesc)" Arguments="[CREDSAUTOINIT] [CREDSRENEWDRMAP] [CREDSIPCHDET] [CREDSQUIET] [CREDSSHOW]" Icon="ico_afscreds" IconIndex="0" Show="normal" WorkingDirectory="dirCommon" Target="[#fileafscreds_EXE]"/>
+ <Registry Root="HKLM" Key="SOFTWARE\OpenAFS\Client" Name="AutoStart" Type="integer" Value="1" Id="reg_CredsAutoStart" KeyPath="yes" />
+ </Component>
+ <Component Id="cmf_afs_shl_ext_DLL" Guid="E4C51111-F9ED-418D-9DE0-ED8777CED5C9">
+ <File Id="fileafs_shl_ext_DLL" Name="afsshext.dll" LongName="afs_shl_ext.dll" KeyPath="yes" DiskId="1">
+ <Class Id="DC515C27-6CAC-11D1-BAE7-00C04FD140D2" Advertise="no" Context="InprocServer32" Description="$(loc.StrShlExtDesc)" ThreadingModel="apartment">
+ <ProgId Id="AfsClientContextMenu.1" Description="$(loc.StrShlExtDesc)">
+ <ProgId Id="AfsClientContextMenu" />
+ </ProgId>
+ </Class>
+ </File>
+ </Component>
+ <Component Id="cmf_afsd_service_EXE" Guid="37A90054-505D-4C57-B489-7EF4D97B86F6">
+ <File Id="fileafsd_service_EXE" Name="afsd_svc.exe" LongName="afsd_service.exe" KeyPath="yes" DiskId="1" />
+ <ServiceControl Id="TransarcAFSDaemon" Name="TransarcAFSDaemon" Stop="both" Delete="both" Wait="yes" />
+ <ServiceInstall Id="svc_Client" Name="TransarcAFSDaemon" DisplayName="OpenAFS Client" Type="ownProcess" Start="auto" ErrorControl="normal">
+ <!-- ServiceConfig doesn't currently do what you think it does.
+ We instead use a custom action to set the service failure actions.
+ <ServiceConfig FirstFailureActionType="restart" RestartServiceDelayInSeconds="10" SecondFailureActionType="restart" ThirdFailureActionType="none"/>
+ -->
+ <ServiceDependency Id="Tcpip" />
+ <ServiceDependency Id="RpcSs" />
+ <ServiceDependency Id="NetBIOS" />
+ <ServiceDependency Id="PNP_TDI" Group="yes"/>
+ </ServiceInstall>
+ <Environment Id="envClient" Name="PATH" Action="create" System="yes" Permanent="no" Part="last" Separator=";" Value="[AFSDIR]Client\Program" />
+ <RemoveFile Id="removeCache" Directory="WindowsVolume" LongName="AFSCache" Name="AFSCache" On="uninstall" />
+ </Component>
+ <Component Id="cmf_afslogon_DLL" Guid="123197FE-4F53-4035-8D51-FCFB6B50A777">
+ <File Id="fileafslogon_DLL" Name="afslogon.dll" LongName="afslogon.dll" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_symlink_EXE" Guid="01513839-36E5-418D-8337-04B5D74337CD">
+ <File Id="filesymlink_EXE" Name="symlink.exe" LongName="symlink.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_kpasswd_EXE" Guid="D362743B-6BF3-49CD-8B58-8DE56BCB0143">
+ <File Id="filekpasswd_EXE" Name="kpasswd.exe" LongName="kpasswd.exe" KeyPath="yes" DiskId="1" src="$(var.BinDir)kpasswd.exe" />
+ </Component>
+ <Component Id="cmf_pts_EXE" Guid="DC65EE96-8C01-4985-B19A-87B710841CD7">
+ <File Id="filepts_EXE" Name="pts.exe" LongName="pts.exe" KeyPath="yes" DiskId="1" src="$(var.BinDir)\pts.exe" />
+ </Component>
+ <Component Id="cmf_bos_EXE" Guid="E3060710-F745-4958-A0C6-459B6CD0A5C3">
+ <File Id="filebos_EXE" Name="bos.exe" LongName="bos.exe" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\bos.exe" />
+ </Component>
+ <Component Id="cmf_kas_EXE" Guid="59ED3FE5-B818-4CE6-A278-F9C7B97B7973">
+ <File Id="filekas_EXE" Name="kas.exe" LongName="kas.exe" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\kas.exe"/>
+ </Component>
+ <Component Id="cmf_vos_EXE" Guid="854E4787-7C18-400B-9660-56F498DDC608">
+ <File Id="filevos_EXE" Name="vos.exe" LongName="vos.exe" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\vos.exe"/>
+ </Component>
+ <Component Id="cmf_udebug_EXE" Guid="EDD268D3-460C-4509-8933-F62AE72DEBC5">
+ <File Id="fileudebug_EXE" Name="udebug.exe" LongName="udebug.exe" KeyPath="yes" DiskId="1" src="$(var.ServerDir)\udebug.exe"/>
+ </Component>
+ <Component Id="cmf_translate_et_EXE" Guid="539C313D-BD7F-4896-9AE3-E0E54C6CC1CA">
+ <File Id="filetranslate_et_EXE" Name="translet.exe" LongName="translate_et.exe" KeyPath="yes" DiskId="1" src="$(var.BinDir)\translate_et.exe"/>
+ </Component>
+ <Component Id="cmf_rxdebug_EXE" Guid="D9E85810-5E1D-433F-A17E-D961ABC58567">
+ <File Id="filerxdebug_EXE" Name="rxdebug.exe" LongName="rxdebug.exe" KeyPath="yes" DiskId="1" src="$(var.EtcDir)\rxdebug.exe"/>
+ </Component>
+ <Component Id="cmf_backup_EXE" Guid="A8B6C84E-115B-4317-9CAA-0797BFE50D02">
+ <File Id="filebackup_EXE" Name="backup.exe" LongName="backup.exe" KeyPath="yes" DiskId="1" src="$(var.EtcDir)\backup.exe"/>
+ </Component>
+ <Component Id="cmf_aklog_EXE" Guid="84FADCD9-AA0D-4D80-B374-A20A85F5957B">
+ <File Id="fileaklog_EXE" Name="aklog.exe" LongName="aklog.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_afs_cpa_CPL" Guid="C83091EC-2967-4AC6-A34D-860CD7FEDA57">
+ <File Id="fileafs_cpa_CPL" Name="afs_cpa.cpl" LongName="afs_cpa.cpl" KeyPath="yes" DiskId="1"/>
+ <Registry Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cpls" Name="AFS Client CPL" Value="[#fileafs_cpa_CPL]" Id="reg_Full_Client11" />
+ </Component>
+ <?ifdef DebugSyms?>
+ <Component Id="cmp_ClientProgramDebug" Guid="A6A394F6-45D0-45A9-A7DD-C0997070EC14">
+ <File Id="fileafsshare_PDB" Name="afsshare.pdb" LongName="afsshare.pdb" DiskId="1" />
+ <File Id="filelibosi_PDB" Name="libosi.pdb" LongName="libosi.pdb" DiskId="1" />
+ <File Id="filelibafsconf_PDB" Name="libafscf.pdb" LongName="libafsconf.pdb" DiskId="1" />
+ <File Id="fileklog_PDB" Name="klog.pdb" LongName="klog.pdb" DiskId="1" />
+ <File Id="filetokens_PDB" Name="tokens.pdb" LongName="tokens.pdb" DiskId="1" />
+ <File Id="fileunlog_PDB" Name="unlog.pdb" LongName="unlog.pdb" DiskId="1" />
+ <File Id="filefs_PDB" Name="fs.pdb" LongName="fs.pdb" DiskId="1" />
+ <File Id="fileafscreds_PDB" Name="afscreds.pdb" LongName="afscreds.pdb" DiskId="1" />
+ <File Id="fileafs_shl_ext_PDB" Name="afsshext.pdb" LongName="afs_shl_ext.pdb" DiskId="1" />
+ <File Id="fileafsd_service_PDB" Name="afsd_svc.pdb" LongName="afsd_service.pdb" DiskId="1" />
+ <File Id="fileaklogon_PDB" Name="afslogon.pdb" LongName="afslogon.pdb" DiskId="1" />
+ <File Id="filesymlink_PDB" Name="symlink.pdb" LongName="symlink.pdb" DiskId="1" />
+ <File Id="filekpasswd_PDB" Name="kpasswd.pdb" LongName="kpasswd.pdb" DiskId="1" src="$(var.BinDir)kpasswd.pdb" />
+ <File Id="filepts_PDB" Name="pts.pdb" LongName="pts.pdb" DiskId="1" src="$(var.BinDir)pts.pdb" />
+ <File Id="filebos_PDB" Name="bos.pdb" LongName="bos.pdb" DiskId="1" src="$(var.ServerDir)bos.pdb" />
+ <File Id="filekas_PDB" Name="kas.pdb" LongName="kas.pdb" DiskId="1" src="$(var.ServerDir)kas.pdb"/>
+ <File Id="filevos_PDB" Name="vos.pdb" LongName="vos.pdb" DiskId="1" src="$(var.ServerDir)vos.pdb"/>
+ <File Id="fileudebug_PDB" Name="udebug.pdb" LongName="udebug.pdb" DiskId="1" src="$(var.ServerDir)\udebug.pdb"/>
+ <File Id="filetranslate_et_PDB" Name="translet.pdb" LongName="translate_et.pdb" DiskId="1" src="$(var.BinDir)\translate_et.pdb"/>
+ <File Id="filerxdebug_PDB" Name="rxdebug.pdb" LongName="rxdebug.pdb" DiskId="1" src="$(var.EtcDir)\rxdebug.pdb"/>
+ <File Id="filebackup_PDB" Name="backup.pdb" LongName="backup.pdb" DiskId="1" src="$(var.EtcDir)\backup.pdb"/>
+ <File Id="fileaklog_PDB" Name="aklog.pdb" LongName="aklog.pdb" DiskId="1" />
+ <File Id="fileafs_cpa_PDB" Name="afs_cpa.pdb" LongName="afs_cpa.pdb" KeyPath="yes" DiskId="1"/>
+ </Component>
+ <?endif?>
+
+ <Directory Id="dirSample" Name="Sampl" LongName="Sample" SourceName=".">
+ <Component Id="cmp_SDK_Sample" Guid="F9373E95-F410-4AA5-AA79-07C11EE00334">
+ <File Id="filetoken_C" Name="token.c" LongName="token.c" KeyPath="yes" DiskId="1" src="$(var.SrcDir)WINNT\afsd\sample\token.c"/>
+ </Component>
+ </Directory>
+ <Directory Id="dirInclude" Name="Include" LongName="Include" SourceName=".">
+ <Component Id="cmp_SDK_Include" Guid="9B12B216-B104-4E49-BE31-4042F2CBD318">
+ <File Id="filebasic_H" Name="basic.h" LongName="basic.h" DiskId="1" src="$(var.IncDir)basic.h" />
+ <File Id="filecrypt_H" Name="crypt.h" LongName="crypt.h" DiskId="1" src="$(var.IncDir)crypt.h" />
+ <File Id="filedbrpc_H" Name="dbrpc.h" LongName="dbrpc.h" DiskId="1" src="$(var.IncDir)dbrpc.h" />
+ <File Id="filedes_H" Name="des.h" LongName="des.h" DiskId="1" src="$(var.IncDir)des.h" />
+ <File Id="filedes_conf_H" Name="des_conf.h" LongName="des_conf.h" DiskId="1" src="$(var.IncDir)des_conf.h" />
+ <File Id="filedes_odd_H" Name="des_odd.h" LongName="des_odd.h" DiskId="1" src="$(var.IncDir)des_odd.h" />
+ <File Id="filelargeint_H" Name="largeint.h" LongName="largeint.h" DiskId="1" src="$(var.IncDir)largeint.h" />
+ <File Id="filelock_H" Name="lock.h" LongName="lock.h" DiskId="1" src="$(var.IncDir)lock.h" />
+ <File Id="filelwp_H" Name="lwp.h" LongName="lwp.h" DiskId="1" src="$(var.IncDir)lwp.h" />
+ <File Id="filemain_H" Name="main.h" LongName="main.h" DiskId="1" src="$(var.IncDir)main.h" />
+ <File Id="filemit_cpyright_H" Name="MIT-CP~1.h" LongName="mit-cpyright.h" DiskId="1" src="$(var.IncDir)mit-cpyright.h" />
+ <File Id="fileosi_H" Name="osi.h" LongName="osi.h" DiskId="1" src="$(var.IncDir)osi.h" />
+ <File Id="fileosibasel_H" Name="osibasel.h" LongName="osibasel.h" DiskId="1" src="$(var.IncDir)osibasel.h" />
+ <File Id="fileosidb_H" Name="osidb.h" LongName="osidb.h" DiskId="1" src="$(var.IncDir)osidb.h" />
+ <File Id="fileosidebug_H" Name="osidebug.h" LongName="osidebug.h" DiskId="1" src="$(var.IncDir)osidebug.h" />
+ <File Id="fileosifd_H" Name="osifd.h" LongName="osifd.h" DiskId="1" src="$(var.IncDir)osifd.h" />
+ <File Id="fileosilog_H" Name="osilog.h" LongName="osilog.h" DiskId="1" src="$(var.IncDir)osilog.h" />
+ <File Id="fileosiltype_H" Name="osiltype.h" LongName="osiltype.h" DiskId="1" src="$(var.IncDir)osiltype.h" />
+ <File Id="fileosiqueue_H" Name="osiqueue.h" LongName="osiqueue.h" DiskId="1" src="$(var.IncDir)osiqueue.h" />
+ <File Id="fileosisleep_H" Name="osisleep.h" LongName="osisleep.h" DiskId="1" src="$(var.IncDir)osisleep.h" />
+ <File Id="fileosistatl_H" Name="osistatl.h" LongName="osistatl.h" DiskId="1" src="$(var.IncDir)osistatl.h" />
+ <File Id="fileosithrdnt_H" Name="OSITHR~1.h" LongName="osithrdnt.h" DiskId="1" src="$(var.IncDir)osithrdnt.h" />
+ <File Id="fileosiutils_H" Name="osiutils.h" LongName="osiutils.h" DiskId="1" src="$(var.IncDir)osiutils.h" />
+ <File Id="fileperf_H" Name="perf.h" LongName="perf.h" DiskId="1" src="$(var.IncDir)perf.h" />
+ <File Id="filepreempt_H" Name="preempt.h" LongName="preempt.h" DiskId="1" src="$(var.IncDir)preempt.h" />
+ <File Id="filepthread_H" Name="pthread.h" LongName="pthread.h" DiskId="1" src="$(var.IncDir)pthread.h" />
+ <File Id="filetimer_H" Name="timer.h" LongName="timer.h" DiskId="1" src="$(var.IncDir)timer.h" />
+ <File Id="filetrylock_H" Name="trylock.h" LongName="trylock.h" DiskId="1" src="$(var.IncDir)trylock.h" />
+ <File Id="fileubik_H" Name="ubik.h" LongName="ubik.h" DiskId="1" src="$(var.IncDir)ubik.h" />
+ <File Id="fileubik_int_H" Name="ubik_int.h" LongName="ubik_int.h" DiskId="1" src="$(var.IncDir)ubik_int.h" />
+ </Component>
+ <Directory Id="dirIncludeAfs" Name="afs" LongName="afs" SourceName=".">
+ <Component Id="cmp_SDK_Include_afs" Guid="692D18AD-4901-4124-8B1F-5D414E65A7D0">
+ <File Id="fileacl_H" Name="acl.h" LongName="acl.h" DiskId="1" src="$(var.IncDir)afs\acl.h" />
+ <File Id="fileafscbint_H" Name="afscbint.h" LongName="afscbint.h" DiskId="1" src="$(var.IncDir)afs\afscbint.h" />
+ <File Id="fileafsconfig_H" Name="AFSCON~1.h" LongName="afsconfig.h" DiskId="1" src="$(var.IncDir)afs\afsconfig.h" />
+ <File Id="fileafsd_H" Name="afsd.h" LongName="afsd.h" DiskId="1" src="$(var.IncDir)afs\afsd.h" />
+ <File Id="fileafsdicon_H" Name="afsdicon.h" LongName="afsdicon.h" DiskId="1" src="$(var.IncDir)afs\afsdicon.h" />
+ <File Id="fileafsd_eventlog_H" Name="AFSD_E~1.h" LongName="afsd_eventlog.h" DiskId="1" src="$(var.IncDir)afs\afsd_eventlog.h" />
+ <File Id="fileafsint_H" Name="afsint.h" LongName="afsint.h" DiskId="1" src="$(var.IncDir)afs\afsint.h" />
+ <File Id="fileafskfw_H" Name="afskfw.h" LongName="afskfw.h" DiskId="1" src="$(var.IncDir)afs\afskfw.h" />
+ <File Id="fileafsmsg95_H" Name="afsmsg95.h" LongName="afsmsg95.h" DiskId="1" src="$(var.IncDir)afs\afsmsg95.h" />
+ <File Id="fileafsrpc_H" Name="afsrpc.h" LongName="afsrpc.h" DiskId="1" src="$(var.IncDir)afs\afsrpc.h" />
+ <File Id="fileafssyscalls_H" Name="AFSSYS~1.h" LongName="afssyscalls.h" DiskId="1" src="$(var.IncDir)afs\afssyscalls.h" />
+ <File Id="fileafsutil_H" Name="afsutil.h" LongName="afsutil.h" DiskId="1" src="$(var.IncDir)afs\afsutil.h" />
+ <File Id="fileafsutil_prototypes_H" Name="AFSUTI~1.h" LongName="afsutil_prototypes.h" DiskId="1" src="$(var.IncDir)afs\afsutil_prototypes.h" />
+ <File Id="fileafs_Admin_H" Name="AFS_AD~1.h" LongName="afs_Admin.h" DiskId="1" src="$(var.IncDir)afs\afs_Admin.h" />
+ <File Id="fileafs_AdminBosErrors_H" Name="AFS_AD~3.h" LongName="afs_AdminBosErrors.h" DiskId="1" src="$(var.IncDir)afs\afs_AdminBosErrors.h" />
+ <File Id="fileafs_AdminCfgErrors_H" Name="AFS_AD~4.h" LongName="afs_AdminCfgErrors.h" DiskId="1" src="$(var.IncDir)afs\afs_AdminCfgErrors.h" />
+ <File Id="fileafs_AdminClientErrors_H" Name="AF6FF0~1.h" LongName="afs_AdminClientErrors.h" DiskId="1" src="$(var.IncDir)afs\afs_AdminClientErrors.h" />
+ <File Id="fileafs_AdminCommonErrors_H" Name="AFS_AD~2.h" LongName="afs_AdminCommonErrors.h" DiskId="1" src="$(var.IncDir)afs\afs_AdminCommonErrors.h" />
+ <File Id="fileafs_AdminErrors_H" Name="AFF5CC~1.h" LongName="afs_AdminErrors.h" DiskId="1" src="$(var.IncDir)afs\afs_AdminErrors.h" />
+ <File Id="fileafs_AdminKasErrors_H" Name="AF1531~1.h" LongName="afs_AdminKasErrors.h" DiskId="1" src="$(var.IncDir)afs\afs_AdminKasErrors.h" />
+ <File Id="fileafs_AdminMiscErrors_H" Name="AF96DD~1.h" LongName="afs_AdminMiscErrors.h" DiskId="1" src="$(var.IncDir)afs\afs_AdminMiscErrors.h" />
+ <File Id="fileafs_AdminPtsErrors_H" Name="AF18CF~1.h" LongName="afs_AdminPtsErrors.h" DiskId="1" src="$(var.IncDir)afs\afs_AdminPtsErrors.h" />
+ <File Id="fileafs_AdminUtilErrors_H" Name="AF05EE~1.h" LongName="afs_AdminUtilErrors.h" DiskId="1" src="$(var.IncDir)afs\afs_AdminUtilErrors.h" />
+ <File Id="fileafs_AdminVosErrors_H" Name="AF13CC~1.h" LongName="afs_AdminVosErrors.h" DiskId="1" src="$(var.IncDir)afs\afs_AdminVosErrors.h" />
+ <File Id="fileafs_args_H" Name="afs_args.h" LongName="afs_args.h" DiskId="1" src="$(var.IncDir)afs\afs_args.h" />
+ <File Id="fileafs_bosAdmin_H" Name="AFS_BO~1.h" LongName="afs_bosAdmin.h" DiskId="1" src="$(var.IncDir)afs\afs_bosAdmin.h" />
+ <File Id="fileafs_cfgAdmin_H" Name="AFS_CF~1.h" LongName="afs_cfgAdmin.h" DiskId="1" src="$(var.IncDir)afs\afs_cfgAdmin.h" />
+ <File Id="fileafs_clientAdmin_H" Name="AFS_CL~1.h" LongName="afs_clientAdmin.h" DiskId="1" src="$(var.IncDir)afs\afs_clientAdmin.h" />
+ <File Id="fileafs_kasAdmin_H" Name="AFS_KA~1.h" LongName="afs_kasAdmin.h" DiskId="1" src="$(var.IncDir)afs\afs_kasAdmin.h" />
+ <File Id="fileafs_ptsAdmin_H" Name="AFS_PT~1.h" LongName="afs_ptsAdmin.h" DiskId="1" src="$(var.IncDir)afs\afs_ptsAdmin.h" />
+ <File Id="fileafs_sysnames_H" Name="AFS_SY~1.h" LongName="afs_sysnames.h" DiskId="1" src="$(var.IncDir)afs\afs_sysnames.h" />
+ <File Id="fileafs_utilAdmin_H" Name="AFS_UT~1.h" LongName="afs_utilAdmin.h" DiskId="1" src="$(var.IncDir)afs\afs_utilAdmin.h" />
+ <File Id="fileafs_vosAdmin_H" Name="AFS_VO~1.h" LongName="afs_vosAdmin.h" DiskId="1" src="$(var.IncDir)afs\afs_vosAdmin.h" />
+ <File Id="fileassert_H" Name="assert.h" LongName="assert.h" DiskId="1" src="$(var.IncDir)afs\assert.h" />
+ <File Id="fileaudit_H" Name="audit.h" LongName="audit.h" DiskId="1" src="$(var.IncDir)afs\audit.h" />
+ <File Id="fileauth_H" Name="auth.h" LongName="auth.h" DiskId="1" src="$(var.IncDir)afs\auth.h" />
+ <File Id="filebnode_H" Name="bnode.h" LongName="bnode.h" DiskId="1" src="$(var.IncDir)afs\bnode.h" />
+ <File Id="filebosint_H" Name="bosint.h" LongName="bosint.h" DiskId="1" src="$(var.IncDir)afs\bosint.h" />
+ <File Id="filebubasics_H" Name="bubasics.h" LongName="bubasics.h" DiskId="1" src="$(var.IncDir)afs\bubasics.h" />
+ <File Id="filebudb_H" Name="budb.h" LongName="budb.h" DiskId="1" src="$(var.IncDir)afs\budb.h" />
+ <File Id="filebudb_client_H" Name="BUDB_C~1.h" LongName="budb_client.h" DiskId="1" src="$(var.IncDir)afs\budb_client.h" />
+ <File Id="filebudb_errs_H" Name="BUDB_E~1.h" LongName="budb_errs.h" DiskId="1" src="$(var.IncDir)afs\budb_errs.h" />
+ <File Id="filebumon_H" Name="bumon.h" LongName="bumon.h" DiskId="1" src="$(var.IncDir)afs\bumon.h" />
+ <File Id="filebutc_H" Name="butc.h" LongName="butc.h" DiskId="1" src="$(var.IncDir)afs\butc.h" />
+ <File Id="filebutm_H" Name="butm.h" LongName="butm.h" DiskId="1" src="$(var.IncDir)afs\butm.h" />
+ <File Id="filebutx_H" Name="butx.h" LongName="butx.h" DiskId="1" src="$(var.IncDir)afs\butx.h" />
+ <File Id="filecellconfig_H" Name="CELLCO~1.h" LongName="cellconfig.h" DiskId="1" src="$(var.IncDir)afs\cellconfig.h" />
+ <File Id="filecm_H" Name="cm.h" LongName="cm.h" DiskId="1" src="$(var.IncDir)afs\cm.h" />
+ <File Id="filecmd_H" Name="cmd.h" LongName="cmd.h" DiskId="1" src="$(var.IncDir)afs\cmd.h" />
+ <File Id="filecm_access_H" Name="CM_ACC~1.h" LongName="cm_access.h" DiskId="1" src="$(var.IncDir)afs\cm_access.h" />
+ <File Id="filecm_aclent_H" Name="CM_ACL~1.h" LongName="cm_aclent.h" DiskId="1" src="$(var.IncDir)afs\cm_aclent.h" />
+ <File Id="filecm_buf_H" Name="cm_buf.h" LongName="cm_buf.h" DiskId="1" src="$(var.IncDir)afs\cm_buf.h" />
+ <File Id="filecm_callback_H" Name="CM_CAL~1.h" LongName="cm_callback.h" DiskId="1" src="$(var.IncDir)afs\cm_callback.h" />
+ <File Id="filecm_cell_H" Name="cm_cell.h" LongName="cm_cell.h" DiskId="1" src="$(var.IncDir)afs\cm_cell.h" />
+ <File Id="filecm_config_H" Name="CM_CON~1.h" LongName="cm_config.h" DiskId="1" src="$(var.IncDir)afs\cm_config.h" />
+ <File Id="filecm_conn_H" Name="cm_conn.h" LongName="cm_conn.h" DiskId="1" src="$(var.IncDir)afs\cm_conn.h" />
+ <File Id="filecm_daemon_H" Name="CM_DAE~1.h" LongName="cm_daemon.h" DiskId="1" src="$(var.IncDir)afs\cm_daemon.h" />
+ <File Id="filecm_dcache_H" Name="CM_DCA~1.h" LongName="cm_dcache.h" DiskId="1" src="$(var.IncDir)afs\cm_dcache.h" />
+ <File Id="filecm_dir_H" Name="cm_dir.h" LongName="cm_dir.h" DiskId="1" src="$(var.IncDir)afs\cm_dir.h" />
+ <File Id="filecm_dnlc_H" Name="cm_dnlc.h" LongName="cm_dnlc.h" DiskId="1" src="$(var.IncDir)afs\cm_dnlc.h" />
+ <File Id="filecm_dns_H" Name="cm_dns.h" LongName="cm_dns.h" DiskId="1" src="$(var.IncDir)afs\cm_dns.h" />
+ <File Id="filecm_dns_private_H" Name="CM_DNS~1.h" LongName="cm_dns_private.h" DiskId="1" src="$(var.IncDir)afs\cm_dns_private.h" />
+ <File Id="filecm_freelance_H" Name="CM_FRE~1.h" LongName="cm_freelance.h" DiskId="1" src="$(var.IncDir)afs\cm_freelance.h" />
+ <File Id="filecm_ioctl_H" Name="cm_ioctl.h" LongName="cm_ioctl.h" DiskId="1" src="$(var.IncDir)afs\cm_ioctl.h" />
+ <File Id="filecm_scache_H" Name="CM_SCA~1.h" LongName="cm_scache.h" DiskId="1" src="$(var.IncDir)afs\cm_scache.h" />
+ <File Id="filecm_server_H" Name="CM_SER~1.h" LongName="cm_server.h" DiskId="1" src="$(var.IncDir)afs\cm_server.h" />
+ <File Id="filecm_user_H" Name="cm_user.h" LongName="cm_user.h" DiskId="1" src="$(var.IncDir)afs\cm_user.h" />
+ <File Id="filecm_utils_H" Name="cm_utils.h" LongName="cm_utils.h" DiskId="1" src="$(var.IncDir)afs\cm_utils.h" />
+ <File Id="filecm_vnodeops_H" Name="CM_VNO~1.h" LongName="cm_vnodeops.h" DiskId="1" src="$(var.IncDir)afs\cm_vnodeops.h" />
+ <File Id="filecm_volume_H" Name="CM_VOL~1.h" LongName="cm_volume.h" DiskId="1" src="$(var.IncDir)afs\cm_volume.h" />
+ <File Id="filecom_err_H" Name="com_err.h" LongName="com_err.h" DiskId="1" src="$(var.IncDir)afs\com_err.h" />
+ <File Id="filedebug_H" Name="debug.h" LongName="debug.h" DiskId="1" src="$(var.IncDir)afs\debug.h" />
+ <File Id="filedir_H" Name="dir.h" LongName="dir.h" DiskId="1" src="$(var.IncDir)afs\dir.h" />
+ <File Id="filedirent_H" Name="dirent.h" LongName="dirent.h" DiskId="1" src="$(var.IncDir)afs\dirent.h" />
+ <File Id="filedirpath_H" Name="dirpath.h" LongName="dirpath.h" DiskId="1" src="$(var.IncDir)afs\dirpath.h" />
+ <File Id="fileerrmap_nt_H" Name="ERRMAP~1.h" LongName="errmap_nt.h" DiskId="1" src="$(var.IncDir)afs\errmap_nt.h" />
+ <File Id="fileerrors_H" Name="errors.h" LongName="errors.h" DiskId="1" src="$(var.IncDir)afs\errors.h" />
+ <File Id="fileerror_table_H" Name="ERROR_~1.h" LongName="error_table.h" DiskId="1" src="$(var.IncDir)afs\error_table.h" />
+ <File Id="filefileutil_H" Name="fileutil.h" LongName="fileutil.h" DiskId="1" src="$(var.IncDir)afs\fileutil.h" />
+ <File Id="filefssync_H" Name="fssync.h" LongName="fssync.h" DiskId="1" src="$(var.IncDir)afs\fssync.h" />
+ <File Id="filefs_stats_H" Name="fs_stats.h" LongName="fs_stats.h" DiskId="1" src="$(var.IncDir)afs\fs_stats.h" />
+ <File Id="filefs_utils_H" Name="fs_utils.h" LongName="fs_utils.h" DiskId="1" src="$(var.IncDir)afs\fs_utils.h" />
+ <File Id="fileicl_H" Name="icl.h" LongName="icl.h" DiskId="1" src="$(var.IncDir)afs\icl.h" />
+ <File Id="fileihandle_H" Name="ihandle.h" LongName="ihandle.h" DiskId="1" src="$(var.IncDir)afs\ihandle.h" />
+ <File Id="fileitc_H" Name="itc.h" LongName="itc.h" DiskId="1" src="$(var.IncDir)afs\itc.h" />
+ <File Id="filekaport_H" Name="kaport.h" LongName="kaport.h" DiskId="1" src="$(var.IncDir)afs\kaport.h" />
+ <File Id="filekauth_H" Name="kauth.h" LongName="kauth.h" DiskId="1" src="$(var.IncDir)afs\kauth.h" />
+ <File Id="filekautils_H" Name="kautils.h" LongName="kautils.h" DiskId="1" src="$(var.IncDir)afs\kautils.h" />
+ <File Id="filekeys_H" Name="keys.h" LongName="keys.h" DiskId="1" src="$(var.IncDir)afs\keys.h" />
+ <File Id="filekrb_H" Name="krb.h" LongName="krb.h" DiskId="1" src="$(var.IncDir)afs\krb.h" />
+ <File Id="filekrb_prot_H" Name="krb_prot.h" LongName="krb_prot.h" DiskId="1" src="$(var.IncDir)afs\krb_prot.h" />
+ <File Id="filektime_H" Name="ktime.h" LongName="ktime.h" DiskId="1" src="$(var.IncDir)afs\ktime.h" />
+ <File Id="filelanahelper_H" Name="LANAHE~1.h" LongName="lanahelper.h" DiskId="1" src="$(var.IncDir)afs\lanahelper.h" />
+ <File Id="filemit_sipb_cr_H" Name="MIT-SI~1.h" LongName="mit-sipb-cr.h" DiskId="1" src="$(var.IncDir)afs\mit-sipb-cr.h" />
+ <File Id="filenfs_H" Name="nfs.h" LongName="nfs.h" DiskId="1" src="$(var.IncDir)afs\nfs.h" />
+ <File Id="filentops_H" Name="ntops.h" LongName="ntops.h" DiskId="1" src="$(var.IncDir)afs\ntops.h" />
+ <File Id="fileparam_H" Name="param.h" LongName="param.h" DiskId="1" src="$(var.IncDir)afs\param.h" />
+ <File Id="filepartition_H" Name="PARTIT~1.h" LongName="partition.h" DiskId="1" src="$(var.IncDir)afs\partition.h" />
+ <File Id="filepioctl_nt_H" Name="PIOCTL~1.h" LongName="pioctl_nt.h" DiskId="1" src="$(var.IncDir)afs\pioctl_nt.h" />
+ <File Id="fileprclient_H" Name="prclient.h" LongName="prclient.h" DiskId="1" src="$(var.IncDir)afs\prclient.h" />
+ <File Id="fileprerror_H" Name="prerror.h" LongName="prerror.h" DiskId="1" src="$(var.IncDir)afs\prerror.h" />
+ <File Id="fileprint_H" Name="print.h" LongName="print.h" DiskId="1" src="$(var.IncDir)afs\print.h" />
+ <File Id="fileprocmgmt_H" Name="procmgmt.h" LongName="procmgmt.h" DiskId="1" src="$(var.IncDir)afs\procmgmt.h" />
+ <File Id="fileprserver_H" Name="prserver.h" LongName="prserver.h" DiskId="1" src="$(var.IncDir)afs\prserver.h" />
+ <File Id="fileprs_fs_H" Name="prs_fs.h" LongName="prs_fs.h" DiskId="1" src="$(var.IncDir)afs\prs_fs.h" />
+ <File Id="fileptclient_H" Name="ptclient.h" LongName="ptclient.h" DiskId="1" src="$(var.IncDir)afs\ptclient.h" />
+ <File Id="filepterror_H" Name="pterror.h" LongName="pterror.h" DiskId="1" src="$(var.IncDir)afs\pterror.h" />
+ <File Id="filepthread_glock_H" Name="PTHREA~1.h" LongName="pthread_glock.h" DiskId="1" src="$(var.IncDir)afs\pthread_glock.h" />
+ <File Id="filepthread_nosigs_H" Name="PTHREA~2.h" LongName="pthread_nosigs.h" DiskId="1" src="$(var.IncDir)afs\pthread_nosigs.h" />
+ <File Id="fileptint_H" Name="ptint.h" LongName="ptint.h" DiskId="1" src="$(var.IncDir)afs\ptint.h" />
+ <File Id="fileptserver_H" Name="ptserver.h" LongName="ptserver.h" DiskId="1" src="$(var.IncDir)afs\ptserver.h" />
+ <File Id="filerxgen_consts_H" Name="RXGEN_~1.h" LongName="rxgen_consts.h" DiskId="1" src="$(var.IncDir)afs\rxgen_consts.h" />
+ <File Id="filesecutil_nt_H" Name="SECUTI~1.h" LongName="secutil_nt.h" DiskId="1" src="$(var.IncDir)afs\secutil_nt.h" />
+ <File Id="filesmb_H" Name="smb.h" LongName="smb.h" DiskId="1" src="$(var.IncDir)afs\smb.h" />
+ <File Id="filesmb3_H" Name="smb3.h" LongName="smb3.h" DiskId="1" src="$(var.IncDir)afs\smb3.h" />
+ <File Id="filesmb_iocons_H" Name="SMB_IO~1.h" LongName="smb_iocons.h" DiskId="1" src="$(var.IncDir)afs\smb_iocons.h" />
+ <File Id="filesmb_ioctl_H" Name="SMB_IO~2.h" LongName="smb_ioctl.h" DiskId="1" src="$(var.IncDir)afs\smb_ioctl.h" />
+ <File Id="filestds_H" Name="stds.h" LongName="stds.h" DiskId="1" src="$(var.IncDir)afs\stds.h" />
+ <File Id="filetcdata_H" Name="tcdata.h" LongName="tcdata.h" DiskId="1" src="$(var.IncDir)afs\tcdata.h" />
+ <File Id="fileunified_afs_H" Name="UNIFIE~1.h" LongName="unified_afs.h" DiskId="1" src="$(var.IncDir)afs\unified_afs.h" />
+ <File Id="fileusd_H" Name="usd.h" LongName="usd.h" DiskId="1" src="$(var.IncDir)afs\usd.h" />
+ <File Id="filevice_H" Name="vice.h" LongName="vice.h" DiskId="1" src="$(var.IncDir)afs\vice.h" />
+ <File Id="fileviceinode_H" Name="VICEIN~1.h" LongName="viceinode.h" DiskId="1" src="$(var.IncDir)afs\viceinode.h" />
+ <File Id="filevldbint_H" Name="vldbint.h" LongName="vldbint.h" DiskId="1" src="$(var.IncDir)afs\vldbint.h" />
+ <File Id="filevlserver_H" Name="vlserver.h" LongName="vlserver.h" DiskId="1" src="$(var.IncDir)afs\vlserver.h" />
+ <File Id="filevl_opcodes_H" Name="VL_OPC~1.h" LongName="vl_opcodes.h" DiskId="1" src="$(var.IncDir)afs\vl_opcodes.h" />
+ <File Id="filevnode_H" Name="vnode.h" LongName="vnode.h" DiskId="1" src="$(var.IncDir)afs\vnode.h" />
+ <File Id="filevoldefs_H" Name="voldefs.h" LongName="voldefs.h" DiskId="1" src="$(var.IncDir)afs\voldefs.h" />
+ <File Id="filevolint_H" Name="volint.h" LongName="volint.h" DiskId="1" src="$(var.IncDir)afs\volint.h" />
+ <File Id="filevolser_H" Name="volser.h" LongName="volser.h" DiskId="1" src="$(var.IncDir)afs\volser.h" />
+ <File Id="filevolser_prototypes_H" Name="VOLSER~1.h" LongName="volser_prototypes.h" DiskId="1" src="$(var.IncDir)afs\volser_prototypes.h" />
+ <File Id="filevolume_H" Name="volume.h" LongName="volume.h" DiskId="1" src="$(var.IncDir)afs\volume.h" />
+ </Component>
+ </Directory>
+ <Directory Id="dirIncludeRx" Name="rx" LongName="rx" SourceName=".">
+ <Component Id="cmp_SDK_Include_rx" Guid="2E215D10-C080-42A3-B692-AFF94C7A1A2B">
+ <File Id="fileasn1_err_H" Name="asn1_err.h" LongName="asn1_err.h" DiskId="1" src="$(var.IncDir)rx\asn1_err.h" />
+ <File Id="filefcrypt_H" Name="fcrypt.h" LongName="fcrypt.h" DiskId="1" src="$(var.IncDir)rx\fcrypt.h" />
+ <File Id="filehash_H" Name="hash.h" LongName="hash.h" DiskId="1" src="$(var.IncDir)rx\hash.h" />
+ <File Id="filemd4_H" Name="md4.h" LongName="md4.h" DiskId="1" src="$(var.IncDir)rx\md4.h" />
+ <File Id="filemd5_H" Name="md5.h" LongName="md5.h" DiskId="1" src="$(var.IncDir)rx\md5.h" />
+ <File Id="filerx_H" Name="rx.h" LongName="rx.h" DiskId="1" src="$(var.IncDir)rx\rx.h" />
+ <File Id="filerxkad_H" Name="rxkad.h" LongName="rxkad.h" DiskId="1" src="$(var.IncDir)rx\rxkad.h" />
+ <File Id="filerxkad_prototypes_H" Name="RXKAD_~1.h" LongName="rxkad_prototypes.h" DiskId="1" src="$(var.IncDir)rx\rxkad_prototypes.h" />
+ <File Id="filerxstat_H" Name="rxstat.h" LongName="rxstat.h" DiskId="1" src="$(var.IncDir)rx\rxstat.h" />
+ <File Id="filerx_clock_H" Name="rx_clock.h" LongName="rx_clock.h" DiskId="1" src="$(var.IncDir)rx\rx_clock.h" />
+ <File Id="filerx_event_H" Name="rx_event.h" LongName="rx_event.h" DiskId="1" src="$(var.IncDir)rx\rx_event.h" />
+ <File Id="filerx_globals_H" Name="RX_GLO~1.h" LongName="rx_globals.h" DiskId="1" src="$(var.IncDir)rx\rx_globals.h" />
+ <File Id="filerx_lwp_H" Name="rx_lwp.h" LongName="rx_lwp.h" DiskId="1" src="$(var.IncDir)rx\rx_lwp.h" />
+ <File Id="filerx_misc_H" Name="rx_misc.h" LongName="rx_misc.h" DiskId="1" src="$(var.IncDir)rx\rx_misc.h" />
+ <File Id="filerx_multi_H" Name="rx_multi.h" LongName="rx_multi.h" DiskId="1" src="$(var.IncDir)rx\rx_multi.h" />
+ <File Id="filerx_null_H" Name="rx_null.h" LongName="rx_null.h" DiskId="1" src="$(var.IncDir)rx\rx_null.h" />
+ <File Id="filerx_packet_H" Name="RX_PAC~1.h" LongName="rx_packet.h" DiskId="1" src="$(var.IncDir)rx\rx_packet.h" />
+ <File Id="filerx_prototypes_H" Name="RX_PRO~1.h" LongName="rx_prototypes.h" DiskId="1" src="$(var.IncDir)rx\rx_prototypes.h" />
+ <File Id="filerx_pthread_H" Name="RX_PTH~1.h" LongName="rx_pthread.h" DiskId="1" src="$(var.IncDir)rx\rx_pthread.h" />
+ <File Id="filerx_queue_H" Name="rx_queue.h" LongName="rx_queue.h" DiskId="1" src="$(var.IncDir)rx\rx_queue.h" />
+ <File Id="filerx_user_H" Name="rx_user.h" LongName="rx_user.h" DiskId="1" src="$(var.IncDir)rx\rx_user.h" />
+ <File Id="filerx_xmit_nt_H" Name="RX_XMI~1.h" LongName="rx_xmit_nt.h" DiskId="1" src="$(var.IncDir)rx\rx_xmit_nt.h" />
+ <File Id="filev5gen_H" Name="v5gen.h" LongName="v5gen.h" DiskId="1" src="$(var.IncDir)rx\v5gen.h" />
+ <File Id="filexdr_H" Name="xdr.h" LongName="xdr.h" DiskId="1" src="$(var.IncDir)rx\xdr.h" />
+ <File Id="filexdr_prototypes_H" Name="XDR_PR~1.h" LongName="xdr_prototypes.h" DiskId="1" src="$(var.IncDir)rx\xdr_prototypes.h" />
+ </Component>
+ </Directory>
+ <Directory Id="dirIncludeWinnt" Name="WINNT" LongName="WINNT" SourceName=".">
+ <Component Id="cmp_SDK_Include_Winnt" Guid="BAAF0193-5C33-4EC1-9D40-DD4595F176E6">
+ <File Id="fileafsapplib_H" Name="AFSAPP~1.h" LongName="afsapplib.h" DiskId="1" src="$(var.IncDir)WINNT\afsapplib.h" />
+ <File Id="fileafsclass_H" Name="afsclass.h" LongName="afsclass.h" DiskId="1" src="$(var.IncDir)WINNT\afsclass.h" />
+ <File Id="fileafsclassfn_H" Name="AFSCLA~1.h" LongName="afsclassfn.h" DiskId="1" src="$(var.IncDir)WINNT\afsclassfn.h" />
+ <File Id="fileafsevent_H" Name="afsevent.h" LongName="afsevent.h" DiskId="1" src="$(var.IncDir)WINNT\afsevent.h" />
+ <File Id="fileafsreg_H" Name="afsreg.h" LongName="afsreg.h" DiskId="1" src="$(var.IncDir)WINNT\afsreg.h" />
+ <File Id="fileafssw_H" Name="afssw.h" LongName="afssw.h" DiskId="1" src="$(var.IncDir)WINNT\afssw.h" />
+ <File Id="fileal_admsvr_H" Name="AL_ADM~1.h" LongName="al_admsvr.h" DiskId="1" src="$(var.IncDir)WINNT\al_admsvr.h" />
+ <File Id="fileal_dynlink_H" Name="AL_DYN~1.h" LongName="al_dynlink.h" DiskId="1" src="$(var.IncDir)WINNT\al_dynlink.h" />
+ <File Id="fileal_messages_H" Name="AL_MES~1.h" LongName="al_messages.h" DiskId="1" src="$(var.IncDir)WINNT\al_messages.h" />
+ <File Id="fileal_progress_H" Name="AL_PRO~1.h" LongName="al_progress.h" DiskId="1" src="$(var.IncDir)WINNT\al_progress.h" />
+ <File Id="fileal_resource_H" Name="AL_RES~1.h" LongName="al_resource.h" DiskId="1" src="$(var.IncDir)WINNT\al_resource.h" />
+ <File Id="fileal_wizard_H" Name="AL_WIZ~1.h" LongName="al_wizard.h" DiskId="1" src="$(var.IncDir)WINNT\al_wizard.h" />
+ <File Id="filechecklist_H" Name="CHECKL~1.h" LongName="checklist.h" DiskId="1" src="$(var.IncDir)WINNT\checklist.h" />
+ <File Id="filectl_date_H" Name="ctl_date.h" LongName="ctl_date.h" DiskId="1" src="$(var.IncDir)WINNT\ctl_date.h" />
+ <File Id="filectl_elapsed_H" Name="CTL_EL~1.h" LongName="ctl_elapsed.h" DiskId="1" src="$(var.IncDir)WINNT\ctl_elapsed.h" />
+ <File Id="filectl_sockaddr_H" Name="CTL_SO~1.h" LongName="ctl_sockaddr.h" DiskId="1" src="$(var.IncDir)WINNT\ctl_sockaddr.h" />
+ <File Id="filectl_spinner_H" Name="CTL_SP~1.h" LongName="ctl_spinner.h" DiskId="1" src="$(var.IncDir)WINNT\ctl_spinner.h" />
+ <File Id="filectl_time_H" Name="ctl_time.h" LongName="ctl_time.h" DiskId="1" src="$(var.IncDir)WINNT\ctl_time.h" />
+ <File Id="filec_agg_H" Name="c_agg.h" LongName="c_agg.h" DiskId="1" src="$(var.IncDir)WINNT\c_agg.h" />
+ <File Id="filec_cell_H" Name="c_cell.h" LongName="c_cell.h" DiskId="1" src="$(var.IncDir)WINNT\c_cell.h" />
+ <File Id="filec_debug_H" Name="c_debug.h" LongName="c_debug.h" DiskId="1" src="$(var.IncDir)WINNT\c_debug.h" />
+ <File Id="filec_grp_H" Name="c_grp.h" LongName="c_grp.h" DiskId="1" src="$(var.IncDir)WINNT\c_grp.h" />
+ <File Id="filec_ident_H" Name="c_ident.h" LongName="c_ident.h" DiskId="1" src="$(var.IncDir)WINNT\c_ident.h" />
+ <File Id="filec_identlist_H" Name="C_IDEN~1.h" LongName="c_identlist.h" DiskId="1" src="$(var.IncDir)WINNT\c_identlist.h" />
+ <File Id="filec_notify_H" Name="c_notify.h" LongName="c_notify.h" DiskId="1" src="$(var.IncDir)WINNT\c_notify.h" />
+ <File Id="filec_set_H" Name="c_set.h" LongName="c_set.h" DiskId="1" src="$(var.IncDir)WINNT\c_set.h" />
+ <File Id="filec_svc_H" Name="c_svc.h" LongName="c_svc.h" DiskId="1" src="$(var.IncDir)WINNT\c_svc.h" />
+ <File Id="filec_svr_H" Name="c_svr.h" LongName="c_svr.h" DiskId="1" src="$(var.IncDir)WINNT\c_svr.h" />
+ <File Id="filec_usr_H" Name="c_usr.h" LongName="c_usr.h" DiskId="1" src="$(var.IncDir)WINNT\c_usr.h" />
+ <File Id="filedialog_H" Name="dialog.h" LongName="dialog.h" DiskId="1" src="$(var.IncDir)WINNT\dialog.h" />
+ <File Id="filefastlist_H" Name="fastlist.h" LongName="fastlist.h" DiskId="1" src="$(var.IncDir)WINNT\fastlist.h" />
+ <File Id="filehashlist_H" Name="hashlist.h" LongName="hashlist.h" DiskId="1" src="$(var.IncDir)WINNT\hashlist.h" />
+ <File Id="fileiTaAfsAdmSvr_H" Name="ITAAFS~1.h" LongName="iTaAfsAdmSvr.h" DiskId="1" src="$(var.IncDir)WINNT\iTaAfsAdmSvr.h" />
+ <File Id="fileiTaAfsAdmSvrTypes_H" Name="ITAAFS~2.h" LongName="iTaAfsAdmSvrTypes.h" DiskId="1" src="$(var.IncDir)WINNT\iTaAfsAdmSvrTypes.h" />
+ <File Id="fileregexp_H" Name="regexp.h" LongName="regexp.h" DiskId="1" src="$(var.IncDir)WINNT\regexp.h" />
+ <File Id="fileresize_H" Name="resize.h" LongName="resize.h" DiskId="1" src="$(var.IncDir)WINNT\resize.h" />
+ <File Id="filesettings_H" Name="settings.h" LongName="settings.h" DiskId="1" src="$(var.IncDir)WINNT\settings.h" />
+ <File Id="filesubclass_H" Name="subclass.h" LongName="subclass.h" DiskId="1" src="$(var.IncDir)WINNT\subclass.h" />
+ <File Id="filesyscfg_H" Name="syscfg.h" LongName="syscfg.h" DiskId="1" src="$(var.IncDir)WINNT\syscfg.h" />
+ <File Id="fileTaAfsAdmSvr_H" Name="TAAFSA~1.h" LongName="TaAfsAdmSvr.h" DiskId="1" src="$(var.IncDir)WINNT\TaAfsAdmSvr.h" />
+ <File Id="fileTaAfsAdmSvrClient_H" Name="TAAFSA~2.h" LongName="TaAfsAdmSvrClient.h" DiskId="1" src="$(var.IncDir)WINNT\TaAfsAdmSvrClient.h" />
+ <File Id="fileTaAfsAdmSvrCommon_H" Name="TAAFSA~3.h" LongName="TaAfsAdmSvrCommon.h" DiskId="1" src="$(var.IncDir)WINNT\TaAfsAdmSvrCommon.h" />
+ <File Id="filetalocale_H" Name="talocale.h" LongName="talocale.h" DiskId="1" src="$(var.IncDir)WINNT\talocale.h" />
+ <File Id="filetal_alloc_H" Name="TAL_AL~1.h" LongName="tal_alloc.h" DiskId="1" src="$(var.IncDir)WINNT\tal_alloc.h" />
+ <File Id="filetal_dialog_H" Name="TAL_DI~1.h" LongName="tal_dialog.h" DiskId="1" src="$(var.IncDir)WINNT\tal_dialog.h" />
+ <File Id="filetal_string_H" Name="TAL_ST~1.h" LongName="tal_string.h" DiskId="1" src="$(var.IncDir)WINNT\tal_string.h" />
+ <File Id="filevptab_H" Name="vptab.h" LongName="vptab.h" DiskId="1" src="$(var.IncDir)WINNT\vptab.h" />
+ </Component>
+ </Directory>
+ </Directory>
+ <Directory Id="dirLib" Name="lib" LongName="lib" SourceName=".">
+ <Component Id="cmp_SDK_Lib" Guid="71BC1B4E-4C4C-4FF8-8DDA-C6AB2BE22142">
+ <File Id="fileafsauthent_LIB" Name="AFSAUT~1.lib" LongName="afsauthent.lib" DiskId="1" src="$(var.LibDir)afsauthent.lib" />
+ <File Id="fileafsdes_LIB" Name="afsdes.lib" LongName="afsdes.lib" DiskId="1" src="$(var.LibDir)afsdes.lib" />
+ <File Id="fileafskfw_LIB" Name="afskfw.lib" LongName="afskfw.lib" DiskId="1" src="$(var.LibDir)afskfw.lib" />
+ <File Id="fileafslogon_LIB" Name="afslogon.lib" LongName="afslogon.lib" DiskId="1" src="$(var.LibDir)afslogon.lib" />
+ <File Id="fileafslwp_LIB" Name="afslwp.lib" LongName="afslwp.lib" DiskId="1" src="$(var.LibDir)afslwp.lib" />
+ <File Id="fileafspthread_LIB" Name="AFSPTH~1.lib" LongName="afspthread.lib" DiskId="1" src="$(var.LibDir)afspthread.lib" />
+ <File Id="fileafsrpc_LIB" Name="afsrpc.lib" LongName="afsrpc.lib" DiskId="1" src="$(var.LibDir)afsrpc.lib" />
+ <File Id="fileafsrx_LIB" Name="afsrx.lib" LongName="afsrx.lib" DiskId="1" src="$(var.LibDir)afsrx.lib" />
+ <File Id="fileafsrxkad_LIB" Name="afsrxkad.lib" LongName="afsrxkad.lib" DiskId="1" src="$(var.LibDir)afsrxkad.lib" />
+ <File Id="fileafsrxstat_LIB" Name="AFSRXS~1.lib" LongName="afsrxstat.lib" DiskId="1" src="$(var.LibDir)afsrxstat.lib" />
+ <File Id="fileafsubik_LIB" Name="afsubik.lib" LongName="afsubik.lib" DiskId="1" src="$(var.LibDir)afsubik.lib" />
+ <File Id="filelanahelper_LIB" Name="LANAHE~1.lib" LongName="lanahelper.lib" DiskId="1" src="$(var.LibDir)lanahelper.lib" />
+ <File Id="filelibafsconf_LIB" Name="LIBAFS~1.lib" LongName="libafsconf.lib" DiskId="1" src="$(var.LibDir)libafsconf.lib" />
+ <File Id="filelibosi_LIB" Name="libosi.lib" LongName="libosi.lib" DiskId="1" src="$(var.LibDir)libosi.lib" />
+ <File Id="filecm_config_OBJ" Name="CM_CON~1.obj" LongName="cm_config.obj" DiskId="1" src="$(var.LibDir)cm_config.obj" />
+ <File Id="filecm_dns_OBJ" Name="cm_dns.obj" LongName="cm_dns.obj" DiskId="1" src="$(var.LibDir)cm_dns.obj" />
+ </Component>
+ <Directory Id="dirLibAfs" Name="afs" LongName="afs" SourceName=".">
+ <Component Id="cmp_SDK_Lib_Afs" Guid="CD671A64-D491-4363-A7AD-645482B481BE">
+ <File Id="fileafsacl_LIB" Name="afsacl.lib" LongName="afsacl.lib" DiskId="1" src="$(var.LibDir)afs\afsacl.lib" />
+ <File Id="fileafsadminutil_LIB" Name="AFSADM~1.lib" LongName="afsadminutil.lib" DiskId="1" src="$(var.LibDir)afs\afsadminutil.lib" />
+ <File Id="fileafsaudit_LIB" Name="afsaudit.lib" LongName="afsaudit.lib" DiskId="1" src="$(var.LibDir)afs\afsaudit.lib" />
+ <File Id="fileafsauth_LIB" Name="afsauth.lib" LongName="afsauth.lib" DiskId="1" src="$(var.LibDir)afs\afsauth.lib" />
+ <File Id="fileafsbos_LIB" Name="afsbos.lib" LongName="afsbos.lib" DiskId="1" src="$(var.LibDir)afs\afsbos.lib" />
+ <File Id="fileafsbosadmin_LIB" Name="AFSBOS~1.lib" LongName="afsbosadmin.lib" DiskId="1" src="$(var.LibDir)afs\afsbosadmin.lib" />
+ <File Id="fileafsbubasics_LIB" Name="AFSBUB~1.lib" LongName="afsbubasics.lib" DiskId="1" src="$(var.LibDir)afs\afsbubasics.lib" />
+ <File Id="fileafsbudb_LIB" Name="afsbudb.lib" LongName="afsbudb.lib" DiskId="1" src="$(var.LibDir)afs\afsbudb.lib" />
+ <File Id="fileafsbutm_LIB" Name="afsbutm.lib" LongName="afsbutm.lib" DiskId="1" src="$(var.LibDir)afs\afsbutm.lib" />
+ <File Id="fileafsbxdb_LIB" Name="afsbxdb.lib" LongName="afsbxdb.lib" DiskId="1" src="$(var.LibDir)afs\afsbxdb.lib" />
+ <File Id="fileafscfgadmin_LIB" Name="AFSCFG~1.lib" LongName="afscfgadmin.lib" DiskId="1" src="$(var.LibDir)afs\afscfgadmin.lib" />
+ <File Id="fileafsclass_LIB" Name="afsclass.lib" LongName="afsclass.lib" DiskId="1" src="$(var.LibDir)afs\afsclass.lib" />
+ <File Id="fileafsclientadmin_LIB" Name="AFSCLI~1.lib" LongName="afsclientadmin.lib" DiskId="1" src="$(var.LibDir)afs\afsclientadmin.lib" />
+ <File Id="fileafscmd_LIB" Name="afscmd.lib" LongName="afscmd.lib" DiskId="1" src="$(var.LibDir)afs\afscmd.lib" />
+ <File Id="fileafscom_err_LIB" Name="AFSCOM~1.lib" LongName="afscom_err.lib" DiskId="1" src="$(var.LibDir)afs\afscom_err.lib" />
+ <File Id="fileafsdir_LIB" Name="afsdir.lib" LongName="afsdir.lib" DiskId="1" src="$(var.LibDir)afs\afsdir.lib" />
+ <File Id="fileafseventlog_LIB" Name="AFSEVE~1.lib" LongName="afseventlog.lib" DiskId="1" src="$(var.LibDir)afs\afseventlog.lib" />
+ <File Id="fileafsint_LIB" Name="afsint.lib" LongName="afsint.lib" DiskId="1" src="$(var.LibDir)afs\afsint.lib" />
+ <File Id="fileafskasadmin_LIB" Name="AFSKAS~1.lib" LongName="afskasadmin.lib" DiskId="1" src="$(var.LibDir)afs\afskasadmin.lib" />
+ <File Id="fileafskauth.krb_LIB" Name="AFSKAU~1.lib" LongName="afskauth.krb.lib" DiskId="1" src="$(var.LibDir)afs\afskauth.krb.lib" />
+ <File Id="fileafskauth_LIB" Name="afskauth.lib" LongName="afskauth.lib" DiskId="1" src="$(var.LibDir)afs\afskauth.lib" />
+ <File Id="fileafspioctl_LIB" Name="AFSPIO~1.lib" LongName="afspioctl.lib" DiskId="1" src="$(var.LibDir)afs\afspioctl.lib" />
+ <File Id="fileafsprocmgmt_LIB" Name="AFSPRO~1.lib" LongName="afsprocmgmt.lib" DiskId="1" src="$(var.LibDir)afs\afsprocmgmt.lib" />
+ <File Id="fileafsprot_LIB" Name="afsprot.lib" LongName="afsprot.lib" DiskId="1" src="$(var.LibDir)afs\afsprot.lib" />
+ <File Id="fileafsptsadmin_LIB" Name="AFSPTS~1.lib" LongName="afsptsadmin.lib" DiskId="1" src="$(var.LibDir)afs\afsptsadmin.lib" />
+ <File Id="fileafsreg_LIB" Name="afsreg.lib" LongName="afsreg.lib" DiskId="1" src="$(var.LibDir)afs\afsreg.lib" />
+ <File Id="fileafsusd_LIB" Name="afsusd.lib" LongName="afsusd.lib" DiskId="1" src="$(var.LibDir)afs\afsusd.lib" />
+ <File Id="fileafsutil_LIB" Name="afsutil.lib" LongName="afsutil.lib" DiskId="1" src="$(var.LibDir)afs\afsutil.lib" />
+ <File Id="fileafsvldb_LIB" Name="afsvldb.lib" LongName="afsvldb.lib" DiskId="1" src="$(var.LibDir)afs\afsvldb.lib" />
+ <File Id="fileafsvol_LIB" Name="afsvol.lib" LongName="afsvol.lib" DiskId="1" src="$(var.LibDir)afs\afsvol.lib" />
+ <File Id="fileafsvolser_LIB" Name="AFSVOL~1.lib" LongName="afsvolser.lib" DiskId="1" src="$(var.LibDir)afs\afsvolser.lib" />
+ <File Id="fileafsvosadmin_LIB" Name="AFSVOS~1.lib" LongName="afsvosadmin.lib" DiskId="1" src="$(var.LibDir)afs\afsvosadmin.lib" />
+ <File Id="filemtafsint_LIB" Name="mtafsint.lib" LongName="mtafsint.lib" DiskId="1" src="$(var.LibDir)afs\mtafsint.lib" />
+ <File Id="filemtafsvldb_LIB" Name="MTAFSV~1.lib" LongName="mtafsvldb.lib" DiskId="1" src="$(var.LibDir)afs\mtafsvldb.lib" />
+ <File Id="fileTaAfsAdmSvrClient_LIB" Name="TAAFSA~1.lib" LongName="TaAfsAdmSvrClient.lib" DiskId="1" src="$(var.LibDir)afs\TaAfsAdmSvrClient.lib" />
+ <File Id="fileTaAfsAppLib_LIB" Name="TAAFSA~2.lib" LongName="TaAfsAppLib.lib" DiskId="1" src="$(var.LibDir)afs\TaAfsAppLib.lib" />
+ <File Id="filetalocale_LIB" Name="talocale.lib" LongName="talocale.lib" DiskId="1" src="$(var.LibDir)afs\talocale.lib" />
+ </Component>
+ </Directory>
+ </Directory>
+ </Directory> <!-- /Program -->
+ </Directory> <!-- /Client -->
+ <Directory Id="dirServer" Name="Server" LongName="Server" SourceName=".">
+ <Directory Id="dirusr" Name="usr" LongName="usr" SourceName=".">
+ <Directory Id="dirafs" Name="afs" LongName="afs" SourceName=".">
+ <Directory Id="dirbin" Name="bin" LongName="bin" SourceName="." src="$(var.ServerDir)">
+ <Component Id="cmf_vlserver_EXE" Guid="F6A43B78-EE17-4483-AA81-4B6C6957977D">
+ <File Id="filevlserver_EXE" Name="vlser.exe" LongName="vlserver.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_volinfo_EXE" Guid="CED56F48-1049-403F-912B-3C186867B563">
+ <File Id="filevolinfo_EXE" Name="volin.exe" LongName="volinfo.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_volserver_EXE" Guid="36A386A0-6DA9-40A7-A12D-6A521559933D">
+ <File Id="filevolserver_EXE" Name="volse.exe" LongName="volserver.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_afskill_EXE" Guid="454AA25A-3C62-4AF9-AFE1-36A54A0E3F1A">
+ <File Id="fileafskill_EXE" Name="afski.exe" LongName="afskill.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_afssvrcfg_EXE" Guid="39F6AB59-FD18-4647-8B83-CDEC59E2368F">
+ <File Id="fileafssvrcfg_EXE" Name="afssv.exe" LongName="afssvrcfg.exe" KeyPath="yes" DiskId="1">
+ <Shortcut Id="scSvrCfgWizard" Directory="dirShortCut" Name="SvrCfgWz.lnk" LongName="Server Configuration Wizard.lnk" Description="$(loc.StrCfgWzdDesc)" Arguments="/wizard" Icon="ico_afssvrcfg" IconIndex="0" Show="normal" WorkingDirectory="dirCommon" />
+ </File>
+ </Component>
+ <Component Id="cmf_bosctlsvc_EXE" Guid="8F6F62A8-BB6D-46C1-BA80-4F207AA24F0D">
+ <File Id="filebosctlsvc_EXE" Name="bosct.exe" LongName="bosctlsvc.exe" KeyPath="yes" DiskId="1" />
+ <ServiceControl Id="TransarcAFSServer" Name="TransarcAFSServer" Stop="both" Delete="both" Wait="yes" />
+ <ServiceInstall Id="svc_Server" Name="TransarcAFSServer" DisplayName="OpenAFS Server" Type="ownProcess" Start="auto" ErrorControl="normal">
+ <!-- ServiceConfig does nothing
+ <ServiceConfig FirstFailureActionType="restart" RestartServiceDelayInSeconds="5" SecondFailureActionType="restart" ThirdFailureActionType="none"/>
+ -->
+ </ServiceInstall>
+ </Component>
+ <Component Id="cmf_bosserver_EXE" Guid="0FF7D0AB-DEA0-429E-928C-588E838E2635">
+ <File Id="filebosserver_EXE" Name="bosse.exe" LongName="bosserver.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_buserver_EXE" Guid="BF674F47-33A0-418D-B7A5-7CE778D747A5">
+ <File Id="filebuserver_EXE" Name="buser.exe" LongName="buserver.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_fileserver_EXE" Guid="F8EF1067-5F55-426B-9258-EBC6CDCF0DDB">
+ <File Id="filefileserver_EXE" Name="files.exe" LongName="fileserver.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_fms_EXE" Guid="250BF6D4-EAC3-4A2F-BD32-CA603CD15020">
+ <File Id="filefms_EXE" Name="fms.exe" LongName="fms.exe" KeyPath="yes" DiskId="1" src="$(var.EtcDir)\fms.exe"/>
+ </Component>
+ <Component Id="cmf_butc_EXE" Guid="96DAC5A8-FD16-4FF5-8BD5-92F25880E557">
+ <File Id="filebutc_EXE" Name="butc.exe" LongName="butc.exe" KeyPath="yes" DiskId="1" src="$(var.EtcDir)\butc.exe"/>
+ </Component>
+ <Component Id="cmf_kaserver_EXE" Guid="73117045-0BB8-4F57-8A75-909F35C2D723">
+ <File Id="filekaserver_EXE" Name="kaser.exe" LongName="kaserver.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_ptserver_EXE" Guid="CDBDE41D-24DF-44E5-97D2-EFA71CDBEECB">
+ <File Id="fileptserver_EXE" Name="ptser.exe" LongName="ptserver.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_salvager_EXE" Guid="E3F3ACE5-B556-4FEF-9DA2-78B194AA6639">
+ <File Id="filesalvager_EXE" Name="salva.exe" LongName="salvager.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_upclient_EXE" Guid="321BB9BF-5FF0-4363-9927-41C60BD526E9">
+ <File Id="fileupclient_EXE" Name="upcli.exe" LongName="upclient.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_upserver_EXE" Guid="3CBD2EF5-43BC-4CA2-B367-87E82DED1406">
+ <File Id="fileupserver_EXE" Name="upser.exe" LongName="upserver.exe" KeyPath="yes" DiskId="1" />
+ </Component>
+ <Component Id="cmf_afsserver_CPL" Guid="E270281E-9DB2-40A8-A418-55B4EC4A3FE7">
+ <File Id="fileafsserver_CPL" Name="afsserve.cpl" LongName="afsserver.cpl" KeyPath="yes" DiskId="1"/>
+ <Registry Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cpls" Name="AFS Server CPL" Value="[#fileafsserver_CPL]" Id="reg_Server30" />
+ </Component>
+
+ <Component Id="cmp_Server_Program" Guid="8C4D0351-8EBF-4192-BF63-DCB3AADF4115" KeyPath="yes">
+ <CreateFolder />
+ <CreateFolder Directory="dirlog" />
+ <CreateFolder Directory="diretc" />
+ <CreateFolder Directory="dirlocal" />
+ </Component>
+
+ <?ifdef DebugSyms?>
+ <Component Id="cmp_Server_Program_Debug" Guid="5F7BA9F7-E9BD-4AC3-9232-5EFBF6B740F8">
+ <File Id="filevlserver_PDB" Name="vlser.pdb" LongName="vlserver.pdb" DiskId="1" />
+ <File Id="filevolinfo_PDB" Name="volin.pdb" LongName="volinfo.pdb" DiskId="1" />
+ <File Id="filevolserver_PDB" Name="volse.pdb" LongName="volserver.pdb" DiskId="1" />
+ <File Id="fileafskill_PDB" Name="afski.pdb" LongName="afskill.pdb" DiskId="1" />
+ <File Id="fileafssvrcfg_PDB" Name="afssv.pdb" LongName="afssvrcfg.pdb" DiskId="1" />
+ <File Id="filebosctlsvc_PDB" Name="bosct.pdb" LongName="bosctlsvc.pdb" DiskId="1" />
+ <File Id="filebosserver_PDB" Name="bosse.pdb" LongName="bosserver.pdb" DiskId="1" />
+ <File Id="filebuserver_PDB" Name="buser.pdb" LongName="buserver.pdb" DiskId="1" />
+ <File Id="filefileserver_PDB" Name="files.pdb" LongName="fileserver.pdb" DiskId="1" />
+ <File Id="filefms_PDB" Name="fms.pdb" LongName="fms.pdb" DiskId="1" src="$(var.EtcDir)\fms.pdb"/>
+ <File Id="filebutc_PDB" Name="butc.pdb" LongName="butc.pdb" DiskId="1" src="$(var.EtcDir)\butc.pdb"/>
+ <File Id="filekaserver_PDB" Name="kaser.pdb" LongName="kaserver.pdb" DiskId="1" />
+ <File Id="fileptserver_PDB" Name="ptser.pdb" LongName="ptserver.pdb" DiskId="1" />
+ <File Id="filesalvager_PDB" Name="salva.pdb" LongName="salvager.pdb" DiskId="1" />
+ <File Id="fileupclient_PDB" Name="upcli.pdb" LongName="upclient.pdb" DiskId="1" />
+ <File Id="fileupserver_PDB" Name="upser.pdb" LongName="upserver.pdb" DiskId="1" />
+ <File Id="fileafsserver_PDB" Name="afsserve.pdb" LongName="afsserver.pdb" KeyPath="yes" DiskId="1"/>
+ </Component>
+ <?endif?>
+
+ </Directory>
+ <Directory Id="dirlog" Name="log" />
+ <Directory Id="diretc" Name="etc" />
+ <Directory Id="dirlocal" Name="local" />
+ </Directory>
+ </Directory>
+ </Directory> <!-- Server -->
+
+ </Directory> <!-- AFS -->
+ </Directory> <!-- program files -->
+ <Directory Id="ProgramMenuFolder" Name=".">
+ <Directory Id="dirShortCut" Name="OpenAFS" LongName="OpenAFS"/>
+ </Directory>
+ <Directory Id="StartupFolder" Name=".">
+ </Directory>
+</Include>
--- /dev/null
+<Include>
+
+<ProgressText Action="Advertise" Template="">Anwendungsprogramm wird angeboten</ProgressText>
+
+<ProgressText Action="AllocateRegistrySpace" Template="Freier Speicherplatz: [1]">In der Registrierung wird Speicherplatz reserviert</ProgressText>
+
+<ProgressText Action="AppSearch" Template="Eigenschaft: [1], Signatur: [2]">Installierte Anwendungsprogramme werden gesucht</ProgressText>
+
+<ProgressText Action="BindImage" Template="Datei: [1]">Ausführbare Dateien werden gebunden</ProgressText>
+
+<ProgressText Action="CCPSearch" Template="">Kompatible Produkte werden gesucht</ProgressText>
+
+<ProgressText Action="CostFinalize" Template="">Speicherbedarf wird berechnet</ProgressText>
+
+<ProgressText Action="CostInitialize" Template="">Speicherbedarf wird berechnet</ProgressText>
+
+<ProgressText Action="CreateFolders" Template="Ordner: [1]">Ordner werden erstellt</ProgressText>
+
+<ProgressText Action="CreateShortcuts" Template="Verknüpfung: [1]">Verknüpfungen werden erstellt</ProgressText>
+
+<ProgressText Action="DeleteServices" Template="Dienst: [1]">Dienste werden gelöscht</ProgressText>
+
+<ProgressText Action="DuplicateFiles" Template="Datei: [1], Ordner: [9], Größe: [6]">Dateien werden dupliziert</ProgressText>
+
+<ProgressText Action="FileCost" Template="">Speicherbedarf wird berechnet</ProgressText>
+
+<ProgressText Action="FindRelatedProducts" Template="Anwendung gefunden: [1]">Verwandte Anwendungen werden gesucht</ProgressText>
+
+<ProgressText Action="GenerateScript" Template="[1]">Skriptoperationen werden generiert für Aktion:</ProgressText>
+
+<ProgressText Action="InstallAdminPackage" Template="Datei: [1], Ordner: [9], Größe: [6]">Netzwerkinstallationsdateien werden kopiert</ProgressText>
+
+<ProgressText Action="InstallFiles" Template="Datei: [1], Ordner: [9], Größe: [6]">Neue Dateien werden kopiert</ProgressText>
+
+<ProgressText Action="InstallODBC" Template="">ODBC-Komponenten werden installiert</ProgressText>
+
+<ProgressText Action="InstallServices" Template="Dienst: [2]">Neue Dienste werden installiert</ProgressText>
+
+<ProgressText Action="InstallSFPCatalogFile" Template="Datei: [1], Abhängigkeiten: [2]">Systemkatalog wird installiert</ProgressText>
+
+<ProgressText Action="InstallValidate" Template="">Die Installation wird überprüft</ProgressText>
+
+<ProgressText Action="LaunchConditions" Template="">Die Startbedingungen werden überprüft</ProgressText>
+
+<ProgressText Action="MigrateFeatureStates" Template="Anwendung: [1]">Funktionszustände verwandter Anwendungen werden migriert</ProgressText>
+
+<ProgressText Action="MoveFiles" Template="Datei: [1], Ordner: [9], Größe: [6]">Dateien werden verschoben</ProgressText>
+
+<ProgressText Action="MsiPublishAssemblies" Template="Anwendungskontext:[1], Assemblierungsname:[2]">Assemblierungsinformationen werden veröffentlicht</ProgressText>
+
+<ProgressText Action="MsiUnpublishAssemblies" Template="Anwendungskontext:[1], Assemblierungsname:[2]">Veröffentlichung der Assemblierungsinformationen wird aufgehoben</ProgressText>
+
+<ProgressText Action="PatchFiles" Template="Datei: [1], Ordner: [2], Größe: [3]">Dateien werden gepatcht</ProgressText>
+
+<ProgressText Action="ProcessComponents" Template="">Registrierung der Komponente(n) wird aktualisiert</ProgressText>
+
+<ProgressText Action="PublishComponents" Template="Komponentenkennung: [1], Kennzeichner: [2]">Qualifizierte Komponenten werden veröffentlicht</ProgressText>
+
+<ProgressText Action="PublishFeatures" Template="Funktion: [1]">Produktfunktionen werden veröffentlicht</ProgressText>
+
+<ProgressText Action="PublishProduct" Template="">Produktinformation wird veröffentlicht</ProgressText>
+
+<ProgressText Action="RegisterClassInfo" Template="Klassenkennung: [1]">Klassenserver werden registriert</ProgressText>
+
+<ProgressText Action="RegisterComPlus" Template="Anwendungskennung: [1]{{, Anwendungstyp: [2], Benutzer: [3], RSN: [4]}}">COM+-Anwendungen und Komponenten werden registriert</ProgressText>
+
+<ProgressText Action="RegisterExtensionInfo" Template="Erweiterung: [1]">Erweiterungsserver werden registriert</ProgressText>
+
+<ProgressText Action="RegisterFonts" Template="Schriftart: [1]">Schriftarten werden registriert</ProgressText>
+
+<ProgressText Action="RegisterMIMEInfo" Template="MIME-Inhaltstyp: [1], Erweiterung: [2]">MIME-Informationen werden registriert</ProgressText>
+
+<ProgressText Action="RegisterProduct" Template="[1]">Produkt wird registriert</ProgressText>
+
+<ProgressText Action="RegisterProgIdInfo" Template="Programmkennung: [1]">Programmidentifikatoren werden registriert</ProgressText>
+
+<ProgressText Action="RegisterTypeLibraries" Template="Bibliothekenkennung: [1]">Typbibliotheken werden registriert</ProgressText>
+
+<ProgressText Action="RegisterUser" Template="[1]">Benutzer wird registriert</ProgressText>
+
+<ProgressText Action="RemoveDuplicateFiles" Template="Datei: [1], Ordner: [9]">Duplizierte Dateien werden entfernt</ProgressText>
+
+<ProgressText Action="RemoveEnvironmentStrings" Template="Name: [1], Wert: [2], Aktion [3]">Umgebungsstrings werden aktualisiert</ProgressText>
+
+<ProgressText Action="RemoveExistingProducts" Template="Anwendung: [1], Befehlszeile: [2]">Anwendungen werden entfernt</ProgressText>
+
+<ProgressText Action="RemoveFiles" Template="Datei: [1], Ordner: [9]">Dateien werden entfernt</ProgressText>
+
+<ProgressText Action="RemoveFolders" Template="Ordner: [1]">Ordner werden entfernt</ProgressText>
+
+<ProgressText Action="RemoveIniValues" Template="Datei: [1], Abschnitt: [2], Schlüssel: [3], Wert: [4]">INI-Dateieinträge werden entfernt</ProgressText>
+
+<ProgressText Action="RemoveODBC" Template="">ODBC-Komponenten werden entfernt</ProgressText>
+
+<ProgressText Action="RemoveRegistryValues" Template="Schlüssel: [1], Name: [2]">Werte werden aus der Systemregistrierung entfernt</ProgressText>
+
+<ProgressText Action="RemoveShortcuts" Template="Verknüpfungen: [1]">Verknüpfungen werden entfernt</ProgressText>
+
+<ProgressText Action="RMCCPSearch" Template="">Kompatible Produkte werden gesucht</ProgressText>
+
+<ProgressText Action="Rollback" Template="[1]">Aktion wird rückgängig gemacht:</ProgressText>
+
+<ProgressText Action="RollbackCleanup" Template="Datei: [1]">Sicherungsdateien werden entfernt</ProgressText>
+
+<ProgressText Action="SelfRegModules" Template="Datei: [1], Ordner: [2]">Module werden registriert</ProgressText>
+
+<ProgressText Action="SelfUnregModules" Template="Datei: [1], Ordner: [2]">Module werden aus der Registrierung entfernt</ProgressText>
+
+<ProgressText Action="SetODBCFolders" Template="">ODBC-Ordner werden initialisiert</ProgressText>
+
+<ProgressText Action="StartServices" Template="Dienst: [1]">Dienste werden gestartet</ProgressText>
+
+<ProgressText Action="StopServices" Template="Dienst: [1]">Dienst werden angehalten</ProgressText>
+
+<ProgressText Action="UnmoveFiles" Template="Datei: [1], Ordner: [9]">Verschobene Dateien werden entfernt</ProgressText>
+
+<ProgressText Action="UnpublishComponents" Template="Komponentenkennung: [1], Kennzeichner: [2]">Veröffentlichung qualifizierter Komponenten wird rückgängig gemacht</ProgressText>
+
+<ProgressText Action="UnpublishFeatures" Template="Funktion: [1]">Veröffentlichung von Produktfunktionen wird rückgängig gemacht</ProgressText>
+
+<ProgressText Action="UnpublishProduct" Template="">Veröffentlichung von Produktinformation wird rückgängig gemacht</ProgressText>
+
+<ProgressText Action="UnregisterClassInfo" Template="Klassenkennung: [1]">Klassenserver werden aus der Registrierung entfernt</ProgressText>
+
+<ProgressText Action="UnregisterComPlus" Template="Anwendungskennung: [1]{{, Anwendungstyp: [2]}}">COM+-Anwendungen und Komponenten werden aus der Registrierung entfernt</ProgressText>
+
+<ProgressText Action="UnregisterExtensionInfo" Template="Erweiterung: [1]">Erweiterungsserver werden aus der Registrierung entfernt</ProgressText>
+
+<ProgressText Action="UnregisterFonts" Template="Schriftart: [1]">Schriftarten werden aus der Registrierung entfernt</ProgressText>
+
+<ProgressText Action="UnregisterMIMEInfo" Template="MIME-Typ: [1], Erweiterung: [2]">MIME-Informationen werden aus der Registrierung entfernt</ProgressText>
+
+<ProgressText Action="UnregisterProgIdInfo" Template="Programmkennung: [1]">Programmidentifikatoren werden aus der Registrierung entfernt</ProgressText>
+
+<ProgressText Action="UnregisterTypeLibraries" Template="Bibliothekenkennung: [1]">Typbibliotheken werden aus der Registrierung entfernt</ProgressText>
+
+<ProgressText Action="WriteEnvironmentStrings" Template="Name: [1], Wert: [2], Aktion [3]">Umgebungsstrings werden aktualisiert</ProgressText>
+
+<ProgressText Action="WriteIniValues" Template="Datei: [1], Abschnitt: [2], Schlüssel: [3], Wert: [4]">INI-Dateiwerte werden geschrieben</ProgressText>
+
+<ProgressText Action="WriteRegistryValues" Template="Schlüssel: [1], Name: [2], Wert: [3]">Werte werden in die Systemregistrierung geschrieben</ProgressText>
+
+</Include>
--- /dev/null
+<Include>
+
+<Error Id="0">{{Schwerwiegender Fehler: }}</Error>
+
+<Error Id="1">{{Fehler [1]. }}</Error>
+
+<Error Id="2">Warnung [1]. </Error>
+
+<Error Id="3"></Error>
+
+<Error Id="4">Information [1]. </Error>
+
+<Error Id="5">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]}}</Error>
+
+<Error Id="6"></Error>
+
+<Error Id="7">{{Festplatte voll: }}</Error>
+
+<Error Id="8">Aktion [Time]: [1]. [2]</Error>
+
+<Error Id="9">[ProductName]</Error>
+
+<Error Id="10">{[2]}{, [3]}{, [4]}</Error>
+
+<Error Id="11">Art der Nachricht: [1], Argument: [2]</Error>
+
+<Error Id="12">=== Protokollierung gestartet: [Date] [Time] ===</Error>
+
+<Error Id="13">=== Protokollierung beendet: [Date] [Time] ===</Error>
+
+<Error Id="14">Aktion gestartet um [Time]: [1].</Error>
+
+<Error Id="15">Aktion beendet um [Time]: [1]. Rückgabewert [2].</Error>
+
+<Error Id="16">Verbleibende Zeit: {[1] Minute(n) }{[2] Sekunde(n)}</Error>
+
+<Error Id="17">Nicht genügend Arbeitsspeicher. Beenden Sie andere Anwendungen und wiederholen Sie den Vorgang.</Error>
+
+<Error Id="18">Installer antwortet nicht mehr.</Error>
+
+<Error Id="19">Installer wurde vorzeitig angehalten.</Error>
+
+<Error Id="20">Warten Sie, während Windows [ProductName] konfiguriert.</Error>
+
+<Error Id="21">Erforderliche Daten werden ermittelt...</Error>
+
+<Error Id="22">Ältere Versionen dieser Anwendung werden entfernt...</Error>
+
+<Error Id="23">Entfernen älterer Versionen dieser Anwendung wird vorbereitet...</Error>
+
+<Error Id="32">{[ProductName]-}Setup erfolgreich abgeschlossen.</Error>
+
+<Error Id="33">{[ProductName]-}Setup fehlgeschlagen.</Error>
+
+<Error Id="1101">Fehler beim Lesen von Datei: [2]. {{ Systemfehler [3].}} Überprüfen Sie, ob die Datei existiert und ob Sie darauf zugreifen können.</Error>
+
+<Error Id="1301">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.</Error>
+
+<Error Id="1302">Legen Sie den Datenträger ein: [2]</Error>
+
+<Error Id="1303">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.</Error>
+
+<Error Id="1304">Fehler beim Schreiben in Datei: [2]. Überprüfen Sie, ob Sie auf den Ordner zugreifen können.</Error>
+
+<Error Id="1305">Fehler beim Lesen von Datei: [2] {{ Systemfehler [3].}} Überprüfen Sie, ob die Datei existiert und ob Sie darauf zugreifen können.</Error>
+
+<Error Id="1306">Eine andere Anwendung hat exklusiven Zugriff auf die Datei "[2]". Beenden Sie alle anderen Anwendungen. Klicken Sie danach auf "Wiederholen".</Error>
+
+<Error Id="1307">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.</Error>
+
+<Error Id="1308">Die Quelldatei wurde nicht gefunden: [2]. Überprüfen Sie, ob die Datei existiert und ob Sie darauf zugreifen können.</Error>
+
+<Error Id="1309">Fehler beim Lesen von Datei: [3]. {{ Systemfehler [2].}} Überprüfen Sie, ob die Datei existiert und ob Sie darauf zugreifen können.</Error>
+
+<Error Id="1310">Fehler beim Schreiben in Datei: [3]. {{ Systemfehler [2].}} Überprüfen Sie, ob Sie auf den Ordner zugreifen können.</Error>
+
+<Error Id="1311">Die Quelldatei{{ (CAB-Datei)}} wurde nicht gefunden: [2]. Überprüfen Sie, ob die Datei existiert und ob Sie darauf zugreifen können.</Error>
+
+<Error Id="1312">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.</Error>
+
+<Error Id="1313">Das Volume [2] steht im Augenblick nicht zur Verfügung. Wählen Sie ein anderes Volume aus.</Error>
+
+<Error Id="1314">Der angegebene Pfad "[2]" ist nicht verfügbar.</Error>
+
+<Error Id="1315">Schreibzugriff auf den angegebenen Ordner "[2]" ist nicht möglich.</Error>
+
+<Error Id="1316">Beim Versuch, die Datei [2] zu lesen, ist ein Netzwerkfehler aufgetreten.</Error>
+
+<Error Id="1317">Beim Versuch, den Ordner [2] zu erstellen, ist ein Fehler aufgetreten.</Error>
+
+<Error Id="1318">Beim Versuch, den Ordner [2] zu erstellen, ist ein Netzwerkfehler aufgetreten.</Error>
+
+<Error Id="1319">Beim Versuch, die Quelldatei (CAB-Datei) [2] zu öffnen, ist ein Netzwerkfehler aufgetreten.</Error>
+
+<Error Id="1320">Der angegebene Pfad ist zu lang: [2]</Error>
+
+<Error Id="1321">Installer besitzt keine ausreichenden Berechtigungen, um diese Datei zu verändern: [2].</Error>
+
+<Error Id="1322">Ein Teil des Ordnerpfads "[2]" ist ungültig. Er ist entweder leer, oder er überschreitet die vom System zugelassene Länge.</Error>
+
+<Error Id="1323">Der Ordnerpfad "[2]" enthält Wörter, die in Ordnerpfaden ungültig sind.</Error>
+
+<Error Id="1324">Der Ordnerpfad "[2]" enthält ein ungültiges Zeichen.</Error>
+
+<Error Id="1325">"[2]" ist kein gültiger kurzer Dateiname.</Error>
+
+<Error Id="1326">Fehler beim Abrufen der Dateisicherheit: [3] GetLastError: [2]</Error>
+
+<Error Id="1327">Ungültiges Laufwerk: [2]</Error>
+
+<Error Id="1328">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]}}</Error>
+
+<Error Id="1329">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.</Error>
+
+<Error Id="1330">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.}}</Error>
+
+<Error Id="1331">Die Datei [2] konnte nicht kopiert werden: CRC-Fehler.</Error>
+
+<Error Id="1332">Die Datei [2] konnte nicht verschoben werden: CRC-Fehler.</Error>
+
+<Error Id="1333">Die Datei [2] konnte nicht gepatcht werden: CRC-Fehler.</Error>
+
+<Error Id="1334">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.</Error>
+
+<Error Id="1335">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.</Error>
+
+<Error Id="1336">Beim Erstellen der für die Installation erforderlichen temporären Datei ist ein Fehler aufgetreten.{{ Ordner: [3]. Systemfehlercode: [2]}}</Error>
+
+<Error Id="1401">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. </Error>
+
+<Error Id="1402">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. </Error>
+
+<Error Id="1403">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. </Error>
+
+<Error Id="1404">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. </Error>
+
+<Error Id="1405">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. </Error>
+
+<Error Id="1406">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.</Error>
+
+<Error Id="1407">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.</Error>
+
+<Error Id="1408">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. </Error>
+
+<Error Id="1409">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.</Error>
+
+<Error Id="1410">Der verfügbare Registrierungsspeicher konnte nicht vergrößert werden. [2] KB freier Registrierungsspeicher sind zum Installieren dieser Anwendung erforderlich.</Error>
+
+<Error Id="1500">Im Augenblick wird eine weitere Installation ausgeführt. Sie müssen erst die zweite Installation abschließen, bevor Sie diese Installation fortsetzen können.</Error>
+
+<Error Id="1501">Fehler beim Zugriff auf gesicherte Daten. Stellen Sie sicher, dass Windows Installer korrekt konfiguriert ist und wiederholen Sie die Installation.</Error>
+
+<Error Id="1502">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.</Error>
+
+<Error Id="1503">Benutzer "[2]" hat die Installation des Produkts "[3]" bereits initialisiert. Dieser Benutzer muss die Installation wiederholen, bevor dieses Produkt verwendet werden kann.</Error>
+
+<Error Id="1601">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.</Error>
+
+<Error Id="1602">Sind Sie sicher, dass Sie abbrechen möchten?</Error>
+
+<Error Id="1603">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.</Error>
+
+<Error Id="1604">Das Produkt "[2]" ist bereits installiert und verhindert die Installation dieses Produkts. Die beiden Produkte sind inkompatibel.</Error>
+
+<Error Id="1605">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.</Error>
+
+<Error Id="1606">Zugriff auf die Netzwerkadresse [2] war nicht möglich.</Error>
+
+<Error Id="1607">Die folgenden Anwendungen sollten geschlossen werden, bevor Sie die Installationen fortsetzen:</Error>
+
+<Error Id="1608">Es wurde keine Installation eines der zur Installation dieses Produkts erforderlichen passenden Produkte auf diesem Computer gefunden.</Error>
+
+<Error Id="1609">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]}}</Error>
+
+<Error Id="1701">Der Schlüssel [2] ist ungültig. Überprüfen Sie, ob Sie den korrekten Schlüssel eingegeben haben.</Error>
+
+<Error Id="1702">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.</Error>
+
+<Error Id="1703">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.</Error>
+
+<Error Id="1704">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?</Error>
+
+<Error Id="1705">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?</Error>
+
+<Error Id="1706">Für das Produkt [2] wurde kein Installationspaket gefunden. Wiederholen Sie die Installation und verwenden Sie dabei eine gültige Kopie des Installationspakets "[3]".</Error>
+
+<Error Id="1707">Die Installation wurde erfolgreich abgeschlossen.</Error>
+
+<Error Id="1708">Die Installation ist fehlgeschlagen.</Error>
+
+<Error Id="1709">Produkt: [2] -- [3]</Error>
+
+<Error Id="1710">Sie können entweder den ursprünglichen Zustand des Computers wiederherstellen oder die Installation später fortsetzen. Möchten Sie wiederherstellen?</Error>
+
+<Error Id="1711">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.</Error>
+
+<Error Id="1712">Eine oder mehrere Datei(en), die zum Wiederherstellen des ursprünglichen Zustands des Computers erforderlich sind, wurden nicht gefunden. Wiederherstellen nicht möglich.</Error>
+
+<Error Id="1713">[2] kann eines seiner erforderlichen Produkte nicht installieren. Setzen Sie sich mit dem technischen Supportpersonal in Verbindung. {{Systemfehler: [3].}}</Error>
+
+<Error Id="1714">Die ältere Version von [2] kann nicht entfernt werden. Setzen Sie sich mit dem technischen Supportpersonal in Verbindung. {{Systemfehler: [3].}}</Error>
+
+<Error Id="1715">[2] wird installiert</Error>
+
+<Error Id="1716">[2] wird konfiguriert</Error>
+
+<Error Id="1717">[2] wird entfernt</Error>
+
+<Error Id="1718">Die Datei [2] wurde von Richtlinie für die digitale Signatur zurückgewiesen.</Error>
+
+<Error Id="1719">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.</Error>
+
+<Error Id="1720">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] }}</Error>
+
+<Error Id="1721">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] }}</Error>
+
+<Error Id="1722">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] }}</Error>
+
+<Error Id="1723">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] }}</Error>
+
+<Error Id="1724">Das Entfernen wurde erfolgreich abgeschlossen.</Error>
+
+<Error Id="1725">Das Entfernen ist fehlgeschlagen.</Error>
+
+<Error Id="1726">Die Ankündigung wurde erfolgreich abgeschlossen.</Error>
+
+<Error Id="1727">Die Ankündigung ist fehlgeschlagen.</Error>
+
+<Error Id="1728">Die Konfiguration wurde erfolgreich abgeschlossen.</Error>
+
+<Error Id="1729">Die Konfiguration ist fehlgeschlagen.</Error>
+
+<Error Id="1730">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.</Error>
+
+<Error Id="1801">Der Pfad [2] ist ungültig. Geben Sie einen gültigen Pfad an.</Error>
+
+<Error Id="1802">Nicht genügend Arbeitsspeicher. Beenden Sie andere Anwendungen und wiederholen Sie den Vorgang.</Error>
+
+<Error Id="1803">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.</Error>
+
+<Error Id="1804">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.</Error>
+
+<Error Id="1805">Der Ordner [2] existiert nicht. Geben Sie den Pfad für einen existierenden Ordner ein.</Error>
+
+<Error Id="1806">Die Zugriffsrechte reichen nicht aus, um diesen Ordner zu lesen.</Error>
+
+<Error Id="1807">Es konnte kein gültiger Zielordner für die Installation bestimmt werden.</Error>
+
+<Error Id="1901">Fehler beim Versuch, von der Quellinstallationsdatenbank zu lesen: [2].</Error>
+
+<Error Id="1902">Planung des Computerneustarts: Die Datei [2] wird in [3] umbenannt. Der Computer muss neu gestartet werden, um den Vorgang abzuschließen.</Error>
+
+<Error Id="1903">Planung des Computerneustarts: Die Datei [2] wird gelöscht. Der Computer muss neu gestartet werden, um den Vorgang abzuschließen.</Error>
+
+<Error Id="1904">Fehler beim Registrieren von Modul [2]. HRESULT [3]. Wenden Sie sich an den Support.</Error>
+
+<Error Id="1905">Fehler beim Entfernen von Modul [2] aus der Registrierung. HRESULT [3]. Wenden Sie sich an den Support.</Error>
+
+<Error Id="1906">Fehler beim Zwischenspeichern von Paket [2]. Fehler: [3]. Wenden Sie sich an den Support.</Error>
+
+<Error Id="1907">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.</Error>
+
+<Error Id="1908">Schriftart [2] konnte nicht aus der Registrierung entfernt werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Entfernen von Schriftarten besitzen.</Error>
+
+<Error Id="1909">Verknüpfung [2] konnte nicht erstellt werden. Überprüfen Sie, ob der Zielordner vorhanden ist und ob Sie Zugriff darauf haben.</Error>
+
+<Error Id="1910">Verknüpfung [2] konnte nicht entfernt werden. Überprüfen Sie, ob die Verknüpfungsdatei vorhanden ist und ob Sie darauf Zugriff haben.</Error>
+
+<Error Id="1911">Typbibliothek für Datei [2] konnte nicht registriert werden. Setzen Sie sich mit dem Supportpersonal in Verbindung.</Error>
+
+<Error Id="1912">Typbibliothek für Datei [2] konnte nicht aus der Registrierung entfernt werden. Setzen Sie sich mit dem Supportpersonal in Verbindung.</Error>
+
+<Error Id="1913">Aktualisieren der INI-Datei war nicht möglich: [2][3]. Überprüfen Sie, ob die Datei vorhanden ist und ob Sie darauf Zugriff haben.</Error>
+
+<Error Id="1914">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.</Error>
+
+<Error Id="1915">Fehler beim Entfernen des ODBC-Treibermanagers, ODBC-Fehler [2]: [3]. Setzen Sie sich mit dem Supportpersonal in Verbindung.</Error>
+
+<Error Id="1916">Fehler bei der Installation des ODBC-Treibermanagers. ODBC-Fehler [2]: [3]. Setzen Sie sich mit dem Supportpersonal in Verbindung.</Error>
+
+<Error Id="1917">Fehler beim Entfernen des ODBC-Treibers: [4], ODBC-Fehler [2]: [3]. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Entfernen von ODBC-Treibern besitzen.</Error>
+
+<Error Id="1918">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.</Error>
+
+<Error Id="1919">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.</Error>
+
+<Error Id="1920">Dienst "[2]" ([3]) konnte nicht gestartet werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Starten von Systemdiensten besitzen.</Error>
+
+<Error Id="1921">Dienst "[2]" ([3]) konnte nicht angehalten werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Anhalten von Systemdiensten besitzen.</Error>
+
+<Error Id="1922">Dienst "[2]" ([3]) konnte nicht gelöscht werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Entfernen von Systemdiensten besitzen.</Error>
+
+<Error Id="1923">Dienst "[2]" ([3]) konnte nicht installiert werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Installieren von Systemdiensten besitzen.</Error>
+
+<Error Id="1924">Umgebungsvariable "[2]" konnte nicht aktualisiert werden. Überprüfen Sie, ob Sie ausreichende Berechtigungen zum Ändern von Umgebungsvariablen besitzen.</Error>
+
+<Error Id="1925">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.</Error>
+
+<Error Id="1926">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.</Error>
+
+<Error Id="1927">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.</Error>
+
+<Error Id="1928">Fehler beim Registrieren einer COM+-Anwendung. Setzen Sie sich mit dem Supportpersonal in Verbindung.</Error>
+
+<Error Id="1929">Fehler beim Entfernen einer COM+-Anwendung aus der Registrierung. Setzen Sie sich mit dem Supportpersonal in Verbindung.</Error>
+
+<Error Id="1930">Die Beschreibung für Dienst "[2]" ([3]) konnte nicht geändert werden.</Error>
+
+<Error Id="1931">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]}}</Error>
+
+<Error Id="1932">Der Windows Installer-Dienst kann die geschützte Windows-Datei [2] nicht aktualisieren. {{Paketversion: [3], vom System geschützte Version: [4], SFP-Fehler: [5]}}</Error>
+
+<Error Id="1933">Einige geschützte Windows-Dateien konnten nicht aktualisiert werden. {{SFP-Fehler: [2]. Liste der geschützten Dateien:\r\n[3]}}</Error>
+
+<Error Id="1934">Benutzerinstallationen sind über die Computerrichtlinie deaktiviert.</Error>
+
+<Error Id="1935">Während der Installation der Assemblierungskomponente [2] ist ein Fehler aufgetreten. HRESULT: [3]. {{Assemblierungsschnittstelle: [4], Funktion: [5], Assemblierungsname: [6]}}</Error>
+
+</Include>
--- /dev/null
+<Include>
+
+<ProgressText Action="Advertise" Template="">Advertising application</ProgressText>
+
+<ProgressText Action="AppSearch" Template="Property: [1], Signature: [2]">Searching for installed applications</ProgressText>
+
+<ProgressText Action="AllocateRegistrySpace" Template="Free space: [1]">Allocating registry space</ProgressText>
+
+<ProgressText Action="BindImage" Template="File: [1]">Binding executables</ProgressText>
+
+<ProgressText Action="CCPSearch" Template="">Searching for qualifying products</ProgressText>
+
+<ProgressText Action="CostFinalize" Template="">Computing space requirements</ProgressText>
+
+<ProgressText Action="CostInitialize" Template="">Computing space requirements</ProgressText>
+
+<ProgressText Action="CreateFolders" Template="Folder: [1]">Creating folders</ProgressText>
+
+<ProgressText Action="CreateShortcuts" Template="Shortcut: [1]">Creating shortcuts</ProgressText>
+
+<ProgressText Action="DeleteServices" Template="Service: [1]">Deleting services</ProgressText>
+
+<ProgressText Action="DuplicateFiles" Template="File: [1], Directory: [9], Size: [6]">Creating duplicate files</ProgressText>
+
+<ProgressText Action="FileCost" Template="">Computing space requirements</ProgressText>
+
+<ProgressText Action="FindRelatedProducts" Template="Found application: [1]">Searching for related applications</ProgressText>
+
+<ProgressText Action="GenerateScript" Template="[1]">Generating script operations for action:</ProgressText>
+
+<ProgressText Action="InstallAdminPackage" Template="File: [1], Directory: [9], Size: [6]">Copying network install files</ProgressText>
+
+<ProgressText Action="InstallFiles" Template="File: [1], Directory: [9], Size: [6]">Copying new files</ProgressText>
+
+<ProgressText Action="InstallODBC" Template="">Installing ODBC components</ProgressText>
+
+<ProgressText Action="InstallServices" Template="Service: [2]">Installing new services</ProgressText>
+
+<ProgressText Action="InstallValidate" Template="">Validating install</ProgressText>
+
+<ProgressText Action="LaunchConditions" Template="">Evaluating launch conditions</ProgressText>
+
+<ProgressText Action="MigrateFeatureStates" Template="Application: [1]">Migrating feature states from related applications</ProgressText>
+
+<ProgressText Action="MoveFiles" Template="File: [1], Directory: [9], Size: [6]">Moving files</ProgressText>
+
+<ProgressText Action="PatchFiles" Template="File: [1], Directory: [2], Size: [3]">Patching files</ProgressText>
+
+<ProgressText Action="ProcessComponents" Template="">Updating component registration</ProgressText>
+
+<ProgressText Action="PublishComponents" Template="Component ID: [1], Qualifier: [2]">Publishing Qualified Components</ProgressText>
+
+<ProgressText Action="PublishFeatures" Template="Feature: [1]">Publishing Product Features</ProgressText>
+
+<ProgressText Action="PublishProduct" Template="">Publishing product information</ProgressText>
+
+<ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">Registering Class servers</ProgressText>
+
+<ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">Registering COM+ Applications and Components</ProgressText>
+
+<ProgressText Action="RegisterExtensionInfo" Template="Extension: [1]">Registering extension servers</ProgressText>
+
+<ProgressText Action="RegisterFonts" Template="Font: [1]">Registering fonts</ProgressText>
+
+<ProgressText Action="RegisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">Registering MIME info</ProgressText>
+
+<ProgressText Action="RegisterProduct" Template="[1]">Registering product</ProgressText>
+
+<ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">Unregistering program identifiers</ProgressText>
+
+<ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">Registering type libraries</ProgressText>
+
+<ProgressText Action="RegisterUser" Template="[1]">Registering user</ProgressText>
+
+<ProgressText Action="RemoveDuplicateFiles" Template="File: [1], Directory: [9]">Removing duplicated files</ProgressText>
+
+<ProgressText Action="RemoveEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">Updating environment strings</ProgressText>
+
+<ProgressText Action="RemoveExistingProducts" Template="Application: [1], Command line: [2]">Removing applications</ProgressText>
+
+<ProgressText Action="RemoveFiles" Template="File: [1], Directory: [9]">Removing files</ProgressText>
+
+<ProgressText Action="RemoveFolders" Template="Folder: [1]">Removing folders</ProgressText>
+
+<ProgressText Action="RemoveIniValues" Template="File: [1], Section: [2], Key: [3], Value: [4]">Removing INI files entries</ProgressText>
+
+<ProgressText Action="RemoveODBC" Template="">Removing ODBC components</ProgressText>
+
+<ProgressText Action="RemoveRegistryValues" Template="Key: [1], Name: [2]">Removing system registry values</ProgressText>
+
+<ProgressText Action="RemoveShortcuts" Template="Shortcut: [1]">Removing shortcuts</ProgressText>
+
+<ProgressText Action="RMCCPSearch" Template="">Searching for qualifying products</ProgressText>
+
+<ProgressText Action="Rollback" Template="[1]">Rolling back action:</ProgressText>
+
+<ProgressText Action="RollbackCleanup" Template="File: [1]">Removing backup files</ProgressText>
+
+<ProgressText Action="SelfRegModules" Template="File: [1], Folder: [2]">Registering modules</ProgressText>
+
+<ProgressText Action="SelfUnregModules" Template="File: [1], Folder: [2]">Unregistering modules</ProgressText>
+
+<ProgressText Action="SetODBCFolders" Template="">Initializing ODBC directories</ProgressText>
+
+<ProgressText Action="StartServices" Template="Service: [1]">Starting services</ProgressText>
+
+<ProgressText Action="StopServices" Template="Service: [1]">Stopping services</ProgressText>
+
+<ProgressText Action="UnmoveFiles" Template="File: [1], Directory: [9]">Removing moved files</ProgressText>
+
+<ProgressText Action="UnpublishComponents" Template="Component ID: [1], Qualifier: [2]">Unpublishing Qualified Components</ProgressText>
+
+<ProgressText Action="UnpublishFeatures" Template="Feature: [1]">Unpublishing Product Features</ProgressText>
+
+<ProgressText Action="UnpublishProduct" Template="">Unpublishing product information</ProgressText>
+
+<ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Unregister Class servers</ProgressText>
+
+<ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">Unregistering COM+ Applications and Components</ProgressText>
+
+<ProgressText Action="UnregisterExtensionInfo" Template="Extension: [1]">Unregistering extension servers</ProgressText>
+
+<ProgressText Action="UnregisterFonts" Template="Font: [1]">Unregistering fonts</ProgressText>
+
+<ProgressText Action="UnregisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">Unregistering MIME info</ProgressText>
+
+<ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">Unregistering program identifiers</ProgressText>
+
+<ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">Unregistering type libraries</ProgressText>
+
+<ProgressText Action="WriteEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">Updating environment strings</ProgressText>
+
+<ProgressText Action="WriteIniValues" Template="File: [1], Section: [2], Key: [3], Value: [4]">Writing INI files values</ProgressText>
+
+<ProgressText Action="WriteRegistryValues" Template="Key: [1], Name: [2], Value: [3]">Writing system registry values</ProgressText>
+
+</Include>
--- /dev/null
+<Include>
+
+<Error Id="0">{{Fatal error: }}</Error>
+
+<Error Id="1">{{Error [1]. }}</Error>
+
+<Error Id="2">Warning [1]. </Error>
+
+<Error Id="3"></Error>
+
+<Error Id="4">Info [1]. </Error>
+
+<Error Id="5">Internal Error [1]. [2]{, [3]}{, [4]}</Error>
+
+<Error Id="6"></Error>
+
+<Error Id="7">{{Disk full: }}</Error>
+
+<Error Id="8">Action [Time]: [1]. [2]</Error>
+
+<Error Id="9">[ProductName]</Error>
+
+<Error Id="10">{[2]}{, [3]}{, [4]}</Error>
+
+<Error Id="11">Message type: [1], Argument: [2]</Error>
+
+<Error Id="12">=== Logging started: [Date] [Time] ===</Error>
+
+<Error Id="13">=== Logging stopped: [Date] [Time] ===</Error>
+
+<Error Id="14">Action start [Time]: [1].</Error>
+
+<Error Id="15">Action ended [Time]: [1]. Return value [2].</Error>
+
+<Error Id="16">Time remaining: {[1] minutes }{[2] seconds}</Error>
+
+<Error Id="17">Out of memory. Shut down other applications before retrying.</Error>
+
+<Error Id="18">Installer is no longer responding.</Error>
+
+<Error Id="19">Installer stopped prematurely.</Error>
+
+<Error Id="20">Please wait while Windows configures [ProductName]</Error>
+
+<Error Id="21">Gathering required information...</Error>
+
+<Error Id="22">Removing older versions of this application...</Error>
+
+<Error Id="23">Preparing to remove older versions of this application...</Error>
+
+<Error Id="32">{[ProductName] }Setup completed successfully.</Error>
+
+<Error Id="33">{[ProductName] }Setup failed.</Error>
+
+<Error Id="1101">Error reading from file: [2]. {{ System error [3].}} Verify that the file exists and that you can access it.</Error>
+
+<Error Id="1301">Cannot create the file '[3]'. A directory with this name already exists. Cancel the install and try installing to a different location.</Error>
+
+<Error Id="1302">Please insert the disk: [2]</Error>
+
+<Error Id="1303">The installer has insufficient privileges to access this directory: [2]. The installation cannot continue. Log on as administrator or contact your system administrator.</Error>
+
+<Error Id="1304">Error writing to file: [2]. Verify that you have access to that directory.</Error>
+
+<Error Id="1305">Error reading from file [2]. {{ System error [3].}} Verify that the file exists and that you can access it.</Error>
+
+<Error Id="1306">Another application has exclusive access to the file '[2]'. Please shut down all other applications, then click Retry.</Error>
+
+<Error Id="1307">There is not enough disk space to install this file: [2]. Free some disk space and click Retry, or click Cancel to exit.</Error>
+
+<Error Id="1308">Source file not found: [2]. Verify that the file exists and that you can access it.</Error>
+
+<Error Id="1309">Error reading from file: [3]. {{ System error [2].}} Verify that the file exists and that you can access it.</Error>
+
+<Error Id="1310">Error writing to file: [3]. {{ System error [2].}} Verify that you have access to that directory.</Error>
+
+<Error Id="1311">Source file not found{{(cabinet)}}: [2]. Verify that the file exists and that you can access it.</Error>
+
+<Error Id="1312">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.</Error>
+
+<Error Id="1313">The volume [2] is currently unavailable. Please select another.</Error>
+
+<Error Id="1314">The specified path '[2]' is unavailable.</Error>
+
+<Error Id="1315">Unable to write to the specified folder: [2].</Error>
+
+<Error Id="1316">A network error occurred while attempting to read from the file: [2]</Error>
+
+<Error Id="1317">An error occurred while attempting to create the directory: [2]</Error>
+
+<Error Id="1318">A network error occurred while attempting to create the directory: [2]</Error>
+
+<Error Id="1319">A network error occurred while attempting to open the source file cabinet: [2]</Error>
+
+<Error Id="1320">The specified path is too long: [2]</Error>
+
+<Error Id="1321">The Installer has insufficient privileges to modify this file: [2].</Error>
+
+<Error Id="1322">A portion of the folder path '[2]' is invalid. It is either empty or exceeds the length allowed by the system.</Error>
+
+<Error Id="1323">The folder path '[2]' contains words that are not valid in folder paths.</Error>
+
+<Error Id="1324">The folder path '[2]' contains an invalid character.</Error>
+
+<Error Id="1325">'[2]' is not a valid short file name.</Error>
+
+<Error Id="1326">Error getting file security: [3] GetLastError: [2]</Error>
+
+<Error Id="1327">Invalid Drive: [2]</Error>
+
+<Error Id="1328">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]}}</Error>
+
+<Error Id="1401">Could not create key: [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. </Error>
+
+<Error Id="1402">Could not open key: [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. </Error>
+
+<Error Id="1403">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. </Error>
+
+<Error Id="1404">Could not delete key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. </Error>
+
+<Error Id="1405">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. </Error>
+
+<Error Id="1406">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.</Error>
+
+<Error Id="1407">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.</Error>
+
+<Error Id="1408">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.</Error>
+
+<Error Id="1409">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.</Error>
+
+<Error Id="1410">Could not increase the available registry space. [2] KB of free registry space is required for the installation of this application.</Error>
+
+<Error Id="1500">Another installation is in progress. You must complete that installation before continuing this one.</Error>
+
+<Error Id="1501">Error accessing secured data. Please make sure the Windows Installer is configured properly and try the install again.</Error>
+
+<Error Id="1502">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.</Error>
+
+<Error Id="1503">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.</Error>
+
+<Error Id="1601">Out of disk space -- Volume: '[2]'; required space: [3] KB; available space: [4] KB. Free some disk space and retry.</Error>
+
+<Error Id="1602">Are you sure you want to cancel?</Error>
+
+<Error Id="1603">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.</Error>
+
+<Error Id="1604">The product '[2]' is already installed, preventing the installation of this product. The two products are incompatible.</Error>
+
+<Error Id="1605">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.</Error>
+
+<Error Id="1606">Could not access network location [2].</Error>
+
+<Error Id="1607">The following applications should be closed before continuing the install:</Error>
+
+<Error Id="1608">Could not find any previously installed compliant products on the machine for installing this product.</Error>
+
+<Error Id="1701">The key [2] is not valid. Verify that you entered the correct key.</Error>
+
+<Error Id="1702">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.</Error>
+
+<Error Id="1703">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.</Error>
+
+<Error Id="1704">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?</Error>
+
+<Error Id="1705">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?</Error>
+
+<Error Id="1706">An installation package for the product [2] cannot be found. Try the installation again using a valid copy of the installation package '[3]'.</Error>
+
+<Error Id="1707">Installation operation completed successfully.</Error>
+
+<Error Id="1708">Installation operation failed.</Error>
+
+<Error Id="1709">Product: [2] -- [3]</Error>
+
+<Error Id="1710">You may either restore your computer to its previous state or continue the install later. Would you like to restore?</Error>
+
+<Error Id="1711">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.</Error>
+
+<Error Id="1712">One or more of the files required to restore your computer to its previous state could not be found. Restoration will not be possible.</Error>
+
+<Error Id="1713">[2] cannot install one of its required products. Contact your technical support group. {{System Error: [3].}}</Error>
+
+<Error Id="1714">The older version of [2] cannot be removed. Contact your technical support group. {{System Error [3].}}</Error>
+
+<Error Id="1801">The path [2] is not valid. Please specify a valid path.</Error>
+
+<Error Id="1802">Out of memory. Shut down other applications before retrying.</Error>
+
+<Error Id="1803">There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to go back to the previously selected volume.</Error>
+
+<Error Id="1804">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.</Error>
+
+<Error Id="1805">The folder [2] does not exist. Please enter a path to an existing folder.</Error>
+
+<Error Id="1806">You have insufficient privileges to read this folder.</Error>
+
+<Error Id="1807">A valid destination folder for the install could not be determined.</Error>
+
+<Error Id="1901">Error attempting to read from the source install database: [2].</Error>
+
+<Error Id="1902">Scheduling reboot operation: Renaming file [2] to [3]. Must reboot to complete operation.</Error>
+
+<Error Id="1903">Scheduling reboot operation: Deleting file [2]. Must reboot to complete operation.</Error>
+
+<Error Id="1904">Module [2] failed to register. HRESULT [3]. Contact your support personnel.</Error>
+
+<Error Id="1905">Module [2] failed to unregister. HRESULT [3]. Contact your support personnel.</Error>
+
+<Error Id="1906">Failed to cache package [2]. Error: [3]. Contact your support personnel.</Error>
+
+<Error Id="1907">Could not register font [2]. Verify that you have sufficient permissions to install fonts, and that the system supports this font.</Error>
+
+<Error Id="1908">Could not unregister font [2]. Verify that you that you have sufficient permissions to remove fonts.</Error>
+
+<Error Id="1909">Could not create Shortcut [2]. Verify that the destination folder exists and that you can access it.</Error>
+
+<Error Id="1910">Could not remove Shortcut [2]. Verify that the shortcut file exists and that you can access it.</Error>
+
+<Error Id="1911">Could not register type library for file [2]. Contact your support personnel.</Error>
+
+<Error Id="1912">Could not unregister type library for file [2]. Contact your support personnel.</Error>
+
+<Error Id="1913">Could not update the ini file [2][3]. Verify that the file exists and that you can access it.</Error>
+
+<Error Id="1914">Could not schedule file [2] to replace file [3] on reboot. Verify that you have write permissions to file [3].</Error>
+
+<Error Id="1915">Error removing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.</Error>
+
+<Error Id="1916">Error installing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.</Error>
+
+<Error Id="1917">Error removing ODBC driver: [4], ODBC error [2]: [3]. Verify that you have sufficient privileges to remove ODBC drivers.</Error>
+
+<Error Id="1918">Error installing ODBC driver: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.</Error>
+
+<Error Id="1919">Error configuring ODBC data source: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.</Error>
+
+<Error Id="1920">Service '[2]' ([3]) failed to start. Verify that you have sufficient privileges to start system services.</Error>
+
+<Error Id="1921">Service '[2]' ([3]) could not be stopped. Verify that you have sufficient privileges to stop system services.</Error>
+
+<Error Id="1922">Service '[2]' ([3]) could not be deleted. Verify that you have sufficient privileges to remove system services.</Error>
+
+<Error Id="1923">Service '[2]' ([3]) could not be installed. Verify that you have sufficient privileges to install system services.</Error>
+
+<Error Id="1924">Could not update environment variable '[2]'. Verify that you have sufficient privileges to modify environment variables.</Error>
+
+<Error Id="1925">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.</Error>
+
+<Error Id="1926">Could not set file security for file '[3]'. Error: [2]. Verify that you have sufficient privileges to modify the security permissions for this file.</Error>
+
+<Error Id="1927">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>
+
+<Error Id="1928">Error registering COM+ Application. Contact your support personnel for more information.</Error>
+
+<Error Id="1929">Error unregistering COM+ Application. Contact your support personnel for more information.</Error>
+
+<Error Id="1930">The description for service '[2]' ([3]) could not be changed."</Error>
+
+<Error Id="1931">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]}}"</Error>
+
+<Error Id="1932">The Windows Installer service cannot update the protected Windows file [1]. {{Package version: [2], OS Protected version: [3], SFP Error: [4]}}"</Error>
+
+</Include>
--- /dev/null
+<?xml version="1.0"?>
+<WixLocalization>
+<!-- Localization strings for en_US -->
+
+ <String Id="StrAFSProdDesc">Client and server components for AFS</String>
+ <String Id="StrAFSClientDesc">AFS Client</String>
+ <String Id="StrAFSClientDebugDesc">Debug symbols</String>
+ <String Id="StrAFSClientLongDesc">Provides client functionality for connecting to AFS servers with Kerberos authentication.</String>
+ <String Id="StrAFSClientDebugLongDesc">Debugging symbols for AFS client components.</String>
+ <String Id="StrAFSServerDesc">AFS Server</String>
+ <String Id="StrAFSServerDebugDesc">Debug symbols</String>
+ <String Id="StrAFSServerLongDesc">Provides AFS file server functionality.</String>
+ <String Id="StrAFSServerDebugLongDesc">Debugging symbols for AFS server components.</String>
+ <String Id="StrAFSCCDesc">AFS Control Center</String>
+ <String Id="StrAFSCCDebugDesc">Debug symbols</String>
+ <String Id="StrAFSCCLongDesc">Applications for managing and monitoring AFS servers.</String>
+ <String Id="StrAFSCCDebugLongDesc">Debugging symbols for AFS Control Center components.</String>
+ <String Id="StrAFSSDKDesc">AFS Software Development Kit</String>
+ <String Id="StrAFSSDKDebugDesc">Debug symbols</String>
+ <String Id="StrAFSSDKLongDesc">Headers and libraries for developing applications for AFS</String>
+ <String Id="StrAFSSDKDebugLongDesc">Debugging symbols for the AFS Software Development Kit.</String>
+ <String Id="StrAFSDocDesc">AFS System Administration Documentation</String>
+ <String Id="StrAFSDocLongDesc">Information on using and administering AFS.</String>
+ <String Id="StrAFSOptLongDesc">Optional components</String>
+ <String Id="StrAFSOptDesc">Optional components</String>
+ <String Id="StrLoopbackDesc">Loopback adapter</String>
+ <String Id="StrLoopbackLongDesc">Loopback adapter for AFS. It is recommended that you install the loopback adapter if you are installing the client components.</String>
+
+ <String Id="StrShlExtDesc">AFS Context Menu Shell Extension</String>
+ <String Id="StrAfsCredsDesc">Authentication for AFS</String>
+ <String Id="StrHlpFileDesc">AFS Client Help</String>
+ <String Id="StrSvrMgrDesc">Server Manager</String>
+ <String Id="StrAcctMgrDesc">Account Manager</String>
+ <String Id="StrDocLnkDesc">AFS Documentation</String>
+ <String Id="StrCfgWzdDesc">Server Configuration Wizard</String>
+
+ <String Id="StrLaunchCond">OpenAFS for Windows is currently only packaged for Windows 2000,XP and 2003</String>
+
+ <String Id="ErrNPIFailed">Installation of Network Provider failed. System error [2]</String>
+ <String Id="ErrSCCFailed">Configuration of client service failed. System error [2]</String>
+ <String Id="ErrSCSFailed">Configuration of server service failed. System error [2]</String>
+ <String Id="ErrAbort">Installation aborted : [2]</String>
+ <String Id="ErrNsisFailed">Uninstallation of the NSIS installation of OpenAFS failed with code [2]</String>
+
+ <String Id="ActInstallLoopback">Installing loopback adapter</String>
+ <String Id="ActRemoveLoopback">Removing existing loopback adapter</String>
+ <String Id="ActInstallNetProvider">Installing the network provider</String>
+ <String Id="ActRemoveNetProvider">Removing the network provider</String>
+ <String Id="ActConfigureClient">Configuring the AFS client service</String>
+ <String Id="ActConfigureServer">Configuring the AFS server service</String>
+ <String Id="ActRemoveNsisInstallation">Removing existing installation of OpenAFS</String>
+
+ <String Id="StrNsisAbortReason">Installation of OpenAFS for Windows was prematurely terminated because OpenAFS [NSISVERSION] was already installed.</String>
+
+</WixLocalization>
--- /dev/null
+<?xml version="1.0"?>
+<Include>
+ <UI>
+ <Property Id="DefaultUIFont">DlgFont8</Property>
+ <Property Id="ErrorDialog">ErrorDlg</Property>
+ <Property Id="BannerBitmap">bannrbmp</Property>
+ <Property Id="IAgree">no</Property>
+ <Property Id="RemoveIcon">removico</Property>
+ <Property Id="ButtonText_Back">< &Back</Property>
+ <Property Id="ButtonText_Browse">Br&owse</Property>
+ <Property Id="ButtonText_Cancel">Cancel</Property>
+ <Property Id="ButtonText_Exit">&Exit</Property>
+ <Property Id="ButtonText_Finish">&Finish</Property>
+ <Property Id="ButtonText_Ignore">&Ignore</Property>
+ <Property Id="ButtonText_Install">&Install</Property>
+ <Property Id="ButtonText_Next">&Next ></Property>
+ <Property Id="ButtonText_No">&no</Property>
+ <Property Id="ButtonText_OK">OK</Property>
+ <Property Id="ButtonText_Remove">&Remove</Property>
+ <Property Id="ButtonText_Repair">&Repair</Property>
+ <Property Id="ButtonText_Reset">&Reset</Property>
+ <Property Id="ButtonText_Resume">&Resume</Property>
+ <Property Id="ButtonText_Retry">&Retry</Property>
+ <Property Id="ButtonText_Return">&Return</Property>
+ <Property Id="ButtonText_Yes">&yes</Property>
+ <Property Id="CompleteSetupIcon">completi</Property>
+ <Property Id="CustomSetupIcon">custicon</Property>
+ <Property Id="DialogBitmap">dlgbmp</Property>
+ <Property Id="DlgTitleFont">{&DlgFontBold8}</Property>
+ <Property Id="ExclamationIcon">exclamic</Property>
+ <Property Id="InfoIcon">info</Property>
+ <Property Id="InstallerIcon">insticon</Property>
+ <Property Id="Progress1">Installing</Property>
+ <Property Id="Progress2">installs</Property>
+ <Property Id="PROMPTROLLBACKCOST">P</Property>
+ <Property Id="RepairIcon">repairic</Property>
+ <Property Id="Setup">Setup</Property>
+ <Property Id="ShowUserRegistrationDlg">0</Property>
+ <Property Id="Wizard">Setup Wizard</Property>
+
+ <Dialog Id="AdminBrowseDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="PathEdit" Type="PathEdit" X="84" Y="202" Width="261" Height="17" Property="TARGETDIR" />
+ <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_OK]">
+ <Publish Event="SetTargetPath" Value="TARGETDIR">1</Publish>
+ <Publish Event="EndDialog" Value="Return">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="240" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="Reset" Value="0">1</Publish>
+ <Publish Event="EndDialog" Value="Return">1</Publish>
+ </Control>
+ <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="&Look in:" />
+ <Control Id="DirectoryCombo" Type="DirectoryCombo" X="70" Y="55" Width="220" Height="80" Property="TARGETDIR" Removable="yes" Fixed="yes" Remote="yes">
+ <Subscribe Event="IgnoreChange" Attribute="IgnoreChange" />
+ </Control>
+ <Control Id="Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="Up One Level" Icon="yes" FixedSize="yes" IconSize="16" Text="Up">
+ <Publish Event="DirectoryListUp" Value="0">1</Publish>
+ </Control>
+ <Control Id="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19" ToolTip="Create A New Folder" Icon="yes" FixedSize="yes" IconSize="16" Text="New">
+ <Publish Event="DirectoryListNew" Value="0">1</Publish>
+ </Control>
+ <Control Id="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="110" Property="TARGETDIR" Sunken="yes" TabSkip="no" />
+ <Control Id="PathLabel" Type="Text" X="25" Y="205" Width="59" Height="10" TabSkip="no" Text="&Folder name:" />
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>Browse to the destination folder</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Change current destination folder</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="AdminInstallPointDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Text" Type="Text" X="25" Y="80" Width="320" Height="10" TabSkip="no">
+ <Text>&Enter a new network location or click Browse to browse to one.</Text>
+ </Control>
+ <Control Id="PathEdit" Type="PathEdit" X="25" Y="93" Width="320" Height="18" Property="TARGETDIR" />
+ <Control Id="Browse" Type="PushButton" X="289" Y="119" Width="56" Height="17" Text="[ButtonText_Browse]">
+ <Publish Event="SpawnDialog" Value="AdminBrowseDlg">1</Publish>
+ </Control>
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="AdminRegistrationDlg">1</Publish>
+ </Control>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
+ <Publish Event="SetTargetPath" Value="TARGETDIR">1</Publish>
+ <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="25" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
+ <Text>Please specify a network location for the server image of [ProductName] product</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Network Location</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="AdminRegistrationDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="OrganizationLabel" Type="Text" X="45" Y="71" Width="285" Height="30" TabSkip="no">
+ <Text>&Please enter the name of your organization in the box below. This will be used as default company name for subsequent installations of [ProductName]:</Text>
+ </Control>
+ <Control Id="OrganizationEdit" Type="Edit" X="45" Y="105" Width="220" Height="18" Property="COMPANYNAME" Text="{80}" />
+ <Control Id="CDKeyLabel" Type="Text" X="45" Y="130" Width="50" Height="10" TabSkip="no">
+ <Text>CD &Key:</Text>
+ </Control>
+ <Control Id="CDKeyEdit" Type="MaskedEdit" X="45" Y="143" Width="250" Height="16" Property="PIDKEY" Text="[PIDTemplate]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Image="yes" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="AdminWelcomeDlg">1</Publish>
+ </Control>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
+ <Publish Event="ValidateProductID" Value="0">0</Publish>
+ <Publish Event="NewDialog" Value="AdminInstallPointDlg">ProductID</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>Please enter your company information</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Company Information</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="AdminWelcomeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
+ <Publish Property="InstallMode" Value="Server Image">1</Publish>
+ <Publish Event="NewDialog" Value="AdminRegistrationDlg">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" FixedSize="yes" TabSkip="no" Text="[DialogBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
+ <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
+ <Text>The [Wizard] will create a server image of [ProductName], at a specified network location. Click Next to continue or Cancel to exit the [Wizard].</Text>
+ </Control>
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
+ <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
+ </Control>
+ </Dialog>
+
+ <Dialog Id="BrowseDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="PathEdit" Type="PathEdit" X="84" Y="202" Width="261" Height="18" Property="_BrowseProperty" Indirect="yes" />
+ <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_OK]">
+ <Publish Event="SetTargetPath" Value="[_BrowseProperty]">1</Publish>
+ <Publish Event="EndDialog" Value="Return">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="240" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="Reset" Value="0">1</Publish>
+ <Publish Event="EndDialog" Value="Return">1</Publish>
+ </Control>
+ <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="&Look in:" />
+ <Control Id="DirectoryCombo" Type="DirectoryCombo" X="70" Y="55" Width="220" Height="80" Property="_BrowseProperty" Indirect="yes" Fixed="yes" Remote="yes">
+ <Subscribe Event="IgnoreChange" Attribute="IgnoreChange" />
+ </Control>
+ <Control Id="Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="Up One Level" Icon="yes" FixedSize="yes" IconSize="16" Text="Up">
+ <Publish Event="DirectoryListUp" Value="0">1</Publish>
+ </Control>
+ <Control Id="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19" ToolTip="Create A New Folder" Icon="yes" FixedSize="yes" IconSize="16" Text="New">
+ <Publish Event="DirectoryListNew" Value="0">1</Publish>
+ </Control>
+ <Control Id="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="110" Property="_BrowseProperty" Sunken="yes" Indirect="yes" TabSkip="no" />
+ <Control Id="PathLabel" Type="Text" X="25" Y="205" Width="59" Height="10" TabSkip="no" Text="&Folder name:" />
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>Browse to the destination folder</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Change current destination folder</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="CancelDlg" Y="10" Width="260" Height="85" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="no" Type="PushButton" X="132" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_No]">
+ <Publish Event="EndDialog" Value="Return">1</Publish>
+ </Control>
+ <Control Id="yes" Type="PushButton" X="72" Y="57" Width="56" Height="17" Text="[ButtonText_Yes]">
+ <Publish Event="EndDialog" Value="Exit">1</Publish>
+ </Control>
+ <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30">
+ <Text>Are you sure you want to cancel [ProductName] installation?</Text>
+ </Control>
+ <Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Information icon" FixedSize="yes" IconSize="32" Text="[InfoIcon]" />
+ </Dialog>
+ <Dialog Id="ContinueDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
+ <Publish Event="EndDialog" Value="Exit">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" FixedSize="yes" TabSkip="no" Text="[DialogBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
+ <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
+ <Text>The [Wizard] will continue installation of [ProductName] on your computer. Click Next to continue or Cancel to exit the [Wizard].</Text>
+ </Control>
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
+ <Text>{\VerdanaBold13}Welcome back to the [ProductName] [Wizard]</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="CustomizeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
+ <Control Id="Tree" Type="SelectionTree" X="25" Y="85" Width="175" Height="95" Property="_BrowseProperty" Sunken="yes" TabSkip="no" Text="Tree of selections" />
+ <Control Id="Browse" Type="PushButton" X="304" Y="200" Width="56" Height="17" Text="[ButtonText_Browse]">
+ <Publish Event="SelectionBrowse" Value="BrowseDlg">1</Publish>
+ <Condition Action="hide">Installed</Condition>
+ </Control>
+ <Control Id="Reset" Type="PushButton" X="42" Y="243" Width="56" Height="17" Text="[ButtonText_Reset]">
+ <Publish Event="Reset" Value="0">1</Publish>
+ <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
+ </Control>
+ <Control Id="DiskCost" Type="PushButton" X="111" Y="243" Width="56" Height="17">
+ <Text>Disk &Usage</Text>
+ <Publish Event="SpawnDialog" Value="DiskCostDlg">1</Publish>
+ <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
+ </Control>
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="MaintenanceTypeDlg">InstallMode = "Change"</Publish>
+ <Publish Event="NewDialog" Value="SetupTypeDlg">InstallMode = "Custom"</Publish>
+ </Control>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
+ <Publish Event="NewDialog" Value="ConfigClientDlg">
+ <![CDATA[ &feaClient = 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) ))]]>
+ </Publish>
+ <Publish Event="NewDialog" Value="VerifyReadyDlg">
+ <![CDATA[ &feaClient <> 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) ))]]>
+ </Publish>
+ <Publish Event="NewDialog" Value="AddServerDepsDlg">
+ <![CDATA[ ((&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) )) ]]>
+ </Publish>
+ <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>Select the way you want features to be installed.</Text>
+ </Control>
+ <Control Id="Text" Type="Text" X="25" Y="55" Width="320" Height="20">
+ <Text>Click on the icons in the tree below to change the way features will be installed.</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Custom Setup</Text>
+ </Control>
+ <Control Id="Box" Type="GroupBox" X="210" Y="81" Width="140" Height="98" />
+ <Control Id="ItemDescription" Type="Text" X="215" Y="90" Width="131" Height="40">
+ <Text>Multiline description of the currently selected item.</Text>
+ <Subscribe Event="SelectionDescription" Attribute="Text" />
+ </Control>
+ <Control Id="ItemSize" Type="Text" X="215" Y="135" Width="131" Height="40">
+ <Text>The size of the currently selected item.</Text>
+ <Subscribe Event="SelectionSize" Attribute="Text" />
+ </Control>
+ <Control Id="Location" Type="Text" X="75" Y="200" Width="215" Height="20">
+ <Text><The selection's path></Text>
+ <Subscribe Event="SelectionPath" Attribute="Text" />
+ <Subscribe Event="SelectionPathOn" Attribute="Visible" />
+ <Condition Action="hide">Installed</Condition>
+ </Control>
+ <Control Id="LocationLabel" Type="Text" X="25" Y="200" Width="50" Height="10" Text="Location:">
+ <Subscribe Event="SelectionPathOn" Attribute="Visible" />
+ <Condition Action="hide">Installed</Condition>
+ </Control>
+ </Dialog>
+
+ <Dialog Id="AddServerDepsDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
+ <Publish Event="AddLocal" Value="feaClient"><![CDATA[&feaClient=2 OR (&feaClient<>3 AND !feaClient<>3)]]></Publish>
+ <Publish Event="AddLocal" Value="feaControlCenter"><![CDATA[&feaControlCenter=2 OR (&feaControlCenter<>3 AND !feaControlCenter<>3)]]></Publish>
+ <Publish Event="NewDialog" Value="ConfigClientDlg">
+ <![CDATA[ &feaClient = 3 ]]>
+ </Publish>
+ <Publish Event="NewDialog" Value="VerifyReadyDlg">
+ <![CDATA[ &feaClient <> 3 ]]>
+ </Publish>
+ <Subscribe Event="SelectionNoItems" Attribute="Enabled" />
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="CustomizeDlg">1</Publish>
+ </Control>
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>Dependencies of the OpenAFS Server</Text>
+ </Control>
+ <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="30">
+ <Text>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.</Text>
+ </Control>
+ <Control Id="ClientIcon" Type="Icon" X="25" Y="110" Width="32" Height="32" IconSize="32" Text="[CustomSetupIcon]" Hidden="yes">
+ <Condition Action="show"><![CDATA[&feaClient=2 OR (&feaClient<>3 AND !feaClient<>3)]]></Condition>
+ </Control>
+ <Control Id="ClientText" Type="Text" X="60" Y="117" Width="200" Height="15" Hidden="yes" Transparent="yes" NoPrefix="yes">
+ <Text>OpenAFS Client</Text>
+ <Condition Action="show"><![CDATA[&feaClient=2 OR (&feaClient<>3 AND !feaClient<>3)]]></Condition>
+ </Control>
+ <Control Id="CCIcon" Type="Icon" X="25" Y="150" Width="32" Height="32" IconSize="32" Text="[CustomSetupIcon]" Hidden="yes">
+ <Condition Action="show"><![CDATA[&feaControlCenter=2 OR (&feaControlCenter<>3 AND !feaControlCenter<>3)]]></Condition>
+ </Control>
+ <Control Id="CCText" Type="Text" X="60" Y="157" Width="200" Height="15" Hidden="yes" Transparent="yes" NoPrefix="yes">
+ <Text>OpenAFS Control Center</Text>
+ <Condition Action="show"><![CDATA[&feaControlCenter=2 OR (&feaControlCenter<>3 AND !feaControlCenter<>3)]]></Condition>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Server Dependencies</Text>
+ </Control>
+ </Dialog>
+
+ <Dialog Id="DiskCostDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_OK]">
+ <Publish Event="EndDialog" Value="Return">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
+ <Text>The disk space required for the installation of the selected features.</Text>
+ </Control>
+ <Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
+ <Text>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).</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Disk Space Requirements</Text>
+ </Control>
+ <Control Id="VolumeList" Type="VolumeCostList" X="20" Y="100" Width="330" Height="120" Sunken="yes" Fixed="yes" Remote="yes">
+ <Text>{120}{70}{70}{70}{70}</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="ErrorDlg" Y="10" Width="270" Height="105" Title="Installer Information" ErrorDialog="yes" NoMinimize="yes">
+ <Control Id="ErrorText" Type="Text" X="48" Y="15" Width="205" Height="60" TabSkip="no" Text="Information text" />
+ <Control Id="Y" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Yes]">
+ <Publish Event="EndDialog" Value="ErrorYes">1</Publish>
+ </Control>
+ <Control Id="A" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="EndDialog" Value="ErrorAbort">1</Publish>
+ </Control>
+ <Control Id="C" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="EndDialog" Value="ErrorCancel">1</Publish>
+ </Control>
+ <Control Id="ErrorIcon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Information icon" FixedSize="yes" IconSize="32" Text="[InfoIcon]" />
+ <Control Id="I" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Ignore]">
+ <Publish Event="EndDialog" Value="ErrorIgnore">1</Publish>
+ </Control>
+ <Control Id="N" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_No]">
+ <Publish Event="EndDialog" Value="ErrorNo">1</Publish>
+ </Control>
+ <Control Id="O" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_OK]">
+ <Publish Event="EndDialog" Value="ErrorOk">1</Publish>
+ </Control>
+ <Control Id="R" Type="PushButton" X="100" Y="80" Width="56" Height="17" TabSkip="yes" Text="[ButtonText_Retry]">
+ <Publish Event="EndDialog" Value="ErrorRetry">1</Publish>
+ </Control>
+ </Dialog>
+ <Dialog Id="ExitDialog" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Finish]">
+ <Publish Event="EndDialog" Value="Return">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Cancel]" />
+ <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" FixedSize="yes" TabSkip="no" Text="[DialogBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
+ <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
+ <Text>Click the Finish button to exit the [Wizard].</Text>
+ </Control>
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
+ <Text>{\VerdanaBold13}Completing the [ProductName] [Wizard]</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="FatalError" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Finish]">
+ <Publish Event="EndDialog" Value="Exit">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Cancel]" />
+ <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" FixedSize="yes" TabSkip="no" Text="[DialogBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
+ <Text>{\VerdanaBold13}[ProductName] [Wizard] ended prematurely</Text>
+ </Control>
+ <Control Id="Description1" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes">
+ <Text>[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.</Text>
+ </Control>
+ <Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
+ <Text>Click the Finish button to exit the [Wizard].</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="FilesInUse" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" KeepModeless="yes">
+ <Control Id="Retry" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Retry]">
+ <Publish Event="EndDialog" Value="Retry">1</Publish>
+ </Control>
+ <Control Id="Ignore" Type="PushButton" X="235" Y="243" Width="56" Height="17" Text="[ButtonText_Ignore]">
+ <Publish Event="EndDialog" Value="Ignore">1</Publish>
+ </Control>
+ <Control Id="Exit" Type="PushButton" X="166" Y="243" Width="56" Height="17" Text="[ButtonText_Exit]">
+ <Publish Event="EndDialog" Value="Exit">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
+ <Text>Some files that need to be updated are currently in use.</Text>
+ </Control>
+ <Control Id="Text" Type="Text" X="20" Y="55" Width="330" Height="30">
+ <Text>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.</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Files in Use</Text>
+ </Control>
+ <Control Id="List" Type="ListBox" X="20" Y="87" Width="330" Height="130" Property="FileInUseProcess" Sunken="yes" TabSkip="yes" />
+ </Dialog>
+ <Dialog Id="LicenseAgreementDlg" Width="370" Height="270" Title="[ProductName] License Agreement" NoMinimize="yes">
+ <Control Id="Buttons" Type="RadioButtonGroup" X="20" Y="187" Width="330" Height="40" Property="IAgree" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
+ </Control>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
+ <Publish Event="NewDialog" Value="UserRegistrationDlg">IAgree = "yes" AND ShowUserRegistrationDlg = 1</Publish>
+ <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
+ <Publish Event="NewDialog" Value="RemovePreviousDlg">IAgree = "yes" AND ShowUserRegistrationDlg <> 1 AND (IBMAFS_UPGRADE OR OPENAFS_UPGRADE OR NSISUNINSTALL <> "")</Publish>
+ <Publish Event="NewDialog" Value="SetupTypeDlg">IAgree = "yes" AND ShowUserRegistrationDlg <> 1 AND NOT (IBMAFS_UPGRADE OR OPENAFS_UPGRADE OR NSISUNINSTALL <> "")</Publish>
+ <Condition Action="disable">IAgree <> "yes"</Condition>
+ <Condition Action="enable">IAgree = "yes"</Condition>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="AgreementText" Type="ScrollableText" X="20" Y="60" Width="330" Height="120" Sunken="yes" TabSkip="no">
+ <Text>{\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 }}</Text>
+ </Control>
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>Please read the following license agreement carefully</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]End-User License Agreement</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="MaintenanceTypeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="ChangeLabel" Type="Text" X="105" Y="65" Width="100" Height="10" TabSkip="no">
+ <Text>[DlgTitleFont]&Modify</Text>
+ </Control>
+ <Control Id="ChangeButton" Type="PushButton" X="50" Y="65" Width="38" Height="38" ToolTip="Modify Installation" Default="yes" Icon="yes" FixedSize="yes" IconSize="32" Text="[CustomSetupIcon]">
+ <Publish Property="InstallMode" Value="Change">1</Publish>
+ <Publish Property="Progress1" Value="Changing">1</Publish>
+ <Publish Property="Progress2" Value="changes">1</Publish>
+ <Publish Event="NewDialog" Value="CustomizeDlg">1</Publish>
+ </Control>
+ <Control Id="RepairLabel" Type="Text" X="105" Y="114" Width="100" Height="10" TabSkip="no">
+ <Text>[DlgTitleFont]Re&pair</Text>
+ </Control>
+ <Control Id="RepairButton" Type="PushButton" X="50" Y="114" Width="38" Height="38" ToolTip="Repair Installation" Icon="yes" FixedSize="yes" IconSize="32" Text="[RepairIcon]">
+ <Publish Property="InstallMode" Value="Repair">1</Publish>
+ <Publish Property="Progress1" Value="Repairing">1</Publish>
+ <Publish Property="Progress2" Value="repaires">1</Publish>
+ <Publish Event="NewDialog" Value="VerifyRepairDlg">1</Publish>
+ </Control>
+ <Control Id="RemoveLabel" Type="Text" X="105" Y="163" Width="100" Height="10" TabSkip="no">
+ <Text>[DlgTitleFont]&Remove</Text>
+ </Control>
+ <Control Id="RemoveButton" Type="PushButton" X="50" Y="163" Width="38" Height="38" ToolTip="Remove Installation" Icon="yes" FixedSize="yes" IconSize="32" Text="[RemoveIcon]">
+ <Publish Property="InstallMode" Value="Remove">1</Publish>
+ <Publish Property="Progress1" Value="Removing">1</Publish>
+ <Publish Property="Progress2" Value="removes">1</Publish>
+ <Publish Event="NewDialog" Value="VerifyRemoveDlg">1</Publish>
+ </Control>
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
+ </Control>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Next]" />
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
+ <Text>Select the operation you wish to perform.</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="240" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Modify, Repair or Remove installation</Text>
+ </Control>
+ <Control Id="ChangeText" Type="Text" X="105" Y="78" Width="230" Height="20">
+ <Text>Allows users to change the way features are installed.</Text>
+ </Control>
+ <Control Id="RemoveText" Type="Text" X="105" Y="176" Width="230" Height="20">
+ <Text>Removes [ProductName] from your computer.</Text>
+ </Control>
+ <Control Id="RepairText" Type="Text" X="105" Y="127" Width="230" Height="30">
+ <Text>Repairs errors in the most recent installation state - fixes missing or corrupt files, shortcuts and registry entries.</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="MaintenanceWelcomeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
+ <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
+ <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" FixedSize="yes" TabSkip="no" Text="[DialogBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
+ <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
+ <Text>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].</Text>
+ </Control>
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
+ <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="OutOfDiskDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_OK]">
+ <Publish Event="EndDialog" Value="Return">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
+ <Text>Disk space required for the installation exceeds available disk space.</Text>
+ </Control>
+ <Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
+ <Text>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).</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Out of Disk Space</Text>
+ </Control>
+ <Control Id="VolumeList" Type="VolumeCostList" X="20" Y="100" Width="330" Height="120" Sunken="yes" Fixed="yes" Remote="yes">
+ <Text>{120}{70}{70}{70}{70}</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="OutOfRbDiskDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="no" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_No]">
+ <Publish Event="EndDialog" Value="Return">1</Publish>
+ </Control>
+ <Control Id="yes" Type="PushButton" X="240" Y="243" Width="56" Height="17" Text="[ButtonText_Yes]">
+ <Publish Event="EnableRollback" Value="False">1</Publish>
+ <Publish Event="EndDialog" Value="Return">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
+ <Text>Disk space required for the installation exceeds available disk space.</Text>
+ </Control>
+ <Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
+ <Text>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).</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Out of Disk Space</Text>
+ </Control>
+ <Control Id="VolumeList" Type="VolumeCostList" X="20" Y="140" Width="330" Height="80" Sunken="yes" Fixed="yes" Remote="yes" ShowRollbackCost="yes">
+ <Text>{120}{70}{70}{70}{70}</Text>
+ </Control>
+ <Control Id="Text2" Type="Text" X="20" Y="94" Width="330" Height="40">
+ <Text>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.</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="PrepareDlg" Width="370" Height="270" Title="[ProductName] [Setup]" Modeless="yes">
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" FixedSize="yes" TabSkip="no" Text="[DialogBitmap]" />
+ <Control Id="ActionText" Type="Text" X="135" Y="100" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
+ <Subscribe Event="ActionText" Attribute="Text" />
+ </Control>
+ <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
+ <Text>Please wait while the [Wizard] prepares to guide you through the installation.</Text>
+ </Control>
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
+ <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
+ </Control>
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" TabSkip="yes" Text="[ButtonText_Back]" />
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" TabSkip="yes" Text="[ButtonText_Next]" />
+ <Control Id="ActionData" Type="Text" X="135" Y="125" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
+ <Subscribe Event="ActionData" Attribute="Text" />
+ </Control>
+ </Dialog>
+ <Dialog Id="ProgressDlg" Width="370" Height="270" Title="[ProductName] [Setup]" Modeless="yes">
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Next]" />
+ <Control Id="ActionText" Type="Text" X="70" Y="100" Width="265" Height="10">
+ <Subscribe Event="ActionText" Attribute="Text" />
+ </Control>
+ <Control Id="ActionData" Type="Text" X="70" Y="110" Width="265" Height="10">
+ <Subscribe Event="ActionData" Attribute="Text" />
+ </Control>
+ <Control Id="Text" Type="Text" X="35" Y="65" Width="300" Height="20">
+ <Text>Please wait while the [Wizard] [Progress2] [ProductName]. This may take several minutes.</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="20" Y="15" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont][Progress1] [ProductName]</Text>
+ </Control>
+ <Control Id="ProgressBar" Type="ProgressBar" X="35" Y="125" Width="300" Height="10" ProgressBlocks="yes" Text="Progress done">
+ <Subscribe Event="SetProgress" Attribute="Progress" />
+ </Control>
+ <Control Id="StatusLabel" Type="Text" X="35" Y="100" Width="35" Height="10" Text="Status:" />
+ </Dialog>
+ <Dialog Id="RemovePreviousDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Confirm" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="Confirm">
+ <Publish Event="NewDialog" Value="SetupTypeDlg">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="LicenseAgreementDlg">ShowUserRegistrationDlg <> 1</Publish>
+ <Publish Event="NewDialog" Value="UserRegistrationDlg">ShowUserRegistrationDlg = 1</Publish>
+ </Control>
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>Other versions of [ProductName] need to be removed.</Text>
+ </Control>
+ <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="45">
+ <Text>Click Confirm to uninstall the following version of AFS installed on this computer. Installation of [ProductName] cannot continue unless this program is removed.</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Uninstall previous versions</Text>
+ </Control>
+ <Control Id="RemoveIcon" Type="Icon" X="25" Y="130" Width="32" Height="32" IconSize="32" Text="[RemoveIcon]" />
+ <Control Id="RemoveProductIBM" Type="Text" X="60" Y="146" Width="200" Height="15" Hidden="yes" Transparent="yes" NoPrefix="yes">
+ <Text>IBM AFS : Product code [IBMAFS_UPGRADE]</Text>
+ <Condition Action="show">IBMAFS_UPGRADE</Condition>
+ </Control>
+ <Control Id="RemoveProductOpen" Type="Text" X="60" Y="146" Width="200" Height="15" Hidden="yes" Transparent="yes" NoPrefix="yes">
+ <Text>OpenAFS : Product code [OPENAFS_UPGRADE]</Text>
+ <Condition Action="show">OPENAFS_UPGRADE</Condition>
+ </Control>
+ <Control Id="RemoveProductOpenNSIS" Type="Text" X="60" Y="146" Width="200" Height="15" Hidden="yes" Transparent="yes" NoPrefix="yes">
+ <Text>OpenAFS (NSIS installer): [NSISVERSION]</Text>
+ <Condition Action="show">NSISUNINSTALL <> ""</Condition>
+ </Control>
+ </Dialog>
+ <Dialog Id="ResumeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Install]">
+ <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
+ <Publish Event="EndDialog" Value="Return">OutOfDiskSpace <> 1</Publish>
+ <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
+ <Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
+ <Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
+ <Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" FixedSize="yes" TabSkip="no" Text="[DialogBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
+ <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
+ <Text>The [Wizard] will complete the installation of [ProductName] on your computer. Click Install to continue or Cancel to exit the [Wizard].</Text>
+ </Control>
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
+ <Text>{\VerdanaBold13}Resuming the [ProductName] [Wizard]</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="SetupTypeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="TypicalLabel" Type="Text" X="105" Y="65" Width="100" Height="10" TabSkip="no">
+ <Text>[DlgTitleFont]&Typical</Text>
+ </Control>
+ <Control Id="TypicalButton" Type="PushButton" X="50" Y="65" Width="38" Height="38" ToolTip="Typical Installation" Default="yes" Icon="yes" FixedSize="yes" IconSize="32" Text="[InstallerIcon]">
+ <Publish Property="InstallMode" Value="Typical">1</Publish>
+ <Publish Event="SetInstallLevel" Value="100">1</Publish>
+ <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ </Control>
+ <Control Id="CustomLabel" Type="Text" X="105" Y="118" Width="100" Height="10" TabSkip="no">
+ <Text>[DlgTitleFont]C&ustom</Text>
+ </Control>
+ <Control Id="CustomButton" Type="PushButton" X="50" Y="118" Width="38" Height="38" ToolTip="Custom Installation" Icon="yes" FixedSize="yes" IconSize="32" Text="[CustomSetupIcon]">
+ <Publish Property="InstallMode" Value="Custom">1</Publish>
+ <Publish Event="NewDialog" Value="CustomizeDlg">1</Publish>
+ </Control>
+ <Control Id="CompleteLabel" Type="Text" X="105" Y="171" Width="100" Height="10" TabSkip="no">
+ <Text>[DlgTitleFont]C&omplete</Text>
+ </Control>
+ <Control Id="CompleteButton" Type="PushButton" X="50" Y="171" Width="38" Height="38" ToolTip="Complete Installation" Icon="yes" FixedSize="yes" IconSize="32" Text="[CompleteSetupIcon]">
+ <Publish Property="InstallMode" Value="Complete">1</Publish>
+ <Publish Event="SetInstallLevel" Value="1000">1</Publish>
+ <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ </Control>
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="LicenseAgreementDlg">ShowUserRegistrationDlg <> 1 AND NOT (IBMAFS_UPGRADE OR OPENAFS_UPGRADE)</Publish>
+ <Publish Event="NewDialog" Value="UserRegistrationDlg">ShowUserRegistrationDlg = 1 AND NOT (IBMAFS_UPGRADE OR OPENAFS_UPGRADE)</Publish>
+ <Publish Event="NewDialog" Value="RemovePreviousDlg">IBMAFS_UPGRADE OR OPENAFS_UPGRADE OR NSISUNINSTALL <> ""</Publish>
+ </Control>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Next]" />
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>Choose the setup type that best suits your needs</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Choose Setup Type</Text>
+ </Control>
+ <Control Id="CompleteText" Type="Text" X="105" Y="184" Width="230" Height="20">
+ <Text>All program features will be installed. (Requires most disk space)</Text>
+ </Control>
+ <Control Id="CustomText" Type="Text" X="105" Y="131" Width="230" Height="30">
+ <Text>Allows users to choose which program features will be installed and where they will be installed. Recommended for advanced users.</Text>
+ </Control>
+ <Control Id="TypicalText" Type="Text" X="105" Y="78" Width="230" Height="20">
+ <Text>Installs the most common program features. Recommended for most users.</Text>
+ </Control>
+ </Dialog>
+
+ <Dialog Id="ConfigClientDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="CustomizeDlg">1</Publish>
+ </Control>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Text="[ButtonText_Next]">
+ <Publish Event="NewDialog" Value="ConfigCredsDlg">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>Choose the configuration options for the OpenAFS client.</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Configure AFS Client</Text>
+ </Control>
+ <Control Id="CellLabel" Type="Text" X="45" Y="73" Width="100" Height="15" TabSkip="no" Text="Default &Cell" />
+ <Control Id="CellEdit" Type="Edit" X="150" Y="73" Width="115" Height="18" Property="AFSCELLNAME" Text="{120}" />
+ <Control Id="LogonOptionsLabel" Type="Text" X="45" Y="93" Width="100" Height="15" Text="Integrated logon options" />
+ <Control Id="LogonOptionSel" Type="RadioButtonGroup" X="45" Y="108" Width="220" Height="60" Property="LOGONOPTIONS" />
+ <Control Id="SecurityLevelLabel" Type="Text" X="45" Y="168" Width="100" Height="15" Text="AFS crypt security" />
+ <Control Id="SecurityLevelSel" Type="RadioButtonGroup" X="150" Y="168" Width="120" Height="20" Property="SECURITYLEVEL" />
+ <Control Id="FreelanceLabel" Type="Text" X="45" Y="188" Width="100" Height="15" Text="Freelance mode" />
+ <Control Id="FreelanceSel" Type="RadioButtonGroup" X="150" Y="188" Width="120" Height="20" Property="FREELANCEMODE" />
+ <Control Id="DNSLabel" Type="Text" X="45" Y="208" Width="100" Height="15" Text="Lookup cells in DNS" />
+ <Control Id="DNSSel" Type="RadioButtonGroup" X="150" Y="208" Width="120" Height="20" Property="USEDNS" />
+ </Dialog>
+ <RadioGroup Property="SECURITYLEVEL">
+ <RadioButton X="5" Y="0" Width="55" Height="15" Text="Disable">0</RadioButton>
+ <RadioButton X="65" Y="0" Width="55" Height="15" Text="Enable">1</RadioButton>
+ </RadioGroup>
+ <RadioGroup Property="FREELANCEMODE">
+ <RadioButton X="5" Y="0" Width="55" Height="15" Text="Disable">0</RadioButton>
+ <RadioButton X="65" Y="0" Width="55" Height="15" Text="Enable">1</RadioButton>
+ </RadioGroup>
+ <RadioGroup Property="USEDNS">
+ <RadioButton X="5" Y="0" Width="55" Height="15" Text="Disable">0</RadioButton>
+ <RadioButton X="65" Y="0" Width="55" Height="15" Text="Enable">1</RadioButton>
+ </RadioGroup>
+ <RadioGroup Property="LOGONOPTIONS">
+ <RadioButton X="5" Y="0" Width="215" Height="15" Text="Disable integrated logon">0</RadioButton>
+ <RadioButton X="5" Y="20" Width="215" Height="15" Text="Enable integrated logon">1</RadioButton>
+ <RadioButton X="5" Y="40" Width="215" Height="15" Text="Enable integrated logon and high security">3</RadioButton>
+ </RadioGroup>
+
+ <Dialog Id="ConfigCredsDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="ConfigClientDlg">1</Publish>
+ </Control>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Text="[ButtonText_Next]">
+ <Publish Event="AddLocal" Value="feaCredsStartup">CREDSSTARTUP = "1"</Publish>
+ <Publish Event="Remove" Value="feaCredsStartup">CREDSSTARTUP <> "1"</Publish>
+ <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>Choose the configuration options for AFS credentials.</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Options for AFS Credentials</Text>
+ </Control>
+ <Control Id="CredStartLabel" Type="Text" X="45" Y="53" Width="295" Height="15" TabSkip="yes" Text="Startup options for AFS Credentials" />
+ <Control Id="CredStartup" Type="CheckBox" X="50" Y="73" Width="300" Height="15" Property="CREDSSTARTUP" CheckBoxValue="1" Text="Start AFS Credentials at startup" />
+ <Control Id="CredCommandLabel" Type="Text" X="45" Y="93" Width="295" Height="15" TabSkip="yes" Text="Command line options for AFS Credentials" />
+ <Control Id="CredAutoInit" Type="CheckBox" X="50" Y="113" Width="300" Height="15" Property="CREDSAUTOINIT" CheckBoxValue="-a" Text="Auto initialize AFS Credentials." />
+ <Control Id="CredRenew" Type="CheckBox" X="50" Y="133" Width="300" Height="15" Property="CREDSRENEWDRMAP" CheckBoxValue="-m" Text="Renew drive maps" />
+ <Control Id="CredIPCg" Type="CheckBox" X="50" Y="153" Width="300" Height="15" Property="CREDSIPCHDET" CheckBoxValue="-n" Text="Detect IP address changes" />
+ <Control Id="CredQuiet" Type="CheckBox" X="50" Y="173" Width="300" Height="15" Property="CREDSQUIET" CheckBoxValue="-q" Text="Quiet mode" />
+ <Control Id="CredShow" Type="CheckBox" X="50" Y="193" Width="300" Height="15" Property="CREDSSHOW" CheckBoxValue="-s" Text="Show credentials window on startup" />
+ </Dialog>
+
+ <Dialog Id="UserExit" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Finish]">
+ <Publish Event="EndDialog" Value="Exit">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Cancel]" />
+ <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" FixedSize="yes" TabSkip="no" Text="[DialogBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
+ <Text>{\VerdanaBold13}[ProductName] [Wizard] was interrupted</Text>
+ </Control>
+ <Control Id="Description1" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes">
+ <Text>[ProductName] setup was interrupted. Your system has not been modified. To install this program at a later time, please run the installation again.</Text>
+ </Control>
+ <Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
+ <Text>Click the Finish button to exit the [Wizard].</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="UserRegistrationDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="NameLabel" Type="Text" X="45" Y="73" Width="100" Height="15" TabSkip="no" Text="&User Name:" />
+ <Control Id="NameEdit" Type="Edit" X="45" Y="85" Width="220" Height="18" Property="USERNAME" Text="{80}" />
+ <Control Id="OrganizationLabel" Type="Text" X="45" Y="110" Width="100" Height="15" TabSkip="no" Text="&Organization:" />
+ <Control Id="OrganizationEdit" Type="Edit" X="45" Y="122" Width="220" Height="18" Property="COMPANYNAME" Text="{80}" />
+ <Control Id="CDKeyLabel" Type="Text" X="45" Y="147" Width="50" Height="10" TabSkip="no">
+ <Text>CD &Key:</Text>
+ </Control>
+ <Control Id="CDKeyEdit" Type="MaskedEdit" X="45" Y="159" Width="250" Height="16" Property="PIDKEY" Text="[PIDTemplate]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
+ </Control>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
+ <Publish Event="ValidateProductID" Value="0">0</Publish>
+ <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
+ <Publish Event="NewDialog" Value="RemovePreviousDlg">ProductID</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>Please enter your customer information</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Customer Information</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="VerifyReadyDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
+ <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Install]">
+ <Publish Event="EndDialog" Value="Return">OutOfDiskSpace <> 1</Publish>
+ <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
+ <Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
+ <Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
+ <Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="AdminInstallPointDlg">InstallMode = "Server Image"</Publish>
+ <Publish Event="NewDialog" Value="CustomizeDlg">(InstallMode = "Custom" OR InstallMode = "Change") AND &feaClient <> 3</Publish>
+ <Publish Event="NewDialog" Value="ConfigCredsDlg">(InstallMode = "Custom" OR InstallMode = "Change") AND &feaClient = 3</Publish>
+ <Publish Event="NewDialog" Value="MaintenanceTypeDlg">InstallMode = "Repair"</Publish>
+ <Publish Event="NewDialog" Value="SetupTypeDlg">InstallMode = "Typical" OR InstallMode = "Complete"</Publish>
+ </Control>
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>The [Wizard] is ready to begin the [InstallMode] installation</Text>
+ </Control>
+ <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="20">
+ <Text>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.</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Ready to Install</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="VerifyRemoveDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
+ </Control>
+ <Control Id="Remove" Type="PushButton" X="236" Y="243" Width="56" Height="17" Text="[ButtonText_Remove]">
+ <Publish Event="Remove" Value="All">OutOfDiskSpace <> 1</Publish>
+ <Publish Event="EndDialog" Value="Return">OutOfDiskSpace <> 1</Publish>
+ <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
+ <Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
+ <Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
+ <Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>You have chosen to remove the program from your computer.</Text>
+ </Control>
+ <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="30">
+ <Text>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.</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="no" NoPrefix="yes">
+ <Text>[DlgTitleFont]Remove [ProductName]</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="VerifyRepairDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes" TrackDiskSpace="yes">
+ <Control Id="Repair" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Repair]">
+ <Publish Event="ReinstallMode" Value="ecmus">OutOfDiskSpace <> 1</Publish>
+ <Publish Event="Reinstall" Value="All">OutOfDiskSpace <> 1</Publish>
+ <Publish Event="EndDialog" Value="Return">OutOfDiskSpace <> 1</Publish>
+ <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)</Publish>
+ <Publish Event="EndDialog" Value="Return">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
+ <Publish Event="EnableRollback" Value="False">OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"</Publish>
+ <Publish Event="SpawnDialog" Value="OutOfDiskDlg">(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="374" Height="44" FixedSize="yes" TabSkip="no" Text="[BannerBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="[ButtonText_Back]">
+ <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
+ </Control>
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>The [Wizard] is ready to begin the repair of [ProductName].</Text>
+ </Control>
+ <Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="30">
+ <Text>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.</Text>
+ </Control>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="374" Height="0" />
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
+ <Text>[DlgTitleFont]Repair [ProductName]</Text>
+ </Control>
+ </Dialog>
+ <Dialog Id="WaitForCostingDlg" Y="10" Width="260" Height="85" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Return" Type="PushButton" X="102" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Return]">
+ <Publish Event="EndDialog" Value="Exit">1</Publish>
+ </Control>
+ <Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30">
+ <Text>Please wait while the installer finishes determining your disk space requirements.</Text>
+ </Control>
+ <Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Exclamation icon" FixedSize="yes" IconSize="32" Text="[ExclamationIcon]" />
+ </Dialog>
+ <Dialog Id="WelcomeDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[ButtonText_Next]">
+ <Publish Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="[ButtonText_Cancel]">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" FixedSize="yes" TabSkip="no" Text="[DialogBitmap]" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="[ButtonText_Back]" />
+ <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
+ <Text>The [Wizard] will install [ProductName] on your computer. Click Next to continue or Cancel to exit the [Wizard].</Text>
+ </Control>
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="374" Height="0" />
+ <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
+ <Text>{\VerdanaBold13}Welcome to the [ProductName] [Wizard]</Text>
+ </Control>
+ </Dialog>
+ <RadioGroup Property="IAgree">
+ <RadioButton Text="{\DlgFont8}I &accept the terms in the License Agreement" X="5" Y="0" Width="250" Height="15">yes</RadioButton>
+ <RadioButton Text="{\DlgFont8}I &do not accept the terms in the License Agreement" X="5" Y="20" Width="250" Height="15">no</RadioButton>
+ </RadioGroup>
+ <TextStyle Id="DlgFont8" FaceName="Tahoma" Size="8" />
+ <TextStyle Id="DlgFontBold8" FaceName="Tahoma" Size="8" Bold="yes" />
+ <TextStyle Id="VerdanaBold13" FaceName="Verdana" Size="13" Bold="yes" />
+ <UIText Id="AbsentPath" />
+ <UIText Id="bytes">bytes</UIText>
+ <UIText Id="GB">GB</UIText>
+ <UIText Id="KB">KB</UIText>
+ <UIText Id="MB">MB</UIText>
+ <UIText Id="MenuAbsent">Entire feature will be unavailable</UIText>
+ <UIText Id="MenuAdvertise">Feature will be installed when required</UIText>
+ <UIText Id="MenuAllCD">Entire feature will be installed to run from CD</UIText>
+ <UIText Id="MenuAllLocal">Entire feature will be installed on local hard drive</UIText>
+ <UIText Id="MenuAllNetwork">Entire feature will be installed to run from network</UIText>
+ <UIText Id="MenuCD">Will be installed to run from CD</UIText>
+ <UIText Id="MenuLocal">Will be installed on local hard drive</UIText>
+ <UIText Id="MenuNetwork">Will be installed to run from network</UIText>
+ <UIText Id="ScriptInProgress">Gathering required information...</UIText>
+ <UIText Id="SelAbsentAbsent">This feature will remain uninstalled</UIText>
+ <UIText Id="SelAbsentAdvertise">This feature will be set to be installed when required</UIText>
+ <UIText Id="SelAbsentCD">This feature will be installed to run from CD</UIText>
+ <UIText Id="SelAbsentLocal">This feature will be installed on the local hard drive</UIText>
+ <UIText Id="SelAbsentNetwork">This feature will be installed to run from the network</UIText>
+ <UIText Id="SelAdvertiseAbsent">This feature will become unavailable</UIText>
+ <UIText Id="SelAdvertiseAdvertise">Will be installed when required</UIText>
+ <UIText Id="SelAdvertiseCD">This feature will be available to run from CD</UIText>
+ <UIText Id="SelAdvertiseLocal">This feature will be installed on your local hard drive</UIText>
+ <UIText Id="SelAdvertiseNetwork">This feature will be available to run from the network</UIText>
+ <UIText Id="SelCDAbsent">This feature will be uninstalled completely, you won't be able to run it from CD</UIText>
+ <UIText Id="SelCDAdvertise">This feature will change from run from CD state to set to be installed when required</UIText>
+ <UIText Id="SelCDCD">This feature will remain to be run from CD</UIText>
+ <UIText Id="SelCDLocal">This feature will change from run from CD state to be installed on the local hard drive</UIText>
+ <UIText Id="SelChildCostNeg">This feature frees up [1] on your hard drive.</UIText>
+ <UIText Id="SelChildCostPos">This feature requires [1] on your hard drive.</UIText>
+ <UIText Id="SelCostPending">Compiling cost for this feature...</UIText>
+ <UIText Id="SelLocalAbsent">This feature will be completely removed</UIText>
+ <UIText Id="SelLocalAdvertise">This feature will be removed from your local hard drive, but will be set to be installed when required</UIText>
+ <UIText Id="SelLocalCD">This feature will be removed from your local hard drive, but will be still available to run from CD</UIText>
+ <UIText Id="SelLocalLocal">This feature will remain on you local hard drive</UIText>
+ <UIText Id="SelLocalNetwork">This feature will be removed from your local hard drive, but will be still available to run from the network</UIText>
+ <UIText Id="SelNetworkAbsent">This feature will be uninstalled completely, you won't be able to run it from the network</UIText>
+ <UIText Id="SelNetworkAdvertise">This feature will change from run from network state to set to be installed when required</UIText>
+ <UIText Id="SelNetworkLocal">This feature will change from run from network state to be installed on the local hard drive</UIText>
+ <UIText Id="SelNetworkNetwork">This feature will remain to be run from the network</UIText>
+ <UIText Id="SelParentCostNegNeg">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.</UIText>
+ <UIText Id="SelParentCostNegPos">This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</UIText>
+ <UIText Id="SelParentCostPosNeg">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.</UIText>
+ <UIText Id="SelParentCostPosPos">This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.</UIText>
+ <UIText Id="TimeRemaining">Time remaining: {[1] minutes }{[2] seconds}</UIText>
+ <UIText Id="VolumeCostAvailable">Available</UIText>
+ <UIText Id="VolumeCostDifference">Difference</UIText>
+ <UIText Id="VolumeCostRequired">Required</UIText>
+ <UIText Id="VolumeCostSize">Disk Size</UIText>
+ <UIText Id="VolumeCostVolume">Volume</UIText>
+
+ <!-- Localized ActionText and Error strings (processed from SDK)-->
+ <?include "lang\$(var.Language)\ActionText.wxi"?>
+ <?include "lang\$(var.Language)\Error.wxi"?>
+
+ <!-- Additional error and action text strings -->
+ <Error Id="4001">$(loc.ErrNPIFailed)</Error>
+ <Error Id="4002">$(loc.ErrSCCFailed)</Error>
+ <Error Id="4003">$(loc.ErrSCSFailed)</Error>
+ <Error Id="4004">$(loc.ErrAbort)</Error>
+ <Error Id="4005">$(loc.ErrNsisFailed)</Error>
+ <ProgressText Action="RemoveLoopback" Template="[1]:([2])([3])([4])">$(loc.ActRemoveLoopback)</ProgressText>
+ <ProgressText Action="InstallLoopback" Template="[1]:([2])([3])([4])">$(loc.ActInstallLoopback)</ProgressText>
+ <ProgressText Action="RemoveNetProvider">$(loc.ActRemoveNetProvider)</ProgressText>
+ <ProgressText Action="InstallNetProvider">$(loc.ActInstallNetProvider)</ProgressText>
+ <ProgressText Action="ConfigureClient">$(loc.ActConfigureClient)</ProgressText>
+ <ProgressText Action="ConfigureServer">$(loc.ActConfigureServer)</ProgressText>
+ <ProgressText Action="RemoveNsisInstallation">$(loc.ActRemoveNsisInstallation)</ProgressText>
+
+
+ <AdminUISequence>
+ <Show Dialog="FatalError" OnExit="error" />
+ <Show Dialog="UserExit" OnExit="cancel" />
+ <Show Dialog="ExitDialog" OnExit="success" />
+ <Show Dialog="PrepareDlg" Before="CostInitialize" />
+ <Show Dialog="AdminWelcomeDlg" After="CostFinalize" />
+ <Show Dialog="ProgressDlg" After="AdminWelcomeDlg" />
+ </AdminUISequence>
+ <InstallUISequence>
+ <Show Dialog="FatalError" OnExit="error" />
+ <Show Dialog="UserExit" OnExit="cancel" />
+ <Show Dialog="ExitDialog" OnExit="success" />
+ <Show Dialog="PrepareDlg" After="LaunchConditions" />
+ <Show Dialog="WelcomeDlg" After="MigrateFeatureStates">(NOT Installed) AND (NOT AFTERREBOOT)</Show>
+ <Show Dialog="ResumeDlg" After="WelcomeDlg">Installed AND (RESUME OR Preselected)</Show>
+ <Show Dialog="MaintenanceWelcomeDlg" After="ResumeDlg">Installed AND NOT RESUME AND NOT Preselected</Show>
+ <Show Dialog="ContinueDlg" After="MaintenanceWelcomeDlg">(NOT Installed) AND AFTERREBOOT</Show>
+ <Show Dialog="ProgressDlg" After="ContinueDlg" />
+ </InstallUISequence>
+ </UI>
+ <Binary Id="Up" src="Binary\Up.ico" />
+ <Binary Id="New" src="Binary\New.ico" />
+ <Binary Id="bannrbmp" src="Binary\bannrbmp.bmp" />
+ <Binary Id="completi" src="Binary\completi.ico" />
+ <Binary Id="custicon" src="Binary\custicon.ico" />
+ <Binary Id="dlgbmp" src="Binary\dlgbmp.bmp" />
+ <Binary Id="exclamic" src="Binary\exclamic.ico" />
+ <Binary Id="info" src="Binary\info.ico" />
+ <Binary Id="insticon" src="Binary\insticon.ico" />
+ <Binary Id="removico" src="Binary\removico.ico" />
+ <Binary Id="repairic" src="Binary\repairic.ico" />
+ <Icon Id="ico_AcctManager" src="Icon\ico_AcctManager.ico" />
+ <Icon Id="ico_afscreds" src="Icon\ico_afscreds.ico" />
+ <Icon Id="ico_Help" src="Icon\ico_Help.ico" />
+ <Icon Id="ico_ServerManager" src="Icon\ico_ServerManager.ico" />
+ <Icon Id="ico_afssvrcfg" src="Icon\ico_afssvrcfg.ico" />
+</Include>
--- /dev/null
+<Include>
+
+<ProgressText Action="Advertise" Template="">Mostrar aplicación</ProgressText>
+
+<ProgressText Action="AllocateRegistrySpace" Template="Espacio disponible: [1]">Asignando espacio del registro</ProgressText>
+
+<ProgressText Action="AppSearch" Template="Propiedad: [1], firma: [2]">Buscando aplicaciones instaladas</ProgressText>
+
+<ProgressText Action="BindImage" Template="Archivo: [1]">Enlazando archivos ejecutables</ProgressText>
+
+<ProgressText Action="CCPSearch" Template="">Buscando productos necesarios</ProgressText>
+
+<ProgressText Action="CostFinalize" Template="">Calculando el espacio necesario</ProgressText>
+
+<ProgressText Action="CostInitialize" Template="">Calculando el espacio necesario</ProgressText>
+
+<ProgressText Action="CreateFolders" Template="Carpeta: [1]">Creando carpetas</ProgressText>
+
+<ProgressText Action="CreateShortcuts" Template="Acceso directo: [1]">Creando accesos directos</ProgressText>
+
+<ProgressText Action="DeleteServices" Template="Servicio: [1]">Eliminando servicios</ProgressText>
+
+<ProgressText Action="DuplicateFiles" Template="Archivo: [1], directorio: [9], tamaño: [6]">Creando archivos duplicados</ProgressText>
+
+<ProgressText Action="FileCost" Template="">Calculando el espacio necesario</ProgressText>
+
+<ProgressText Action="FindRelatedProducts" Template="Se encontró esta aplicación: [1]">Buscando aplicaciones relacionadas</ProgressText>
+
+<ProgressText Action="GenerateScript" Template="[1]">Generando operaciones de secuencias de comandos para la acción:</ProgressText>
+
+<ProgressText Action="InstallAdminPackage" Template="Archivo: [1], directorio: [9], tamaño: [6]">Copiando archivos de instalación de la red</ProgressText>
+
+<ProgressText Action="InstallFiles" Template="Archivo: [1], directorio: [9], tamaño: [6]">Copiando archivos nuevos</ProgressText>
+
+<ProgressText Action="InstallODBC" Template="">Instalando componentes ODBC</ProgressText>
+
+<ProgressText Action="InstallServices" Template="Servicio: [2]">Instalando servicios nuevos</ProgressText>
+
+<ProgressText Action="InstallSFPCatalogFile" Template="Archivo: [1], dependencias: [2]">Instalar catálogo de sistema</ProgressText>
+
+<ProgressText Action="InstallValidate" Template="">Validando la instalación</ProgressText>
+
+<ProgressText Action="LaunchConditions" Template="">Evaluando condiciones de inicio</ProgressText>
+
+<ProgressText Action="MigrateFeatureStates" Template="Aplicación: [1]">Transfiriendo los estados de las características desde las aplicaciones relacionadas</ProgressText>
+
+<ProgressText Action="MoveFiles" Template="Archivo: [1], directorio: [9], tamaño: [6]">Moviendo archivos</ProgressText>
+
+<ProgressText Action="MsiPublishAssemblies" Template="Contexto de aplicación:[1], Nombre de asamblea:[2]">Publicar información de la asamblea</ProgressText>
+
+<ProgressText Action="MsiUnpublishAssemblies" Template="Contexto de aplicación:[1], Nombre de asamblea:[2]">No publicar información de la asamblea</ProgressText>
+
+<ProgressText Action="PatchFiles" Template="Archivo: [1], directorio: [2], tamaño: [3]">Revisando archivos</ProgressText>
+
+<ProgressText Action="ProcessComponents" Template="">Actualizando el registro de componentes</ProgressText>
+
+<ProgressText Action="PublishComponents" Template="Id. del componente: [1], capacitador: [2]">Publicar componentes aceptables</ProgressText>
+
+<ProgressText Action="PublishFeatures" Template="Función: [1]">Publicar funciones del producto</ProgressText>
+
+<ProgressText Action="PublishProduct" Template="">Publicar información del producto</ProgressText>
+
+<ProgressText Action="RegisterClassInfo" Template="Id. de clase: [1]">Registrando servidores de clases</ProgressText>
+
+<ProgressText Action="RegisterComPlus" Template="IdApl: [1]{{, Tipo de apl.: [2], Usuarios: [3], RSN: [4]}}">Registrando aplicaciones y componentes COM+</ProgressText>
+
+<ProgressText Action="RegisterExtensionInfo" Template="Extensión: [1]">Registrando servidores de extensiones</ProgressText>
+
+<ProgressText Action="RegisterFonts" Template="Fuente: [1]">Registrando fuentes</ProgressText>
+
+<ProgressText Action="RegisterMIMEInfo" Template="Tipo de contenido MIME: [1], extensión: [2]">Registrando información MIME</ProgressText>
+
+<ProgressText Action="RegisterProduct" Template="[1]">Registrando el producto</ProgressText>
+
+<ProgressText Action="RegisterProgIdInfo" Template="IdProg: [1]">Registrando identificadores de programa</ProgressText>
+
+<ProgressText Action="RegisterTypeLibraries" Template="Id. de la biblioteca: [1]">Registrando bibliotecas de tipos</ProgressText>
+
+<ProgressText Action="RegisterUser" Template="[1]">Registrando usuario</ProgressText>
+
+<ProgressText Action="RemoveDuplicateFiles" Template="Archivo: [1], directorio: [9]">Quitando archivos duplicados</ProgressText>
+
+<ProgressText Action="RemoveEnvironmentStrings" Template="Nombre: [1], valor: [2], acción [3]">Actualizando cadenas de entorno</ProgressText>
+
+<ProgressText Action="RemoveExistingProducts" Template="Aplicación: [1], Línea de comandos: [2]">Quitando aplicaciones</ProgressText>
+
+<ProgressText Action="RemoveFiles" Template="Archivo: [1], directorio: [9]">Quitando archivos</ProgressText>
+
+<ProgressText Action="RemoveFolders" Template="Carpeta: [1]">Quitando carpetas</ProgressText>
+
+<ProgressText Action="RemoveIniValues" Template="Archivo: [1], sección: [2], clave: [3], valor: [4]">Quitando entradas de archivos INI</ProgressText>
+
+<ProgressText Action="RemoveODBC" Template="">Quitando componentes ODBC</ProgressText>
+
+<ProgressText Action="RemoveRegistryValues" Template="Clave: [1], nombre: [2]">Quitando valores del registro del sistema</ProgressText>
+
+<ProgressText Action="RemoveShortcuts" Template="Acceso directo: [1]">Quitando accesos directos</ProgressText>
+
+<ProgressText Action="RMCCPSearch" Template="">Buscando productos necesarios</ProgressText>
+
+<ProgressText Action="Rollback" Template="[1]">Acción de restauración:</ProgressText>
+
+<ProgressText Action="RollbackCleanup" Template="Archivo: [1]">Quitando copias de seguridad</ProgressText>
+
+<ProgressText Action="SelfRegModules" Template="Archivo: [1], carpeta: [2]">Registrando módulos</ProgressText>
+
+<ProgressText Action="SelfUnregModules" Template="Archivo: [1], carpeta: [2]">Eliminando módulos del registro</ProgressText>
+
+<ProgressText Action="SetODBCFolders" Template="">Inicializando directorios ODBC</ProgressText>
+
+<ProgressText Action="StartServices" Template="Servicio: [1]">Iniciando servicios</ProgressText>
+
+<ProgressText Action="StopServices" Template="Servicio: [1]">Deteniendo servicios</ProgressText>
+
+<ProgressText Action="UnmoveFiles" Template="Archivo: [1], directorio: [9]">Quitando archivos movidos</ProgressText>
+
+<ProgressText Action="UnpublishComponents" Template="Id. del componente: [1], capacitador: [2]">Anular publicación de componentes aceptables</ProgressText>
+
+<ProgressText Action="UnpublishFeatures" Template="Función: [1]">Anular publicación de funciones del producto</ProgressText>
+
+<ProgressText Action="UnpublishProduct" Template="">Anular publicación de información del producto</ProgressText>
+
+<ProgressText Action="UnregisterClassInfo" Template="Id. de clase: [1]">Eliminar del registro los servidores de clases</ProgressText>
+
+<ProgressText Action="UnregisterComPlus" Template="IdApl: [1]{{, Tipo de apl.: [2]}}">Quitando aplicaciones y componentes COM+ del registro</ProgressText>
+
+<ProgressText Action="UnregisterExtensionInfo" Template="Extensión: [1]">Eliminando del registro los servidores de extensiones</ProgressText>
+
+<ProgressText Action="UnregisterFonts" Template="Fuente: [1]">Eliminando del registro las fuentes</ProgressText>
+
+<ProgressText Action="UnregisterMIMEInfo" Template="Tipo de contenido MIME: [1], extensión: [2]">Eliminando del registro información MIME</ProgressText>
+
+<ProgressText Action="UnregisterProgIdInfo" Template="IdProg: [1]">Eliminando identificadores de programa del registro</ProgressText>
+
+<ProgressText Action="UnregisterTypeLibraries" Template="Id. de la biblioteca: [1]">Eliminando del registro bibliotecas de tipos</ProgressText>
+
+<ProgressText Action="WriteEnvironmentStrings" Template="Nombre: [1], valor: [2], acción [3]">Actualizando cadenas de entorno</ProgressText>
+
+<ProgressText Action="WriteIniValues" Template="Archivo: [1], sección: [2], clave: [3], valor: [4]">Escribiendo valores de los archivos INI</ProgressText>
+
+<ProgressText Action="WriteRegistryValues" Template="Clave: [1], nombre: [2], valor: [3]">Escribiendo valores del registro del sistema</ProgressText>
+
+</Include>
--- /dev/null
+<Include>
+
+<Error Id="0">{{Error fatal: }}</Error>
+
+<Error Id="1">{{Error [1]. }}</Error>
+
+<Error Id="2">Advertencia [1]. </Error>
+
+<Error Id="3"></Error>
+
+<Error Id="4">Información [1]. </Error>
+
+<Error Id="5">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]}}</Error>
+
+<Error Id="6"></Error>
+
+<Error Id="7">{{Disco lleno: }}</Error>
+
+<Error Id="8">Acción [Time]: [1]. [2]</Error>
+
+<Error Id="9">[ProductName]</Error>
+
+<Error Id="10">{[2]}{, [3]}{, [4]}</Error>
+
+<Error Id="11">Tipo de mensaje: [1], argumento: [2]</Error>
+
+<Error Id="12">=== Registro iniciado: [Date] [Time] ===</Error>
+
+<Error Id="13">=== Registro detenido: [Date] [Time] ===</Error>
+
+<Error Id="14">La acción se inició a las [Time]: [1].</Error>
+
+<Error Id="15">La acción terminó a las [Time]: [1]. Valor devuelto: [2].</Error>
+
+<Error Id="16">Tiempo restante: {[1] minutos }{[2] segundos}</Error>
+
+<Error Id="17">Memoria insuficiente. Cierre otras aplicaciones antes de intentarlo de nuevo.</Error>
+
+<Error Id="18">El instalador no responde.</Error>
+
+<Error Id="19">El instalador se detuvo antes de tiempo.</Error>
+
+<Error Id="20">Espere mientras Windows configura [ProductName]</Error>
+
+<Error Id="21">Recopilando la información necesaria...</Error>
+
+<Error Id="22">Quitando las versiones anteriores de esta aplicación...</Error>
+
+<Error Id="23">Preparando la eliminación de las versiones anteriores de esta aplicación...</Error>
+
+<Error Id="32">La instalación de {[ProductName] } finalizó correctamente.</Error>
+
+<Error Id="33">Fallo en la instalación de {[ProductName]}.</Error>
+
+<Error Id="1101">Error al leer el archivo [2]. {{ Error del sistema [3].}} Compruebe que el archivo existe y que puede obtener acceso a él.</Error>
+
+<Error Id="1301">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.</Error>
+
+<Error Id="1302">Inserte el disco [2].</Error>
+
+<Error Id="1303">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>
+
+<Error Id="1304">Error al escribir en el archivo [2]. Compruebe que dispone de acceso a ese directorio.</Error>
+
+<Error Id="1305">Error al leer el archivo [2]. {{ Error del sistema [3].}} Compruebe que el archivo existe y que puede obtener acceso a él.</Error>
+
+<Error Id="1306">Otra aplicación tiene acceso exclusivo al archivo '[2]'. Cierre todas las demás aplicaciones y haga clic en Reintentar.</Error>
+
+<Error Id="1307">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.</Error>
+
+<Error Id="1308">No se encuentra el archivo de origen [2]. Compruebe que el archivo existe y que puede obtener acceso a él.</Error>
+
+<Error Id="1309">Error al leer el archivo [3]. {{ Error del sistema [2].}} Compruebe que el archivo existe y que puede obtener acceso a él.</Error>
+
+<Error Id="1310">Error al escribir en el archivo [3]. {{ Error del sistema [2].}} Compruebe que dispone de acceso a ese directorio.</Error>
+
+<Error Id="1311">No se ha encontrado el archivo de origen {{(.CAB)}} [2]. Compruebe que el archivo existe y que puede obtener acceso a él.</Error>
+
+<Error Id="1312">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.</Error>
+
+<Error Id="1313">El volumen [2] no está disponible en este momento. Seleccione otro volumen.</Error>
+
+<Error Id="1314">La ruta de acceso especificada, '[2]', no está disponible.</Error>
+
+<Error Id="1315">No se puede escribir en la carpeta especificada, [2].</Error>
+
+<Error Id="1316">Se produjo un error de red al intentar leer el archivo [2].</Error>
+
+<Error Id="1317">Se produjo un error al intentar crear el directorio [2].</Error>
+
+<Error Id="1318">Se produjo un error de red al intentar crear el directorio [2].</Error>
+
+<Error Id="1319">Se produjo un error de red al intentar abrir el archivo .CAB de origen [2].</Error>
+
+<Error Id="1320">La ruta de acceso especificada es demasiado larga: [2]</Error>
+
+<Error Id="1321">El instalador no tiene suficientes privilegios para modificar el archivo [2].</Error>
+
+<Error Id="1322">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.</Error>
+
+<Error Id="1323">La ruta de acceso a la carpeta '[2]' contiene palabras no válidas para rutas de acceso a carpetas.</Error>
+
+<Error Id="1324">La ruta de acceso a la carpeta '[2]' contiene un carácter no válido.</Error>
+
+<Error Id="1325">'[2]' no es un nombre corto de archivo válido.</Error>
+
+<Error Id="1326">Error al obtener la seguridad del archivo: [3]. GetLastError: [2].</Error>
+
+<Error Id="1327">Unidad no válida: [2]</Error>
+
+<Error Id="1328">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]}}</Error>
+
+<Error Id="1329">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.</Error>
+
+<Error Id="1330">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.}}</Error>
+
+<Error Id="1331">No se puede copiar el archivo [2] correctamente: error CRC.</Error>
+
+<Error Id="1332">No se puede mover el archivo [2] correctamente: error CRC.</Error>
+
+<Error Id="1333">No se puede revisar el archivo [2] correctamente: error CRC.</Error>
+
+<Error Id="1334">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.</Error>
+
+<Error Id="1335">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>
+
+<Error Id="1336">Error al crear un archivo temporal que se necesita para completar esta instalación.{{ Carpeta: [3]. Código de error del sistema: [2]}}</Error>
+
+<Error Id="1401">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. </Error>
+
+<Error Id="1402">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. </Error>
+
+<Error Id="1403">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. </Error>
+
+<Error Id="1404">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. </Error>
+
+<Error Id="1405">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. </Error>
+
+<Error Id="1406">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.</Error>
+
+<Error Id="1407">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.</Error>
+
+<Error Id="1408">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.</Error>
+
+<Error Id="1409">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.</Error>
+
+<Error Id="1410">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.</Error>
+
+<Error Id="1500">Ya hay otra instalación en curso. Termine esa instalación antes de continuar con ésta.</Error>
+
+<Error Id="1501">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.</Error>
+
+<Error Id="1502">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á.</Error>
+
+<Error Id="1503">El usuario '[2]' ya inició previamente una instalación del producto '[3]', pero deberá ejecutar la instalación de nuevo para poder utilizarlo.</Error>
+
+<Error Id="1601">Espacio en disco insuficiente -- Volumen: '[2]'; espacio requerido: [3] KB; espacio disponible: [4] KB. Libere espacio en disco e inténtelo de nuevo.</Error>
+
+<Error Id="1602">¿Está seguro de que desea cancelar la operación?</Error>
+
+<Error Id="1603">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.</Error>
+
+<Error Id="1604">El producto '[2]' ya está instalado, lo que impide que se instale este producto porque ambos productos son incompatibles entre sí.</Error>
+
+<Error Id="1605">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.</Error>
+
+<Error Id="1606">No se puede obtener acceso a la ubicación de red [2].</Error>
+
+<Error Id="1607">Deben cerrarse las aplicaciones siguientes antes de continuar con la instalación:</Error>
+
+<Error Id="1608">No se encuentra ningún producto compatible instalado en el equipo para instalar este producto.</Error>
+
+<Error Id="1609">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]}}</Error>
+
+<Error Id="1701">La clave [2] no es válida. Compruebe que escribió la clave correcta.</Error>
+
+<Error Id="1702">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.</Error>
+
+<Error Id="1703">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.</Error>
+
+<Error Id="1704">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?</Error>
+
+<Error Id="1705">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?</Error>
+
+<Error Id="1706">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]'.</Error>
+
+<Error Id="1707">La instalación finalizó satisfactoriamente.</Error>
+
+<Error Id="1708">Error en la instalación.</Error>
+
+<Error Id="1709">Producto: [2] -- [3]</Error>
+
+<Error Id="1710">Puede restaurar el equipo a su estado anterior o continuar con la instalación más tarde. ¿Desea restaurar el equipo?</Error>
+
+<Error Id="1711">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.</Error>
+
+<Error Id="1712">No se encuentran uno o varios archivos necesarios para restaurar el equipo a su estado anterior. La restauración no podrá realizarse.</Error>
+
+<Error Id="1713">[2] no puede instalar los productos requeridos. Póngase en contacto con su grupo de soporte técnico. {{Error del sistema: [3].}}</Error>
+
+<Error Id="1714">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].}}</Error>
+
+<Error Id="1715">Instalado [2]</Error>
+
+<Error Id="1716">Configurado [2]</Error>
+
+<Error Id="1717">Quitado [2]</Error>
+
+<Error Id="1718">La directiva de firma digital ha rechazado el archivo [2].</Error>
+
+<Error Id="1719">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.</Error>
+
+<Error Id="1720">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] }}</Error>
+
+<Error Id="1721">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] }}</Error>
+
+<Error Id="1722">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] }}</Error>
+
+<Error Id="1723">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] }}</Error>
+
+<Error Id="1724">La eliminación se ha completado satisfactoriamente.</Error>
+
+<Error Id="1725">Error en la eliminación.</Error>
+
+<Error Id="1726">El anuncio se ha completado satisfactoriamente.</Error>
+
+<Error Id="1727">Error en el anuncio.</Error>
+
+<Error Id="1728">La configuración se ha completado satisfactoriamente.</Error>
+
+<Error Id="1729">Error en la configuración.</Error>
+
+<Error Id="1730">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.</Error>
+
+<Error Id="1801">La ruta de acceso [2] no es válida. Especifique una ruta de acceso válida.</Error>
+
+<Error Id="1802">Memoria insuficiente. Cierre otras aplicaciones antes de intentarlo de nuevo.</Error>
+
+<Error Id="1803">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.</Error>
+
+<Error Id="1804">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.</Error>
+
+<Error Id="1805">La carpeta [2] no existe. Escriba una ruta de acceso a una carpeta existente.</Error>
+
+<Error Id="1806">No dispone de privilegios para leer esta carpeta.</Error>
+
+<Error Id="1807">No se puede determinar una carpeta de destino válida para la instalación.</Error>
+
+<Error Id="1901">Error al intentar leer la base de datos de instalación de origen: [2].</Error>
+
+<Error Id="1902">Programando la operación de reinicio: cambiando el nombre del archivo [2] a [3]. Para completar la operación se debe reiniciar el equipo.</Error>
+
+<Error Id="1903">Programando la operación de reinicio: eliminando el archivo [2]. Para completar la operación se debe reiniciar el equipo.</Error>
+
+<Error Id="1904">Error al registrar el módulo [2]. HRESULT [3]. Póngase en contacto con el personal de soporte técnico.</Error>
+
+<Error Id="1905">Error al eliminar el módulo [2] del registro. HRESULT [3]. Póngase en contacto con el personal de soporte técnico.</Error>
+
+<Error Id="1906">Fallo al almacenar el paquete [2] en la memoria caché. Error: [3]. Póngase en contacto con el personal de soporte técnico.</Error>
+
+<Error Id="1907">No se puede registrar la fuente [2]. Compruebe que dispone de suficientes permisos para instalar fuentes y que el sistema admite esta fuente.</Error>
+
+<Error Id="1908">No se puede eliminar del registro la fuente [2]. Compruebe que dispone de suficientes permisos para quitar fuentes.</Error>
+
+<Error Id="1909">No se puede crear el acceso directo [2]. Compruebe que la carpeta de destino existe y que puede obtener acceso a ella.</Error>
+
+<Error Id="1910">No se puede crear el acceso directo [2]. Compruebe que el archivo de acceso directo existe y que puede obtener acceso a él.</Error>
+
+<Error Id="1911">No se puede registrar la biblioteca de tipos para el archivo [2]. Póngase en contacto con el personal de soporte técnico.</Error>
+
+<Error Id="1912">No se puede quitar del registro la biblioteca de tipos del archivo [2]. Póngase en contacto con el personal de soporte técnico.</Error>
+
+<Error Id="1913">No se puede actualizar el archivo .ini [2][3]. Compruebe que el archivo existe y que puede obtener acceso a él.</Error>
+
+<Error Id="1914">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>
+
+<Error Id="1915">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>
+
+<Error Id="1916">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>
+
+<Error Id="1917">Error al quitar el controlador ODBC [4]; error de ODBC [2]: [3]. Compruebe que dispone de suficientes privilegios para quitar controladores ODBC.</Error>
+
+<Error Id="1918">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>
+
+<Error Id="1919">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.</Error>
+
+<Error Id="1920">Fallo al iniciar el servicio '[2]' ([3]). Compruebe que dispone de suficientes privilegios para iniciar servicios del sistema.</Error>
+
+<Error Id="1921">No se puede detener el servicio '[2]' ([3]). Compruebe que dispone de suficientes privilegios para detener servicios del sistema.</Error>
+
+<Error Id="1922">No se puede eliminar el servicio '[2]' ([3]). Compruebe que dispone de suficientes privilegios para quitar servicios del sistema.</Error>
+
+<Error Id="1923">No se puede instalar el servicio '[2]' ([3]). Compruebe que dispone de suficientes privilegios para instalar servicios del sistema.</Error>
+
+<Error Id="1924">No se puede actualizar la variable de entorno '[2]'. Compruebe que dispone de suficientes privilegios para modificar variables de entorno.</Error>
+
+<Error Id="1925">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.</Error>
+
+<Error Id="1926">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.</Error>
+
+<Error Id="1927">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>
+
+<Error Id="1928">Error al registrar la aplicación COM+. Póngase en contacto con el personal de soporte para obtener más información.</Error>
+
+<Error Id="1929">Error al quitar la aplicación COM+ del registro. Póngase en contacto con el personal de soporte para obtener más información.</Error>
+
+<Error Id="1930">No se puede cambiar la descripción del servicio '[2]' ([3]).</Error>
+
+<Error Id="1931">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]}}</Error>
+
+<Error Id="1932">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]}}</Error>
+
+<Error Id="1933">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]}}</Error>
+
+<Error Id="1934">Las instalaciones del usuario están deshabilitadas a través de la directiva en el equipo.</Error>
+
+<Error Id="1935">Error durante la instalación del componente de asamblea [2]. HRESULT: [3]. {{interfaz de asamblea: [4], función: [5], nombre de asamblea: [6]}}</Error>
+
+</Include>
--- /dev/null
+<Include>
+
+<ProgressText Action="Advertise" Template="">\8cã\82Å\8eg\97p\82·\82é\82½\82ß\82É\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\90Ý\92è\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="AllocateRegistrySpace" Template="\8bó\82«\97Ì\88æ: [1]">\83\8c\83W\83X\83g\83\8a\97Ì\88æ\82ð\8a\84\82è\93\96\82Ä\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="AppSearch" Template="\83v\83\8d\83p\83e\83B: [1]\81A \8f\90\96¼: [2]">\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ä\82¢\82é\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\8c\9f\8dõ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="BindImage" Template="\83t\83@\83C\83\8b: [1]">\8eÀ\8ds\83t\83@\83C\83\8b\82ð\83o\83C\83\93\83h\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="CCPSearch" Template="">\8fð\8c\8f\82É\8d\87\82¤\90»\95i\82ð\8c\9f\8dõ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="CostFinalize" Template="">\95K\97v\82È\97Ì\88æ\82ð\8cv\8eZ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="CostInitialize" Template="">\95K\97v\82È\97Ì\88æ\82ð\8cv\8eZ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="CreateFolders" Template="\83t\83H\83\8b\83_: [1]">\83t\83H\83\8b\83_\82ð\8dì\90¬\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="CreateShortcuts" Template="\83V\83\87\81[\83g\83J\83b\83g: [1]">\83V\83\87\81[\83g\83J\83b\83g\82ð\8dì\90¬\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="DeleteServices" Template="\83T\81[\83r\83X: [1]">\83T\81[\83r\83X\82ð\8dí\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="DuplicateFiles" Template="\83t\83@\83C\83\8b: [1]\81A \83f\83B\83\8c\83N\83g\83\8a: [9]\81A \83T\83C\83Y: [6]">\8fd\95¡\82µ\82Ä\82¢\82é\83t\83@\83C\83\8b\82ð\8dì\90¬\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="FileCost" Template="">\95K\97v\82È\97Ì\88æ\82ð\8cv\8eZ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="FindRelatedProducts" Template="\8c©\82Â\82©\82Á\82½\83A\83v\83\8a\83P\81[\83V\83\87\83\93 : [1]">\8aÖ\98A\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\8c\9f\8dõ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="GenerateScript" Template="[1]">\91\80\8dì\82Ì\82½\82ß\82Ì\83X\83N\83\8a\83v\83g\91\80\8dì\82ð\8dì\90¬\82µ\82Ä\82¢\82Ü\82·:</ProgressText>
+
+<ProgressText Action="InstallAdminPackage" Template="\83t\83@\83C\83\8b: [1]\81A \83f\83B\83\8c\83N\83g\83\8a: [9]\81A \83T\83C\83Y: [6]">\83l\83b\83g\83\8f\81[\83N \83C\83\93\83X\83g\81[\83\8b \83t\83@\83C\83\8b\82ð\83R\83s\81[\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="InstallFiles" Template="\83t\83@\83C\83\8b: [1]\81A \83f\83B\83\8c\83N\83g\83\8a: [9]\81A \83T\83C\83Y: [6]">\90V\82µ\82¢\83t\83@\83C\83\8b\82ð\83R\83s\81[\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="InstallODBC" Template="">ODBC \83R\83\93\83|\81[\83l\83\93\83g\82ð\83C\83\93\83X\83g\81[\83\8b\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="InstallServices" Template="\83T\81[\83r\83X: [2]">\90V\82µ\82¢\83T\81[\83r\83X\82ð\83C\83\93\83X\83g\81[\83\8b\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="InstallSFPCatalogFile" Template="\83t\83@\83C\83\8b: [1], \88Ë\91¶\8aÖ\8cW: [2]">\83V\83X\83e\83\80 \83J\83^\83\8d\83O\82ð\83C\83\93\83X\83g\81[\83\8b\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="InstallValidate" Template="">\83C\83\93\83X\83g\81[\83\8b\82ð\8c\9f\8fØ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="LaunchConditions" Template="">\8bN\93®\8fó\91Ô\82ð\8c\9f\8fØ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="MigrateFeatureStates" Template="\83A\83v\83\8a\83P\81[\83V\83\87\83\93 : [1]">\8aÖ\98A\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82©\82ç\8b@\94\\82Ì\8fó\91Ô\82ð\88Ú\8ds\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="MoveFiles" Template="\83t\83@\83C\83\8b: [1]\81A \83f\83B\83\8c\83N\83g\83\8a: [9]\81A \83T\83C\83Y: [6]">\83t\83@\83C\83\8b\82ð\88Ú\93®\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="MsiPublishAssemblies" Template="\83A\83v\83\8a\83P\81[\83V\83\87\83\93 \83R\83\93\83e\83L\83X\83g:[1], \83A\83Z\83\93\83u\83\8a\96¼:[2]">\83A\83Z\83\93\83u\83\8a\8fî\95ñ\82ð\8cö\8aJ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="MsiUnpublishAssemblies" Template="\83A\83v\83\8a\83P\81[\83V\83\87\83\93 \83R\83\93\83e\83L\83X\83g:[1], \83A\83Z\83\93\83u\83\8a\96¼:[2]">\83A\83Z\83\93\83u\83\8a\8fî\95ñ\82ð\94ñ\8cö\8aJ\82É\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="PatchFiles" Template="\83t\83@\83C\83\8b: [1]\81A \83f\83B\83\8c\83N\83g\83\8a: [2]\81A \83T\83C\83Y: [3]">\83t\83@\83C\83\8b\82ð\8fC\90³\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="ProcessComponents" Template="">\83R\83\93\83|\81[\83l\83\93\83g\82Ì\93o\98^\82ð\8dX\90V\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="PublishComponents" Template="\83R\83\93\83|\81[\83l\83\93\83g ID: [1]\81A\8fC\8fü\8eq: [2]">\8fð\8c\8f\82É\8d\87\82¤\83R\83\93\83|\81[\83l\83\93\83g\82ð\8cö\8aJ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="PublishFeatures" Template="\8b@\94\: [1]">\90»\95i\8b@\94\\82ð\8cö\8aJ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="PublishProduct" Template="">\90»\95i\8fî\95ñ\82ð\8cö\8aJ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RegisterClassInfo" Template="\83N\83\89\83X ID: [1]">\83N\83\89\83X \83T\81[\83o\81[\82ð\93o\98^\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RegisterComPlus" Template="AppId : [1]{{, AppType : [2], Users : [3], RSN : [4]}}">COM+ \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Æ\83R\83\93\83|\81[\83l\83\93\83g\82ð\93o\98^\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RegisterExtensionInfo" Template="\83G\83N\83X\83e\83\93\83V\83\87\83\93: [1]">\83G\83N\83X\83e\83\93\83V\83\87\83\93 \83T\81[\83o\81[\82ð\93o\98^\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RegisterFonts" Template="\83t\83H\83\93\83g: [1]">\83t\83H\83\93\83g\82ð\93o\98^\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RegisterMIMEInfo" Template="MIME \83R\83\93\83e\83\93\83g \83^\83C\83v: [1]\81A\83G\83N\83X\83e\83\93\83V\83\87\83\93: [2]">MIME \8fî\95ñ\82ð\93o\98^\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RegisterProduct" Template="[1]">\90»\95i\82ð\93o\98^\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RegisterProgIdInfo" Template="\83v\83\8d\83O\83\89\83\80 ID: [1]">\83v\83\8d\83O\83\89\83\80\8e¯\95Ê\8eq\82ð\93o\98^\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RegisterTypeLibraries" Template="\83\89\83C\83u\83\89\83\8a ID: [1]">\8eí\97Þ\82Ì\83\89\83C\83u\83\89\83\8a\82ð\93o\98^\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RegisterUser" Template="[1]">\83\86\81[\83U\81[\82ð\93o\98^\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RemoveDuplicateFiles" Template="\83t\83@\83C\83\8b: [1]\81A \83f\83B\83\8c\83N\83g\83\8a: [9]">\8fd\95¡\82µ\82Ä\82¢\82é\83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RemoveEnvironmentStrings" Template="\96¼\91O: [1]\81A\92l: [2]\81A\91\80\8dì [3]">\8aÂ\8b«\83X\83g\83\8a\83\93\83O\82ð\8dX\90V\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RemoveExistingProducts" Template="\83A\83v\83\8a\83P\81[\83V\83\87\83\93 : [1], \83R\83}\83\93\83h \83\89\83C\83\93 : [2]">\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\8dí\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RemoveFiles" Template="\83t\83@\83C\83\8b: [1]\81A \83f\83B\83\8c\83N\83g\83\8a: [9]">\83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RemoveFolders" Template="\83t\83H\83\8b\83_: [1]">\83t\83H\83\8b\83_\82ð\8dí\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RemoveIniValues" Template="\83t\83@\83C\83\8b: [1]\81A\83Z\83N\83V\83\87\83\93: [2]\81A\83L\81[: [3]\81A\92l: [4]">INI \83t\83@\83C\83\8b\82Ì\83G\83\93\83g\83\8a\82ð\8dí\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RemoveODBC" Template="">ODBC \83R\83\93\83|\81[\83l\83\93\83g\82ð\8dí\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RemoveRegistryValues" Template="\83L\81[: [1]\81A\96¼\91O: [2]">\83V\83X\83e\83\80 \83\8c\83W\83X\83g\83\8a\82Ì\92l\82ð\8dí\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RemoveShortcuts" Template="\83V\83\87\81[\83g\83J\83b\83g: [1]">\83V\83\87\81[\83g\83J\83b\83g\82ð\8dí\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="RMCCPSearch" Template="">\8fð\8c\8f\82É\8d\87\82¤\90»\95i\82ð\8c\9f\8dõ\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="Rollback" Template="[1]">\91\80\8dì\82ð\8c³\82É\96ß\82µ\82Ä\82¢\82Ü\82·:</ProgressText>
+
+<ProgressText Action="RollbackCleanup" Template="\83t\83@\83C\83\8b: [1]">\83o\83b\83N\83A\83b\83v \83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="SelfRegModules" Template="\83t\83@\83C\83\8b: [1]\81A\83t\83H\83\8b\83_: [2]">\83\82\83W\83\85\81[\83\8b\82ð\93o\98^\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="SelfUnregModules" Template="\83t\83@\83C\83\8b: [1]\81A\83t\83H\83\8b\83_: [2]">\83\82\83W\83\85\81[\83\8b\82Ì\93o\98^\82ð\89ð\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="SetODBCFolders" Template="">ODBC \83f\83B\83\8c\83N\83g\83\8a\82ð\8f\89\8aú\89»\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="StartServices" Template="\83T\81[\83r\83X: [1]">\83T\81[\83r\83X\82ð\8aJ\8en\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="StopServices" Template="\83T\81[\83r\83X: [1]">\83T\81[\83r\83X\82ð\92â\8e~\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="UnmoveFiles" Template="\83t\83@\83C\83\8b: [1]\81A \83f\83B\83\8c\83N\83g\83\8a: [9]">\88Ú\93®\82µ\82½\83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="UnpublishComponents" Template="\83R\83\93\83|\81[\83l\83\93\83g ID: [1]\81A\8fC\8fü\8eq: [2]">\8fð\8c\8f\82É\8d\87\82¤\83R\83\93\83|\81[\83l\83\93\83g\82ð\94ñ\8cö\8aJ\82É\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="UnpublishFeatures" Template="\8b@\94\: [1]">\90»\95i\8b@\94\\82ð\94ñ\8cö\8aJ\82É\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="UnpublishProduct" Template="">\90»\95i\8fî\95ñ\82ð\94ñ\8cö\8aJ\82É\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="UnregisterClassInfo" Template="\83N\83\89\83X ID: [1]">\83N\83\89\83X \83T\81[\83o\81[\82Ì\93o\98^\82ð\89ð\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="UnregisterComPlus" Template="AppId : [1]{{, AppType : [2]}}">COM+ \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Æ\83R\83\93\83|\81[\83l\83\93\83g\82Ì\93o\98^\82ð\89ð\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="UnregisterExtensionInfo" Template="\83G\83N\83X\83e\83\93\83V\83\87\83\93: [1]">\83G\83N\83X\83e\83\93\83V\83\87\83\93 \83T\81[\83o\81[\82Ì\93o\98^\82ð\89ð\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="UnregisterFonts" Template="\83t\83H\83\93\83g: [1]">\83t\83H\83\93\83g\82Ì\93o\98^\82ð\89ð\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="UnregisterMIMEInfo" Template="MIME \83R\83\93\83e\83\93\83g \83^\83C\83v: [1]\81A\83G\83N\83X\83e\83\93\83V\83\87\83\93: [2]">MIME \8fî\95ñ\82Ì\93o\98^\82ð\89ð\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="UnregisterProgIdInfo" Template="\83v\83\8d\83O\83\89\83\80 ID: [1]">\83v\83\8d\83O\83\89\83\80\8e¯\95Ê\8eq\82Ì\93o\98^\82ð\89ð\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="UnregisterTypeLibraries" Template="\83\89\83C\83u\83\89\83\8a ID: [1]">\8eí\97Þ\82Ì\83\89\83C\83u\83\89\83\8a\82Ì\93o\98^\82ð\89ð\8f\9c\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="WriteEnvironmentStrings" Template="\96¼\91O: [1]\81A\92l: [2]\81A\91\80\8dì [3]">\8aÂ\8b«\83X\83g\83\8a\83\93\83O\82ð\8dX\90V\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="WriteIniValues" Template="\83t\83@\83C\83\8b: [1]\81A\83Z\83N\83V\83\87\83\93: [2]\81A\83L\81[: [3]\81A\92l: [4]">INI \83t\83@\83C\83\8b\82É\92l\82ð\8f\91\82«\8d\9e\82ñ\82Å\82¢\82Ü\82·</ProgressText>
+
+<ProgressText Action="WriteRegistryValues" Template="\83L\81[: [1]\81A \96¼\91O: [2]\81A \92l: [3]">\8cã\82Å\8eg\97p\82·\82é\82½\82ß\82É\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\90Ý\92è\82µ\82Ä\82¢\82Ü\82·</ProgressText>
+
+</Include>
--- /dev/null
+<Include>
+
+<Error Id="0">{{\92v\96½\93I\82È\83G\83\89\81[: }}</Error>
+
+<Error Id="1">{{\83G\83\89\81[ [1]\81B }}</Error>
+
+<Error Id="2">\8cx\8d\90 [1]\81B </Error>
+
+<Error Id="3"></Error>
+
+<Error Id="4">\8fî\95ñ [1]\81B </Error>
+
+<Error Id="5">\82±\82Ì\83p\83b\83P\81[\83W\82ð\83C\83\93\83X\83g\81[\83\8b\82·\82é\82Æ\82«\82É\97\\8aú\82µ\82È\82¢\83G\83\89\81[\82ª\8c\9f\8fo\82³\82ê\82Ü\82µ\82½\81B\82±\82Ì\83p\83b\83P\81[\83W\82Í\96â\91è\82ª\82 \82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B\83G\83\89\81[ \83R\81[\83h\82Í [1] \82Å\82·\81B {{\88ø\90\94: [2], [3], [4]}}</Error>
+
+<Error Id="6"></Error>
+
+<Error Id="7">{{\83f\83B\83X\83N\82ª\82¢\82Á\82Ï\82¢\82Å\82·: }}</Error>
+
+<Error Id="8">\91\80\8dì [Time]: [1]\81B [2]</Error>
+
+<Error Id="9">[ProductName]</Error>
+
+<Error Id="10">{[2]}{, [3]}{, [4]}</Error>
+
+<Error Id="11">\83\81\83b\83Z\81[\83W\82Ì\8eí\97Þ: [1], \88ø\90\94: [2]</Error>
+
+<Error Id="12">=== \83\8d\83O\8aJ\8en: [Date] [Time] ===</Error>
+
+<Error Id="13">=== \83\8d\83O\8fI\97¹: [Date] [Time] ===</Error>
+
+<Error Id="14">\91\80\8dì\8aJ\8en [Time]: [1]\81B</Error>
+
+<Error Id="15">\91\80\8dì\8fI\97¹ [Time]: [1]\81B \96ß\82è\92l [2]\81B</Error>
+
+<Error Id="16">\8ec\82è\8e\9e\8aÔ: {[1] \95ª }{[2] \95b}</Error>
+
+<Error Id="17">\83\81\83\82\83\8a\95s\91«\82Å\82·\81B\82Ù\82©\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\95Â\82¶\82Ä\82©\82ç\81A\8dÄ\8e\8e\8ds\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="18">\83C\83\93\83X\83g\81[\83\8b \83v\83\8d\83O\83\89\83\80\82©\82ç\89\9e\93\9a\82ª\82 \82è\82Ü\82¹\82ñ\81B</Error>
+
+<Error Id="19">\83C\83\93\83X\83g\81[\83\8b \83v\83\8d\83O\83\89\83\80\82Í\8a®\97¹\91O\82É\92\86\92f\82³\82ê\82Ü\82µ\82½\81B</Error>
+
+<Error Id="20">Windows \82É [ProductName] \82ð\90Ý\92è\82µ\82Ä\82¢\82Ü\82·\81B\82µ\82Î\82ç\82\82¨\91Ò\82¿\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="21">\95K\97v\82È\8fî\95ñ\82ð\8fW\82ß\82Ä\82¢\82Ü\82·...</Error>
+
+<Error Id="22">\82±\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\8cÃ\82¢\83o\81[\83W\83\87\83\93\82ð\8dí\8f\9c\82µ\82Ä\82¢\82Ü\82·...</Error>
+
+<Error Id="23">\82±\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\8cÃ\82¢\83o\81[\83W\83\87\83\93\82ð\8dí\8f\9c\82·\82é\8f\80\94õ\82ð\82µ\82Ä\82¢\82Ü\82·...</Error>
+
+<Error Id="32">{[ProductName] }\82Ì\83Z\83b\83g\83A\83b\83v\82ð\90³\82µ\82\8a®\97¹\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="33">{[ProductName] }\82Ì\83Z\83b\83g\83A\83b\83v\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1101">\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8eæ\82é\82Æ\82«\82É\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½: [2]\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[ [3]\81B}} \83t\83@\83C\83\8b\82ª\91¶\8dÝ\82µ\81A\83A\83N\83Z\83X\82Å\82«\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1301">\83t\83@\83C\83\8b '[2]' \82ð\8dì\90¬\82Å\82«\82Ü\82¹\82ñ\81B\82±\82Ì\96¼\91O\82Ì\83f\83B\83\8c\83N\83g\83\8a\82ª\8aù\82É\82 \82è\82Ü\82·\81B\83C\83\93\83X\83g\81[\83\8b\82ð\8eæ\82è\8fÁ\82µ\81A\95Ê\82Ì\8fê\8f\8a\82É\83C\83\93\83X\83g\81[\83\8b\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1302">\83f\83B\83X\83N [2] \82ð\91}\93ü\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1303">\83C\83\93\83X\83g\81[\83\8b \83v\83\8d\83O\83\89\83\80\82É\82Í\83f\83B\83\8c\83N\83g\83\8a [2] \82É\83A\83N\83Z\83X\82·\82é\82½\82ß\82Ì\93Á\8c \82ª\95s\91«\82µ\82Ä\82¢\82Ü\82·\81B\83C\83\93\83X\83g\81[\83\8b\82ð\91±\8ds\82Å\82«\82Ü\82¹\82ñ\81BAdministrator \82Æ\82µ\82Ä\83\8d\83O\83I\83\93\82·\82é\82©\81A\82Ü\82½\82Í\83V\83X\83e\83\80\8aÇ\97\9d\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1304">\83t\83@\83C\83\8b\82É\8f\91\82«\8d\9e\82Þ\82Æ\82«\82É\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½: [2]\81B\82±\82Ì\83f\83B\83\8c\83N\83g\83\8a\82É\83A\83N\83Z\83X\82Å\82«\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1305">\83t\83@\83C\83\8b [2] \82Ì\93Ç\82Ý\8d\9e\82Ý\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[ [3]\81B}} \83t\83@\83C\83\8b\82ª\91¶\8dÝ\82µ\83A\83N\83Z\83X\8c \82ª\82 \82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1306">\83t\83@\83C\83\8b '[2]' \82Í\95Ê\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Å\8eg\97p\82³\82ê\82Ä\82¢\82Ü\82·\81B\8aJ\82¢\82Ä\82¢\82é\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\82·\82×\82Ä\8fI\97¹\82µ\82Ä\82©\82ç\81A[\[]\8dÄ\8e\8e\8ds[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1307">\83t\83@\83C\83\8b [2] \82ð\83C\83\93\83X\83g\81[\83\8b\82·\82é\82½\82ß\82Ì\83f\83B\83X\83N\97Ì\88æ\82ª\95s\91«\82µ\82Ä\82¢\82Ü\82·\81B\83f\83B\83X\83N\97Ì\88æ\82ð\89ð\95ú\82µ\82Ä\82©\82ç\81A[\[]\8dÄ\8e\8e\8ds[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\82\82¾\82³\82¢\81B\8fI\97¹\82·\82é\8fê\8d\87\82Í [\[]\83L\83\83\83\93\83Z\83\8b[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ü\82·\81B</Error>
+
+<Error Id="1308">\83\\81[\83X \83t\83@\83C\83\8b [2] \82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ\81B\83t\83@\83C\83\8b\82ª\91¶\8dÝ\82µ\81A\83A\83N\83Z\83X\82Å\82«\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1309">\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8eæ\82é\82Æ\82«\82É\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½: [3]\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[ [2]\81B}} \83t\83@\83C\83\8b\82ª\91¶\8dÝ\82µ\81A\83A\83N\83Z\83X\82Å\82«\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1310">\83t\83@\83C\83\8b\82É\8f\91\82«\8d\9e\82Þ\82Æ\82«\82É\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½: [3]\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[[2]\81B}} \82±\82Ì\83f\83B\83\8c\83N\83g\83\8a\82É\83A\83N\83Z\83X\82Å\82«\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1311">\83\\81[\83X \83t\83@\83C\83\8b\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ\81B{{(cabinet)}}: [2]\81B\83t\83@\83C\83\8b\82ª\91¶\8dÝ\82µ\81A\83A\83N\83Z\83X\82Å\82«\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1312">\83f\83B\83\8c\83N\83g\83\8a '[2]' \82ð\8dì\90¬\82Å\82«\82Ü\82¹\82ñ\81B\82±\82Ì\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\8aù\82É\82 \82è\82Ü\82·\81B\83t\83@\83C\83\8b\82Ì\96¼\91O\82ð\95Ï\8dX\82·\82é\82©\81A\83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82Ä\82©\82ç\81A[\[]\8dÄ\8e\8e\8ds[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\82\82¾\82³\82¢\81B\82Ü\82½\82Í\81A[\[]\83L\83\83\83\93\83Z\83\8b[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\81A\8fI\97¹\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1313">\83{\83\8a\83\85\81[\83\80 [2] \82Í\8c»\8dÝ\8eg\97p\82Å\82«\82Ü\82¹\82ñ\81B\95Ê\82Ì\83{\83\8a\83\85\81[\83\80\82ð\91I\91ð\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1314">\8ew\92è\82³\82ê\82½\83p\83X '[2]' \82Í\8eg\97p\82Å\82«\82Ü\82¹\82ñ\81B</Error>
+
+<Error Id="1315">\8ew\92è\82³\82ê\82½\83t\83H\83\8b\83_\82É\8f\91\82«\8d\9e\82ß\82Ü\82¹\82ñ: [2]\81B</Error>
+
+<Error Id="1316">\8e\9f\82Ì\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8eæ\82è\92\86\82É\81A\83l\83b\83g\83\8f\81[\83N \83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½: [2]</Error>
+
+<Error Id="1317">\83f\83B\83\8c\83N\83g\83\8a [2] \82ð\8dì\90¬\92\86\82É\81A\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1318">\83f\83B\83\8c\83N\83g\83\8a [2] \82ð\8dì\90¬\92\86\82É\81A\83l\83b\83g\83\8f\81[\83N \83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1319">\83\\81[\83X \83t\83@\83C\83\8b \83L\83\83\83r\83l\83b\83g\82ð\8aJ\82¢\82Ä\82¢\82é\93r\92\86\82Å\81A\83l\83b\83g\83\8f\81[\83N \83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½: [2]\81B</Error>
+
+<Error Id="1320">\8ew\92è\82³\82ê\82½\83p\83X\82Í\92·\82·\82¬\82Ü\82·: [2]</Error>
+
+<Error Id="1321">\83C\83\93\83X\83g\81[\83\8b \83v\83\8d\83O\83\89\83\80\82É\82Í\81A\83t\83@\83C\83\8b\82ð\8fC\90³\82·\82é\93Á\8c \82ª\82 \82è\82Ü\82¹\82ñ: [2]\81B</Error>
+
+<Error Id="1322">\83t\83H\83\8b\83_ \83p\83X '[2]' \82Ì\88ê\95\94\82ª\95s\90³\82Å\82·\81B\83p\83X\82ª\8bó\82Å\82 \82é\82©\82Ü\82½\82Í\92·\82·\82¬\82é\82Ì\82Å\81A\82±\82Ì\83V\83X\83e\83\80\82Å\82Í\8ew\92è\82Å\82«\82Ü\82¹\82ñ\81B</Error>
+
+<Error Id="1323">\83t\83H\83\8b\83_ \83p\83X '[2]' \82É\8eg\97p\82³\82ê\82Ä\82¢\82é\92P\8cê\82Ì\92\86\82É\81A\83t\83H\83\8b\83_ \83p\83X\82Å\82Í\8eg\97p\82Å\82«\82È\82¢\82à\82Ì\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82Ü\82·\81B</Error>
+
+<Error Id="1324">\83t\83H\83\8b\83_ \83p\83X '[2]' \82É\8eg\97p\82Å\82«\82È\82¢\95¶\8e\9a\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82Ü\82·\81B</Error>
+
+<Error Id="1325">[2]' \82Í\83V\83\87\81[\83g \83t\83@\83C\83\8b\96¼\82Æ\82µ\82Ä\82Í\90³\82µ\82\82 \82è\82Ü\82¹\82ñ\81B</Error>
+
+<Error Id="1326">\83t\83@\83C\83\8b \83Z\83L\83\85\83\8a\83e\83B\82ð\8eæ\93¾\82·\82é\82Æ\82«\82É\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½: [3] GetLastError: [2]</Error>
+
+<Error Id="1327">\83h\83\89\83C\83u\82ª\90³\82µ\82\82 \82è\82Ü\82¹\82ñ: [2]</Error>
+
+<Error Id="1328">\83t\83@\83C\83\8b [2] \82É\83p\83b\83`\82ð\93K\97p\82·\82é\8e\9e\82É\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½\81B\82¨\82»\82ç\82\95Ê\82Ì\95û\96@\82É\82æ\82Á\82Ä\83A\83b\83v\83f\81[\83g\82³\82ê\82½\82½\82ß\82Å\82·\81B\82±\82Ì\83p\83b\83`\82Å\95Ï\8dX\82·\82é\82±\82Æ\82Í\82Å\82«\82Ü\82¹\82ñ\81B\8fÚ\8d×\82Í\81A\82±\82Ì\83p\83b\83`\82Ì\83x\83\93\83_\81[\82É\82¨\96â\82¢\8d\87\82í\82¹\82\82¾\82³\82¢\81B {{\83V\83X\83e\83\80 \83G\83\89\81[ : [3]}}</Error>
+
+<Error Id="1329">\83L\83\83\83r\83l\83b\83g \83t\83@\83C\83\8b [2] \82É\83f\83W\83^\83\8b\8f\90\96¼\82ª\95t\82¢\82Ä\82¢\82È\82¢\82½\82ß\81A\95K\97v\82È\83t\83@\83C\83\8b\82ð\83C\83\93\83X\83g\81[\83\8b\82Å\82«\82Ü\82¹\82ñ\81B\83L\83\83\83r\83l\83b\83g \83t\83@\83C\83\8b\82ª\89ó\82ê\82Ä\82¢\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B</Error>
+
+<Error Id="1330">\83L\83\83\83r\83l\83b\83g \83t\83@\83C\83\8b [2] \82É\96³\8cø\82È\83f\83W\83^\83\8b\8f\90\96¼\82ª\95t\82¢\82Ä\82¢\82é\82½\82ß\81A\95K\97v\82È\83t\83@\83C\83\8b\82ð\83C\83\93\83X\83g\81[\83\8b\82Å\82«\82Ü\82¹\82ñ\81B\83L\83\83\83r\83l\83b\83g \83t\83@\83C\83\8b\82ª\89ó\82ê\82Ä\82¢\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B{{ \83G\83\89\81[ [3] \82ª WinVerifyTrust \82É\82æ\82Á\82Ä\95Ô\82³\82ê\82Ü\82µ\82½\81B}}</Error>
+
+<Error Id="1331">[2] \83t\83@\83C\83\8b\82ð\90³\82µ\82\83R\83s\81[\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½: CRC \83G\83\89\81[\81B</Error>
+
+<Error Id="1332">[2] \83t\83@\83C\83\8b\82ð\90³\82µ\82\88Ú\93®\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½: CRC \83G\83\89\81[\81B</Error>
+
+<Error Id="1333">\8fC\90³\83v\83\8d\83O\83\89\83\80\82ð\83t\83@\83C\83\8b [2] \82É\90³\82µ\82\93K\97p\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½: CRC \83G\83\89\81[\81B</Error>
+
+<Error Id="1334">\83t\83@\83C\83\8b '[2]' \82Í\83L\83\83\83r\83l\83b\83g \83t\83@\83C\83\8b '[3]' \82Å\8c©\82Â\82©\82ç\82È\82¢\82½\82ß\81A\83C\83\93\83X\83g\81[\83\8b\82Å\82«\82Ü\82¹\82ñ\81B\83l\83b\83g\83\8f\81[\83N \83G\83\89\81[\82Ü\82½\82Í CD-ROM \82©\82ç\82Ì\93Ç\82Ý\8eæ\82è\83G\83\89\81[\82ª\94\90¶\82µ\82½\82©\81A\82±\82Ì\83p\83b\83P\81[\83W\82É\96â\91è\82ª\82 \82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B</Error>
+
+<Error Id="1335">\82±\82Ì\83C\83\93\83X\83g\81[\83\8b\82É\95K\97v\82È\83L\83\83\83r\83l\83b\83g \83t\83@\83C\83\8b '[2]' \82Í\89ó\82ê\82Ä\82¢\82é\82½\82ß\8eg\97p\82Å\82«\82Ü\82¹\82ñ\81B\83l\83b\83g\83\8f\81[\83N \83G\83\89\81[\82Ü\82½\82Í CD-ROM \82©\82ç\82Ì\93Ç\82Ý\8eæ\82è\83G\83\89\81[\82ª\94\90¶\82µ\82½\82©\81A\82±\82Ì\83p\83b\83P\81[\83W\82É\96â\91è\82ª\82 \82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B</Error>
+
+<Error Id="1336">\82±\82Ì\83C\83\93\83X\83g\81[\83\8b\82ð\8a®\97¹\82·\82é\82½\82ß\82É\95K\97v\82È\88ê\8e\9e\83t\83@\83C\83\8b\82ð\8dì\90¬\82·\82é\82Æ\82«\82É\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½\81B{{ \83t\83H\83\8b\83_: [3]. \83V\83X\83e\83\80 \83G\83\89\81[ \83R\81[\83h: [2]}}</Error>
+
+<Error Id="1401">\83L\81[\82ð\8dì\90¬\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½: [2]\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[ [3]\81B}} \82»\82Ì\83L\81[\82Ö\82Ì\8f\\95ª\82È\83A\83N\83Z\83X\82ª\82 \82é\82±\82Æ\82ð\8am\94F\82·\82é\82©\81A\82Ü\82½\82Í\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B </Error>
+
+<Error Id="1402">\83L\81[\82ð\8aJ\82\82±\82Æ\82ª\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½: [2]\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[ [3]\81B}} \82»\82Ì\83L\81[\82Ö\82Ì\8f\\95ª\82È\83A\83N\83Z\83X\82ª\82 \82é\82±\82Æ\82ð\8am\94F\82·\82é\82©\81A\82Ü\82½\82Í\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B </Error>
+
+<Error Id="1403">\83L\81[ [3] \82©\82ç\92l [2] \82ð\8dí\8f\9c\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[ [4]\81B}} \82»\82Ì\83L\81[\82Ö\82Ì\8f\\95ª\82È\83A\83N\83Z\83X\82ª\82 \82é\82±\82Æ\82ð\8am\94F\82·\82é\82©\81A\82Ü\82½\82Í\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B </Error>
+
+<Error Id="1404">\83L\81[ [2] \82ð\8dí\8f\9c\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[ [3]\81B}} \82»\82Ì\83L\81[\82Ö\82Ì\8f\\95ª\82È\83A\83N\83Z\83X\82ª\82 \82é\82±\82Æ\82ð\8am\94F\82·\82é\82©\81A\82Ü\82½\82Í\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B </Error>
+
+<Error Id="1405">\83L\81[ [3] \82©\82ç\92l [2] \82ð\93Ç\82Ý\8eæ\82ê\82Ü\82¹\82ñ\82Å\82µ\82½\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[ [4]\81B}} \82»\82Ì\83L\81[\82Ö\82Ì\8f\\95ª\82È\83A\83N\83Z\83X\82ª\82 \82é\82±\82Æ\82ð\8am\94F\82·\82é\82©\81A\82Ü\82½\82Í\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B </Error>
+
+<Error Id="1406">\92l [2] \82ð\83L\81[ [3] \82É\8f\91\82«\8d\9e\82ß\82Ü\82¹\82ñ\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[ [4]\81B}} \82»\82Ì\83L\81[\82Ö\82Ì\8f\\95ª\82È\83A\83N\83Z\83X\82ª\82 \82é\82±\82Æ\82ð\8am\94F\82·\82é\82©\81A\82Ü\82½\82Í\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1407">\83L\81[ [2] \82É\91Î\82·\82é\92l\82Ì\96¼\91O\82ð\8eæ\93¾\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[ [3]\81B}} \82»\82Ì\83L\81[\82Ö\82Ì\8f\\95ª\82È\83A\83N\83Z\83X\82ª\82 \82é\82±\82Æ\82ð\8am\94F\82·\82é\82©\81A\82Ü\82½\82Í\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1408">\83L\81[ [2] \82É\91Î\82·\82é\83T\83u \83L\81[\96¼\82ð\8eæ\93¾\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[ [3]\81B}} \82»\82Ì\83L\81[\82Ö\82Ì\8f\\95ª\82È\83A\83N\83Z\83X\82ª\82 \82é\82±\82Æ\82ð\8am\94F\82·\82é\82©\81A\82Ü\82½\82Í\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1409">\83L\81[ [2] \82É\91Î\82·\82é\83Z\83L\83\85\83\8a\83e\83B\8fî\95ñ\82ð\93Ç\82Ý\8eæ\82ê\82Ü\82¹\82ñ\82Å\82µ\82½\81B{{ \83V\83X\83e\83\80 \83G\83\89\81[ [3]\81B}} \82»\82Ì\83L\81[\82Ö\82Ì\8f\\95ª\82È\83A\83N\83Z\83X\82ª\82 \82é\82±\82Æ\82ð\8am\94F\82·\82é\82©\81A\82Ü\82½\82Í\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1410">\8eg\97p\89Â\94\\82È\83\8c\83W\83X\83g\83\8a\97Ì\88æ\82ð\91\9d\82â\82·\82±\82Æ\82ª\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\82±\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\83C\83\93\83X\83g\81[\83\8b\82·\82é\82É\82Í\81A[2] KB \82Ì\83\8c\83W\83X\83g\83\8a\97Ì\88æ\82ª\95K\97v\82Å\82·\81B</Error>
+
+<Error Id="1500">\95Ê\82Ì\83C\83\93\83X\83g\81[\83\8b\82ª\8c»\8dÝ\8ds\82í\82ê\82Ä\82¢\82Ü\82·\81B\90V\82½\82É\83C\83\93\83X\83g\81[\83\8b\82ð\8ds\82¤\82É\82Í\81A\8aù\82É\8eÀ\8ds\92\86\82Ì\83C\83\93\83X\83g\81[\83\8b\82ð\8a®\97¹\82µ\82È\82¯\82ê\82Î\82È\82è\82Ü\82¹\82ñ\81B</Error>
+
+<Error Id="1501">\95Û\8cì\82³\82ê\82Ä\82¢\82é\83f\81[\83^\82Ö\82Ì\83A\83N\83Z\83X\82Å\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½\81BWindows \83C\83\93\83X\83g\81[\83\89\82ª\90³\82µ\82\90Ý\92è\82³\82ê\82Ä\82¢\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82©\82ç\81A\8dÄ\93x\83C\83\93\83X\83g\81[\83\8b\82ð\8eÀ\8ds\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1502">\83\86\81[\83U\81[ '[2]' \82É\82æ\82Á\82Ä\81A\8aù\82É\90»\95i '[3]' \82Ì\83C\83\93\83X\83g\81[\83\8b\82ª\8aJ\8en\82³\82ê\82Ä\82¢\82Ü\82·\81B\82±\82Ì\90»\95i\82ð\8eg\82¤\91O\82É\81A\82±\82Ì\83\86\81[\83U\81[\82Í\8dÄ\93x\83C\83\93\83X\83g\81[\83\8b\82ð\8eÀ\8ds\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B\8c»\8dÝ\82Ì\83C\83\93\83X\83g\81[\83\8b\82Í\82±\82Ì\82Ü\82Ü\91±\8ds\82³\82ê\82Ü\82·\81B</Error>
+
+<Error Id="1503">\83\86\81[\83U\81[ '[2]' \82É\82æ\82Á\82Ä\81A\8aù\82É\90»\95i '[3]' \82Ì\83C\83\93\83X\83g\81[\83\8b\82ª\8aJ\8en\82³\82ê\82Ä\82¢\82Ü\82·\81B\82±\82Ì\90»\95i\82ð\8eg\82¤\91O\82É\81A\82±\82Ì\83\86\81[\83U\81[\82Í\8dÄ\93x\83C\83\93\83X\83g\81[\83\8b\82ð\8eÀ\8ds\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B</Error>
+
+<Error Id="1601">\83f\83B\83X\83N\97Ì\88æ\82ª\91«\82è\82Ü\82¹\82ñ -- \83{\83\8a\83\85\81[\83\80: '[2]'; \95K\97v\82È\97Ì\88æ: [3] KB; \97\98\97p\89Â\94\\82È\97Ì\88æ: [4] KB\81B\83f\83B\83X\83N\97Ì\88æ\82ð\89ð\95ú\82µ\82Ä\82©\82ç\81A\8dÄ\8e\8e\8ds\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1602">\8eæ\82è\8fÁ\82µ\82Ü\82·\82©?</Error>
+
+<Error Id="1603">\83t\83@\83C\83\8b [2][3] \82Í\8eg\97p\92\86\82Å\82· {\83v\83\8d\83Z\83X\96¼: [4]\81AID: [5]\81A\83E\83B\83\93\83h\83E \83^\83C\83g\83\8b: '[6]'} \82±\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\8fI\97¹\82µ\82Ä\82©\82ç\81A\8dÄ\8e\8e\8ds\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1604">'[2]' \82ª\8aù\82É\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ä\82¢\82é\82½\82ß\81A\82±\82Ì\90»\95i\82ð\83C\83\93\83X\83g\81[\83\8b\82Å\82«\82Ü\82¹\82ñ\81B\82±\82Ì 2 \82Â\82Ì\90»\95i\82É\82Í\8cÝ\8a·\90«\82ª\82 \82è\82Ü\82¹\82ñ\81B</Error>
+
+<Error Id="1605">\83{\83\8a\83\85\81[\83\80 '[2]' \82Ì\83f\83B\83X\83N\97Ì\88æ\82ª\95s\91«\82µ\82Ä\82¢\82é\82½\82ß\81A\89ñ\95\9c\82ð\97L\8cø\82É\82µ\82½\82Ü\82Ü\83C\83\93\83X\83g\81[\83\8b\82ð\91±\8ds\82·\82é\82±\82Æ\82Í\82Å\82«\82Ü\82¹\82ñ\81B[3] KB \95K\97v\82Å\82·\82ª\81A[4] KB \82µ\82©\82 \82è\82Ü\82¹\82ñ\81B\89ñ\95\9c\8fî\95ñ\82ð\95Û\91¶\82¹\82¸\82É\83C\83\93\83X\83g\81[\83\8b\82ð\91±\8ds\82·\82é\8fê\8d\87\82Í [\[]\96³\8e\8b[\]]\81A\97\98\97p\89Â\94\\82È\97Ì\88æ\82ð\8dÄ\8am\94F\82·\82é\8fê\8d\87\82Í [\[]\8dÄ\8e\8e\8ds[\]]\81A\83C\83\93\83X\83g\81[\83\8b\82ð\8fI\97¹\82·\82é\8fê\8d\87\82Í [\[]\83L\83\83\83\93\83Z\83\8b[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1606">\83l\83b\83g\83\8f\81[\83N\8fã\82Ì\8fê\8f\8a [2] \82Ö\83A\83N\83Z\83X\82Å\82«\82Ü\82¹\82ñ\81B</Error>
+
+<Error Id="1607">\83C\83\93\83X\83g\81[\83\8b\82ð\91±\8ds\82·\82é\82É\82Í\81A\8e\9f\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\8fI\97¹\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·:</Error>
+
+<Error Id="1608">\82±\82Ì\83R\83\93\83s\83\85\81[\83^\82É\82±\82Ì\90»\95i\82ð\83C\83\93\83X\83g\81[\83\8b\82·\82é\82Ì\82É\81A\91O\82à\82Á\82Ä\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ä\82¢\82È\82¯\82ê\82Î\82È\82ç\82È\82¢\90»\95i\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ\82Å\82µ\82½\81B</Error>
+
+<Error Id="1609">\83Z\83L\83\85\83\8a\83e\83B\82Ì\90Ý\92è\82ð\93K\97p\82·\82é\82Æ\82«\82É\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½\81B[2] \82Í\97L\8cø\82È\83\86\81[\83U\81[\82Ü\82½\82Í\83O\83\8b\81[\83v\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81B\82±\82ê\82Í\83p\83b\83P\81[\83W\82Ì\96â\91è\82©\81A\82Ü\82½\82Í\83l\83b\83g\83\8f\81[\83N\8fã\82Ì\83h\83\81\83C\83\93 \83R\83\93\83g\83\8d\81[\83\89\82É\90Ú\91±\82·\82é\82Æ\82«\82Ì\96â\91è\82Ì\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B\83l\83b\83g\83\8f\81[\83N\82Ì\90Ú\91±\82ð\8am\94F\82µ [\[]\8dÄ\8e\8e\8ds[\]] \82ð\83N\83\8a\83b\83N\82·\82é\82©\81A\83C\83\93\83X\83g\81[\83\8b\82ð\8fI\97¹\82·\82é\82É\82Í [\[]\83L\83\83\83\93\83Z\83\8b[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\82\82¾\82³\82¢\81B {{\83\86\81[\83U\81[\82Ì SID \82ð\8c\9f\8fo\82Å\82«\82Ü\82¹\82ñ, \83V\83X\83e\83\80 \83G\83\89\81[ [3]}}</Error>
+
+<Error Id="1701">\83L\81[ [2] \82Í\90³\82µ\82\82 \82è\82Ü\82¹\82ñ\81B\90³\82µ\82¢\83L\81[\82ª\93ü\97Í\82³\82ê\82Ä\82¢\82é\82©\82Ç\82¤\82©\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1702">[2] \82Ì\8d\\90¬\82ð\91±\8ds\82·\82é\91O\82É\81A\83V\83X\83e\83\80\82ð\8dÄ\8bN\93®\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B\82·\82®\82É\8dÄ\8bN\93®\82·\82é\8fê\8d\87\82Í [\[]\82Í\82¢[\]] \82ð\81A\8cã\82Å\8eè\93®\82Å\8dÄ\8bN\93®\82·\82é\8fê\8d\87\82Í [\[]\82¢\82¢\82¦[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1703">[2] \82É\8ds\82Á\82½\8d\\90¬\82Ì\95Ï\8dX\82ð\97L\8cø\82É\82·\82é\82É\82Í\81A\83V\83X\83e\83\80\82ð\8dÄ\8bN\93®\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B\82·\82®\82É\8dÄ\8bN\93®\82·\82é\8fê\8d\87\82Í [\[]\82Í\82¢[\]] \82ð\81A\8cã\82Å\8eè\93®\82Å\8dÄ\8bN\93®\82·\82é\8fê\8d\87\82Í [\[]\82¢\82¢\82¦[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1704">[2] \82Ì\83C\83\93\83X\83g\81[\83\8b\82Í\8c»\8dÝ\92\86\92f\82³\82ê\82Ä\82¢\82Ü\82·\81B\91±\8ds\82·\82é\82É\82Í\81A\83C\83\93\83X\83g\81[\83\8b\82É\82æ\82Á\82Ä\8ds\82í\82ê\82½\95Ï\8dX\82ð\8eæ\82è\8fÁ\82·\95K\97v\82ª\82 \82è\82Ü\82·\81B\82±\82ê\82ç\82Ì\95Ï\8dX\82ð\8eæ\82è\8fÁ\82µ\82Ü\82·\82©?</Error>
+
+<Error Id="1705">\82±\82Ì\90»\95i\82Ì\83C\83\93\83X\83g\81[\83\8b\82Í\8c»\8dÝ\90i\8ds\92\86\82Å\82·\81B\91±\8ds\82·\82é\82É\82Í\81A\83C\83\93\83X\83g\81[\83\8b\82É\82æ\82Á\82Ä\8ds\82í\82ê\82½\95Ï\8dX\82ð\8eæ\82è\8fÁ\82·\95K\97v\82ª\82 \82è\82Ü\82·\81B\82±\82ê\82ç\82Ì\95Ï\8dX\82ð\8eæ\82è\8fÁ\82µ\82Ü\82·\82©?</Error>
+
+<Error Id="1706">\90»\95i [2] \82Ì\83C\83\93\83X\83g\81[\83\8b \83p\83b\83P\81[\83W\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ\82Å\82µ\82½\81B\97L\8cø\82È\83R\83s\81[\82Ì\83C\83\93\83X\83g\81[\83\8b \83p\83b\83P\81[\83W '[3]' \82ð\8eg\82Á\82Ä\82à\82¤\88ê\93x\83C\83\93\83X\83g\81[\83\8b\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1707">\83C\83\93\83X\83g\81[\83\8b\82ð\90³\82µ\82\8a®\97¹\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1708">\83C\83\93\83X\83g\81[\83\8b\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1709">\90»\95i: [2] -- [3]</Error>
+
+<Error Id="1710">\83R\83\93\83s\83\85\81[\83^\82ð\92¼\91O\82Ì\8fó\91Ô\82É\95\9c\8c³\82·\82é\82©\81A\8cã\82Å\83C\83\93\83X\83g\81[\83\8b\82ð\91±\8ds\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\95\9c\8c³\82µ\82Ü\82·\82©?</Error>
+
+<Error Id="1711">\83C\83\93\83X\83g\81[\83\8b\8fî\95ñ\82ð\83f\83B\83X\83N\82É\8f\91\82«\8d\9e\82Ý\92\86\82É\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½\81B\8f\\95ª\82È\83f\83B\83X\83N\97Ì\88æ\82ª\82 \82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82©\82ç\81A[\[]\8dÄ\8e\8e\8ds[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\91±\8ds\82·\82é\82©\81A\82Ü\82½\82Í [\[]\83L\83\83\83\93\83Z\83\8b[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\83C\83\93\83X\83g\81[\83\8b\82ð\92\86\8e~\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1712">\82±\82Ì\83R\83\93\83s\83\85\81[\83^\82ð\92¼\91O\82Ì\8fó\91Ô\82É\95\9c\8c³\82·\82é\82½\82ß\82É\95K\97v\82È\83t\83@\83C\83\8b\82Ì\88ê\95\94\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ\82Å\82µ\82½\81B\95\9c\8c³\82·\82é\82±\82Æ\82Í\82Å\82«\82Ü\82¹\82ñ\81B</Error>
+
+<Error Id="1713">[2] \82Í\97v\8b\81\82³\82ê\82½\90»\95i\82Ì 1 \82Â\82ð\83C\83\93\83X\83g\81[\83\8b\82Å\82«\82Ü\82¹\82ñ\81B\8bZ\8fp\93I\82É\8fÚ\82µ\82¢\95û\82É\82¨\96â\82¢\8d\87\82í\82¹\82\82¾\82³\82¢\81B {{\83V\83X\83e\83\80 \83G\83\89\81[ : [3]}}</Error>
+
+<Error Id="1714">[2] \82Ì\8cÃ\82¢\83o\81[\83W\83\87\83\93\82ð\8dí\8f\9c\82·\82é\82±\82Æ\82Í\82Å\82«\82Ü\82¹\82ñ\81B\8bZ\8fp\93I\82É\8fÚ\82µ\82¢\95û\82É\82¨\96â\82¢\8d\87\82í\82¹\82\82¾\82³\82¢\81B {{\83V\83X\83e\83\80 \83G\83\89\81[ : [3]}}</Error>
+
+<Error Id="1715">[2] \82ð\83C\83\93\83X\83g\81[\83\8b\82µ\82Ü\82µ\82½</Error>
+
+<Error Id="1716">[2] \82ð\8d\\90¬\82µ\82Ü\82µ\82½</Error>
+
+<Error Id="1717">[2] \82ð\8dí\8f\9c\82µ\82Ü\82µ\82½</Error>
+
+<Error Id="1718">\83t\83@\83C\83\8b [2] \82Í\83f\83W\83^\83\8b\8f\90\96¼\83|\83\8a\83V\81[\82É\82æ\82Á\82Ä\8b\91\94Û\82³\82ê\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1719">Windows \83C\83\93\83X\83g\81[\83\89 \83T\81[\83r\83X\82É\83A\83N\83Z\83X\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83Z\81[\83t \83\82\81[\83h\82Å Windows \82ð\8eÀ\8ds\82µ\82Ä\82¢\82é\8fê\8d\87\81A\82Ü\82½\82Í Windows \83C\83\93\83X\83g\81[\83\89\82ª\90³\82µ\82\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ä\82¢\82È\82¢\8fê\8d\87\82É\94\90¶\82·\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1720">\82±\82Ì Windows \83C\83\93\83X\83g\81[\83\89 \83p\83b\83P\81[\83W\82É\82Í\96â\91è\82ª\82 \82è\82Ü\82·\81B\82±\82Ì\83C\83\93\83X\83g\81[\83\8b\82ð\8a®\97¹\82·\82é\82Ì\82É\95K\97v\82È\83X\83N\83\8a\83v\83g\82ð\8eÀ\8ds\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83T\83|\81[\83g\92S\93\96\8eÒ\82Ü\82½\82Í\83p\83b\83P\81[\83W\82Ì\83x\83\93\83_\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B {{\83J\83X\83^\83\80\91\80\8dì [2] \83X\83N\83\8a\83v\83g \83G\83\89\81[ [3], [4]: [5] \8ds [6], \97ñ [7], [8] }}</Error>
+
+<Error Id="1721">\82±\82Ì Windows \83C\83\93\83X\83g\81[\83\89 \83p\83b\83P\81[\83W\82É\82Í\96â\91è\82ª\82 \82è\82Ü\82·\81B\82±\82Ì\83C\83\93\83X\83g\81[\83\8b\82ð\8a®\97¹\82·\82é\82Ì\82É\95K\97v\82È\83v\83\8d\83O\83\89\83\80\82ð\8eÀ\8ds\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83T\83|\81[\83g\92S\93\96\8eÒ\82Ü\82½\82Í\83p\83b\83P\81[\83W\82Ì\83x\83\93\83_\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B {{\91\80\8dì: [2], \8fê\8f\8a: [3], \83R\83}\83\93\83h: [4] }}</Error>
+
+<Error Id="1722">\82±\82Ì Windows \83C\83\93\83X\83g\81[\83\89 \83p\83b\83P\81[\83W\82É\82Í\96â\91è\82ª\82 \82è\82Ü\82·\81B\83Z\83b\83g\83A\83b\83v\82Ì\88ê\95\94\82Æ\82µ\82Ä\8eÀ\8ds\82³\82ê\82é\83v\83\8d\83O\83\89\83\80\82Í\90³\82µ\82\8a®\97¹\82µ\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83T\83|\81[\83g\92S\93\96\8eÒ\82Ü\82½\82Í\83p\83b\83P\81[\83W\82Ì\83x\83\93\83_\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B {{\91\80\8dì [2], \8fê\8f\8a: [3], \83R\83}\83\93\83h: [4] }}</Error>
+
+<Error Id="1723">\82±\82Ì Windows \83C\83\93\83X\83g\81[\83\89 \83p\83b\83P\81[\83W\82É\82Í\96â\91è\82ª\82 \82è\82Ü\82·\81B\82±\82Ì\83C\83\93\83X\83g\81[\83\8b\82ð\8a®\97¹\82·\82é\82Ì\82É\95K\97v\82È DLL \82ð\8eÀ\8ds\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83T\83|\81[\83g\92S\93\96\8eÒ\82Ü\82½\82Í\83p\83b\83P\81[\83W\82Ì\83x\83\93\83_\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B {{\91\80\8dì [2], \83G\83\93\83g\83\8a: [3], \83\89\83C\83u\83\89\83\8a: [4] }}</Error>
+
+<Error Id="1724">\8dí\8f\9c\82ð\90³\82µ\82\8a®\97¹\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1725">\8dí\8f\9c\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1726">\83A\83h\83o\83^\83C\83Y\82ð\90³\82µ\82\8a®\97¹\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1727">\83A\83h\83o\83^\83C\83Y\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1728">\8d\\90¬\82ð\90³\82µ\82\8a®\97¹\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1729">\8d\\90¬\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1730">\82±\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\8dí\8f\9c\82·\82é\82É\82Í Administrator \82Å\82È\82¯\82ê\82Î\82È\82è\82Ü\82¹\82ñ\81B\82±\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\8dí\8f\9c\82·\82é\82É\82Í\81AAdministrator \82Æ\82µ\82Ä\83\8d\83O\83I\83\93\82·\82é\82©\81A\82Ü\82½\82Í\83e\83N\83j\83J\83\8b \83T\83|\81[\83g \83O\83\8b\81[\83v\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1801">\83p\83X [2] \82ª\90³\82µ\82\82 \82è\82Ü\82¹\82ñ\81B\90³\82µ\82¢\83p\83X\82ð\8ew\92è\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1802">\83\81\83\82\83\8a\95s\91«\82Å\82·\81B\82Ù\82©\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\95Â\82¶\82Ä\82©\82ç\81A\8dÄ\8e\8e\8ds\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1803">\83h\83\89\83C\83u [2] \82É\82Í\83f\83B\83X\83N\82ª\82 \82è\82Ü\82¹\82ñ\81B\83f\83B\83X\83N\82ð\91}\93ü\82µ\82Ä\82©\82ç [\[]\8dÄ\8e\8e\8ds[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\82\82¾\82³\82¢\81B\8aù\82É\91I\91ð\82³\82ê\82½\83{\83\8a\83\85\81[\83\80\82É\96ß\82é\8fê\8d\87\82Í\81A[\[]\83L\83\83\83\93\83Z\83\8b[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1804">\83h\83\89\83C\83u [2] \82É\82Í\83f\83B\83X\83N\82ª\82 \82è\82Ü\82¹\82ñ\81B\83f\83B\83X\83N\82ð\91}\93ü\82µ\82Ä\82©\82ç [\[]\8dÄ\8e\8e\8ds[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\82\82¾\82³\82¢\81B[\[]\8c\9f\8dõ[\]] \83_\83C\83A\83\8d\83O \83{\83b\83N\83X\82É\96ß\82Á\82Ä\81A\95Ê\82Ì\83{\83\8a\83\85\81[\83\80\82ð\91I\91ð\82·\82é\8fê\8d\87\82Í\81A[\[]\83L\83\83\83\93\83Z\83\8b[\]] \82ð\83N\83\8a\83b\83N\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1805">\83t\83H\83\8b\83_ [2] \82Í\91¶\8dÝ\82µ\82Ü\82¹\82ñ\81B\8aù\91¶\82Ì\83t\83H\83\8b\83_\82Ö\82Ì\83p\83X\82ð\93ü\97Í\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1806">\82±\82Ì\83t\83H\83\8b\83_\82ð\93Ç\82Ý\8eæ\82é\82½\82ß\82Ì\8f\\95ª\82È\93Á\8c \82ª\82 \82è\82Ü\82¹\82ñ\81B</Error>
+
+<Error Id="1807">\83C\83\93\83X\83g\81[\83\8b\82Ì\82½\82ß\82Ì\90³\82µ\82¢\83R\83s\81[\90æ\82ð\8am\92è\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B</Error>
+
+<Error Id="1901">\83\\81[\83X \83C\83\93\83X\83g\81[\83\8b \83f\81[\83^\83x\81[\83X\82©\82ç\93Ç\82Ý\8eæ\82é\82Æ\82«\82É\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½: [2]\81B</Error>
+
+<Error Id="1902">\8dÄ\8bN\93®\91\80\8dì\82ð\83X\83P\83W\83\85\81[\83\8b\82µ\82Ä\82¢\82Ü\82·: \83t\83@\83C\83\8b [2] \82Ì\96¼\91O\82ð [3] \82É\95Ï\8dX\82µ\82Ä\82¢\82Ü\82·\81B\91\80\8dì\82ð\8a®\97¹\82·\82é\82É\82Í\81A\8dÄ\8bN\93®\82µ\82È\82¯\82ê\82Î\82È\82è\82Ü\82¹\82ñ\81B</Error>
+
+<Error Id="1903">\8dÄ\8bN\93®\91\80\8dì\82ð\83X\83P\83W\83\85\81[\83\8b\82µ\82Ä\82¢\82Ü\82·: \83t\83@\83C\83\8b [2] \82Ì\8dí\8f\9c\81B\91\80\8dì\82ð\8a®\97¹\82·\82é\82É\82Í\81A\8dÄ\8bN\93®\82µ\82È\82¯\82ê\82Î\82È\82è\82Ü\82¹\82ñ\81B</Error>
+
+<Error Id="1904">\83\82\83W\83\85\81[\83\8b [2] \82Å\93o\98^\82É\8e¸\94s\82µ\82Ü\82µ\82½\81BHRESULT [3]\81B\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1905">\83\82\83W\83\85\81[\83\8b [2] \82Å\93o\98^\82Ì\89ð\8f\9c\82É\8e¸\94s\82µ\82Ü\82µ\82½\81BHRESULT [3]\81B\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1906">\83p\83b\83P\81[\83W [2] \82Ì\83L\83\83\83b\83V\83\85\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B\83G\83\89\81[: [3]\81B\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1907">\83t\83H\83\93\83g [2] \82ð\93o\98^\82Å\82«\82Ü\82¹\82ñ\81B\82±\82Ì\83t\83H\83\93\83g\82ð\83C\83\93\83X\83g\81[\83\8b\82·\82é\8c \97\98\82ª\82 \82é\82©\82Ç\82¤\82©\81A\82Ü\82½\83V\83X\83e\83\80\82ª\82±\82Ì\83t\83H\83\93\83g\82ð\83T\83|\81[\83g\82µ\82Ä\82¢\82é\82©\82Ç\82¤\82©\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1908">\83t\83H\83\93\83g [2] \82Ì\93o\98^\82ð\89ð\8f\9c\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83t\83H\83\93\83g\82ð\8dí\8f\9c\82·\82é\82Ì\82É\8f\\95ª\82È\83A\83N\83Z\83X\8b\96\89Â\82ª\82 \82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1909">\83V\83\87\81[\83g\83J\83b\83g [2] \82ð\8dì\90¬\82Å\82«\82Ü\82¹\82ñ\81B\96Ú\93I\82Ì\83t\83H\83\8b\83_\82ª\91¶\8dÝ\82µ\81A\83A\83N\83Z\83X\82Å\82«\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1910">\83V\83\87\81[\83g\83J\83b\83g [2] \82ð\8dí\8f\9c\82Å\82«\82Ü\82¹\82ñ\81B\83V\83\87\81[\83g\83J\83b\83g \83t\83@\83C\83\8b\82ª\91¶\8dÝ\82µ\81A\83A\83N\83Z\83X\82Å\82«\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1911">\83t\83@\83C\83\8b [2] \82Ì\82½\82ß\82Ì\8eí\97Þ\82Ì\83\89\83C\83u\83\89\83\8a\82ð\93o\98^\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1912">\83t\83@\83C\83\8b [2] \82Ì\82½\82ß\82Ì\8eí\97Þ\82Ì\83\89\83C\83u\83\89\83\8a\82Ì\93o\98^\82ð\89ð\8f\9c\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1913">INI \83t\83@\83C\83\8b [2][3] \82ð\8dX\90V\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83t\83@\83C\83\8b\82ª\91¶\8dÝ\82µ\81A\83A\83N\83Z\83X\82Å\82«\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1914">\8dÄ\8bN\93®\82·\82é\82Æ\82«\82É\81A\83t\83@\83C\83\8b [3] \82ð [2] \82Å\92u\82«\8a·\82¦\82é\82æ\82¤\82É\83X\83P\83W\83\85\81[\83\8b\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82¹\82ñ\81B\83t\83@\83C\83\8b [3] \82Ö\82Ì\8f\91\82«\8d\9e\82Ý\82Ì\83A\83N\83Z\83X\8b\96\89Â\82ð\8e\9d\82Á\82Ä\82¢\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1915">ODBC \83h\83\89\83C\83o \83}\83l\81[\83W\83\83\82Ì\8dí\8f\9c\82Å\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½\81BODBC \83G\83\89\81[ [2]: [3]\81B\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1916">ODBC \83h\83\89\83C\83o \83}\83l\81[\83W\83\83\82Ì\83C\83\93\83X\83g\81[\83\8b\82Å\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½\81BODBC \83G\83\89\81[ [2]: [3]\81B\83T\83|\81[\83g\92S\93\96\8eÒ\82É\96â\82¢\8d\87\82í\82¹\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1917">ODBC \83h\83\89\83C\83o [4] \82Ì\8dí\8f\9c\82Å\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½\81BODBC \83G\83\89\81[ [2]: [3]\81BODBC \83h\83\89\83C\83o\82ð\8dí\8f\9c\82·\82é\93Á\8c \82ð\8e\9d\82Á\82Ä\82¢\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1918">ODBC \83h\83\89\83C\83o [4] \82Ì\83C\83\93\83X\83g\81[\83\8b\82Å\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½\81BODBC \83G\83\89\81[ [2]: [3]\81B\83t\83@\83C\83\8b [4] \82ª\91¶\8dÝ\82µ\81A\83A\83N\83Z\83X\82Å\82«\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1919">ODBC \83f\81[\83^ \83\\81[\83X\82Ì\8d\\90¬\82Å\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½: [4]\81BODBC \83G\83\89\81[ [2]: [3]\81B\83t\83@\83C\83\8b [4] \82ª\91¶\8dÝ\82µ\81A\83A\83N\83Z\83X\82Å\82«\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1920">\83T\81[\83r\83X '[2]' ([3]) \82ð\8aJ\8en\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83V\83X\83e\83\80 \83T\81[\83r\83X\82ð\8aJ\8en\82·\82é\93Á\8c \82ð\8e\9d\82Á\82Ä\82¢\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1921">\83T\81[\83r\83X '[2]' ([3]) \82ð\92â\8e~\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83V\83X\83e\83\80 \83T\81[\83r\83X\82ð\92â\8e~\82·\82é\93Á\8c \82ð\8e\9d\82Á\82Ä\82¢\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1922">\83T\81[\83r\83X '[2]' ([3]) \82ð\8dí\8f\9c\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83V\83X\83e\83\80 \83T\81[\83r\83X\82ð\8dí\8f\9c\82·\82é\93Á\8c \82ð\8e\9d\82Á\82Ä\82¢\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1923">\83T\81[\83r\83X '[2]' ([3]) \82ð\83C\83\93\83X\83g\81[\83\8b\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\83V\83X\83e\83\80 \83T\81[\83r\83X\82ð\83C\83\93\83X\83g\81[\83\8b\82·\82é\93Á\8c \82ð\8e\9d\82Á\82Ä\82¢\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1924">\8aÂ\8b«\95Ï\90\94 '[2]' \82ð\8dX\90V\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B\8aÂ\8b«\95Ï\90\94\82ð\8fC\90³\82·\82é\93Á\8c \82ð\8e\9d\82Á\82Ä\82¢\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1925">\93Á\8c \82ª\95s\8f\\95ª\82È\82½\82ß\81A\82±\82Ì\83R\83\93\83s\83\85\81[\83^\82Ì\82·\82×\82Ä\82Ì\83\86\81[\83U\81[\82ª\8eg\97p\82Å\82«\82é\82æ\82¤\82É\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\83C\83\93\83X\83g\81[\83\8b\82·\82é\82±\82Æ\82Í\82Å\82«\82Ü\82¹\82ñ\81BAdministrator \82Æ\82µ\82Ä\83\8d\83O\83I\83\93\82µ\81A\8dÄ\93x\83C\83\93\83X\83g\81[\83\8b\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1926">\83t\83@\83C\83\8b '[3]' \82É\91Î\82·\82é\83Z\83L\83\85\83\8a\83e\83B\82ð\90Ý\92è\82Å\82«\82Ü\82¹\82ñ\81B\83G\83\89\81[ : [2]\81B \82±\82Ì\83t\83@\83C\83\8b\82É\91Î\82µ\82Ä\83Z\83L\83\85\83\8a\83e\83B\82ð\95Ï\8dX\82·\82é\8c \8cÀ\82ð\8e\9d\82Á\82Ä\82¢\82é\82©\82Ç\82¤\82©\8am\94F\82µ\82Ä\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1927">\83R\83\93\83|\81[\83l\83\93\83g \83T\81[\83r\83X (COM+ 1.0) \82Í\81A\82±\82Ì\83R\83\93\83s\83\85\81[\83^\82É\90³\82µ\82\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ\81B\83C\83\93\83X\83g\81[\83\8b\82ð\8a®\97¹\82·\82é\82É\82Í \83R\83\93\83|\81[\83l\83\93\83g \83T\81[\83r\83X\82ª\95K\97v\82Å\82·\81B\83R\83\93\83|\81[\83l\83\93\83g \83T\81[\83r\83X\82Í\81AWindows 2000 \82Å\97\98\97p\82Å\82«\82Ü\82·\81B</Error>
+
+<Error Id="1928">COM+ \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\93o\98^\83G\83\89\81[\82Å\82·\81B\8fÚ\82µ\82\82Í\83T\83|\81[\83g\92S\93\96\8eÒ\82Ö\82¨\96â\82¢\8d\87\82í\82¹\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1929">COM+ \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\93o\98^\89ð\8f\9c\82Ì\83G\83\89\81[\82Å\82·\81B\8fÚ\82µ\82\82Í\83T\83|\81[\83g\92S\93\96\8eÒ\82Ö\82¨\96â\82¢\8d\87\82í\82¹\82\82¾\82³\82¢\81B</Error>
+
+<Error Id="1930">\83T\81[\83r\83X '[2]' ([3]) \82Ì\8bL\8fq\82Í\95Ï\8dX\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B</Error>
+
+<Error Id="1931">Windows \83C\83\93\83X\83g\81[\83\89 \83T\81[\83r\83X\82Í\81A\83V\83X\83e\83\80 \83t\83@\83C\83\8b [2] \82ð\83A\83b\83v\83f\81[\83g\82Å\82«\82Ü\82¹\82ñ\81B\82±\82Ì\83t\83@\83C\83\8b\82Í Windows \82É\82æ\82Á\82Ä\95Û\8cì\82³\82ê\82Ä\82¢\82Ü\82·\81B\82±\82Ì\83v\83\8d\83O\83\89\83\80\82ð\90³\82µ\82\93®\8dì\82³\82¹\82é\82É\82Í\81A\83I\83y\83\8c\81[\83e\83B\83\93\83O \83V\83X\83e\83\80\82ð\83A\83b\83v\83f\81[\83g\82·\82é\95K\97v\82ª\82 \82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B {{\83p\83b\83P\81[\83W \83o\81[\83W\83\87\83\93 : [3], OS \83v\83\8d\83e\83N\83e\83b\83h \83o\81[\83W\83\87\83\93 : [4]}}</Error>
+
+<Error Id="1932">Windows \83C\83\93\83X\83g\81[\83\89 \83T\81[\83r\83X\82Å\82Í\81A\95Û\8cì\82³\82ê\82½ Windows \83t\83@\83C\83\8b [2] \82ð\83A\83b\83v\83f\81[\83g\82·\82é\82±\82Æ\82Í\82Å\82«\82Ü\82¹\82ñ\81B {{\83p\83b\83P\81[\83W \83o\81[\83W\83\87\83\93 : [3], OS \83v\83\8d\83e\83N\83e\83b\83h \83o\81[\83W\83\87\83\93 1 : [4], SFP \83G\83\89\81[ : [5]}}"</Error>
+
+<Error Id="1933">\95Û\8cì\82³\82ê\82½ Windows \83t\83@\83C\83\8b\82ð\8dX\90V\82Å\82«\82Ü\82¹\82ñ\81B {{SFP \83G\83\89\81[: [2]. \95Û\8cì\82³\82ê\82½\83t\83@\83C\83\8b\82Ì\88ê\97\97:\r\n[3]}}</Error>
+
+<Error Id="1934">\82±\82Ì\83R\83\93\83s\83\85\81[\83^\82Å\82Í\81A\83\86\81[\83U\81[\82É\82æ\82é\83C\83\93\83X\83g\81[\83\8b\82Í\83|\83\8a\83V\81[\82Å\96³\8cø\82É\82È\82Á\82Ä\82¢\82Ü\82·\81B</Error>
+
+<Error Id="1935">\83A\83Z\83\93\83u\83\8a \83R\83\93\83|\81[\83l\83\93\83g [2] \82Ì\83C\83\93\83X\83g\81[\83\8b\92\86\82É\83G\83\89\81[\82ª\94\90¶\82µ\82Ü\82µ\82½\81B HRESULT: [3]. {{\83A\83Z\83\93\83u\83\8a \83C\83\93\83^\81[\83t\83F\83C\83X: [4], \8aÖ\90\94: [5], \83A\83Z\83\93\83u\83\8a\96¼: [6]}}</Error>
+
+</Include>
--- /dev/null
+<Include>
+
+<ProgressText Action="Advertise" Template="">óÀ½ »ç¿ë ½Ã ¼³Ä¡ÇÒ ÀÀ¿ë ÇÁ·Î±×·¥</ProgressText>
+
+<ProgressText Action="AllocateRegistrySpace" Template="³²Àº °ø°£: [1]">·¹Áö½ºÆ®¸® °ø°£ ÇÒ´ç Áß</ProgressText>
+
+<ProgressText Action="AppSearch" Template="¼Ó¼º: [1], ¼¸í: [2]">¼³Ä¡ÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ È®ÀÎ Áß</ProgressText>
+
+<ProgressText Action="BindImage" Template="ÆÄÀÏ: [1]">½ÇÇà ÆÄÀÏÀ» ¹ÙÀεùÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="CCPSearch" Template="">Á¦Ç°À» È®ÀÎÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="CostFinalize" Template="">ÇÊ¿äÇÑ °ø°£À» È®ÀÎÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="CostInitialize" Template="">ÇÊ¿äÇÑ °ø°£À» È®ÀÎÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="CreateFolders" Template="Æú´õ: [1]">Æú´õ ¸¸µå´Â Áß</ProgressText>
+
+<ProgressText Action="CreateShortcuts" Template="¹Ù·Î °¡±â: [1]">¹Ù·Î °¡±â ¸¸µå´Â Áß</ProgressText>
+
+<ProgressText Action="DeleteServices" Template="¼ºñ½º: [1]">¼ºñ½º »èÁ¦ Áß</ProgressText>
+
+<ProgressText Action="DuplicateFiles" Template="ÆÄÀÏ: [1], µð·ºÅ͸®: [9], Å©±â: [6]">Áߺ¹ ÆÄÀÏÀ» ¸¸µå´Â Áß</ProgressText>
+
+<ProgressText Action="FileCost" Template="">ÇÊ¿äÇÑ °ø°£À» È®ÀÎÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="FindRelatedProducts" Template="´ÙÀ½ ÀÀ¿ë ÇÁ·Î±×·¥À» ã¾Ò½À´Ï´Ù: [1]">°ü·Ã ÀÀ¿ë ÇÁ·Î±×·¥À» °Ë»öÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="GenerateScript" Template="[1]">¼öÇàÇÒ ½ºÅ©¸³Æ® ÀÛ¾÷À» »ý¼ºÇÏ´Â Áß:</ProgressText>
+
+<ProgressText Action="InstallAdminPackage" Template="ÆÄÀÏ: [1], µð·ºÅ͸®: [9], Å©±â: [6]">³×Æ®¿öÅ© ¼³Ä¡ ÆÄÀÏÀ» º¹»çÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="InstallFiles" Template="ÆÄÀÏ: [1], µð·ºÅ͸®: [9], Å©±â: [6]">»õ ÆÄÀÏÀ» º¹»çÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="InstallODBC" Template="">ODBC ±¸¼º ¿ä¼Ò ¼³Ä¡ Áß</ProgressText>
+
+<ProgressText Action="InstallServices" Template="¼ºñ½º: [2]">»õ ¼ºñ½º ¼³Ä¡ Áß</ProgressText>
+
+<ProgressText Action="InstallSFPCatalogFile" Template="ÆÄÀÏ: [1], Á¾¼Ó¼º: [2]">½Ã½ºÅÛ Ä«Å»·Î±× ¼³Ä¡ Áß</ProgressText>
+
+<ProgressText Action="InstallValidate" Template="">¼³Ä¡¸¦ À¯È¿ÈÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="LaunchConditions" Template="">½ÇÇà Á¶°Ç È®ÀÎ Áß</ProgressText>
+
+<ProgressText Action="MigrateFeatureStates" Template="ÀÀ¿ë ÇÁ·Î±×·¥: [1]">°ü·Ã ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ ±â´ÉÀ» À̵¿ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="MoveFiles" Template="ÆÄÀÏ: [1], µð·ºÅ͸®: [9], Å©±â: [6]">ÆÄÀÏÀ» ¿Å±â´Â Áß</ProgressText>
+
+<ProgressText Action="MsiPublishAssemblies" Template="ÀÀ¿ë ÇÁ·Î±×·¥ ÄÁÅØ½ºÆ®:[1], ¾î¼Àºí¸® À̸§:[2]">¾î¼Àºí¸® Á¤º¸¸¦ °Ô½ÃÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="MsiUnpublishAssemblies" Template="ÀÀ¿ë ÇÁ·Î±×·¥ ÄÁÅØ½ºÆ®:[1], ¾î¼Àºí¸® À̸§:[2]">¾î¼Àºí¸® Á¤º¸¸¦ °Ô½Ã Ãë¼ÒÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="PatchFiles" Template="ÆÄÀÏ: [1], µð·ºÅ͸®: [2], Å©±â: [3]">ÆÄÀÏ ÆÐÄ¡ Áß</ProgressText>
+
+<ProgressText Action="ProcessComponents" Template="">±¸¼º ¿ä¼Ò µî·ÏÀ» ¾÷µ¥ÀÌÆ®ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="PublishComponents" Template="±¸¼º ¿ä¼Ò ID: [1], Á¦ÇÑÀÚ: [2]">ÇØ´ç ±¸¼º ¿ä¼Ò¸¦ °Ô½ÃÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="PublishFeatures" Template="±â´É: [1]">Á¦Ç° ±â´ÉÀ» °Ô½ÃÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="PublishProduct" Template="">Á¦Ç° Á¤º¸¸¦ °Ô½ÃÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">Class ¼¹ö¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">COM+ ÀÀ¿ë ÇÁ·Î±×·¥°ú ±¸¼º ¿ä¼Ò¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RegisterExtensionInfo" Template="ÀͽºÅÙ¼Ç: [1]">ÀͽºÅÙ¼Ç ¼¹ö¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RegisterFonts" Template="±Û²Ã: [1]">±Û²ÃÀ» µî·ÏÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RegisterMIMEInfo" Template="MIME ÄÁÅÙÆ® À¯Çü: [1], ÀͽºÅÙ¼Ç: [2]">MIME Á¤º¸¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RegisterProduct" Template="[1]">Á¦Ç°À» µî·ÏÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">ÇÁ·Î±×·¥ È®ÀÎÀÚ¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">Çü½Ä ¶óÀ̺귯¸®¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RegisterUser" Template="[1]">»ç¿ëÀÚ¸¦ µî·ÏÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RemoveDuplicateFiles" Template="ÆÄÀÏ: [1], µð·ºÅ͸®: [9]">Áߺ¹ ÆÄÀÏÀ» Á¦°ÅÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RemoveEnvironmentStrings" Template="À̸§: [1], °ª: [2], ¼öÇà [3]">ȯ°æ ¹®ÀÚ¿À» ¾÷µ¥ÀÌÆ®ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RemoveExistingProducts" Template="ÀÀ¿ë ÇÁ·Î±×·¥: [1], ¸í·ÉÁÙ: [2]">ÀÀ¿ë ÇÁ·Î±×·¥À» Á¦°ÅÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RemoveFiles" Template="ÆÄÀÏ: [1], µð·ºÅ͸®: [9]">ÆÄÀÏÀ» Á¦°ÅÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RemoveFolders" Template="Æú´õ: [1]">Æú´õ¸¦ Á¦°ÅÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RemoveIniValues" Template="Ű: [1], ¼½¼Ç: [2], Ű: [3], °ª: [4]">INI ÆÄÀÏ Ç׸ñÀ» Á¦°ÅÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RemoveODBC" Template="">ODBC ±¸¼º ¿ä¼Ò Á¦°ÅÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RemoveRegistryValues" Template="Ű: [1], À̸§: [2]">½Ã½ºÅÛ ·¹Áö½ºÆ®¸® °ªÀ» Á¦°ÅÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RemoveShortcuts" Template="¹Ù·Î °¡±â: [1]">¹Ù·Î °¡±â¸¦ Á¦°ÅÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="RMCCPSearch" Template="">Á¦Ç°À» È®ÀÎÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="Rollback" Template="[1]">·Ñ¹éÀ» ¼öÇàÇÏ´Â Áß:</ProgressText>
+
+<ProgressText Action="RollbackCleanup" Template="ÆÄÀÏ: [1]">¹é¾÷ ÆÄÀÏÀ» Á¦°ÅÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="SelfRegModules" Template="ÆÄÀÏ: [1], Æú´õ: [2]">¸ðµâÀ» µî·ÏÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="SelfUnregModules" Template="ÆÄÀÏ: [1], Æú´õ: [2]">¸ðµâ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="SetODBCFolders" Template="">ODBC µð·ºÅ͸®¸¦ ÃʱâÈÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="StartServices" Template="¼ºñ½º: [1]">¼ºñ½º¸¦ ½ÃÀÛÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="StopServices" Template="¼ºñ½º: [1]">¼ºñ½º¸¦ ÁßÁöÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="UnmoveFiles" Template="ÆÄÀÏ: [1], µð·ºÅ͸®: [9]">À̵¿ÇÑ ÆÄÀÏÀ» Á¦°ÅÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="UnpublishComponents" Template="±¸¼º ¿ä¼Ò ID: [1], Á¦ÇÑÀÚ: [2]">ÇØ´ç ±¸¼º ¿ä¼ÒÀÇ °Ô½Ã¸¦ ÇØÁ¦ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="UnpublishFeatures" Template="±â´É: [1]">Á¦Ç° ±â´ÉÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="UnpublishProduct" Template="">Á¦Ç° Á¤º¸ÀÇ °Ô½Ã¸¦ ÇØÁ¦ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Class ¼¹öÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">COM+ ÀÀ¿ë ÇÁ·Î±×·¥°ú ±¸¼º ¿ä¼ÒÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="UnregisterExtensionInfo" Template="ÀͽºÅÙ¼Ç: [1]">extension ¼¹öÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="UnregisterFonts" Template="±Û²Ã: [1]">±Û²Ã µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="UnregisterMIMEInfo" Template="MIME ÄÁÅÙÆ® À¯Çü: [1], ÀͽºÅÙ¼Ç: [2]">MIME Á¤º¸ÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">ÇÁ·Î±×·¥ È®ÀÎÀÚÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">Çü½Ä ¶óÀ̺귯¸®ÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="WriteEnvironmentStrings" Template="À̸§: [1], °ª: [2], ¼öÇà [3]">ȯ°æ ¹®ÀÚ¿À» ¾÷µ¥ÀÌÆ®ÇÏ´Â Áß</ProgressText>
+
+<ProgressText Action="WriteIniValues" Template="Ű: [1], ¼½¼Ç: [2], Ű: [3], °ª: [4]">INI ÆÄÀÏ °ªÀ» ¾²´Â Áß</ProgressText>
+
+<ProgressText Action="WriteRegistryValues" Template="Ű: [1], À̸§: [2], °ª: [3]">½Ã½ºÅÛ ·¹Áö½ºÆ®¸® °ªÀ» ¾²´Â Áß</ProgressText>
+
+</Include>
--- /dev/null
+<Include>
+
+<Error Id="0">{{½É°¢ÇÑ ¿À·ù: }}</Error>
+
+<Error Id="1">{{¿À·ù [1]. }}</Error>
+
+<Error Id="2">°æ°í [1]. </Error>
+
+<Error Id="3"></Error>
+
+<Error Id="4">Info [1]. </Error>
+
+<Error Id="5">ÀÌ ÆÐŰÁö¸¦ ¼³Ä¡ÇÏ´Â µ¿¾È ¿¹»óÄ¡ ¾ÊÀº ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. À̰ÍÀº ÀÌ ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖÀ½À» ³ªÅ¸³À´Ï´Ù. ¿À·ù ÄÚµå : [1]. {{Àμö : [2], [3], [4]}}</Error>
+
+<Error Id="6"></Error>
+
+<Error Id="7">{{µð½ºÅ© ²Ë Âü: }}</Error>
+
+<Error Id="8">¼öÇà [Time]: [1]. [2]</Error>
+
+<Error Id="9">[ProductName]</Error>
+
+<Error Id="10">{[2]}{, [3]}{, [4]}</Error>
+
+<Error Id="11">¸Þ½ÃÁö À¯Çü: [1], Àμö: [2]</Error>
+
+<Error Id="12">=== ±â·Ï ½ÃÀÛ: [Date] [Time] ===</Error>
+
+<Error Id="13">=== ±â·Ï ½ÃÀÛ: [Date] [Time] ===</Error>
+
+<Error Id="14">¼öÇà ½ÃÀÛ [Time]: [1].</Error>
+
+<Error Id="15">¼öÇà ³¡ [Time]: [1]. ¸®ÅÏ °ª [2].</Error>
+
+<Error Id="16">³²Àº ½Ã°£: {[1] ºÐ }{[2] ÃÊ}</Error>
+
+<Error Id="17">¸Þ¸ð¸®°¡ ºÎÁ·ÇÕ´Ï´Ù. ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥À» Á¾·áÇÑ ÈÄ ´Ù½Ã ½ÃµµÇϽʽÿÀ.</Error>
+
+<Error Id="18">Windows Installer°¡ ´õ ÀÌ»ó ÀÀ´äÇÏÁö ¾Ê½À´Ï´Ù.</Error>
+
+<Error Id="19">Windows Installer°¡ ¿ÏÀüÈ÷ ÁßÁöµÇ¾ú½À´Ï´Ù.</Error>
+
+<Error Id="20">[ProductName]À»(¸¦) ±¸¼ºÇϰí ÀÖ½À´Ï´Ù. ±â´Ù¸®½Ê½Ã¿À.</Error>
+
+<Error Id="21">ÇÊ¿äÇÑ Á¤º¸¸¦ ¸ðÀ¸´Â Áß...</Error>
+
+<Error Id="22">ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÀÌÀü ¹öÀüÀ» Á¦°ÅÇÏ´Â Áß...</Error>
+
+<Error Id="23">ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÀÌÀü ¹öÀüÀ» Á¦°ÅÇϱâ À§ÇØ ÁغñÇÏ´Â Áß...</Error>
+
+<Error Id="32">{[ProductName] }¼³Ä¡°¡ ¼º°øÀûÀ¸·Î ¿Ï·áµÇ¾ú½À´Ï´Ù.</Error>
+
+<Error Id="33">{[ProductName] }¼³Ä¡¸¦ ½ÇÆÐÇß½À´Ï´Ù.</Error>
+
+<Error Id="1101">ÆÄÀÏ Àб⠿À·ù: [2]. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏ¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1301">'[2]' ÆÄÀÏÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù. ÀÌ À̸§À» °¡Áø µð·ºÅ͸®°¡ ÀÌ¹Ì ÀÖ½À´Ï´Ù. ¼³Ä¡¸¦ Ãë¼ÒÇÏ°í ´Ù¸¥ À§Ä¡¿¡ ´Ù½Ã ¼³Ä¡ÇØ º¸½Ê½Ã¿À.</Error>
+
+<Error Id="1302">´ÙÀ½ µð½ºÅ©¸¦ ³ÖÀ¸½Ê½Ã¿À: [2]</Error>
+
+<Error Id="1303">ÀÌ µð·ºÅ͸®¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù:[2]. ¼³Ä¡¸¦ °è¼ÓÇÒ ¼ö ¾ø½À´Ï´Ù. °ü¸®ÀÚ ±ÇÇÑÀ¸·Î ·Î±×¿ÂÇϰųª ½Ã½ºÅÛ °ü¸®ÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1304">ÆÄÀÏ ¾²±â ¿À·ù: [2]. ±× µð·ºÅ͸®¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1305">[2] ÆÄÀÏÀ» Àдٰ¡ ¿À·ù°¡ »ý°å½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏ¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1306">'[2]' ÆÄÀÏÀ» ´Üµ¶À¸·Î ¾×¼¼½ºÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀ» ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ °®°í ÀÖ½À´Ï´Ù. ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥À» ¸ðµÎ ´ÝÀº ÈÄ "´Ù½Ã ½Ãµµ"¸¦ ´·¯ ´Ù½Ã ½ÃµµÇϽʽÿÀ.</Error>
+
+<Error Id="1307">´ÙÀ½ ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ÀÖ´Â µð½ºÅ© °ø°£ÀÌ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù: [2]. µð½ºÅ© °ø°£À» ´Ã¸° ÈÄ "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°Å³ª "Ãë¼Ò"¸¦ ´·¯¼ ³¡³»½Ê½Ã¿À.</Error>
+
+<Error Id="1308">¿øº» ÆÄÀÏÀÌ ¾ø½À´Ï´Ù: [2]. ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏ¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1309">ÆÄÀÏ Àб⠿À·ù: [3]. {{ ½Ã½ºÅÛ ¿À·ù [2].}} ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏ¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1310">ÆÄÀÏ ¾²±â ¿À·ù: [3]. {{ ½Ã½ºÅÛ ¿À·ù [2].}} ±× µð·ºÅ͸®¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1311">¿øº» ÆÄÀÏÀÌ ¾ø½À´Ï´Ù{{(cabinet)}}: [2]. ±× ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏ¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1312">'[2]' µð·ºÅ͸®¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù. ÀÌ À̸§À» °¡Áø ÆÄÀÏÀÌ ÀÌ¹Ì ÀÖ½À´Ï´Ù. ±× ÆÄÀÏ À̸§À» ´Ù¸¥ °ÍÀ¸·Î ¹Ù²Ù°Å³ª Á¦°ÅÇÑ ÈÄ "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°Å³ª "Ãë¼Ò"¸¦ ´·¯ ³¡³»½Ê½Ã¿À.</Error>
+
+<Error Id="1313">º¼·ý [2]À»(¸¦) ÇöÀç »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ´Ù¸¥ º¼·ýÀ» ¼±ÅÃÇϽʽÿÀ.</Error>
+
+<Error Id="1314">ÁöÁ¤ÇÑ °æ·Î '[2]'À»(¸¦) »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.</Error>
+
+<Error Id="1315">ÁöÁ¤ÇÑ Æú´õ¿¡ ¾µ ¼ö ¾ø½À´Ï´Ù: [2].</Error>
+
+<Error Id="1316">ÆÄÀÏÀ» ÀÐÀ» ¶§ ³×Æ®¿öÅ© ¿À·ù°¡ »ý°å½À´Ï´Ù: [2]</Error>
+
+<Error Id="1317">µð·ºÅ͸®¸¦ ¸¸µé ¶§ ¿À·ù°¡ »ý°å½À´Ï´Ù: [2]</Error>
+
+<Error Id="1318">µð·ºÅ͸®¸¦ ¸¸µé ¶§ ³×Æ®¿öÅ© ¿À·ù°¡ »ý°å½À´Ï´Ù: [2]</Error>
+
+<Error Id="1319">¿øº» ÆÄÀÏ Ä³ºñ³ÝÀ» ¿ ¶§ ³×Æ®¿öÅ© ¿À·ù°¡ »ý°å½À´Ï´Ù: [2]</Error>
+
+<Error Id="1320">ÁöÁ¤ÇÑ °æ·Î°¡ ³Ê¹« ±é´Ï´Ù: [2]</Error>
+
+<Error Id="1321">ÀÌ ÆÄÀÏÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù: [2].</Error>
+
+<Error Id="1322">Æú´õ °æ·Î '[2]'ÀÌ(°¡) À߸ø µÇ¾ú½À´Ï´Ù. °æ·Î·Î ÁöÁ¤ÇÑ ¹®ÀÚ°¡ ¾ø°Å³ª °æ·Î°¡ ³Ê¹« ±é´Ï´Ù.</Error>
+
+<Error Id="1323">Æú´õ °æ·Î '[2]'¿¡ Æú´õ °æ·Î·Î »ç¿ëÇÒ ¼ö ¾ø´Â ±ÛÀÚ°¡ µé¾î ÀÖ½À´Ï´Ù.</Error>
+
+<Error Id="1324">Æú´õ °æ·Î '[2]'¿¡ »ç¿ëÇÒ ¼ö ¾ø´Â ±ÛÀÚ°¡ µé¾î ÀÖ½À´Ï´Ù.</Error>
+
+<Error Id="1325">'[2]'Àº(´Â) ÆÄÀÏ À̸§À¸·Î À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù.</Error>
+
+<Error Id="1326">ÆÄÀÏ º¸¾È ¿À·ù: [3] GetLastError: [2]</Error>
+
+<Error Id="1327">»ç¿ëÇÒ ¼ö ¾ø´Â µå¶óÀ̺ê: [2]</Error>
+
+<Error Id="1328">ÆÄÀÏ [2]¿¡ ÆÐÄ¡¸¦ Àû¿ëÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù. ´Ù¸¥ ¹æ¹ýÀ¸·Î ¾÷µ¥ÀÌÆ®µÇ¾ú±â ¶§¹®¿¡ ÀÌ ÆÐÄ¡¸¦ »ç¿ëÇØ¼ ¼öÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº ÆÐÄ¡¸¦ ±¸ÀÔÇÑ ´ë¸®Á¡¿¡ ¹®ÀÇÇϽʽÿÀ. {{½Ã½ºÅÛ ¿À·ù: [3]}}</Error>
+
+<Error Id="1329">ijºñ³Ý ÆÄÀÏ [2]ÀÌ(°¡) µðÁöÅÐ ¼¸íµÇÁö ¾Ê¾Ò±â ¶§¹®¿¡, ÇÊ¿äÇÑ ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº ijºñ³Ý ÆÄÀÏÀÌ ¼Õ»óµÇ¾úÀ½À» ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.</Error>
+
+<Error Id="1330">ijºñ³Ý ÆÄÀÏ [2]ÀÌ(°¡) ¿Ã¹Ù¸£Áö ¾ÊÀº µðÁöÅÐ ¼¸íÀ» °¡Áö°í Àֱ⠶§¹®¿¡, ÇÊ¿äÇÑ ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº ijºñ³Ý ÆÄÀÏÀÌ ¼Õ»óµÇ¾úÀ½À» ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.{{ WinVerifyTrust¿¡¼ ¿À·ù [3]À»(¸¦) ¹ÝȯÇß½À´Ï´Ù.}}</Error>
+
+<Error Id="1331">[2] ÆÄÀÏÀ» ¿Ã¹Ù¸£°Ô º¹»çÇÏÁö ¸øÇß½À´Ï´Ù: CRC ¿À·ùÀÔ´Ï´Ù.</Error>
+
+<Error Id="1332">[2] ÆÄÀÏÀ» ¿Ã¹Ù¸£°Ô À̵¿ÇÏÁö ¸øÇß½À´Ï´Ù: CRC ¿À·ùÀÔ´Ï´Ù.</Error>
+
+<Error Id="1333">[2] ÆÄÀÏÀ» ¿Ã¹Ù¸£°Ô ÆÐÄ¡ÇÏÁö ¸øÇß½À´Ï´Ù: CRC ¿À·ùÀÔ´Ï´Ù.</Error>
+
+<Error Id="1334">ÆÄÀÏÀ» ijºñ³Ý ÆÄÀÏ '[3]'¿¡¼ ãÀ» ¼ö ¾ø±â ¶§¹®¿¡, '[2]' ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº ³×Æ®¿öÅ© ¿À·ù, CD-ROMÀ¸·ÎºÎÅÍÀÇ Àб⠿À·ù, ¶Ç´Â ÀÌ ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖÀ½À» ³ªÅ¸³À´Ï´Ù.</Error>
+
+<Error Id="1335">¼³Ä¡¿¡ ÇÊ¿äÇÑ Ä³ºñ³Ý ÆÄÀÏ '[2]'ÀÌ(°¡) ¼Õ»óµÇ¾î »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº ³×Æ®¿öÅ© ¿À·ù, CD-ROMÀ¸·ÎºÎÅÍÀÇ Àб⠿À·ù, ¶Ç´Â ÀÌ ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖÀ½À» ³ªÅ¸³À´Ï´Ù.</Error>
+
+<Error Id="1336">¼³Ä¡¸¦ ¿Ï·áÇϴµ¥ ÇÊ¿äÇÑ Àӽà ÆÄÀÏÀ» ¸¸µå´Âµ¥ ¿À·ù°¡ ÀÖ¾ú½À´Ï´Ù.{{ Æú´õ: [3]. ½Ã½ºÅÛ ¿À·ù ÄÚµå: [2]}}</Error>
+
+<Error Id="1401">۸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù: [2]. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. </Error>
+
+<Error Id="1402">۸¦ ¿ ¼ö ¾ø½À´Ï´Ù: [2]. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. </Error>
+
+<Error Id="1403">Ű [3]¿¡¼ °ª [2]À»(¸¦) »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [4].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. </Error>
+
+<Error Id="1404">Ű [2]À»(¸¦) »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. </Error>
+
+<Error Id="1405">Ű [3]¿¡¼ °ª [2]À»(¸¦) ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [4].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. </Error>
+
+<Error Id="1406">Ű [3]¿¡ °ª [2]À»(¸¦) ¾µ ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [4].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÃæºÐÇÑÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1407">Ű [2]ÀÇ °ª À̸§À» ±¸ÇÒ ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1408">Ű [2]ÀÇ ÇÏÀ§ Ű À̸§À» ±¸ÇÒ ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1409">Ű [2]ÀÇ º¸¾È Á¤º¸¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. {{ ½Ã½ºÅÛ ¿À·ù [3].}} ±× Ű¿¡ ´ëÇÑ ¾×¼¼½º ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϰųª, ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1410">»ç¿ë °¡´ÉÇÑ ·¹Áö½ºÆ®¸® °ø°£À» ´Ã¸± ¼ö ¾ø½À´Ï´Ù. ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥À» ¼³Ä¡Çϴµ¥ [2]KBÀÇ ·¹Áö½ºÆ®¸® °ø°£ÀÌ ÇÊ¿äÇÕ´Ï´Ù.</Error>
+
+<Error Id="1500">´Ù¸¥ ¼³Ä¡ ÇÁ·Î±×·¥ÀÌ ½ÇÇà ÁßÀÔ´Ï´Ù. ±× ÇÁ·Î±×·¥ÀÇ ¼³Ä¡¸¦ ³¡³½ ÈÄ, ÀÌ ÀÛ¾÷À» °è¼ÓÇϽʽÿÀ.</Error>
+
+<Error Id="1501">º¸¾È µ¥ÀÌÅÍ¿¡ ¾×¼¼½ºÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù. Windows Installer¸¦ ¿Ã¹Ù¸£°Ô ±¸¼ºÇß´ÂÁö È®ÀÎÇÑ ÈÄ ´Ù½Ã ¼³Ä¡ÇϽʽÿÀ.</Error>
+
+<Error Id="1502">»ç¿ëÀÚ '[2]'ÀÌ(°¡) Á¦Ç° '[3]'ÀÇ ¼³Ä¡¸¦ ÀÌÀü¿¡ ÃʱâÈÇÑ ÀûÀÌ ÀÖ½À´Ï´Ù. ±× »ç¿ëÀÚ°¡ ¼³Ä¡ ÇÁ·Î±×·¥À» ´Ù½Ã ½ÇÇàÇØ¾ß ±× Á¦Ç°À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Áö±Ý ½ÇÇàÇÏ´Â ¼³Ä¡ ÀÛ¾÷Àº °è¼ÓµË´Ï´Ù.</Error>
+
+<Error Id="1503">»ç¿ëÀÚ '[2]'ÀÌ(°¡) Á¦Ç° '[3]'ÀÇ ¼³Ä¡¸¦ ÀÌÀü¿¡ ÃʱâÈÇÑ ÀûÀÌ ÀÖ½À´Ï´Ù. ±× »ç¿ëÀÚ°¡ ¼³Ä¡ ÇÁ·Î±×·¥À» ´Ù½Ã ½ÇÇàÇØ¾ß ±× Á¦Ç°À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.</Error>
+
+<Error Id="1601">µð½ºÅ© °ø°£ ºÎÁ· - º¼·ý: '[2]'; ÇÊ¿äÇÑ °ø°£: [3]KB; »ç¿ëÇÒ ¼ö ÀÖ´Â °ø°£: [4]KB. µð½ºÅ© °ø°£À» ´Ã¸° ÈÄ ´Ù½Ã ½ÃµµÇϽʽÿÀ.</Error>
+
+<Error Id="1602">Ãë¼ÒÇϽðڽÀ´Ï±î?</Error>
+
+<Error Id="1603">ÆÄÀÏ [2][3]À»(¸¦) ´ÙÀ½ ÇÁ·Î¼¼½º¿¡¼ »ç¿ëÇϰí ÀÖ½À´Ï´Ù{ À̸§: [4], Id: [5], â Á¦¸ñ: '[6]'}. ±× ÀÀ¿ë ÇÁ·Î±×·¥À» ´ÝÀº ÈÄ ´Ù½Ã ½ÃµµÇϽʽÿÀ.</Error>
+
+<Error Id="1604">Á¦Ç° '[2]'ÀÌ(°¡) ÀÌ¹Ì ¼³Ä¡µÇ¾î ÀÖ¾î¼ ÀÌ Á¦Ç°À» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ µÎ Á¦Ç°Àº ȣȯµÇÁö ¾Ê½À´Ï´Ù.</Error>
+
+<Error Id="1605">º¹±¸¸¦ »ç¿ëÇÏ¿© ¼³Ä¡¸¦ °è¼ÓÇϱâ À§ÇÑ µð½ºÅ© °ø°£ÀÌ º¼·ý '[2]'¿¡ ºÎÁ·ÇÕ´Ï´Ù. [3]KB°¡ ÇÊ¿äÇϳª, [4]KB¸¸ »ç¿ë °¡´ÉÇÕ´Ï´Ù. º¹±¸ Á¤º¸¸¦ ÀúÀåÇÏÁö ¾Ê°í °è¼ÓÇÏ·Á¸é "¹«½Ã"¸¦ ´©¸£°í, »ç¿ë °¡´É °ø°£À» È®ÀÎÇÏ·Á¸é "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°í, ¼³Ä¡¸¦ Ãë¼ÒÇÏ·Á¸é "Ãë¼Ò"¸¦ ´©¸£½Ê½Ã¿À.</Error>
+
+<Error Id="1606">³×Æ®¿öÅ© À§Ä¡ [2]¿¡ ¾×¼¼½ºÇÒ ¼ö ¾ø½À´Ï´Ù.</Error>
+
+<Error Id="1607">´ÙÀ½ ÀÀ¿ë ÇÁ·Î±×·¥À» ´Ý¾Æ¾ß ¼³Ä¡¸¦ °è¼ÓÇÒ ¼ö ÀÖ½À´Ï´Ù:</Error>
+
+<Error Id="1608">ÀÌ Á¦Ç°À» ¼³Ä¡ÇÏ·Á´Â ½Ã½ºÅÛ¿¡ ÇØ´ç Á¦Ç°À» ÀÌÀü¿¡ ¼³Ä¡ÇÑ ÀûÀÌ ¾ø½À´Ï´Ù.</Error>
+
+<Error Id="1609">º¸¾È ¼³Á¤À» Àû¿ëÇÏ´Â µ¿¾È ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. [2]Àº(´Â) ¿Ã¹Ù¸¥ »ç¿ëÀÚ³ª ±×·ìÀÌ ¾Æ´Õ´Ï´Ù. À̰ÍÀº ÆÐŰÁöÀÇ ¹®Á¦À̰ųª, ³×Æ®¿öÅ©ÀÇ µµ¸ÞÀÎ ÄÁÆ®·Ñ·¯¿¡ ¿¬°áÇÏ´Â ¹®Á¦ÀÏ ¼ö ÀÖ½À´Ï´Ù. ³×Æ®¿öÅ© ¿¬°áÀ» È®ÀÎÇϰí "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°Å³ª, ¼³Ä¡¸¦ ¸¶Ä¡·Á¸é "Ãë¼Ò"¸¦ ´©¸£½Ê½Ã¿À. {{»ç¿ëÀÚÀÇ SID¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù. ½Ã½ºÅÛ ¿À·ù [3]}}</Error>
+
+<Error Id="1701">Ű [2]ÀÌ(°¡) À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù. Á¤È®ÇÑ Å°¸¦ ÀÔ·ÂÇß´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1702">½Ã½ºÅÛÀ» ´Ù½Ã ½ÃÀÛÇÑ ÈÄ¿¡ [2]ÀÇ ±¸¼ºÀ» ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù. Áö±Ý ´Ù½Ã ½ÃÀÛÇÏ·Á¸é "¿¹"¸¦ ´©¸£°í, ³ªÁß¿¡ ¼öµ¿À¸·Î ´Ù½Ã ½ÃÀÛÇÏ·Á¸é "¾Æ´Ï¿À"¸¦ ´©¸£½Ê½Ã¿À.</Error>
+
+<Error Id="1703">º¯°æµÈ ±¸¼º ¼³Á¤À» [2]¿¡ Àû¿ëÇÏ·Á¸é ½Ã½ºÅÛÀ» ´Ù½Ã ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù. Áö±Ý ´Ù½Ã ½ÃÀÛÇÏ·Á¸é "¿¹"¸¦ ´©¸£°í, ³ªÁß¿¡ ¼öµ¿À¸·Î ´Ù½Ã ½ÃÀÛÇÏ·Á¸é "¾Æ´Ï¿À"¸¦ ´©¸£½Ê½Ã¿À.</Error>
+
+<Error Id="1704">[2]ÀÇ ¼³Ä¡°¡ ÇöÀç ÁßÁöµÈ »óÅÂÀÔ´Ï´Ù. °è¼ÓÇÏ·Á¸é ¼³Ä¡ÇÏ¸é¼ º¯°æµÈ »çÇ×À» Ãë¼ÒÇØ¾ß ÇÕ´Ï´Ù. º¯°æµÈ »çÇ×µéÀ» Ãë¼ÒÇϽðڽÀ´Ï±î?</Error>
+
+<Error Id="1705">ÀÌ Á¦Ç°ÀÇ ¼³Ä¡ ÀÛ¾÷ÀÌ ½ÇÇà ÁßÀÔ´Ï´Ù. °è¼ÓÇÏ·Á¸é Àü¿¡ ¼³Ä¡ÇÏ¸é¼ º¯°æµÈ »çÇ×À» ´Ù½Ã µÇµ¹·Á¾ß ÇÕ´Ï´Ù. º¯°æµÈ »çÇ×À» Ãë¼ÒÇϽðڽÀ´Ï±î?</Error>
+
+<Error Id="1706">Á¦Ç° [2]ÀÇ ¼³Ä¡ ÆÐŰÁö¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù. ¼³Ä¡ ÆÐŰÁö '[3]'ÀÇ »çº»À» »ç¿ëÇØ¼ ¼³Ä¡¸¦ ´Ù½Ã ½ÃµµÇϽʽÿÀ.</Error>
+
+<Error Id="1707">¼³Ä¡¸¦ ¼º°øÀûÀ¸·Î ¿Ï·áÇß½À´Ï´Ù.</Error>
+
+<Error Id="1708">¼³Ä¡¸¦ ½ÇÆÐÇß½À´Ï´Ù.</Error>
+
+<Error Id="1709">Á¦Ç°: [2] - [3]</Error>
+
+<Error Id="1710">ÄÄÇ»Å͸¦ ÀÌÀü »óÅ·ΠµÇµ¹¸®°Å³ª, ³ªÁß¿¡ ´Ù½Ã ¼³Ä¡ÇØ¾ß ÇÕ´Ï´Ù. ÀÌÀü »óÅ·ΠµÇµ¹¸®½Ã°Ú½À´Ï±î?</Error>
+
+<Error Id="1711">µð½ºÅ©¿¡ ¼³Ä¡ Á¤º¸¸¦ ¾²´Âµ¥ ¿À·ù°¡ »ý°å½À´Ï´Ù. µð½ºÅ© °ø°£ÀÌ ÃæºÐÇÑÁö È®ÀÎÇϰí "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°Å³ª, ¼³Ä¡¸¦ ³¡³»·Á¸é "Ãë¼Ò"¸¦ ´©¸£½Ê½Ã¿À.</Error>
+
+<Error Id="1712">»ç¿ëÀÚÀÇ ÄÄÇ»Å͸¦ ÀÌÀü »óÅ·ΠµÇµ¹¸®´Âµ¥ ÇÊ¿äÇÑ ÆÄÀÏ Áß ÀϺθ¦ ãÀ» ¼ö ¾ø½À´Ï´Ù. º¹±¸ÇÒ ¼ö ¾ø½À´Ï´Ù.</Error>
+
+<Error Id="1713">[2](ÀÌ)°¡ ÇÊ¿äÇÑ Á¦Ç° Áß Çϳª¸¦ ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. {{½Ã½ºÅÛ ¿À·ù: [3].}}</Error>
+
+<Error Id="1714">ÀÌÀü ¹öÀüÀÇ [2]À»(¸¦) Á¦°ÅÇÒ ¼ö ¾ø½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ. {{½Ã½ºÅÛ ¿À·ù [3].}}</Error>
+
+<Error Id="1715">¼³Ä¡µÊ [2]</Error>
+
+<Error Id="1716">±¸¼ºµÊ [2]</Error>
+
+<Error Id="1717">Á¦°ÅµÊ [2]</Error>
+
+<Error Id="1718">µðÁöÅÐ ¼¸í Á¤Ã¥ÀÌ [2] ÆÄÀÏÀ» °ÅºÎÇß½À´Ï´Ù.</Error>
+
+<Error Id="1719">Windows Installer ¼ºñ½º¸¦ ¾×¼¼½ºÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº Windows¸¦ ¾ÈÀü ¸ðµå¿¡¼ ½ÇÇà ÁßÀ̰ųª, Windows Installer°¡ ¿Ã¹Ù¸£°Ô ¼³Ä¡µÇÁö ¾Ê¾ÒÀ½À» ³ªÅ¸³À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô Áö¿øÀ» ¿äûÇϽʽÿÀ.</Error>
+
+<Error Id="1720">ÀÌ Windows Installer ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. ÀÌ ¼³Ä¡¸¦ ¿Ï·áÇϱâ À§ÇØ ÇÊ¿äÇÑ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ³ª ÆÐŰÁö °ø±Þ¾÷ü¿¡ ¹®ÀÇÇϽʽÿÀ. {{»ç¿ëÀÚ ÁöÁ¤ ÀÛ¾÷ [2] ½ºÅ©¸³Æ® ¿À·ù [3], [4]: [5] ÁÙ:[6], ¿:[7], [8] }}</Error>
+
+<Error Id="1721">ÀÌ Windows Installer ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. ÀÌ ¼³Ä¡¸¦ ¿Ï·áÇϱâ À§ÇØ ÇÊ¿äÇÑ ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ³ª ÆÐŰÁö °ø±Þ¾÷ü¿¡ ¹®ÀÇÇϽʽÿÀ. {{ÀÛ¾÷: [2], À§Ä¡: [3], ¸í·É: [4] }}</Error>
+
+<Error Id="1722">ÀÌ Windows Installer ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. ¼³Ä¡ ÇÁ·Î±×·¥ÀÇ ÀϺηΠ½ÇÇàµÇ´Â ÇÁ·Î±×·¥ÀÌ ¿¹»ó´ë·Î ¿Ï·áµÇÁö ¾Ê¾Ò½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ³ª ÆÐŰÁö °ø±Þ¾÷ü¿¡ ¹®ÀÇÇϽʽÿÀ. {{ÀÛ¾÷ [2], À§Ä¡: [3], ¸í·É: [4] }}</Error>
+
+<Error Id="1723">ÀÌ Windows Installer ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. ÀÌ ¼³Ä¡¸¦ ¿Ï·áÇϱâ À§ÇØ ÇÊ¿äÇÑ DLLÀ» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ³ª ÆÐŰÁö °ø±Þ¾÷ü¿¡ ¹®ÀÇÇϽʽÿÀ. {{ÀÛ¾÷ [2], Ç׸ñ: [3], ¶óÀ̺귯¸®: [4] }}</Error>
+
+<Error Id="1724">Á¦°Å¸¦ ¼º°øÀûÀ¸·Î ¿Ï·áÇß½À´Ï´Ù.</Error>
+
+<Error Id="1725">Á¦°ÅÇÏÁö ¸øÇß½À´Ï´Ù.</Error>
+
+<Error Id="1726">º¸±ÞÀ» ¼º°øÀûÀ¸·Î ¿Ï·áÇß½À´Ï´Ù.</Error>
+
+<Error Id="1727">º¸±ÞÇÏÁö ¸øÇß½À´Ï´Ù.</Error>
+
+<Error Id="1728">±¸¼ºÀ» ¼º°øÀûÀ¸·Î ¿Ï·áÇß½À´Ï´Ù.</Error>
+
+<Error Id="1729">±¸¼ºÇÏÁö ¸øÇß½À´Ï´Ù.</Error>
+
+<Error Id="1730">Administrator¸¸ÀÌ ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥À» Á¦°ÅÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÀÀ¿ë ÇÁ·Î±×·¥À» Á¦°ÅÇÏ·Á¸é, Administrator·Î ·Î±×¿ÂÇϰųª, ±â¼ú Áö¿ø ±×·ì¿¡ µµ¿òÀ» ¿äûÇϽʽÿÀ.</Error>
+
+<Error Id="1801">°æ·Î [2]ÀÌ(°¡) À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù. Á¤È®ÇÑ °æ·Î¸¦ ÁöÁ¤ÇϽʽÿÀ.</Error>
+
+<Error Id="1802">¸Þ¸ð¸®°¡ ºÎÁ·ÇÕ´Ï´Ù. ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥À» Á¾·áÇÑ ÈÄ ´Ù½Ã ½ÃµµÇϽʽÿÀ.</Error>
+
+<Error Id="1803">µå¶óÀ̺ê [2]¿¡ µð½ºÅ©°¡ ¾ø½À´Ï´Ù. µð½ºÅ©¸¦ ³ÖÀº ÈÄ "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°Å³ª, "Ãë¼Ò"¸¦ ´·¯¼ ÀÌÀü¿¡ ¼±ÅÃÇÑ º¼·ýÀ¸·Î ´Ù½Ã µ¹¾Æ°¡½Ê½Ã¿À.</Error>
+
+<Error Id="1804">µå¶óÀ̺ê [2]¿¡ µð½ºÅ©°¡ ¾ø½À´Ï´Ù. µð½ºÅ©¸¦ ³ÖÀº ÈÄ "´Ù½Ã ½Ãµµ"¸¦ ´©¸£°Å³ª, "Ãë¼Ò"¸¦ ´·¯¼ "ã¾Æº¸±â" ´ëÈ »óÀÚ·Î À̵¿ÇÑ ÈÄ ´Ù¸¥ º¼·ýÀ» ¼±ÅÃÇϽʽÿÀ.</Error>
+
+<Error Id="1805">Æú´õ [2]ÀÌ(°¡) Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ±âÁ¸¿¡ ÀÖ´ø Æú´õÀÇ °æ·Î¸¦ ÀÔ·ÂÇϽʽÿÀ.</Error>
+
+<Error Id="1806">ÀÌ Æú´õ¿¡ ´ëÇÑ Àб⠱ÇÇÑÀÌ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù.</Error>
+
+<Error Id="1807">¼³Ä¡ÇÒ ´ë»ó Æú´õ¸¦ ÁöÁ¤ÇÏÁö ¾Ê¾Ò½À´Ï´Ù.</Error>
+
+<Error Id="1901">´ÙÀ½ ¿øº» ¼³Ä¡ µ¥ÀÌÅͺ£À̽º¸¦ Àд Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù: [2].</Error>
+
+<Error Id="1902">´Ù½Ã ºÎÆÃ ÀÛ¾÷À» ¼³Á¤Çϰí ÀÖ½À´Ï´Ù: ÆÄÀÏ [2]ÀÇ À̸§À» [3](À¸)·Î ¹Ù²Ù°í ÀÖ½À´Ï´Ù. ÀÛ¾÷À» ¿Ï·áÇÏ·Á¸é ´Ù½Ã ºÎÆÃÇØ¾ß ÇÕ´Ï´Ù.</Error>
+
+<Error Id="1903">´Ù½Ã ºÎÆÃ ÀÛ¾÷À» ¼³Á¤Çϰí ÀÖ½À´Ï´Ù: ÆÄÀÏ [2]À»(¸¦) »èÁ¦Çϰí ÀÖ½À´Ï´Ù. ÀÛ¾÷À» ¿Ï·áÇÏ·Á¸é ´Ù½Ã ºÎÆÃÇØ¾ß ÇÕ´Ï´Ù.</Error>
+
+<Error Id="1904">¸ðµâ [2]À»(¸¦) µî·ÏÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù. HRESULT [3]. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1905">¸ðµâ [2]ÀÇ µî·ÏÀ» ÇØÁ¦Çϴµ¥ ½ÇÆÐÇß½À´Ï´Ù. HRESULT [3]. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1906">ÆÐŰÁö [2]À»(¸¦) ij½ÃÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù. ¿À·ù: [3]. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1907">[2] ±Û²ÃÀ» µî·ÏÇÏÁö ¸øÇß½À´Ï´Ù. ±Û²ÃÀ» ¼³Ä¡ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÃæºÐÇÑÁö, ±×¸®°í ÀÌ ±Û²ÃÀ» ½Ã½ºÅÛ¿¡¼ Áö¿øÇÏ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1908">[2] ±Û²ÃÀÇ µî·ÏÀ» ÇØÁ¦ÇÏÁö ¸øÇß½À´Ï´Ù. ±Û²ÃÀ» Á¦°ÅÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÃæºÐÈ÷ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1909">¹Ù·Î °¡±â [2]À»(¸¦) ¸¸µéÁö ¸øÇß½À´Ï´Ù. ´ë»ó Æú´õ°¡ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× Æú´õ¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1910">¹Ù·Î °¡±â [2]À»(¸¦) Á¦°ÅÇÏÁö ¸øÇß½À´Ï´Ù. ¹Ù·Î °¡±â ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏÀ» ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1911">ÆÄÀÏ [2]ÀÇ Çü½Ä ¶óÀ̺귯¸®¸¦ µî·ÏÇÏÁö ¸øÇß½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1912">ÆÄÀÏ [2]ÀÇ Çü½Ä ¶óÀ̺귯¸®¸¦ µî·ÏÇÏÁö ¸øÇß½À´Ï´Ù. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1913">ini ÆÄÀÏ [2][3]À»(¸¦) ¾÷µ¥ÀÌÆ®ÇÏÁö ¸øÇß½À´Ï´Ù. ±× ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ÆÄÀÏ¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1914">´Ù½Ã ºÎÆÃÇÒ ¶§ ÆÄÀÏ [2]À»(¸¦) [3](À¸)·Î ¹Ù²Ùµµ·Ï ¼³Á¤ÇÏÁö ¸øÇß½À´Ï´Ù. ÆÄÀÏ [3]¿¡ ¾²±â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1915">ODBC µå¶óÀ̹ö °ü¸®ÀÚ¸¦ Á¦°ÅÇϴµ¥ ¿À·ù°¡ »ý°å½À´Ï´Ù. ODBC ¿À·ù [2]: [3]. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1916">ODBC µå¶óÀ̹ö °ü¸®ÀÚ¸¦ ¼³Ä¡ÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù. ODBC ¿À·ù [2]: [3]. ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÜ.</Error>
+
+<Error Id="1917">ODBC µå¶óÀ̹ö Á¦°ÅÇϴµ¥ ¿À·ù°¡ »ý°å½À´Ï´Ù:[4]. ODBC ¿À·ù [2]: [3]. ODBC µå¶óÀ̹ö¸¦ Á¦°ÅÇÒ ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1918">ODBC µå¶óÀ̹ö¸¦ ¼³Ä¡ÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù: [4]. ODBC ¿À·ù [2]: [3]. [4] ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏÀ» ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1919">ODBC µ¥ÀÌÅÍ ¿øº»À» ±¸¼ºÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù: [4]. ODBC ¿À·ù [2]: [3]. [4] ÆÄÀÏÀÌ ½ÇÁ¦·Î ÀÖ´ÂÁö, ±×¸®°í ±× ÆÄÀÏ¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1920">¼ºñ½º '[2]'([3])À»(¸¦) ½ÃÀÛÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù. ½Ã½ºÅÛ ¼ºñ½º¸¦ ½ÃÀÛÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1921">¼ºñ½º '[2]'([3])À»(¸¦) ÁßÁöÇÏÁö ¸øÇß½À´Ï´Ù. ½Ã½ºÅÛ ¼ºñ½º¸¦ Áß´ÜÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1922">¼ºñ½º '[2]'([3])À»(¸¦) »èÁ¦ÇÏÁö ¸øÇß½À´Ï´Ù. ½Ã½ºÅÛ ¼ºñ½º¸¦ »èÁ¦ÇÒ ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1923">¼ºñ½º '[2]'([3])À»(¸¦) ¼³Ä¡ÇÏÁö ¸øÇß½À´Ï´Ù. ½Ã½ºÅÛ ¼ºñ½º¸¦ ¼³Ä¡ÇÒ ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1924">ȯ°æ º¯¼ö '[2]'À»(¸¦) ¾÷µ¥ÀÌÆ®ÇÏÁö ¸øÇß½À´Ï´Ù. ȯ°æ º¯¼ö¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1925">¸ðµç »ç¿ëÀÚ°¡ ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ´Â ½Ã½ºÅÛ¿¡ ¼³Ä¡ ÀÛ¾÷À» ½ÇÇàÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ¾ø½À´Ï´Ù. °ü¸®ÀÚ ±ÇÇÑÀ¸·Î ·Î±×¿ÂÇØ¼ ¼³Ä¡¸¦ ´Ù½Ã ½ÇÇàÇϽʽÿÀ.</Error>
+
+<Error Id="1926">'[3]' ÆÄÀÏ¿¡ ´ëÇÑ ÆÄÀÏ º¸¾ÈÀ» ¼³Á¤ÇÏÁö ¸øÇß½À´Ï´Ù. ¿À·ù: [2]. ÀÌ ÆÄÀÏ¿¡ ´ëÇÑ º¸¾ÈÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀÌ ÀÖ´ÂÁö È®ÀÎÇϽʽÿÀ.</Error>
+
+<Error Id="1927">±¸¼º ¿ä¼Ò ¼ºñ½º(COM+ 1.0)°¡ ÀÌ ÄÄÇ»ÅÍ¿¡ ¼³Ä¡µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù. Component Service°¡ ÀÖ¾î¾ß ¼³Ä¡¸¦ ³¡³¾ ¼ö ÀÖ½À´Ï´Ù. Component Service´Â Windows 2000¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.</Error>
+
+<Error Id="1928">COM+ ÀÀ¿ë ÇÁ·Î±×·¥À» µî·ÏÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù. ÀÚ¼¼ÇÑ Á¤º¸´Â ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1929">COM+ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ µî·ÏÀ» ÇØÁ¦ÇÏ´Â Áß¿¡ ¿À·ù°¡ »ý°å½À´Ï´Ù. ÀÚ¼¼ÇÑ Á¤º¸´Â ±â¼ú Áö¿ø ´ã´çÀÚ¿¡°Ô ¹®ÀÇÇϽʽÿÀ.</Error>
+
+<Error Id="1930">¼ºñ½º '[2]'([3])ÀÇ ¼³¸íÀ» ¹Ù²ÙÁö ¸øÇß½À´Ï´Ù.</Error>
+
+<Error Id="1931">½Ã½ºÅÛ ÆÄÀÏ [2]À»(¸¦) Windows¿¡¼ º¸È£Çϰí ÀÖ¾î¼ ¾÷µ¥ÀÌÆ®ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ ÆÄÀÏÀ» Á¦´ë·Î ½ÇÇàÇÏ·Á¸é ÀÌ ÇÁ·Î±×·¥ÀÇ ¿î¿µ üÁ¦¸¦ ¾÷µ¥ÀÌÆ®ÇØ¾ß ÇÕ´Ï´Ù. {{ÆÐŰÁö ¹öÀü: [3], OS º¸È£ ¹öÀü: [4]}}</Error>
+
+<Error Id="1932">Windows Installer ¼ºñ½º°¡ º¸È£µÈ Windows ÆÄÀÏ [2]À»(¸¦) ¾÷µ¥ÀÌÆ®ÇÏÁö ¸øÇß½À´Ï´Ù. {{ÆÐŰÁö ¹öÀü: [3], OS º¸È£ ¹öÀü: [4], SFP ¿À·ù: [5]}}</Error>
+
+<Error Id="1933">Windows Installer ¼ºñ½º°¡ Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ º¸È£µÈ Windows ÆÄÀÏÀ» ¾÷µ¥ÀÌÆ®ÇÒ ¼ö ¾ø½À´Ï´Ù. {{SFP ¿À·ù: [2]. º¸È£µÈ ÆÄÀÏ ¸ñ·Ï:\r\n[3]}}</Error>
+
+<Error Id="1934">ÀÌ ÄÄÇ»ÅÍÀÇ Á¤Ã¥ÀÌ »ç¿ëÀÚ ¼³Ä¡¸¦ ÇÒ ¼ö ¾ø°Ô µÇ¾î ÀÖ½À´Ï´Ù.</Error>
+
+<Error Id="1935">¾î¼Àºí¸® ±¸¼º ¿ä¼Ò [2]À»(¸¦) ¼³Ä¡ÇÏ´Â µ¿¾È ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. HRESULT: [3]. {{¾î¼Àºí¸® ÀÎÅÍÆäÀ̽º: [4], ÇÔ¼ö: [5], ¾î¼Àºí¸® À̸§: [6]}}</Error>
+
+</Include>
--- /dev/null
+<Include>
+
+<ProgressText Action="Advertise" Template="">Aplicativo de anúncio</ProgressText>
+
+<ProgressText Action="AllocateRegistrySpace" Template="Espaço livre: [1]">Alocando espaço no Registro</ProgressText>
+
+<ProgressText Action="AppSearch" Template="Propriedade: [1], Assinatura: [2]">Procurando aplicativos instalados</ProgressText>
+
+<ProgressText Action="BindImage" Template="Arquivo: [1]">Vinculando executáveis</ProgressText>
+
+<ProgressText Action="CCPSearch" Template="">Procurando produtos qualificados</ProgressText>
+
+<ProgressText Action="CostFinalize" Template="">Calculando requisitos de espaço</ProgressText>
+
+<ProgressText Action="CostInitialize" Template="">Calculando requisitos de espaço</ProgressText>
+
+<ProgressText Action="CreateFolders" Template="Pasta: [1]">Criando pastas</ProgressText>
+
+<ProgressText Action="CreateShortcuts" Template="Atalho: [1]">Criando atalhos</ProgressText>
+
+<ProgressText Action="DeleteServices" Template="Serviço: [1]">Excluindo serviços</ProgressText>
+
+<ProgressText Action="DuplicateFiles" Template="Arquivo: [1], Diretório: [9], Tamanho: [6]">Criando arquivos duplicados</ProgressText>
+
+<ProgressText Action="FileCost" Template="">Calculando requisitos de espaço</ProgressText>
+
+<ProgressText Action="FindRelatedProducts" Template="Aplicativo localizado: [1]">Procurando por aplicativos relacionados</ProgressText>
+
+<ProgressText Action="GenerateScript" Template="[1]">Gerando operações de script para ação:</ProgressText>
+
+<ProgressText Action="InstallAdminPackage" Template="Arquivo: [1], Diretório: [9], Tamanho: [6]">Copiando arquivos de instalação em rede</ProgressText>
+
+<ProgressText Action="InstallFiles" Template="Arquivo: [1], Diretório: [9], Tamanho: [6]">Copiando novos arquivos</ProgressText>
+
+<ProgressText Action="InstallODBC" Template="">Instalando componentes de ODBC</ProgressText>
+
+<ProgressText Action="InstallServices" Template="Serviço: [2]">Instalando novos serviços</ProgressText>
+
+<ProgressText Action="InstallSFPCatalogFile" Template="Arquivo: [1], dependências: [2]">Instalando catálogo do sistema</ProgressText>
+
+<ProgressText Action="InstallValidate" Template="">Validando instalação</ProgressText>
+
+<ProgressText Action="LaunchConditions" Template="">Avaliando condições de inicialização</ProgressText>
+
+<ProgressText Action="MigrateFeatureStates" Template="Aplicativo: [1]">Migrando estados do recurso de aplicativos relacionados</ProgressText>
+
+<ProgressText Action="MoveFiles" Template="Arquivo: [1], Diretório: [9], Tamanho: [6]">Movendo arquivos</ProgressText>
+
+<ProgressText Action="MsiPublishAssemblies" Template="Contexto do aplicativo:[1], Nome de montagem:[2]">Publicando informações de montagem</ProgressText>
+
+<ProgressText Action="MsiUnpublishAssemblies" Template="Contexto do aplicativo:[1], Nome de montagem:[2]">Cancelando publicação de informações de montagem</ProgressText>
+
+<ProgressText Action="PatchFiles" Template="Arquivo: [1], Diretório: [2], Tamanho: [3]">Corrigindo arquivos</ProgressText>
+
+<ProgressText Action="ProcessComponents" Template="">Atualizando registro do componente</ProgressText>
+
+<ProgressText Action="PublishComponents" Template="Identificação do componente: [1], Qualificador: [2]">Publicando componentes qualificados</ProgressText>
+
+<ProgressText Action="PublishFeatures" Template="Recurso: [1]">Publicando recursos do produto</ProgressText>
+
+<ProgressText Action="PublishProduct" Template="">Publicando informações sobre o produto</ProgressText>
+
+<ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">Registrando servidores de classes</ProgressText>
+
+<ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Usuários: [3], RSN: [4]}}">Registrando componentes e aplicativos do COM+</ProgressText>
+
+<ProgressText Action="RegisterExtensionInfo" Template="Extensão: [1]">Registrando servidores de extensão</ProgressText>
+
+<ProgressText Action="RegisterFonts" Template="Fonte: [1]">Registrando fontes</ProgressText>
+
+<ProgressText Action="RegisterMIMEInfo" Template="Tipo de conteúdo MIME: [1], Extensão: [2]">Registrando informações sobre MIME</ProgressText>
+
+<ProgressText Action="RegisterProduct" Template="[1]">Registrando produto</ProgressText>
+
+<ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">Registrando identificadores de programas</ProgressText>
+
+<ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">Registrando bibliotecas de tipos</ProgressText>
+
+<ProgressText Action="RegisterUser" Template="[1]">Registrando usuário</ProgressText>
+
+<ProgressText Action="RemoveDuplicateFiles" Template="Arquivo: [1], Diretório: [9]">Removendo arquivos duplicados</ProgressText>
+
+<ProgressText Action="RemoveEnvironmentStrings" Template="Nome: [1], Valor: [2], Ação [3]">Atualizando seqüências de ambiente</ProgressText>
+
+<ProgressText Action="RemoveExistingProducts" Template="Aplicativo: [1], Linha de comando: [2]">Removendo aplicativos</ProgressText>
+
+<ProgressText Action="RemoveFiles" Template="Arquivo: [1], Diretório: [9]">Removendo arquivos</ProgressText>
+
+<ProgressText Action="RemoveFolders" Template="Pasta: [1]">Removendo pastas</ProgressText>
+
+<ProgressText Action="RemoveIniValues" Template="Arquivo: [1], Seção: [2], Chave: [3], Valor: [4]">Removendo entradas dos arquivos INI</ProgressText>
+
+<ProgressText Action="RemoveODBC" Template="">Removendo componentes de ODBC</ProgressText>
+
+<ProgressText Action="RemoveRegistryValues" Template="Chave: [1], Nome: [2]">Removendo valores do Registro do sistema</ProgressText>
+
+<ProgressText Action="RemoveShortcuts" Template="Atalho: [1]">Removendo atalhos</ProgressText>
+
+<ProgressText Action="RMCCPSearch" Template="">Procurando produtos qualificados</ProgressText>
+
+<ProgressText Action="Rollback" Template="[1]">Repetindo a ação:</ProgressText>
+
+<ProgressText Action="RollbackCleanup" Template="Arquivo: [1]">Removendo arquivos de backup</ProgressText>
+
+<ProgressText Action="SelfRegModules" Template="Arquivo: [1], Pasta: [2]">Registrando módulos</ProgressText>
+
+<ProgressText Action="SelfUnregModules" Template="Arquivo: [1], Pasta: [2]">Removendo registro de módulos</ProgressText>
+
+<ProgressText Action="SetODBCFolders" Template="">Inicializando diretórios de ODBC</ProgressText>
+
+<ProgressText Action="StartServices" Template="Serviço: [1]">Iniciando serviços</ProgressText>
+
+<ProgressText Action="StopServices" Template="Serviço: [1]">Interrompendo serviços</ProgressText>
+
+<ProgressText Action="UnmoveFiles" Template="Arquivo: [1], Diretório: [9]">Removendo arquivos movidos</ProgressText>
+
+<ProgressText Action="UnpublishComponents" Template="Identificação do componente: [1], Qualificador: [2]">Cancelando publicação de componentes qualificados</ProgressText>
+
+<ProgressText Action="UnpublishFeatures" Template="Recurso: [1]">Cancelando publicação de recursos do produto</ProgressText>
+
+<ProgressText Action="UnpublishProduct" Template="">Cancelando publicação de informações sobre o produto</ProgressText>
+
+<ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">Remover o registro de servidores de classes</ProgressText>
+
+<ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">Removendo registro de componentes e aplicativos do COM+</ProgressText>
+
+<ProgressText Action="UnregisterExtensionInfo" Template="Extensão: [1]">Removendo o registro de servidores de extensão</ProgressText>
+
+<ProgressText Action="UnregisterFonts" Template="Fonte: [1]">Removendo o registro de fontes</ProgressText>
+
+<ProgressText Action="UnregisterMIMEInfo" Template="Tipo de conteúdo MIME: [1], Extensão: [2]">Removendo registro de informações sobre MIME</ProgressText>
+
+<ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">Removendo registro de identificadores de programas</ProgressText>
+
+<ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">Removendo registro de bibliotecas de tipos</ProgressText>
+
+<ProgressText Action="WriteEnvironmentStrings" Template="Nome: [1], Valor: [2], Ação [3]">Atualizando seqüências de ambiente</ProgressText>
+
+<ProgressText Action="WriteIniValues" Template="Arquivo: [1], Seção: [2], Chave: [3], Valor: [4]">Gravando valores de arquivos INI</ProgressText>
+
+<ProgressText Action="WriteRegistryValues" Template="Chave: [1], Nome: [2], Valor: [3]">Gravando valores de Registro do sistema</ProgressText>
+
+</Include>
--- /dev/null
+<Include>
+
+<Error Id="0">{{Erro fatal: }}</Error>
+
+<Error Id="1">{{Erro [1]. }}</Error>
+
+<Error Id="2">Aviso [1]. </Error>
+
+<Error Id="3"></Error>
+
+<Error Id="4">Informações [1]. </Error>
+
+<Error Id="5">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]}}</Error>
+
+<Error Id="6"></Error>
+
+<Error Id="7">{{Disco cheio: }}</Error>
+
+<Error Id="8">Ação [Time]: [1]. [2]</Error>
+
+<Error Id="9">[ProductName]</Error>
+
+<Error Id="10">{[2]}{, [3]}{, [4]}</Error>
+
+<Error Id="11">Tipo de mensagem: [1], Argumento: [2]</Error>
+
+<Error Id="12">=== Log iniciado: [Date] [Time] ===</Error>
+
+<Error Id="13">=== Log parado: [Date] [Time] ===</Error>
+
+<Error Id="14">Ação iniciada [Time]: [1].</Error>
+
+<Error Id="15">Ação concluída [Time]: [1]. Valor de retorno [2].</Error>
+
+<Error Id="16">Tempo restante: {[1] minutos }{[2] segundos}</Error>
+
+<Error Id="17">Sem memória. Encerre outros aplicativos antes de tentar novamente.</Error>
+
+<Error Id="18">O Installer não está respondendo.</Error>
+
+<Error Id="19">Installer interrompido prematuramente.</Error>
+
+<Error Id="20">Aguarde enquanto o Windows configura o [ProductName]</Error>
+
+<Error Id="21">Reunindo as informações necessárias...</Error>
+
+<Error Id="22">Removendo versões anteriores deste aplicativo...</Error>
+
+<Error Id="23">Preparando para remover versões anteriores deste aplicativo...</Error>
+
+<Error Id="32">A instalação do {[ProductName] }foi concluída com êxito.</Error>
+
+<Error Id="33">A instalação do {[ProductName] }falhou.</Error>
+
+<Error Id="1101">Erro ao ler do arquivo: [2]. {{ Erro do sistema [3].}} Verifique se o arquivo existe e se você pode acessá-lo.</Error>
+
+<Error Id="1301">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.</Error>
+
+<Error Id="1302">Insira o disco: [2]</Error>
+
+<Error Id="1303">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.</Error>
+
+<Error Id="1304">Erro ao gravar no arquivo: [2]. Verifique se você tem acesso a este diretório.</Error>
+
+<Error Id="1305">Erro ao ler do arquivo: [2]. {{ Erro do sistema [3].}} Verifique se o arquivo existe e se você pode acessá-lo.</Error>
+
+<Error Id="1306">Outro aplicativo tem acesso exclusivo ao arquivo '[2]'. Encerre todos os outros aplicativos e clique em 'Repetir'.</Error>
+
+<Error Id="1307">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.</Error>
+
+<Error Id="1308">Arquivo de origem não encontrado: [2]. Verifique se o arquivo existe e se você pode acessá-lo.</Error>
+
+<Error Id="1309">Erro ao ler do arquivo: [3]. {{ Erro do sistema [2].}} Verifique se o arquivo existe e se você pode acessá-lo.</Error>
+
+<Error Id="1310">Erro ao gravar no arquivo: [3]. {{ Erro do sistema [2].}} Verifique se você tem acesso a este diretório.</Error>
+
+<Error Id="1311">Arquivo de origem não encontrado{{(gabinete)}}: [2]. Verifique se o arquivo existe e se você pode acessá-lo.</Error>
+
+<Error Id="1312">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.</Error>
+
+<Error Id="1313">O volume [2] não está disponível no momento. Selecione outro volume.</Error>
+
+<Error Id="1314">O caminho especificado '[2]' não está disponível.</Error>
+
+<Error Id="1315">Não é possível gravar na pasta especificada: [2].</Error>
+
+<Error Id="1316">Ocorreu um erro na rede ao tentar ler do arquivo: [2]</Error>
+
+<Error Id="1317">Ocorreu um erro ao tentar criar o diretório: [2]</Error>
+
+<Error Id="1318">Ocorreu um erro na rede ao tentar criar o diretório: [2]</Error>
+
+<Error Id="1319">Ocorreu um erro na rede ao tentar abrir o gabinete do arquivo de origem: [2]</Error>
+
+<Error Id="1320">O caminho especificado é muito longo: [2]</Error>
+
+<Error Id="1321">O Installer tem privilégios insuficientes para modificar este arquivo: [2].</Error>
+
+<Error Id="1322">Uma parte do caminho da pasta '[2]' é inválida. Talvez ela esteja vazia ou exceda o comprimento permitido pelo sistema.</Error>
+
+<Error Id="1323">O caminho da pasta '[2]' contém palavras que não são válidas em caminhos de pastas.</Error>
+
+<Error Id="1324">O caminho da pasta '[2]' contém um caractere inválido.</Error>
+
+<Error Id="1325">'[2]' não é um nome de arquivo curto válido.</Error>
+
+<Error Id="1326">Erro ao obter segurança do arquivo: [3] GetLastError: [2]</Error>
+
+<Error Id="1327">Unidade inválida: [2]</Error>
+
+<Error Id="1328">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]}}</Error>
+
+<Error Id="1329">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.</Error>
+
+<Error Id="1330">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.}}</Error>
+
+<Error Id="1331">Falha ao copiar corretamente o arquivo [2]: erro de CRC.</Error>
+
+<Error Id="1332">Falha ao mover corretamente o arquivo [2]: erro de CRC.</Error>
+
+<Error Id="1333">Falha ao corrigir corretamente o arquivo [2]: erro de CRC.</Error>
+
+<Error Id="1334">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.</Error>
+
+<Error Id="1335">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.</Error>
+
+<Error Id="1336">Erro ao criar um arquivo temporário necessário para concluir esta instalação.{{ Pasta: [3]. Código de erro do sistema: [2]}}</Error>
+
+<Error Id="1401">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. </Error>
+
+<Error Id="1402">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. </Error>
+
+<Error Id="1403">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. </Error>
+
+<Error Id="1404">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. </Error>
+
+<Error Id="1405">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. </Error>
+
+<Error Id="1406">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.</Error>
+
+<Error Id="1407">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.</Error>
+
+<Error Id="1408">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.</Error>
+
+<Error Id="1409">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.</Error>
+
+<Error Id="1410">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.</Error>
+
+<Error Id="1500">Outra instalação está em andamento. Você deve concluir a instalação anterior antes de continuar a instalação atual.</Error>
+
+<Error Id="1501">Erro ao acessar dados protegidos. Certifique-se de que o Windows Installer esteja configurado corretamente e tente instalar novamente.</Error>
+
+<Error Id="1502">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.</Error>
+
+<Error Id="1503">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.</Error>
+
+<Error Id="1601">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.</Error>
+
+<Error Id="1602">Tem certeza de que deseja cancelar?</Error>
+
+<Error Id="1603">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.</Error>
+
+<Error Id="1604">O produto '[2]' já está instalado, impedindo a instalação deste produto. Os dois produtos são incompatíveis.</Error>
+
+<Error Id="1605">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.</Error>
+
+<Error Id="1606">Não foi possível acessar o local da rede [2].</Error>
+
+<Error Id="1607">Os seguintes aplicativos devem ser fechados antes de continuar a instalação:</Error>
+
+<Error Id="1608">Não foi possível localizar qualquer produto compatível instalado anteriormente na máquina para a instalação deste produto.</Error>
+
+<Error Id="1609">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]}}</Error>
+
+<Error Id="1701">A chave [2] não é válida. Verifique se você inseriu a chave correta.</Error>
+
+<Error Id="1702">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.</Error>
+
+<Error Id="1703">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.</Error>
+
+<Error Id="1704">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?</Error>
+
+<Error Id="1705">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?</Error>
+
+<Error Id="1706">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]'.</Error>
+
+<Error Id="1707">Instalação concluída com êxito.</Error>
+
+<Error Id="1708">Falha na instalação.</Error>
+
+<Error Id="1709">Produto: [2] -- [3]</Error>
+
+<Error Id="1710">Talvez você precise recuperar o estado anterior do computador ou continuar a instalação mais tarde. Deseja recuperar?</Error>
+
+<Error Id="1711">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.</Error>
+
+<Error Id="1712">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.</Error>
+
+<Error Id="1713">[2] não pode instalar um de seus produtos requeridos. Entre em contato com a equipe de suporte técnico. {{Erro do sistema: [3].}}</Error>
+
+<Error Id="1714">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].}}</Error>
+
+<Error Id="1715">Instalado [2]</Error>
+
+<Error Id="1716">Configurado [2]</Error>
+
+<Error Id="1717">Removido [2]</Error>
+
+<Error Id="1718">O arquivo [2] foi rejeitado pela diretiva de assinatura digital.</Error>
+
+<Error Id="1719">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.</Error>
+
+<Error Id="1720">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] }}</Error>
+
+<Error Id="1721">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] }}</Error>
+
+<Error Id="1722">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] }}</Error>
+
+<Error Id="1723">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] }}</Error>
+
+<Error Id="1724">A remoção foi concluída com êxito.</Error>
+
+<Error Id="1725">Falha na remoção.</Error>
+
+<Error Id="1726">O anúncio foi concluído com êxito.</Error>
+
+<Error Id="1727">Falha no anúncio.</Error>
+
+<Error Id="1728">A configuração foi concluída com êxito.</Error>
+
+<Error Id="1729">Falha na configuração.</Error>
+
+<Error Id="1730">É 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.</Error>
+
+<Error Id="1801">O caminho [2] não é válido. Especifique um caminho válido.</Error>
+
+<Error Id="1802">Sem memória. Encerre outros aplicativos antes de tentar novamente.</Error>
+
+<Error Id="1803">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.</Error>
+
+<Error Id="1804">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.</Error>
+
+<Error Id="1805">A pasta [2] não existe. Insira um caminho para uma pasta existente.</Error>
+
+<Error Id="1806">Você tem privilégios insuficientes para ler esta pasta.</Error>
+
+<Error Id="1807">Uma pasta de destino válida não pôde ser determinada para a instalação.</Error>
+
+<Error Id="1901">Erro ao tentar ler a partir do banco de dados de instalação de origem: [2].</Error>
+
+<Error Id="1902">Programando operação de reinicialização: renomeando o arquivo [2] para [3]. É preciso reinicializar o computador para concluir a operação.</Error>
+
+<Error Id="1903">Programando operação de reinicialização: excluindo o arquivo [2]. É preciso reinicializar o computador para concluir a operação.</Error>
+
+<Error Id="1904">Módulo [2] falhou ao registrar. HRESULT [3]. Entre em contato com a equipe de suporte.</Error>
+
+<Error Id="1905">Módulo [2] falhou ao remover registro. HRESULT [3]. Entre em contato com a equipe de suporte.</Error>
+
+<Error Id="1906">Falha ao armazenar o pacote em cache [2]. Erro: [3]. Entre em contato com a equipe de suporte.</Error>
+
+<Error Id="1907">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.</Error>
+
+<Error Id="1908">Não foi possível remover o registro da fonte [2]. Verifique se você tem permissões suficientes para remover fontes.</Error>
+
+<Error Id="1909">Não foi possível criar o atalho [2]. Verifique se a pasta de destino existe e se você pode acessá-la.</Error>
+
+<Error Id="1910">Não foi possível remover o atalho [2]. Verifique se o arquivo de atalho existe e se você pode acessá-lo.</Error>
+
+<Error Id="1911">Não foi possível registrar a biblioteca de tipos para o arquivo [2]. Entre em contato com a equipe de suporte.</Error>
+
+<Error Id="1912">Não foi possível remover o registro da biblioteca de tipos para o arquivo [2]. Entre em contato com a equipe de suporte.</Error>
+
+<Error Id="1913">Não foi possível atualizar o arquivo ini [2][3]. Verifique se o arquivo existe e se você pode acessá-lo.</Error>
+
+<Error Id="1914">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].</Error>
+
+<Error Id="1915">Erro ao remover o gerenciador de driver ODBC; erro de ODBC [2]: [3]. Entre em contato com a equipe de suporte.</Error>
+
+<Error Id="1916">Erro ao instalar o gerenciador de driver ODBC; erro de ODBC [2]: [3]. Entre em contato com a equipe de suporte.</Error>
+
+<Error Id="1917">Erro ao remover o driver ODBC: [4]; erro de ODBC [2]: [3]. Verifique se você tem privilégios suficientes para remover drivers ODBC.</Error>
+
+<Error Id="1918">Erro ao instalar o driver ODBC: [4]; erro de ODBC [2]: [3]. Verifique se o arquivo [4] existe e se você pode acessá-lo.</Error>
+
+<Error Id="1919">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.</Error>
+
+<Error Id="1920">Serviço '[2]' ([3]) falhou ao iniciar. Verifique se você tem privilégios suficientes para iniciar os serviços do sistema.</Error>
+
+<Error Id="1921">Serviço '[2]' ([3]) não pôde ser interrompido. Verifique se você tem privilégios suficientes para interromper os serviços do sistema.</Error>
+
+<Error Id="1922">Serviço '[2]' ([3]) não pôde ser excluído. Verifique se você tem privilégios suficientes para remover serviços do sistema.</Error>
+
+<Error Id="1923">Serviço '[2]' ([3]) não pôde ser instalado. Verifique se você tem privilégios suficientes para instalar os serviços do sistema.</Error>
+
+<Error Id="1924">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.</Error>
+
+<Error Id="1925">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.</Error>
+
+<Error Id="1926">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.</Error>
+
+<Error Id="1927">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.</Error>
+
+<Error Id="1928">Erro ao registrar o aplicativo do COM+. Entre em contato com a equipe de suporte para obter mais informações.</Error>
+
+<Error Id="1929">Erro ao remover o registro do aplicativo do COM+. Entre em contato com a equipe de suporte para obter mais informações.</Error>
+
+<Error Id="1930">A descrição do serviço '[2]' ([3]) não pôde ser alterada.</Error>
+
+<Error Id="1931">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]}}</Error>
+
+<Error Id="1932">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]}}</Error>
+
+<Error Id="1933">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]}}</Error>
+
+<Error Id="1934">As instalações de usuário estão desativadas por meio da diretiva neste computador.</Error>
+
+<Error Id="1935">Erro ao instalar o componente de montagem [2]. HRESULT: [3]. {{interface de montagem: [4], função: [5], nome da montagem: [6]}}</Error>
+
+</Include>
--- /dev/null
+<Include>
+
+<ProgressText Action="Advertise" Template="">֪ͨӦÓóÌÐò</ProgressText>
+
+<ProgressText Action="AllocateRegistrySpace" Template="×ÔÓɿռä: [1]">ÕýÔÚ·ÖÅä×¢²á±í¿Õ¼ä</ProgressText>
+
+<ProgressText Action="AppSearch" Template="ÊôÐÔ: [1]£¬Ç©Ãû: [2]">ÕýÔÚËÑË÷ÒѰ²×°µÄÓ¦ÓóÌÐò</ProgressText>
+
+<ProgressText Action="BindImage" Template="Îļþ: [1]">°ó¶¨¿ÉÖ´ÐÐÎļþ</ProgressText>
+
+<ProgressText Action="CCPSearch" Template="">ÕýÔÚËÑË÷·ûºÏ×ʸñµÄ²úÆ·</ProgressText>
+
+<ProgressText Action="CostFinalize" Template="">ÕýÔÚ¼ÆËã¿Õ¼äÐèÇó</ProgressText>
+
+<ProgressText Action="CostInitialize" Template="">ÕýÔÚ¼ÆËã¿Õ¼äÐèÇó</ProgressText>
+
+<ProgressText Action="CreateFolders" Template="Îļþ¼Ð: [1]">ÕýÔÚ´´½¨Îļþ¼Ð</ProgressText>
+
+<ProgressText Action="CreateShortcuts" Template="¿ì½Ý·½Ê½: [1]">ÕýÔÚ´´½¨¿ì½Ý·½Ê½</ProgressText>
+
+<ProgressText Action="DeleteServices" Template="·þÎñ: [1]">ÕýÔÚɾ³ý·þÎñ</ProgressText>
+
+<ProgressText Action="DuplicateFiles" Template="Îļþ: [1]£¬Ä¿Â¼: [9]£¬´óС: [6]">ÕýÔÚ´´½¨Öظ´Îļþ</ProgressText>
+
+<ProgressText Action="FileCost" Template="">ÕýÔÚ¼ÆËã¿Õ¼äÐèÇó</ProgressText>
+
+<ProgressText Action="FindRelatedProducts" Template="ÕÒµ½Ó¦ÓóÌÐò: [1]">ÕýÔÚËÑË÷Ïà¹Ø²úÆ·</ProgressText>
+
+<ProgressText Action="GenerateScript" Template="[1]">ÕýÔÚÉú³É½Å±¾²Ù×÷£¬ÓÃÓÚ£º</ProgressText>
+
+<ProgressText Action="InstallAdminPackage" Template="Îļþ: [1]£¬Ä¿Â¼: [9]£¬´óС: [6]">ÕýÔÚ¸´ÖÆÍøÂç°²×°Îļþ</ProgressText>
+
+<ProgressText Action="InstallFiles" Template="Îļþ: [1]£¬Ä¿Â¼: [9]£¬´óС: [6]">ÕýÔÚ¸´ÖÆÐÂÎļþ</ProgressText>
+
+<ProgressText Action="InstallODBC" Template="">ÕýÔÚ°²×° ODBC ×é¼þ</ProgressText>
+
+<ProgressText Action="InstallServices" Template="·þÎñ: [2]">ÕýÔÚ°²×°Ð·þÎñ</ProgressText>
+
+<ProgressText Action="InstallSFPCatalogFile" Template="Îļþ: [1]£¬ ÒÀ´æ¹ØÏµ: [2]">ÕýÔÚ°²×°ÏµÍ³Ä¿Â¼</ProgressText>
+
+<ProgressText Action="InstallValidate" Template="">ÕýÔÚÑéÖ¤°²×°</ProgressText>
+
+<ProgressText Action="LaunchConditions" Template="">ÕýÔÚÆÀ¹ÀÆô¶¯Ìõ¼þ</ProgressText>
+
+<ProgressText Action="MigrateFeatureStates" Template="Ó¦ÓóÌÐò: [1]">ÕýÔÚ´ÓÏà¹ØÓ¦ÓóÌÐòÇ¨ÒÆ¹¦ÄÜ</ProgressText>
+
+<ProgressText Action="MoveFiles" Template="Îļþ: [1]£¬Ä¿Â¼: [9]£¬´óС: [6]">ÕýÔÚÒÆ¶¯Îļþ</ProgressText>
+
+<ProgressText Action="MsiPublishAssemblies" Template="Ó¦ÓóÌÐò»·¾³:[1], »ã±àÃû:[2]">·¢Ðлã±àÐÅÏ¢</ProgressText>
+
+<ProgressText Action="MsiUnpublishAssemblies" Template="Ó¦ÓóÌÐò»·¾³:[1], »ã±àÃû:[2]">Í£Ö¹·¢Ðлã±àÐÅÏ¢</ProgressText>
+
+<ProgressText Action="PatchFiles" Template="Îļþ: [1]£¬Ä¿Â¼: [2]£¬´óС: [3]">ÕýÔÚÐÞ²¹Îļþ</ProgressText>
+
+<ProgressText Action="ProcessComponents" Template="">ÕýÔÚ¸üÐÂ×é¼þ×¢²á±í</ProgressText>
+
+<ProgressText Action="PublishComponents" Template="×é¼þ ID: [1]£¬×ʸñÈÏÖ¤Õß: [2]">ÕýÔÚ·¢²¼ºÏ¸ñµÄ×é¼þ</ProgressText>
+
+<ProgressText Action="PublishFeatures" Template="¹¦ÄÜ: [1]">ÕýÔÚ·¢²¼²úÆ·¹¦ÄÜ</ProgressText>
+
+<ProgressText Action="PublishProduct" Template="">ÕýÔÚ·¢²¼²úÆ·ÐÅÏ¢</ProgressText>
+
+<ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">ÕýÔÚ×¢²áÀà·þÎñÆ÷</ProgressText>
+
+<ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">ÕýÔÚ×¢²á COM+ Ó¦ÓóÌÐòºÍ×é¼þ</ProgressText>
+
+<ProgressText Action="RegisterExtensionInfo" Template="À©Õ¹: [1]">ÕýÔÚ×¢²áÀ©Õ¹·þÎñÆ÷</ProgressText>
+
+<ProgressText Action="RegisterFonts" Template="×ÖÌå: [1]">ÕýÔÚ×¢²á×ÖÌå</ProgressText>
+
+<ProgressText Action="RegisterMIMEInfo" Template="MIME ÄÚÈÝÀàÐÍ: [1]£¬À©Õ¹: [2]">ÕýÔÚ×¢²á MIME ÐÅÏ¢</ProgressText>
+
+<ProgressText Action="RegisterProduct" Template="[1]">ÕýÔÚ×¢²á²úÆ·</ProgressText>
+
+<ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">ÕýÔÚ×¢²á³ÌÐò±êʶ·û</ProgressText>
+
+<ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">ÕýÔÚ×¢²áÀàÐÍ¿â</ProgressText>
+
+<ProgressText Action="RegisterUser" Template="[1]">ÕýÔÚ×¢²áÓû§</ProgressText>
+
+<ProgressText Action="RemoveDuplicateFiles" Template="Îļþ: [1]£¬Ä¿Â¼: [9]">ÕýÔÚɾ³ýÖØ¸´µÄÎļþ</ProgressText>
+
+<ProgressText Action="RemoveEnvironmentStrings" Template="Ãû³Æ: [1]£¬ÊýÖµ: [2]£¬¶¯×÷ [3]">ÕýÔÚ¸üл·¾³×Ö·û´®</ProgressText>
+
+<ProgressText Action="RemoveExistingProducts" Template="Ó¦ÓóÌÐò: [1]£¬ÃüÁîÐÐ: [2]">ÕýÔÚɾ³ýÓ¦ÓóÌÐò</ProgressText>
+
+<ProgressText Action="RemoveFiles" Template="Îļþ: [1]£¬Ä¿Â¼: [9]">ÕýÔÚɾ³ýÎļþ</ProgressText>
+
+<ProgressText Action="RemoveFolders" Template="Îļþ¼Ð: [1]">ÕýÔÚɾ³ýÎļþ¼Ð</ProgressText>
+
+<ProgressText Action="RemoveIniValues" Template="Îļþ: [1]£¬½Ú: [2]£¬¼ü: [3]£¬ÊýÖµ: [4]">ÕýÔÚɾ³ý INI ÎļþÌõÄ¿</ProgressText>
+
+<ProgressText Action="RemoveODBC" Template="">ÕýÔÚɾ³ý ODBC ×é¼þ</ProgressText>
+
+<ProgressText Action="RemoveRegistryValues" Template="¼üÖµ: [1]£¬Ãû³Æ: [2]">ÕýÔÚɾ³ýϵͳע²á±íÖµ</ProgressText>
+
+<ProgressText Action="RemoveShortcuts" Template="¿ì½Ý·½Ê½: [1]">ÕýÔÚɾ³ý¿ì½Ý·½Ê½</ProgressText>
+
+<ProgressText Action="RMCCPSearch" Template="">ÕýÔÚËÑË÷·ûºÏ×ʸñµÄ²úÆ·</ProgressText>
+
+<ProgressText Action="Rollback" Template="[1]">»Ø¹ö²Ù×÷: </ProgressText>
+
+<ProgressText Action="RollbackCleanup" Template="Îļþ: [1]">ÕýÔÚɾ³ý±¸·ÝÎļþ</ProgressText>
+
+<ProgressText Action="SelfRegModules" Template="Îļþ: [1]£¬Îļþ¼Ð: [2]">ÕýÔÚ×¢²áÄ£¿é</ProgressText>
+
+<ProgressText Action="SelfUnregModules" Template="Îļþ: [1]£¬Îļþ¼Ð: [2]">ÕýÔÚ³·ÏúÄ£¿éµÄ×¢²á</ProgressText>
+
+<ProgressText Action="SetODBCFolders" Template="">ÕýÔÚ³õʼ»¯ ODBC Ŀ¼</ProgressText>
+
+<ProgressText Action="StartServices" Template="·þÎñ: [1]">ÕýÔÚÆô¶¯·þÎñ</ProgressText>
+
+<ProgressText Action="StopServices" Template="·þÎñ: [1]">ÕýÔÚÍ£Ö¹·þÎñ</ProgressText>
+
+<ProgressText Action="UnmoveFiles" Template="Îļþ: [1]£¬Ä¿Â¼: [9]">ÕýÔÚɾ³ýÒÆ¶¯¹ýµÄÎļþ</ProgressText>
+
+<ProgressText Action="UnpublishComponents" Template="×é¼þ ID: [1]£¬×ʸñÈÏÖ¤Õß: [2]">ÕýÔÚÈ¡ÏûºÏ¸ñ×é¼þµÄ·¢²¼</ProgressText>
+
+<ProgressText Action="UnpublishFeatures" Template="¹¦ÄÜ: [1]">ÕýÔÚÈ¡Ïû²úÆ·¹¦Äܵķ¢²¼</ProgressText>
+
+<ProgressText Action="UnpublishProduct" Template="">ÕýÔÚÈ¡Ïû²úÆ·ÐÅÏ¢µÄ·¢²¼</ProgressText>
+
+<ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">ÕýÔÚ³·ÏúÀà·þÎñÆ÷µÄ×¢²á</ProgressText>
+
+<ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">ÕýÔÚ³·Ïú COM+ Ó¦ÓóÌÐòºÍ×é¼þµÄ×¢²á</ProgressText>
+
+<ProgressText Action="UnregisterExtensionInfo" Template="À©Õ¹: [1]">ÕýÔÚ³·ÏúÀ©Õ¹·þÎñÆ÷µÄ×¢²á</ProgressText>
+
+<ProgressText Action="UnregisterFonts" Template="×ÖÌå: [1]">ÕýÔÚ³·Ïú×ÖÌåµÄ×¢²á</ProgressText>
+
+<ProgressText Action="UnregisterMIMEInfo" Template="MIME ÄÚÈÝÀàÐÍ: [1]£¬À©Õ¹: [2]">ÕýÔÚ³·Ïú MIME ÐÅÏ¢µÄ×¢²á</ProgressText>
+
+<ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">ÕýÔÚ³·Ïú³ÌÐò±êʶ·ûµÄ×¢²á</ProgressText>
+
+<ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">ÕýÔÚ³·ÏúÀàÐÍ¿âµÄ×¢²á</ProgressText>
+
+<ProgressText Action="WriteEnvironmentStrings" Template="Ãû³Æ: [1]£¬ÊýÖµ: [2]£¬¶¯×÷ [3]">ÕýÔÚ¸üл·¾³×Ö·û´®</ProgressText>
+
+<ProgressText Action="WriteIniValues" Template="Îļþ: [1]£¬½Ú: [2]£¬¼ü: [3]£¬ÊýÖµ: [4]">ÕýÔÚдÈë INI ÎļþÊýÖµ</ProgressText>
+
+<ProgressText Action="WriteRegistryValues" Template="¼ü: [1]£¬Ãû³Æ: [2]£¬ÊýÖµ: [3]">ÕýÔÚдÈëϵͳע²á±íÖµ</ProgressText>
+
+</Include>
--- /dev/null
+<Include>
+
+<Error Id="0">{{ÖÂÃü´íÎó: }}</Error>
+
+<Error Id="1">{{´íÎó [1]¡£}}</Error>
+
+<Error Id="2">¾¯¸æ [1]¡£</Error>
+
+<Error Id="3"></Error>
+
+<Error Id="4">ÐÅÏ¢ [1]¡£</Error>
+
+<Error Id="5">°²×°³ÌÐòÔÚ°²×°´ËÈí¼þ°üʱÓöµ½Ò»¸ö´íÎó¡£Õâ¿ÉÄܱíʾ´ËÈí¼þ°üÓÐ´í¡£´íÎóÂëÊÇ [1]¡£{{²ÎÊýÊÇ: [2], [3], [4]}}</Error>
+
+<Error Id="6"></Error>
+
+<Error Id="7">{{´ÅÅÌÒÑÂú: }}</Error>
+
+<Error Id="8">²Ù×÷ [Time]: [1]. [2]</Error>
+
+<Error Id="9">[ProductName]</Error>
+
+<Error Id="10">{[2]}{, [3]}{, [4]}</Error>
+
+<Error Id="11">ÏûÏ¢ÀàÐÍ: [1]£¬ ²ÎÊý: [2]</Error>
+
+<Error Id="12">=== ¼Ç¼¿ªÊ¼: [Date] [Time] ===</Error>
+
+<Error Id="13">=== ¼Ç¼ֹͣ: [Date] [Time] ===</Error>
+
+<Error Id="14">²Ù×÷¿ªÊ¼ [Time]: [1]¡£</Error>
+
+<Error Id="15">²Ù×÷½áÊø [Time]: [1]¡£·µ»ØÖµ [2]¡£</Error>
+
+<Error Id="16">Ê£Óàʱ¼ä: {[1] ·Ö }{[2] Ãë}</Error>
+
+<Error Id="17">ÄÚ´æ²»×ã¡£ÇëÏÈ¹Ø±ÕÆäËûÓ¦ÓóÌÐò£¬È»ºóÔÙÖØÊÔ¡£</Error>
+
+<Error Id="18">°²×°³ÌÐòÒѲ»ÔÙÏìÓ¦¡£</Error>
+
+<Error Id="19">°²×°³ÌÐò¹ýÔçÍ£Ö¹¡£</Error>
+
+<Error Id="20">Windows ÕýÔÚÅäÖà [ProductName]£¬ÇëÉÔºò¡£</Error>
+
+<Error Id="21">ÕýÔÚÊÕ¼¯ËùÐèÐÅÏ¢...</Error>
+
+<Error Id="22">ÕýÔÚɾ³ý´ËÓ¦ÓóÌÐò¾ÉµÄ°æ±¾...</Error>
+
+<Error Id="23">ÕýÔÚ×¼±¸É¾³ý´ËÓ¦ÓóÌÐò¾ÉµÄ°æ±¾...</Error>
+
+<Error Id="32">{[ProductName] }°²×°Òѳɹ¦Íê³É¡£</Error>
+
+<Error Id="33">{[ProductName] }°²×°Ê§°Ü¡£</Error>
+
+<Error Id="1101">¶ÁÈ¡Îļþ [2] ʱ³ö´í¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÈ·ÈϸÃÎļþµÄÈ·´æÔÚ²¢ÇÒÄú¿ÉÒÔ¶ÔÆä½øÐзÃÎÊ¡£</Error>
+
+<Error Id="1301">ÎÞ·¨´´½¨Îļþ '[2]'¡£Í¬ÃûĿ¼ÒÑ´æÔÚ¡£ÇëÈ¡Ïû´Ë´Î°²×°£¬È»ºó°²×°µ½ÆäËûλÖá£</Error>
+
+<Error Id="1302">Çë²åÈë´ÅÅÌ: [2]</Error>
+
+<Error Id="1303">°²×°³ÌÐòûÓзÃÎÊĿ¼ [2] µÄȨÏÞ£¬°²×°ÎÞ·¨¼ÌÐø½øÐС£ÇëÒÔ¹ÜÀíÔ±Éí·ÝµÇ¼£¬»òÓëÄúµÄϵͳ¹ÜÀíÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1304">дÖÁÎļþ [2] ʱ³ö´í¡£ÇëÈ·ÈÏÄúÓзÃÎʸÃĿ¼µÄȨÏÞ¡£</Error>
+
+<Error Id="1305">¶ÁÈ¡Îļþ [2] ʱ³ö´í¡£{{ ϵͳ´íÎó [3]¡£}}ÇëÈ·ÈÏÎļþ´æÔÚ£¬²¢ÇÒÄúÄܹ»·ÃÎʸÃÎļþ¡£</Error>
+
+<Error Id="1306">ÁíÒ»Ó¦ÓóÌÐòÒѾÒÔ¶Àռģʽ·ÃÎÊÁËÎļþ [2]¡£Çë¹Ø±ÕËùÓÐÆäËûµÄÓ¦ÓóÌÐò£¬È»ºóÔÙµ¥»÷¡°ÖØÊÔ¡±°´Å¥¡£</Error>
+
+<Error Id="1307">ûÓÐ×ã¹»µÄ´ÅÅ̿ռäÀ´°²×°Îļþ [2]¡£ÇëÊÍ·ÅһЩ´ÅÅ̿ռäºóµ¥»÷¡°ÖØÊÔ¡±£¬»òÕßµ¥»÷¡°È¡Ïû¡±Í˳ö¡£</Error>
+
+<Error Id="1308">ûÓÐÕÒµ½Ô´Îļþ [2]¡£ÇëÈ·ÈÏÎļþ´æÔÚ£¬²¢ÇÒÄúÄܹ»·ÃÎʸÃÎļþ¡£</Error>
+
+<Error Id="1309">¶ÁÈ¡Îļþ [3] ʱ³ö´í¡£{{ ϵͳ´íÎó [2]¡£}} ÇëÈ·ÈÏÎļþ´æÔÚ£¬²¢ÇÒÄúÄܹ»·ÃÎʸÃÎļþ¡£</Error>
+
+<Error Id="1310">дÖÁÎļþ [3] ʱ³ö´í¡£{{ ϵͳ´íÎó [2]¡£}} ÇëÈ·ÈÏÄúÓÐȨ·ÃÎʸÃĿ¼¡£</Error>
+
+<Error Id="1311">ûÓÐÕÒµ½Ô´Îļþ{{(°ü)}}: [2]¡£ÇëÈ·ÈÏÎļþ´æÔÚ£¬²¢ÇÒÄúÄܹ»·ÃÎʸÃÎļþ¡£</Error>
+
+<Error Id="1312">ÎÞ·¨´´½¨Ä¿Â¼ [2]¡£Í¬ÃûÎļþÒѾ´æÔÚ¡£ÇëÖØÃüÃû»òɾ³ýÎļþ£¬È»ºóµ¥»÷¡°ÖØÊÔ¡±°´Å¥£¬»òÕßµ¥»÷¡°È¡Ïû¡±°´Å¥Í˳ö¡£</Error>
+
+<Error Id="1313">ĿǰÎÞ·¨Ê¹Óþí [2]£¬ÇëÁíÑ¡ÆäËû¾í¡£</Error>
+
+<Error Id="1314">ÎÞ·¨Ê¹ÓÃÖ¸¶¨µÄ·¾¶ [2]¡£</Error>
+
+<Error Id="1315">ÎÞ·¨Ð´ÈëÖ¸¶¨µÄÎļþ¼Ð [2]¡£</Error>
+
+<Error Id="1316">ÊÔͼ¶ÁÈ¡Îļþ [2] ʱ·¢ÉúÍøÂç´íÎó¡£ </Error>
+
+<Error Id="1317">ÊÔͼ´´½¨Ä¿Â¼ [2] ʱ·¢Éú´íÎó¡£</Error>
+
+<Error Id="1318">ÊÔͼ´´½¨Ä¿Â¼ [2] ʱ·¢ÉúÍøÂç´íÎó¡£</Error>
+
+<Error Id="1319">ÊÔͼ´ò¿ªÔ´Îļþ°ü [2] ʱ·¢ÉúÍøÂç´íÎó¡£</Error>
+
+<Error Id="1320">Ö¸¶¨µÄ·¾¶¹ý³¤: [2]</Error>
+
+<Error Id="1321">°²×°³ÌÐòûÓÐÐÞ¸ÄÎļþ [2] µÄȨÏÞ¡£</Error>
+
+<Error Id="1322">Îļþ¼Ð·¾¶ [2] µÄÒ»²¿·ÖÎÞЧ¡£»òÕßΪ¿Õ£¬»òÕß³¬³öÁËϵͳÔÊÐíµÄ³¤¶È¡£</Error>
+
+<Error Id="1323">Îļþ¼Ð·¾¶ [2] Öк¬ÓÐÎÞЧµ¥´Ê¡£</Error>
+
+<Error Id="1324">Îļþ¼Ð·¾¶ [2] Öк¬ÓÐÎÞЧµÄ×Ö·û¡£</Error>
+
+<Error Id="1325">[2] ²»ÊÇÒ»¸öÓÐЧµÄ¶ÌÎļþÃû¡£</Error>
+
+<Error Id="1326">»ñÈ¡Îļþ [3] °²È«È¨ÏÞʱ·¢Éú´íÎó GetLastError: [2]</Error>
+
+<Error Id="1327">ÎÞЧÇý¶¯Æ÷: [2]</Error>
+
+<Error Id="1328">¶ÔÎļþ [2] Ó¦ÓÃÐÞ²¹³ÌÐòʱ³ö´í¡£¸ÃÎļþ¿ÉÄܱ»¸üйý£¬ËùÒÔ±¾ÐÞ²¹³ÌÐò²»ÄÜÐÞ¸ÄËü¡£ÏêϸÐÅÏ¢£¬ÇëÓëÄúµÄÐÞ²¹³ÌÐò¹©Ó¦ÉÌÁªÏµ¡£ {{ϵͳ´íÎó: [3]}}</Error>
+
+<Error Id="1329">ÐèÒªµÄÎļþ²»Äܰ²×°£¬ÒòΪ CAB Îļþ [2] ûÓÐÊý×ÖÇ©Ãû¡£Õâ¿ÉÄܱíʾ CAB ÎļþÒÑË𻵡£</Error>
+
+<Error Id="1330">ÐèÒªµÄÎļþ²»Äܰ²×°£¬ÒòΪ CAB Îļþ [2] µÄÊý×ÖÇ©ÃûÎÞЧ¡£Õâ¿ÉÄܱíʾ CAB ÎļþÒÑË𻵡£{{WinVerifyTrust ·µ»ØÁË´íÎó [3] ¡£}}</Error>
+
+<Error Id="1331">¸´ÖÆ [2] Îļþʧ°Ü: CRC ´íÎó¡£</Error>
+
+<Error Id="1332">ÒÆ¶¯ [2] Îļþʧ°Ü: CRC ´íÎó¡£</Error>
+
+<Error Id="1333">ÐÞ²¹ [2] Îļþʧ°Ü: CRC ´íÎó¡£</Error>
+
+<Error Id="1334">²»Äܰ²×°Îļþ '[2]'£¬ÒòΪÔÚ CAB Îļþ '[3]' ÖÐÕÒ²»µ½´ËÎļþ¡£Õâ¿ÉÄܱíÊ¾ÍøÂç´íÎó¡¢¶Á¹âÅÌ´íÎó»ò´ËÈí¼þ°ü´íÎó¡£</Error>
+
+<Error Id="1335">°²×°ËùÐèµÄ CAB Îļþ '[2]' ÒÑË𻵣¬²»ÄÜʹÓá£Õâ¿ÉÄܱíÊ¾ÍøÂç´íÎó¡¢¶Á¹âÅÌ´íÎó»ò´ËÈí¼þ°ü´íÎó¡£</Error>
+
+<Error Id="1336">´´½¨Íê³É´Ë°²×°ÐèÒªµÄÁÙʱÎļþ³ö´í¡£{{Îļþ¼Ð: [3]¡£ÏµÍ³´íÎóÂë: [2]}}</Error>
+
+<Error Id="1401">ÎÞ·¨´´½¨¼ü: [2]¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1402">ÎÞ·¨´ò¿ª¼ü: [2]¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ </Error>
+
+<Error Id="1403">ÎÞ·¨É¾³ýÖµ [2]£¨´Ó¼ü [3] ÖУ©¡£{{ ϵͳ´íÎó [4]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1404">ÎÞ·¨É¾³ý¼ü [2]¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1405">ÎÞ·¨¶Áȡֵ [2]£¨´Ó¼ü [3] ÖУ©¡£{{ ϵͳ´íÎó [4]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1406">ÎÞ·¨½«ÊýÖµ [2] дÈë¼ü [3]¡£{{ ϵͳ´íÎó [4]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1407">ÎÞ·¨»ñÈ¡¼ü [2] µÄÊýÖµÃû³Æ¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1408">ÎÞ·¨»ñÈ¡¼ü [2] µÄ×Ó¼ü¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1409">ÎÞ·¨¶ÁÈ¡¼ü [2] µÄ°²È«ÐÅÏ¢¡£{{ ϵͳ´íÎó [3]¡£}} ÇëÑéÖ¤Äú¶Ô¸Ã¼üÓµÓÐ×ã¹»µÄ·ÃÎÊȨÏÞ£¬»òÕßÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1410">ÎÞ·¨Ôö¼Ó¿ÉÓõÄ×¢²á±í¿Õ¼ä¡£°²×°±¾Ó¦ÓóÌÐòÐèÒª [2] ǧ×ֽڵĿÕÏÐ×¢²á±í¿Õ¼ä¡£</Error>
+
+<Error Id="1500">ÁíÒ»°²×°¹ý³ÌÕýÔÚ½øÐС£Äú±ØÐëÏÈÍê³ÉÄǴιý³Ì£¬È»ºó²ÅÄܼÌÐø±¾´Î¹ý³Ì¡£</Error>
+
+<Error Id="1501">·ÃÎÊÊܱ£»¤µÄÊý¾Ýʱ³ö´í¡£ÇëÈ·ÈÏ Windows Installer ÅäÖÃÊÇ·ñÕýÈ·£¬È»ºóÖØÐ°²×°¡£</Error>
+
+<Error Id="1502">Óû§ [2] ÒÔǰÆô¶¯¹ý²úÆ· [3] µÄ°²×°³ÌÐò¡£ÈôҪʹÓøòúÆ·£¬ÐèÒªÇë´ËÓû§ÔÙ´ÎÔËÐа²×°³ÌÐò¡£ÏÖÔÚ½«¼ÌÐø½øÐÐÄúµÄ°²×°¡£</Error>
+
+<Error Id="1503">Óû§ [2] ÒÔǰÆô¶¯¹ý²úÆ· [3] µÄ°²×°³ÌÐò¡£ÈôҪʹÓøòúÆ·£¬ÐèÒªÇë´ËÓû§ÔÙ´ÎÔËÐа²×°³ÌÐò¡£</Error>
+
+<Error Id="1601">´ÅÅ̿ռ䲻×ã -- ¾í: [2]£»ËùÐè¿Õ¼ä: [3] KB£»¿ÉÓÿռä: [4] KB¡£ÇëÔÚÊÍ·Å´ÅÅ̿ռäºóÔÙÊÔ¡£</Error>
+
+<Error Id="1602">ÊÇ·ñÈ·ÈÏҪȡÏû²Ù×÷£¿</Error>
+
+<Error Id="1603">Îļþ [2][3] Õý±»Ê¹Óà {ʹÓÃÕß: Ãû³Æ: [4]£¬Id: [5]£¬´°¿Ú±êÌâ: ¡°[6]¡±}¡£Çë¹Ø±ÕÄǸöÓ¦ÓóÌÐòºóÔÙÖØÊÔ¡£</Error>
+
+<Error Id="1604">²úÆ· [2] ÒѾ°²×°£¬ÏÖÔÚÎÞ·¨°²×°±¾²úÆ·¡£ÕâÁ½ÖÖ²úÆ·²»¼æÈÝ¡£</Error>
+
+<Error Id="1605">ÖùÃæ'[2]' ÉÏûÓÐ×ã¹»µÄ´ÅÅ̿ռäÀ´×÷¾ßÓÐÆôÓûָ´µÄ°²×°¡£ÐèÒª [3] KB£¬µ«Ö»ÓÐ [4] KB¡£µ¥»÷¡°ºöÂÔ¡±À´¼ÌÐø°²×°£¬¶ø²»±£´æ»Ö¸´ÐÅÏ¢£»µ¥»÷¡°ÖØÊÔ¡±À´Ôٴμì²é¿ÉÓÿռ䣻µ¥»÷¡°È¡Ïû¡±À´Í˳ö°²×°¡£</Error>
+
+<Error Id="1606">ÎÞ·¨·ÃÎÊÍøÂçλÖà [2]¡£</Error>
+
+<Error Id="1607">ÔÚ¼ÌÐø°²×°Ö®Ç°£¬Çë¹Ø±ÕÒÔÏÂÓ¦ÓóÌÐò: </Error>
+
+<Error Id="1608">ÎÞ·¨ÔÚ¼ÆËã»úÉÏÕÒµ½°²×°±¾²úÆ·ËùÐèµÄÈκÎÒÔǰ°²×°µÄÏàÓ¦²úÆ·¡£</Error>
+
+<Error Id="1609">Ó¦Óð²È«ÉèÖÃʱ³ö´í¡£[2] ²»ÊÇÓÐЧµÄÓû§»ò×é¡£Õâ¿ÉÄÜÊÇÈí¼þ°üµÄ´íÎ󣬻òÕßÊÇÁ¬½Óµ½ÍøÂçÉϵÄÓò¿ØÖÆÆ÷µÄ´íÎó¡£¼ì²éÄãµÄÍøÂçÁ¬½Ó£¬È»ºóµ¥»÷¡°ÖØÊÔ¡±£¬»òÕßµ¥»÷¡°È¡Ïû¡±À´½áÊø°²×°¡£{{²»ÄÜÕÒµ½ÓÉÓû§µÄ SID£¬ÏµÍ³´íÎó [3]}}</Error>
+
+<Error Id="1701">¼ü [2] ÎÞЧ¡£ÇëÈ·ÈÏÄúÊäÈëµÄ¼üÊÇ·ñÕýÈ·¡£</Error>
+
+<Error Id="1702">°²×°³ÌÐò±ØÐëÏÈÖØÐÂÆô¶¯ÄúµÄϵͳ£¬È»ºó²ÅÄܼÌÐøÅäÖà [2]¡£µ¥»÷¡°ÊÇ¡±°´Å¥¿ÉÁ¢¼´ÖØÐÂÆô¶¯£»µ¥»÷¡°·ñ¡±°´Å¥Ôò¿ÉÔÚÒÔºóÒÔÈ˹¤·½Ê½Æô¶¯¡£</Error>
+
+<Error Id="1703">Äú±ØÐëÏÈÖØÐÂÆô¶¯ÏµÍ³£¬È»ºó²ÅÄÜʹ¶Ô [2] ×ö³öµÄÅäÖÃÐÞ¸ÄÉúЧ¡£µ¥»÷¡°ÊÇ¡±°´Å¥¿ÉÁ¢¼´ÖØÐÂÆô¶¯£»µ¥»÷¡°·ñ¡±°´Å¥Ôò¿ÉÔÚÒÔºóÒÔÈ˹¤·½Ê½Æô¶¯¡£</Error>
+
+<Error Id="1704">[2] µÄÒ»´Î°²×°¹ý³ÌÕý´¦ÓÚÔÝͣ״̬£¬Äú±ØÐëÏȳ·Ïú¸Ã°²×°¹ý³Ì×ö³öµÄÐ޸ģ¬È»ºó²ÅÄܼÌÐø²Ù×÷¡£ÊÇ·ñ³·ÏúÄÇЩÐ޸ģ¿</Error>
+
+<Error Id="1705">±¾²úÆ·µÄǰһ´Î°²×°ÕýÔÚ½øÐУ¬Äú±ØÐëÏȳ·Ïú¸Ã¹ý³Ì×ö³öµÄÐ޸ģ¬È»ºó²ÅÄܼÌÐø¡£ÊÇ·ñ³·ÏúÄÇЩÐ޸ģ¿</Error>
+
+<Error Id="1706">ÎÞ·¨ÕÒµ½²úÆ· [2] µÄ°²×°³ÌÐò°ü¡£ÇëʹÓð²×°³ÌÐò°ü [3] µÄÓÐЧ¸±±¾ÖØÐ½øÐа²×°¡£</Error>
+
+<Error Id="1707">°²×°Òѳɹ¦Íê³É¡£</Error>
+
+<Error Id="1708">°²×°Ê§°Ü¡£</Error>
+
+<Error Id="1709">²úÆ·: [2] -- [3]</Error>
+
+<Error Id="1710">Äú¿ÉÒÔ½«¼ÆËã»ú»¹ÔÖÁÆäÔʼ״̬£¬Ò²¿ÉÔÚÒÔºó¼ÌÐø°²×°¡£ÊÇ·ñÒª½øÐл¹Ô£¿</Error>
+
+<Error Id="1711">ÏòÓ²ÅÌдÈë°²×°ÐÅϢʱ·¢Éú´íÎó¡£ÇëÈ·ÈÏÊÇ·ñÓÐ×ã¹»µÄÓ²Å̿ռä¿É¹©Ê¹Óã¬È»ºóµ¥»÷¡°ÖØÊÔ¡±°´Å¥£¬»òÕßµ¥»÷¡°È¡Ïû¡±°´Å¥½áÊø°²×°¡£</Error>
+
+<Error Id="1712">ÎÞ·¨ÕÒµ½½«ÄúµÄ¼ÆËã»ú»Ö¸´ÖÁÔʼ״̬ËùÐèµÄÒ»¸ö»ò¶à¸öÎļþ¡£²»ÄܽøÐлָ´²Ù×÷¡£</Error>
+
+<Error Id="1713">[2] ²»Äܰ²×°Ä³Ò»ËùÐè²úÆ·¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ {{ϵͳ´íÎó: [3]¡£}}</Error>
+
+<Error Id="1714">²»ÄÜɾ³ý¾É°æ±¾µÄ [2]¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£ {{ϵͳ´íÎó: [3]¡£}}</Error>
+
+<Error Id="1715">°²×°ÁË [2]</Error>
+
+<Error Id="1716">ÅäÖÃÁË [2]</Error>
+
+<Error Id="1717">ɾ³ýÁË [2]</Error>
+
+<Error Id="1718">Îļþ [2] ±»Êý×ÖÇ©Ãû²ßÂԾܾø¡£</Error>
+
+<Error Id="1719">²»ÄÜ·ÃÎÊ Windows Installer ·þÎñ¡£¿ÉÄÜÊÇÄãÔÚ°²È«Ä£Ê½ÏÂÔËÐÐ Windows£¬»òÕß Windows Installer ûÓÐÕýÈ·µØ°²×°¡£ÇëºÍÄãµÄÖ§³ÖÈËÔ±ÁªÏµÒÔ»ñµÃ°ïÖú¡£</Error>
+
+<Error Id="1720">´Ë Windows Installer Èí¼þ°üÓÐÒ»¸öÎÊÌâ¡£Íê³É´Ë°²×°ÐèÒªµÄ½Å±¾²»ÄÜÔËÐС£ÇëºÍÄãµÄÖ§³ÖÈËÔ±»ò´úÀíÉÌÁªÏµ¡£{{×Ô¶¨Òå²Ù×÷ [2] ½Å±¾´í [3], [4]: [5] ÐÐ [6], ÁÐ [7], [8] }}</Error>
+
+<Error Id="1721">´Ë Windows Installer Èí¼þ°üÓÐÒ»¸öÎÊÌâ¡£Íê³É´Ë°²×°ÐèÒªµÄ³ÌÐò²»ÄÜÔËÐС£ÇëºÍÄãµÄÖ§³ÖÈËÔ±»ò´úÀíÉÌÁªÏµ¡£{{²Ù×÷: [2], λÖÃ: [3], ÃüÁî: [4] }}</Error>
+
+<Error Id="1722">´Ë Windows Installer Èí¼þ°üÓÐÒ»¸öÎÊÌâ¡£×÷Ϊ°²×°µÄÒ»²¿·ÖµÄ³ÌÐò²»Õý³£½áÊø¡£ÇëºÍÄãµÄÖ§³ÖÈËÔ±»ò´úÀíÉÌÁªÏµ¡£{{²Ù×÷: [2], λÖÃ: [3], ÃüÁî: [4] }}</Error>
+
+<Error Id="1723">´Ë Windows Installer Èí¼þ°üÓÐÒ»¸öÎÊÌâ¡£Íê³É´Ë°²×°ÐèÒªµÄ DLL ²»ÄÜÔËÐС£ÇëºÍÄãµÄÖ§³ÖÈËÔ±»ò´úÀíÉÌÁªÏµ¡£{{²Ù×÷: [2], Èë¿Ú: [3], ¿â: [4] }}</Error>
+
+<Error Id="1724">³É¹¦µØÍê³Éɾ³ý¡£</Error>
+
+<Error Id="1725">ɾ³ýʧ°Ü¡£</Error>
+
+<Error Id="1726">³É¹¦µØÍê³É¹«²¼¡£</Error>
+
+<Error Id="1727">¹«²¼Ê§°Ü¡£</Error>
+
+<Error Id="1728">³É¹¦µØÍê³ÉÅäÖá£</Error>
+
+<Error Id="1729">ÅäÖÃʧ°Ü¡£</Error>
+
+<Error Id="1730">Äã±ØÐëÊÇϵͳ¹ÜÀíÔ±²ÅÄÜɾ³ý´ËÓ¦ÓóÌÐò¡£Äã¿ÉÒÔ×÷Ϊϵͳ¹ÜÀíÔ±µÇ¼£¬»òÓëÄãµÄÖ§³ÖС×éÁªÏµÒÔ»ñµÃ°ïÖú¡£</Error>
+
+<Error Id="1801">·¾¶ [2] ÎÞЧ£¬ÇëÖ¸¶¨ÓÐЧ·¾¶¡£</Error>
+
+<Error Id="1802">ÄÚ´æ²»×ã¡£ÇëÏÈ¹Ø±ÕÆäËûÓ¦ÓóÌÐò£¬È»ºóÔÙÖØÊÔ¡£</Error>
+
+<Error Id="1803">Çý¶¯Æ÷ [2] ÖÐûÓдÅÅÌ¡£ÇëÏȲåÈë´ÅÅÌ£¬È»ºóµ¥»÷¡°ÖØÊÔ¡±°´Å¥£»»òÕßµ¥»÷¡°È¡Ïû¡±°´Å¥£¬·µ»ØÇ°ÃæÑ¡ÔñµÄ¾í¡£</Error>
+
+<Error Id="1804">Çý¶¯Æ÷ [2] ÖÐûÓдÅÅÌ¡£ÇëÏȲåÈë´ÅÅÌ£¬È»ºóµ¥»÷¡°ÖØÊÔ¡±°´Å¥£»»òÕßµ¥»÷¡°È¡Ïû¡±°´Å¥£¬·µ»Ø¡°ä¯ÀÀ¡±¶Ô»°¿ò²¢Ñ¡ÔñÆäËû¾í¡£</Error>
+
+<Error Id="1805">Îļþ¼Ð [2] ²»´æÔÚ¡£ÇëÊäÈëij¸öÔÓÐÎļþ¼ÐµÄ·¾¶¡£</Error>
+
+<Error Id="1806">Äú¶ÁÈ¡´ËÎļþ¼ÐµÄȨÏÞ²»¹»¡£</Error>
+
+<Error Id="1807">ÎÞ·¨È·¶¨°²×°ËùÐèµÄÓÐЧ·¾¶¡£</Error>
+
+<Error Id="1901">ÊÔͼ¶ÁȡԴ°²×°Êý¾Ý¿â [2] ʱ³ö´í¡£</Error>
+
+<Error Id="1902">ÕýÔÚ°²ÅÅÖØÐÂÆô¶¯²Ù×÷: ½«Îļþ [2] ÖØÃüÃûΪ [3]¡£Ö»ÓÐÖØÐÂÆô¶¯ºó²Ù×÷²ÅÄÜÍê³É¡£</Error>
+
+<Error Id="1903">ÕýÔÚ°²ÅÅÖØÐÂÆô¶¯²Ù×÷: ɾ³ýÎļþ [2]¡£Ö»ÓÐÖØÐÂÆô¶¯ºó²Ù×÷²ÅÄÜÍê³É¡£</Error>
+
+<Error Id="1904">ÎÞ·¨×¢²áÄ£¿é [2]¡£HRESULT [3]¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1905">ÎÞ·¨³·Ïú×¢²áÄ£¿é [2]¡£HRESULT [3]¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1906">ÎÞ·¨»º´æ°ü [2]¡£´íÎó: [3]¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1907">ÎÞ·¨×¢²á×ÖÌå [2]¡£Çë¼ì²éÄúÊÇ·ñÓÐ×ã¹»µÄȨÏÞ°²×°×ÖÌ壬ÒÔ¼°ÏµÍ³ÊÇ·ñÄܹ»Ö§³Ö¸Ã×ÖÌå¡£</Error>
+
+<Error Id="1908">ÎÞ·¨³·Ïú¶Ô×ÖÌå [2] µÄ×¢²á¡£Çë¼ì²éÄúÊÇ·ñÓÐ×ã¹»µÄȨÏÞɾ³ý×ÖÌå¡£</Error>
+
+<Error Id="1909">ÎÞ·¨´´½¨¿ì½Ý·½Ê½ [2]¡£Çë¼ì²éÄ¿±êÎļþ¼ÐÊÇ·ñ´æÔÚ£¬ÒÔ¼°ÄúÊÇ·ñ¿ÉÒÔ·ÃÎʸÃÎļþ¼Ð¡£</Error>
+
+<Error Id="1910">ÎÞ·¨É¾³ý¿ì½Ý·½Ê½ [2]¡£ÇëÈ·Èϸÿì½Ý·½Ê½Îļþ´æÔÚ£¬²¢ÇÒÄú¿ÉÒÔ·ÃÎʸÃÎļþ¡£</Error>
+
+<Error Id="1911">ÎÞ·¨½«Îļþ [2] ×¢²áµ½ÀàÐÍ¿âÖС£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1912">ÎÞ·¨³·ÏúÎļþ [2] ÔÚÀàÐÍ¿âÖеÄ×¢²á¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1913">ÎÞ·¨¸üРINI Îļþ [2][3]¡£ÇëÈ·ÈϸÃÎļþ´æÔÚ²¢ÇÒÄú¿ÉÒÔ·ÃÎÊËü¡£</Error>
+
+<Error Id="1914">ÎÞ·¨°²ÅÅÔÚÖØÐÂÆô¶¯Ê±ÓÃÎļþ [2] Ìæ»»Îļþ [3]¡£ÇëÈ·ÈÏÄúÓµÓжÔÎļþ [3] µÄдȨÏÞ¡£</Error>
+
+<Error Id="1915">ɾ³ý ODBC Çý¶¯³ÌÐò¹ÜÀíÆ÷ʱ·¢Éú´íÎó£¬ODBC ´íÎó [2]: [3]¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1916">°²×° ODBC Çý¶¯³ÌÐò¹ÜÀíÆ÷ʱ·¢Éú´íÎó£¬ODBC ´íÎó [2]: [3]¡£ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1917">ɾ³ý ODBC Çý¶¯³ÌÐò [4] ʱ·¢Éú´íÎó£¬ODBC ´íÎó [2]: [3]¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞɾ³ý ODBC Çý¶¯³ÌÐò¡£</Error>
+
+<Error Id="1918">°²×° ODBC Çý¶¯³ÌÐò [4] ʱ·¢Éú´íÎó£¬ODBC ´íÎó [2]: [3]¡£ÇëÈ·ÈÏÎļþ [4] ´æÔÚ£¬²¢ÇÒÄú¿ÉÒÔ·ÃÎʸÃÎļþ¡£</Error>
+
+<Error Id="1919">ÅäÖà ODBC Êý¾ÝÔ´ [4] ʱ·¢Éú´íÎó£¬ODBC ´íÎó [2]: [3]¡£ÇëÈ·ÈÏÎļþ [4] ´æÔÚ£¬²¢ÇÒÄú¿ÉÒÔ·ÃÎʸÃÎļþ¡£</Error>
+
+<Error Id="1920">·þÎñ [2]£¨[3]£©µÄÆô¶¯Ê§°Ü¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞÆô¶¯ÏµÍ³·þÎñ¡£</Error>
+
+<Error Id="1921">ÎÞ·¨ÖÕÖ¹·þÎñ [2]£¨[3]£©¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞÖÕֹϵͳ·þÎñ¡£</Error>
+
+<Error Id="1922">ÎÞ·¨É¾³ý·þÎñ [2]£¨[3]£©¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞɾ³ýϵͳ·þÎñ¡£</Error>
+
+<Error Id="1923">ÎÞ·¨°²×°·þÎñ [2]£¨[3]£©¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞ°²×°ÏµÍ³·þÎñ¡£</Error>
+
+<Error Id="1924">ÎÞ·¨¸üл·¾³±äÁ¿ [2]¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞÐ޸Ļ·¾³±äÁ¿¡£</Error>
+
+<Error Id="1925">ÄúûÓÐ×ã¹»µÄȨÏÞΪ¸Ã¼ÆËã»úËùÓÐÓû§Íê³É´Ë°²×°¡£ÇëÒÔ¹ÜÀíÔ±µÄÉí·ÝµÇ¼£¬È»ºóÖØÐ³¢ÊÔ½øÐд˰²×°¡£</Error>
+
+<Error Id="1926">ÎÞ·¨¶ÔÎļþ [3] µÄ°²È«È¨ÏÞ½øÐÐÉèÖᣴíÎó: [2]¡£ÇëÈ·ÈÏÄúÓÐ×ã¹»µÄȨÏÞÐ޸ĴËÎļþµÄ°²È«È¨ÏÞ¡£</Error>
+
+<Error Id="1927">´Ë¼ÆËã»úÉÏδ°²×° Component Services (COM+ 1.0)¡£Òª³É¹¦Íê³É°²×°ÐèÒª Component Services¡£Component Services ÔÚ Windows 2000 ÉÏÓÐЧ¡£</Error>
+
+<Error Id="1928">×¢²á COM+ Ó¦ÓóÌÐòʱ³ö´í¡£ÏêϸÐÅÏ¢£¬ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1929">³·Ïú×¢²á COM+ Ó¦ÓóÌÐòʱ³ö´í¡£ÏêϸÐÅÏ¢£¬ÇëÓëÄúµÄ¼¼ÊõÖ§³ÖÈËÔ±ÁªÏµ¡£</Error>
+
+<Error Id="1930">²»Äܸü¸Ä·þÎñ '[2]' ([3]) µÄÃèÊö¡£</Error>
+
+<Error Id="1931">Windows Installer ·þÎñ²»ÄܸüÐÂϵͳÎļþ [2]£¬ÒòΪ¸ÃÎļþ±» Windows ±£»¤¡£ÎªÊ¹¸Ã³ÌÐòÕýÈ·¹¤×÷£¬Äú¿ÉÄÜÐèÒª¸üвÙ×÷ϵͳ¡£{{³ÌÐò°ü°æ±¾: [3]£¬²Ù×÷ϵͳ±£»¤°æ±¾: [4]}}</Error>
+
+<Error Id="1932">Windows Installer ·þÎñ²»Äܸüб»±£»¤µÄ Windows Îļþ [2]¡£{{³ÌÐò°ü°æ±¾: [3]£¬²Ù×÷ϵͳ±£»¤°æ±¾: [4]£¬SFP ´íÎó: [5]}}</Error>
+
+<Error Id="1933">Windows Installer ·þÎñ²»ÄܸüÐÂÒ»¸ö»ò¶à¸öÊܱ£»¤µÄ Windows Îļþ¡£{{SFP ´íÎó: [2]¡£Êܱ£»¤µÄÎļþÁбí:\r\n[3]}}</Error>
+
+<Error Id="1934">±¾»úÉϵIJßÂÔ½ûÖ¹Óû§°²×°¡£</Error>
+
+<Error Id="1935">°²×°»ã±à×é¼þ [2] ʱ³ö´í¡£HRESULT: [3]¡£{{»ã±à½çÃæ: [4], º¯Êý: [5], »ã±àÃû: [6]}}</Error>
+
+</Include>
--- /dev/null
+<Include>
+
+<ProgressText Action="Advertise" Template="">¥¿¦b«Å¶ÇÀ³¥Îµ{¦¡</ProgressText>
+
+<ProgressText Action="AllocateRegistrySpace" Template="¥i¥ÎªÅ¶¡: [1]">¾ã²zµn¿ýȪŶ¡</ProgressText>
+
+<ProgressText Action="AppSearch" Template="ÄÝ©Ê: [1], ñ¦W: [2]">·j´M¤w¦w¸ËªºÀ³¥Îµ{¦¡</ProgressText>
+
+<ProgressText Action="BindImage" Template="ÀÉ®×: [1]">¥¿¦bµ²¦X¥i°õÀÉ</ProgressText>
+
+<ProgressText Action="CCPSearch" Template="">¥¿¦b·j´M²Å¦X±ø¥óªº²£«~</ProgressText>
+
+<ProgressText Action="CostFinalize" Template="">pºâ©Ò»ÝªÅ¶¡</ProgressText>
+
+<ProgressText Action="CostInitialize" Template="">pºâ©Ò»ÝªÅ¶¡</ProgressText>
+
+<ProgressText Action="CreateFolders" Template="¸ê®Æ§¨: [1]">¥¿¦b«Ø¥ß¸ê®Æ§¨</ProgressText>
+
+<ProgressText Action="CreateShortcuts" Template="±¶®|: [1]">¥¿¦b«Ø¥ß±¶®|</ProgressText>
+
+<ProgressText Action="DeleteServices" Template="ªA°È: [1]">§R°£ªA°È</ProgressText>
+
+<ProgressText Action="DuplicateFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [9], ¤j¤p: [6]">«Ø¥ß«½ÆÀÉ®×</ProgressText>
+
+<ProgressText Action="FileCost" Template="">pºâ©Ò»ÝªÅ¶¡</ProgressText>
+
+<ProgressText Action="FindRelatedProducts" Template="¤w§ä¨ì¤§À³¥Îµ{¦¡: [1]">·j´M¬ÛÃöÀ³¥Îµ{¦¡</ProgressText>
+
+<ProgressText Action="GenerateScript" Template="[1]">¥¿¦b¬°°Ê§@²£¥Í script ¾Þ§@:</ProgressText>
+
+<ProgressText Action="InstallAdminPackage" Template="ÀÉ®×: [1], ¥Ø¿ý: [9], ¤j¤p: [6]">¥¿¦b½Æ»sºô¸ô¦w¸ËÀÉ®×</ProgressText>
+
+<ProgressText Action="InstallFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [9], ¤j¤p: [6]">¥¿¦b½Æ»s·sªºÀÉ®×</ProgressText>
+
+<ProgressText Action="InstallODBC" Template="">¦w¸Ë ODBC ¤¸¥ó</ProgressText>
+
+<ProgressText Action="InstallServices" Template="ªA°È: [2]">¦w¸Ë</ProgressText>
+
+<ProgressText Action="InstallSFPCatalogFile" Template="ÀÉ®×: [1]¡A¨Ì¦s©Ê: [2]">¥¿¦b¦w¸Ë¨t²ÎÃþ§O¥Ø¿ý</ProgressText>
+
+<ProgressText Action="InstallValidate" Template="">ÅçÃÒ¦w¸Ë</ProgressText>
+
+<ProgressText Action="LaunchConditions" Template="">ÀËÅç°õ¦æ±ø¥ó</ProgressText>
+
+<ProgressText Action="MigrateFeatureStates" Template="À³¥Îµ{¦¡: [1]">±q¬ÛÃöÀ³¥Îµ{¦¡Âà´«¥\¯àª¬ºA</ProgressText>
+
+<ProgressText Action="MoveFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [9], ¤j¤p: [6]">¥¿¦b²¾°ÊÀÉ®×</ProgressText>
+
+<ProgressText Action="MsiPublishAssemblies" Template="À³¥Îµ{¦¡¤º®e:[1], ²Õ¦X¦WºÙ:[2]">¥¿¦b¤½§G²Õ¦X¸ê°T</ProgressText>
+
+<ProgressText Action="MsiUnpublishAssemblies" Template="À³¥Îµ{¦¡¤º®e:[1], ²Õ¦X¦WºÙ:[2]">¥¿¦b¸Ñ°£¤½§G²Õ¦X¸ê°T</ProgressText>
+
+<ProgressText Action="PatchFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [2], ¤j¤p: [3]">׸ÉÀÉ®×</ProgressText>
+
+<ProgressText Action="ProcessComponents" Template="">§ó·s¤¸¥óµn¿ý</ProgressText>
+
+<ProgressText Action="PublishComponents" Template="¤¸¥ó ID: [1], Qualifier: [2]">µo§G¦X®æ¤¸¥ó</ProgressText>
+
+<ProgressText Action="PublishFeatures" Template="¥\¯à: [1]">µo§G²£«~¥\¯à</ProgressText>
+
+<ProgressText Action="PublishProduct" Template="">µo§G²£«~¸ê°T</ProgressText>
+
+<ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">µn¿ý Class ¦øªA¾¹</ProgressText>
+
+<ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">µn¿ý COM+ À³¥Îµ{¦¡¤Î¤¸¥ó</ProgressText>
+
+<ProgressText Action="RegisterExtensionInfo" Template="©µ¦ù: [1]">µn¿ý©µ¦ù¦øªA¾¹</ProgressText>
+
+<ProgressText Action="RegisterFonts" Template="¦r«¬: [1]">µn¿ý¦r«¬</ProgressText>
+
+<ProgressText Action="RegisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">µn¿ý MIME ¸ê°T</ProgressText>
+
+<ProgressText Action="RegisterProduct" Template="[1]">¥¿¦bµn¿ý²£«~</ProgressText>
+
+<ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">µn¿ýµ{¦¡ÃѧO</ProgressText>
+
+<ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">µn¿ý type libraries</ProgressText>
+
+<ProgressText Action="RegisterUser" Template="[1]">¥¿¦bµn¿ý¨Ï¥ÎªÌ</ProgressText>
+
+<ProgressText Action="RemoveDuplicateFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [9]">²¾°£«½ÆÀÉ®×</ProgressText>
+
+<ProgressText Action="RemoveEnvironmentStrings" Template="¦W¼µ: [1], È: [2], °Ê§@ [3]">§ó·sÀô¹Ò¦r¦ê</ProgressText>
+
+<ProgressText Action="RemoveExistingProducts" Template="À³¥Îµ{¦¡: [1], ©R¥O¦C: [2]">²¾°£À³¥Îµ{¦¡</ProgressText>
+
+<ProgressText Action="RemoveFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [9]">¥¿¦b²¾°£ÀÉ®×</ProgressText>
+
+<ProgressText Action="RemoveFolders" Template="¸ê®Æ§¨: [1]">¥¿¦b²¾°£¸ê®Æ§¨</ProgressText>
+
+<ProgressText Action="RemoveIniValues" Template="ÀÉ®×: [1], Section: [2], Key: [3], Value: [4]">¥¿¦b²¾°£ INI ÀÉ®×</ProgressText>
+
+<ProgressText Action="RemoveODBC" Template="">¥¿¦b²¾°£ ODBC ¤¸¥ó</ProgressText>
+
+<ProgressText Action="RemoveRegistryValues" Template="¾÷½X: [1], ¦WºÙ: [2]">¥¿¦b²¾°£¨t²Îµn¿ýÈ</ProgressText>
+
+<ProgressText Action="RemoveShortcuts" Template="±¶®|: [1]">¥¿¦b²¾°£±¶®|</ProgressText>
+
+<ProgressText Action="RMCCPSearch" Template="">¥¿¦b·j´M²Å¦X±ø¥óªº²£«~</ProgressText>
+
+<ProgressText Action="Rollback" Template="[1]">´_ì°Ê§@:</ProgressText>
+
+<ProgressText Action="RollbackCleanup" Template="ÀÉ®×: [1]">¥¿¦b²¾°£³Æ¥÷ÀÉ®×</ProgressText>
+
+<ProgressText Action="SelfRegModules" Template="ÀÉ®×: [1], ¸ê®Æ§¨: [2]">¥¿¦bµn¿ý¼Ò²Õ</ProgressText>
+
+<ProgressText Action="SelfUnregModules" Template="ÀÉ®×: [1], ¸ê®Æ§¨: [2]">¸Ñ°£µn¿ý¼Ò²Õ</ProgressText>
+
+<ProgressText Action="SetODBCFolders" Template="">±Ò°Ê ODBC ¥Ø¿ý</ProgressText>
+
+<ProgressText Action="StartServices" Template="ªA°È: [1]">±Ò°ÊªA°È</ProgressText>
+
+<ProgressText Action="StopServices" Template="ªA°È: [1]">°±¤îªA°È</ProgressText>
+
+<ProgressText Action="UnmoveFiles" Template="ÀÉ®×: [1], ¥Ø¿ý: [9]">¥¿¦b²¾°£³Q²¾°ÊªºÀÉ®×</ProgressText>
+
+<ProgressText Action="UnpublishComponents" Template="¤¸¥ó ID: [1], Qualifier: [2]">¸Ñ°£µo§G¦X®æ¤¸¥ó</ProgressText>
+
+<ProgressText Action="UnpublishFeatures" Template="¥\¯à: [1]">¸Ñ°£µo§G²£«~¥\¯à</ProgressText>
+
+<ProgressText Action="UnpublishProduct" Template="">¸Ñ°£µo§G²£«~¸ê°T</ProgressText>
+
+<ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">¸Ñ°£µn¿ý Class ¦øªA¾¹</ProgressText>
+
+<ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">¸Ñ°£µn¿ý COM+ À³¥Îµ{¦¡¤Î¤¸¥ó</ProgressText>
+
+<ProgressText Action="UnregisterExtensionInfo" Template="©µ¦ù: [1]">¸Ñ°£µn¿ý©µ¦ù¦øªA¾¹</ProgressText>
+
+<ProgressText Action="UnregisterFonts" Template="¦r«¬: [1]">¸Ñ°£µn¿ý¦r«¬</ProgressText>
+
+<ProgressText Action="UnregisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">¸Ñ°£µn¿ý MIME ¸ê°T</ProgressText>
+
+<ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">¸Ñ°£µn¿ýµ{¦¡ÃѧO</ProgressText>
+
+<ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">¸Ñ°£µn¿ý type libraries</ProgressText>
+
+<ProgressText Action="WriteEnvironmentStrings" Template="¦W¼µ: [1], È: [2], °Ê§@ [3]">§ó·sÀô¹Ò¦r¦ê</ProgressText>
+
+<ProgressText Action="WriteIniValues" Template="ÀÉ®×: [1], Section: [2], Key: [3], Value: [4]">¼g¤J INI ÀÉ®×</ProgressText>
+
+<ProgressText Action="WriteRegistryValues" Template="¾÷½X: [1], ¦WºÙ: [2], È: [3]">¥¿¦b¼g¤J¨t²Îµn¿ý</ProgressText>
+
+</Include>
--- /dev/null
+<Include>
+
+<Error Id="0">{{ÄY«¿ù»~: }}</Error>
+
+<Error Id="1">{{¿ù»~ [1]. }}</Error>
+
+<Error Id="2">ĵ§i [1]. </Error>
+
+<Error Id="3"></Error>
+
+<Error Id="4">¸ê°T [1]. </Error>
+
+<Error Id="5">Installer ¦b¦w¸Ë³oӫʸˮɹJ¨ì·N¥~¿ù»~¡C³o¥i¯àªí¥Ü³oӫʸ˦³°ÝÃD¡C¿ù»~½X¬O [1]¡C {{¤Þ¼Æ¬O: [2], [3], [4]}}</Error>
+
+<Error Id="6"></Error>
+
+<Error Id="7">{{ºÏºÐ¤wº¡: }}</Error>
+
+<Error Id="8">°Ê§@ [Time]: [1]. [2]</Error>
+
+<Error Id="9">[ProductName]</Error>
+
+<Error Id="10">{[2]}{, [3]}{, [4]}</Error>
+
+<Error Id="11">°T®§Ãþ«¬: [1], ¤Þ¼Æ: [2]</Error>
+
+<Error Id="12">=== ¶}±Ò°O¿ý®É¶¡: [Date] [Time] ===</Error>
+
+<Error Id="13">=== °±¤î°O¿ý®É¶¡: [Date] [Time] ===</Error>
+
+<Error Id="14">°Ê§@¶}©l [Time]: [1].</Error>
+
+<Error Id="15">°Ê§@µ²§ô [Time]: [1]. ¶Ç¦^È [2]¡C</Error>
+
+<Error Id="16">³Ñ¾l®É¶¡: {[1] ¤À }{[2] ¬í}</Error>
+
+<Error Id="17">°O¾ÐÅ餣¨¬¡A½Ð¥ýÃö³¬¨ä¥¦À³¥Îµ{¦¡«á«¸Õ¡C</Error>
+
+<Error Id="18">Installer ¨S¦³¦^À³¡C</Error>
+
+<Error Id="19">Installer ¤w§¹¥þ¤¤¤î¡C</Error>
+
+<Error Id="20">½Ðµy«Ý¡AWindows ¦b³]©w [ProductName]</Error>
+
+<Error Id="21">¥¿¦b»`¶°¥²nªº¸ê°T...</Error>
+
+<Error Id="22">¥¿¦b²¾°£Âª©À³¥Îµ{¦¡...</Error>
+
+<Error Id="23">·Ç³Æ²¾°£Âª©À³¥Îµ{¦¡...</Error>
+
+<Error Id="32">{[ProductName] }¦¨¥\¦a§¹¦¨¦w¸Ë¡C</Error>
+
+<Error Id="33">{[ProductName] }¦w¸Ë¥¢±Ñ¡C</Error>
+
+<Error Id="1101">Ū¨úÀɮ׿ù»~: [2]¡C {{ ¨t²Î¿ù»~ [3]¡C}} ÀˬdÀɮ׬O§_¦s¦b¡A¥H¤Î±z¬O§_¦³Åv¥i¥H¦s¨ú¥¦¡C</Error>
+
+<Error Id="1301">µLªk«Ø¥ßÀÉ®× '[2]'¡C¦P¦Wªº¥Ø¿ý¤w¸g¦s¦b¡A¨ú®ø¦w¸ËµM«á¹Á¸Õ¦w¸Ë¦Ü§Oªº¦ì¸m¡C</Error>
+
+<Error Id="1302">½Ð´¡¤JºÏ¤ù: [2]</Error>
+
+<Error Id="1303">Installer ªºÅv¤£¨¬¡AµLªk¦s¨ú³oӥؿý: [2]¡A¦w¸ËµLªkÄ~Äò¡A½Ð¥ÎºÞ²zûªº¨¥÷µn¤J¡A©Î¬O³sµ¸±zªº¨t²ÎºÞ²zû¡C</Error>
+
+<Error Id="1304">¼g¤JÀɮ׮ɵo¥Í¿ù»~: [2]¡CÀˬd±z¬O§_¦³Åv¥i¥H¦s¨ú¨ºÓ¥Ø¿ý¡C</Error>
+
+<Error Id="1305">Ū¨úÀɮ׮ɵo¥Í¿ù»~: [2]¡C {{ ¨t²Î¿ù»~ [3]¡C}} ÀˬdÀɮ׬O§_¦s¦b¡A¥H¤Î±z¬O§_¦³Åv¥i¥H¦s¨ú¥¦¡C</Error>
+
+<Error Id="1306">¨ä¥¦ªºÀ³¥Îµ{¦¡¹ïÀÉ®× '[2]' ¿W¦û¦s¨ú¡C½ÐÃö³¬©Ò¦³¨ä¥¦ªºÀ³¥Îµ{¦¡¡AµM«á«ö "«¸Õ"¡C</Error>
+
+<Error Id="1307">ºÏºÐªÅ¶¡¤£¨¬¡AµLªk¦w¸Ë³oÓÀÉ®×: [2]¡CÄÀ©ñ¤@¨ÇºÏºÐªÅ¶¡µM«á«¸Õ¡A©Î«ö "©ñ±ó" µ²§ô¡C</Error>
+
+<Error Id="1308">§ä¤£¨ì¨Ó·½ÀÉ®×: [2]¡CÀˬdÀɮ׬O§_¦s¦b¡A¥H¤Î±z¬O§_¦³Åv¥i¥H¦s¨ú¥¦¡C</Error>
+
+<Error Id="1309">Ū¨úÀɮ׿ù»~: [3]¡C {{ ¨t²Î¿ù»~ [2]¡C}} ÀˬdÀɮ׬O§_¦s¦b¡A¥H¤Î±z¬O§_¦³Åv¥i¥H¦s¨ú¥¦¡C</Error>
+
+<Error Id="1310">¼g¤JÀɮ׮ɵo¥Í¿ù»~: [3]¡C {{ ¨t²Î¿ù»~ [2]¡C}}Àˬd±z¬O§_¦³Åv¥i¥H¦s¨ú¨ºÓ¥Ø¿ý¡C</Error>
+
+<Error Id="1311">§ä¤£¨ì¨Ó·½ÀÉ®×{{(cabinet)}}: [2]¡CÀˬdÀɮ׬O§_¦s¦b¡A¥H¤Î±z¬O§_¦³Åv¥i¥H¦s¨ú¥¦¡C</Error>
+
+<Error Id="1312">µLªk«Ø¥ß¥Ø¿ý '[2]'¡C¦P¦WªºÀɮפw¸g¦s¦b¡A½Ð§ó¦W©Î²¾°£¦¹ÀɮסAµM«á«¸Õ¡A©Î«ö "¨ú®ø" µ²§ô¡C</Error>
+
+<Error Id="1313">¥Ø«eµL¨Ï¥ÎºÏºÐ¾÷ [2]¡A½Ð¿ï¨ú§OªººÏºÐ¾÷¡C</Error>
+
+<Error Id="1314">«ü©wªº¸ô®| '[2]' µLªk¨Ï¥Î¡C</Error>
+
+<Error Id="1315">µLªk¼g¤J«ü©wªº¸ê®Æ§¨ [2]¡C</Error>
+
+<Error Id="1316">¹Á¸Õ±qÀÉ®×Ū¨ú®Éµo¥Íºô¸ô¿ù»~: [2]</Error>
+
+<Error Id="1317">¹Á¸Õ«Ø¥ß¥Ø¿ý®Éµo¥Í¿ù»~: [2]</Error>
+
+<Error Id="1318">¹Á¸Õ«Ø¥ß¥Ø¿ý®Éµo¥Íºô¸ô¿ù»~: [2]</Error>
+
+<Error Id="1319">¹Á¸Õ¶}±Ò¨Ó·½Àɮ׮ɵo¥Íºô¸ô¿ù»~: [2]</Error>
+
+<Error Id="1320">«ü©wªº¸ô®|¤Óªø: [2]</Error>
+
+<Error Id="1321">Installer ªºÅv¤£¨¬¡AµLªk×§ï³oÓÀÉ®×: [2]¡C</Error>
+
+<Error Id="1322">¸ê®Æ§¨¸ô®| '[2]' ªº³¡¥÷¶W¹L¨t²Î¤¹³\ªºªø«×¡A©Î°ÑÂø¨t²Î¤£¤¹³\ªº¦r¤¸¡C</Error>
+
+<Error Id="1323">¸ê®Æ§¨¸ô®| '[2]' §t¦³µL®Ä¸ê®Æ§¨¸ô®|¦r¤¸¡C</Error>
+
+<Error Id="1324">¸ê®Æ§¨¸ô®| '[2]' §t¦³µL®Ä¦r¤¸¡C</Error>
+
+<Error Id="1325">'[2]' ¤£¬O¦³®ÄªºµuÀɦW¡C</Error>
+
+<Error Id="1326">¨ú±oÀɮצw¥þ©Ê®Éµo¥Í¿ù»~: [3] GetLastError: [2]</Error>
+
+<Error Id="1327">µL®ÄªººÏºÐ¾÷: [2]</Error>
+
+<Error Id="1328">®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]}}</Error>
+
+<Error Id="1329">¦³¤@Ó¥²»ÝªºÀÉ®×µLªk¦w¸Ë¡A¦]¬°À£ÁYÀÉ [2] ¨Ã¥¼¸g¹L¼Æ¦ìñ¸p¡C¥i¯à¬OÀ£ÁYÀɤw¸g·l·´¡C</Error>
+
+<Error Id="1330">¦³¤@Ó¥²»ÝªºÀÉ®×µLªk¦w¸Ë¡A¦]¬°À£ÁYÀÉ [2] ªº¼Æ¦ìñ³¹µL®Ä¡C¥i¯à¬OÀ£ÁYÀɤw¸g·l·´¡C{{ WinVerifyTrust ¶Ç¦^¿ù»~ [3]¡C}}</Error>
+
+<Error Id="1331">µLªk¥¿½T½Æ»s [2] ÀÉ®×: CRC ¿ù»~¡C</Error>
+
+<Error Id="1332">µLªk¥¿½T²¾°Ê [2] ÀÉ®×: CRC ¿ù»~¡C</Error>
+
+<Error Id="1333">µLªk¥¿½T×¸É [2] ÀÉ®×: CRC ¿ù»~¡C</Error>
+
+<Error Id="1334">µLªk¦w¸ËÀÉ®× '[2]'¡A¦]¬°¦bÀ£ÁYÀÉ '[3]' ¤¤§ä¤£¨ì³oÓÀɮסC¥i¯à¬Oºô¸ôµo¥Í°ÝÃD¡B¥úºÐŪ¨ú¦³°ÝÃD¡B©Î¬O«Ê¸Ë¦³°ÝÃD¡C</Error>
+
+<Error Id="1335">¦w¸Ë¥²»ÝªºÀ£ÁYÀÉ '[2]' ¤w·l·´µLªk¨Ï¥Î¡C¥i¯à¬Oºô¸ôµo¥Í°ÝÃD¡B¥úºÐŪ¨ú¦³°ÝÃD¡B©Î¬O«Ê¸Ë¦³°ÝÃD¡C</Error>
+
+<Error Id="1336">«Ø¥ß¦w¸Ë©Ò¥²»Ýªº¼È¦sÀɮ׮ɵo¥Í¿ù»~¡C{{ ¸ê®Æ§¨: [3]¡C¨t²Î¿ù»~½X: [2]}}</Error>
+
+<Error Id="1401">µLªk«Ø¥ß¾÷½X: [2]¡C {{ ¨t²Î¿ù»~ [3]¡C}} Àˬd±z¬O¦³¨¬°÷ªºÅv¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤Hû¡C</Error>
+
+<Error Id="1402">µLªk¶}±Ò¾÷½X: [2]¡C {{ ¨t²Î¿ù»~ [3]¡C}} Àˬd±z¬O¦³¨¬°÷ªºÅv¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤Hû¡C</Error>
+
+<Error Id="1403">µLªk§R°£È: [2] ±q¾÷½X [3]¡C {{ ¨t²Î¿ù»~ [4]¡C}} Àˬd±z¬O¦³¨¬°÷ªºÅv¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤Hû¡C</Error>
+
+<Error Id="1404">µLªk§R°£¾÷½X: [2]¡C {{ ¨t²Î¿ù»~ [3]¡C}} ½ÐÀˬd±z¬O§_¦³¨¬°÷ªºÅv¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤Hû¡C</Error>
+
+<Error Id="1405">µLªk±q¾÷½X [3] Ū¨úÈ [2]¡C {{ ¨t²Î¿ù»~ [4]¡C}} ½ÐÀˬd±z¬O§_¦³¨¬°÷ªºÅv¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤Hû¡C</Error>
+
+<Error Id="1406">µLªk¼g¤JÈ [2] ¦Ü¾÷½X [3]¡C {{ ¨t²Î¿ù»~ [4]¡C}} ½ÐÀˬd±z¬O§_¦³¨¬°÷ªºÅv¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤Hû¡C</Error>
+
+<Error Id="1407">µLªk¨ú¾÷½X [2] ªºÈ¦WºÙ¡C{{ ¨t²Î¿ù»~ [3]¡C}} ½ÐÀˬd±z¬O§_¦³¨¬°÷ªºÅv¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤Hû¡C</Error>
+
+<Error Id="1408">µLªk¨ú¤l¾÷½X [2] ªºÈ¦WºÙ¡C{{ ¨t²Î¿ù»~ [3]¡C}} ½ÐÀˬd±z¬O§_¦³¨¬°÷ªºÅv¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤Hû¡C</Error>
+
+<Error Id="1409">µLªkŪ¨ú¾÷½X [2] ªº¦w¥þ©Ê¸ê°T¡C{{ ¨t²Î¿ù»~ [3]¡C}} ½ÐÀˬd±z¬O§_¦³¨¬°÷ªºÅv¦s¨ú¸Ó¾÷½X¡A©Î¬O³sµ¸±zªº¤ä´©¤Hû¡C</Error>
+
+<Error Id="1410">µLªk¼W¥[¥i¥Îªºµn¿ýªÅ¶¡¡C¦¹À³¥Îµ{¦¡¶·n [2] KB ¥H¤WªºªÅ¶¡¡C</Error>
+
+<Error Id="1500">¨ä¥¦ªº¦w¸Ë¥¿¦b¶i¦æ¤¤¡A±z¥²¶·§¹¦¨¸Ó¶µ¦w¸Ë¤§«á¤~¯àÄ~Äò¡C</Error>
+
+<Error Id="1501">¦s¨ú¦w¥þ©Ê¸ê®Æ®Éµo¥Í¿ù»~¡A½Ð½T©w Windows Installer ¬O§_¥¿½T¦a³Q³]©w¡AµM«á¦A¸Õ¤@¦¸¡C</Error>
+
+<Error Id="1502">¨Ï¥ÎªÌ '[2]' ¤w¥ý«e¦w¸Ë¤F²£«~ '[3]'¡C¨Ï¥ÎªÌ¥²¶·¦A¤@¦¸°õ¦æ¦w¸Ë¥H¨Ï¥Î¦¹²£«~¡C±z¥Ø«eªº¦w¸Ë±N·|Ä~Äò¡C</Error>
+
+<Error Id="1503">¨Ï¥ÎªÌ '[2]' ¤w¥ý«e¦w¸Ë¤F²£«~ '[3]'¡C¨Ï¥ÎªÌ¥²¶·¦A¤@¦¸°õ¦æ¦w¸Ë¥H¨Ï¥Î¦¹²£«~¡C</Error>
+
+<Error Id="1601">ºÏºÐªÅ¶¡¤£¨¬ -- ºÏºÐ¾÷: '[2]'; »ÝnªÅ¶¡: [3] KB; ¥i¥ÎªÅ¶¡: [4] KB¡AÄÀ©ñ¤@¨ÇªÅ¶¡«á¦A«¸Õ¡C</Error>
+
+<Error Id="1602">±z½T©wn¨ú®ø¶Ü ?</Error>
+
+<Error Id="1603">ÀÉ®× [2][3] ¥¿³Q¤U¦CÀ³¥Îµ{¦¡: '[6]'{{, ¦WºÙ: [4], Id: [5]}}¡AÃö³¬¸ÓÀ³¥Îµ{¦¡µM«á«¸Õ¡C</Error>
+
+<Error Id="1604">¤w¸g¦w¸Ë²£«~ '[2]'¡A·|ªý¤î±z¦w¸Ë³o¶µ²£«~¡A³o¨â¶µ²£«~¤£¬Û®e¡C</Error>
+
+<Error Id="1605">ºÏºÐ°Ï '[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</Error>
+
+<Error Id="1606">µLªk¦s¨úºô¸ô¦ì¸m [2]¡C</Error>
+
+<Error Id="1607">Ä~Äò¦w¸Ë¤§«e¤U¦CÀ³¥Îµ{¦¡À³¸Ó³QÃö³¬:</Error>
+
+<Error Id="1608">µLªk§ä¨ì¥ý«e¦w¸Ë¦b³o¥x¾÷¾¹¤Wªº²£«~¡C</Error>
+
+<Error Id="1609">¦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]}}</Error>
+
+<Error Id="1701">ÃѧO½X [2] µL®Ä¡A½ÐÀˬd±z¿é¤JªºÃѧO½X¬O§_¥¿½T¡C</Error>
+
+<Error Id="1702">Installer ¥²¶·«·s±Ò°Ê±zªº¨t²Î¤~¯àÄ~Äò³]©w [2]¡A«ö "¬O" ¥ß§Y«·s±Ò°Ê¡A«ö "§_"¡A¦pªG±z·Qnµy«á¤â°Ê«·s±Ò°Ê¡C</Error>
+
+<Error Id="1703">Installer ¥²¶·«·s±Ò°Ê±zªº¨t²Î¡A¹ï [2] ³]©wªºÅܧó¤~·|¥Í®Ä¡A«ö "¬O" ¥ß§Y«·s±Ò°Ê¡A«ö "§_"¡A¦pªG±z·Qnµy«á¤â°Ê«·s±Ò°Ê¡C</Error>
+
+<Error Id="1704">¦w¸Ë [2] ¥Ø«e³Q¼È°±¡A±z¥²¶·´_ì¸Ó¦w¸Ë©Ò°µªºÅܧó¤~¯àÄ~Äò¡A±zn´_ì³o¨ÇÅܧó¶Ü ?</Error>
+
+<Error Id="1705">¥t¤@Ó¦w¸Ë³oÓ²£«~ªºµ{¦¡¥¿¦b¶i¦æ¤¤¡A±z¥²¶·´_ì¸Ó¦w¸Ë©Ò°µªºÅܧó¤~¯àÄ~Äò¡A±zn´_ì³o¨ÇÅܧó¶Ü ?</Error>
+
+<Error Id="1706">§ä¤£¨ì²£«~ [2] ªº¦³®Ä¨Ó·½¡AWindows Installer µLªkÄ~Äò¡C½Ð¹Á¸Õ¨Ï¥Î¥¿½Tªº¦w¸Ë«Ê¸Ë '[3]' ¦A¦w¸Ë¤@¦¸¡C</Error>
+
+<Error Id="1707">¦¨¥\§¹¦¨¦w¸Ë¡C</Error>
+
+<Error Id="1708">¦w¸Ë¥¢±Ñ¡C</Error>
+
+<Error Id="1709">²£«~: [2] -- [3]</Error>
+
+<Error Id="1710">±z¥i¥H±N¹q¸£ÁÙ즨¥ý«eªºª¬ºA©Î¬Oµy«áÄ~Äò¦w¸Ë¡A±znÁÙì¶Ü ?</Error>
+
+<Error Id="1711">¼g¤J¦w¸Ë¸ê°T¦ÜºÏºÐ®Éµo¥Í¿ù»~¡A½T©wºÏºÐªºªÅ¶¡¨¬°÷¡A¨Ã«ö "«¸Õ"¡A©Î«ö "¨ú®ø" ¨Óµ²§ô¦w¸Ë¡C</Error>
+
+<Error Id="1712">§ä¤£¨ìÁÙì±zªº¹q¸£¦¨¤§«eªºª¬ºA©Ò»Ýªº¤@өΦhÓÀɮסC</Error>
+
+<Error Id="1713">[2] µLªk¦w¸Ë¨ä¸Ë¨ä¤¤¤@Ó¥²¶·ªº²£«~¡C½Ð±µ¬¢§Þ³N¤ä´©¤Hû¡C {{¨t²Î¿ù»~: [3].}}</Error>
+
+<Error Id="1714">ª©¥»ªº [2] µLªk²¾°£¡C½Ð±µ¬¢§Þ³N¤ä´©¤Hû¡C {{¨t²Î¿ù»~: [3].}}</Error>
+
+<Error Id="1715">¤w¦w¸Ë [2]</Error>
+
+<Error Id="1716">¤w³]©w [2]</Error>
+
+<Error Id="1717">¤w²¾°£ [2]</Error>
+
+<Error Id="1718">ÀÉ®× [2] ¤w³Q¼Æ¦ìñ³¹ì«h©Ò©Úµ´¡C</Error>
+
+<Error Id="1719">µLªk¦s¨ú Windows Installer ªA°È¡C¥i¯à¬O¦]¬° Windows ³B©ó¦w¥þ¼Ò¦¡¡A©Î¬O Windows Installer ¨Ã¥¼¥¿½T¦w¸Ë¡C½Ð³sµ¸±zªº¤ä´©¤Hû¡C</Error>
+
+<Error Id="1720">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] }}</Error>
+
+<Error Id="1721">Windows Installer «Ê¸Ë¦³°ÝÃD¡CµLªk°õ¦æ¦w¸Ë©Ò»Ýªºµ{¦¡¡C½Ð³sµ¸±zªº¤ä´©¤Hû©Î«Ê¸Ë»s³y°Ó¡C {{°Ê§@: [2]¡A¦ì¸m: [3]¡A©R¥O: [4] }}</Error>
+
+<Error Id="1722">Windows Installer «Ê¸Ë¦³°ÝÃD¡C¦w¸Ë®É©Òn°õ¦æªºµ{¦¡¨Ã¥¼¦p¹w´Á§¹¦¨¡C½Ð³sµ¸±zªº¤ä´©¤Hû©Î«Ê¸Ë»s³y°Ó¡C {{°Ê§@: [2]¡A¦ì¸m: [3]¡A©R¥O: [4] }}</Error>
+
+<Error Id="1723">Windows Installer «Ê¸Ë¦³°ÝÃD¡CµLªk°õ¦æ¦w¸Ë©Ò»Ýªº DLL¡C½Ð³sµ¸±zªº¤ä´©¤Hû©Î«Ê¸Ë»s³y°Ó¡C {{°Ê§@: [2]¡A¶µ¥Ø: [3]¡Aµ{¦¡®w: [4] }}</Error>
+
+<Error Id="1724">¤w¦¨¥\²¾°£¡C</Error>
+
+<Error Id="1725">²¾°£¥¢±Ñ¡C</Error>
+
+<Error Id="1726">¤w¦¨¥\³qª¾¡C</Error>
+
+<Error Id="1727">³qª¾¥¢±Ñ¡C</Error>
+
+<Error Id="1728">¤w¦¨¥\³]©w¡C</Error>
+
+<Error Id="1729">³]©w¥¢±Ñ¡C</Error>
+
+<Error Id="1730">±z¥²¶·¬O¨t²ÎºÞ²zû¤~¯à²¾°£³oÓÀ³¥Îµ{¦¡¡C±z¥i¥H¥Î¨t²ÎºÞ²zû¨¤Àµn¤J¨Ó²¾°£µ{¦¡¡A©Î³sµ¸±zªº§Þ³N¤ä´©¤Hû¨Ó¨ó§U±z¡C</Error>
+
+<Error Id="1801">¸ô®| [2] µL®Ä¡A½Ð«ü©w¦³®Äªº¸ô®|¡C</Error>
+
+<Error Id="1802">°O¾ÐÅ餣¨¬¡A½Ð¥ýÃö³¬¨ä¥¦À³¥Îµ{¦¡«á«¸Õ¡C</Error>
+
+<Error Id="1803">ºÏºÐ¾÷ [2] ¤¤¨S¦³ºÏ¤ù¡A½Ð´¡¤JºÏ¤ùµM«á«¸Õ¡A©Î«ö "¨ú®ø" ¦^¨ì¤W¦¸¿ï¨úªººÏºÐ¾÷¥N¸¹¡C</Error>
+
+<Error Id="1804">ºÏºÐ¾÷ [2] ¤¤¨S¦³ºÏ¤ù¡A½Ð´¡¤JºÏ¤ùµM«á«¸Õ¡A©Î«ö "¨ú®ø" ¦^¨ìÂsÄý¹ï¸Ü¤è¶ô¡A¨Ã¿ï¨ú§OªººÏºÐ¾÷¥N¸¹¡C</Error>
+
+<Error Id="1805">¸ê®Æ§¨ [2] ¤£¦s¦b¡A½Ð¿é¤J¤@Ó«ü¦V²{¦s¸ê®Æ§¨ªº¸ô®|¡C</Error>
+
+<Error Id="1806">±zªºÅv¤£¨¬¡AµLªkŪ¨ú³oÓ¸ê®Æ§¨¡C</Error>
+
+<Error Id="1807">µLªk¨M©w¥¿½Tªº¥Ø¦a¸ê®Æ§¨¡C</Error>
+
+<Error Id="1901">¹Á¸ÕŪ¨ú¨Ó·½¦w¸Ë¸ê®Æ®w®Éµo¥Í¿ù»~: [2]¡C</Error>
+
+<Error Id="1902">¥¿¦b±Æ©w«·s¶}¾÷§@·~: ¥¿¦b§ó§ïÀɮצWºÙ [2] ¦¨ [3]¡A¥²¶·«·s¶}¾÷¤~¯à§¹¦¨§@·~¡C</Error>
+
+<Error Id="1903">¥¿¦b±Æ©w«·s¶}¾÷§@·~: ¥¿¦b§R°£ÀÉ®× [2]¡A¥²¶·«·s¶}¾÷¤~¯à§¹¦¨§@·~¡C</Error>
+
+<Error Id="1904">¼Ò²Õ [2] µn¿ý¥¢±Ñ¡C HRESULT [3]. ³sµ¸±zªº¤ä´©¤Hû¡C</Error>
+
+<Error Id="1905">¼Ò²Õ [2] µn¿ý¥¢±Ñ¡C HRESULT [3]. ³sµ¸±zªº¤ä´©¤Hû¡C</Error>
+
+<Error Id="1906">µLªk§Ö¨ú [2]. ¿ù»~: [3]. ½Ð³sµ¸¤ä´©¤Hû¡C</Error>
+
+<Error Id="1907">µLªkµn¿ý¦r«¬ [2]¡C½Ð½T»{±z¦³¨¬°÷ªºÅv¤Î¨t²Î¤ä´©¡C</Error>
+
+<Error Id="1908">µLªk¸Ñ°£µn¿ý¦r«¬ [2]¡C½Ð½T»{±z¦³¨¬°÷ªºÅv¨Ó²¾°£¦r«¬¡C</Error>
+
+<Error Id="1909">µLªk«Ø¥ß±¶®| [2]¡C½Ð½T»{¥Ø¦a¸ê®Æ§¨¬O§_¦s¦b¤Î±zªº¦s¨úÅv¡C</Error>
+
+<Error Id="1910">µLªk²¾°£±¶®| [2]¡C½Ð½T»{¥Ø¦a¸ê®Æ§¨¬O§_¦s¦b¡A¤Î±z¬O§_¦³¦s¨úÅv¡C</Error>
+
+<Error Id="1911">µLªkµn¿ýÀÉ®× [2] ªºÃþ«¬µ{¦¡®w¡C½Ð³sµ¸¨t²Î¤ä´©¤Hû"¡C</Error>
+
+<Error Id="1912">µLªk¸Ñ°£µù¥UÀÉ®× [2] ªºÃþ«¬µ{¦¡®w¡C½Ð³sµ¸¨t²Î¤ä´©¤Hû"¡C</Error>
+
+<Error Id="1913">µLªk§ó·s ini ÀÉ [2][3]¡C ½Ð½T»{Àɮ׬O§_¦s¦b¡A¤Î±z¬O§_¦³¦s¨úÅv¡C</Error>
+
+<Error Id="1914">µLªk¹w©w¦b«¶}¾÷®É±NÀÉ®× [2] ¨ú¥N [3] ¡C½Ð½T»{±z¬O§_¦³ [3] ªº¦s¨úÅv¡C</Error>
+
+<Error Id="1915">²¾°£ ODBC ÅX°Êµ{¦¡ºÞ²zû¿ù»~¡AODBC ¿ù»~ [2]: [3]¡C½Ð³sµ¸¨t²Î¤ä´©¤Hû¡C</Error>
+
+<Error Id="1916">¦w¸Ë ODBC ÅX°Êµ{¦¡ºÞ²zû¿ù»~¡AODBC ¿ù»~ [2]: [3]¡C½Ð³sµ¸¨t²Î¤ä´©¤Hû¡C</Error>
+
+<Error Id="1917">²¾°£ ODBC ÅX°Êµ{¦¡ºÞ²zû¿ù»~[4]¡AODBC ¿ù»~ [2]: [3]¡C½Ð½T»{±z¬O§_¦³¨¬°÷Åv¡C</Error>
+
+<Error Id="1918">¦w¸Ë ODBC ÅX°Êµ{¦¡ºÞ²zû¿ù»~[4]¡AODBC ¿ù»~ [2]: [3]¡C½Ð½T»{ÀÉ®× [4] ¦s¦b¨Ã¥i¦s¨ú¡C</Error>
+
+<Error Id="1919">³]©w ODBC ÅX°Êµ{¦¡ºÞ²zû¿ù»~[4]¡AODBC ¿ù»~ [2]: [3]¡C½Ð½T»{ÀÉ®× [4] ¦s¦b¨Ã¥i¦s¨ú¡C</Error>
+
+<Error Id="1920">ªA°È '[2]' ([3]) µLªk±Ò°Ê¡C½Ð½T»{±z¬O§_¦³¨¬°÷Åv¡C</Error>
+
+<Error Id="1921">ªA°È '[2]' ([3]) µLªk°±¤î¡C½Ð½T»{±z¬O§_¦³¨¬°÷Åv¡C</Error>
+
+<Error Id="1922">ªA°È '[2]' ([3]) µLªk§R°£¡C½Ð½T»{±z¬O§_¦³¨¬°÷Åv¡C</Error>
+
+<Error Id="1923">ªA°È '[2]' ([3]) µLªk¦w¸Ë¡C½Ð½T»{±z¬O§_¦³¨¬°÷Åv¡C</Error>
+
+<Error Id="1924">µLªk§ó·sÀô¹ÒÅÜ¼Æ '[2]'¡C½Ð½T»{±z¬O§_¦³¨¬°÷Åv¡C</Error>
+
+<Error Id="1925">±z¨S¦³¨¬°÷ªºÅv§¹¦¨©Ò¦³¨Ï¥ÎªÌªº¦w¸Ë¡C½Ð¥Î¨t²ÎºÞ²zû¨¥÷µn¤J¦A«·s¦w¸Ë¤@¦¸¡C</Error>
+
+<Error Id="1926">µLªk³]©wÀÉ®× '[3]' ªº¦w¥þ¸ê°T¡C¿ù»~: [2]¡C ½Ð½T»{±z¬O§_¦³¨¬°÷Åv¡C</Error>
+
+<Error Id="1927">Component Services (COM+ 1.0) ¨Ã¥¼¦w¸Ë³o¥x¹q¸£¤W¡C³oÓ¦w¸Ë¥²¶·¦³ Component Services ¤~¯à¦w¸Ë¦¨¥\¡CComponent Services ¤º«Ø¦b Windows 2000¡C</Error>
+
+<Error Id="1928">µn¿ý COM+ À³¥Îµ{¦¡¿ù»~¡C ½Ð±µ¬¢§Þ³N¤ä´©¤Hû¡C</Error>
+
+<Error Id="1929">¸Ñ°£µn¿ý COM+ À³¥Îµ{¦¡¿ù»~¡C ½Ð±µ¬¢§Þ³N¤ä´©¤Hû¡C</Error>
+
+<Error Id="1930">µLªkÅܧóªA°È '[2]' ([3]) ªº±Ôz¡C</Error>
+
+<Error Id="1931">Windows Installer ªA°ÈµLªk§ó°Ê¨t²ÎÀÉ®× [2] ¡A¦]¬°¤w³Q Windows ©Ò«OÅ@¡C±z¥i¯àn§ó·s§@·~¨t²Î¨Ï¦¹µ{¦¡¥¿±`¤u§@¡C{{«Ê¸Ëª©¥»: [3], OS «OÅ@ª©¥»: [4]}}</Error>
+
+<Error Id="1932">Windows Installer ªA°ÈµLªk§ó°Ê¨t²Î«OÅ@ÀÉ®× [2]¡C {{«Ê¸Ëª©¥»: [3], OS «OÅ@ª©¥»: [4], SFP ¿ù»~: [5]}}</Error>
+
+<Error Id="1933">Windows Installer ªA°ÈµLªk§ó·s¬Y¨Ç³Q¨¾¼g«OÅ@ªº Windows ÀɮסC {{SFP ¿ù»~: [2]¡C¨¾¼gÀɮײM³æ:\r\n[3]}}</Error>
+
+<Error Id="1934">³o¥x¾÷¾¹ªºì«h¸T¤î¨Ï¥ÎªÌ¦w¸Ë¡C</Error>
+
+<Error Id="1935">¦b¦w¸Ë²Õ¦X¤¸¥ó [2] ®Éµo¥Í¿ù»~¡CHRESULT: [3]¡C {{²Õ¦X¤¶±: [4]¡A¥\¯à: [5]¡A²Õ¦X¦WºÙ: [6]}}</Error>
+
+</Include>
--- /dev/null
+<?xml version="1.0"?>
+<Include>
+ <!-- This file defines localized strings and language configuration for the
+ installer. Please do not insert any localizable strings directly in any
+ other installer source files. Doing so would break the localization
+ mechanism.
+ -->
+
+ <?ifndef Language?>
+ <!-- Default language is currently english -->
+ <?define Language="en_US"?>
+ <?endif?>
+
+ <!-- (( en_US )) -->
+ <?define Codepage="1252"?>
+ <?define LanguageCode="1033"?>
+
+ <?define Manufacturer="OpenAFS.org"?>
+<?ifdef Debug?>
+ <?define PackageComments="OpenAFS for Windows $(var.NumericVersion) CHECKED"?>
+ <?define ProductComments="OpenAFS for Windows. CHECKED build." ?>
+<?else?>
+ <?define PackageComments="OpenAFS for Windows $(var.NumericVersion)"?>
+ <?define ProductComments="OpenAFS for Windows. Client and server components for using AFS."?>
+<?endif?>
+ <?define Languages="$(var.LanguageCode)"?>
+ <?define ProductName="OpenAFS for Windows"?>
+
+ <!-- Localized packages should have different product codes -->
+ <?define ProductCode="CCAF9E14-976E-46C0-8A1B-A218EAB7ADC5"?>
+
+ <!-- Same goes for localized components -->
+ <?define DocHtmlIndexGuid="B656CA5A-5179-42D8-8972-2F128AEDE751"?>
+ <?define DocHtmlGuid="C9595172-72DF-4F30-8C43-C16583CFB8B1"?>
+ <?define DocHtmlCmdRefGuid="94168F07-82F6-442A-BE10-21EF72CB741D"?>
+ <?define DocHtmlInstallGuid="921E151E-9FD2-49A8-B297-0222E22ECAC7"?>
+ <?define DocHtmlSysAdminGuid="F82AD828-C412-4211-88D7-DF18D5C79DBA"?>
+ <?define DocHtmlRelNotesGuid="CC369D09-B786-412F-B832-720AC06CC3BC"?>
+
+ <!-- other language specific strings are defined in the strings.wxl file -->
+
+ <!-- /(( en_US )) -->
+
+</Include>
--- /dev/null
+<?xml version="1.0" ?>
+<Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'>
+
+ <!-- See config.wxi for the symbols that it defines/asserts -->
+ <?include config.wxi?>
+
+ <!-- See language_config for localization options. -->
+ <?include language_config.wxi?>
+
+ <Product
+ Id="$(var.ProductCode)"
+ Codepage="$(var.Codepage)"
+ Language="$(var.LanguageCode)"
+ Manufacturer="$(var.Manufacturer)"
+ Name="$(var.ProductName)"
+ UpgradeCode="6823EEDD-84FC-4204-ABB3-A80D25779833"
+ Version="$(var.NumericVersion)"
+ >
+
+ <!--
+ Note that we are not specifying an explicit Package Code below. That way WiX will
+ generate a new one for each build. If an explicit one needs to be specified, use :
+ Id="$(var.PackageCode)"
+ -->
+ <Package
+ AdminImage="no"
+ Comments="$(var.PackageComments)"
+ Compressed="yes"
+ Description="$(var.ProductName)"
+ InstallerVersion="110"
+ Keywords="Installer,OpenAFS,$(var.Manufacturer)"
+ Languages="$(var.Languages)"
+ Manufacturer="$(var.Manufacturer)"
+ Platforms="Intel"
+ ShortNames="no"
+ SummaryCodepage="1252"
+ />
+
+ <!-- Launch conditions -->
+ <Condition
+ Message="$(loc.StrLaunchCond)">
+ <![CDATA[VersionNT >= 500]]>
+ </Condition>
+
+ <!-- Global Properties -->
+ <?include property.wxi?>
+
+ <!-- File system and registry settings -->
+ <Directory Id="TARGETDIR" Name="SourceDir">
+ <?include registry.wxi?>
+ <?include files.wxi?>
+ </Directory>
+
+ <!-- Features -->
+ <?include feature.wxi?>
+
+ <!-- User interface -->
+ <?include lang\$(var.Language)\ui.wxi?>
+
+ <!-- Custom actions -->
+ <?ifndef UseDllLoopbackInstaller?>
+ <Binary
+ Id="BIN_instloop"
+ src="$(var.MediaBinDir)instloop.exe"/>
+ <?else?>
+ <Binary
+ Id="BIN_afsLoopback"
+ src="$(var.MediaBinDir)afsloopback.dll"/>
+ <?endif?>
+ <Binary
+ Id="BIN_afsCustom"
+ src="$(var.MediaDllDir)afscustom.dll"/>
+ <?ifdef UseDllLoopbackInstaller?>
+ <CustomAction
+ Id="InstallLoopback"
+ BinaryKey="BIN_afsLoopback"
+ DllEntry="installLoopbackMSI"
+ Execute="deferred"
+ Impersonate="no"
+ />
+ <?ifdef RemoveLoopback?>
+ <CustomAction
+ Id="RemoveLoopback"
+ BinaryKey="BIN_afsLoopback"
+ DllEntry="uninstallLoopbackMSI"
+ Execute="deferred"
+ />
+ <CustomAction
+ Id="RollbackLoopback"
+ BinaryKey="BIN_afsLoopback"
+ DllEntry="uninstallLoopbackMSI"
+ Execute="deferred"
+ />
+ <?endif?>
+ <?else?>
+ <CustomAction
+ Id="InstallLoopback"
+ BinaryKey="BIN_instloop"
+ ExeCommand="-i"
+ Impersonate="no"
+ Execute="deferred"
+ />
+ <?ifdef RemoveLoopback?>
+ <CustomAction
+ Id="RollbackLoopback"
+ BinaryKey="BIN_instloop"
+ ExeCommand="-u"
+ Impersonate="no"
+ Execute="rollback"
+ />
+ <CustomAction
+ Id="RemoveLoopback"
+ BinaryKey="BIN_instloop"
+ ExeCommand="-u"
+ Impersonate="no"
+ Execute="deferred"
+ />
+ <?endif?>
+ <?endif?>
+ <CustomAction
+ Id="InstallNetProvider"
+ BinaryKey="BIN_afsCustom"
+ DllEntry="InstallNetProvider"
+ Execute="oncePerProcess" />
+ <CustomAction
+ Id="RemoveNetProvider"
+ BinaryKey="BIN_afsCustom"
+ DllEntry="UninstallNetProvider"
+ Return="ignore"
+ Execute="oncePerProcess" />
+ <CustomAction
+ Id="RollbackNetProvider"
+ BinaryKey="BIN_afsCustom"
+ DllEntry="UninstallNetProvider"
+ Return="ignore"
+ Execute="rollback" />
+ <CustomAction
+ Id="ConfigureClient"
+ BinaryKey="BIN_afsCustom"
+ DllEntry="ConfigureClientService"
+ Impersonate="no"
+ Execute="deferred" />
+ <CustomAction
+ Id="ConfigureServer"
+ BinaryKey="BIN_afsCustom"
+ DllEntry="ConfigureServerService"
+ Impersonate="no"
+ Execute="deferred" />
+ <CustomAction
+ Id="RemoveNsisInstallation"
+ BinaryKey="BIN_afsCustom"
+ DllEntry="UninstallNsisInstallation"
+ Execute="immediate" />
+ <CustomAction
+ Id="AbortInstallationA"
+ BinaryKey="BIN_afsCustom"
+ DllEntry="AbortMsiImmediate"
+ Execute="immediate" />
+ <CustomAction
+ Id="AbortInstallationB"
+ BinaryKey="BIN_afsCustom"
+ DllEntry="AbortMsiImmediate"
+ Execute="immediate" />
+
+ <!-- Installation Sequences -->
+ <AdvertiseExecuteSequence />
+ <AdminExecuteSequence />
+ <InstallExecuteSequence>
+ <RemoveExistingProducts After="InstallValidate">IBMAFS_UPGRADE OR OPENAFS_UPGRADE</RemoveExistingProducts>
+ <Custom Action="RemoveNsisInstallation" Before="AbortInstallationA">NSISUNINSTALL <> "" AND UILevel >= 4</Custom>
+ <Custom Action="AbortInstallationA" Before="CostInitialize">NSISUNINSTALL <> "" AND UILevel < 4</Custom>
+ <!-- Assert that if the server is going to be installed locally after this session, control center and client are also local -->
+ <Custom Action="AbortInstallationB" After="MigrateFeatureStates">
+ <![CDATA[((&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) ))]]>
+ </Custom>
+ <?ifdef RemoveLoopback?>
+ <Custom Action="RemoveLoopback" After="SelfRegModules">&feaLoopback=2 OR &feaLoopback=3</Custom>
+ <Custom Action="RollbackLoopback" After="RemoveLoopback">&feaLoopback=3</Custom>
+ <Custom Action="InstallLoopback" After="RollbackLoopback">&feaLoopback=3</Custom>
+ <?else?>
+ <Custom Action="InstallLoopback" After="SelfRegModules">&feaLoopback=3</Custom>
+ <?endif?>
+ <Custom Action="RollbackNetProvider" After="WriteRegistryValues">&feaClient=3</Custom>
+ <Custom Action="InstallNetProvider" After="RollbackNetProvider">&feaClient=3</Custom>
+ <Custom Action="RemoveNetProvider" After="InstallNetProvider">&feaClient=2</Custom>
+ <Custom Action="ConfigureClient" After="InstallServices">&feaClient=3</Custom>
+ <Custom Action="ConfigureServer" After="ConfigureClient">&feaServer=3</Custom>
+ <ScheduleReboot After="PublishProduct">&feaClient=3 OR &feaServer=3 OR &feaClient=2 OR &feaServer=2</ScheduleReboot>
+ </InstallExecuteSequence>
+
+ <!-- Related producs -->
+ <!-- MIT's OpenAFS MSI installer -->
+ <Upgrade Id="6823EEDD-84FC-4204-ABB3-A80D25779833">
+ <UpgradeVersion IgnoreRemoveFailure="no" IncludeMaximum="no" Maximum="$(var.NumericVersion)" MigrateFeatures="yes" Property="OPENAFS_UPGRADE" />
+ </Upgrade>
+
+ <!-- MIT's Transarc AFS MSI Installer -->
+ <Upgrade Id="5332B94F-DE38-4927-9EAB-51F4A64193A7">
+ <UpgradeVersion IgnoreRemoveFailure="no" IncludeMaximum="yes" Maximum="3.6.2" MigrateFeatures="no" Property="IBMAFS_UPGRADE" />
+ </Upgrade>
+
+ <!-- openafs.org NSIS installer is detected using other means -->
+ <!-- Please let us know if you want other Installers to be detected and upgraded/removed -->
+
+ <!-- Media -->
+ <Media Id="1" Cabinet="disk1.cab" CompressionLevel="high" EmbedCab="yes" />
+ </Product>
+</Wix>
--- /dev/null
+<?xml version="1.0"?>
+<Include>
+
+ <Property Id="AFSCELLNAME">$(var.CellName)</Property>
+ <Property Id="LOGONOPTIONS">$(var.LogonOptions)</Property>
+ <Property Id="FREELANCEMODE">$(var.FreelanceMode)</Property>
+ <Property Id="USEDNS">$(var.UseDNS)</Property>
+ <Property Id="NOFINDLANABYNAME">$(var.NoFindLanaByName)</Property>
+ <Property Id="MOUNTROOT">$(var.MountRoot)</Property>
+ <Property Id="NETBIOSNAME">$(var.NetbiosName)</Property>
+ <Property Id="RXMAXMTU">$(var.RxMaxMTU)</Property>
+ <Property Id="HIDEDOTFILES">$(var.HideDotFiles)</Property>
+ <Property Id="SECURITYLEVEL">$(var.SecurityLevel)</Property>
+
+ <Property Id="CREDSSTARTUP">1</Property>
+ <Property Id="CREDSAUTOINIT">-a</Property>
+ <Property Id="CREDSRENEWDRMAP">-m</Property>
+ <Property Id="CREDSIPCHDET">-n</Property>
+ <Property Id="CREDSQUIET">-q</Property>
+ <!-- empty property
+ <Property Id="CREDSSHOW"></Property>
+ -->
+
+ <!-- Add/remove programs -->
+ <Property Id="ARPCOMMENTS">$(var.ProductComments)</Property>
+ <Property Id="ARPCONTACT">openafs-info@openafs.org</Property>
+ <Property Id="ARPHELPLINK">http://openafs.org</Property>
+ <Property Id="ARPURLINFOABOUT">http://openafs.org</Property>
+ <Property Id="ComponentDownload">http://openafs.org</Property>
+
+ <!-- Install mode -->
+ <Property Id="ALLUSERS">1</Property>
+ <Property Id="ACTION">INSTALL</Property>
+ <Property Id="INSTALLLEVEL">100</Property>
+
+ <Property Id="InstallMode">Typical</Property>
+
+ <Property Id="AFSCCPATCH">
+ <RegistrySearch Id="rl_AFSCC_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS Control Center\CurrentVersion" Name="PatchLevel" Type="registry" />
+ </Property>
+ <Property Id="AFSCCMAJOR">
+ <RegistrySearch Id="rl_AFSCC_major" Root="HKLM" Key="Software\TransarcCorporation\AFS Control Center\CurrentVersion" Name="MajorVersion" Type="registry" />
+ </Property>
+ <Property Id="AFSCCMINOR">
+ <RegistrySearch Id="rl_AFSCC_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS Control Center\CurrentVersion" Name="MinorVersion" Type="registry" />
+ </Property>
+ <Property Id="AFSCCPATH">
+ <RegistrySearch Id="rl_AFSCC_path" Root="HKLM" Key="Software\TransarcCorporation\AFS Control Center\CurrentVersion" Name="PathName" Type="registry" />
+ </Property>
+
+ <Property Id="AFSCLIENTPATCH">
+ <RegistrySearch Id="rl_AFSClient_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS Client\CurrentVersion" Name="PatchLevel" Type="registry" />
+ </Property>
+ <Property Id="AFSCLIENTMAJOR">
+ <RegistrySearch Id="rl_AFSClient_major" Root="HKLM" Key="Software\TransarcCorporation\AFS Client\CurrentVersion" Name="MajorVersion" Type="registry" />
+ </Property>
+ <Property Id="AFSCLIENTMINOR">
+ <RegistrySearch Id="rl_AFSClient_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS Client\CurrentVersion" Name="MinorVersion" Type="registry" />
+ </Property>
+ <Property Id="AFSCLIENTPATH">
+ <RegistrySearch Id="rl_AFSClient_path" Root="HKLM" Key="Software\TransarcCorporation\AFS Client\CurrentVersion" Name="PathName" Type="registry" />
+ </Property>
+
+ <Property Id="AFSDOCPATCH">
+ <RegistrySearch Id="rl_AFSDoc_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="PatchLevel" Type="registry" />
+ </Property>
+ <Property Id="AFSDOCMAJOR">
+ <RegistrySearch Id="rl_AFSDoc_major" Root="HKLM" Key="Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="MajorVersion" Type="registry" />
+ </Property>
+ <Property Id="AFSDOCMINOR">
+ <RegistrySearch Id="rl_AFSDoc_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="MinorVersion" Type="registry" />
+ </Property>
+ <Property Id="AFSDOCPATH">
+ <RegistrySearch Id="rl_AFSDoc_path" Root="HKLM" Key="Software\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="PathName" Type="registry" />
+ </Property>
+
+ <Property Id="AFSSERVERPATCH">
+ <RegistrySearch Id="rl_AFSServer_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS Server\CurrentVersion" Name="PatchLevel" Type="registry" />
+ </Property>
+ <Property Id="AFSSERVERMAJOR">
+ <RegistrySearch Id="rl_AFSServer_major" Root="HKLM" Key="Software\TransarcCorporation\AFS Server\CurrentVersion" Name="MajorVersion" Type="registry" />
+ </Property>
+ <Property Id="AFSSERVERMINOR">
+ <RegistrySearch Id="rl_AFSServer_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS Server\CurrentVersion" Name="MinorVersion" Type="registry" />
+ </Property>
+ <Property Id="AFSSERVERPATH">
+ <RegistrySearch Id="rl_AFSServer_path" Root="HKLM" Key="Software\TransarcCorporation\AFS Server\CurrentVersion" Name="PathName" Type="registry" />
+ </Property>
+
+ <Property Id="AFSSDKPATCH">
+ <RegistrySearch Id="rl_AFSSDK_patch" Root="HKLM" Key="Software\TransarcCorporation\AFS SDK\CurrentVersion" Name="PatchLevel" Type="registry" />
+ </Property>
+ <Property Id="AFSSDKMAJOR">
+ <RegistrySearch Id="rl_AFSSDK_major" Root="HKLM" Key="Software\TransarcCorporation\AFS SDK\CurrentVersion" Name="MajorVersion" Type="registry" />
+ </Property>
+ <Property Id="AFSSDKMINOR">
+ <RegistrySearch Id="rl_AFSSDK_minor" Root="HKLM" Key="Software\TransarcCorporation\AFS SDK\CurrentVersion" Name="MinorVersion" Type="registry" />
+ </Property>
+ <Property Id="AFSSDKPATH">
+ <RegistrySearch Id="rl_AFSSDK_path" Root="HKLM" Key="Software\TransarcCorporation\AFS SDK\CurrentVersion" Name="PathName" Type="registry" />
+ </Property>
+
+ <Property Id="NSISVERSION">
+ <RegistrySearch Id="rl_NSIS_Ver" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" Name="DisplayVersion" Type="registry" />
+ </Property>
+ <Property Id="NSISUNINSTALL">
+ <RegistrySearch Id="rl_NSIS_Uninst" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" Name="UninstallString" Type="registry" />
+ </Property>
+
+ <Property Id="ABORTREASON">$(loc.StrNsisAbortReason)</Property>
+
+</Include>
--- /dev/null
+<?xml version="1.0"?>
+<Include>
+ <!--
+ This file will be included as a child of the root Directory tag.
+ -->
+ <Component Id="rcm_Server" Guid="D30C980B-8284-49DF-88F5-C90BBFB3E80D">
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\EventLog\Application\AFS Service" Name="*" Id="reg_Server"/>
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\EventLog\Application\AFS Service" Id="reg_Server3"/>
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\EventLog\Application\AFS Service" Name="TypesSupported" Type="integer" Value="7" Id="reg_Server4" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\$(var.NumericVersion)" Name="*" Id="reg_Server5" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\$(var.NumericVersion)" Name="MinorVersion" Type="integer" Value="$(var.VersionMinor)" Id="reg_Server6" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\$(var.NumericVersion)" Id="reg_Server7" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\$(var.NumericVersion)" Name="PatchLevel" Type="integer" Value="$(var.VersionPatch)" Id="reg_Server8" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\$(var.NumericVersion)" Name="MajorVersion" Type="integer" Value="$(var.VersionMajor)" Id="reg_Server9" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\$(var.NumericVersion)" Name="ReleaseType" Value="$(var.ReleaseType)" Id="reg_Server10" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\$(var.NumericVersion)" Name="Software Type" Value="File System" Id="reg_Server11" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\$(var.NumericVersion)" Name="PathName" Value="[AFSDIR]Server" Id="reg_Server12" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\$(var.NumericVersion)" Name="VersionString" Value="$(var.NumericVersion)" Id="reg_Server13" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\$(var.NumericVersion)" Name="InstallDateString" Value="$(var.InstallTimestamp)" Id="reg_Server15" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\$(var.NumericVersion)" Name="Description" Value="$(loc.StrAFSServerDesc)" Id="reg_Server16" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\CurrentVersion" Name="*" Id="reg_Server18" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\CurrentVersion" Name="MinorVersion" Type="integer" Value="$(var.VersionMinor)" Id="reg_Server19" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\CurrentVersion" Id="reg_Server20" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\CurrentVersion" Name="PatchLevel" Type="integer" Value="$(var.VersionPatch)" Id="reg_Server21" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\CurrentVersion" Name="MajorVersion" Type="integer" Value="$(var.VersionMajor)" Id="reg_Server22" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\CurrentVersion" Name="ReleaseType" Value="$(var.ReleaseType)" Id="reg_Server23" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\CurrentVersion" Name="Software Type" Value="File System" Id="reg_Server24" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\CurrentVersion" Name="PathName" Value="[AFSDIR]Server" Id="reg_Server25" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\CurrentVersion" Name="VersionString" Value="$(var.NumericVersion)" Id="reg_Server26" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\CurrentVersion" Name="InstallDateString" Value="$(var.InstallTimestamp)" Id="reg_Server28" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server\CurrentVersion" Name="Description" Value="$(loc.StrAFSServerDesc)" Id="reg_Server29" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server" Name="*" Id="reg_Server31"/>
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Server" Id="reg_Server32" KeyPath="yes"/>
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\EventLog\Application\AFS Service" Name="EventMessageFile" Value="[AFSDIR]Common\afseventmsg_$(var.LanguageCode).dll" Id="reg_Server_$(var.LanguageCode)" />
+ </Component>
+
+ <Component Id="rcm_Control_Center" Guid="2007844F-E101-4C99-81F5-EF9AEAD98821">
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center" KeyPath="yes" Id="reg_Control_Center2" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center" Name="*" Id="reg_Control_Center" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\CurrentVersion" Name="*" Id="reg_Control_Center3" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\CurrentVersion" Name="MinorVersion" Type="integer" Value="$(var.VersionMinor)" Id="reg_Control_Center4" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\CurrentVersion" Id="reg_Control_Center5" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\CurrentVersion" Name="PatchLevel" Type="integer" Value="$(var.VersionPatch)" Id="reg_Control_Center6" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\CurrentVersion" Name="MajorVersion" Type="integer" Value="$(var.VersionMajor)" Id="reg_Control_Center7" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\CurrentVersion" Name="ReleaseType" Value="$(var.ReleaseType)" Id="reg_Control_Center8" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\CurrentVersion" Name="Software Type" Value="File System" Id="reg_Control_Center9" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\CurrentVersion" Name="PathName" Value="[AFSDIR]Control Center" Id="reg_Control_Center10" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\CurrentVersion" Name="VersionString" Value="$(var.NumericVersion)" Id="reg_Control_Center11" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\CurrentVersion" Name="InstallDateString" Value="$(var.InstallTimestamp)" Id="reg_Control_Center13" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\CurrentVersion" Name="Description" Value="$(loc.StrAFSCCDesc)" Id="reg_Control_Center14" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\$(var.NumericVersion)" Name="*" Id="reg_Control_Center16" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\$(var.NumericVersion)" Name="MinorVersion" Type="integer" Value="$(var.VersionMinor)" Id="reg_Control_Center17" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\$(var.NumericVersion)" Id="reg_Control_Center18" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\$(var.NumericVersion)" Name="PatchLevel" Type="integer" Value="$(var.VersionPatch)" Id="reg_Control_Center19" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\$(var.NumericVersion)" Name="MajorVersion" Type="integer" Value="$(var.VersionMajor)" Id="reg_Control_Center20" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\$(var.NumericVersion)" Name="ReleaseType" Value="$(var.ReleaseType)" Id="reg_Control_Center21" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\$(var.NumericVersion)" Name="Software Type" Value="File System" Id="reg_Control_Center22" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\$(var.NumericVersion)" Name="PathName" Value="[AFSDIR]Control Center" Id="reg_Control_Center23" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\$(var.NumericVersion)" Name="VersionString" Value="$(var.NumericVersion)" Id="reg_Control_Center24" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\$(var.NumericVersion)" Name="InstallDateString" Value="$(var.InstallTimestamp)" Id="reg_Control_Center26" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Control Center\$(var.NumericVersion)" Name="Description" Value="$(loc.StrAFSCCDesc)" Id="reg_Control_Center27" />
+ </Component>
+ <Component Id="rcm_Client" Guid="954679B0-547B-4F1E-9A3A-ABFB15B6C724">
+ <Registry Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" Id="reg_Client_NoUninstall2" />
+ <Registry Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" Name="+" Id="reg_Client_NoUninstall" />
+ <Registry Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" Name="{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}" Value="$(loc.StrShlExtDesc)" Id="reg_Client_NoUninstall3" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client" Name="*" Id="reg_Client" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client" Id="reg_Client2" KeyPath="yes" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\CurrentVersion" Name="*" Id="reg_Client5" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\CurrentVersion" Name="MinorVersion" Type="integer" Value="$(var.VersionMinor)" Id="reg_Client6" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\CurrentVersion" Id="reg_Client7" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\CurrentVersion" Name="PatchLevel" Type="integer" Value="$(var.VersionPatch)" Id="reg_Client8" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\CurrentVersion" Name="MajorVersion" Type="integer" Value="$(var.VersionMajor)" Id="reg_Client9" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\CurrentVersion" Name="ReleaseType" Value="$(var.ReleaseType)" Id="reg_Client10" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\CurrentVersion" Name="Software Type" Value="File System" Id="reg_Client11" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\CurrentVersion" Name="PathName" Value="[AFSDIR]Client" Id="reg_Client12" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\CurrentVersion" Name="VersionString" Value="$(var.NumericVersion)" Id="reg_Client13" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\CurrentVersion" Name="Title" Id="reg_Client15" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\CurrentVersion" Name="InstallDateString" Value="$(var.InstallTimestamp)" Id="reg_Client16" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\CurrentVersion" Name="Description" Value="$(loc.StrAFSClientDesc)" Id="reg_Client17" />
+ <Registry Root="HKLM" Key="SOFTWARE\OpenAFS\Client" Name="ShowTrayIcon" Type="integer" Value="1" Id="reg_Client18" />
+ <Registry Root="HKCR" Key="*\shellex\ContextMenuHandlers\AFS Client Shell Extension" Name="*" Id="reg_Client19" />
+ <Registry Root="HKCR" Key="*\shellex\ContextMenuHandlers\AFS Client Shell Extension" Value="{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}" Id="reg_Client20" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" Name="*" Id="reg_Client21" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" Name="AuthentProviderPath" Type="expandable" Value="[AFSDIR]Client\PROGRAM\afslogon.dll" Id="reg_Client22" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" Id="reg_Client23" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" Name="LogonOptions" Type="integer" Value="[LOGONOPTIONS]" Id="reg_Client24" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" Name="VerboseLogging" Type="integer" Value="10" Id="reg_Client25" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" Name="ProviderPath" Type="expandable" Value="[AFSDIR]Client\PROGRAM\afslogon.dll" Id="reg_Client26" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" Name="LogonScript" Type="expandable" Value="[AFSDIR]Client\Program\afscreds.exe -:%s -x -a -m -n -q" Id="reg_Client27" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" Name="Class" Type="integer" Value="2" Id="reg_Client29" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" Name="Name" Value="TransarcAFSDaemon" Id="reg_Client30" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\$(var.NumericVersion)" Name="*" Id="reg_Client31" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\$(var.NumericVersion)" Name="MinorVersion" Type="integer" Value="$(var.VersionMinor)" Id="reg_Client32" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\$(var.NumericVersion)" Id="reg_Client33" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\$(var.NumericVersion)" Name="PatchLevel" Type="integer" Value="$(var.VersionPatch)" Id="reg_Client34" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\$(var.NumericVersion)" Name="MajorVersion" Type="integer" Value="$(var.VersionMajor)" Id="reg_Client35" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\$(var.NumericVersion)" Name="ReleaseType" Value="$(var.ReleaseType)" Id="reg_Client36" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\$(var.NumericVersion)" Name="Software Type" Value="File System" Id="reg_Client37" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\$(var.NumericVersion)" Name="PathName" Value="[AFSDIR]Client" Id="reg_Client38" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\$(var.NumericVersion)" Name="VersionString" Value="$(var.NumericVersion)" Id="reg_Client39" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\$(var.NumericVersion)" Name="Title" Id="reg_Client41" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\$(var.NumericVersion)" Name="InstallDateString" Value="$(var.InstallTimestamp)" Id="reg_Client42" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Client\$(var.NumericVersion)" Name="Description" Value="$(loc.StrAFSClientDesc)" Id="reg_Client43" />
+ <Registry Root="HKCR" Key="FOLDER\shellex\ContextMenuHandlers\AFS Client Shell Extension" Name="*" Id="reg_Client45" />
+ <Registry Root="HKCR" Key="FOLDER\shellex\ContextMenuHandlers\AFS Client Shell Extension" Value="{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}" Id="reg_Client46" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Name="*" Id="reg_Client47" />
+ <Registry Root="HKCR" Key="DIRECTORY\shellex\ContextMenuHandlers\AFS Client Shell Extension" Name="*" Id="reg_Client48" />
+ <Registry Root="HKCR" Key="DIRECTORY\shellex\ContextMenuHandlers\AFS Client Shell Extension" Value="{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}" Id="reg_Client49" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Name="*" Id="reg_Full_Client" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Name="HideDotFiles" Type="integer" Value="[HIDEDOTFILES]" Id="reg_Full_Client2" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Id="reg_Full_Client3" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Name="IsGateway" Type="integer" Value="0" Id="reg_Full_Client4" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Name="RxMaxMTU" Type="integer" Value="[RXMAXMTU]" Id="reg_Full_Client5" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Name="NetbiosName" Value="[NETBIOSNAME]" Id="reg_Full_Client6" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Name="Cell" Value="[AFSCELLNAME]" Id="regAFSCellName" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Name="MountRoot" Value="[MOUNTROOT]" Id="reg_Full_Client7" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Name="NoFindLanaByName" Type="integer" Value="[NOFINDLANABYNAME]" Id="reg_Full_Client8" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Name="FreelanceClient" Type="integer" Value="[FREELANCEMODE]" Id="reg_Full_Client9" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Name="UseDNS" Type="integer" Value="[USEDNS]" Id="reg_Full_Client10" />
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" Name="SecurityLevel" Type="integer" Value="[SECURITYLEVEL]" Id="reg_Full_Client12" />
+ </Component>
+ <Component Id="rcm_Documentation" Guid="97493526-4A5C-4C55-A1D6-EA38841B1B85">
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation" KeyPath="yes" Id="reg_Docs2" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation" Name="*" Id="reg_Docs" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="*" Id="reg_Docs3" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="MinorVersion" Type="integer" Value="$(var.VersionMinor)" Id="reg_Docs4" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Id="reg_Docs5" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="PatchLevel" Type="integer" Value="$(var.VersionPatch)" Id="reg_Docs6" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="MajorVersion" Type="integer" Value="$(var.VersionMajor)" Id="reg_Docs7" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="ReleaseType" Value="$(var.ReleaseType)" Id="reg_Docs8" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="Software Type" Value="File System" Id="reg_Docs9" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="PathName" Value="[AFSDIR]Documentation" Id="reg_Docs10" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="VersionString" Value="$(var.NumericVersion)" Id="reg_Docs11" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="InstallDateString" Value="$(var.InstallTimestamp)" Id="reg_Docs13" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\CurrentVersion" Name="Description" Value="$(loc.StrAFSDocDesc)" Id="reg_Docs14" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\$(var.NumericVersion)" Name="*" Id="reg_Docs16" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\$(var.NumericVersion)" Name="MinorVersion" Type="integer" Value="$(var.VersionMinor)" Id="reg_Docs17" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\$(var.NumericVersion)" Id="reg_Docs18" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\$(var.NumericVersion)" Name="PatchLevel" Type="integer" Value="$(var.VersionPatch)" Id="reg_Docs19" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\$(var.NumericVersion)" Name="MajorVersion" Type="integer" Value="$(var.VersionMajor)" Id="reg_Docs20" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\$(var.NumericVersion)" Name="ReleaseType" Value="$(var.ReleaseType)" Id="reg_Docs21" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\$(var.NumericVersion)" Name="Software Type" Value="File System" Id="reg_Docs22" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\$(var.NumericVersion)" Name="PathName" Value="[AFSDIR]Documentation" Id="reg_Docs23" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\$(var.NumericVersion)" Name="VersionString" Value="$(var.NumericVersion)" Id="reg_Docs24" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\$(var.NumericVersion)" Name="InstallDateString" Value="$(var.InstallTimestamp)" Id="reg_Docs26" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS Supplemental Documentation\$(var.NumericVersion)" Name="Description" Value="$(loc.StrAFSDocDesc)" Id="reg_Docs27" />
+ </Component>
+ <Component Id="rcm_SDK" Guid="648BE65B-C152-412C-A45C-1562512B52DC">
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK" KeyPath="yes" Id="reg_SDK2" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK" Name="*" Id="reg_SDK" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\CurrentVersion" Name="*" Id="reg_SDK3" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\CurrentVersion" Name="MinorVersion" Type="integer" Value="$(var.VersionMinor)" Id="reg_SDK4" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\CurrentVersion" Id="reg_SDK5" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\CurrentVersion" Name="PatchLevel" Type="integer" Value="$(var.VersionPatch)" Id="reg_SDK6" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\CurrentVersion" Name="MajorVersion" Type="integer" Value="$(var.VersionMajor)" Id="reg_SDK7" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\CurrentVersion" Name="ReleaseType" Value="$(var.ReleaseType)" Id="reg_SDK8" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\CurrentVersion" Name="Software Type" Value="File System" Id="reg_SDK9" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\CurrentVersion" Name="PathName" Value="[AFSDIR]lib" Id="reg_SDK10" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\CurrentVersion" Name="VersionString" Value="$(var.NumericVersion)" Id="reg_SDK11" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\CurrentVersion" Name="InstallDateString" Value="$(var.InstallTimestamp)" Id="reg_SDK13" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\CurrentVersion" Name="Description" Value="$(loc.StrAFSSDKDesc)" Id="reg_SDK14" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\$(var.NumericVersion)" Name="*" Id="reg_SDK16" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\$(var.NumericVersion)" Name="MinorVersion" Type="integer" Value="$(var.VersionMinor)" Id="reg_SDK17" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\$(var.NumericVersion)" Id="reg_SDK18" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\$(var.NumericVersion)" Name="PatchLevel" Type="integer" Value="$(var.VersionPatch)" Id="reg_SDK19" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\$(var.NumericVersion)" Name="MajorVersion" Type="integer" Value="$(var.VersionMajor)" Id="reg_SDK20" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\$(var.NumericVersion)" Name="ReleaseType" Value="$(var.ReleaseType)" Id="reg_SDK21" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\$(var.NumericVersion)" Name="Software Type" Value="File System" Id="reg_SDK22" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\$(var.NumericVersion)" Name="PathName" Value="[AFSDIR]lib" Id="reg_SDK23" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\$(var.NumericVersion)" Name="VersionString" Value="$(var.NumericVersion)" Id="reg_SDK24" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\$(var.NumericVersion)" Name="InstallDateString" Value="$(var.InstallTimestamp)" Id="reg_SDK26" />
+ <Registry Root="HKLM" Key="SOFTWARE\TransarcCorporation\AFS SDK\$(var.NumericVersion)" Name="Description" Value="$(loc.StrAFSSDKDesc)" Id="reg_SDK27" />
+ </Component>
+
+ <!-- Work around bug KB30673. Only for Windows 2000. -->
+ <Component Id="rcm_KB301673" Guid="BAF01A13-445B-45BB-A832-DC2E7F98AE6A">
+ <Registry Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\NetBT\Parameters" Name="SmbDeviceEnabled" Type="integer" Value="0" Id="reg_KB301673" KeyPath="yes" />
+ </Component>
+
+ <!-- The loopback adapter is installed by a custom action, which leaves the loopback feature
+ empty. Due to a bug in Windows Installer, when a feature is empty (i.e. contains no components)
+ its install state is set as NULL, instead of Local or Absent. This prevents the feature from
+ being removed when the product is uninstalled. This is just a flag component to add to the
+ loopback feature so that it is not empty. -->
+ <Component Id="rcm_Loopback" Guid="9F9BBDA3-208C-4F93-B81F-313E031B6DDA">
+ <Registry Root="HKLM" Key="SOFTWARE\OpenAFS\Client" Name="LoopbackInstalled" Type="integer" Value="1" Id="reg_Loopback1" />
+ </Component>
+
+</Include>
--- /dev/null
+<?xml version="1.0"?>
+<Include>
+<?ifndef Debug?>
+ <?if $(env.AFSVER_CL) = "1310" ?>
+ <?ifdef comment?>
+ <MergeRef Id="mergeVC1310LibMFC" />
+ <MergeRef Id="mergeVC1310LibCRT" />
+ <?else?>
+ <ComponentRef Id="cmp_VC1310msvcr71"/>
+ <ComponentRef Id="cmp_VC1310msvcp71"/>
+ <ComponentRef Id="cmp_VC1310mfc71"/>
+ <ComponentRef Id="cmp_VC1310mfc71u"/>
+ <?endif?>
+ <?endif?>
+ <?if $(env.AFSVER_CL) = "1300" ?>
+ <MergeRef Id="mergeVC1300LibMFC" />
+ <MergeRef Id="mergeVC1300LibCRT" />
+ <?endif?>
+ <?if $(env.AFSVER_CL) = "1200" ?>
+ <ComponentRef Id="cmpVC1200msvcrt" />
+ <ComponentRef Id="cmpVC1200msvcp60" />
+ <ComponentRef Id="cmpVC1200mfc42" />
+ <?endif?>
+<?else?>
+ <?if $(env.AFSVER_CL) = "1310" ?>
+ <ComponentRef Id="cmp_VC1310msvcr71d" />
+ <ComponentRef Id="cmp_VC1310msvcp71d" />
+ <ComponentRef Id="cmp_VC1310mfc71d" />
+ <ComponentRef Id="cmp_VC1310mfc71ud" />
+ <?endif?>
+ <?if $(env.AFSVER_CL) = "1300" ?>
+ <ComponentRef Id="cmp_VC1300msvcr70d" />
+ <ComponentRef Id="cmp_VC1300msvcp70d" />
+ <ComponentRef Id="cmp_VC1300mfc70d" />
+ <?endif?>
+ <?if $(env.AFSVER_CL) = "1200" ?>
+ <ComponentRef Id="cmp_VC1200msvcrtd" />
+ <ComponentRef Id="cmp_VC1200msvcp60d" />
+ <ComponentRef Id="cmp_VC1200mfc42d" />
+ <?endif?>
+<?endif?>
+</Include>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0"?>
+<Include>
+ <?ifdef Debug?>
+ <?if $(env.AFSVER_CL) = "1310" ?>
+ <ComponentRef Id="cmp_VC1310msvcr71dPDB" />
+ <ComponentRef Id="cmp_VC1310msvcp71dPDB" />
+ <ComponentRef Id="cmp_VC1310mfc71dPDB" />
+ <ComponentRef Id="cmp_VC1310mfc71udPDB" />
+ <?endif?>
+ <?if $(env.AFSVER_CL) = "1300" ?>
+ <ComponentRef Id="cmp_VC1300msvcr70dPDB" />
+ <ComponentRef Id="cmp_VC1300msvcp70dPDB" />
+ <ComponentRef Id="cmp_VC1300mfc70dPDB" />
+ <?endif?>
+ <?if $(env.AFSVER_CL) = "1200" ?>
+ <ComponentRef Id="cmp_VC1200msvcrtdPDB" />
+ <ComponentRef Id="cmp_VC1200msvcp60dPDB" />
+ <ComponentRef Id="cmp_VC1200mfc42dPDB" />
+ <?endif?>
+ <?else?>
+ <?if $(env.AFSVER_CL) = "1310" ?>
+ <ComponentRef Id="cmp_VC1310msvcr71PDB" />
+ <ComponentRef Id="cmp_VC1310msvcp71PDB" />
+ <ComponentRef Id="cmp_VC1310mfc71PDB" />
+ <ComponentRef Id="cmp_VC1310mfc71uPDB" />
+ <?endif?>
+ <?if $(env.AFSVER_CL) = "1300" ?>
+ <ComponentRef Id="cmp_VC1300msvcr70PDB" />
+ <ComponentRef Id="cmp_VC1300msvcp70PDB" />
+ <ComponentRef Id="cmp_VC1300mfc70PDB" />
+ <?endif?>
+ <?if $(env.AFSVER_CL) = "1200" ?>
+ <ComponentRef Id="cmp_VC1200msvcrtPDB" />
+ <ComponentRef Id="cmp_VC1200msvcp60PDB" />
+ <ComponentRef Id="cmp_VC1200mfc42PDB" />
+ <?endif?>
+ <?endif?>
+</Include>
#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 */
if (UBCINFOEXISTS(vp))
return EBUSY;
#endif
- if (avc->vrefCount)
+ if (avc->vrefCount > DARWIN_REFBASE)
return EBUSY;
if (avc->opens)
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();
struct proc *p = current_proc();
struct vnode *vp = AFSTOV(avc);
void *obj;
+#ifdef AFS_DARWIN14_ENV
+ int didhold;
+#endif
if (slept)
*slept = 0;
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);
return;
}
+#ifndef AFS_DARWIN14_ENV
vp->v_usecount--; /* we want the usecount to be 1 */
+#endif
if (slept) {
ReleaseWriteLock(&afs_xvcache);
#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
#include <afs/param.h>
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 <afs/sysincludes.h> /* Standard vendor system headers */
#include <afsincludes.h> /* Afs-based standard headers */
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. */
*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;
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;
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);
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;
#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"
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;
#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"
AFS_STATCNT(osi_SetTime);
TO_USER_SPACE();
- (void)(*sys_settimeofdayp) (tvp, NULL);
+ if (sys_settimeofdayp)
+ (void)(*sys_settimeofdayp) (tvp, NULL);
TO_KERNEL_SPACE();
#endif
}
#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"
#include <linux/syscall.h>
#endif
-#if defined(AFS_LINUX26_ENV)
-#include <linux/vermagic.h>
-#include <linux/compiler.h>
-
-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
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;
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)
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();
#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
#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 */
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;
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);
#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"
(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)))
/* 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;
}
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)
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;
}
if (!code)
d_drop(dp);
#if defined(AFS_LINUX26_ENV)
- lock_kernel();
+ unlock_kernel();
#endif
AFS_GUNLOCK();
crfree(credp);
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();
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);
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);
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,
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();
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} $? $@
#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 */
* 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;
#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 */
* 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;
#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*/) {
#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 */
}
+#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,
fs_freevfs,
#endif
};
+#endif
/*
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) ();
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();
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)
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,
static struct modlfs afsmodlfs = {
&mod_fsops,
"afs filesystem",
+#ifdef AFS_SUN510_ENV
+ &afs_vfsdef
+#else
&afs_vfw
+#endif
};
static struct modlsys afsmodlsys = {
#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)
/*
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;
}
+#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;
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,
#endif
};
struct vnodeops *afs_ops = &Afs_vnodeops;
+#endif
#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
if (flags & (O_WRONLY | O_RDWR)) {
openFlags |= FWRITE;
}
+ if ((openFlags & (FREAD | FWRITE)) == 0) {
+ /* O_RDONLY is 0, so ... */
+ openFlags |= FREAD;
+ }
/*
* Truncate if necessary
return -1;
}
code = uafs_GetAttr(vp, buf);
- VN_RELE(vp);
if (code) {
errno = code;
return -1;
#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 */
#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];
&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();
#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 */
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);
struct VenusFid dirFid;
register struct dcache *tdc;
afs_int32 code = 0;
+ int oldref;
if (NBObtainWriteLock(&avc->lock, 423))
return 0;
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
*/
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;
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 {
#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 */
&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
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. */
#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 */
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);
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;
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;
#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 */
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;
#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 */
#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
*/
-#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;
#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
DECL_PIOCTL(PRxStatPeer);
DECL_PIOCTL(PPrefetchFromTape);
DECL_PIOCTL(PResidencyCmd);
+DECL_PIOCTL(PCallBackAddr);
/*
* A macro that says whether we're going to need HandleClientContext().
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 */
}
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;i<NSERVERS;i++) {
+ for (sa = afs_srvAddrs[i]; sa; sa = sa->next_bkt) {
+ srvAddrCount++;
+ }
+ }
+
+ addrs = afs_osi_Alloc(srvAddrCount * sizeof(*addrs));
+ j = 0;
+ for (i=0;i<NSERVERS;i++) {
+ for (sa = afs_srvAddrs[i]; sa; sa = sa->next_bkt) {
+ if (j >= srvAddrCount) break;
+ addrs[j++] = sa;
+ }
+ }
+
+ ReleaseReadLock(&afs_xsrvAddr);
+ ReleaseReadLock(&afs_xserver);
+
+ for (i=0; i<j; i++) {
+ sa = addrs[i];
+ ts = sa->server;
+ 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;
+}
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,
void afsi_SetServerIPRank(struct srvAddr *sa, struct in_ifaddr *ifa);
#endif
#endif
+extern int afs_HaveCallBacksFrom(struct server *aserver);
#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 */
/* 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;
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;
/* 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;
}
#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)
#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 */
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;
}
#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)
/*
#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);
/* 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.
}
}
#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);
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;
}
}
#include <linux/backing-dev.h>
#include <linux/pagemap.h>
#include <linux/namei.h>
+#ifdef STRUCT_INODE_HAS_I_SECURITY
+#include <linux/security.h>
+#endif
+#include <linux/suspend.h>
#endif
/* Avoid conflicts with coda overloading AFS type namespace. Must precede
* inclusion of uaccess.h.
#include "h/stream.h" /* stops SUN56 socketvar.h errors */
#endif
+#ifdef AFS_SUN510_ENV
+#include <sys/cred_impl.h>
+#endif
+
#include "h/socket.h"
#include "h/socketvar.h"
#include "h/protosw.h"
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)
$(SETKEY_EXEFILE): $(SETKEY_EXEOBJS) $(EXELIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
# build copyauth
$(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
#include <afs/param.h>
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 <afs/stds.h>
#include <afs/pthread_glock.h>
#include <sys/utime.h>
#include <io.h>
#include <WINNT/afssw.h>
-#ifdef AFS_AFSDB_ENV
-#include <cm_dns.h>
-#endif /* AFS_AFSDB_ENV */
#else
#include <sys/socket.h>
#include <netinet/in.h>
#include <afs/afsutil.h>
#include "cellconfig.h"
#include "keys.h"
-
+#ifdef AFS_NT40_ENV
+#ifdef AFS_AFSDB_ENV
+/* cm_dns.h depends on cellconfig.h */
+#include <cm_dns.h>
+#endif /* AFS_AFSDB_ENV */
+#endif
static struct afsconf_servPair serviceTable[] = {
{"afs", 7000,},
{"afscb", 7001,},
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)
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 */
$(DESTDIR)\lib\cm_dns.obj
$(BOSSERVER_EXEFILE): $(BOSSERVER_EXEOBJS) $(BOSSERVER_EXELIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
$(RS_BOS_EXEFILE): $(BOS_EXEOBJS) $(BOS_EXELIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
$(CL_BOS_EXEFILE): $(RS_BOS_EXEFILE)
$(EXEFILE): $(EXEOBJS) $(EXELIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
$(EXEFILE): $(EXEOBJS) $(EXELIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
############################################################################
$(DESTDIR)\lib\cm_dns.obj
$(EXEFILE): $(EXEOBJS) $(EXELIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
############################################################################
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
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
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
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)
-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,
[
-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__"
-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"
-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"
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"
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"
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"
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"
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)
-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
fi
])
-AC_DEFUN(LINUX_NEED_RHCONFIG,[
+AC_DEFUN([LINUX_NEED_RHCONFIG],[
RHCONFIG_SP=""
RHCONFIG_MP=""
if test "x$enable_redhat_buildsys" = "xyes"; then
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
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 <linux/autoconf.h>],
+ [#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(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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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 <linux/fs.h>],
+[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"
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"
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"
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"
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"
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"
-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"
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"
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"
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"
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"
-AC_DEFUN(OPENAFS_OSCONF, [
+AC_DEFUN([OPENAFS_OSCONF], [
dnl defaults, override in case below as needed
XCFLAGS='${DBG} ${OPTMZ}'
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"
SHLIB_LINKER="${MT_CC} -shared"
;;
- i386_linux24)
+ i386_linux*)
CC="gcc -pipe"
CCOBJ="gcc -pipe"
MT_CC="gcc -pipe"
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"
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"
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
#
-AC_DEFUN(AC_FUNC_RES_SEARCH, [
+AC_DEFUN([AC_FUNC_RES_SEARCH], [
ac_cv_func_res_search=no
AC_TRY_LINK([
#include <sys/types.h>
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
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
-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,
[
-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,
[
-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,
[
! 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
#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
# !ENDIF
!IF ("$(APPVER)" == "")
-APPVER=4.0
+APPVER=5.0
!ENDIF
!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
# 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 $@
#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
#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
/* 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
#define AFS_GLOBAL_SUNLOCK
#endif
-#if defined(MODULE) && defined(CONFIG_MODVERSIONS)
-#define MODVERSIONS
-#include <linux/modversions.h>
-#endif
-
#endif /* __KERNEL__ && !DUMP_KERNEL */
#include <afs/afs_sysnames.h>
#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 */
#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"
#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"
#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"
#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"
#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"
#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"
#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"
#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"
#define AFS_USR_SGI64_ENV 1
#define AFS_USR_SGI65_ENV 1
-#include <afs/afs_sysnames.h>
-
/*#define AFS_GLOBAL_SUNLOCK 1 *//* For global locking */
#define AFS_3DISPARES 1 /* Utilize the 3 available disk inode 'spares' */
#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 <afs/afs_sysnames.h>
+
/* Extra kernel definitions (from kdefs file) */
#ifdef KERNEL
#define AFS_UIOFMODE 1 /* Only in afs/afs_vnodeops.c (afs_ustrategy) */
--- /dev/null
+#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 <afs/afs_sysnames.h>
+
+#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 <afs/afs_sysnames.h>
+
+#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) */
--- /dev/null
+#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 <afs/afs_sysnames.h>
+
+#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 <afs/afs_sysnames.h>
+
+#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) */
/* 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 */
#
# 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
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
GetCapabilities(
Capabilities *capabilities
) = 65540;
+
+CallBackRxConnAddr(
+ IN afs_int32 *addr
+) = 65541;
$(DESTDIR)\lib\afs\afsprocmgmt.lib
$(KASERVER): $(KASERVER_OBJS) $(AFSLIBS) $(KASERVER_EXELIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
#build $(OUT)\kadatabase.obj
$(OUT)\kas.res
$(KAS): $(KAS_OBJS) $(AFSLIBS) $(KAUTH_LIBFILE) $(TOKENLIB)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
########### Misc Exes #######################################################
$(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
#include <afs/param.h>
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 <afs/stds.h>
#include <sys/types.h>
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;
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 ; \
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 \
# System specific build commands and flags
<i386_linux26>
-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)
<i386_linux22 i386_linux24>
CCFLAGS = $(COMMON_KERN_CFLAGS) @P5PLUS_KOPTS@
DEFINES = $(COMMON_DEFINES)
<all>
-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)
include Makefile.common
+<i386_linux26>
+LINUX_MODULE_EXT=ko
+<all -i386_linux26>
+LINUX_MODULE_EXT=o
+<all>
+
LINUX_MODULE_NAME=
LOCAL_SMP_DEF=
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
ln -fs ${LINUX_KERNEL_PATH}/include/asm-parisc asm
<alpha_linux_22 alpha_linux_24>
ln -fs ${LINUX_KERNEL_PATH}/include/asm-alpha asm
-<i386_linux22 i386_linux24 i386_linux26>
+<i386_linux22 i386_linux24>
ln -fs ${LINUX_KERNEL_PATH}/include/asm-i386 asm
<i386_umlinux22 i386_umlinux24>
ln -fs ${LINUX_KERNEL_PATH}/include/asm-um asm
ln -fs ${LINUX_KERNEL_PATH}/include/asm-sparc64 asm
<ia64_linux24>
ln -fs ${LINUX_KERNEL_PATH}/include/asm-ia64 asm
-<i386_linux26>
- ln -fs ${LINUX_KERNEL_PATH}/include/asm-i386/mach-default mach
<all>
for m in ${MPS} ; do \
KDIR=${KOBJ}-${LINUX_VERSION}${LINUX_MODULE_NAME}-$$m ; \
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 ../ ; \
+<all>
done
linux_compdirs_libafs: depsrcs libafs
# 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}
libafs.bm: $(LIBAFS_BM)
echo BM Build Complete
+<i386_linux26>
+${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
+
+<all -i386_linux26>
${LIBAFS}: $(AFSAOBJS) $(AFSNONFSOBJS)
$(RM) -f $@
$(LD) -r -o $@ $(AFSAOBJS) $(AFSNONFSOBJS)
${LIBAFS_BM}: $(AFSAOBJS) $(AFSNONFSOBJS)
$(RM) -f $@
$(LD) -r -o $@ $(AFSAOBJS) $(AFSNONFSOBJS)
+<all>
install_libafs: $(INST_LIBAFS)
echo SP Install Complete
KDEFS= -Dsun4c -DSUN4C_60 -DNFSCLIENT -DSYSACCT -DOLDSCSI -DVDDRV -D_KERNEL \
-DSYSV -dn ${ARCH_DEFS}
-<sun4x_57 sun4x_58 sun4x_59 sunx86_57 sunx86_58 sunx86_59>
+<sun4x_57 sun4x_58 sun4x_59 sun4x_510 sunx86_57 sunx86_58 sunx86_59 sunx86_510>
KDEFS_32 =
KDEFS_64 = -xarch=v9
# Name of directory to hold object files and libraries.
<all -sun4x_57 -sun4x_58 -sun4x_59 -sunx86_57 -sunx86_58 -sunx86_59>
KOBJ = MODLOAD
-<sun4x_57 sun4x_58 sun4x_59 sunx86_57 sunx86_58 sunx86_59>
+<sun4x_57 sun4x_58 sun4x_59 sun4x_510 sunx86_57 sunx86_58 sunx86_59 sunx86_510>
KOBJ = MODLOAD32 MODLOAD64
INSTDIRS = single_instdir
DESTDIRS = single_destdir
-<sun4x_57 sun4x_58 sun4x_59 sunx86_57 sunx86_58 sunx86_59>
+<sun4x_57 sun4x_58 sun4x_59 sun4x_510 sunx86_57 sunx86_58 sunx86_59 sunx86_510>
COMPDIRS = solaris_compdirs
INSTDIRS = solaris_instdirs
DESTDIRS = solaris_destdirs
## 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
-<sun4x_57 sun4x_58 sun4x_59 sunx86_57 sunx86_58 sunx86_59>
+<sun4x_57 sun4x_58 sun4x_59 sun4x_510 sunx86_57 sunx86_58 sunx86_59 sunx86_510>
${COMPDIRS} ${INSTDIRS} ${DESTDIRS}:
for t in ${KOBJ} ; do \
echo Building directory: $$t ; \
DEST_LIBAFS = ${DEST}/root.client/usr/vice/etc/modload/${LIBAFS}
DEST_LIBAFSNONFS = ${DEST}/root.client/usr/vice/etc/modload/${LIBAFSNONFS}
-<sun4x_57 sun4x_58 sun4x_59 sunx86_57 sunx86_58 sunx86_59>
+<sun4x_57 sun4x_58 sun4x_59 sun4x_510 sunx86_57 sunx86_58 sunx86_59 sunx86_510>
INST_LIBAFSNONFS = ${DESTDIR}${afskerneldir}/libafs${BITS}.nonfs.o
INST_LIBAFS = ${DESTDIR}${afskerneldir}/libafs${BITS}.o
redhat.sh
sgi_master
sgi_system
+make_kbuild_makefile.pl
--- /dev/null
+#!/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";
+
${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* ) \
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 ;; \
*) \
/*
* 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 <afs/param.h>
#ifndef _C_LABEL
#if !defined(SYSV) && !defined(__ELF__) && !defined(AFS_SUN5_ENV)
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;
return mpp;
}
-static
-macroundefine(name)
- char *name;
+static void
+macroundefine(char *name)
{
register struct macro **mpp, *mp;
}
}
-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;
} 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;
-static
-readline(line)
- char *line;
+static int
+readline(char *line)
{
while (filep >= &files[0]) {
filep->lineno++;
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;
filep--;
fileerror("Can't open %s", arg[1]);
}
- filep->name = strsav(arg[1]);
+ filep->name = strdup(arg[1]);
filep->lineno = 0;
return 1;
}
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)) {
}
}
-static
+static int
usage()
{
fprintf(stderr, "Usage: mpp [-cC][-s][-Dname=value][-Uname][-][files]\n");
#include "AFS_component_version_number.c"
-main(argc, argv)
- int argc;
- char **argv;
+int
+main(int argc, char **argv)
{
argv++, argc--;
if (argc == 0)
* 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 */
* verbose, tell everyone.
*/
verbose_message("Found Unix mountpoint %s", dir);
-
} /*CheckMount */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
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 */
*/
(void)closedir(dp);
return (retval);
-
} /*check */
*------------------------------------------------------------------------*/
static int
-namehash(name)
- register char *name;
-
+namehash(register char *name)
{ /*namehash */
register int hash;
*------------------------------------------------------------------------*/
static int
-ValidUpdtSpec(ftype, uspec)
- u_short ftype;
- u_short uspec;
-
+ValidUpdtSpec(u_short ftype, u_short uspec)
{ /*ValidUpdtSpec */
register struct updatetype *u;
*------------------------------------------------------------------------*/
static int
-ValidateUserName(name, uidp)
- register char *name;
- register short *uidp;
-
+ValidateUserName(register char *name, register short *uidp)
{ /*ValidateUserName */
register afs_int32 uid;
*------------------------------------------------------------------------*/
static int
-ValidateGroupName(name, gidp)
- register char *name;
- register short *gidp;
-
+ValidateGroupName(register char *name, register short *gidp)
{ /*ValidateGroupName */
register afs_int32 gid;
*------------------------------------------------------------------------*/
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 */
*------------------------------------------------------------------------*/
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 */
* just return it.
*/
return (dp);
-
} /*LocatePathNode */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
int
-BuildConfigTree(f)
- FILE *f;
-
+BuildConfigTree(FILE *f)
{ /*BuildConfigTree */
-
int ret;
yyin = f;
ret = yyparse();
return (ret);
-
} /*BuildConfigTree */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
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 */
*------------------------------------------------------------------------*/
void
-ApplyConfigTree(func)
- int (*func) ();
-
+ApplyConfigTree(int (*func) ())
{ /*ApplyConfigTree */
char *path; /*Path to pass on down */
* 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 */
* the path properly before returning.
*/
*--endp = 0;
-
} /*TraverseConfigTree */
*------------------------------------------------------------------------*/
char *
-emalloc(size)
- unsigned size;
-
+emalloc(unsigned int size)
{ /*emalloc */
char *malloc();
exit(ERR_OUTOFMEMORY);
} else
return (ptr);
-
} /*emalloc */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
char *
-ecalloc(nelem, size)
- unsigned nelem;
- unsigned size;
-
+ecalloc(unsigned int nelem, unsigned int size)
{ /*ecalloc */
char *calloc();
*------------------------------------------------------------------------*/
FILE *
-efopen(filename, type)
- char *filename;
- char *type;
-
+efopen(char *filename, char *type)
{ /*efopen */
FILE *f;
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;
} /*putnum */
static char *
-putstr(dp, s)
- register char *dp;
- register char *s;
-
+putstr(register char *dp, register char *s)
{ /*putstr */
while (*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) {
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);
}
*------------------------------------------------------------------------*/
static int
-packageInit(as, arock)
- struct cmd_syndesc *as;
- char *arock;
-
+packageInit(struct cmd_syndesc *as, char *arock)
{ /*packageInit */
-
systype = getsystype();
/*
#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 */
#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)
test_linecounter);
if (yyin != stdin)
fclose(yyin);
-
} /*main */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
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);
echo_ownerinfo(o);
echo_modeinfo(m);
return (0);
-
} /*AddRegEntry */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
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");
*------------------------------------------------------------------------*/
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);
echo_ownerinfo(o);
echo_modeinfo(m);
return (0);
-
} /*AddLnkEntry */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
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);
echo_ownerinfo(o);
echo_modeinfo(m);
return (0);
-
} /*AddBlkEntry */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
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);
echo_ownerinfo(o);
echo_modeinfo(m);
return (0);
-
} /*AddChrEntry */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
int
-AddSktEntry(f)
- char *f;
-
+AddSktEntry(char *f)
{ /*AddSktEntry */
printf("S");
*------------------------------------------------------------------------*/
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);
echo_ownerinfo(o);
echo_modeinfo(m);
return (0);
-
} /*AddPipeEntry */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
int
-echo_updateoptions(u)
- u_short u;
-
+echo_updateoptions(u_short u)
{ /*echo_updateoptions */
-
if (u & U_LOSTFOUND)
printf("X");
if (u & U_RMEXTRA)
printf("Q");
printf("\t");
return (0);
-
} /*echo_updateoptions */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
int
-echo_prototypeinfo(p)
- PROTOTYPE p;
-
+echo_prototypeinfo(PROTOTYPE p)
{ /*echo_prototypeinfo */
-
switch (p.flag) {
case P_FILE:
printf("\t%s", p.info.path);
printf("\t[Neither file nor device]");
break;
}
-
} /*echo_prototypeinfo */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
int
-echo_ownerinfo(o)
- OWNER o;
-
+echo_ownerinfo(OWNER o)
{ /*echo_ownerinfo */
-
if (o.username != NULL)
printf("\t%s", o.username);
else
printf("\t%s", o.groupname);
else
printf("\t[No group info]");
-
} /*echo_ownerinfo */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
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 */
/*------------------------------------------------------------------------
*------------------------------------------------------------------------*/
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);
break;
} /*switch a_ftype */
-
} /*testAddEntry */
/* $$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) {
} /*update */
-static
-UpdateSock(np, path)
- CTREEPTR np;
- char *path;
-
+static void
+UpdateSock(CTREEPTR np, char *path)
{ /*UpdateSock */
(void)dochtyp(np, path);
} /*UpdateSock */
-static
-UpdateDev(np, path)
- CTREEPTR np;
- char *path;
-
+static void
+UpdateDev(CTREEPTR np, char *path)
{ /*UpdateDev */
register int ret;
} /*UpdateDev */
-static
-UpdatePipe(np, path)
- CTREEPTR np;
- char *path;
-
+static void
+UpdatePipe(CTREEPTR np, char *path)
{ /*UpdatePipe */
register int ret;
} /*UpdatePipe */
-static
-UpdateLnk(np, path)
- CTREEPTR np;
- char *path;
-
+static void
+UpdateLnk(CTREEPTR np, char *path)
{ /*UpdateLnk */
register int ret;
} /*UpdateLnk */
-static
-UpdateDir(np, path)
- CTREEPTR np;
- char *path;
-
+static void
+UpdateDir(CTREEPTR np, char *path)
{ /*UpdateDir */
register int ret;
} /*UpdateDir */
-static
-UpdateReg(np, path)
- CTREEPTR np;
- char *path;
-
+static void
+UpdateReg(CTREEPTR np, char *path)
{ /*UpdateReg */
register int ret;
* 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
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))
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)
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
}
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;
*--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)) {
if (np->updtspec & U_REBOOT)
status = status_reboot;
return 0;
-
} /*FixReg */
!ENDIF
$(PTSERVER): $(PTSERVER_EXEOBJS) $(RXKADOBJS) $(PTSERVER_EXELIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
$(DESTDIR)\lib\cm_dns.obj
$(PTS): $(PTS_EXEOBJS) $(PTS_EXELIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
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:
#include <afs/param.h>
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
#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));
}
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;
}
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;
#endif
int
-readUbikHeader(misc)
- struct misc_data *misc;
+readUbikHeader(struct misc_data *misc)
{
int offset, r;
struct ubik_hdr uheader;
}
afs_int32
-ConvertDiskAddress(ea, eiP)
- afs_uint32 ea;
- int *eiP;
+ConvertDiskAddress(afs_uint32 ea, int *eiP)
{
int i;
}
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);
}
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 */
}
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;
}
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;
}
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;
}
afs_int32
-GC(map, misc)
- char map[];
- struct misc_data *misc;
+GC(char map[], struct misc_data *misc)
{
afs_int32 code;
int ei;
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",
}
char *
-QuoteName(s)
- char *s;
+QuoteName(char *s)
{
char *qs;
if (strpbrk(s, " \t")) {
}
afs_int32
-DumpRecreate(map, misc)
- char map[];
- struct misc_data *misc;
+DumpRecreate(char map[], struct misc_data *misc)
{
afs_int32 code;
int ei;
/* 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;
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);
}
afs_int32
-CheckPrDatabase(misc)
- struct misc_data *misc; /* info & statistics */
+CheckPrDatabase(struct misc_data *misc) /* info & statistics */
{
afs_int32 code;
afs_int32 eof;
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;
exit(0);
}
-main(argc, argv)
- int argc;
- char *argv[];
+int
+main(int argc, char *argv[])
{
struct cmd_syndesc *ts;
/* 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);
}
int
-idcount(idmapp, id)
- struct idused **idmapp;
+idcount(struct idused **idmapp, int id)
{
struct idused *idmap;
}
return 0;
}
-
#endif /* SUPERGROUPS */
#include <afs/param.h>
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 <afs/stds.h>
#include <sys/types.h>
#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;
}
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;
#include <afs/param.h>
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 <errno.h>
#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;
}
void
-free_map(parm)
- struct map *parm;
+free_map(struct map *parm)
{
struct bitmap *map, *next;
#ifdef MAP_DEBUG
}
struct map *
-add_map(parm, node)
- struct map *parm;
- long node;
+add_map(struct map *parm, long node)
{
struct bitmap *map;
long bit;
}
struct bitmap *
-simplify_bitmap(map)
- struct bitmap *map;
+simplify_bitmap(struct bitmap *map)
{
struct bitmap **mpp, *mp2;
int i;
}
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;
}
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;
/* 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;
}
struct map *
-and_map(mp1, mp2)
- struct map *mp1, *mp2;
+and_map(struct map *mp1, struct map *mp2)
{
#ifdef MAP_DEBUG
if (Mflag) {
}
struct map *
-or_map(mp1, mp2)
- struct map *mp1, *mp2;
+or_map(struct map *mp1, struct map *mp2)
{
#ifdef MAP_DEBUG
if (Mflag) {
}
struct map *
-not_map(map)
- struct map *map;
+not_map(struct map *map)
{
#ifdef MAP_DEBUG
if (Mflag) {
}
struct map *
-copy_map(parm)
- struct map *parm;
+copy_map(struct map *parm)
{
struct bitmap *result, **mpp, *map;
#ifdef MAP_DEBUG
}
long
-count_map(parm)
- struct map *parm;
+count_map(struct map *parm)
{
long nf;
struct bitmap *map;
}
long
-next_map(parm, node)
- struct map *parm;
- long node;
+next_map(struct map *parm, long node)
{
struct bitmap *map, *lowest;
long bit, mask;
}
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;
}
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) {
}
#ifdef PRINT_MAP_ERROR
-print_map(parm)
- struct map *parm;
+void
+print_map(struct map *parm)
{
struct bitmap *map;
int i, j;
#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;
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;
-/* $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 $ */
/*
*
#include <afs/param.h>
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 <afs/cmd.h> /*Command line parsing */
#include <errno.h>
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 */
}
int
-CommandProc(a_as)
- register struct cmd_syndesc *a_as;
+CommandProc(register struct cmd_syndesc *a_as)
{
register int i;
register long code;
}
int
-display_entry(offset)
- int offset;
+display_entry(int offset)
{
register int i;
}
void
-add_group(id)
- long id;
+add_group(long id)
{
struct grp_list *g;
register long i;
}
void
-display_group(id)
- int id;
+display_group(int id)
{
register int i, offset;
int print_grp = 0;
}
void
-fix_pre(pre)
- struct prentry *pre;
+fix_pre(struct prentry *pre)
{
register int i;
}
char *
-id_to_name(id)
- int id;
+id_to_name(int id)
{
register int offset;
static struct prentry pre;
}
char *
-checkin(pre)
- struct prentry *pre;
+checkin(struct prentry *pre)
{
struct hash_entry *he, *last;
register int id;
}
char *
-check_core(id)
- register int id;
+check_core(register int id)
{
struct hash_entry *he;
he = hat[IDHash(id)];
#include <afs/param.h>
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 <afs/stds.h>
#include <ctype.h>
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.
*/
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;
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;
#include <afs/param.h>
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 <stdio.h>
#include <string.h>
} *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;
}
int
-Sleep(as)
- register struct cmd_syndesc *as;
+Sleep(register struct cmd_syndesc *as)
{
int delay;
if (!as->parms[0].items) {
}
int
-GetGlobals(as)
- register struct cmd_syndesc *as;
+GetGlobals(register struct cmd_syndesc *as)
{
register afs_int32 code;
char *cell;
}
int
-CleanUp(as)
- register struct cmd_syndesc *as;
+CleanUp(register struct cmd_syndesc *as)
{
#if defined(SUPERGROUPS)
if (as && !strcmp(as->name, "help"))
return 0;
}
-CreateGroup(as)
- register struct cmd_syndesc *as;
+int
+CreateGroup(register struct cmd_syndesc *as)
{
register afs_int32 code;
afs_int32 id;
return 0;
}
-CreateUser(as)
- register struct cmd_syndesc *as;
+int
+CreateUser(register struct cmd_syndesc *as)
{
register afs_int32 code;
afs_int32 id;
#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;
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;
}
-AddToGroup(as)
- register struct cmd_syndesc *as;
+int
+AddToGroup(register struct cmd_syndesc *as)
{
register afs_int32 code;
struct cmd_item *u, *g;
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;
return 0;
}
-ListMembership(as)
- register struct cmd_syndesc *as;
+int
+ListMembership(register struct cmd_syndesc *as)
{
register afs_int32 code;
idlist ids;
return 0;
}
-Delete(as)
- register struct cmd_syndesc *as;
+int
+Delete(register struct cmd_syndesc *as)
{
register afs_int32 code;
idlist ids;
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;
return (rcode);
}
-ListEntries(as)
- struct cmd_syndesc *as;
+int
+ListEntries(struct cmd_syndesc *as)
{
afs_int32 code = 0;
afs_int32 flag, startindex, nentries, nextstartindex;
return code;
}
-ChownGroup(as)
- register struct cmd_syndesc *as;
+int
+ChownGroup(register struct cmd_syndesc *as)
{
register afs_int32 code;
char *name;
return code;
}
-ChangeName(as)
- register struct cmd_syndesc *as;
+int
+ChangeName(register struct cmd_syndesc *as)
{
register afs_int32 code;
char *oldname;
return code;
}
-ListMax(as)
- register struct cmd_syndesc *as;
+int
+ListMax(register struct cmd_syndesc *as)
{
register afs_int32 code;
afs_int32 maxUser, maxGroup;
return code;
}
-SetMax(as)
- register struct cmd_syndesc *as;
+int
+SetMax(register struct cmd_syndesc *as)
{
register afs_int32 code;
afs_int32 maxid;
return code;
}
-SetFields(as)
- register struct cmd_syndesc *as;
+int
+SetFields(register struct cmd_syndesc *as)
{
register afs_int32 code;
idlist ids;
return 0;
}
-ListOwned(as)
- register struct cmd_syndesc *as;
+int
+ListOwned(register struct cmd_syndesc *as)
{
register afs_int32 code;
idlist ids;
}
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];
#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;
#include <afs/param.h>
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 <afs/stds.h>
#ifdef AFS_AIX32_ENV
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);
}
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) {
"[-p <number of processes>] [-rebuild] "
"[-groupdepth <depth>] "
"[-enable_peer_stats] [-enable_process_stats] "
+ "[-default_access default_user_access default_group_access] "
"[-help]\n");
#else /* AFS_NT40_ENV */
printf("Usage: ptserver [-database <db path>] "
"[-p <number of processes>] [-rebuild] "
+ "[-default_access default_user_access default_group_access] "
"[-groupdepth <depth>] " "[-help]\n");
#endif
#else
"[-syslog[=FACILITY]] "
"[-p <number of processes>] [-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 <db path>] "
+ "[-default_access default_user_access default_group_access] "
"[-p <number of processes>] [-rebuild] " "[-help]\n");
#endif
#endif
#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"
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];
return code;
}
-
+int
pr_End()
{
int code = 0;
-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;
}
-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;
}
}
-pr_Delete(name)
- char *name;
+int
+pr_Delete(char *name)
{
register afs_int32 code;
afs_int32 id;
return code;
}
-pr_DeleteByID(id)
- afs_int32 id;
+int
+pr_DeleteByID(afs_int32 id)
{
register afs_int32 code;
return code;
}
-pr_AddToGroup(user, group)
- char *user;
- char *group;
+int
+pr_AddToGroup(char *user, char *group)
{
register afs_int32 code;
namelist lnames;
return code;
}
-pr_RemoveUserFromGroup(user, group)
- char *user;
- char *group;
+int
+pr_RemoveUserFromGroup(char *user, char *group)
{
register afs_int32 code;
namelist lnames;
}
-pr_NameToId(names, ids)
- namelist *names;
- idlist *ids;
+int
+pr_NameToId(namelist *names, idlist *ids)
{
register afs_int32 code;
register afs_int32 i;
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;
return code;
}
-
-
-pr_IdToName(ids, names)
- idlist *ids;
- namelist *names;
+int
+pr_IdToName(idlist *ids, namelist *names)
{
register afs_int32 code;
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;
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;
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;
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;
return 0;
}
-
-pr_ListMembers(group, lnames)
- char *group;
- namelist *lnames;
+int
+pr_ListMembers(char *group, namelist *lnames)
{
register afs_int32 code;
afs_int32 gid;
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;
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;
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;
}
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;
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;
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;
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;
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;
return code;
}
-
-pr_ListMaxUserId(mid)
- afs_int32 *mid;
+int
+pr_ListMaxUserId(afs_int32 *mid)
{
register afs_int32 code;
afs_int32 gid;
return code;
}
-pr_SetMaxUserId(mid)
- afs_int32 mid;
+int
+pr_SetMaxUserId(afs_int32 mid)
{
register afs_int32 code;
afs_int32 flag = 0;
return code;
}
-pr_ListMaxGroupId(mid)
- afs_int32 *mid;
+int
+pr_ListMaxGroupId(afs_int32 *mid)
{
register afs_int32 code;
afs_int32 id;
return code;
}
-pr_SetMaxGroupId(mid)
- afs_int32 mid;
+int
+pr_SetMaxGroupId(afs_int32 mid)
{
register afs_int32 code;
afs_int32 flag = 0;
}
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;
return code;
}
-
int
-stolower(s)
- char *s;
+stolower(char *s)
{
while (*s) {
if (isupper(*s))
#include <afs/param.h>
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 <afs/stds.h>
#include <sys/types.h>
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"
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);
* just after ubik_ServerInit.
*/
+void
pt_hook_write()
{
extern struct ubik_dbase *ubik_dbase;
* 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;
* 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;
}
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;
}
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)
}
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;
* 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;
* 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;
* 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;
* 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;
* 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;
* 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;
#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;
}
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;
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;
#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;
}
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;
#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;
}
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);
}
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) {
}
afs_int32
-read_DbHeader(tt)
- struct ubik_trans *tt;
+read_DbHeader(struct ubik_trans *tt)
{
afs_int32 code;
}
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;
}
-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));
#include <afs/param.h>
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 <stdio.h>
#ifdef AFS_NT40_ENV
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)
#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];
}
void
-skip(s)
- char **s;
+skip(char **s)
{
while (**s != ' ' && **s != '\t' && **s != '\0')
(*s)++;
#include <afs/param.h>
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 <stdio.h>
#ifdef AFS_NT40_ENV
#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;
#include <afs/param.h>
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 <ctype.h>
#include <errno.h>
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;
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;
}
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();
}
void
-CreateUser(u)
- int u;
+CreateUser(int u)
{
afs_int32 code;
char name[16];
}
void
-CreateGroup(g)
- int g;
+CreateGroup(int g)
{
afs_int32 code;
char name[16];
}
int
-DeleteRandomId(list)
- afs_int32 *list;
+DeleteRandomId(afs_int32 *list)
{
afs_int32 code;
afs_int32 id;
}
void
-AddUser(u, g)
- int u, g;
+AddUser(int u, int g)
{
afs_int32 code;
afs_int32 ui, gi;
}
void
-RemUser(u, g)
- int u, g;
+RemUser(int u, int g)
{
afs_int32 code;
afs_int32 ui, gi;
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 */
/* 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;
* 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];
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);
}
static int
-MyBeforeProc(as, arock)
- struct cmd_syndesc *as;
- char *arock;
+MyBeforeProc(struct cmd_syndesc *as, char *arock)
{
afs_int32 code;
int i;
}
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,
#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 */
#include <afs/param.h>
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 <sys/types.h>
#include <lock.h>
#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;
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;
}
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;
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;
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;
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;
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;
* new entry */
afs_int32
-AllocBlock(at)
- register struct ubik_trans *at;
+AllocBlock(register struct ubik_trans *at)
{
register afs_int32 code;
afs_int32 temp;
}
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;
}
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;
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;
}
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;
}
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;
}
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;
}
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) {
}
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;
}
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;
}
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;
}
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;
}
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;
/* 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;
/* 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;
}
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;
}
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;
}
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;
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)
#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;
}
return 0; /* actually, should never get here */
}
-
#endif /* SUPERGROUPS */
#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 <linux/version.h>
#ifdef AFS_LINUX22_ENV
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;
#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"
(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];
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];
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)
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();
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)
return NULL;
}
}
+#ifndef AFS_SUN510_ENV
if (sockfs_sounbind == NULL) {
sockfs_sounbind = (int (*)())modlookup("sockfs", "sounbind");
if (sockfs_sounbind == NULL)
if (sockfs_sockfree == NULL)
return NULL;
}
+#endif
accessvp = sockfs_solookup(AF_INET, SOCK_DGRAM, 0, "/dev/udp", &error);
if (accessvp == NULL) {
struct sockaddr_in taddr;
struct iovec dvec;
char c;
+ vnode_t *vp;
AFS_STATCNT(osi_FreeSocket);
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;
}
#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"
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;
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 */
/* Elapsed time package */
/* See rx_clock.h for calling conventions */
+#include <afsconfig.h>
#ifdef KERNEL
#include "afs/param.h"
#else
#include <afs/param.h>
#endif
-#include <afsconfig.h>
#ifdef AFS_SUN59_ENV
#include <sys/time_impl.h>
#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
* Implement caching of rx connections.
*/
+#include <afsconfig.h>
#ifdef UKERNEL
#include "afs/param.h"
#else
#include <afs/param.h>
#endif
-#include <afsconfig.h>
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"
* directory or online at http://www.openafs.org/dl/license10.html
*/
+#include <afsconfig.h>
#ifdef KERNEL
#include "afs/param.h"
#else
#include <afs/param.h>
#endif
-#include <afsconfig.h>
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
#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)
#if defined(AFS_NT40_ENV) || defined(AFS_DJGPP_ENV)
#ifdef AFS_NT40_ENV
#include <winsock2.h>
+#ifndef EWOULDBLOCK
+#define EWOULDBLOCK WSAEWOULDBLOCK
+#endif
#else
#include <sys/socket.h>
#include <netinet/in.h>
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++;
#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);
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)
#include <afs/param.h>
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)
/* 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;
}
switch (code) {
case WSAEINPROGRESS:
case WSAENETRESET:
- case WSAEWOULDBLOCK:
case WSAENOBUFS:
errno = 0;
break;
+ case WSAEWOULDBLOCK:
+ errno = WSAEWOULDBLOCK;
+ break;
default:
errno = EIO;
break;
return code;
}
-
-
-
-
#endif /* AFS_NT40_ENV || AFS_DJGPP_ENV */
#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
/*
* xdr_afsuuid.c, XDR routine for built in afsUUID data type.
*/
-#include "afs/param.h"
#include <afsconfig.h>
+#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
* xdr_rx.c. XDR using RX.
*/
+#include <afsconfig.h>
#ifdef KERNEL
#include "afs/param.h"
#else
#include <afs/param.h>
#endif
-#include <afsconfig.h>
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
#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
}
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";
+}
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 */
rmtsys.ss.c
rmtsys.xdr.c
rmtsysd
+afs.exp
+afsl.exp
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;; \
#include <afs/param.h>
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 <afs/stds.h>
#include <windows.h>
{
char *drivep;
char netbiosName[MAX_NB_NAME_LENGTH];
- char tbuffer[100];
+ char tbuffer[256]="";
HANDLE fh;
if (fileNamep) {
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);
}
/* 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 */
#----------------------------------------------- BUTC
$(BUTCEXE): $(BUTCOBJS) $(BUTCLIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
.c.$(OUT)\obj:
--- /dev/null
+AFS_component_version_number.c
+Makefile
+volserver
$(OUT)\upserver.res
$(UPSERVER): $(USVR_OBJS) $(LIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
############################################################################
$(OUT)\upclient.res
$(UPCLIENT): $(UCLNT_OBJS) $(LIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
############################################################################
#include <afs/param.h>
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 <afs/stds.h>
#ifdef AFS_AIX32_ENV
#include <afs/cellconfig.h>
#include <afs/afsutil.h>
#include <afs/fileutil.h>
+#ifdef AFS_AIX_ENV
+#include <sys/statfs.h>
+#endif
#include "update.h"
#include "global.h"
static int PathsAreEquivalent(char *path1, char *path2);
afs_int32
-GetServer(aname)
- char *aname;
+GetServer(char *aname)
{
register struct hostent *th;
afs_int32 addr;
#endif
int
-main(argc, argv)
- int argc;
- char **argv;
+main(int argc, char **argv)
{
struct rx_connection *conn;
struct rx_call *call;
}
/* 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;
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);
}
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;
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 <sys/statfs.h>
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);
* 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;
* 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 */
#include <afs/param.h>
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 <afs/stds.h>
#ifdef AFS_AIX32_ENV
#include <afs/cellconfig.h>
#include <afs/afsutil.h>
#include <afs/fileutil.h>
+#ifdef AFS_AIX_ENV
+#include <sys/statfs.h>
+#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);
/* 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);
}
return inDir;
}
-
int
-AuthOkay(call, name)
- struct rx_call *call;
- char *name;
+AuthOkay(struct rx_call *call, char *name)
{
int i;
rxkad_level level;
#endif
int
-main(argc, argv)
- int argc;
- char *argv[];
+main(int argc, char *argv[])
{
struct rx_securityClass *securityObjects[3];
struct rx_service *service;
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;
/* 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;
/* 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;
}
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 <sys/statfs.h>
struct statfs tstatfs;
#endif
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);
/* 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;
#include <afs/param.h>
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 <afs/stds.h>
#include <rx/rxkad.h>
#include <stdlib.h>
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));
}
int
-ZapList(ah)
- struct filestr **ah;
+ZapList(struct filestr **ah)
{
register struct filestr *tf, *nf;
for (tf = *ah; tf; tf = nf) {
*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;
-}
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
${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
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* ) \
*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
${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)
${DESTDIR}${bindir}/cmdebug: cmdebug
${INSTALL} -s $? $@
-${DESTDIR}${sbindir}/${KDUMP}: ${KDUMP}
+${DESTDIR}${sbindir}/kdump: kdump-build
-set -x; \
case ${SYS_NAME} in \
sgi_6? ) \
${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 \
${DEST}/bin/up \
${DEST}/etc/fstrace \
${DEST}/bin/cmdebug \
- ${DEST}/etc/${KDUMP} \
- ${DEST}/etc/${KDUMP64}
+ ${DEST}/etc/kdump \
+ ${DEST}/etc/kdump64
#include <afs/param.h>
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 <afs/afs_args.h>
#include <rx/xdr.h>
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)
{
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();
return 0;
}
+
#include <afs/param.h>
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 <stdio.h>
#define VICE
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;
dirty(&asblk);
}
}
+# endif /* AFS_SUN510_ENV */
#endif /* AFS_NEWCG_ENV */
#ifdef AFS_NEWCG_ENV
if (sblock.fs_npsect < sblock.fs_nsect) {
#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);
*/
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 */
#include <afs/param.h>
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 <stdio.h>
#include <stdlib.h>
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)
{
$(VLSERVER): $(VLSERVER_EXEOBJS) $(LIBFILE) $(VLSERVER_EXECLIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
############################################################################
$(DESTDIR)\lib\afs\afspioctl.lib
$(OUT)\vlclient.exe: $(OUT)\vlclient.obj $(LIBFILE) $(VLSERVER_EXECLIBS) $(VLCLIENT_LIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
############################################################################
#include <afs/param.h>
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 <errno.h>
#include <stdio.h>
#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;
#include <afs/param.h>
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 <ctype.h>
#include <errno.h>
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;
}
#endif
Vauxsize = size;
+ Vauxsize_k = size / 1024;
}
close(fd);
vp = AttachVolume(dp, name, &header);
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;
VNDISK_GET_LEN(fileLength, vnode);
Vvnodesize += fileLength;
+ Vvnodesize_k += fileLength / 1024;
if (dsizeOnly)
return;
if (orphaned && (fileLength == 0 || vnode->parent || !offset))
#include <afs/param.h>
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 <stdlib.h>
#include <stdio.h>
#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
volser.h
volserver
vos
+voldump
$(DESTDIR)\lib\afs\afsprocmgmt.lib
$(VOLSERVER_EXEFILE): $(VOLSERVER_EXEOBJS) $(VOLSERVER_EXELIBS) $(EXEC_LIBS)
- $(EXECONLINK)
+ $(EXECONLINK) dnsapi.lib
$(EXEPREP)
############################################################################
$(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)
#include <afs/param.h>
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 <stdio.h>
#include <sys/types.h>
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");
}
/* 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<entry.nServers); i++) {
+ if (entry.serverFlags[i] & ITSROVOL) {
+ m++;
+ if (entry.serverFlags[i] & NEW_REPSITE) s++;
+ }
}
- if (forceflag && !fullrelease)
+ if ((forceflag && !fullrelease) || (s == m) || (s == 0))
fullrelease = 1;
/* Determine which volume id to use and see if it exists */