]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Import OpenAFS 1.3.65. upstream/1.3.65
authorSam Hartman <hartmans@debian.org>
Sat, 26 Jun 2004 07:06:19 +0000 (07:06 +0000)
committerSam Hartman <hartmans@debian.org>
Sat, 26 Jun 2004 07:06:19 +0000 (07:06 +0000)
228 files changed:
Makefile.in
README
README-NT
acinclude.m4
aclocal.m4
configure
configure-libafs
configure-libafs.in
configure.in
src/NTMakefile
src/WINNT/afsd/NTMakefile
src/WINNT/afsd/afsd_flushvol.c
src/WINNT/afsd/afsd_init.c
src/WINNT/afsd/afsd_service.c
src/WINNT/afsd/afskfw-int.h
src/WINNT/afsd/afskfw.c
src/WINNT/afsd/cm_buf.c
src/WINNT/afsd/cm_callback.c
src/WINNT/afsd/cm_cell.c
src/WINNT/afsd/cm_cell.h
src/WINNT/afsd/cm_config.c
src/WINNT/afsd/cm_conn.c
src/WINNT/afsd/cm_conn.h
src/WINNT/afsd/cm_dcache.c
src/WINNT/afsd/cm_dns.c
src/WINNT/afsd/cm_dns.h
src/WINNT/afsd/cm_freelance.c
src/WINNT/afsd/cm_freelance.h
src/WINNT/afsd/cm_ioctl.c
src/WINNT/afsd/cm_ioctl.h
src/WINNT/afsd/cm_scache.c
src/WINNT/afsd/cm_server.c
src/WINNT/afsd/cm_server.h
src/WINNT/afsd/cm_vnodeops.c
src/WINNT/afsd/cm_vnodeops.h
src/WINNT/afsd/fs.c
src/WINNT/afsd/fs_utils.c
src/WINNT/afsd/smb.c
src/WINNT/afsd/smb.h
src/WINNT/afsd/smb3.c
src/WINNT/afsd/smb_ioctl.c
src/WINNT/install/NSIS/AFSCreds.ini [new file with mode: 0644]
src/WINNT/install/NSIS/NTMakefile
src/WINNT/install/NSIS/OpenAFS.nsi
src/WINNT/install/loopback/NTMakefile [new file with mode: 0644]
src/WINNT/install/loopback/instloop.c [new file with mode: 0644]
src/WINNT/install/loopback/loopbackutils.cpp [new file with mode: 0644]
src/WINNT/install/loopback/loopbackutils.h [new file with mode: 0644]
src/WINNT/install/loopback/renameconnection.cpp [new file with mode: 0644]
src/WINNT/install/loopback/wmi.cpp [new file with mode: 0644]
src/WINNT/install/wix/Binary/New.ico [new file with mode: 0644]
src/WINNT/install/wix/Binary/Up.ico [new file with mode: 0644]
src/WINNT/install/wix/Binary/bannrbmp.bmp [new file with mode: 0644]
src/WINNT/install/wix/Binary/completi.ico [new file with mode: 0644]
src/WINNT/install/wix/Binary/custicon.ico [new file with mode: 0644]
src/WINNT/install/wix/Binary/dlgbmp.bmp [new file with mode: 0644]
src/WINNT/install/wix/Binary/exclamic.ico [new file with mode: 0644]
src/WINNT/install/wix/Binary/info.ico [new file with mode: 0644]
src/WINNT/install/wix/Binary/insticon.ico [new file with mode: 0644]
src/WINNT/install/wix/Binary/removico.ico [new file with mode: 0644]
src/WINNT/install/wix/Binary/repairic.ico [new file with mode: 0644]
src/WINNT/install/wix/CellServDB [new file with mode: 0644]
src/WINNT/install/wix/Icon/ico_AcctManager.ico [new file with mode: 0644]
src/WINNT/install/wix/Icon/ico_Help.ico [new file with mode: 0644]
src/WINNT/install/wix/Icon/ico_ServerManager.ico [new file with mode: 0644]
src/WINNT/install/wix/Icon/ico_afscreds.ico [new file with mode: 0644]
src/WINNT/install/wix/Icon/ico_afssvrcfg.ico [new file with mode: 0644]
src/WINNT/install/wix/NTMakefile [new file with mode: 0644]
src/WINNT/install/wix/config.wxi [new file with mode: 0644]
src/WINNT/install/wix/custom/NTMakefile [new file with mode: 0644]
src/WINNT/install/wix/custom/afscustom.cpp [new file with mode: 0644]
src/WINNT/install/wix/custom/afscustom.h [new file with mode: 0644]
src/WINNT/install/wix/feature.wxi [new file with mode: 0644]
src/WINNT/install/wix/files.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/de_DE/ActionText.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/de_DE/Error.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/en_US/ActionText.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/en_US/Error.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/en_US/strings.wxl [new file with mode: 0644]
src/WINNT/install/wix/lang/en_US/ui.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/es_ES/ActionText.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/es_ES/Error.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/ja_JP/ActionText.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/ja_JP/Error.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/ko_KR/ActionText.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/ko_KR/Error.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/pt_BR/ActionText.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/pt_BR/Error.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/zh_CN/ActionText.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/zh_CN/Error.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/zh_TW/ActionText.wxi [new file with mode: 0644]
src/WINNT/install/wix/lang/zh_TW/Error.wxi [new file with mode: 0644]
src/WINNT/install/wix/language_config.wxi [new file with mode: 0644]
src/WINNT/install/wix/openafs.wxs [new file with mode: 0644]
src/WINNT/install/wix/property.wxi [new file with mode: 0644]
src/WINNT/install/wix/registry.wxi [new file with mode: 0644]
src/WINNT/install/wix/runtime.wxi [new file with mode: 0644]
src/WINNT/install/wix/runtime_debug.wxi [new file with mode: 0644]
src/afs/DARWIN/osi_vm.c
src/afs/DARWIN/osi_vnodeops.c
src/afs/LINUX/osi_groups.c
src/afs/LINUX/osi_misc.c
src/afs/LINUX/osi_module.c
src/afs/LINUX/osi_sleep.c
src/afs/LINUX/osi_vnodeops.c
src/afs/Makefile.in
src/afs/SOLARIS/osi_file.c
src/afs/SOLARIS/osi_inode.c
src/afs/SOLARIS/osi_vfsops.c
src/afs/SOLARIS/osi_vnodeops.c
src/afs/UKERNEL/afs_usrops.c
src/afs/VNOPS/afs_vnop_read.c
src/afs/VNOPS/afs_vnop_remove.c
src/afs/VNOPS/afs_vnop_write.c
src/afs/afs.h
src/afs/afs_call.c
src/afs/afs_callback.c
src/afs/afs_osi.c
src/afs/afs_osi.h
src/afs/afs_pioctl.c
src/afs/afs_prototypes.h
src/afs/afs_server.c
src/afs/afs_vcache.c
src/afs/sysincludes.h
src/afsweb/Makefile.in
src/auth/NTMakefile
src/auth/cellconfig.c
src/bozo/NTMakefile
src/bucoord/NTMakefile
src/budb/NTMakefile
src/butc/NTMakefile
src/cf/aix-cc.m4
src/cf/bigendian.m4
src/cf/function-macro.m4
src/cf/irix-test.m4
src/cf/linux-test1.m4
src/cf/linux-test2.m4
src/cf/linux-test3.m4
src/cf/linux-test4.m4
src/cf/linux-test5.m4
src/cf/osconf.m4
src/cf/ressearch.m4
src/cf/solaris-cc.m4
src/cf/solaris-dqrwlock.m4
src/cf/solaris-fs-rolled.m4
src/cf/solaris-pcorefile.m4
src/config/NTMakefile
src/config/NTMakefile.i386_nt40
src/config/afs_sysnames.h
src/config/afsconfig.h.in
src/config/param.i386_linux26.h
src/config/param.nbsd20.h
src/config/param.ppc_darwin_12.h
src/config/param.ppc_darwin_13.h
src/config/param.ppc_darwin_14.h
src/config/param.ppc_darwin_70.h
src/config/param.sgi_65.h
src/config/param.sun4x_510.h [new file with mode: 0644]
src/config/param.sunx86_510.h [new file with mode: 0644]
src/config/venus.h
src/des/Makefile.in
src/fsint/Makefile.in
src/fsint/afsint.xg
src/kauth/NTMakefile
src/kauth/kpasswd.c
src/libafs/MakefileProto.AIX.in
src/libafs/MakefileProto.LINUX.in
src/libafs/MakefileProto.SOLARIS.in
src/libafs/libafsdep
src/libafs/make_kbuild_makefile.pl [new file with mode: 0644]
src/lwp/Makefile.in
src/lwp/lwp_elf.h
src/mpp/mpp.c
src/package/check.c
src/package/conftree.c
src/package/globfuncs.c
src/package/messages.c
src/package/misc.c
src/package/package.c
src/package/test.c
src/package/update.c
src/ptserver/NTMakefile
src/ptserver/db_verify.c
src/ptserver/display.c
src/ptserver/map.c
src/ptserver/pt_util.c
src/ptserver/ptprocs.c
src/ptserver/pts.c
src/ptserver/ptserver.c
src/ptserver/ptuser.c
src/ptserver/ptutils.c
src/ptserver/readgroup.c
src/ptserver/readpwd.c
src/ptserver/testpt.c
src/ptserver/utils.c
src/rx/LINUX/rx_knet.c
src/rx/SOLARIS/rx_knet.c
src/rx/rx.c
src/rx/rx_clock.c
src/rx/rx_conncache.c
src/rx/rx_null.c
src/rx/rx_packet.c
src/rx/rx_xmit_nt.c
src/rx/xdr.h
src/rx/xdr_afsuuid.c
src/rx/xdr_rx.c
src/rxkad/rxkad_common.c
src/rxkad/rxkad_prototypes.h
src/sys/.cvsignore
src/sys/Makefile.in
src/sys/pioctl_nt.c
src/tbutc/NTMakefile
src/tvolser/.cvsignore [new file with mode: 0644]
src/update/NTMakefile
src/update/client.c
src/update/server.c
src/update/utils.c
src/venus/Makefile.in
src/venus/fs.c
src/vfsck/setup.c
src/viced/afsfileprocs.c
src/vlserver/NTMakefile
src/vol/vnode.c
src/vol/vol-info.c
src/vol/vol-salvage.c
src/volser/.cvsignore
src/volser/NTMakefile
src/volser/vsprocs.c

index 46b5a5f919650aa71d4ec3222e751dba8174835c..c4ca338a0c79b44f2a144f43f8bf42e9c2a9baff 100644 (file)
@@ -668,6 +668,7 @@ clean2:
        -${COMPILE_PART1} rcp ${COMPILE_CLEAN}
        -${COMPILE_PART1} libafs ${COMPILE_CLEAN}
        -${COMPILE_PART1} libuafs ${COMPILE_CLEAN}
+       -${COMPILE_PART1} tests ${COMPILE_CLEAN}
        -(cd src/libafs; /bin/rm -rf afs afsint config rx)
        -(cd src/libuafs; /bin/rm -rf afs afsint config rx des)
        -/bin/rm -rf ${TOP_INCDIR} ${TOP_LIBDIR} ${TOP_JLIBDIR}
@@ -797,7 +798,8 @@ distclean: clean
        src/vol/test/Makefile \
        src/volser/Makefile \
        src/wsadmin.src/Makefile \
-       src/xstat/Makefile 
+       src/xstat/Makefile  \
+       src/helper-splint.sh
 
 pristine: distclean
        /bin/rm -f src/config/afsconfig.h.in configure configure-libafs aclocal.m4
diff --git a/README b/README
index e9c6c370fa4dfc4e352516f63babe5c807cb993d..e7ea09c0b5eadd9b1704f6bc141d78a8772adb6a 100644 (file)
--- a/README
+++ b/README
@@ -40,7 +40,7 @@ A. Creating the proper directory structure.
       i386_linux26
       i386_umlinux22
       i386_umlinux24
-      i386_obsd31, i386_obsd32, i386_obsd33, i386_obsd34
+      i386_obsd31, i386_obsd32, i386_obsd33, i386_obsd34, i386_obsd35
       rs_aix42
       sgi_65 (file server not tested)
       sun4_413 (No client support, no fileserver support, db servers only)
@@ -163,7 +163,8 @@ F  OpenBSD Notes
    There is a package builder in src/packaging/OpenBSD.  "sh buildpkg.sh"
    should make a package for the client.  Use pkg_add to install.  The
    package will install using transarc-paths, regardless of how you
-   configured.
+   configured.  The package builder does not work on OpenBSD 3.5 and later
+   due to the incompatible re-write of pkg_create.
 
    There is no server package, but I am told that "make install" will put
    server binaries in /usr/afs.
index 8acfe4c5d740d4d7645034655449dd630ce351d4..37895c8a5aec35c5bf234a62a523d881e39ac7e1 100644 (file)
--- a/README-NT
+++ b/README-NT
@@ -33,8 +33,10 @@ The following steps describe how to configure Windows 2000/XP:
    F. Build Win2000 binaries
    G. Install NSIS 2.0
    H. Build NSIS Install Package
-   I. Final Results
-   J. Optional Items
+   I. Install Wix 2.0
+   J. Build Wix MSI Install Package
+   K. Final Results
+   L. Optional Items
        
 The Microsoft development tools require anywhere from 660 MB to 1.8GB
 of storage depending on which compilers are selected.  The following 
@@ -128,18 +130,24 @@ by using Internet Explorer 5.x or higher.  (Active X controls are required)
 
 The header files that are required are found from a Microsoft SDK are:
 
-   netspi.h
-   npapi.h
+   netspi.h   (Windows 9x builds)
+   npapi.h    (Windows 2000,XP,2003 builds)
+   netcfgx.h  (NSIS Loopback Adapter installer - Windows 2000,XP,2003 builds)
+   netcfgn.h  (NSIS Loopback Adapter installer - Windows 2000,XP,2003 builds)
 
-These files come from Microsoft DDKs/SDKs as follows:
+These files come from the following Microsoft DDKs/SDKs:
 
-   January 1997 Windows NT Workstation DDK - /ddk/frc/network/inc/npapi.h
-   November 2001 Microsoft Platform SDK - install "samples" from "Core SDK"
-                              samples/winbase/security/winnt/logonnp/npapi.h
-   July 1998 Windows 95 DDK - net/inc/netmpr.h and net/inc/netspi.h
-   July 1999 Windows 98 DDK - src/net/inc/netmpr.h and src/net/inc/netspi.h
-                            - you need to install "Legacy and Related
-                              driver samples"
+   npapi.h:
+        Windows XP/2003 Platform SDK - include/
+
+   netcfgn.h, netcfgx.h:
+        Windows XP/2003 DDK - inc/wxp/
+
+   netmpr.h, netspi.h:
+       July 1998 Windows 95 DDK - net/inc/netmpr.h and net/inc/netspi.h
+       July 1999 Windows 98 DDK - src/net/inc/netmpr.h and src/net/inc/netspi.h
+                                - you need to install "Legacy and Related
+                                  driver samples"
 
 STEP D. Configure NTBUILD.BAT.
 
@@ -263,7 +271,161 @@ From the DOS command prompt window run:
     nmake /f NTMakefile NSIS
 
 
-STEP I. Final Results
+STEP I.  Install Wix MSI Installer
+
+Download the Wix 2.0.1727 installer from 
+
+    http://prdownloads.sourceforge.net/wix/sources-2.0.1727.0.zip
+
+Apply the following patches to the source tree and execute 
+
+    make ship
+
+from the \src\wix directory.  
+
+Index: src/wix/Compiler.cs
+===================================================================
+RCS file: /cvsroot/wix/wix/src/wix/Compiler.cs,v
+retrieving revision 1.9
+diff -u -b -r1.9 Compiler.cs
+--- src/wix/Compiler.cs        31 May 2004 01:07:39 -0000      1.9
++++ src/wix/Compiler.cs        20 Jun 2004 14:06:54 -0000
+@@ -657,7 +657,7 @@
+                 // add the core registry keys for each context in the class
+                 for (int i = 0; i < contextCount; ++i)
+                 {
+-                    this.AddRegistryKey(sourceLineNumbers, null, 0, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[!", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context
++                    this.AddRegistryKey(sourceLineNumbers, null, 0, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[#", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context
+                     if (null != icon) // ClassId default icon
+                     {
+                         if (null != iconIndex)
+@@ -5710,6 +5710,20 @@
+                                 break;
+                         }
+                         break;
++                                      case "Delete":
++                                              switch (attrib.Value)
++                                              {
++                                                      case "install":
++                                                              events |= MsiInterop.MsidbServiceControlEventDelete;
++                                                              break;
++                                                      case "uninstall":
++                                                              events |= MsiInterop.MsidbServiceControlEventUninstallDelete;
++                                                              break;
++                                                      case "both":
++                                                              events |= MsiInterop.MsidbServiceControlEventDelete | MsiInterop.MsidbServiceControlEventUninstallDelete;
++                                                              break;
++                                              }
++                                              break;
+                     case "Wait":
+                         wait = Common.IsYes(attrib.Value, sourceLineNumbers, node.Name, attrib.Name, id) ? "1" : "0";   // strings used since integer column is nullable
+                         break;
+@@ -7034,6 +7048,7 @@
+                         }
+                         bits ^= (bit * 65536);
+                         break;
++
+                     default:
+                         bit = this.NameToBit(MsiInterop.CommonControlAttributes, attrib.Name, attrib.Value, node.Name, id);
+                         if (-1 == bit)
+Index: src/wix/Decompiler.cs
+===================================================================
+RCS file: /cvsroot/wix/wix/src/wix/Decompiler.cs,v
+retrieving revision 1.6
+diff -u -b -r1.6 Decompiler.cs
+--- src/wix/Decompiler.cs      21 May 2004 03:57:42 -0000      1.6
++++ src/wix/Decompiler.cs      20 Jun 2004 14:06:54 -0000
+@@ -2562,7 +2562,7 @@
+                             this.writer.WriteAttributeString("Group", "yes");
+                             text = text.Substring(1);
+                         }
+-                        this.writer.WriteString(text);
++                                              this.writer.WriteAttributeString("Id", text);
+                         this.writer.WriteEndElement();
+                     }
+                 }
+Index: src/wix/Preprocessor.cs
+===================================================================
+RCS file: /cvsroot/wix/wix/src/wix/Preprocessor.cs,v
+retrieving revision 1.4
+diff -u -b -r1.4 Preprocessor.cs
+--- src/wix/Preprocessor.cs    31 May 2004 01:07:40 -0000      1.4
++++ src/wix/Preprocessor.cs    20 Jun 2004 14:06:55 -0000
+@@ -269,12 +269,12 @@
+                             break;
+                         case "ifdef":
+                             stack.Push(context);
+-                            context = new IfContext(context.IsTrue & context.Active, this.variables.ContainsKey(reader.Value.Trim()), IfState.If);
++                            context = new IfContext(context.IsTrue & context.Active, this.IsDefined(reader.Value.Trim()), IfState.If);
+                             ignore = true;
+                             break;
+                         case "ifndef":
+                             stack.Push(context);
+-                            context = new IfContext(context.IsTrue & context.Active, !this.variables.ContainsKey(reader.Value.Trim()), IfState.If);
++                            context = new IfContext(context.IsTrue & context.Active, !this.IsDefined(reader.Value.Trim()), IfState.If);
+                             ignore = true;
+                             break;
+                         case "elseif":
+@@ -356,6 +356,8 @@
+                             break;
+                         case "endforeach": // endforeach is handled in PreprocessForeach, so seeing it here is an error
+                             throw new WixPreprocessorException(this.GetCurrentSourceLineNumbers(), "Cannot have a <?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:
@@ -283,7 +445,7 @@ would look like the following:
     WinInstall\OpenAFSforWindows.exe - is the install package for Open AFS
 
 
-STEP J. Optional Items
+STEP L. Optional Items
 
 The build process has an error table that is compiled for many OpenAFS
 applications.  This table is generated by Unix based tools.  It is not
index 99e62606b0bc98fbe4869132040592c3934b9588..ff614a3031ee04410b7c290d7e4ce22298352887 100644 (file)
@@ -4,7 +4,7 @@ dnl
 dnl NB: Because this code is a macro, references to positional shell
 dnl parameters must be done like $[]1 instead of $1
 
-AC_DEFUN(OPENAFS_CONFIGURE_COMMON,[
+AC_DEFUN([OPENAFS_CONFIGURE_COMMON],[
 
 AC_CANONICAL_HOST
 SRCDIR_PARENT=`pwd`
@@ -181,8 +181,10 @@ case $system in
                 LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM
                 LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS
                 LINUX_FS_STRUCT_INODE_HAS_I_DEVICES
+                LINUX_FS_STRUCT_INODE_HAS_I_SECURITY
                 LINUX_INODE_SETATTR_RETURN_TYPE
                 LINUX_KERNEL_LINUX_SYSCALL_H
+                LINUX_KERNEL_SELINUX
                 LINUX_NEED_RHCONFIG
                 LINUX_RECALC_SIGPENDING_ARG_TYPE
                 LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT
@@ -273,12 +275,18 @@ case $system in
                 if test "x$ac_cv_linux_fs_struct_inode_has_i_devices" = "xyes"; then 
                  AC_DEFINE(STRUCT_INODE_HAS_I_DEVICES, 1, [define if you struct inode has i_devices])
                 fi
+                if test "x$ac_cv_linux_fs_struct_inode_has_i_security" = "xyes"; then 
+                 AC_DEFINE(STRUCT_INODE_HAS_I_SECURITY, 1, [define if you struct inode has i_security])
+                fi
                 if test "x$ac_cv_linux_fs_struct_inode_has_i_dirty_data_buffers" = "xyes"; then 
                  AC_DEFINE(STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS, 1, [define if your struct inode has data_buffers])
                 fi
                 if test "x$ac_cv_linux_func_recalc_sigpending_takes_void" = "xyes"; then 
                  AC_DEFINE(RECALC_SIGPENDING_TAKES_VOID, 1, [define if your recalc_sigpending takes void])
                 fi
+                if test "x$ac_cv_linux_kernel_is_selinux" = "xyes" ; then
+                 AC_DEFINE(LINUX_KERNEL_IS_SELINUX, 1, [define if your linux kernel uses SELinux features])
+                fi
                 if test "x$ac_linux_syscall" = "xyes" ; then
                  AC_DEFINE(HAVE_KERNEL_LINUX_SYSCALL_H, 1, [define if your linux kernel has linux/syscall.h])
                 fi
@@ -531,6 +539,9 @@ else
                sparc-sun-solaris2.9)
                        AFS_SYSNAME="sun4x_59"
                        ;;
+               sparc-sun-solaris2.10)
+                       AFS_SYSNAME="sun4x_510"
+                       ;;
                sparc-sun-sunos4*)
                        AFS_SYSNAME="sun4_413"
                        enable_login="yes"
@@ -544,6 +555,9 @@ else
                i386-pc-solaris2.9)
                        AFS_SYSNAME="sunx86_59"
                        ;;
+               i386-pc-solaris2.10)
+                       AFS_SYSNAME="sunx86_510"
+                       ;;
                alpha*-dec-osf4.0*)
                        AFS_SYSNAME="alpha_dux40"
                        ;;
@@ -631,21 +645,6 @@ else
         AC_MSG_RESULT($AFS_SYSNAME)
 fi
 
-# KDUMP64 defaults to KDUMP for systems without a separate kdump64
-KDUMP64='${KDUMP}'
-KDUMP=kdump
-case $AFS_SYSNAME in
-       sgi_6?)
-               KDUMP=kdump.IP20;;
-       sun4x_5[[789]] | hp_ux11*)
-               KDUMP=kdump32
-               KDUMP64=kdump64;;
-       *linux*)
-               KDUMP='kdump-${LINUX_VERSION}';;
-esac
-AC_SUBST(KDUMP)
-AC_SUBST(KDUMP64)
-
 case $AFS_SYSNAME in
        *_darwin*)
                DARWIN_PLIST=src/libafs/afs.${AFS_SYSNAME}.plist
index 0777fa1ef03565ff77c07b292607090b3ab524e7..0ce56829ddce9969705c5af6b148f40b33bd45ae 100644 (file)
@@ -16,7 +16,7 @@ dnl
 dnl NB: Because this code is a macro, references to positional shell
 dnl parameters must be done like $[]1 instead of $1
 
-AC_DEFUN(OPENAFS_CONFIGURE_COMMON,[
+AC_DEFUN([OPENAFS_CONFIGURE_COMMON],[
 
 AC_CANONICAL_HOST
 SRCDIR_PARENT=`pwd`
@@ -193,8 +193,10 @@ case $system in
                 LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM
                 LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS
                 LINUX_FS_STRUCT_INODE_HAS_I_DEVICES
+                LINUX_FS_STRUCT_INODE_HAS_I_SECURITY
                 LINUX_INODE_SETATTR_RETURN_TYPE
                 LINUX_KERNEL_LINUX_SYSCALL_H
+                LINUX_KERNEL_SELINUX
                 LINUX_NEED_RHCONFIG
                 LINUX_RECALC_SIGPENDING_ARG_TYPE
                 LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT
@@ -285,12 +287,18 @@ case $system in
                 if test "x$ac_cv_linux_fs_struct_inode_has_i_devices" = "xyes"; then 
                  AC_DEFINE(STRUCT_INODE_HAS_I_DEVICES, 1, [define if you struct inode has i_devices])
                 fi
+                if test "x$ac_cv_linux_fs_struct_inode_has_i_security" = "xyes"; then 
+                 AC_DEFINE(STRUCT_INODE_HAS_I_SECURITY, 1, [define if you struct inode has i_security])
+                fi
                 if test "x$ac_cv_linux_fs_struct_inode_has_i_dirty_data_buffers" = "xyes"; then 
                  AC_DEFINE(STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS, 1, [define if your struct inode has data_buffers])
                 fi
                 if test "x$ac_cv_linux_func_recalc_sigpending_takes_void" = "xyes"; then 
                  AC_DEFINE(RECALC_SIGPENDING_TAKES_VOID, 1, [define if your recalc_sigpending takes void])
                 fi
+                if test "x$ac_cv_linux_kernel_is_selinux" = "xyes" ; then
+                 AC_DEFINE(LINUX_KERNEL_IS_SELINUX, 1, [define if your linux kernel uses SELinux features])
+                fi
                 if test "x$ac_linux_syscall" = "xyes" ; then
                  AC_DEFINE(HAVE_KERNEL_LINUX_SYSCALL_H, 1, [define if your linux kernel has linux/syscall.h])
                 fi
@@ -543,6 +551,9 @@ else
                sparc-sun-solaris2.9)
                        AFS_SYSNAME="sun4x_59"
                        ;;
+               sparc-sun-solaris2.10)
+                       AFS_SYSNAME="sun4x_510"
+                       ;;
                sparc-sun-sunos4*)
                        AFS_SYSNAME="sun4_413"
                        enable_login="yes"
@@ -556,6 +567,9 @@ else
                i386-pc-solaris2.9)
                        AFS_SYSNAME="sunx86_59"
                        ;;
+               i386-pc-solaris2.10)
+                       AFS_SYSNAME="sunx86_510"
+                       ;;
                alpha*-dec-osf4.0*)
                        AFS_SYSNAME="alpha_dux40"
                        ;;
@@ -643,21 +657,6 @@ else
         AC_MSG_RESULT($AFS_SYSNAME)
 fi
 
-# KDUMP64 defaults to KDUMP for systems without a separate kdump64
-KDUMP64='${KDUMP}'
-KDUMP=kdump
-case $AFS_SYSNAME in
-       sgi_6?)
-               KDUMP=kdump.IP20;;
-       sun4x_5[[789]] | hp_ux11*)
-               KDUMP=kdump32
-               KDUMP64=kdump64;;
-       *linux*)
-               KDUMP='kdump-${LINUX_VERSION}';;
-esac
-AC_SUBST(KDUMP)
-AC_SUBST(KDUMP64)
-
 case $AFS_SYSNAME in
        *_darwin*)
                DARWIN_PLIST=src/libafs/afs.${AFS_SYSNAME}.plist
@@ -1022,7 +1021,7 @@ AC_SUBST(HELPER_SPLINTCFG)
 
 ])
 
-AC_DEFUN(COMPILER_HAS_FUNCTION_MACRO, [
+AC_DEFUN([COMPILER_HAS_FUNCTION_MACRO], [
 AC_MSG_CHECKING(for __FUNCTION__ and __LINE__ macros)
 AC_CACHE_VAL(ac_cv_compiler_has_function_macro,
 [
@@ -1048,7 +1047,7 @@ AC_PROG_LEX
 AC_DECL_YYTEXT])
 
 dnl
-dnl $Id: bigendian.m4,v 1.2 2001/06/28 05:03:55 shadow Exp $
+dnl $Id: bigendian.m4,v 1.3 2004/06/03 05:13:29 shadow Exp $
 dnl
 
 dnl check if this computer is little or big-endian
@@ -1056,7 +1055,7 @@ dnl if we can figure it out at compile-time then don't define the cpp symbol
 dnl otherwise test for it and define it.  also allow options for overriding
 dnl it when cross-compiling
 
-AC_DEFUN(OPENAFS_CHECK_BIGENDIAN, [
+AC_DEFUN([OPENAFS_CHECK_BIGENDIAN], [
 AC_ARG_ENABLE(bigendian,
 [  --enable-bigendian  the target is big endian],
 openafs_cv_c_bigendian=yes)
@@ -1102,7 +1101,7 @@ fi
 ])
 
 
-AC_DEFUN(OPENAFS_GCC_SUPPORTS_MARCH, [
+AC_DEFUN([OPENAFS_GCC_SUPPORTS_MARCH], [
 AC_MSG_CHECKING(if $CC accepts -march=pentium)
 save_CFLAGS="$CFLAGS"
 CFLAGS="-MARCH=pentium"
@@ -1121,7 +1120,7 @@ fi
 CFLAGS="$save_CFLAGS"
 ])
 
-AC_DEFUN(OPENAFS_GCC_NEEDS_NO_STRICT_ALIASING, [
+AC_DEFUN([OPENAFS_GCC_NEEDS_NO_STRICT_ALIASING], [
 AC_MSG_CHECKING(if $CC needs -fno-strict-aliasing)
 save_CFLAGS="$CFLAGS"
 CFLAGS="-fno-strict-aliasing"
@@ -1138,7 +1137,7 @@ fi
 CFLAGS="$save_CFLAGS"
 ])
 
-AC_DEFUN(OPENAFS_GCC_NEEDS_NO_STRENGTH_REDUCE, [
+AC_DEFUN([OPENAFS_GCC_NEEDS_NO_STRENGTH_REDUCE], [
 AC_MSG_CHECKING(if $CC needs -fno-strength-reduce)
 save_CFLAGS="$CFLAGS"
 CFLAGS="-fno-strength-reduce"
@@ -1155,7 +1154,7 @@ fi
 CFLAGS="$save_CFLAGS"
 ])
 
-AC_DEFUN(OPENAFS_GCC_SUPPORTS_NO_COMMON, [
+AC_DEFUN([OPENAFS_GCC_SUPPORTS_NO_COMMON], [
 AC_MSG_CHECKING(if $CC supports -fno-common)
 save_CFLAGS="$CFLAGS"
 CFLAGS="-fno-common"
@@ -1172,7 +1171,7 @@ fi
 CFLAGS="$save_CFLAGS"
 ])
 
-AC_DEFUN(OPENAFS_GCC_SUPPORTS_PIPE, [
+AC_DEFUN([OPENAFS_GCC_SUPPORTS_PIPE], [
 AC_MSG_CHECKING(if $CC supports -pipe)
 save_CFLAGS="$CFLAGS"
 CFLAGS="-pipe"
@@ -1189,7 +1188,7 @@ fi
 CFLAGS="$save_CFLAGS"
 ])
 
-AC_DEFUN(LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_GFP_MASK, [
+AC_DEFUN([LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_GFP_MASK], [
 AC_MSG_CHECKING(for gfp_mask in struct address_space)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1204,7 +1203,7 @@ ac_cv_linux_fs_struct_address_space_has_gfp_mask=no)])
 AC_MSG_RESULT($ac_cv_linux_fs_struct_address_space_has_gfp_mask)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_BYTES, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_BYTES], [
 AC_MSG_CHECKING(for i_bytes in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1219,7 +1218,7 @@ ac_cv_linux_fs_struct_inode_has_i_bytes=no)])
 AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_bytes)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_ALLOC_SEM, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_ALLOC_SEM], [
 AC_MSG_CHECKING(for i_alloc_sem in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1234,7 +1233,7 @@ ac_cv_linux_fs_struct_inode_has_i_alloc_sem=no)])
 AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_alloc_sem)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM], [
 AC_MSG_CHECKING(for i_truncate_sem in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1249,7 +1248,7 @@ ac_cv_linux_fs_struct_inode_has_i_truncate_sem=no)])
 AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_truncate_sem)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK, [
+AC_DEFUN([LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK], [
 AC_MSG_CHECKING(for page_lock in struct address_space)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1268,7 +1267,7 @@ CPPFLAGS="$save_CPPFLAGS"])
 dnl LINUX_BUILD_VNODE_FROM_INODE (configdir, outputdir, tmpldir)
 dnl            defaults: (src/config, src/afs/LINUX, src/afs/linux)
 
-AC_DEFUN(LINUX_BUILD_VNODE_FROM_INODE, [
+AC_DEFUN([LINUX_BUILD_VNODE_FROM_INODE], [
 AC_MSG_CHECKING(whether to build osi_vfs.h)
 configdir=ifelse([$1], ,[src/config],$1)
 outputdir=ifelse([$2], ,[src/afs/LINUX],$2)
@@ -1277,7 +1276,7 @@ chmod +x $configdir/make_vnode.pl
 $configdir/make_vnode.pl -i $LINUX_KERNEL_PATH -t ${tmpldir} -o $outputdir
 ])
 
-AC_DEFUN(LINUX_COMPLETION_H_EXISTS, [
+AC_DEFUN([LINUX_COMPLETION_H_EXISTS], [
 AC_MSG_CHECKING(for linux/completion.h existance)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1297,7 +1296,7 @@ AC_MSG_RESULT($ac_cv_linux_completion_h_exists)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_DEFINES_FOR_EACH_PROCESS, [
+AC_DEFUN([LINUX_DEFINES_FOR_EACH_PROCESS], [
 AC_MSG_CHECKING(for defined for_each_process)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1314,7 +1313,7 @@ AC_MSG_RESULT($ac_cv_linux_defines_for_each_process)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_DEFINES_PREV_TASK, [
+AC_DEFUN([LINUX_DEFINES_PREV_TASK], [
 AC_MSG_CHECKING(for defined prev_task)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1331,7 +1330,7 @@ AC_MSG_RESULT($ac_cv_linux_defines_prev_task)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_INIT_MM, [
+AC_DEFUN([LINUX_EXPORTS_INIT_MM], [
 AC_MSG_CHECKING(for exported init_mm)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1348,7 +1347,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_init_mm)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_KALLSYMS_ADDRESS, [
+AC_DEFUN([LINUX_EXPORTS_KALLSYMS_ADDRESS], [
 AC_MSG_CHECKING(for exported kallsyms_address_to_symbol)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1365,7 +1364,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_kallsyms_address)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_KALLSYMS_SYMBOL, [
+AC_DEFUN([LINUX_EXPORTS_KALLSYMS_SYMBOL], [
 AC_MSG_CHECKING(for exported kallsyms_symbol_to_address)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1382,7 +1381,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_kallsyms_symbol)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_SYS_CALL_TABLE, [
+AC_DEFUN([LINUX_EXPORTS_SYS_CALL_TABLE], [
 AC_MSG_CHECKING(for exported sys_call_table)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1399,7 +1398,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_call_table)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_IA32_SYS_CALL_TABLE, [
+AC_DEFUN([LINUX_EXPORTS_IA32_SYS_CALL_TABLE], [
 AC_MSG_CHECKING(for exported ia32_sys_call_table)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1416,7 +1415,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_ia32_sys_call_table)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_SYS_CHDIR, [
+AC_DEFUN([LINUX_EXPORTS_SYS_CHDIR], [
 AC_MSG_CHECKING(for exported sys_chdir)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1433,7 +1432,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_chdir)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_SYS_CLOSE, [
+AC_DEFUN([LINUX_EXPORTS_SYS_CLOSE], [
 AC_MSG_CHECKING(for exported sys_close)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1450,7 +1449,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_close)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_SYS_WAIT4, [
+AC_DEFUN([LINUX_EXPORTS_SYS_WAIT4], [
 AC_MSG_CHECKING(for exported sys_wait4)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1467,7 +1466,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_wait4)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_TASKLIST_LOCK, [
+AC_DEFUN([LINUX_EXPORTS_TASKLIST_LOCK], [
 AC_MSG_CHECKING(for exported tasklist_lock)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1484,7 +1483,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_tasklist_lock)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_CDEV, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_CDEV], [
 AC_MSG_CHECKING(for i_cdev in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1500,7 +1499,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_cdev)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_DEVICES, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_DEVICES], [
 AC_MSG_CHECKING(for i_devices in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1516,7 +1515,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_devices)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS], [
 AC_MSG_CHECKING(for i_dirty_data_buffers in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1532,7 +1531,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_dirty_data_buffers)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_MAPPING_OVERLOAD, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_MAPPING_OVERLOAD], [
 AC_MSG_CHECKING(for i_mapping_overload in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1548,7 +1547,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_mapping_overload)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_MMAP_SHARED, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_MMAP_SHARED], [
 AC_MSG_CHECKING(for i_mmap_shared in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1564,7 +1563,23 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_mmap_shared)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_RECALC_SIGPENDING_ARG_TYPE,[
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_SECURITY], [
+AC_MSG_CHECKING(for i_security in struct inode)
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
+AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_security, 
+[
+AC_TRY_COMPILE(
+[#include <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"
@@ -1579,7 +1594,7 @@ AC_MSG_RESULT($ac_cv_linux_func_recalc_sigpending_takes_void)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT, [
+AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT], [
 AC_MSG_CHECKING(for parent in struct task_struct)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1595,7 +1610,7 @@ AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_parent)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_REAL_PARENT, [
+AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_REAL_PARENT], [
 AC_MSG_CHECKING(for real_parent in struct task_struct)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1611,7 +1626,7 @@ AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_real_parent)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIG, [
+AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIG], [
 AC_MSG_CHECKING(for sig in struct task_struct)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1626,7 +1641,7 @@ ac_cv_linux_sched_struct_task_struct_has_sig=no)])
 AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_sig)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGMASK_LOCK, [
+AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGMASK_LOCK], [
 AC_MSG_CHECKING(for sigmask_lock in struct task_struct)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1641,7 +1656,7 @@ ac_cv_linux_sched_struct_task_struct_has_sigmask_lock=no)])
 AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_sigmask_lock)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGHAND, [
+AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGHAND], [
 AC_MSG_CHECKING(for sighand in struct task_struct)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1656,7 +1671,7 @@ ac_cv_linux_sched_struct_task_struct_has_sighand=no)])
 AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_sighand)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_INODE_SETATTR_RETURN_TYPE,[
+AC_DEFUN([LINUX_INODE_SETATTR_RETURN_TYPE],[
 AC_MSG_CHECKING(for inode_setattr return type)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -1673,7 +1688,7 @@ ac_cv_linux_func_inode_setattr_returns_int=no)])
 AC_MSG_RESULT($ac_cv_linux_func_inode_setattr_returns_int)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_KERNEL_LINUX_SYSCALL_H,[
+AC_DEFUN([LINUX_KERNEL_LINUX_SYSCALL_H],[
   AC_MSG_CHECKING(for linux/syscall.h in kernel)
   if test -f "${LINUX_KERNEL_PATH}/include/linux/syscall.h"; then
     ac_linux_syscall=yes
@@ -1684,7 +1699,7 @@ AC_DEFUN(LINUX_KERNEL_LINUX_SYSCALL_H,[
   fi
 ])
 
-AC_DEFUN(LINUX_NEED_RHCONFIG,[
+AC_DEFUN([LINUX_NEED_RHCONFIG],[
 RHCONFIG_SP=""
 RHCONFIG_MP=""
 if test "x$enable_redhat_buildsys" = "xyes"; then
@@ -1708,7 +1723,7 @@ AC_SUBST(RHCONFIG_SP)
 AC_SUBST(RHCONFIG_MP)
 ])
 
-AC_DEFUN(LINUX_WHICH_MODULES,[
+AC_DEFUN([LINUX_WHICH_MODULES],[
 if test "x$enable_redhat_buildsys" = "xyes"; then
   MPS=Default
 else
@@ -1754,8 +1769,23 @@ fi
 AC_SUBST(MPS)
 ])
 
+AC_DEFUN([LINUX_KERNEL_SELINUX],[
+AC_MSG_CHECKING(for SELinux kernel)
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS"
+AC_CACHE_VAL(ac_cv_linux_kernel_is_selinux,
+[
+AC_TRY_COMPILE(
+  [#include <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,
 [
@@ -1773,7 +1803,7 @@ fi
 ])
 
 
-AC_DEFUN(SOLARIS_PROC_HAS_P_COREFILE, [
+AC_DEFUN([SOLARIS_PROC_HAS_P_COREFILE], [
 AC_MSG_CHECKING(for p_corefile in struct proc)
 AC_CACHE_VAL(ac_cv_solaris_proc_has_p_corefile,
 [
@@ -1791,7 +1821,7 @@ fi
 ])
 
 
-AC_DEFUN(SOLARIS_FS_HAS_FS_ROLLED, [
+AC_DEFUN([SOLARIS_FS_HAS_FS_ROLLED], [
 AC_MSG_CHECKING(for fs_rolled in struct proc)
 AC_CACHE_VAL(ac_cv_solaris_fs_has_fs_rolled,
 [
@@ -1808,7 +1838,7 @@ fi
 ])
 
 
-AC_DEFUN(AC_FUNC_RES_SEARCH, [
+AC_DEFUN([AC_FUNC_RES_SEARCH], [
   ac_cv_func_res_search=no
   AC_TRY_LINK([
 #include <sys/types.h>
@@ -1833,7 +1863,7 @@ return 0;
 ])
 
 
-AC_DEFUN(OPENAFS_OSCONF, [
+AC_DEFUN([OPENAFS_OSCONF], [
 
 dnl defaults, override in case below as needed
 XCFLAGS='${DBG} ${OPTMZ}'
@@ -2087,22 +2117,6 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${MT_CC} -shared"
                ;;
 
-       i386_linux22)
-               CC="gcc -pipe"
-               CCOBJ="gcc -pipe"
-               MT_CC="gcc -pipe"
-               KERN_OPTMZ=-O2
-               LEX="flex -l"
-               MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}'
-               MT_LIBS="-lpthread"
-               PAM_CFLAGS="-O2 -Dlinux -DLINUX_PAM -fPIC"
-               SHLIB_LDFLAGS="-shared -Xlinker -x"
-               TXLIBS="-lncurses"
-               XCFLAGS="-O2 -D_LARGEFILE64_SOURCE"
-               YACC="bison -y"
-               SHLIB_LINKER="${MT_CC} -shared"
-               ;;
-
        i386_umlinux22)
                CC="gcc -pipe"
                CCOBJ="gcc -pipe"
@@ -2119,7 +2133,7 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${MT_CC} -shared"
                ;;
 
-       i386_linux24)
+       i386_linux*)
                CC="gcc -pipe"
                CCOBJ="gcc -pipe"
                MT_CC="gcc -pipe"
@@ -2535,7 +2549,7 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
                ;;
 
-       sunx86_57)
+       sun4x_510)
                CC="/opt/SUNWspro/bin/cc"
                CCOBJ="/opt/SUNWspro/bin/cc"
                LEX="lex"
@@ -2556,6 +2570,26 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
                ;;
 
+       sunx86_57)
+               CC="/opt/SUNWspro/bin/cc"
+               CCOBJ="/opt/SUNWspro/bin/cc"
+               LEX="lex"
+               LD="/usr/ccs/bin/ld"
+               MT_CC="/opt/SUNWspro/bin/cc"
+               MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}'
+               MT_LIBS="-lpthread -lsocket"
+               PAM_CFLAGS="-KPIC"
+               PAM_LIBS="-lc -lpam -lsocket -lnsl -lm"
+               SHLIB_CFLAGS="-KPIC"
+               SHLIB_LDFLAGS="-G -Bsymbolic"
+               TXLIBS="-lcurses"
+               XCFLAGS64='${XCFLAGS} -xarch=v9'
+               XCFLAGS="-dy -Bdynamic"
+               XLIBELFA="-lelf"
+               XLIBKVM="-lkvm"
+               XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl"
+               SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
+               ;;
 
        sunx86_58)
                CC="/opt/SUNWspro/bin/cc"
@@ -2578,7 +2612,26 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
                ;;
 
-
+       sunx86_510)
+               CC="/opt/SUNWspro/bin/cc"
+               CCOBJ="/opt/SUNWspro/bin/cc"
+               LEX="lex"
+               LD="/usr/ccs/bin/ld"
+               MT_CC="/opt/SUNWspro/bin/cc"
+               MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}'
+               MT_LIBS="-lpthread -lsocket"
+               PAM_CFLAGS="-KPIC"
+               PAM_LIBS="-lc -lpam -lsocket -lnsl -lm"
+               SHLIB_CFLAGS="-KPIC"
+               SHLIB_LDFLAGS="-G -Bsymbolic"
+               TXLIBS="-lcurses"
+               XCFLAGS64='${XCFLAGS} -xarch=v9'
+               XCFLAGS="-dy -Bdynamic"
+               XLIBELFA="-lelf"
+               XLIBKVM="-lkvm"
+               XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl"
+               SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
+               ;;
 esac
 
 #
@@ -2687,7 +2740,7 @@ AC_SUBST(YACC)
 
 ])
 
-AC_DEFUN(IRIX_SYS_SYSTM_H_HAS_MEM_FUNCS, [
+AC_DEFUN([IRIX_SYS_SYSTM_H_HAS_MEM_FUNCS], [
 AC_MSG_CHECKING(for mem* in sys/systm.h)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="$CPPFLAGS -D_KERNEL -D__STRING_H__"
index 4ff7c87cac6145c50acdeac7ff931abcacd8f5a8..a9e67551adf68f9d9a5e9c69287c3bbdfed57210 100644 (file)
--- a/configure
+++ b/configure
@@ -754,7 +754,7 @@ fi
 
 PACKAGE=openafs
 
-VERSION=devel
+VERSION=1.3.65
 
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
@@ -2758,9 +2758,41 @@ fi
 
 echo "$ac_t""$ac_cv_linux_fs_struct_inode_has_i_devices" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
+                
+echo $ac_n "checking for i_security in struct inode""... $ac_c" 1>&6
+echo "configure:2764: checking for i_security in struct inode" >&5
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
+if eval "test \"`echo '$''{'ac_cv_linux_fs_struct_inode_has_i_security'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+cat > conftest.$ac_ext <<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
@@ -2768,7 +2800,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_func_inode_setattr_returns_int'+set}'`\"
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 2772 "configure"
+#line 2804 "configure"
 #include "confdefs.h"
 #include <linux/fs.h>
 int main() {
@@ -2778,7 +2810,7 @@ int i;
 i = inode_setattr(&_inode, &_iattr);
 ; return 0; }
 EOF
-if { (eval echo configure:2782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_func_inode_setattr_returns_int=yes
 else
@@ -2794,7 +2826,7 @@ echo "$ac_t""$ac_cv_linux_func_inode_setattr_returns_int" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                 
   echo $ac_n "checking for linux/syscall.h in kernel""... $ac_c" 1>&6
-echo "configure:2798: checking for linux/syscall.h in kernel" >&5
+echo "configure:2830: checking for linux/syscall.h in kernel" >&5
   if test -f "${LINUX_KERNEL_PATH}/include/linux/syscall.h"; then
     ac_linux_syscall=yes
     echo "$ac_t""$ac_linux_syscall" 1>&6
@@ -2804,13 +2836,46 @@ echo "configure:2798: checking for linux/syscall.h in kernel" >&5
   fi
 
                 
+echo $ac_n "checking for SELinux kernel""... $ac_c" 1>&6
+echo "configure:2841: checking for SELinux kernel" >&5
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS"
+if eval "test \"`echo '$''{'ac_cv_linux_kernel_is_selinux'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+cat > conftest.$ac_ext <<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"
@@ -2829,7 +2894,7 @@ fi
 
                 
 echo $ac_n "checking for recalc_sigpending arg type""... $ac_c" 1>&6
-echo "configure:2833: checking for recalc_sigpending arg type" >&5
+echo "configure:2898: checking for recalc_sigpending arg type" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_func_recalc_sigpending_takes_void'+set}'`\" = set"; then
@@ -2837,14 +2902,14 @@ if eval "test \"`echo '$''{'ac_cv_linux_func_recalc_sigpending_takes_void'+set}'
 else
   
 cat > conftest.$ac_ext <<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
@@ -2860,7 +2925,7 @@ echo "$ac_t""$ac_cv_linux_func_recalc_sigpending_takes_void" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                 
 echo $ac_n "checking for parent in struct task_struct""... $ac_c" 1>&6
-echo "configure:2864: checking for parent in struct task_struct" >&5
+echo "configure:2929: checking for parent in struct task_struct" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_parent'+set}'`\" = set"; then
@@ -2868,7 +2933,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_parent'+set
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 2872 "configure"
+#line 2937 "configure"
 #include "confdefs.h"
 #include <linux/sched.h>
 int main() {
@@ -2876,7 +2941,7 @@ struct task_struct _tsk;
 printf("%d\n", _tsk.parent);
 ; return 0; }
 EOF
-if { (eval echo configure:2880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2945: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_sched_struct_task_struct_has_parent=yes
 else
@@ -2892,7 +2957,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_parent" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                 
 echo $ac_n "checking for real_parent in struct task_struct""... $ac_c" 1>&6
-echo "configure:2896: checking for real_parent in struct task_struct" >&5
+echo "configure:2961: checking for real_parent in struct task_struct" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_real_parent'+set}'`\" = set"; then
@@ -2900,7 +2965,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_real_parent
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 2904 "configure"
+#line 2969 "configure"
 #include "confdefs.h"
 #include <linux/sched.h>
 int main() {
@@ -2908,7 +2973,7 @@ struct task_struct _tsk;
 printf("%d\n", _tsk.real_parent);
 ; return 0; }
 EOF
-if { (eval echo configure:2912: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_sched_struct_task_struct_has_real_parent=yes
 else
@@ -2924,7 +2989,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_real_parent" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                 
 echo $ac_n "checking for sig in struct task_struct""... $ac_c" 1>&6
-echo "configure:2928: checking for sig in struct task_struct" >&5
+echo "configure:2993: checking for sig in struct task_struct" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sig'+set}'`\" = set"; then
@@ -2932,7 +2997,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sig'+set}'`
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 2936 "configure"
+#line 3001 "configure"
 #include "confdefs.h"
 #include <linux/sched.h>
 int main() {
@@ -2940,7 +3005,7 @@ struct task_struct _tsk;
 printf("%d\n", _tsk.sig);
 ; return 0; }
 EOF
-if { (eval echo configure:2944: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3009: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_sched_struct_task_struct_has_sig=yes
 else
@@ -2956,7 +3021,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_sig" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                 
 echo $ac_n "checking for sighand in struct task_struct""... $ac_c" 1>&6
-echo "configure:2960: checking for sighand in struct task_struct" >&5
+echo "configure:3025: checking for sighand in struct task_struct" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sighand'+set}'`\" = set"; then
@@ -2964,7 +3029,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sighand'+se
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 2968 "configure"
+#line 3033 "configure"
 #include "confdefs.h"
 #include <linux/sched.h>
 int main() {
@@ -2972,7 +3037,7 @@ struct task_struct _tsk;
 printf("%d\n", _tsk.sighand);
 ; return 0; }
 EOF
-if { (eval echo configure:2976: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3041: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_sched_struct_task_struct_has_sighand=yes
 else
@@ -2988,7 +3053,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_sighand" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                 
 echo $ac_n "checking for sigmask_lock in struct task_struct""... $ac_c" 1>&6
-echo "configure:2992: checking for sigmask_lock in struct task_struct" >&5
+echo "configure:3057: checking for sigmask_lock in struct task_struct" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sigmask_lock'+set}'`\" = set"; then
@@ -2996,7 +3061,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sigmask_loc
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3000 "configure"
+#line 3065 "configure"
 #include "confdefs.h"
 #include <linux/sched.h>
 int main() {
@@ -3004,7 +3069,7 @@ struct task_struct _tsk;
 printf("%d\n", _tsk.sigmask_lock);
 ; return 0; }
 EOF
-if { (eval echo configure:3008: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_sched_struct_task_struct_has_sigmask_lock=yes
 else
@@ -3025,13 +3090,13 @@ else
   save_CPPFLAGS="$CPPFLAGS"
   CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -D__KERNEL__ $RHCONFIG_SP $CPPFLAGS"
   echo $ac_n "checking if kernel uses MODVERSIONS""... $ac_c" 1>&6
-echo "configure:3029: checking if kernel uses MODVERSIONS" >&5
+echo "configure:3094: checking if kernel uses MODVERSIONS" >&5
   if eval "test \"`echo '$''{'ac_cv_linux_config_modversions'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 3035 "configure"
+#line 3100 "configure"
 #include "confdefs.h"
 #include <linux/version.h>
 #include <linux/config.h>
@@ -3043,7 +3108,7 @@ lose;
 
 ; return 0; }
 EOF
-if { (eval echo configure:3047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_config_modversions=yes
 else
@@ -3057,7 +3122,7 @@ fi
 
   echo "$ac_t""$ac_cv_linux_config_modversions" 1>&6
   echo $ac_n "checking which kernel modules to build""... $ac_c" 1>&6
-echo "configure:3061: checking which kernel modules to build" >&5
+echo "configure:3126: checking which kernel modules to build" >&5
   if test "x$ac_linux_rhconfig" = "xyes" -o "x$ac_cv_linux_config_modversions" = "xno"; then
       MPS="MP SP"
   else
@@ -3066,7 +3131,7 @@ echo "configure:3061: checking which kernel modules to build" >&5
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 3070 "configure"
+#line 3135 "configure"
 #include "confdefs.h"
 #include <linux/config.h>
 
@@ -3077,7 +3142,7 @@ lose;
 
 ; return 0; }
 EOF
-if { (eval echo configure:3081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3146: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_config_smp=yes
 else
@@ -3109,7 +3174,7 @@ fi
                  else
                    
 echo $ac_n "checking for exported init_mm""... $ac_c" 1>&6
-echo "configure:3113: checking for exported init_mm" >&5
+echo "configure:3178: checking for exported init_mm" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_init_mm'+set}'`\" = set"; then
@@ -3117,7 +3182,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_init_mm'+set}'`\" = set"; then
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3121 "configure"
+#line 3186 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3126,7 +3191,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3130: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_init_mm=yes
 else
@@ -3142,7 +3207,7 @@ echo "$ac_t""$ac_cv_linux_exports_init_mm" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported kallsyms_address_to_symbol""... $ac_c" 1>&6
-echo "configure:3146: checking for exported kallsyms_address_to_symbol" >&5
+echo "configure:3211: checking for exported kallsyms_address_to_symbol" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_address'+set}'`\" = set"; then
@@ -3150,7 +3215,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_address'+set}'`\" = set
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3154 "configure"
+#line 3219 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3159,7 +3224,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_kallsyms_address=yes
 else
@@ -3175,7 +3240,7 @@ echo "$ac_t""$ac_cv_linux_exports_kallsyms_address" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported kallsyms_symbol_to_address""... $ac_c" 1>&6
-echo "configure:3179: checking for exported kallsyms_symbol_to_address" >&5
+echo "configure:3244: checking for exported kallsyms_symbol_to_address" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_symbol'+set}'`\" = set"; then
@@ -3183,7 +3248,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_symbol'+set}'`\" = set"
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3187 "configure"
+#line 3252 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3192,7 +3257,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3261: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_kallsyms_symbol=yes
 else
@@ -3208,7 +3273,7 @@ echo "$ac_t""$ac_cv_linux_exports_kallsyms_symbol" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported sys_call_table""... $ac_c" 1>&6
-echo "configure:3212: checking for exported sys_call_table" >&5
+echo "configure:3277: checking for exported sys_call_table" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_call_table'+set}'`\" = set"; then
@@ -3216,7 +3281,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_call_table'+set}'`\" = set";
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3220 "configure"
+#line 3285 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3225,7 +3290,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3294: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_sys_call_table=yes
 else
@@ -3241,7 +3306,7 @@ echo "$ac_t""$ac_cv_linux_exports_sys_call_table" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported ia32_sys_call_table""... $ac_c" 1>&6
-echo "configure:3245: checking for exported ia32_sys_call_table" >&5
+echo "configure:3310: checking for exported ia32_sys_call_table" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_ia32_sys_call_table'+set}'`\" = set"; then
@@ -3249,7 +3314,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_ia32_sys_call_table'+set}'`\" =
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3253 "configure"
+#line 3318 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3258,7 +3323,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3262: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_ia32_sys_call_table=yes
 else
@@ -3274,7 +3339,7 @@ echo "$ac_t""$ac_cv_linux_exports_ia32_sys_call_table" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported sys_chdir""... $ac_c" 1>&6
-echo "configure:3278: checking for exported sys_chdir" >&5
+echo "configure:3343: checking for exported sys_chdir" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_chdir'+set}'`\" = set"; then
@@ -3282,7 +3347,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_chdir'+set}'`\" = set"; then
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3286 "configure"
+#line 3351 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3291,7 +3356,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3360: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_sys_chdir=yes
 else
@@ -3307,7 +3372,7 @@ echo "$ac_t""$ac_cv_linux_exports_sys_chdir" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported sys_close""... $ac_c" 1>&6
-echo "configure:3311: checking for exported sys_close" >&5
+echo "configure:3376: checking for exported sys_close" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_close'+set}'`\" = set"; then
@@ -3315,7 +3380,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_close'+set}'`\" = set"; then
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3319 "configure"
+#line 3384 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3324,7 +3389,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3328: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3393: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_sys_close=yes
 else
@@ -3340,7 +3405,7 @@ echo "$ac_t""$ac_cv_linux_exports_sys_close" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported sys_wait4""... $ac_c" 1>&6
-echo "configure:3344: checking for exported sys_wait4" >&5
+echo "configure:3409: checking for exported sys_wait4" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_wait4'+set}'`\" = set"; then
@@ -3348,7 +3413,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_wait4'+set}'`\" = set"; then
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3352 "configure"
+#line 3417 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3357,7 +3422,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3426: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_sys_wait4=yes
 else
@@ -3486,6 +3551,12 @@ EOF
                 if test "x$ac_cv_linux_fs_struct_inode_has_i_devices" = "xyes"; then 
                  cat >> confdefs.h <<\EOF
 #define STRUCT_INODE_HAS_I_DEVICES 1
+EOF
+
+                fi
+                if test "x$ac_cv_linux_fs_struct_inode_has_i_security" = "xyes"; then 
+                 cat >> confdefs.h <<\EOF
+#define STRUCT_INODE_HAS_I_SECURITY 1
 EOF
 
                 fi
@@ -3498,6 +3569,12 @@ EOF
                 if test "x$ac_cv_linux_func_recalc_sigpending_takes_void" = "xyes"; then 
                  cat >> confdefs.h <<\EOF
 #define RECALC_SIGPENDING_TAKES_VOID 1
+EOF
+
+                fi
+                if test "x$ac_cv_linux_kernel_is_selinux" = "xyes" ; then
+                 cat >> confdefs.h <<\EOF
+#define LINUX_KERNEL_IS_SELINUX 1
 EOF
 
                 fi
@@ -3545,13 +3622,13 @@ EOF
                 echo "$ac_t""sun4" 1>&6
                
 echo $ac_n "checking for vfs_dqrwlock in struct ufsvfs""... $ac_c" 1>&6
-echo "configure:3549: checking for vfs_dqrwlock in struct ufsvfs" >&5
+echo "configure:3626: checking for vfs_dqrwlock in struct ufsvfs" >&5
 if eval "test \"`echo '$''{'ac_cv_solaris_ufsvfs_has_dqrwlock'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3555 "configure"
+#line 3632 "configure"
 #include "confdefs.h"
 #define _KERNEL
 #include <sys/fs/ufs_inode.h>
@@ -3560,7 +3637,7 @@ struct ufsvfs _ufsvfs;
 (void) _ufsvfs.vfs_dqrwlock;
 ; return 0; }
 EOF
-if { (eval echo configure:3564: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3641: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_solaris_ufsvfs_has_dqrwlock=yes
 else
@@ -3582,13 +3659,13 @@ fi
 
                
 echo $ac_n "checking for p_corefile in struct proc""... $ac_c" 1>&6
-echo "configure:3586: checking for p_corefile in struct proc" >&5
+echo "configure:3663: checking for p_corefile in struct proc" >&5
 if eval "test \"`echo '$''{'ac_cv_solaris_proc_has_p_corefile'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3592 "configure"
+#line 3669 "configure"
 #include "confdefs.h"
 #define _KERNEL
 #include <sys/proc.h>
@@ -3597,7 +3674,7 @@ struct proc _proc;
 (void) _proc.p_corefile;
 ; return 0; }
 EOF
-if { (eval echo configure:3601: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3678: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_solaris_proc_has_p_corefile=yes
 else
@@ -3619,13 +3696,13 @@ fi
 
                
 echo $ac_n "checking for fs_rolled in struct proc""... $ac_c" 1>&6
-echo "configure:3623: checking for fs_rolled in struct proc" >&5
+echo "configure:3700: checking for fs_rolled in struct proc" >&5
 if eval "test \"`echo '$''{'ac_cv_solaris_fs_has_fs_rolled'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3629 "configure"
+#line 3706 "configure"
 #include "confdefs.h"
 #include <sys/fs/ufs_fs.h>
 int main() {
@@ -3633,7 +3710,7 @@ struct fs _fs;
 (void) _fs.fs_rolled;
 ; return 0; }
 EOF
-if { (eval echo configure:3637: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3714: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_solaris_fs_has_fs_rolled=yes
 else
@@ -3714,7 +3791,7 @@ if test "x$with_afs_sysname" != "x"; then
         AFS_SYSNAME="$with_afs_sysname"
 else
        echo $ac_n "checking your AFS sysname""... $ac_c" 1>&6
-echo "configure:3718: checking your AFS sysname" >&5
+echo "configure:3795: checking your AFS sysname" >&5
        case $host in
                i?86-*-openbsd3.1)
                        AFS_SYSNAME="i386_obsd31"
@@ -3879,6 +3956,9 @@ echo "configure:3718: checking your AFS sysname" >&5
                sparc-sun-solaris2.9)
                        AFS_SYSNAME="sun4x_59"
                        ;;
+               sparc-sun-solaris2.10)
+                       AFS_SYSNAME="sun4x_510"
+                       ;;
                sparc-sun-sunos4*)
                        AFS_SYSNAME="sun4_413"
                        enable_login="yes"
@@ -3892,6 +3972,9 @@ echo "configure:3718: checking your AFS sysname" >&5
                i386-pc-solaris2.9)
                        AFS_SYSNAME="sunx86_59"
                        ;;
+               i386-pc-solaris2.10)
+                       AFS_SYSNAME="sunx86_510"
+                       ;;
                alpha*-dec-osf4.0*)
                        AFS_SYSNAME="alpha_dux40"
                        ;;
@@ -3964,7 +4047,7 @@ echo "configure:3718: checking your AFS sysname" >&5
                        save_CPPFLAGS="$CPPFLAGS"
                        CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS"
                        cat > conftest.$ac_ext <<EOF
-#line 3968 "configure"
+#line 4051 "configure"
 #include "confdefs.h"
 #include <linux/autoconf.h>
 int main() {
@@ -3973,7 +4056,7 @@ int main() {
                          #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4060: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_is_uml=yes
 else
@@ -3991,21 +4074,6 @@ rm -f conftest*
         echo "$ac_t""$AFS_SYSNAME" 1>&6
 fi
 
-# KDUMP64 defaults to KDUMP for systems without a separate kdump64
-KDUMP64='${KDUMP}'
-KDUMP=kdump
-case $AFS_SYSNAME in
-       sgi_6?)
-               KDUMP=kdump.IP20;;
-       sun4x_5[789] | hp_ux11*)
-               KDUMP=kdump32
-               KDUMP64=kdump64;;
-       *linux*)
-               KDUMP='kdump-${LINUX_VERSION}';;
-esac
-
-
-
 case $AFS_SYSNAME in
        *_darwin*)
                DARWIN_PLIST=src/libafs/afs.${AFS_SYSNAME}.plist
@@ -4018,14 +4086,14 @@ EOF
                ;;
         *)
 echo $ac_n "checking for definition of struct buf""... $ac_c" 1>&6
-echo "configure:4022: checking for definition of struct buf" >&5
+echo "configure:4090: checking for definition of struct buf" >&5
 if eval "test \"`echo '$''{'ac_cv_have_struct_buf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
        ac_cv_have_struct_buf=no
        cat > conftest.$ac_ext <<EOF
-#line 4029 "configure"
+#line 4097 "configure"
 #include "confdefs.h"
 #include <sys/buf.h>
 int main() {
@@ -4033,7 +4101,7 @@ struct buf x;
                printf("%d\n", sizeof(x));
 ; return 0; }
 EOF
-if { (eval echo configure:4037: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4105: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_struct_buf=yes
 else
@@ -4061,9 +4129,9 @@ if eval "test \"`echo '$''{'ac_cv_sockaddr_len'+set}'`\" = set"; then
 else
   
 echo $ac_n "checking if struct sockaddr has sa_len field""... $ac_c" 1>&6
-echo "configure:4065: checking if struct sockaddr has sa_len field" >&5
+echo "configure:4133: checking if struct sockaddr has sa_len field" >&5
 cat > conftest.$ac_ext <<EOF
-#line 4067 "configure"
+#line 4135 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -4072,7 +4140,7 @@ struct sockaddr *a;
 a->sa_len=0;
 ; return 0; }
 EOF
-if { (eval echo configure:4076: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4144: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sockaddr_len=yes
 else
@@ -4097,12 +4165,12 @@ else
   for ac_func in socket
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4101: checking for $ac_func" >&5
+echo "configure:4169: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -4125,7 +4193,7 @@ $ac_func();
 
 ; 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
@@ -4154,7 +4222,7 @@ done
     for lib in socket inet; do
         if test "$HAVE_SOCKET" != 1; then
                 echo $ac_n "checking for socket in -l${lib}""... $ac_c" 1>&6
-echo "configure:4158: checking for socket in -l${lib}" >&5
+echo "configure:4226: checking for socket in -l${lib}" >&5
 ac_lib_var=`echo ${lib}'_'socket | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4162,7 +4230,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l${lib}  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -4173,7 +4241,7 @@ int main() {
 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
@@ -4203,12 +4271,12 @@ fi
   for ac_func in connect
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4207: checking for $ac_func" >&5
+echo "configure:4275: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -4231,7 +4299,7 @@ $ac_func();
 
 ; 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
@@ -4260,7 +4328,7 @@ done
     for lib in nsl; do
         if test "$HAVE_CONNECT" != 1; then
                 echo $ac_n "checking for connect in -l${lib}""... $ac_c" 1>&6
-echo "configure:4264: checking for connect in -l${lib}" >&5
+echo "configure:4332: checking for connect in -l${lib}" >&5
 ac_lib_var=`echo ${lib}'_'connect | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4268,7 +4336,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l${lib}  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -4279,7 +4347,7 @@ int main() {
 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
@@ -4309,12 +4377,12 @@ fi
   for ac_func in gethostbyname
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4313: checking for $ac_func" >&5
+echo "configure:4381: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -4337,7 +4405,7 @@ $ac_func();
 
 ; 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
@@ -4365,7 +4433,7 @@ done
         for lib in dns nsl resolv; do
           if test "$HAVE_GETHOSTBYNAME" != 1; then
             echo $ac_n "checking for gethostbyname in -l${lib}""... $ac_c" 1>&6
-echo "configure:4369: checking for gethostbyname in -l${lib}" >&5
+echo "configure:4437: checking for gethostbyname in -l${lib}" >&5
 ac_lib_var=`echo ${lib}'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4373,7 +4441,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l${lib}  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -4384,7 +4452,7 @@ int main() {
 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
@@ -4412,9 +4480,9 @@ fi
   fi    
 
     echo $ac_n "checking for the useability of arpa/nameser_compat.h""... $ac_c" 1>&6
-echo "configure:4416: checking for the useability of arpa/nameser_compat.h" >&5
+echo "configure:4484: checking for the useability of arpa/nameser_compat.h" >&5
   cat > conftest.$ac_ext <<EOF
-#line 4418 "configure"
+#line 4486 "configure"
 #include "confdefs.h"
 
   #include <stdlib.h>
@@ -4431,7 +4499,7 @@ int main() {
 static int i; i = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:4435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
    cat >> confdefs.h <<\EOF
@@ -4449,11 +4517,11 @@ rm -f conftest*
 
   openafs_save_libs="$LIBS"
   echo $ac_n "checking for res_search""... $ac_c" 1>&6
-echo "configure:4453: checking for res_search" >&5
+echo "configure:4521: checking for res_search" >&5
   
   ac_cv_func_res_search=no
   cat > conftest.$ac_ext <<EOF
-#line 4457 "configure"
+#line 4525 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -4477,7 +4545,7 @@ return 0;
   
 ; return 0; }
 EOF
-if { (eval echo configure:4481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_res_search=yes
 else
@@ -4494,7 +4562,7 @@ rm -f conftest*
           
   ac_cv_func_res_search=no
   cat > conftest.$ac_ext <<EOF
-#line 4498 "configure"
+#line 4566 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -4518,7 +4586,7 @@ return 0;
   
 ; return 0; }
 EOF
-if { (eval echo configure:4522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_res_search=yes
 else
@@ -4552,7 +4620,7 @@ fi
 
 PTHREAD_LIBS=error
 echo $ac_n "checking for pthread_attr_init in -lpthread""... $ac_c" 1>&6
-echo "configure:4556: checking for pthread_attr_init in -lpthread" >&5
+echo "configure:4624: checking for pthread_attr_init in -lpthread" >&5
 ac_lib_var=`echo pthread'_'pthread_attr_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4560,7 +4628,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpthread  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -4571,7 +4639,7 @@ int main() {
 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
@@ -4593,7 +4661,7 @@ fi
 
 if test "x$PTHREAD_LIBS" = xerror; then
         echo $ac_n "checking for pthread_attr_init in -lpthreads""... $ac_c" 1>&6
-echo "configure:4597: checking for pthread_attr_init in -lpthreads" >&5
+echo "configure:4665: checking for pthread_attr_init in -lpthreads" >&5
 ac_lib_var=`echo pthreads'_'pthread_attr_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4601,7 +4669,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpthreads  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -4612,7 +4680,7 @@ int main() {
 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
@@ -4635,7 +4703,7 @@ fi
 fi
 if test "x$PTHREAD_LIBS" = xerror; then
         echo $ac_n "checking for pthread_attr_init in -lc_r""... $ac_c" 1>&6
-echo "configure:4639: checking for pthread_attr_init in -lc_r" >&5
+echo "configure:4707: checking for pthread_attr_init in -lc_r" >&5
 ac_lib_var=`echo c_r'_'pthread_attr_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4643,7 +4711,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lc_r  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -4654,7 +4722,7 @@ int main() {
 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
@@ -4677,12 +4745,12 @@ fi
 fi
 if test "x$PTHREAD_LIBS" = xerror; then
         echo $ac_n "checking for pthread_attr_init""... $ac_c" 1>&6
-echo "configure:4681: checking for pthread_attr_init" >&5
+echo "configure:4749: checking for pthread_attr_init" >&5
 if eval "test \"`echo '$''{'ac_cv_func_pthread_attr_init'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -4705,7 +4773,7 @@ pthread_attr_init();
 
 ; 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
@@ -4825,7 +4893,7 @@ EOF
 fi
 
 echo $ac_n "checking for tivoli tsm butc support""... $ac_c" 1>&6
-echo "configure:4829: checking for tivoli tsm butc support" >&5
+echo "configure:4897: checking for tivoli tsm butc support" >&5
 XBSA_CFLAGS=""
 if test "$enable_tivoli_tsm" = "yes"; then
        XBSADIR1=/usr/tivoli/tsm/client/api/bin/xopen
@@ -4846,12 +4914,12 @@ fi
 
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:4850: checking for ANSI C header files" >&5
+echo "configure:4918: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4855 "configure"
+#line 4923 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -4859,7 +4927,7 @@ else
 #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*
@@ -4876,7 +4944,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 4880 "configure"
+#line 4948 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -4894,7 +4962,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 4898 "configure"
+#line 4966 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -4915,7 +4983,7 @@ if test "$cross_compiling" = yes; then
   :
 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')
@@ -4926,7 +4994,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:4930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -4950,12 +5018,12 @@ EOF
 fi
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:4954: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:5022: checking for sys/wait.h that is POSIX.1 compatible" >&5
 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4959 "configure"
+#line 5027 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -4971,7 +5039,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:4975: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -4996,12 +5064,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:5000: checking for $ac_hdr that defines DIR" >&5
+echo "configure:5068: checking for $ac_hdr that defines DIR" >&5
 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5005 "configure"
+#line 5073 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -5009,7 +5077,7 @@ int main() {
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:5013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -5034,7 +5102,7 @@ done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
 echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:5038: checking for opendir in -ldir" >&5
+echo "configure:5106: checking for opendir in -ldir" >&5
 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5042,7 +5110,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -5053,7 +5121,7 @@ int main() {
 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
@@ -5075,7 +5143,7 @@ fi
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:5079: checking for opendir in -lx" >&5
+echo "configure:5147: checking for opendir in -lx" >&5
 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5083,7 +5151,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -5094,7 +5162,7 @@ int main() {
 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
@@ -5120,17 +5188,17 @@ for ac_hdr in stdlib.h string.h unistd.h fcntl.h sys/time.h sys/file.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5124: checking for $ac_hdr" >&5
+echo "configure:5192: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#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*
@@ -5160,17 +5228,17 @@ for ac_hdr in netinet/in.h netdb.h sys/fcntl.h sys/mnttab.h sys/mntent.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5164: checking for $ac_hdr" >&5
+echo "configure:5232: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#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*
@@ -5200,17 +5268,17 @@ for ac_hdr in mntent.h sys/vfs.h sys/param.h sys/fs_types.h sys/fstyp.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5204: checking for $ac_hdr" >&5
+echo "configure:5272: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#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*
@@ -5240,17 +5308,17 @@ for ac_hdr in sys/mount.h strings.h termios.h signal.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5244: checking for $ac_hdr" >&5
+echo "configure:5312: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#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*
@@ -5280,17 +5348,17 @@ for ac_hdr in windows.h malloc.h winsock2.h direct.h io.h sys/user.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5284: checking for $ac_hdr" >&5
+echo "configure:5352: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#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*
@@ -5320,17 +5388,17 @@ for ac_hdr in security/pam_modules.h siad.h usersec.h ucontext.h regex.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5324: checking for $ac_hdr" >&5
+echo "configure:5392: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#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*
@@ -5374,12 +5442,12 @@ fi
 for ac_func in utimes random srandom getdtablesize snprintf strlcat strlcpy re_comp re_exec
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5378: checking for $ac_func" >&5
+echo "configure:5446: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -5402,7 +5470,7 @@ $ac_func();
 
 ; 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
@@ -5429,12 +5497,12 @@ done
 for ac_func in setprogname getprogname sigaction mkstemp vsnprintf strerror
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5433: checking for $ac_func" >&5
+echo "configure:5501: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -5457,7 +5525,7 @@ $ac_func();
 
 ; 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
@@ -5485,12 +5553,12 @@ done
 for ac_func in regcomp regexec regerror
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5489: checking for $ac_func" >&5
+echo "configure:5557: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -5513,7 +5581,7 @@ $ac_func();
 
 ; 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
@@ -5538,7 +5606,7 @@ fi
 done
 
 echo $ac_n "checking for POSIX regex library""... $ac_c" 1>&6
-echo "configure:5542: checking for POSIX regex library" >&5
+echo "configure:5610: checking for POSIX regex library" >&5
 if test "$ac_cv_header_regex_h" = "yes" && \
        test "$ac_cv_func_regcomp" = "yes" && \
        test "$ac_cv_func_regexec" = "yes" && \
@@ -5553,12 +5621,12 @@ else
 fi
        
 echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:5557: checking for ssize_t" >&5
+echo "configure:5625: checking for ssize_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5562 "configure"
+#line 5630 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -5586,7 +5654,7 @@ EOF
 fi
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:5590: checking size of long" >&5
+echo "configure:5658: checking size of long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5594,7 +5662,7 @@ else
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 5598 "configure"
+#line 5666 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -5605,7 +5673,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:5609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -5628,12 +5696,12 @@ EOF
 for ac_func in timegm
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5632: checking for $ac_func" >&5
+echo "configure:5700: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -5656,7 +5724,7 @@ $ac_func();
 
 ; 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
@@ -5760,7 +5828,7 @@ LWP_OPTMZ=-O
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5764: checking for $ac_word" >&5
+echo "configure:5832: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5792,7 +5860,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5796: checking for $ac_word" >&5
+echo "configure:5864: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5827,7 +5895,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5831: checking for $ac_word" >&5
+echo "configure:5899: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5862,7 +5930,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5866: checking for $ac_word" >&5
+echo "configure:5934: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MV'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5897,7 +5965,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5901: checking for $ac_word" >&5
+echo "configure:5969: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RM'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5932,7 +6000,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5936: checking for $ac_word" >&5
+echo "configure:6004: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5967,7 +6035,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5971: checking for $ac_word" >&5
+echo "configure:6039: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6002,7 +6070,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6006: checking for $ac_word" >&5
+echo "configure:6074: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6037,7 +6105,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6041: checking for $ac_word" >&5
+echo "configure:6109: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LORDER'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6290,22 +6358,6 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${MT_CC} -shared"
                ;;
 
-       i386_linux22)
-               CC="gcc -pipe"
-               CCOBJ="gcc -pipe"
-               MT_CC="gcc -pipe"
-               KERN_OPTMZ=-O2
-               LEX="flex -l"
-               MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}'
-               MT_LIBS="-lpthread"
-               PAM_CFLAGS="-O2 -Dlinux -DLINUX_PAM -fPIC"
-               SHLIB_LDFLAGS="-shared -Xlinker -x"
-               TXLIBS="-lncurses"
-               XCFLAGS="-O2 -D_LARGEFILE64_SOURCE"
-               YACC="bison -y"
-               SHLIB_LINKER="${MT_CC} -shared"
-               ;;
-
        i386_umlinux22)
                CC="gcc -pipe"
                CCOBJ="gcc -pipe"
@@ -6322,7 +6374,7 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${MT_CC} -shared"
                ;;
 
-       i386_linux24)
+       i386_linux*)
                CC="gcc -pipe"
                CCOBJ="gcc -pipe"
                MT_CC="gcc -pipe"
@@ -6738,7 +6790,7 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
                ;;
 
-       sunx86_57)
+       sun4x_510)
                CC="/opt/SUNWspro/bin/cc"
                CCOBJ="/opt/SUNWspro/bin/cc"
                LEX="lex"
@@ -6759,6 +6811,26 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
                ;;
 
+       sunx86_57)
+               CC="/opt/SUNWspro/bin/cc"
+               CCOBJ="/opt/SUNWspro/bin/cc"
+               LEX="lex"
+               LD="/usr/ccs/bin/ld"
+               MT_CC="/opt/SUNWspro/bin/cc"
+               MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}'
+               MT_LIBS="-lpthread -lsocket"
+               PAM_CFLAGS="-KPIC"
+               PAM_LIBS="-lc -lpam -lsocket -lnsl -lm"
+               SHLIB_CFLAGS="-KPIC"
+               SHLIB_LDFLAGS="-G -Bsymbolic"
+               TXLIBS="-lcurses"
+               XCFLAGS64='${XCFLAGS} -xarch=v9'
+               XCFLAGS="-dy -Bdynamic"
+               XLIBELFA="-lelf"
+               XLIBKVM="-lkvm"
+               XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl"
+               SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
+               ;;
 
        sunx86_58)
                CC="/opt/SUNWspro/bin/cc"
@@ -6781,7 +6853,26 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
                ;;
 
-
+       sunx86_510)
+               CC="/opt/SUNWspro/bin/cc"
+               CCOBJ="/opt/SUNWspro/bin/cc"
+               LEX="lex"
+               LD="/usr/ccs/bin/ld"
+               MT_CC="/opt/SUNWspro/bin/cc"
+               MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}'
+               MT_LIBS="-lpthread -lsocket"
+               PAM_CFLAGS="-KPIC"
+               PAM_LIBS="-lc -lpam -lsocket -lnsl -lm"
+               SHLIB_CFLAGS="-KPIC"
+               SHLIB_LDFLAGS="-G -Bsymbolic"
+               TXLIBS="-lcurses"
+               XCFLAGS64='${XCFLAGS} -xarch=v9'
+               XCFLAGS="-dy -Bdynamic"
+               XLIBELFA="-lelf"
+               XLIBKVM="-lkvm"
+               XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl"
+               SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
+               ;;
 esac
 
 #
@@ -6791,7 +6882,7 @@ case $AFS_SYSNAME in
        sgi_6*)
                
 echo $ac_n "checking for mem* in sys/systm.h""... $ac_c" 1>&6
-echo "configure:6795: checking for mem* in sys/systm.h" >&5
+echo "configure:6886: checking for mem* in sys/systm.h" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="$CPPFLAGS -D_KERNEL -D__STRING_H__"
 if eval "test \"`echo '$''{'ac_cv_irix_sys_systm_h_has_mem_funcs'+set}'`\" = set"; then
@@ -6799,7 +6890,7 @@ if eval "test \"`echo '$''{'ac_cv_irix_sys_systm_h_has_mem_funcs'+set}'`\" = set
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 6803 "configure"
+#line 6894 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/systm.h>
@@ -6809,7 +6900,7 @@ extern void     *memcpy(char *, const void *, size_t);
 
 ; return 0; }
 EOF
-if { (eval echo configure:6813: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6904: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_irix_sys_systm_h_has_mem_funcs=no
 else
@@ -7236,8 +7327,6 @@ s%@RHCONFIG_SP@%$RHCONFIG_SP%g
 s%@RHCONFIG_MP@%$RHCONFIG_MP%g
 s%@MPS@%$MPS%g
 s%@HEADER_RT@%$HEADER_RT%g
-s%@KDUMP@%$KDUMP%g
-s%@KDUMP64@%$KDUMP64%g
 s%@PTHREAD_LIBS@%$PTHREAD_LIBS%g
 s%@XBSA_CFLAGS@%$XBSA_CFLAGS%g
 s%@HAVE_PAM@%$HAVE_PAM%g
index 40f984f264a8a9c17d6b1594c6d390006a0fbf11..a5ea3f6aa8b908220e5185fb8aba0a2606f9c5ea 100644 (file)
@@ -754,7 +754,7 @@ fi
 
 PACKAGE=openafs-libafs
 
-VERSION=devel
+VERSION=1.3.65
 
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
@@ -2758,9 +2758,41 @@ fi
 
 echo "$ac_t""$ac_cv_linux_fs_struct_inode_has_i_devices" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
+                
+echo $ac_n "checking for i_security in struct inode""... $ac_c" 1>&6
+echo "configure:2764: checking for i_security in struct inode" >&5
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
+if eval "test \"`echo '$''{'ac_cv_linux_fs_struct_inode_has_i_security'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+cat > conftest.$ac_ext <<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
@@ -2768,7 +2800,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_func_inode_setattr_returns_int'+set}'`\"
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 2772 "configure"
+#line 2804 "configure"
 #include "confdefs.h"
 #include <linux/fs.h>
 int main() {
@@ -2778,7 +2810,7 @@ int i;
 i = inode_setattr(&_inode, &_iattr);
 ; return 0; }
 EOF
-if { (eval echo configure:2782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_func_inode_setattr_returns_int=yes
 else
@@ -2794,7 +2826,7 @@ echo "$ac_t""$ac_cv_linux_func_inode_setattr_returns_int" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                 
   echo $ac_n "checking for linux/syscall.h in kernel""... $ac_c" 1>&6
-echo "configure:2798: checking for linux/syscall.h in kernel" >&5
+echo "configure:2830: checking for linux/syscall.h in kernel" >&5
   if test -f "${LINUX_KERNEL_PATH}/include/linux/syscall.h"; then
     ac_linux_syscall=yes
     echo "$ac_t""$ac_linux_syscall" 1>&6
@@ -2804,13 +2836,46 @@ echo "configure:2798: checking for linux/syscall.h in kernel" >&5
   fi
 
                 
+echo $ac_n "checking for SELinux kernel""... $ac_c" 1>&6
+echo "configure:2841: checking for SELinux kernel" >&5
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS"
+if eval "test \"`echo '$''{'ac_cv_linux_kernel_is_selinux'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+cat > conftest.$ac_ext <<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"
@@ -2829,7 +2894,7 @@ fi
 
                 
 echo $ac_n "checking for recalc_sigpending arg type""... $ac_c" 1>&6
-echo "configure:2833: checking for recalc_sigpending arg type" >&5
+echo "configure:2898: checking for recalc_sigpending arg type" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_func_recalc_sigpending_takes_void'+set}'`\" = set"; then
@@ -2837,14 +2902,14 @@ if eval "test \"`echo '$''{'ac_cv_linux_func_recalc_sigpending_takes_void'+set}'
 else
   
 cat > conftest.$ac_ext <<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
@@ -2860,7 +2925,7 @@ echo "$ac_t""$ac_cv_linux_func_recalc_sigpending_takes_void" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                 
 echo $ac_n "checking for parent in struct task_struct""... $ac_c" 1>&6
-echo "configure:2864: checking for parent in struct task_struct" >&5
+echo "configure:2929: checking for parent in struct task_struct" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_parent'+set}'`\" = set"; then
@@ -2868,7 +2933,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_parent'+set
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 2872 "configure"
+#line 2937 "configure"
 #include "confdefs.h"
 #include <linux/sched.h>
 int main() {
@@ -2876,7 +2941,7 @@ struct task_struct _tsk;
 printf("%d\n", _tsk.parent);
 ; return 0; }
 EOF
-if { (eval echo configure:2880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2945: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_sched_struct_task_struct_has_parent=yes
 else
@@ -2892,7 +2957,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_parent" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                 
 echo $ac_n "checking for real_parent in struct task_struct""... $ac_c" 1>&6
-echo "configure:2896: checking for real_parent in struct task_struct" >&5
+echo "configure:2961: checking for real_parent in struct task_struct" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_real_parent'+set}'`\" = set"; then
@@ -2900,7 +2965,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_real_parent
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 2904 "configure"
+#line 2969 "configure"
 #include "confdefs.h"
 #include <linux/sched.h>
 int main() {
@@ -2908,7 +2973,7 @@ struct task_struct _tsk;
 printf("%d\n", _tsk.real_parent);
 ; return 0; }
 EOF
-if { (eval echo configure:2912: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_sched_struct_task_struct_has_real_parent=yes
 else
@@ -2924,7 +2989,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_real_parent" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                 
 echo $ac_n "checking for sig in struct task_struct""... $ac_c" 1>&6
-echo "configure:2928: checking for sig in struct task_struct" >&5
+echo "configure:2993: checking for sig in struct task_struct" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sig'+set}'`\" = set"; then
@@ -2932,7 +2997,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sig'+set}'`
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 2936 "configure"
+#line 3001 "configure"
 #include "confdefs.h"
 #include <linux/sched.h>
 int main() {
@@ -2940,7 +3005,7 @@ struct task_struct _tsk;
 printf("%d\n", _tsk.sig);
 ; return 0; }
 EOF
-if { (eval echo configure:2944: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3009: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_sched_struct_task_struct_has_sig=yes
 else
@@ -2956,7 +3021,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_sig" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                 
 echo $ac_n "checking for sighand in struct task_struct""... $ac_c" 1>&6
-echo "configure:2960: checking for sighand in struct task_struct" >&5
+echo "configure:3025: checking for sighand in struct task_struct" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sighand'+set}'`\" = set"; then
@@ -2964,7 +3029,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sighand'+se
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 2968 "configure"
+#line 3033 "configure"
 #include "confdefs.h"
 #include <linux/sched.h>
 int main() {
@@ -2972,7 +3037,7 @@ struct task_struct _tsk;
 printf("%d\n", _tsk.sighand);
 ; return 0; }
 EOF
-if { (eval echo configure:2976: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3041: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_sched_struct_task_struct_has_sighand=yes
 else
@@ -2988,7 +3053,7 @@ echo "$ac_t""$ac_cv_linux_sched_struct_task_struct_has_sighand" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                 
 echo $ac_n "checking for sigmask_lock in struct task_struct""... $ac_c" 1>&6
-echo "configure:2992: checking for sigmask_lock in struct task_struct" >&5
+echo "configure:3057: checking for sigmask_lock in struct task_struct" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sigmask_lock'+set}'`\" = set"; then
@@ -2996,7 +3061,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_sched_struct_task_struct_has_sigmask_loc
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3000 "configure"
+#line 3065 "configure"
 #include "confdefs.h"
 #include <linux/sched.h>
 int main() {
@@ -3004,7 +3069,7 @@ struct task_struct _tsk;
 printf("%d\n", _tsk.sigmask_lock);
 ; return 0; }
 EOF
-if { (eval echo configure:3008: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_sched_struct_task_struct_has_sigmask_lock=yes
 else
@@ -3025,13 +3090,13 @@ else
   save_CPPFLAGS="$CPPFLAGS"
   CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -D__KERNEL__ $RHCONFIG_SP $CPPFLAGS"
   echo $ac_n "checking if kernel uses MODVERSIONS""... $ac_c" 1>&6
-echo "configure:3029: checking if kernel uses MODVERSIONS" >&5
+echo "configure:3094: checking if kernel uses MODVERSIONS" >&5
   if eval "test \"`echo '$''{'ac_cv_linux_config_modversions'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 3035 "configure"
+#line 3100 "configure"
 #include "confdefs.h"
 #include <linux/version.h>
 #include <linux/config.h>
@@ -3043,7 +3108,7 @@ lose;
 
 ; return 0; }
 EOF
-if { (eval echo configure:3047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_config_modversions=yes
 else
@@ -3057,7 +3122,7 @@ fi
 
   echo "$ac_t""$ac_cv_linux_config_modversions" 1>&6
   echo $ac_n "checking which kernel modules to build""... $ac_c" 1>&6
-echo "configure:3061: checking which kernel modules to build" >&5
+echo "configure:3126: checking which kernel modules to build" >&5
   if test "x$ac_linux_rhconfig" = "xyes" -o "x$ac_cv_linux_config_modversions" = "xno"; then
       MPS="MP SP"
   else
@@ -3066,7 +3131,7 @@ echo "configure:3061: checking which kernel modules to build" >&5
 else
   
   cat > conftest.$ac_ext <<EOF
-#line 3070 "configure"
+#line 3135 "configure"
 #include "confdefs.h"
 #include <linux/config.h>
 
@@ -3077,7 +3142,7 @@ lose;
 
 ; return 0; }
 EOF
-if { (eval echo configure:3081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3146: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_config_smp=yes
 else
@@ -3109,7 +3174,7 @@ fi
                  else
                    
 echo $ac_n "checking for exported init_mm""... $ac_c" 1>&6
-echo "configure:3113: checking for exported init_mm" >&5
+echo "configure:3178: checking for exported init_mm" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_init_mm'+set}'`\" = set"; then
@@ -3117,7 +3182,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_init_mm'+set}'`\" = set"; then
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3121 "configure"
+#line 3186 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3126,7 +3191,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3130: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_init_mm=yes
 else
@@ -3142,7 +3207,7 @@ echo "$ac_t""$ac_cv_linux_exports_init_mm" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported kallsyms_address_to_symbol""... $ac_c" 1>&6
-echo "configure:3146: checking for exported kallsyms_address_to_symbol" >&5
+echo "configure:3211: checking for exported kallsyms_address_to_symbol" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_address'+set}'`\" = set"; then
@@ -3150,7 +3215,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_address'+set}'`\" = set
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3154 "configure"
+#line 3219 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3159,7 +3224,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3163: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3228: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_kallsyms_address=yes
 else
@@ -3175,7 +3240,7 @@ echo "$ac_t""$ac_cv_linux_exports_kallsyms_address" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported kallsyms_symbol_to_address""... $ac_c" 1>&6
-echo "configure:3179: checking for exported kallsyms_symbol_to_address" >&5
+echo "configure:3244: checking for exported kallsyms_symbol_to_address" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_symbol'+set}'`\" = set"; then
@@ -3183,7 +3248,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_kallsyms_symbol'+set}'`\" = set"
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3187 "configure"
+#line 3252 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3192,7 +3257,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3261: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_kallsyms_symbol=yes
 else
@@ -3208,7 +3273,7 @@ echo "$ac_t""$ac_cv_linux_exports_kallsyms_symbol" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported sys_call_table""... $ac_c" 1>&6
-echo "configure:3212: checking for exported sys_call_table" >&5
+echo "configure:3277: checking for exported sys_call_table" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_call_table'+set}'`\" = set"; then
@@ -3216,7 +3281,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_call_table'+set}'`\" = set";
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3220 "configure"
+#line 3285 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3225,7 +3290,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3294: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_sys_call_table=yes
 else
@@ -3241,7 +3306,7 @@ echo "$ac_t""$ac_cv_linux_exports_sys_call_table" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported ia32_sys_call_table""... $ac_c" 1>&6
-echo "configure:3245: checking for exported ia32_sys_call_table" >&5
+echo "configure:3310: checking for exported ia32_sys_call_table" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_ia32_sys_call_table'+set}'`\" = set"; then
@@ -3249,7 +3314,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_ia32_sys_call_table'+set}'`\" =
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3253 "configure"
+#line 3318 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3258,7 +3323,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3262: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_ia32_sys_call_table=yes
 else
@@ -3274,7 +3339,7 @@ echo "$ac_t""$ac_cv_linux_exports_ia32_sys_call_table" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported sys_chdir""... $ac_c" 1>&6
-echo "configure:3278: checking for exported sys_chdir" >&5
+echo "configure:3343: checking for exported sys_chdir" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_chdir'+set}'`\" = set"; then
@@ -3282,7 +3347,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_chdir'+set}'`\" = set"; then
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3286 "configure"
+#line 3351 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3291,7 +3356,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3360: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_sys_chdir=yes
 else
@@ -3307,7 +3372,7 @@ echo "$ac_t""$ac_cv_linux_exports_sys_chdir" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported sys_close""... $ac_c" 1>&6
-echo "configure:3311: checking for exported sys_close" >&5
+echo "configure:3376: checking for exported sys_close" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_close'+set}'`\" = set"; then
@@ -3315,7 +3380,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_close'+set}'`\" = set"; then
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3319 "configure"
+#line 3384 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3324,7 +3389,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3328: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3393: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_sys_close=yes
 else
@@ -3340,7 +3405,7 @@ echo "$ac_t""$ac_cv_linux_exports_sys_close" 1>&6
 CPPFLAGS="$save_CPPFLAGS"
                    
 echo $ac_n "checking for exported sys_wait4""... $ac_c" 1>&6
-echo "configure:3344: checking for exported sys_wait4" >&5
+echo "configure:3409: checking for exported sys_wait4" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
 if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_wait4'+set}'`\" = set"; then
@@ -3348,7 +3413,7 @@ if eval "test \"`echo '$''{'ac_cv_linux_exports_sys_wait4'+set}'`\" = set"; then
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3352 "configure"
+#line 3417 "configure"
 #include "confdefs.h"
 #include <linux/modversions.h>
 int main() {
@@ -3357,7 +3422,7 @@ int main() {
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3426: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_exports_sys_wait4=yes
 else
@@ -3486,6 +3551,12 @@ EOF
                 if test "x$ac_cv_linux_fs_struct_inode_has_i_devices" = "xyes"; then 
                  cat >> confdefs.h <<\EOF
 #define STRUCT_INODE_HAS_I_DEVICES 1
+EOF
+
+                fi
+                if test "x$ac_cv_linux_fs_struct_inode_has_i_security" = "xyes"; then 
+                 cat >> confdefs.h <<\EOF
+#define STRUCT_INODE_HAS_I_SECURITY 1
 EOF
 
                 fi
@@ -3498,6 +3569,12 @@ EOF
                 if test "x$ac_cv_linux_func_recalc_sigpending_takes_void" = "xyes"; then 
                  cat >> confdefs.h <<\EOF
 #define RECALC_SIGPENDING_TAKES_VOID 1
+EOF
+
+                fi
+                if test "x$ac_cv_linux_kernel_is_selinux" = "xyes" ; then
+                 cat >> confdefs.h <<\EOF
+#define LINUX_KERNEL_IS_SELINUX 1
 EOF
 
                 fi
@@ -3545,13 +3622,13 @@ EOF
                 echo "$ac_t""sun4" 1>&6
                
 echo $ac_n "checking for vfs_dqrwlock in struct ufsvfs""... $ac_c" 1>&6
-echo "configure:3549: checking for vfs_dqrwlock in struct ufsvfs" >&5
+echo "configure:3626: checking for vfs_dqrwlock in struct ufsvfs" >&5
 if eval "test \"`echo '$''{'ac_cv_solaris_ufsvfs_has_dqrwlock'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3555 "configure"
+#line 3632 "configure"
 #include "confdefs.h"
 #define _KERNEL
 #include <sys/fs/ufs_inode.h>
@@ -3560,7 +3637,7 @@ struct ufsvfs _ufsvfs;
 (void) _ufsvfs.vfs_dqrwlock;
 ; return 0; }
 EOF
-if { (eval echo configure:3564: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3641: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_solaris_ufsvfs_has_dqrwlock=yes
 else
@@ -3582,13 +3659,13 @@ fi
 
                
 echo $ac_n "checking for p_corefile in struct proc""... $ac_c" 1>&6
-echo "configure:3586: checking for p_corefile in struct proc" >&5
+echo "configure:3663: checking for p_corefile in struct proc" >&5
 if eval "test \"`echo '$''{'ac_cv_solaris_proc_has_p_corefile'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3592 "configure"
+#line 3669 "configure"
 #include "confdefs.h"
 #define _KERNEL
 #include <sys/proc.h>
@@ -3597,7 +3674,7 @@ struct proc _proc;
 (void) _proc.p_corefile;
 ; return 0; }
 EOF
-if { (eval echo configure:3601: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3678: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_solaris_proc_has_p_corefile=yes
 else
@@ -3619,13 +3696,13 @@ fi
 
                
 echo $ac_n "checking for fs_rolled in struct proc""... $ac_c" 1>&6
-echo "configure:3623: checking for fs_rolled in struct proc" >&5
+echo "configure:3700: checking for fs_rolled in struct proc" >&5
 if eval "test \"`echo '$''{'ac_cv_solaris_fs_has_fs_rolled'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 3629 "configure"
+#line 3706 "configure"
 #include "confdefs.h"
 #include <sys/fs/ufs_fs.h>
 int main() {
@@ -3633,7 +3710,7 @@ struct fs _fs;
 (void) _fs.fs_rolled;
 ; return 0; }
 EOF
-if { (eval echo configure:3637: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3714: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_solaris_fs_has_fs_rolled=yes
 else
@@ -3714,7 +3791,7 @@ if test "x$with_afs_sysname" != "x"; then
         AFS_SYSNAME="$with_afs_sysname"
 else
        echo $ac_n "checking your AFS sysname""... $ac_c" 1>&6
-echo "configure:3718: checking your AFS sysname" >&5
+echo "configure:3795: checking your AFS sysname" >&5
        case $host in
                i?86-*-openbsd3.1)
                        AFS_SYSNAME="i386_obsd31"
@@ -3879,6 +3956,9 @@ echo "configure:3718: checking your AFS sysname" >&5
                sparc-sun-solaris2.9)
                        AFS_SYSNAME="sun4x_59"
                        ;;
+               sparc-sun-solaris2.10)
+                       AFS_SYSNAME="sun4x_510"
+                       ;;
                sparc-sun-sunos4*)
                        AFS_SYSNAME="sun4_413"
                        enable_login="yes"
@@ -3892,6 +3972,9 @@ echo "configure:3718: checking your AFS sysname" >&5
                i386-pc-solaris2.9)
                        AFS_SYSNAME="sunx86_59"
                        ;;
+               i386-pc-solaris2.10)
+                       AFS_SYSNAME="sunx86_510"
+                       ;;
                alpha*-dec-osf4.0*)
                        AFS_SYSNAME="alpha_dux40"
                        ;;
@@ -3964,7 +4047,7 @@ echo "configure:3718: checking your AFS sysname" >&5
                        save_CPPFLAGS="$CPPFLAGS"
                        CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS"
                        cat > conftest.$ac_ext <<EOF
-#line 3968 "configure"
+#line 4051 "configure"
 #include "confdefs.h"
 #include <linux/autoconf.h>
 int main() {
@@ -3973,7 +4056,7 @@ int main() {
                          #endif
 ; return 0; }
 EOF
-if { (eval echo configure:3977: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4060: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_linux_is_uml=yes
 else
@@ -3991,21 +4074,6 @@ rm -f conftest*
         echo "$ac_t""$AFS_SYSNAME" 1>&6
 fi
 
-# KDUMP64 defaults to KDUMP for systems without a separate kdump64
-KDUMP64='${KDUMP}'
-KDUMP=kdump
-case $AFS_SYSNAME in
-       sgi_6?)
-               KDUMP=kdump.IP20;;
-       sun4x_5[789] | hp_ux11*)
-               KDUMP=kdump32
-               KDUMP64=kdump64;;
-       *linux*)
-               KDUMP='kdump-${LINUX_VERSION}';;
-esac
-
-
-
 case $AFS_SYSNAME in
        *_darwin*)
                DARWIN_PLIST=src/libafs/afs.${AFS_SYSNAME}.plist
@@ -4018,14 +4086,14 @@ EOF
                ;;
         *)
 echo $ac_n "checking for definition of struct buf""... $ac_c" 1>&6
-echo "configure:4022: checking for definition of struct buf" >&5
+echo "configure:4090: checking for definition of struct buf" >&5
 if eval "test \"`echo '$''{'ac_cv_have_struct_buf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
        ac_cv_have_struct_buf=no
        cat > conftest.$ac_ext <<EOF
-#line 4029 "configure"
+#line 4097 "configure"
 #include "confdefs.h"
 #include <sys/buf.h>
 int main() {
@@ -4033,7 +4101,7 @@ struct buf x;
                printf("%d\n", sizeof(x));
 ; return 0; }
 EOF
-if { (eval echo configure:4037: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4105: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_have_struct_buf=yes
 else
@@ -4061,9 +4129,9 @@ if eval "test \"`echo '$''{'ac_cv_sockaddr_len'+set}'`\" = set"; then
 else
   
 echo $ac_n "checking if struct sockaddr has sa_len field""... $ac_c" 1>&6
-echo "configure:4065: checking if struct sockaddr has sa_len field" >&5
+echo "configure:4133: checking if struct sockaddr has sa_len field" >&5
 cat > conftest.$ac_ext <<EOF
-#line 4067 "configure"
+#line 4135 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -4072,7 +4140,7 @@ struct sockaddr *a;
 a->sa_len=0;
 ; return 0; }
 EOF
-if { (eval echo configure:4076: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4144: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sockaddr_len=yes
 else
@@ -4097,12 +4165,12 @@ else
   for ac_func in socket
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4101: checking for $ac_func" >&5
+echo "configure:4169: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -4125,7 +4193,7 @@ $ac_func();
 
 ; 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
@@ -4154,7 +4222,7 @@ done
     for lib in socket inet; do
         if test "$HAVE_SOCKET" != 1; then
                 echo $ac_n "checking for socket in -l${lib}""... $ac_c" 1>&6
-echo "configure:4158: checking for socket in -l${lib}" >&5
+echo "configure:4226: checking for socket in -l${lib}" >&5
 ac_lib_var=`echo ${lib}'_'socket | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4162,7 +4230,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l${lib}  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -4173,7 +4241,7 @@ int main() {
 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
@@ -4203,12 +4271,12 @@ fi
   for ac_func in connect
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4207: checking for $ac_func" >&5
+echo "configure:4275: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -4231,7 +4299,7 @@ $ac_func();
 
 ; 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
@@ -4260,7 +4328,7 @@ done
     for lib in nsl; do
         if test "$HAVE_CONNECT" != 1; then
                 echo $ac_n "checking for connect in -l${lib}""... $ac_c" 1>&6
-echo "configure:4264: checking for connect in -l${lib}" >&5
+echo "configure:4332: checking for connect in -l${lib}" >&5
 ac_lib_var=`echo ${lib}'_'connect | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4268,7 +4336,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l${lib}  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -4279,7 +4347,7 @@ int main() {
 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
@@ -4309,12 +4377,12 @@ fi
   for ac_func in gethostbyname
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4313: checking for $ac_func" >&5
+echo "configure:4381: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -4337,7 +4405,7 @@ $ac_func();
 
 ; 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
@@ -4365,7 +4433,7 @@ done
         for lib in dns nsl resolv; do
           if test "$HAVE_GETHOSTBYNAME" != 1; then
             echo $ac_n "checking for gethostbyname in -l${lib}""... $ac_c" 1>&6
-echo "configure:4369: checking for gethostbyname in -l${lib}" >&5
+echo "configure:4437: checking for gethostbyname in -l${lib}" >&5
 ac_lib_var=`echo ${lib}'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4373,7 +4441,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l${lib}  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -4384,7 +4452,7 @@ int main() {
 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
@@ -4412,9 +4480,9 @@ fi
   fi    
 
     echo $ac_n "checking for the useability of arpa/nameser_compat.h""... $ac_c" 1>&6
-echo "configure:4416: checking for the useability of arpa/nameser_compat.h" >&5
+echo "configure:4484: checking for the useability of arpa/nameser_compat.h" >&5
   cat > conftest.$ac_ext <<EOF
-#line 4418 "configure"
+#line 4486 "configure"
 #include "confdefs.h"
 
   #include <stdlib.h>
@@ -4431,7 +4499,7 @@ int main() {
 static int i; i = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:4435: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
    cat >> confdefs.h <<\EOF
@@ -4449,11 +4517,11 @@ rm -f conftest*
 
   openafs_save_libs="$LIBS"
   echo $ac_n "checking for res_search""... $ac_c" 1>&6
-echo "configure:4453: checking for res_search" >&5
+echo "configure:4521: checking for res_search" >&5
   
   ac_cv_func_res_search=no
   cat > conftest.$ac_ext <<EOF
-#line 4457 "configure"
+#line 4525 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -4477,7 +4545,7 @@ return 0;
   
 ; return 0; }
 EOF
-if { (eval echo configure:4481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_res_search=yes
 else
@@ -4494,7 +4562,7 @@ rm -f conftest*
           
   ac_cv_func_res_search=no
   cat > conftest.$ac_ext <<EOF
-#line 4498 "configure"
+#line 4566 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -4518,7 +4586,7 @@ return 0;
   
 ; return 0; }
 EOF
-if { (eval echo configure:4522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_res_search=yes
 else
@@ -4552,7 +4620,7 @@ fi
 
 PTHREAD_LIBS=error
 echo $ac_n "checking for pthread_attr_init in -lpthread""... $ac_c" 1>&6
-echo "configure:4556: checking for pthread_attr_init in -lpthread" >&5
+echo "configure:4624: checking for pthread_attr_init in -lpthread" >&5
 ac_lib_var=`echo pthread'_'pthread_attr_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4560,7 +4628,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpthread  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -4571,7 +4639,7 @@ int main() {
 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
@@ -4593,7 +4661,7 @@ fi
 
 if test "x$PTHREAD_LIBS" = xerror; then
         echo $ac_n "checking for pthread_attr_init in -lpthreads""... $ac_c" 1>&6
-echo "configure:4597: checking for pthread_attr_init in -lpthreads" >&5
+echo "configure:4665: checking for pthread_attr_init in -lpthreads" >&5
 ac_lib_var=`echo pthreads'_'pthread_attr_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4601,7 +4669,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lpthreads  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -4612,7 +4680,7 @@ int main() {
 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
@@ -4635,7 +4703,7 @@ fi
 fi
 if test "x$PTHREAD_LIBS" = xerror; then
         echo $ac_n "checking for pthread_attr_init in -lc_r""... $ac_c" 1>&6
-echo "configure:4639: checking for pthread_attr_init in -lc_r" >&5
+echo "configure:4707: checking for pthread_attr_init in -lc_r" >&5
 ac_lib_var=`echo c_r'_'pthread_attr_init | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4643,7 +4711,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lc_r  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -4654,7 +4722,7 @@ int main() {
 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
@@ -4677,12 +4745,12 @@ fi
 fi
 if test "x$PTHREAD_LIBS" = xerror; then
         echo $ac_n "checking for pthread_attr_init""... $ac_c" 1>&6
-echo "configure:4681: checking for pthread_attr_init" >&5
+echo "configure:4749: checking for pthread_attr_init" >&5
 if eval "test \"`echo '$''{'ac_cv_func_pthread_attr_init'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -4705,7 +4773,7 @@ pthread_attr_init();
 
 ; 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
@@ -4825,7 +4893,7 @@ EOF
 fi
 
 echo $ac_n "checking for tivoli tsm butc support""... $ac_c" 1>&6
-echo "configure:4829: checking for tivoli tsm butc support" >&5
+echo "configure:4897: checking for tivoli tsm butc support" >&5
 XBSA_CFLAGS=""
 if test "$enable_tivoli_tsm" = "yes"; then
        XBSADIR1=/usr/tivoli/tsm/client/api/bin/xopen
@@ -4846,12 +4914,12 @@ fi
 
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:4850: checking for ANSI C header files" >&5
+echo "configure:4918: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4855 "configure"
+#line 4923 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -4859,7 +4927,7 @@ else
 #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*
@@ -4876,7 +4944,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 4880 "configure"
+#line 4948 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -4894,7 +4962,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 4898 "configure"
+#line 4966 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -4915,7 +4983,7 @@ if test "$cross_compiling" = yes; then
   :
 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')
@@ -4926,7 +4994,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:4930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -4950,12 +5018,12 @@ EOF
 fi
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:4954: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:5022: checking for sys/wait.h that is POSIX.1 compatible" >&5
 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4959 "configure"
+#line 5027 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -4971,7 +5039,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:4975: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -4996,12 +5064,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:5000: checking for $ac_hdr that defines DIR" >&5
+echo "configure:5068: checking for $ac_hdr that defines DIR" >&5
 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5005 "configure"
+#line 5073 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -5009,7 +5077,7 @@ int main() {
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:5013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -5034,7 +5102,7 @@ done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
 echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:5038: checking for opendir in -ldir" >&5
+echo "configure:5106: checking for opendir in -ldir" >&5
 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5042,7 +5110,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -5053,7 +5121,7 @@ int main() {
 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
@@ -5075,7 +5143,7 @@ fi
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:5079: checking for opendir in -lx" >&5
+echo "configure:5147: checking for opendir in -lx" >&5
 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5083,7 +5151,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<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
@@ -5094,7 +5162,7 @@ int main() {
 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
@@ -5120,17 +5188,17 @@ for ac_hdr in stdlib.h string.h unistd.h fcntl.h sys/time.h sys/file.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5124: checking for $ac_hdr" >&5
+echo "configure:5192: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#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*
@@ -5160,17 +5228,17 @@ for ac_hdr in netinet/in.h netdb.h sys/fcntl.h sys/mnttab.h sys/mntent.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5164: checking for $ac_hdr" >&5
+echo "configure:5232: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#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*
@@ -5200,17 +5268,17 @@ for ac_hdr in mntent.h sys/vfs.h sys/param.h sys/fs_types.h sys/fstyp.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5204: checking for $ac_hdr" >&5
+echo "configure:5272: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#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*
@@ -5240,17 +5308,17 @@ for ac_hdr in sys/mount.h strings.h termios.h signal.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5244: checking for $ac_hdr" >&5
+echo "configure:5312: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#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*
@@ -5280,17 +5348,17 @@ for ac_hdr in windows.h malloc.h winsock2.h direct.h io.h sys/user.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5284: checking for $ac_hdr" >&5
+echo "configure:5352: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#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*
@@ -5320,17 +5388,17 @@ for ac_hdr in security/pam_modules.h siad.h usersec.h ucontext.h regex.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5324: checking for $ac_hdr" >&5
+echo "configure:5392: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#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*
@@ -5374,12 +5442,12 @@ fi
 for ac_func in utimes random srandom getdtablesize snprintf strlcat strlcpy re_comp re_exec
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5378: checking for $ac_func" >&5
+echo "configure:5446: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -5402,7 +5470,7 @@ $ac_func();
 
 ; 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
@@ -5429,12 +5497,12 @@ done
 for ac_func in setprogname getprogname sigaction mkstemp vsnprintf strerror
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5433: checking for $ac_func" >&5
+echo "configure:5501: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -5457,7 +5525,7 @@ $ac_func();
 
 ; 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
@@ -5485,12 +5553,12 @@ done
 for ac_func in regcomp regexec regerror
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5489: checking for $ac_func" >&5
+echo "configure:5557: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -5513,7 +5581,7 @@ $ac_func();
 
 ; 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
@@ -5538,7 +5606,7 @@ fi
 done
 
 echo $ac_n "checking for POSIX regex library""... $ac_c" 1>&6
-echo "configure:5542: checking for POSIX regex library" >&5
+echo "configure:5610: checking for POSIX regex library" >&5
 if test "$ac_cv_header_regex_h" = "yes" && \
        test "$ac_cv_func_regcomp" = "yes" && \
        test "$ac_cv_func_regexec" = "yes" && \
@@ -5553,12 +5621,12 @@ else
 fi
        
 echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:5557: checking for ssize_t" >&5
+echo "configure:5625: checking for ssize_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5562 "configure"
+#line 5630 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -5586,7 +5654,7 @@ EOF
 fi
 
 echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:5590: checking size of long" >&5
+echo "configure:5658: checking size of long" >&5
 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5594,7 +5662,7 @@ else
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 5598 "configure"
+#line 5666 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 main()
@@ -5605,7 +5673,7 @@ main()
   exit(0);
 }
 EOF
-if { (eval echo configure:5609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_sizeof_long=`cat conftestval`
 else
@@ -5628,12 +5696,12 @@ EOF
 for ac_func in timegm
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5632: checking for $ac_func" >&5
+echo "configure:5700: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<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.  */
@@ -5656,7 +5724,7 @@ $ac_func();
 
 ; 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
@@ -5760,7 +5828,7 @@ LWP_OPTMZ=-O
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5764: checking for $ac_word" >&5
+echo "configure:5832: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5792,7 +5860,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5796: checking for $ac_word" >&5
+echo "configure:5864: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5827,7 +5895,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5831: checking for $ac_word" >&5
+echo "configure:5899: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5862,7 +5930,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5866: checking for $ac_word" >&5
+echo "configure:5934: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_MV'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5897,7 +5965,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5901: checking for $ac_word" >&5
+echo "configure:5969: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RM'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5932,7 +6000,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5936: checking for $ac_word" >&5
+echo "configure:6004: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5967,7 +6035,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5971: checking for $ac_word" >&5
+echo "configure:6039: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6002,7 +6070,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6006: checking for $ac_word" >&5
+echo "configure:6074: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6037,7 +6105,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6041: checking for $ac_word" >&5
+echo "configure:6109: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LORDER'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6290,22 +6358,6 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${MT_CC} -shared"
                ;;
 
-       i386_linux22)
-               CC="gcc -pipe"
-               CCOBJ="gcc -pipe"
-               MT_CC="gcc -pipe"
-               KERN_OPTMZ=-O2
-               LEX="flex -l"
-               MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}'
-               MT_LIBS="-lpthread"
-               PAM_CFLAGS="-O2 -Dlinux -DLINUX_PAM -fPIC"
-               SHLIB_LDFLAGS="-shared -Xlinker -x"
-               TXLIBS="-lncurses"
-               XCFLAGS="-O2 -D_LARGEFILE64_SOURCE"
-               YACC="bison -y"
-               SHLIB_LINKER="${MT_CC} -shared"
-               ;;
-
        i386_umlinux22)
                CC="gcc -pipe"
                CCOBJ="gcc -pipe"
@@ -6322,7 +6374,7 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${MT_CC} -shared"
                ;;
 
-       i386_linux24)
+       i386_linux*)
                CC="gcc -pipe"
                CCOBJ="gcc -pipe"
                MT_CC="gcc -pipe"
@@ -6738,7 +6790,7 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
                ;;
 
-       sunx86_57)
+       sun4x_510)
                CC="/opt/SUNWspro/bin/cc"
                CCOBJ="/opt/SUNWspro/bin/cc"
                LEX="lex"
@@ -6759,6 +6811,26 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
                ;;
 
+       sunx86_57)
+               CC="/opt/SUNWspro/bin/cc"
+               CCOBJ="/opt/SUNWspro/bin/cc"
+               LEX="lex"
+               LD="/usr/ccs/bin/ld"
+               MT_CC="/opt/SUNWspro/bin/cc"
+               MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}'
+               MT_LIBS="-lpthread -lsocket"
+               PAM_CFLAGS="-KPIC"
+               PAM_LIBS="-lc -lpam -lsocket -lnsl -lm"
+               SHLIB_CFLAGS="-KPIC"
+               SHLIB_LDFLAGS="-G -Bsymbolic"
+               TXLIBS="-lcurses"
+               XCFLAGS64='${XCFLAGS} -xarch=v9'
+               XCFLAGS="-dy -Bdynamic"
+               XLIBELFA="-lelf"
+               XLIBKVM="-lkvm"
+               XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl"
+               SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
+               ;;
 
        sunx86_58)
                CC="/opt/SUNWspro/bin/cc"
@@ -6781,7 +6853,26 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
                ;;
 
-
+       sunx86_510)
+               CC="/opt/SUNWspro/bin/cc"
+               CCOBJ="/opt/SUNWspro/bin/cc"
+               LEX="lex"
+               LD="/usr/ccs/bin/ld"
+               MT_CC="/opt/SUNWspro/bin/cc"
+               MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}'
+               MT_LIBS="-lpthread -lsocket"
+               PAM_CFLAGS="-KPIC"
+               PAM_LIBS="-lc -lpam -lsocket -lnsl -lm"
+               SHLIB_CFLAGS="-KPIC"
+               SHLIB_LDFLAGS="-G -Bsymbolic"
+               TXLIBS="-lcurses"
+               XCFLAGS64='${XCFLAGS} -xarch=v9'
+               XCFLAGS="-dy -Bdynamic"
+               XLIBELFA="-lelf"
+               XLIBKVM="-lkvm"
+               XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl"
+               SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
+               ;;
 esac
 
 #
@@ -6791,7 +6882,7 @@ case $AFS_SYSNAME in
        sgi_6*)
                
 echo $ac_n "checking for mem* in sys/systm.h""... $ac_c" 1>&6
-echo "configure:6795: checking for mem* in sys/systm.h" >&5
+echo "configure:6886: checking for mem* in sys/systm.h" >&5
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="$CPPFLAGS -D_KERNEL -D__STRING_H__"
 if eval "test \"`echo '$''{'ac_cv_irix_sys_systm_h_has_mem_funcs'+set}'`\" = set"; then
@@ -6799,7 +6890,7 @@ if eval "test \"`echo '$''{'ac_cv_irix_sys_systm_h_has_mem_funcs'+set}'`\" = set
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 6803 "configure"
+#line 6894 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/systm.h>
@@ -6809,7 +6900,7 @@ extern void     *memcpy(char *, const void *, size_t);
 
 ; return 0; }
 EOF
-if { (eval echo configure:6813: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6904: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_irix_sys_systm_h_has_mem_funcs=no
 else
@@ -7121,8 +7212,6 @@ s%@RHCONFIG_SP@%$RHCONFIG_SP%g
 s%@RHCONFIG_MP@%$RHCONFIG_MP%g
 s%@MPS@%$MPS%g
 s%@HEADER_RT@%$HEADER_RT%g
-s%@KDUMP@%$KDUMP%g
-s%@KDUMP64@%$KDUMP64%g
 s%@PTHREAD_LIBS@%$PTHREAD_LIBS%g
 s%@XBSA_CFLAGS@%$XBSA_CFLAGS%g
 s%@HAVE_PAM@%$HAVE_PAM%g
index f9fa0facaa1abfcd41ce02943eca4a3168922440..e077c68e3e6dabd5d53b9c79d47df20a3995db67 100644 (file)
@@ -1,5 +1,5 @@
 AC_INIT(src/libafs/Makefile.common.in)
-AM_INIT_AUTOMAKE(openafs-libafs,devel)
+AM_INIT_AUTOMAKE(openafs-libafs,1.3.65)
 AC_CONFIG_HEADER(src/config/afsconfig.h)
 define(OPENAFS_CONFIGURE_LIBAFS)
 
index 76956d14d6b784834951ff508495ae373c2d351d..e8c412a581560daa74724714dc9f80af809973a8 100644 (file)
@@ -1,5 +1,5 @@
 AC_INIT(src/config/stds.h)
-AM_INIT_AUTOMAKE(openafs,devel)
+AM_INIT_AUTOMAKE(openafs,1.3.65)
 AC_CONFIG_HEADER(src/config/afsconfig.h)
 
 AC_PROG_CC
index 361efd6b76e79bc5bd55ccce90ab14fa91fb1a65..5b4da795422f3a7d33063c32fbe48802f4f3107f 100644 (file)
@@ -22,7 +22,9 @@ SRC=$(AFSROOT)\src
 !IFNDEF AFS_OBJDIR
 AFS_OBJDIR=$(AFSROOT)\obj
 !ENDIF
+!IFNDEF DESTDIR
 DESTDIR=$(AFSROOT)\dest
+!ENDIF
 
 CD = cd
 NTMAKE = nmake /nologo /f ntmakefile install
@@ -195,7 +197,14 @@ cm_headers: libacl_headers
        $(NTMAKE_HEADERS)
        $(CD) ..\..\..
 
-afsdobjs: cm_headers
+auth_headers: cm_headers
+     echo ***** $@
+       $(DOCD) $(SRC)\auth
+       $(CD) $(SRC)\auth
+       $(NTMAKE_HEADERS)
+       $(CD) ..\..
+
+afsdobjs: auth_headers
      echo ***** $@
        $(DOCD) $(SRC)\WINNT\afsd
        $(CD) $(SRC)\WINNT\afsd
@@ -214,7 +223,7 @@ auth: sys
        $(DOCD) $(SRC)\$@
        $(CD) $(SRC)\$@
        $(NTMAKE)
-       $(CD) ..\..
+       $(CD) ..\..     
 
 ubik: auth
      echo ***** $@
@@ -592,19 +601,26 @@ mkdir:
        -mkdir $(DESTDIR)\free\bin
        -@copy $(SRC)\config\NTLANG.BAT .
 
-NSIS:
+loopback:
+   echo ***** Making Loopback Adapter Utility DLL
+   $(DOCD) $(SRC)\WINNT\install\$@
+   $(CD) $(SRC)\WINNT\install\$@
+   $(NTMAKE)
+   $(CD) ..\..\..\..
+
+NSIS: loopback
    echo ***** Making NSIS Installer
    $(DOCD) $(SRC)\WINNT\install\$@
    $(CD) $(SRC)\WINNT\install\$@
    $(NTMAKE)
    $(CD) ..\..\..\..
 
-#msi:
-#   echo ***** Making MSI Installer
-#   $(DOCD) $(SRC)\WINNT\install\$@
-#   $(CD) $(SRC)\WINNT\install\$@
-#   $(NTMAKE)
-#   $(CD) ..\..\..\..
+wix: loopback
+   echo ***** Making Wix MSI Installer
+   $(DOCD) $(SRC)\WINNT\install\$@
+   $(CD) $(SRC)\WINNT\install\$@
+   $(NTMAKE)
+   $(CD) ..\..\..\..
 
 InstallShield5:
        echo ***** afs_setup_utils
@@ -618,11 +634,11 @@ InstallShield5:
        $(NTMAKE)
        $(CD) ..\..\..\..
 
-media: install InstallShield5 NSIS
+media: install InstallShield5 NSIS wix
 
 install-nsis: install NSIS
 
-install-msi: install msi
+install-wix: install wix
 
 install-is5: install InstallShield5
 
index a99b91f143b23f1befdbdf718a170e7601e9e487..76a9690a5289c18fba55b25419d74603915f0e9f 100644 (file)
@@ -326,7 +326,8 @@ AFSD_SDKLIBS =\
     dnsapi.lib \
        rpcrt4.lib \
        user32.lib \
-    Dbghelp.lib
+    Dbghelp.lib \
+    strsafe.lib
 
 AFSD_EXELIBS =\
        $(DESTDIR)\lib\libosi.lib \
index 83267fa5c6de53ab2c6945b1626d5e144dfd9243..32ab70025aad40f457d44e1e39f4dd8eb97880bd 100644 (file)
@@ -16,6 +16,7 @@
 #include "afsd.h"
 #include "afsd_init.h"
 #include "smb.h"
+#include "cm_conn.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <malloc.h>
@@ -466,11 +467,11 @@ PowerNotificationThreadNotify()
        DWORD           dwRet = 0;
        BOOL            bRet  = FALSE;
 
-       // Notify thread of power event, and wait 19 seconds
+       // Notify thread of power event, and wait for the HardDead timeout period
        dwRet = SignalObjectAndWait(
                                gThreadInfo.hEventPowerEvent,   // object to signal
                                gThreadInfo.hEventResumeMain,   // object to watch
-                               19*1000,                                                // timeout (ms)
+                               HardDeadtimeout*1000,                   // timeout (ms)
                                FALSE                                                   // alertable
                                );
 
index 8f428fe17fcbb6436d5f575ce6c4c2750d87ff77..5da8aceba493e837164ea191646b42c1743fff9d 100644 (file)
@@ -17,6 +17,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <winsock2.h>
+#include <strsafe.h>
 
 #include <osi.h>
 #include "afsd.h"
@@ -78,6 +79,10 @@ BOOL reportSessionStartups = FALSE;
 
 cm_initparams_v1 cm_initParams;
 
+char *cm_sysName = 0;
+int   cm_sysNameCount = 0;
+char *cm_sysNameList[MAXNUMSYSNAMES];
+
 /*
  * AFSD Initialization Log
  *
@@ -111,21 +116,21 @@ afsi_start()
        afsi_file = INVALID_HANDLE_VALUE;
     if (getenv("TEMP"))
     {
-        strcpy(wd, getenv("TEMP"));
+        StringCbCopyA(wd, sizeof(wd), getenv("TEMP"));
     }
     else
     {
         code = GetWindowsDirectory(wd, sizeof(wd));
         if (code == 0) return;
     }
-       strcat(wd, "\\afsd_init.log");
+       StringCbCatA(wd, sizeof(wd), "\\afsd_init.log");
        GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, NULL, t, sizeof(t));
        afsi_file = CreateFile(wd, GENERIC_WRITE, FILE_SHARE_READ, NULL,
                            OPEN_ALWAYS, FILE_FLAG_WRITE_THROUGH, NULL);
     SetFilePointer(afsi_file, 0, NULL, FILE_END);
        GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, NULL, u, sizeof(u));
-       strcat(t, ": Create log file\n");
-       strcat(u, ": Created log file\n");
+       StringCbCatA(t, sizeof(t), ": Create log file\n");
+       StringCbCatA(u, sizeof(u), ": Created log file\n");
        WriteFile(afsi_file, t, strlen(t), &zilch, NULL);
        WriteFile(afsi_file, u, strlen(u), &zilch, NULL);
     p = "PATH=";
@@ -140,16 +145,16 @@ static int afsi_log_useTimestamp = 1;
 void
 afsi_log(char *pattern, ...)
 {
-       char s[100], t[100], d[100], u[300];
+       char s[256], t[100], d[100], u[512];
        int zilch;
        va_list ap;
        va_start(ap, pattern);
 
-       vsprintf(s, pattern, ap);
+       StringCbVPrintfA(s, sizeof(s), pattern, ap);
     if ( afsi_log_useTimestamp ) {
         GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, NULL, t, sizeof(t));
                GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, NULL, d, sizeof(d));
-               sprintf(u, "%s %s: %s\n", d, t, s);
+               StringCbPrintfA(u, sizeof(u), "%s %s: %s\n", d, t, s);
         if (afsi_file != INVALID_HANDLE_VALUE)
             WriteFile(afsi_file, u, strlen(u), &zilch, NULL);
 #ifdef NOTSERVICE
@@ -175,7 +180,7 @@ void afsd_ForceTrace(BOOL flush)
         return;
 
        len = GetTempPath(sizeof(buf)-10, buf);
-       strcpy(&buf[len], "/afsd.log");
+       StringCbCopyA(&buf[len], sizeof(buf)-len, "/afsd.log");
        handle = CreateFile(buf, GENERIC_WRITE, FILE_SHARE_READ,
                            NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        if (handle == INVALID_HANDLE_VALUE) {
@@ -214,6 +219,7 @@ int afsd_InitCM(char **reasonP)
        /*int freelanceEnabled;*/
        WSADATA WSAjunk;
     lana_number_t lanaNum;
+    int i;
 
        WSAStartup(0x0101, &WSAjunk);
 
@@ -246,7 +252,7 @@ int afsd_InitCM(char **reasonP)
                FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
                                | FORMAT_MESSAGE_ALLOCATE_BUFFER,
                              NULL, code, 0, (LPTSTR)&msgBuf, 0, NULL);
-               sprintf(buf,
+               StringCbPrintfA(buf, sizeof(buf),
                        "Failure in configuration while opening Registry: %s",
                        msgBuf);
                osi_panic(buf, __FILE__, __LINE__);
@@ -360,7 +366,7 @@ int afsd_InitCM(char **reasonP)
        if (code == ERROR_SUCCESS)
                afsi_log("Root volume %s", cm_rootVolumeName);
        else {
-               strcpy(cm_rootVolumeName, "root.afs");
+               StringCbCopyA(cm_rootVolumeName, sizeof(cm_rootVolumeName), "root.afs");
                afsi_log("Default root volume name root.afs");
        }
 
@@ -371,7 +377,7 @@ int afsd_InitCM(char **reasonP)
                afsi_log("Mount root %s", cm_mountRoot);
                cm_mountRootLen = strlen(cm_mountRoot);
        } else {
-               strcpy(cm_mountRoot, "/afs");
+               StringCbCopyA(cm_mountRoot, sizeof(cm_mountRoot), "/afs");
                cm_mountRootLen = 4;
                /* Don't log */
        }
@@ -384,7 +390,7 @@ int afsd_InitCM(char **reasonP)
        else {
                GetWindowsDirectory(cm_CachePath, sizeof(cm_CachePath));
                cm_CachePath[2] = 0;    /* get drive letter only */
-               strcat(cm_CachePath, "\\AFSCache");
+               StringCbCatA(cm_CachePath, sizeof(cm_CachePath), "\\AFSCache");
                afsi_log("Default cache path %s", cm_CachePath);
        }
 
@@ -410,15 +416,22 @@ int afsd_InitCM(char **reasonP)
                /* Don't log */
        }
 
-       dummyLen = sizeof(cm_sysName);
+    for ( i=0; i < MAXNUMSYSNAMES; i++ ) {
+        cm_sysNameList[i] = osi_Alloc(MAXSYSNAME);
+        cm_sysNameList[i][0] = '\0';
+    }
+    cm_sysName = cm_sysNameList[0];
+
+       dummyLen = MAXSYSNAME;
        code = RegQueryValueEx(parmKey, "SysName", NULL, NULL,
                                cm_sysName, &dummyLen);
        if (code == ERROR_SUCCESS)
                afsi_log("Sys name %s", cm_sysName);
        else {
-               strcat(cm_sysName, "i386_nt40");
+               StringCbCopyA(cm_sysName, MAXSYSNAME, "i386_nt40");
                afsi_log("Default sys name %s", cm_sysName);
        }
+    cm_sysNameCount = 1;
 
        dummyLen = sizeof(cryptall);
        code = RegQueryValueEx(parmKey, "SecurityLevel", NULL, NULL,
@@ -518,6 +531,16 @@ int afsd_InitCM(char **reasonP)
     if(rx_mtu != -1)
         afsi_log("RX maximum MTU is %d", rx_mtu);
 
+    dummyLen = sizeof(ConnDeadtimeout);
+    code = RegQueryValueEx(parmKey, "ConnDeadTimeout", NULL, NULL,
+                           (BYTE *) &ConnDeadtimeout, &dummyLen);
+    afsi_log("ConnDeadTimeout is %d", ConnDeadtimeout);
+
+    dummyLen = sizeof(HardDeadtimeout);
+    code = RegQueryValueEx(parmKey, "HardDeadTimeout", NULL, NULL,
+                           (BYTE *) &HardDeadtimeout, &dummyLen);
+    afsi_log("HardDeadTimeout is %d", HardDeadtimeout);
+
        RegCloseKey (parmKey);
 
     /* Call lanahelper to get Netbios name, lan adapter number and gateway flag */
@@ -535,7 +558,7 @@ int afsd_InitCM(char **reasonP)
         afsi_log("Using >%s< as SMB server name", cm_NetbiosName);
     } else {
         /* something went horribly wrong.  We can't proceed without a netbios name */
-        sprintf(buf,"Netbios name could not be determined: %li", code);
+        StringCbPrintfA(buf,sizeof(buf),"Netbios name could not be determined: %li", code);
         osi_panic(buf, __FILE__, __LINE__);
     }
 
@@ -669,7 +692,7 @@ int afsd_InitCM(char **reasonP)
        }
 
 #ifdef AFS_AFSDB_ENV
-#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x500
+#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
        if (cm_InitDNS(cm_dnsEnabled) == -1)
          cm_dnsEnabled = 0;  /* init failed, so deactivate */
        afsi_log("cm_InitDNS %d", cm_dnsEnabled);
@@ -716,6 +739,7 @@ int afsd_InitDaemons(char **reasonP)
        /* this should really be in an init daemon from here on down */
 
     if (!cm_freelanceEnabled) {
+               osi_Log0(afsd_logp, "Loading Root Volume from cell");
         code = cm_GetVolumeByName(cm_rootCellp, cm_rootVolumeName, cm_rootUserp,
                                   &req, CM_FLAG_CREATE, &cm_rootVolumep);
         afsi_log("cm_GetVolumeByName code %x root vol %x", code,
index 4291b1c11a5edf7553c01e4f7cd76d99cd8e65fa..09719c8fcb54d04cc3ae867f65702218bb6ab739 100644 (file)
@@ -307,6 +307,7 @@ afsd_ServiceControlHandlerEx(
  * Mount a drive into AFS if there global mapping
  */
 /* DEE Could check first if we are run as SYSTEM */
+#define MAX_RETRIES 30
 static void MountGlobalDrives()
 {
     char szAfsPath[_MAX_PATH];
@@ -314,7 +315,7 @@ static void MountGlobalDrives()
     DWORD dwResult;
     char szKeyName[256];
     HKEY hKey;
-    DWORD dwIndex = 0;
+    DWORD dwIndex = 0, dwRetry = 0;
     DWORD dwDriveSize;
     DWORD dwSubMountSize;
     char szSubMount[256];
@@ -326,7 +327,7 @@ static void MountGlobalDrives()
        if (dwResult != ERROR_SUCCESS)
         return;
 
-    while (1) {
+    while (dwRetry < MAX_RETRIES) {
         dwDriveSize = sizeof(szDriveToMapTo);
         dwSubMountSize = sizeof(szSubMount);
         dwResult = RegEnumValue(hKey, dwIndex++, szDriveToMapTo, &dwDriveSize, 0, &dwType, szSubMount, &dwSubMountSize);
@@ -338,6 +339,7 @@ static void MountGlobalDrives()
             }
         }
 
+        for ( ; dwRetry < MAX_RETRIES; dwRetry++)
                {
                    NETRESOURCE nr;
                    memset (&nr, 0x00, sizeof(NETRESOURCE));
@@ -352,8 +354,14 @@ static void MountGlobalDrives()
                    nr.dwUsage = RESOURCEUSAGE_CONNECTABLE;
 
                    dwResult = WNetAddConnection2(&nr,NULL,NULL,FALSE);
-               }
-        afsi_log("GlobalAutoMap of %s to %s %s", szDriveToMapTo, szSubMount, dwResult ? "succeeded" : "failed");
+            afsi_log("GlobalAutoMap of %s to %s %s (%d)", szDriveToMapTo, szSubMount, 
+                     (dwResult == NO_ERROR) ? "succeeded" : "failed", dwResult);
+            if (dwResult == NO_ERROR) {
+                break;
+            }
+            /* wait for smb server to come up */
+            Sleep((DWORD)1000 /* miliseconds */);              
+        }
     }        
 
     RegCloseKey(hKey);
index 329b836893b08245fd8374dbbad9bd73d2abf9c7..5f96120f87b32c04f9d4f86e574a98d816db3737 100644 (file)
@@ -91,7 +91,6 @@ typedef afs_int32 errcode_t;
 #include <loadfuncs-profile.h>
 #include <loadfuncs-krb.h>
 #include <loadfuncs-krb524.h>
-#include <loadfuncs-afs36.h>
 #include <loadfuncs-leash.h>
 
 // service definitions
index d03dc24f726deb2379d4c85662da39d4acbba373..89d085b48f96887f6f70356ea9f0a1accdf04905 100644 (file)
@@ -199,16 +199,6 @@ DECL_FUNC_PTR(LsaFreeReturnBuffer);
 DECL_FUNC_PTR(LsaGetLogonSessionData);
 #endif /* USE_MS2MIT */
 
-// AFS36 Token Functions
-DECL_FUNC_PTR(ktc_ListTokens);
-DECL_FUNC_PTR(ktc_GetToken);
-DECL_FUNC_PTR(ktc_SetToken);
-DECL_FUNC_PTR(ktc_ForgetAllTokens);
-
-// AFS36 Config Functions
-DECL_FUNC_PTR(cm_SearchCellFile);
-DECL_FUNC_PTR(cm_GetRootCellName);
-
 // CCAPI
 FUNC_INFO ccapi_fi[] = {
     MAKE_FUNC_INFO(cc_initialize),
@@ -349,22 +339,8 @@ FUNC_INFO lsa_fi[] = {
 };
 #endif /* USE_MS2MIT */
 
-FUNC_INFO afst_fi[] = {
-    MAKE_FUNC_INFO(ktc_ListTokens),
-    MAKE_FUNC_INFO(ktc_GetToken),
-    MAKE_FUNC_INFO(ktc_SetToken),
-    MAKE_FUNC_INFO(ktc_ForgetAllTokens),
-    END_FUNC_INFO
-};
-
-FUNC_INFO afsc_fi[] = {
-    MAKE_FUNC_INFO(cm_SearchCellFile),
-    MAKE_FUNC_INFO(cm_GetRootCellName),
-    END_FUNC_INFO
-};
-
 /* Static Prototypes */
-char *afs_realm_of_cell(struct afsconf_cell *);
+char *afs_realm_of_cell(krb5_context, struct afsconf_cell *);
 static long get_cellconfig_callback(void *, struct sockaddr_in *, char *);
 int KFW_AFS_get_cellconfig(char *, struct afsconf_cell *, char *);
 static krb5_error_code KRB5_CALLCONV KRB5_prompter( krb5_context context,
@@ -383,8 +359,6 @@ static HINSTANCE hKrb524 = 0;
 static HINSTANCE hSecur32 = 0;
 #endif /* USE_MS2MIT */
 static HINSTANCE hAdvApi32 = 0;
-static HINSTANCE hAfsTokens = 0;
-static HINSTANCE hAfsConf = 0;
 static HINSTANCE hComErr = 0;
 static HINSTANCE hService = 0;
 static HINSTANCE hProfile = 0;
@@ -421,8 +395,6 @@ KFW_initialize(void)
 #endif /* USE_MS2MIT */
             LoadFuncs(KRB524_DLL, k524_fi, &hKrb524, 0, 1, 1, 1);
             LoadFuncs(PROFILE_DLL, profile_fi, &hProfile, 0, 1, 0, 0);
-            LoadFuncs(AFSTOKENS_DLL, afst_fi, &hAfsTokens, 0, 1, 0, 0);
-            LoadFuncs(AFSCONF_DLL, afsc_fi, &hAfsConf, 0, 1, 0, 0);
             LoadFuncs(LEASH_DLL, leash_fi, &hLeash, 0, 1, 0, 0);
             LoadFuncs(CCAPI_DLL, ccapi_fi, &hCCAPI, 0, 1, 0, 0);
 
@@ -435,7 +407,7 @@ KFW_initialize(void)
                 KFW_AFS_renew_expiring_tokens();
 
                 /* WIN32 NOTE: no way to get max chars */
-                if (!pcm_GetRootCellName(rootcell))
+                if (!cm_GetRootCellName(rootcell))
                     KFW_AFS_renew_token_for_cell(rootcell);
             }
         }
@@ -453,10 +425,6 @@ KFW_cleanup(void)
         FreeLibrary(hKrb4);
     if (hProfile)
         FreeLibrary(hProfile);
-    if (hAfsTokens)
-        FreeLibrary(hAfsTokens);
-    if (hAfsConf)
-        FreeLibrary(hAfsConf);
     if (hComErr)
         FreeLibrary(hComErr);
     if (hService)
@@ -506,7 +474,7 @@ KFW_is_available(void)
          hSecur32 && 
 #endif /* USE_MS2MIT */
          hKrb524 &&
-         hProfile && hAfsTokens && hAfsConf && hLeash && hCCAPI )
+         hProfile && hLeash && hCCAPI )
         return TRUE;
     return FALSE;
 }
@@ -892,9 +860,9 @@ KFW_import_windows_lsa(void)
     krb5_ccache  cc = 0;
     krb5_principal princ = 0;
     char * pname = NULL;
-    krb5_data *  realm;
+    krb5_data *  princ_realm;
     krb5_error_code code;
-    char cell[128]="";
+    char cell[128]="", realm[128]="";
     int i;
          
     if (!pkrb5_init_context)
@@ -919,13 +887,15 @@ KFW_import_windows_lsa(void)
     code = pkrb5_unparse_name(ctx,princ,&pname);
     if ( code ) goto cleanup;
 
-    realm = krb5_princ_realm(ctx, princ);
-    for ( i=0; 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);
@@ -1071,7 +1041,7 @@ KFW_import_ccache_data(void)
                 strcpy(aserver.name, sname->data);
                 strcpy(aserver.cell, cell->data);
 
-                code = pktc_GetToken(&aserver, &atoken, sizeof(atoken), &aclient);
+                code = ktc_GetToken(&aserver, &atoken, sizeof(atoken), &aclient);
                 if (!code) {
                     // Found a token in AFS Client Server which matches
                     char pname[128], *p, *q;
@@ -1148,7 +1118,7 @@ KFW_import_ccache_data(void)
 
 
 int
-KFW_AFS_get_cred(char * username, 
+KFW_AFS_get_cred( char * username, 
                   char * cell,
                   char * password,
                   int lifetime,
@@ -1166,6 +1136,8 @@ KFW_AFS_get_cred(char * username,
     char **cells = NULL;
     int  cell_count=0;
     struct afsconf_cell cellconfig;
+    char * dot;
+
 
     if (!pkrb5_init_context)
         return 0;
@@ -1185,12 +1157,30 @@ KFW_AFS_get_cred(char * username,
     if ( code ) goto cleanup;
 
     realm = strchr(username,'@');
-    if (realm) {
+    if ( realm ) {
+        pname = strdup(username);
+        realm = strchr(pname, '@');
         *realm = '\0';
-        realm++;
+
+        /* handle kerberos iv notation */
+        while ( dot = strchr(pname,'.') ) {
+            *dot = '/';
+        }
+        *realm++ = '@';
+    } else {
+        realm = afs_realm_of_cell(ctx, &cellconfig);  // do not free
+        pname = malloc(strlen(username) + strlen(realm) + 2);
+
+        strcpy(pname, username);
+
+        /* handle kerberos iv notation */
+        while ( dot = strchr(pname,'.') ) {
+            *dot = '/';
+        }
+
+        strcat(pname,"@");
+        strcat(pname,realm);
     }
-    if ( !realm || !realm[0] )
-        realm = afs_realm_of_cell(&cellconfig);  // do not free
 
     if ( IsDebuggerPresent() ) {
         OutputDebugString("Realm: ");
@@ -1198,15 +1188,10 @@ KFW_AFS_get_cred(char * username,
         OutputDebugString("\n");
     }
 
-    code = pkrb5_build_principal(ctx, &principal, strlen(realm),
-                                 realm, username,
-                                 NULL,
-                                 NULL);
-
-    code = KFW_get_ccache(ctx, principal, &cc);
+    code = pkrb5_parse_name(ctx, pname, &principal);
     if ( code ) goto cleanup;
 
-    code = pkrb5_unparse_name(ctx, principal, &pname);
+    code = KFW_get_ccache(ctx, principal, &cc);
     if ( code ) goto cleanup;
 
     if ( lifetime == 0 )
@@ -1254,7 +1239,7 @@ KFW_AFS_get_cred(char * username,
                 code = KFW_AFS_get_cellconfig( cells[cell_count], (void*)&cellconfig, local_cell);
                 if ( code ) continue;
     
-                realm = afs_realm_of_cell(&cellconfig);  // do not free
+                realm = afs_realm_of_cell(ctx, &cellconfig);  // do not free
                 if ( IsDebuggerPresent() ) {
                     OutputDebugString("Realm: ");
                     OutputDebugString(realm);
@@ -1278,7 +1263,7 @@ KFW_AFS_get_cred(char * username,
 
   cleanup:
     if ( pname )
-        pkrb5_free_unparsed_name(ctx,pname);
+        free(pname);
     if ( cc )
         pkrb5_cc_close(ctx, cc);
 
@@ -1419,7 +1404,7 @@ KFW_AFS_renew_expiring_tokens(void)
                     }
                     code = KFW_AFS_get_cellconfig( cells[cell_count], (void*)&cellconfig, local_cell);
                     if ( code ) continue;
-                    realm = afs_realm_of_cell(&cellconfig);  // do not free
+                    realm = afs_realm_of_cell(ctx, &cellconfig);  // do not free
                     if ( IsDebuggerPresent() ) {
                         OutputDebugString("Realm: ");
                         OutputDebugString(realm);
@@ -1503,7 +1488,7 @@ KFW_AFS_renew_token_for_cell(char * cell)
             code = KFW_AFS_get_cellconfig( cell, (void*)&cellconfig, local_cell);
             if ( code ) goto loop_cleanup;
 
-            realm = afs_realm_of_cell(&cellconfig);  // do not free
+            realm = afs_realm_of_cell(ctx, &cellconfig);  // do not free
             if ( IsDebuggerPresent() ) {
                 OutputDebugString("Realm: ");
                 OutputDebugString(realm);
@@ -2386,7 +2371,7 @@ KFW_AFS_unlog(void)
     if (CurrentState != SERVICE_RUNNING)
         return(0);
 
-    rc = pktc_ForgetAllTokens();
+    rc = ktc_ForgetAllTokens();
 
     return(0);
 }
@@ -2426,7 +2411,6 @@ KFW_AFS_klog(
     krb5_creds * k5creds = 0;
     krb5_error_code code;
     krb5_principal client_principal = 0;
-    char * cname = 0, *sname = 0;
     int i, retry = 0;
 
     CurrentState = 0;
@@ -2505,7 +2489,7 @@ KFW_AFS_klog(
 #else
     goto cleanup;
 #endif
-    strcpy(realm_of_cell, afs_realm_of_cell(&ak_cellconfig));
+    strcpy(realm_of_cell, afs_realm_of_cell(ctx, &ak_cellconfig));
 
     if (strlen(service) == 0)
         strcpy(ServiceName, "afs");
@@ -2545,6 +2529,7 @@ KFW_AFS_klog(
 
 
         if ( IsDebuggerPresent() ) {
+            char * cname, *sname;
             pkrb5_unparse_name(ctx, increds.client, &cname);
             pkrb5_unparse_name(ctx, increds.server, &sname);
             OutputDebugString("Getting tickets for \"");
@@ -2552,7 +2537,8 @@ KFW_AFS_klog(
             OutputDebugString("\" and service \"");
             OutputDebugString(sname);
             OutputDebugString("\"\n");
-            cname = sname = 0;
+            pkrb5_free_unparsed_name(ctx,cname);
+            pkrb5_free_unparsed_name(ctx,sname);
         }
 
         code = pkrb5_get_credentials(ctx, 0, cc, &increds, &k5creds);
@@ -2580,7 +2566,6 @@ KFW_AFS_klog(
                 OutputDebugString("\"\n");
                 pkrb5_free_unparsed_name(ctx,cname);
                 pkrb5_free_unparsed_name(ctx,sname);
-                cname = sname = 0;
             }
 
             if (!code)
@@ -2614,7 +2599,6 @@ KFW_AFS_klog(
                 OutputDebugString("\"\n");
                 pkrb5_free_unparsed_name(ctx,cname);
                 pkrb5_free_unparsed_name(ctx,sname);
-                cname = sname = 0;
             }
 
             if (!code)
@@ -2645,7 +2629,6 @@ KFW_AFS_klog(
                     OutputDebugString("\"\n");
                     pkrb5_free_unparsed_name(ctx,cname);
                     pkrb5_free_unparsed_name(ctx,sname);
-                    cname = sname = 0;
                 }
 
                 if (!code)
@@ -2683,7 +2666,7 @@ KFW_AFS_klog(
         memcpy(atoken.ticket, k5creds->ticket.data, atoken.ticketLen);
 
       retry_gettoken5:
-        rc = pktc_GetToken(&aserver, &btoken, sizeof(btoken), &aclient);
+        rc = ktc_GetToken(&aserver, &btoken, sizeof(btoken), &aclient);
         if (rc != 0 && rc != KTC_NOENT && rc != KTC_NOCELL) {
             if ( rc == KTC_NOCM && retry < 20 ) {
                 Sleep(500);
@@ -2739,7 +2722,7 @@ KFW_AFS_klog(
             aclient.smbname[0] = '\0';
         }
 
-        rc = pktc_SetToken(&aserver, &atoken, &aclient, 0);
+        rc = ktc_SetToken(&aserver, &atoken, &aclient, 0);
         if (!rc)
             goto cleanup;   /* We have successfully inserted the token */
 
@@ -2809,7 +2792,7 @@ KFW_AFS_klog(
     memcpy(atoken.ticket, creds.ticket_st.dat, atoken.ticketLen);
 
   retry_gettoken:
-    rc = pktc_GetToken(&aserver, &btoken, sizeof(btoken), &aclient);
+    rc = ktc_GetToken(&aserver, &btoken, sizeof(btoken), &aclient);
     if (rc != 0 && rc != KTC_NOENT && rc != KTC_NOCELL) {
         if ( rc == KTC_NOCM && retry < 20 ) {
             Sleep(500);
@@ -2857,7 +2840,7 @@ KFW_AFS_klog(
         aclient.smbname[0] = '\0';
     }
 
-    if (rc = pktc_SetToken(&aserver, &atoken, &aclient, 0))
+    if (rc = ktc_SetToken(&aserver, &atoken, &aclient, 0))
     {
         KFW_AFS_error(rc, "ktc_SetToken()");
         code = rc;
@@ -2865,10 +2848,6 @@ KFW_AFS_klog(
     }
 
   cleanup:
-    if (cname)
-        pkrb5_free_unparsed_name(ctx,cname);
-    if (sname)
-        pkrb5_free_unparsed_name(ctx,sname);
     if (client_principal)
         pkrb5_free_principal(ctx,client_principal);
     /* increds.client == client_principal */
@@ -2886,28 +2865,20 @@ KFW_AFS_klog(
 /* afs_realm_of_cell():               */
 /**************************************/
 static char *
-afs_realm_of_cell(struct afsconf_cell *cellconfig)
+afs_realm_of_cell(krb5_context ctx, struct afsconf_cell *cellconfig)
 {
     static char krbrlm[REALM_SZ+1]="";
-    krb5_context  ctx = 0;
     char ** realmlist=NULL;
     krb5_error_code r;
 
     if (!cellconfig)
         return 0;
 
-    if (!pkrb5_init_context)
-        return 0;
-
-    r = pkrb5_init_context(&ctx); 
-    if ( !r )
-        r = pkrb5_get_host_realm(ctx, cellconfig->hostName[0], &realmlist);
+    r = pkrb5_get_host_realm(ctx, cellconfig->hostName[0], &realmlist);
     if ( !r && realmlist && realmlist[0] ) {
         strcpy(krbrlm, realmlist[0]);
         pkrb5_free_host_realm(ctx, realmlist);
     }
-    if (ctx)
-        pkrb5_free_context(ctx);
 
     if ( !krbrlm[0] )
     {
@@ -2926,7 +2897,7 @@ afs_realm_of_cell(struct afsconf_cell *cellconfig)
 }
 
 /**************************************/
-/* KFW_AFS_get_cellconfig():                  */
+/* KFW_AFS_get_cellconfig():          */
 /**************************************/
 int 
 KFW_AFS_get_cellconfig(char *cell, struct afsconf_cell *cellconfig, char *local_cell)
@@ -2938,7 +2909,7 @@ KFW_AFS_get_cellconfig(char *cell, struct afsconf_cell *cellconfig, char *local_
     memset(cellconfig, 0, sizeof(*cellconfig));
 
     /* WIN32: cm_GetRootCellName(local_cell) - NOTE: no way to get max chars */
-    if (rc = pcm_GetRootCellName(local_cell))
+    if (rc = cm_GetRootCellName(local_cell))
     {
         return(rc);
     }
@@ -2949,7 +2920,14 @@ KFW_AFS_get_cellconfig(char *cell, struct afsconf_cell *cellconfig, char *local_
     /* WIN32: cm_SearchCellFile(cell, pcallback, pdata) */
     strcpy(cellconfig->name, cell);
 
-    return pcm_SearchCellFile(cell, newcell, get_cellconfig_callback, (void*)cellconfig);
+    rc = cm_SearchCellFile(cell, newcell, get_cellconfig_callback, (void*)cellconfig);
+#ifdef AFS_AFSDB_ENV
+    if (rc != 0) {
+        int ttl;
+        rc = cm_SearchCellByDNS(cell, newcell, &ttl, get_cellconfig_callback, (void*)cellconfig);
+    }
+#endif
+    return rc;
 }
 
 /**************************************/
@@ -3145,7 +3123,14 @@ BOOL KFW_probe_kdc(struct afsconf_cell * cellconfig)
     char   password[PROBE_PASSWORD_LEN+1];
     BOOL serverReachable = 0;
 
-    realm = afs_realm_of_cell(cellconfig);  // do not free
+    if (!pkrb5_init_context)
+        return 0;
+
+    code = pkrb5_init_context(&ctx);
+    if (code) goto cleanup;
+
+
+    realm = afs_realm_of_cell(ctx, cellconfig);  // do not free
 
     code = pkrb5_build_principal(ctx, &principal, strlen(realm),
                                   realm, PROBE_USERNAME, NULL, NULL);
index 6f5a30cadf0ea276141d3f7c22b57f80c278f5b1..389c7f6474ae96b20ebb5750c9272a71718fcbab 100644 (file)
@@ -502,24 +502,27 @@ void buf_WaitIO(cm_buf_t *bp)
                if (!(bp->flags & (CM_BUF_READING | CM_BUF_WRITING)))
                        break;
                
-                /* otherwise I/O is happening, but some other thread is waiting for
-                 * the I/O already.  Wait for that guy to figure out what happened,
-                 * and then check again.
-                 */
-                bp->flags |= CM_BUF_WAITING;
-                osi_SleepM((long) bp, &bp->mx);
-                lock_ObtainMutex(&bp->mx);
+        /* otherwise I/O is happening, but some other thread is waiting for
+         * the I/O already.  Wait for that guy to figure out what happened,
+         * and then check again.
+         */
+        if ( bp->flags & CM_BUF_WAITING ) 
+            osi_Log1(buf_logp, "buf_WaitIO CM_BUF_WAITING already set for 0x%x", bp);
+
+        bp->flags |= CM_BUF_WAITING;
+        osi_SleepM((long) bp, &bp->mx);
+        lock_ObtainMutex(&bp->mx);
                osi_Log1(buf_logp, "buf_WaitIO conflict wait done for 0x%x", bp);
-        }
+    }
         
-        /* if we get here, the IO is done, but we may have to wakeup people waiting for
-         * the I/O to complete.  Do so.
-         */
-        if (bp->flags & CM_BUF_WAITING) {
+    /* if we get here, the IO is done, but we may have to wakeup people waiting for
+     * the I/O to complete.  Do so.
+     */
+    if (bp->flags & CM_BUF_WAITING) {
                bp->flags &= ~CM_BUF_WAITING;
-                osi_Wakeup((long) bp);
-        }
-        osi_Log1(buf_logp, "WaitIO finished wait for bp 0x%x", (long) bp);
+        osi_Wakeup((long) bp);
+    }
+    osi_Log1(buf_logp, "WaitIO finished wait for bp 0x%x", (long) bp);
 }
 
 /* code to drop reference count while holding buf_globalLock */
index 81f1f423c4be58c0ad366843d0bbf341d95a62c9..bade3f29e96e469423a372162b6a8703275d4713 100644 (file)
 /* read/write lock for all global storage in this module */
 osi_rwlock_t cm_callbackLock;
 
-/*
-#ifdef AFS_FREELANCE_CLIENT
-extern int cm_fakeDirCallback;
-extern int cm_fakeGettingCallback;
-#endif
-*/
 #ifdef AFS_FREELANCE_CLIENT
 extern osi_mutex_t cm_Freelance_Lock;
 #endif
@@ -606,7 +600,7 @@ int cm_HaveCallback(cm_scache_t *scp)
     // good shape and we simply return true, provided no change is detected.
   int fdc, fgc;
 
-    if (cm_freelanceEnabled && scp->fid.cell==0x1 && scp->fid.volume==0x20000001) {    // if it's something on /afs
+    if (cm_freelanceEnabled && scp->fid.cell==0x1 && scp->fid.volume==AFS_FAKE_ROOT_VOL_ID) {  // if it's something on /afs
        if (!(scp->fid.vnode==0x1 && scp->fid.unique==0x1))     // if it's not root.afs
            return 1;
        else {
@@ -764,7 +758,7 @@ long cm_GetCallback(cm_scache_t *scp, struct cm_user *userp,
        // cm_MergeStatus and mark that cm_fakeDirCallback is 2
        if (cm_freelanceEnabled &&
         scp->fid.cell==0x1 &&
-               scp->fid.volume==0x20000001 &&
+               scp->fid.volume==AFS_FAKE_ROOT_VOL_ID &&
                scp->fid.unique==0x1 &&
                scp->fid.vnode==0x1) {
                // Start by indicating that we're in the process
@@ -787,9 +781,9 @@ long cm_GetCallback(cm_scache_t *scp, struct cm_user *userp,
                return 0;
        }
 
-       /*if (scp->fid.cell==0x1 && scp->fid.volume==0x20000001) {
-               afsi_log("cm_getcallback should NEVER EVER get here... ");
-       }*/
+       if (scp->fid.cell==0x1 && scp->fid.volume==AFS_FAKE_ROOT_VOL_ID) {
+               osi_Log0(afsd_logp,"cm_getcallback should NEVER EVER get here... ");
+       }
        // yj: end of getcallback modifications  ---------------
                
 #endif /* AFS_FREELANCE_CLIENT */
index c2e942a1c9b9fe74fee03c0f58a6f8d65a2cc5e9..8107329da6b0e785374b1153a61bcf079c2aa281 100644 (file)
@@ -34,7 +34,7 @@ long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *namep)
 {
        cm_server_t *tsp;
        cm_serverRef_t *tsrp;
-        cm_cell_t *cellp;
+    cm_cell_t *cellp;
         
        cellp = rockp;
 
@@ -69,7 +69,7 @@ cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags)
        char fullname[200]="";
 
        lock_ObtainWrite(&cm_cellLock);
-       for(cp = cm_allCellsp; cp; cp=cp->nextp) {
+       for (cp = cm_allCellsp; cp; cp=cp->nextp) {
                if (strcmp(namep, cp->namep) == 0) {
             strcpy(fullname, cp->namep);
             break;
@@ -79,11 +79,22 @@ cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags)
        if ((!cp && (flags & CM_FLAG_CREATE))
 #ifdef AFS_AFSDB_ENV
          /* if it's from DNS, see if it has expired */
-         || (cp && (cp->flags & CM_CELLFLAG_DNS) && (time(0) > cp->timeout))
+         || (cp && (cp->flags & CM_CELLFLAG_DNS) 
+         && ((cp->flags & CM_CELLFLAG_VLSERVER_INVALID) || (time(0) > cp->timeout)))
 #endif
          ) {
-               if (!cp) cp = malloc(sizeof(*cp));
-        memset(cp, 0, sizeof(*cp));
+        int dns_expired = 0;
+               if (!cp) {
+            cp = malloc(sizeof(*cp));
+            memset(cp, 0, sizeof(*cp));
+        } 
+        else {
+            dns_expired = 1;
+            /* must empty cp->vlServersp */
+            cm_FreeServerList(&cp->vlServersp);
+            cp->vlServersp = NULL;
+        }
+
         code = cm_SearchCellFile(namep, fullname, cm_AddCellProc, cp);
                if (code) {
             afsi_log("in cm_GetCell_gen cm_SearchCellFile(%s) returns code= %d fullname= %s", 
@@ -92,27 +103,40 @@ cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags)
 #ifdef AFS_AFSDB_ENV
             if (cm_dnsEnabled /*&& cm_DomainValid(namep)*/) {
                 code = cm_SearchCellByDNS(namep, fullname, &ttl, cm_AddCellProc, cp);
-                if ( code )
+                if ( code ) {
                     afsi_log("in cm_GetCell_gen cm_SearchCellByDNS(%s) returns code= %d fullname= %s", 
                              namep, code, fullname);
+                    if (dns_expired) {
+                        cp->flags |= CM_CELLFLAG_VLSERVER_INVALID;
+                        cp = NULL;  /* set cp to NULL to indicate error */
+                    } 
+                }
+                else {   /* got cell from DNS */
+                    cp->flags |= CM_CELLFLAG_DNS;
+                    cp->flags &= ~CM_CELLFLAG_VLSERVER_INVALID;
+                    cp->timeout = time(0) + ttl;
+                }
             }
 #endif
-            if (code) {
+            if (cp && code) {     /* free newly allocated memory */
                 free(cp);
                 cp = NULL;
                 goto done;
             }
-#ifdef AFS_AFSDB_ENV
-            else {   /* got cell from DNS */
-                cp->flags |= CM_CELLFLAG_DNS;
-                cp->timeout = time(0) + ttl;
-            }
-#endif
                }
 
                /* randomise among those vlservers having the same rank*/ 
                cm_RandomizeServer(&cp->vlServersp);
 
+#ifdef AFS_AFSDB_ENV
+        if (dns_expired) {
+            /* we want to preserve the full name and mutex.
+             * also, cp is already in the cm_allCellsp list
+             */
+            goto done;
+        }
+#endif /* AFS_AFSDB_ENV */
+
         /* otherwise we found the cell, and so we're nearly done */
         lock_InitializeMutex(&cp->mx, "cm_cell_t mutex");
 
@@ -130,54 +154,64 @@ cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, long flags)
   done:
     /* fullname is not valid if cp == NULL */
        if (cp && newnamep)
-         strcpy(newnamep, fullname);
+        strcpy(newnamep, fullname);
        lock_ReleaseWrite(&cm_cellLock);
-        return cp;
+    return cp;
 }
 
 cm_cell_t *cm_FindCellByID(long cellID)
 {
        cm_cell_t *cp;
        int ttl;
-     int code;
+    int code;
 
        lock_ObtainWrite(&cm_cellLock);
        for(cp = cm_allCellsp; cp; cp=cp->nextp) {
-               if (cellID == cp->cellID) break;
-        }
+               if (cellID == cp->cellID) 
+            break;
+    }
 
 #ifdef AFS_AFSDB_ENV
        /* if it's from DNS, see if it has expired */
-       if (cp && cm_dnsEnabled && (cp->flags & CM_CELLFLAG_DNS) && (time(0) > cp->timeout)) {
-         code = cm_SearchCellByDNS(cp->namep, NULL, &ttl, cm_AddCellProc, cp);
-         if (code == 0) {   /* got cell from DNS */
-           cp->flags |= CM_CELLFLAG_DNS;
+       if (cp && cm_dnsEnabled && (cp->flags & CM_CELLFLAG_DNS) && 
+        ((cp->flags & CM_CELLFLAG_VLSERVER_INVALID) || (time(0) > cp->timeout))) {
+        /* must empty cp->vlServersp */
+        cm_FreeServerList(&cp->vlServersp);
+        cp->vlServersp = NULL;
+
+        code = cm_SearchCellByDNS(cp->namep, NULL, &ttl, cm_AddCellProc, cp);
+        if (code == 0) {   /* got cell from DNS */
+            cp->flags |= CM_CELLFLAG_DNS;
+            cp->flags &= ~CM_CELLFLAG_VLSERVER_INVALID;
 #ifdef DEBUG
-           fprintf(stderr, "cell %s: ttl=%d\n", cp->namep, ttl);
+            fprintf(stderr, "cell %s: ttl=%d\n", cp->namep, ttl);
 #endif
-           cp->timeout = time(0) + ttl;
-         }
-         /* if we fail to find it this time, we'll just do nothing and leave the
-            current entry alone */
+            cp->timeout = time(0) + ttl;
+        } else {
+            cp->flags |= CM_CELLFLAG_VLSERVER_INVALID;
+            cp = NULL;      /* return NULL to indicate failure */
+        }
+        /* if we fail to find it this time, we'll just do nothing and leave the
+         * current entry alone 
+         */
        }
 #endif /* AFS_AFSDB_ENV */
 
        lock_ReleaseWrite(&cm_cellLock);        
-       
-        return cp;
+    return cp;
 }
 
 void cm_InitCell(void)
 {
        static osi_once_t once;
         
-        if (osi_Once(&once)) {
+    if (osi_Once(&once)) {
                lock_InitializeRWLock(&cm_cellLock, "cell global lock");
-                cm_allCellsp = NULL;
+        cm_allCellsp = NULL;
                osi_EndOnce(&once);
-        }
+    }
 }
-void cm_ChangeRankCellVLServer(cm_server_t       *tsp)
+void cm_ChangeRankCellVLServer(cm_server_t *tsp)
 {
        cm_cell_t *cp;
        int code;
index bf0363435e220217ff675006ecdfe64560c2f471..e462a7ff917e0df84b71f00073d9ddb5320be19c 100644 (file)
@@ -23,8 +23,10 @@ typedef struct cm_cell {
         long timeout;                   /* if dns, time at which the server addrs expire */
 } cm_cell_t;
 
-#define CM_CELLFLAG_SUID       1       /* setuid flag; not yet used */
-#define CM_CELLFLAG_DNS         2       /* cell servers are from DNS */
+/* These are bit flag values */
+#define CM_CELLFLAG_SUID           1   /* setuid flag; not yet used */
+#define CM_CELLFLAG_DNS         2   /* cell servers are from DNS */
+#define CM_CELLFLAG_VLSERVER_INVALID 4  /* cell servers are invalid */
 
 extern void cm_InitCell(void);
 
index af94ede2cdeab0f5cb696414aaa362aa970130a2..ce6f9257fc29899afd62c5b601e6908e1de113b0 100644 (file)
@@ -9,6 +9,7 @@
 
 #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
 
@@ -165,9 +161,6 @@ long cm_SearchCellFile(char *cellNamep, char *newCellNamep,
     long code;
        int tracking = 1, partial = 0;
 #if defined(DJGPP) || defined(AFS_WIN95_ENV)
-       long ip_addr;
-    int c1, c2, c3, c4;
-    char aname[241];
     char *afsconf_path;
 #endif
 
@@ -334,23 +327,32 @@ long cm_SearchCellFile(char *cellNamep, char *newCellNamep,
                     foundCell = 1;
                                }
 #else
-                /* For DJGPP, we will read IP address instead
-                of name/comment field */
-                code = sscanf(lineBuffer, "%d.%d.%d.%d #%s",
-                               &c1, &c2, &c3, &c4, aname);
-                tp = (char *) &ip_addr;
-                *tp++ = c1;
-                *tp++ = c2;
-                *tp++ = c3;
-                *tp++ = c4;
-                memcpy(&vlSockAddr.sin_addr.s_addr, &ip_addr,
-                        sizeof(long));
-                vlSockAddr.sin_family = AF_INET;
-                /* sin_port supplied by connection code */
-                if (procp)
-                    (*procp)(rockp, &vlSockAddr, valuep);
-                foundCell = 1;
+                thp = 0;
 #endif /* !DJGPP */
+                if (!thp) {
+                    long ip_addr;
+                                       int c1, c2, c3, c4;
+                                       char aname[241] = "";                    
+                    
+                    /* Since there is no gethostbyname() data 
+                     * available we will read the IP address
+                     * stored in the CellServDB file
+                     */
+                    code = sscanf(lineBuffer, "%d.%d.%d.%d #%s",
+                                   &c1, &c2, &c3, &c4, aname);
+                    tp = (char *) &ip_addr;
+                    *tp++ = c1;
+                    *tp++ = c2;
+                    *tp++ = c3;
+                    *tp++ = c4;
+                    memcpy(&vlSockAddr.sin_addr.s_addr, &ip_addr,
+                            sizeof(long));
+                    vlSockAddr.sin_family = AF_INET;
+                    /* sin_port supplied by connection code */
+                    if (procp)
+                        (*procp)(rockp, &vlSockAddr, valuep);
+                    foundCell = 1;
+                }
             }
         }      /* a vldb line */
     }          /* while loop processing all lines */
@@ -363,9 +365,9 @@ long cm_SearchCellByDNS(char *cellNamep, char *newCellNamep, int *ttl,
                cm_configProc_t *procp, void *rockp)
 {
 #ifdef AFS_AFSDB_ENV
-#ifndef DNSAPI_ENV
     int rc;
-    int cellHosts[AFSMAXCELLHOSTS];
+    int  cellHostAddrs[AFSMAXCELLHOSTS];
+    char cellHostNames[AFSMAXCELLHOSTS][MAXHOSTCHARS];
     int numServers;
     int i;
     struct sockaddr_in vlSockAddr;
@@ -373,15 +375,15 @@ long cm_SearchCellByDNS(char *cellNamep, char *newCellNamep, int *ttl,
 #ifdef DEBUG
     DebugEvent_local("AFS SearchCellDNS-","Doing search for [%s]", cellNamep);
 #endif
-    rc = getAFSServer(cellNamep, cellHosts, &numServers, ttl);
+    rc = getAFSServer(cellNamep, cellHostAddrs, cellHostNames, &numServers, ttl);
     if (rc == 0 && numServers > 0) {     /* found the cell */
         for (i = 0; i < numServers; i++) {
-            memcpy(&vlSockAddr.sin_addr.s_addr, &cellHosts[i],
+            memcpy(&vlSockAddr.sin_addr.s_addr, &cellHostAddrs[i],
                    sizeof(long));
            vlSockAddr.sin_family = AF_INET;
            /* sin_port supplied by connection code */
            if (procp)
-          (*procp)(rockp, &vlSockAddr, NULL);
+          (*procp)(rockp, &vlSockAddr, cellHostNames[i]);
            if(newCellNamep)
           strcpy(newCellNamep,cellNamep);
         }
@@ -389,98 +391,6 @@ long cm_SearchCellByDNS(char *cellNamep, char *newCellNamep, int *ttl,
     }
     else
        return -1;  /* not found */
-#else /* DNSAPI_ENV */
-       PDNS_RECORD pDnsCell, pDnsIter, pDnsVol,pDnsVolIter, pDnsCIter;
-       LPSTR vlServers[AFSMAXCELLHOSTS];
-       IP4_ADDRESS vlAddrs[AFSMAXCELLHOSTS];
-       WORD nvlServers;
-       DWORD wttl, i;
-       BOOL success;
-    struct sockaddr_in vlSockAddr;
-
-       success = FALSE;
-
-#ifdef DEBUG
-    DebugEvent_local("AFS SearchCellDNS-","Doing search for [%s]", cellNamep);
-#endif 
-
-    /* query the AFSDB records of cell */
-       if(DnsQuery_A(cellNamep, DNS_TYPE_AFSDB, DNS_QUERY_STANDARD, NULL, &pDnsCell, NULL) == ERROR_SUCCESS) {
-
-               memset((void*) &vlSockAddr, 0, sizeof(vlSockAddr));
-               
-               nvlServers = 0; wttl = 0;
-
-               /* go through the returned records */
-               for(pDnsIter = pDnsCell;pDnsIter; pDnsIter = pDnsIter->pNext) {
-                       /* if we find an AFSDB record with Preference set to 1, we found a volserver */
-                       if(pDnsIter->wType == DNS_TYPE_AFSDB && pDnsIter->Data.Afsdb.wPreference == 1) {
-                               vlServers[nvlServers++] = pDnsIter->Data.Afsdb.pNameExchange;
-                               if(!wttl) wttl = pDnsIter->dwTtl;
-                               if(nvlServers == AFSMAXCELLHOSTS) break;
-                       }
-               }
-
-               for(i=0;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 */
index 06aceb1add71229b2ef4a7ed39fd16a9dcbb365d..b3e22c0e3cb3256878270ffd7be5adca08b08be6 100644 (file)
@@ -28,6 +28,8 @@
 osi_rwlock_t cm_connLock;
 
 long RDRtimeout = CM_CONN_DEFAULTRDRTIMEOUT;
+long ConnDeadtimeout = CM_CONN_CONNDEADTIME;
+long HardDeadtimeout = CM_CONN_HARDDEADTIME;
 
 #define LANMAN_WKS_PARAM_KEY "SYSTEM\\CurrentControlSet\\Services\\lanmanworkstation\\parameters"
 #define LANMAN_WKS_SESSION_TIMEOUT "SessTimeout"
@@ -52,8 +54,11 @@ void cm_InitConn(void)
                lock_InitializeRWLock(&cm_connLock, "connection global lock");
 
         /* keisa - read timeout value for lanmanworkstation  service.
-         * It is used as hardtimeout for connections. 
-         * Default value is 45 
+         * jaltman - as per 
+         *   http://support.microsoft.com:80/support/kb/articles/Q102/0/67.asp&NoWebContent=1
+         * the SessTimeout is a minimum timeout not a maximum timeout.  Therefore, 
+         * I believe that the default should not be short.  Instead, we should wait until
+         * RX times out before reporting a timeout to the SMB client.
          */
                code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, LANMAN_WKS_PARAM_KEY,
                             0, KEY_QUERY_VALUE, &parmKey);
@@ -66,13 +71,17 @@ void cm_InitConn(void)
             {
                 afsi_log("lanmanworkstation : SessTimeout %d", sessTimeout);
                 RDRtimeout = sessTimeout;
-            }
-                   else
-            {
-                RDRtimeout = CM_CONN_DEFAULTRDRTIMEOUT;
+                if ( ConnDeadtimeout < RDRtimeout + 15 ) {
+                    ConnDeadtimeout = RDRtimeout + 15;
+                    afsi_log("ConnDeadTimeout increased to %d", ConnDeadtimeout);
+                }
+                if ( HardDeadtimeout < 2 * ConnDeadtimeout ) {
+                    HardDeadtimeout = 2 * ConnDeadtimeout;
+                    afsi_log("HardDeadTimeout increased to %d", HardDeadtimeout);
+                }
             }
         }
-               
+
         osi_EndOnce(&once);
     }
 }
@@ -164,7 +173,7 @@ cm_Analyze(cm_conn_t *connp, cm_user_t *userp, cm_req_t *reqp,
        if (reqp->flags & CM_REQ_NORETRY)
                goto out;
 
-       /* if timeout - check that is did not exceed the SMB timeout
+       /* if timeout - check that it did not exceed the SMB timeout
           and retry */
        if (errorCode == CM_ERROR_TIMEDOUT)
     {
@@ -335,13 +344,8 @@ long cm_ConnByMServers(cm_serverRef_t *serversp, cm_user_t *usersp,
 #endif
         
        /* leave 5 seconds margin of safety */
-       timeLeft = RDRtimeout - timeUsed - 5;
-       hardTimeLeft = timeLeft;
-
-       /* Time enough to do an RPC? */
-       if (timeLeft < 1) {
-               return CM_ERROR_TIMEDOUT;
-       }
+       timeLeft =  ConnDeadtimeout - timeUsed - 5;
+       hardTimeLeft = HardDeadtimeout - timeUsed - 5;
 
        lock_ObtainWrite(&cm_serverLock);
 
@@ -360,11 +364,11 @@ long cm_ConnByMServers(cm_serverRef_t *serversp, cm_user_t *usersp,
                 if (code == 0) {
                     cm_PutServer(tsp);
                     /* Set RPC timeout */
-                    if (timeLeft > CM_CONN_CONNDEADTIME)
-                        timeLeft = CM_CONN_CONNDEADTIME;
+                    if (timeLeft > ConnDeadtimeout)
+                        timeLeft = ConnDeadtimeout;
 
-                    if (hardTimeLeft > CM_CONN_HARDDEADTIME
-                        hardTimeLeft = CM_CONN_HARDDEADTIME;
+                    if (hardTimeLeft > HardDeadtimeout
+                        hardTimeLeft = HardDeadtimeout;
 
                     lock_ObtainMutex(&(*connpp)->mx);
                     rx_SetConnDeadTime((*connpp)->callp,
@@ -468,8 +472,8 @@ static void cm_NewRXConnection(cm_conn_t *tcp, cm_ucell_t *ucellp,
                                   serviceID,
                                   secObjp,
                                   secIndex);
-       rx_SetConnDeadTime(tcp->callp, CM_CONN_CONNDEADTIME);
-       rx_SetConnHardDeadTime(tcp->callp, CM_CONN_HARDDEADTIME);
+       rx_SetConnDeadTime(tcp->callp, ConnDeadtimeout);
+       rx_SetConnHardDeadTime(tcp->callp, HardDeadtimeout);
        tcp->ucgen = ucellp->gen;
     if (secObjp)
         rxs_Release(secObjp);   /* Decrement the initial refCount */
index 4c9a42fe1e01b08e2be210c103459eef07b04e57..719d438d39cc66819e8e8e06afcce6bce459c647 100644 (file)
 #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 */
index aba7a7932871a788f4aa7b14d432b6b785453fb8..1ea2be8577ada621fc4d5d90c55e0770f3e35613 100644 (file)
@@ -45,29 +45,29 @@ long cm_BufWrite(void *vfidp, osi_hyper_t *offsetp, long length, long flags,
          */
        long code;
        cm_fid_t *fidp = vfidp;
-        cm_scache_t *scp;
-        long nbytes;
-        long temp;
-        AFSFetchStatus outStatus;
-        AFSStoreStatus inStatus;
-        osi_hyper_t thyper;
-        AFSVolSync volSync;
-        AFSFid tfid;
-        struct rx_call *callp;
-        osi_queueData_t *qdp;
-        cm_buf_t *bufp;
-        long wbytes;
-        char *bufferp;
-        cm_conn_t *connp;
-        long truncPos;
-        cm_bulkIO_t biod;              /* bulk IO descriptor */
-
-        osi_assert(userp != NULL);
-
-        /* now, the buffer may or may not be filled with good data (buf_GetNew
-         * drops lots of locks, and may indeed return a properly initialized
-         * buffer, although more likely it will just return a new, empty, buffer.
-         */
+    cm_scache_t *scp;
+    long nbytes;
+    long temp;
+    AFSFetchStatus outStatus;
+    AFSStoreStatus inStatus;
+    osi_hyper_t thyper;
+    AFSVolSync volSync;
+    AFSFid tfid;
+    struct rx_call *callp;
+    osi_queueData_t *qdp;
+    cm_buf_t *bufp;
+    long wbytes;
+    char *bufferp;
+    cm_conn_t *connp;
+    long truncPos;
+    cm_bulkIO_t biod;          /* bulk IO descriptor */
+
+    osi_assert(userp != NULL);
+
+    /* now, the buffer may or may not be filled with good data (buf_GetNew
+     * drops lots of locks, and may indeed return a properly initialized
+     * buffer, although more likely it will just return a new, empty, buffer.
+     */
        scp = cm_FindSCache(fidp);
        if (scp == NULL)
                return CM_ERROR_NOSUCHFILE;     /* shouldn't happen */
@@ -76,97 +76,100 @@ long cm_BufWrite(void *vfidp, osi_hyper_t *offsetp, long length, long flags,
 
        lock_ObtainMutex(&scp->mx);
         
-        code = cm_SetupStoreBIOD(scp, offsetp, length, &biod, userp, reqp);
-        if (code) {
+    code = cm_SetupStoreBIOD(scp, offsetp, length, &biod, userp, reqp);
+    if (code) {
                osi_Log1(afsd_logp, "cm_SetupStoreBIOD code %x", code);
                lock_ReleaseMutex(&scp->mx);
                cm_ReleaseSCache(scp);
-                return code;
-        }
+        return code;
+    }
 
        if (biod.length == 0) {
                osi_Log0(afsd_logp, "cm_SetupStoreBIOD length 0");
                lock_ReleaseMutex(&scp->mx);
                cm_ReleaseBIOD(&biod, 1);       /* should be a NOOP */
                cm_ReleaseSCache(scp);
-               return 0;
-       }
+        return 0;
+       }   
 
        /* Serialize StoreData RPC's; for rationale see cm_scache.c */
        (void) cm_SyncOp(scp, NULL, userp, reqp, 0, CM_SCACHESYNC_STOREDATA_EXCL);
 
        /* prepare the output status for the store */
        scp->mask |= CM_SCACHEMASK_CLIENTMODTIME;
-        cm_StatusFromAttr(&inStatus, scp, NULL);
-        truncPos = scp->length.LowPart;
-        if ((scp->mask & CM_SCACHEMASK_TRUNCPOS)
-                       && scp->truncPos.LowPart < (unsigned long) truncPos)
-                               truncPos = scp->truncPos.LowPart;
+    cm_StatusFromAttr(&inStatus, scp, NULL);
+    truncPos = scp->length.LowPart;
+    if ((scp->mask & CM_SCACHEMASK_TRUNCPOS)
+         && scp->truncPos.LowPart < (unsigned long) truncPos)
+        truncPos = scp->truncPos.LowPart;
        scp->mask &= ~CM_SCACHEMASK_TRUNCPOS;
                 
        /* compute how many bytes to write from this buffer */
-        thyper = LargeIntegerSubtract(scp->length, biod.offset);
-        if (LargeIntegerLessThanZero(thyper)) {
+    thyper = LargeIntegerSubtract(scp->length, biod.offset);
+    if (LargeIntegerLessThanZero(thyper)) {
                /* entire buffer is past EOF */
                nbytes = 0;
-        }
-        else {
+    }
+    else {
                /* otherwise write out part of buffer before EOF, but not
-                 * more than bufferSize bytes.
-                 */
+         * more than bufferSize bytes.
+         */
                nbytes = thyper.LowPart;
-                if (nbytes > biod.length) nbytes = biod.length;
-        }
+        if (nbytes > biod.length) 
+            nbytes = biod.length;
+    }
 
        lock_ReleaseMutex(&scp->mx);
         
-        /* now we're ready to do the store operation */
-        do {
+    /* now we're ready to do the store operation */
+    do {
                code = cm_Conn(&scp->fid, userp, reqp, &connp);
-                if (code) continue;
+        if (code) 
+            continue;
                
                callp = rx_NewCall(connp->callp);
 
                osi_Log3(afsd_logp, "CALL StoreData vp %x, off 0x%x, size 0x%x",
-                       (long) scp, biod.offset.LowPart, nbytes);
+                 (long) scp, biod.offset.LowPart, nbytes);
 
-                code = StartRXAFS_StoreData(callp, &tfid, &inStatus,
-                       biod.offset.LowPart, nbytes, truncPos);
+        code = StartRXAFS_StoreData(callp, &tfid, &inStatus,
+                                    biod.offset.LowPart, nbytes, truncPos);
 
                if (code == 0) {
-                       /* write the data from the the list of buffers */
-                        qdp = NULL;
+            /* write the data from the the list of buffers */
+            qdp = NULL;
                        while(nbytes > 0) {
                                if (qdp == NULL)
                                        qdp = biod.bufListEndp;
                                else
                                        qdp = (osi_queueData_t *) osi_QPrev(&qdp->q);
                                osi_assert(qdp != NULL);
-                               bufp = osi_GetQData(qdp);
-                                bufferp = bufp->datap;
-                               wbytes = nbytes;
-                               if (wbytes > buf_bufferSize) wbytes = buf_bufferSize;
-
-                                /* write out wbytes of data from bufferp */
-                               temp = rx_Write(callp, bufferp, wbytes);
-                               if (temp != wbytes) {
-                                       code = -1;
+                bufp = osi_GetQData(qdp);
+                bufferp = bufp->datap;
+                wbytes = nbytes;
+                if (wbytes > buf_bufferSize) 
+                    wbytes = buf_bufferSize;
+
+                /* write out wbytes of data from bufferp */
+                temp = rx_Write(callp, bufferp, wbytes);
+                if (temp != wbytes) {
+                    code = -1;
                                        break;
                                }
-                                nbytes -= wbytes;
-                        }      /* while more bytes to write */
+                nbytes -= wbytes;
+            }  /* while more bytes to write */
                }               /* if RPC started successfully */
 
                if (code == 0)
                        code = EndRXAFS_StoreData(callp, &outStatus, &volSync);
-                code = rx_EndCall(callp, code);
-                osi_Log0(afsd_logp, "CALL StoreData DONE");
+        code = rx_EndCall(callp, code);
+        osi_Log0(afsd_logp, "CALL StoreData DONE");
                 
        } while (cm_Analyze(connp, userp, reqp, &scp->fid, &volSync, NULL, code));
-        code = cm_MapRPCError(code, reqp);
+    code = cm_MapRPCError(code, reqp);
         
-        /* now, clean up our state */
-        lock_ObtainMutex(&scp->mx);
+    /* now, clean up our state */
+    lock_ObtainMutex(&scp->mx);
 
        cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_STOREDATA_EXCL);
 
@@ -176,21 +179,21 @@ long cm_BufWrite(void *vfidp, osi_hyper_t *offsetp, long length, long flags,
                 * stored that sets the file's size (by writing and by using
                 * the truncate-first option in the store call).
                 *
-                 * At this point, we've just finished a store, and so the trunc
+         * At this point, we've just finished a store, and so the trunc
                 * pos field is clean.  If the file's size at the server is at
                 * least as big as we think it should be, then we turn off the
                 * length dirty bit, since all the other dirty buffers must
                 * precede this one in the file.
-                 *
-                 * The file's desired size shouldn't be smaller than what's
+         *
+         * The file's desired size shouldn't be smaller than what's
                 * stored at the server now, since we just did the trunc pos
                 * store.
-                 *
-                 * We have to turn off the length dirty bit as soon as we can,
+         *
+         * We have to turn off the length dirty bit as soon as we can,
                 * so that we see updates made by other machines.
-                 */
+         */
                if (outStatus.Length >= scp->length.LowPart)
-                       scp->mask &= ~CM_SCACHEMASK_LENGTH;
+            scp->mask &= ~CM_SCACHEMASK_LENGTH;
                cm_MergeStatus(scp, &outStatus, &volSync, userp, 0);
        } else {
                if (code == CM_ERROR_SPACE)
@@ -198,11 +201,11 @@ long cm_BufWrite(void *vfidp, osi_hyper_t *offsetp, long length, long flags,
                else if (code == CM_ERROR_QUOTA)
                        scp->flags |= CM_SCACHEFLAG_OVERQUOTA;
        }
-        lock_ReleaseMutex(&scp->mx);
-        cm_ReleaseBIOD(&biod, 1);
+    lock_ReleaseMutex(&scp->mx);
+    cm_ReleaseBIOD(&biod, 1);
        cm_ReleaseSCache(scp);
 
-        return code;
+    return code;
 }
 
 /*
@@ -212,18 +215,18 @@ long cm_BufWrite(void *vfidp, osi_hyper_t *offsetp, long length, long flags,
  */
 long cm_StoreMini(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
 {
-        AFSFetchStatus outStatus;
-        AFSStoreStatus inStatus;
-        AFSVolSync volSync;
-        AFSFid tfid;
+    AFSFetchStatus outStatus;
+    AFSStoreStatus inStatus;
+    AFSVolSync volSync;
+    AFSFid tfid;
        long code;
        long truncPos;
        cm_conn_t *connp;
-        struct rx_call *callp;
+    struct rx_call *callp;
 
        /* Serialize StoreData RPC's; for rationale see cm_scache.c */
        (void) cm_SyncOp(scp, NULL, userp, reqp, 0,
-                        CM_SCACHESYNC_STOREDATA_EXCL);
+                     CM_SCACHESYNC_STOREDATA_EXCL);
 
        /* prepare the output status for the store */
        inStatus.Mask = AFS_SETMODTIME;
@@ -231,35 +234,35 @@ long cm_StoreMini(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
        scp->mask &= ~CM_SCACHEMASK_CLIENTMODTIME;
 
        /* calculate truncation position */
-        truncPos = scp->length.LowPart;
-        if ((scp->mask & CM_SCACHEMASK_TRUNCPOS)
-                       && scp->truncPos.LowPart < (unsigned long) truncPos)
-                               truncPos = scp->truncPos.LowPart;
+    truncPos = scp->length.LowPart;
+    if ((scp->mask & CM_SCACHEMASK_TRUNCPOS)
+         && scp->truncPos.LowPart < (unsigned long) truncPos)
+        truncPos = scp->truncPos.LowPart;
        scp->mask &= ~CM_SCACHEMASK_TRUNCPOS;
                 
        lock_ReleaseMutex(&scp->mx);
 
        cm_AFSFidFromFid(&tfid, &scp->fid);
 
-        /* now we're ready to do the store operation */
-        do {
+    /* now we're ready to do the store operation */
+    do {
                code = cm_Conn(&scp->fid, userp, reqp, &connp);
-                if (code) continue;
+        if (code) 
+            continue;
                
                callp = rx_NewCall(connp->callp);
 
-                code = StartRXAFS_StoreData(callp, &tfid, &inStatus,
-                       0, 0, truncPos);
+        code = StartRXAFS_StoreData(callp, &tfid, &inStatus,
+                                    0, 0, truncPos);
 
                if (code == 0)
                        code = EndRXAFS_StoreData(callp, &outStatus, &volSync);
-                code = rx_EndCall(callp, code);
-                
+        code = rx_EndCall(callp, code);
        } while (cm_Analyze(connp, userp, reqp, &scp->fid, &volSync, NULL, code));
-        code = cm_MapRPCError(code, reqp);
+    code = cm_MapRPCError(code, reqp);
         
-        /* now, clean up our state */
-        lock_ObtainMutex(&scp->mx);
+    /* now, clean up our state */
+    lock_ObtainMutex(&scp->mx);
 
        cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_STOREDATA_EXCL);
 
@@ -269,7 +272,7 @@ long cm_StoreMini(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
                 * see cm_BufWrite().
                 */
                if (outStatus.Length >= scp->length.LowPart)
-                       scp->mask &= ~CM_SCACHEMASK_LENGTH;
+            scp->mask &= ~CM_SCACHEMASK_LENGTH;
                cm_MergeStatus(scp, &outStatus, &volSync, userp, 0);
        }
 
@@ -281,7 +284,7 @@ long cm_BufRead(cm_buf_t *bufp, long nbytes, long *bytesReadp, cm_user_t *userp)
        *bytesReadp = buf_bufferSize;
 
        /* now return a code that means that I/O is done */
-        return 0;
+    return 0;
 }
 
 /* stabilize scache entry, and return with it locked so 
@@ -290,21 +293,19 @@ long cm_BufRead(cm_buf_t *bufp, long nbytes, long *bytesReadp, cm_user_t *userp)
 long cm_BufStabilize(void *parmp, cm_user_t *userp, cm_req_t *reqp)
 {
        cm_scache_t *scp;
-        long code;
+    long code;
 
-        scp = parmp;
+    scp = parmp;
         
        lock_ObtainMutex(&scp->mx);
-        code = cm_SyncOp(scp, NULL, userp, reqp,
-                        0, CM_SCACHESYNC_NEEDCALLBACK
-                               | CM_SCACHESYNC_GETSTATUS
-                               | CM_SCACHESYNC_SETSIZE);
+    code = cm_SyncOp(scp, NULL, userp, reqp, 0, 
+                     CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_SETSIZE);
        if (code) {
                lock_ReleaseMutex(&scp->mx);
-               return code;
+        return code;
        }
         
-        return 0;
+    return 0;
 }
 
 /* undoes the work that cm_BufStabilize does: releases lock so things can change again */
@@ -312,25 +313,26 @@ long cm_BufUnstabilize(void *parmp, cm_user_t *userp)
 {
        cm_scache_t *scp;
         
-        scp = parmp;
+    scp = parmp;
         
-        lock_ReleaseMutex(&scp->mx);
+    lock_ReleaseMutex(&scp->mx);
         
        /* always succeeds */
-        return 0;
+    return 0;
 }
 
 cm_buf_ops_t cm_bufOps = {
        cm_BufWrite,
-        cm_BufRead,
-        cm_BufStabilize,
-        cm_BufUnstabilize
+    cm_BufRead,
+    cm_BufStabilize,
+    cm_BufUnstabilize
 };
 
 int cm_InitDCache(long chunkSize, long nbuffers)
 {
        lock_InitializeMutex(&cm_bufGetMutex, "buf_Get mutex");
-       if (nbuffers) buf_nbuffers = nbuffers;
+       if (nbuffers) 
+        buf_nbuffers = nbuffers;
        return buf_Init(&cm_bufOps);
 }
 
@@ -356,23 +358,26 @@ int cm_HaveBuffer(cm_scache_t *scp, cm_buf_t *bufp, int isBufLocked)
                return 1;
        if (!isBufLocked) {
                code = lock_TryMutex(&bufp->mx);
-                if (code == 0) {
+        if (code == 0) {
                        /* don't have the lock, and can't lock it, then
-                         * return failure.
-                         */
-                         return 0;
-                }
+             * return failure.
+             */
+            return 0;
         }
+    }
 
        /* remember dirty flag for later */
        code = bufp->flags & CM_BUF_DIRTY;
 
        /* release lock if we obtained it here */
-       if (!isBufLocked) lock_ReleaseMutex(&bufp->mx);
+       if (!isBufLocked) 
+        lock_ReleaseMutex(&bufp->mx);
 
        /* if buffer was dirty, buffer is acceptable for use */
-        if (code) return 1;
-        else return 0;
+        if (code) 
+            return 1;
+        else 
+            return 0;
 }
 
 /* used when deciding whether to do a prefetch or not */
@@ -380,85 +385,87 @@ long cm_CheckFetchRange(cm_scache_t *scp, osi_hyper_t *startBasep, long length,
        cm_user_t *up, cm_req_t *reqp, osi_hyper_t *realBasep)
 {
        osi_hyper_t toffset;
-        osi_hyper_t tbase;
-        long code;
-        cm_buf_t *bp;
-        int stop;
+    osi_hyper_t tbase;
+    long code;
+    cm_buf_t *bp;
+    int stop;
         
-        /* now scan all buffers in the range, looking for any that look like
-         * they need work.
-         */
+    /* now scan all buffers in the range, looking for any that look like
+     * they need work.
+     */
        tbase = *startBasep;
        stop = 0;
        lock_ObtainMutex(&scp->mx);
-        while(length > 0) {
+    while(length > 0) {
                /* get callback so we can do a meaningful dataVersion comparison */
-               code = cm_SyncOp(scp, NULL, up, reqp, 0,
-                                CM_SCACHESYNC_NEEDCALLBACK
-                                        | CM_SCACHESYNC_GETSTATUS);
+        code = cm_SyncOp(scp, NULL, up, reqp, 0,
+                         CM_SCACHESYNC_NEEDCALLBACK
+                         | CM_SCACHESYNC_GETSTATUS);
                if (code) {
                        scp->flags &= ~CM_SCACHEFLAG_PREFETCHING;
                        lock_ReleaseMutex(&scp->mx);
-                        return code;
-                }
+            return code;
+        }
                 
-                if (LargeIntegerGreaterThanOrEqualTo(tbase, scp->length)) {
+        if (LargeIntegerGreaterThanOrEqualTo(tbase, scp->length)) {
                        /* we're past the end of file */
-                        break;
-                }
+            break;
+        }
 
                bp = buf_Find(scp, &tbase);
                /* We cheat slightly by not locking the bp mutex. */
-                if (bp) {
-                        if ((bp->cmFlags
+        if (bp) {
+            if ((bp->cmFlags
                              & (CM_BUF_CMFETCHING | CM_BUF_CMSTORING)) == 0
-                               && bp->dataVersion != scp->dataVersion)
-                                       stop = 1;
-                       buf_Release(bp);
+                 && bp->dataVersion != scp->dataVersion)
+                stop = 1;
+            buf_Release(bp);
                }
-                else stop = 1;
+        else 
+            stop = 1;
 
                /* if this buffer is essentially guaranteed to require a fetch,
-                 * break out here and return this position.
-                 */
-                if (stop) break;
+         * break out here and return this position.
+         */
+        if (stop) 
+            break;
                 
-                toffset.LowPart = buf_bufferSize;
-                toffset.HighPart = 0;
-                tbase = LargeIntegerAdd(toffset, tbase);
-                length -= buf_bufferSize;
-        }
+        toffset.LowPart = buf_bufferSize;
+        toffset.HighPart = 0;
+        tbase = LargeIntegerAdd(toffset, tbase);
+        length -= buf_bufferSize;
+    }
         
-        /* if we get here, either everything is fine or stop stopped us at a
-        * particular buffer in the range that definitely needs to be fetched.
-         */
-        if (stop == 0) {
+    /* if we get here, either everything is fine or stop stopped us at a
+     * particular buffer in the range that definitely needs to be fetched.
+     */
+    if (stop == 0) {
                /* return non-zero code since realBasep won't be valid */
                scp->flags &= ~CM_SCACHEFLAG_PREFETCHING;
                code = -1;
-        }
-        else {
+    }
+    else {
                /* successfully found a page that will need fetching */
                *realBasep = tbase;
-                code = 0;
-        }
-        lock_ReleaseMutex(&scp->mx);
-        return code;
+        code = 0;
+    }
+    lock_ReleaseMutex(&scp->mx);
+    return code;
 }
 
 void cm_BkgStore(cm_scache_t *scp, long p1, long p2, long p3, long p4,
        cm_user_t *userp)
 {
        osi_hyper_t toffset;
-        long length;
+    long length;
        cm_req_t req;
 
        cm_InitReq(&req);
        req.flags |= CM_REQ_NORETRY;
 
-        toffset.LowPart = p1;
-        toffset.HighPart = p2;
-        length = p3;
+    toffset.LowPart = p1;
+    toffset.HighPart = p2;
+    length = p3;
 
        osi_Log2(afsd_logp, "Starting BKG store vp 0x%x, base 0x%x", scp, p1);
 
@@ -466,7 +473,7 @@ void cm_BkgStore(cm_scache_t *scp, long p1, long p2, long p3, long p4,
 
        lock_ObtainMutex(&scp->mx);
        cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_ASYNCSTORE);
-        lock_ReleaseMutex(&scp->mx);
+    lock_ReleaseMutex(&scp->mx);
 }
 
 void cm_ClearPrefetchFlag(long code, cm_scache_t *scp, osi_hyper_t *base)
@@ -479,9 +486,9 @@ void cm_ClearPrefetchFlag(long code, cm_scache_t *scp, osi_hyper_t *base)
                thyper =  LargeIntegerAdd(*base, thyper);
                thyper.LowPart &= (-cm_chunkSize);
                if (LargeIntegerGreaterThan(*base, scp->prefetch.base))
-                       scp->prefetch.base = *base;
+            scp->prefetch.base = *base;
                if (LargeIntegerGreaterThan(thyper, scp->prefetch.end))
-                       scp->prefetch.end = thyper;
+            scp->prefetch.end = thyper;
        }
        scp->flags &= ~CM_SCACHEFLAG_PREFETCHING;
 }
@@ -491,9 +498,9 @@ void cm_BkgPrefetch(cm_scache_t *scp, long p1, long p2, long p3, long p4,
        cm_user_t *userp)
 {
        long length;
-        osi_hyper_t base;
-        long code;
-        cm_buf_t *bp;
+    osi_hyper_t base;
+    long code;
+    cm_buf_t *bp;
        int cpff = 0;                   /* cleared prefetch flag */
        cm_req_t req;
 
@@ -501,26 +508,27 @@ void cm_BkgPrefetch(cm_scache_t *scp, long p1, long p2, long p3, long p4,
        req.flags |= CM_REQ_NORETRY;
         
        base.LowPart = p1;
-        base.HighPart = p2;
-        length = p3;
+    base.HighPart = p2;
+    length = p3;
         
        osi_Log2(afsd_logp, "Starting BKG prefetch vp 0x%x, base 0x%x", scp, p1);
 
-        code = buf_Get(scp, &base, &bp);
+    code = buf_Get(scp, &base, &bp);
 
        lock_ObtainMutex(&scp->mx);
 
-        if (code || (bp->cmFlags & CM_BUF_CMFETCHING)) {
+    if (code || (bp->cmFlags & CM_BUF_CMFETCHING)) {
                scp->flags &= ~CM_SCACHEFLAG_PREFETCHING;
                lock_ReleaseMutex(&scp->mx);
                return;
        }
 
-        code = cm_GetBuffer(scp, bp, &cpff, userp, &req);
-       if (!cpff) cm_ClearPrefetchFlag(code, scp, &base);
+    code = cm_GetBuffer(scp, bp, &cpff, userp, &req);
+       if (!cpff) 
+        cm_ClearPrefetchFlag(code, scp, &base);
        lock_ReleaseMutex(&scp->mx);
-        buf_Release(bp);
-        return;
+    buf_Release(bp);
+    return;
 }
 
 /* a read was issued to offsetp, and we have to determine whether we should
@@ -530,40 +538,40 @@ void cm_ConsiderPrefetch(cm_scache_t *scp, osi_hyper_t *offsetp,
        cm_user_t *userp, cm_req_t *reqp)
 {
        long code;
-        osi_hyper_t realBase;
-        osi_hyper_t readBase;
+    osi_hyper_t realBase;
+    osi_hyper_t readBase;
         
-        readBase = *offsetp;
+    readBase = *offsetp;
        /* round up to chunk boundary */
        readBase.LowPart += (cm_chunkSize-1);
        readBase.LowPart &= (-cm_chunkSize);
 
        lock_ObtainMutex(&scp->mx);
        if ((scp->flags & CM_SCACHEFLAG_PREFETCHING)
-             || LargeIntegerLessThanOrEqualTo(readBase, scp->prefetch.base)) {
+         || LargeIntegerLessThanOrEqualTo(readBase, scp->prefetch.base)) {
                lock_ReleaseMutex(&scp->mx);
-               return;
+        return;
        }
        scp->flags |= CM_SCACHEFLAG_PREFETCHING;
 
        /* start the scan at the latter of the end of this read or
-         * the end of the last fetched region.
-         */
+     * the end of the last fetched region.
+     */
        if (LargeIntegerGreaterThan(scp->prefetch.end, readBase))
-               readBase = scp->prefetch.end;
+        readBase = scp->prefetch.end;
 
-        lock_ReleaseMutex(&scp->mx);
+    lock_ReleaseMutex(&scp->mx);
 
+    code = cm_CheckFetchRange(scp, &readBase, cm_chunkSize, userp, reqp,
+                                  &realBase);
+       if (code) 
+        return;        /* can't find something to prefetch */
 
-        code = cm_CheckFetchRange(scp, &readBase, cm_chunkSize, userp, reqp,
-               &realBase);
-       if (code) return;       /* can't find something to prefetch */
+    osi_Log2(afsd_logp, "BKG Prefetch request vp 0x%x, base 0x%x",
+             scp, realBase.LowPart);
 
-        osi_Log2(afsd_logp, "BKG Prefetch request vp 0x%x, base 0x%x",
-                scp, realBase.LowPart);
-
-        cm_QueueBKGRequest(scp, cm_BkgPrefetch, realBase.LowPart,
-               realBase.HighPart, cm_chunkSize, 0, userp);
+    cm_QueueBKGRequest(scp, cm_BkgPrefetch, realBase.LowPart,
+                       realBase.HighPart, cm_chunkSize, 0, userp);
 }
 
 /* scp must be locked; temporarily unlocked during processing.
@@ -580,23 +588,23 @@ void cm_ConsiderPrefetch(cm_scache_t *scp, osi_hyper_t *offsetp,
 long cm_SetupStoreBIOD(cm_scache_t *scp, osi_hyper_t *inOffsetp, long inSize,
        cm_bulkIO_t *biop, cm_user_t *userp, cm_req_t *reqp)
 {
-        cm_buf_t *bufp;
-        osi_queueData_t *qdp;
-        osi_hyper_t thyper;
-        osi_hyper_t tbase;
-        osi_hyper_t scanStart;         /* where to start scan for dirty pages */
-        osi_hyper_t scanEnd;           /* where to stop scan for dirty pages */
-        osi_hyper_t firstModOffset;    /* offset of first modified page in range */
-        long temp;
-        long code;
-        long flags;                    /* flags to cm_SyncOp */
+    cm_buf_t *bufp;
+    osi_queueData_t *qdp;
+    osi_hyper_t thyper;
+    osi_hyper_t tbase;
+    osi_hyper_t scanStart;             /* where to start scan for dirty pages */
+    osi_hyper_t scanEnd;               /* where to stop scan for dirty pages */
+    osi_hyper_t firstModOffset;        /* offset of first modified page in range */
+    long temp;
+    long code;
+    long flags;                        /* flags to cm_SyncOp */
         
        /* clear things out */
        biop->scp = scp;                /* don't hold */
-        biop->offset = *inOffsetp;
-        biop->length = 0;
-        biop->bufListp = NULL;
-        biop->bufListEndp = NULL;
+    biop->offset = *inOffsetp;
+    biop->length = 0;
+    biop->bufListp = NULL;
+    biop->bufListEndp = NULL;
        biop->reserved = 0;
 
        /* reserve a chunk's worth of buffers */
@@ -604,14 +612,14 @@ long cm_SetupStoreBIOD(cm_scache_t *scp, osi_hyper_t *inOffsetp, long inSize,
        buf_ReserveBuffers(cm_chunkSize / buf_bufferSize);
        lock_ObtainMutex(&scp->mx);
 
-        bufp = NULL;
-        for(temp = 0; temp < inSize; temp += buf_bufferSize, bufp = NULL) {
+    bufp = NULL;
+    for(temp = 0; temp < inSize; temp += buf_bufferSize, bufp = NULL) {
                thyper.HighPart = 0;
                thyper.LowPart = temp;
-                tbase = LargeIntegerAdd(*inOffsetp, thyper);
-                
-                bufp = buf_Find(scp, &tbase);
-                if (bufp) {
+        tbase = LargeIntegerAdd(*inOffsetp, thyper);
+
+        bufp = buf_Find(scp, &tbase);
+        if (bufp) {
                        /* get buffer mutex and scp mutex safely */
                        lock_ReleaseMutex(&scp->mx);
                        lock_ObtainMutex(&bufp->mx);
@@ -622,34 +630,33 @@ long cm_SetupStoreBIOD(cm_scache_t *scp, osi_hyper_t *inOffsetp, long inSize,
                                 | CM_SCACHESYNC_STOREDATA
                                 | CM_SCACHESYNC_BUFLOCKED;
                        code = cm_SyncOp(scp, bufp, userp, reqp, 0, flags); 
-                        if (code) {
+            if (code) {
                                lock_ReleaseMutex(&bufp->mx);
-                                buf_Release(bufp);
-                               buf_UnreserveBuffers(cm_chunkSize
-                                                       / buf_bufferSize);
-                                return code;
-                        }
+                buf_Release(bufp);
+                               buf_UnreserveBuffers(cm_chunkSize / buf_bufferSize);
+                return code;
+            }
                         
                        /* if the buffer is dirty, we're done */
-                        if (bufp->flags & CM_BUF_DIRTY) {
-                               osi_assertx(!(bufp->flags & CM_BUF_WRITING),
-                                       "WRITING w/o CMSTORING in SetupStoreBIOD");
+            if (bufp->flags & CM_BUF_DIRTY) {
+                osi_assertx(!(bufp->flags & CM_BUF_WRITING),
+                            "WRITING w/o CMSTORING in SetupStoreBIOD");
                                bufp->flags |= CM_BUF_WRITING;
                                break;
-                        }
+            }
 
                        /* this buffer is clean, so there's no reason to process it */
                        cm_SyncOpDone(scp, bufp, flags);
                        lock_ReleaseMutex(&bufp->mx);
                        buf_Release(bufp);
-                }
         }
+    }
 
        biop->reserved = 1;
         
-        /* if we get here, if bufp is null, we didn't find any dirty buffers
+    /* if we get here, if bufp is null, we didn't find any dirty buffers
         * that weren't already being stored back, so we just quit now.
-         */
+     */
         if (!bufp) {
                return 0;
        }
@@ -658,136 +665,138 @@ long cm_SetupStoreBIOD(cm_scache_t *scp, osi_hyper_t *inOffsetp, long inSize,
        lock_ReleaseMutex(&bufp->mx);
         
        /* put this element in the list */
-        qdp = osi_QDAlloc();
-        osi_SetQData(qdp, bufp);
+    qdp = osi_QDAlloc();
+    osi_SetQData(qdp, bufp);
        /* don't have to hold bufp, since held by buf_Find above */
-        osi_QAddH((osi_queue_t **) &biop->bufListp,
-                 (osi_queue_t **) &biop->bufListEndp,
-                 &qdp->q);
-        biop->length = buf_bufferSize;
-        firstModOffset = bufp->offset;
-        biop->offset = firstModOffset;
+    osi_QAddH((osi_queue_t **) &biop->bufListp,
+              (osi_queue_t **) &biop->bufListEndp,
+              &qdp->q);
+    biop->length = buf_bufferSize;
+    firstModOffset = bufp->offset;
+    biop->offset = firstModOffset;
 
        /* compute the window surrounding *inOffsetp of size cm_chunkSize */
        scanStart = *inOffsetp;
-        scanStart.LowPart &= (-cm_chunkSize);
+    scanStart.LowPart &= (-cm_chunkSize);
        thyper.LowPart = cm_chunkSize;
-        thyper.HighPart = 0;
+    thyper.HighPart = 0;
        scanEnd = LargeIntegerAdd(scanStart, thyper);
 
        flags = CM_SCACHESYNC_NEEDCALLBACK
                | CM_SCACHESYNC_GETSTATUS
-                | CM_SCACHESYNC_STOREDATA
-                | CM_SCACHESYNC_BUFLOCKED
-                | CM_SCACHESYNC_NOWAIT;
+        | CM_SCACHESYNC_STOREDATA
+        | CM_SCACHESYNC_BUFLOCKED
+        | CM_SCACHESYNC_NOWAIT;
 
        /* start by looking backwards until scanStart */
        thyper.HighPart = 0;            /* hyper version of buf_bufferSize */
-        thyper.LowPart = buf_bufferSize;
+    thyper.LowPart = buf_bufferSize;
        tbase = LargeIntegerSubtract(firstModOffset, thyper);
-        while(LargeIntegerGreaterThanOrEqualTo(tbase, scanStart)) {
-               /* see if we can find the buffer */
+    while(LargeIntegerGreaterThanOrEqualTo(tbase, scanStart)) {
+        /* see if we can find the buffer */
                bufp = buf_Find(scp, &tbase);
-                if (!bufp) break;
+        if (!bufp) 
+            break;
 
                /* try to lock it, and quit if we can't (simplifies locking) */
-                code = lock_TryMutex(&bufp->mx);
-                if (code == 0) {
+        code = lock_TryMutex(&bufp->mx);
+        if (code == 0) {
                        buf_Release(bufp);
-                        break;
-                }
+            break;
+        }
                 
-                code = cm_SyncOp(scp, bufp, userp, reqp, 0, flags);
-                if (code) {
+        code = cm_SyncOp(scp, bufp, userp, reqp, 0, flags);
+        if (code) {
                        lock_ReleaseMutex(&bufp->mx);
                        buf_Release(bufp);
-                        break;
-                }
+            break;
+        }
                 
                if (!(bufp->flags & CM_BUF_DIRTY)) {
                        /* buffer is clean, so we shouldn't add it */
                        cm_SyncOpDone(scp, bufp, flags);
                        lock_ReleaseMutex(&bufp->mx);
                        buf_Release(bufp);
-                        break;
-                }
+            break;
+        }
 
                /* don't need buffer mutex any more */
                lock_ReleaseMutex(&bufp->mx);
 
-                /* we have a dirty buffer ready for storing.  Add it to the tail
-                 * of the list, since it immediately precedes all of the disk
-                 * addresses we've already collected.
-                 */
+        /* we have a dirty buffer ready for storing.  Add it to the tail
+         * of the list, since it immediately precedes all of the disk
+         * addresses we've already collected.
+         */
                qdp = osi_QDAlloc();
-                osi_SetQData(qdp, bufp);
-                /* no buf_hold necessary, since we have it held from buf_Find */
-                osi_QAddT((osi_queue_t **) &biop->bufListp,
-                         (osi_queue_t **) &biop->bufListEndp,
-                         &qdp->q);
+        osi_SetQData(qdp, bufp);
+        /* no buf_hold necessary, since we have it held from buf_Find */
+        osi_QAddT((osi_queue_t **) &biop->bufListp,
+                  (osi_queue_t **) &biop->bufListEndp,
+                  &qdp->q);
 
                /* update biod info describing the transfer */
-                biop->offset = LargeIntegerSubtract(biop->offset, thyper);
-                biop->length += buf_bufferSize;
-                
-                /* update loop pointer */
-                tbase = LargeIntegerSubtract(tbase, thyper);
-        }      /* while loop looking for pages preceding the one we found */
+        biop->offset = LargeIntegerSubtract(biop->offset, thyper);
+        biop->length += buf_bufferSize;
+
+        /* update loop pointer */
+        tbase = LargeIntegerSubtract(tbase, thyper);
+    }  /* while loop looking for pages preceding the one we found */
 
        /* now, find later dirty, contiguous pages, and add them to the list */
        thyper.HighPart = 0;            /* hyper version of buf_bufferSize */
-        thyper.LowPart = buf_bufferSize;
+    thyper.LowPart = buf_bufferSize;
        tbase = LargeIntegerAdd(firstModOffset, thyper);
-        while(LargeIntegerLessThan(tbase, scanEnd)) {
+    while(LargeIntegerLessThan(tbase, scanEnd)) {
                /* see if we can find the buffer */
                bufp = buf_Find(scp, &tbase);
-                if (!bufp) break;
+        if (!bufp) 
+            break;
 
                /* try to lock it, and quit if we can't (simplifies locking) */
-                code = lock_TryMutex(&bufp->mx);
-                if (code == 0) {
+        code = lock_TryMutex(&bufp->mx);
+        if (code == 0) {
                        buf_Release(bufp);
-                        break;
-                }
-                
-                code = cm_SyncOp(scp, bufp, userp, reqp, 0, flags);
-                if (code) {
+            break;
+        }
+
+        code = cm_SyncOp(scp, bufp, userp, reqp, 0, flags);
+        if (code) {
                        lock_ReleaseMutex(&bufp->mx);
                        buf_Release(bufp);
-                        break;
-                }
+            break;
+        }
                 
                if (!(bufp->flags & CM_BUF_DIRTY)) {
                        /* buffer is clean, so we shouldn't add it */
                        cm_SyncOpDone(scp, bufp, flags);
                        lock_ReleaseMutex(&bufp->mx);
                        buf_Release(bufp);
-                        break;
-                }
+            break;
+        }
 
                /* don't need buffer mutex any more */
                lock_ReleaseMutex(&bufp->mx);
 
-                /* we have a dirty buffer ready for storing.  Add it to the head
-                 * of the list, since it immediately follows all of the disk
-                 * addresses we've already collected.
-                 */
+        /* we have a dirty buffer ready for storing.  Add it to the head
+         * of the list, since it immediately follows all of the disk
+         * addresses we've already collected.
+         */
                qdp = osi_QDAlloc();
-                osi_SetQData(qdp, bufp);
-                /* no buf_hold necessary, since we have it held from buf_Find */
-                osi_QAddH((osi_queue_t **) &biop->bufListp,
-                         (osi_queue_t **) &biop->bufListEndp,
-                         &qdp->q);
+        osi_SetQData(qdp, bufp);
+        /* no buf_hold necessary, since we have it held from buf_Find */
+        osi_QAddH((osi_queue_t **) &biop->bufListp,
+                  (osi_queue_t **) &biop->bufListEndp,
+                  &qdp->q);
 
                /* update biod info describing the transfer */
-                biop->length += buf_bufferSize;
+        biop->length += buf_bufferSize;
                 
-                /* update loop pointer */
-                tbase = LargeIntegerAdd(tbase, thyper);
-        }      /* while loop looking for pages following the first page we found */
+        /* update loop pointer */
+        tbase = LargeIntegerAdd(tbase, thyper);
+    }  /* while loop looking for pages following the first page we found */
        
-        /* finally, we're done */
-        return 0;
+    /* finally, we're done */
+    return 0;
 }
 
 /* scp must be locked; temporarily unlocked during processing.
@@ -799,39 +808,40 @@ long cm_SetupFetchBIOD(cm_scache_t *scp, osi_hyper_t *offsetp,
                        cm_bulkIO_t *biop, cm_user_t *up, cm_req_t *reqp)
 {
        long code;
-        cm_buf_t *tbp;
-        osi_hyper_t toffset;           /* a long long temp variable */
-        osi_hyper_t pageBase;          /* base offset we're looking at */
-        osi_queueData_t *qdp;          /* one temp queue structure */
-        osi_queueData_t *tqdp;         /* another temp queue structure */
-        long collected;                        /* how many bytes have been collected */
-        int isFirst;
-        long flags;
-        osi_hyper_t fileSize;          /* the # of bytes in the file */
-        osi_queueData_t *heldBufListp; /* we hold all buffers in this list */
-        osi_queueData_t *heldBufListEndp;      /* first one */
+    cm_buf_t *tbp;
+    osi_hyper_t toffset;               /* a long long temp variable */
+    osi_hyper_t pageBase;              /* base offset we're looking at */
+    osi_queueData_t *qdp;              /* one temp queue structure */
+    osi_queueData_t *tqdp;             /* another temp queue structure */
+    long collected;                    /* how many bytes have been collected */
+    int isFirst;
+    long flags;
+    osi_hyper_t fileSize;              /* the # of bytes in the file */
+    osi_queueData_t *heldBufListp;     /* we hold all buffers in this list */
+    osi_queueData_t *heldBufListEndp;  /* first one */
        int reserving;
-        
-        biop->scp = scp;
-        biop->offset = *offsetp;
+
+    biop->scp = scp;
+    biop->offset = *offsetp;
        /* null out the list of buffers */
-        biop->bufListp = biop->bufListEndp = NULL;
+    biop->bufListp = biop->bufListEndp = NULL;
        biop->reserved = 0;
 
        /* first lookup the file's length, so we know when to stop */
-        code = cm_SyncOp(scp, NULL, up, reqp, 0, CM_SCACHESYNC_NEEDCALLBACK
-                                                | CM_SCACHESYNC_GETSTATUS);
-        if (code) return code;
+    code = cm_SyncOp(scp, NULL, up, reqp, 0, CM_SCACHESYNC_NEEDCALLBACK
+                     | CM_SCACHESYNC_GETSTATUS);
+    if (code) 
+        return code;
         
        /* copy out size, since it may change */
-        fileSize = scp->serverLength;
+    fileSize = scp->serverLength;
         
-        lock_ReleaseMutex(&scp->mx);
+    lock_ReleaseMutex(&scp->mx);
 
        pageBase = *offsetp;
-        collected = pageBase.LowPart & (cm_chunkSize - 1);
-        heldBufListp = NULL;
-        heldBufListEndp = NULL;
+    collected = pageBase.LowPart & (cm_chunkSize - 1);
+    heldBufListp = NULL;
+    heldBufListEndp = NULL;
 
        /*
         * Obtaining buffers can cause dirty buffers to be recycled, which
@@ -853,17 +863,17 @@ long cm_SetupFetchBIOD(cm_scache_t *scp, osi_hyper_t *offsetp,
         */
 
        /* first hold all buffers, since we can't hold any locks in buf_Get */
-        while (1) {
+    while (1) {
                /* stop at chunk boundary */
                if (collected >= cm_chunkSize) break;
                 
-                /* see if the next page would be past EOF */
-                if (LargeIntegerGreaterThanOrEqualTo(pageBase, fileSize)) break;
+        /* see if the next page would be past EOF */
+        if (LargeIntegerGreaterThanOrEqualTo(pageBase, fileSize)) break;
 
                lock_ObtainMutex(&cm_bufGetMutex);
 
                code = buf_Get(scp, &pageBase, &tbp);
-                if (code) {
+        if (code) {
                        lock_ReleaseMutex(&cm_bufGetMutex);
                        lock_ObtainMutex(&scp->mx);
                        return code;
@@ -873,57 +883,61 @@ long cm_SetupFetchBIOD(cm_scache_t *scp, osi_hyper_t *offsetp,
 
                lock_ReleaseMutex(&cm_bufGetMutex);
 
-                toffset.HighPart = 0;
-                toffset.LowPart = buf_bufferSize;
-                pageBase = LargeIntegerAdd(toffset, pageBase);
+        toffset.HighPart = 0;
+        toffset.LowPart = buf_bufferSize;
+        pageBase = LargeIntegerAdd(toffset, pageBase);
                collected += buf_bufferSize;
-        }
+    }
 
-        /* reserve a chunk's worth of buffers if possible */
+    /* reserve a chunk's worth of buffers if possible */
        reserving = buf_TryReserveBuffers(cm_chunkSize / buf_bufferSize);
 
        pageBase = *offsetp;
-        collected = pageBase.LowPart & (cm_chunkSize - 1);
+    collected = pageBase.LowPart & (cm_chunkSize - 1);
 
        /* now hold all buffers, if they are still there */
-        while (1) {
+    while (1) {
                /* stop at chunk boundary */
-               if (collected >= cm_chunkSize) break;
+               if (collected >= cm_chunkSize) 
+            break;
                 
-                /* see if the next page would be past EOF */
-                if (LargeIntegerGreaterThanOrEqualTo(pageBase, fileSize)) break;
+        /* see if the next page would be past EOF */
+        if (LargeIntegerGreaterThanOrEqualTo(pageBase, fileSize)) 
+            break;
 
-                tbp = buf_Find(scp, &pageBase);
-               if (!tbp) break;
+        tbp = buf_Find(scp, &pageBase);
+               if (!tbp) 
+            break;
 
-                /* add the buffer to the list */
+        /* add the buffer to the list */
                qdp = osi_QDAlloc();
-                osi_SetQData(qdp, tbp);
-                osi_QAdd((osi_queue_t **)&heldBufListp, &qdp->q);
-                if (!heldBufListEndp) heldBufListEndp = qdp;
+        osi_SetQData(qdp, tbp);
+        osi_QAdd((osi_queue_t **)&heldBufListp, &qdp->q);
+        if (!heldBufListEndp) heldBufListEndp = qdp;
                /* leave tbp held (from buf_Get) */
 
-               if (!reserving) break;
+               if (!reserving) 
+            break;
 
-                collected += buf_bufferSize;
-                toffset.HighPart = 0;
-                toffset.LowPart = buf_bufferSize;
-                pageBase = LargeIntegerAdd(toffset, pageBase);
-        }
+        collected += buf_bufferSize;
+        toffset.HighPart = 0;
+        toffset.LowPart = buf_bufferSize;
+        pageBase = LargeIntegerAdd(toffset, pageBase);
+    }
 
-        /* look at each buffer, adding it into the list if it looks idle and
+    /* look at each buffer, adding it into the list if it looks idle and
         * filled with old data.  One special case: wait for idle if it is the
         * first buffer since we really need that one for our caller to make
         * any progress.
-         */
-        isFirst = 1;
-        collected = 0;         /* now count how many we'll really use */
+     */
+    isFirst = 1;
+    collected = 0;             /* now count how many we'll really use */
        for(tqdp = heldBufListEndp;
-           tqdp;
+        tqdp;
            tqdp = (osi_queueData_t *) osi_QPrev(&tqdp->q)) {
                /* get a ptr to the held buffer */
                tbp = osi_GetQData(tqdp);
-                pageBase = tbp->offset;
+        pageBase = tbp->offset;
 
                /* now lock the buffer lock */
                lock_ObtainMutex(&tbp->mx);
@@ -933,79 +947,81 @@ long cm_SetupFetchBIOD(cm_scache_t *scp, osi_hyper_t *offsetp,
                if (tbp->dataVersion == scp->dataVersion) {
                        /* we don't need this buffer, since it is current */
                        lock_ReleaseMutex(&scp->mx);
-                        lock_ReleaseMutex(&tbp->mx);
-                        break;
-                }
+            lock_ReleaseMutex(&tbp->mx);
+            break;
+        }
 
                flags = CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_FETCHDATA
                        | CM_SCACHESYNC_BUFLOCKED;
-               if (!isFirst) flags |= CM_SCACHESYNC_NOWAIT;
+               if (!isFirst) 
+            flags |= CM_SCACHESYNC_NOWAIT;
 
                /* wait for the buffer to serialize, if required.  Doesn't
                 * release the scp or buffer lock(s) if NOWAIT is specified.
-                 */
+         */
                code = cm_SyncOp(scp, tbp, up, reqp, 0, flags);
-                if (code) {
+        if (code) {
                        lock_ReleaseMutex(&scp->mx);
                        lock_ReleaseMutex(&tbp->mx);
-                       break;
+            break;
                }
                 
                /* don't fetch over dirty buffers */
-                if (tbp->flags & CM_BUF_DIRTY) {
+        if (tbp->flags & CM_BUF_DIRTY) {
                        cm_SyncOpDone(scp, tbp, flags);
                        lock_ReleaseMutex(&scp->mx);
-                        lock_ReleaseMutex(&tbp->mx);
-                        break;
+            lock_ReleaseMutex(&tbp->mx);
+            break;
                }
 
                /* Release locks */
                lock_ReleaseMutex(&scp->mx);
                lock_ReleaseMutex(&tbp->mx);
 
-                /* add the buffer to the list */
+        /* add the buffer to the list */
                qdp = osi_QDAlloc();
-                osi_SetQData(qdp, tbp);
-                osi_QAdd((osi_queue_t **)&biop->bufListp, &qdp->q);
-                if (!biop->bufListEndp) biop->bufListEndp = qdp;
+        osi_SetQData(qdp, tbp);
+        osi_QAdd((osi_queue_t **)&biop->bufListp, &qdp->q);
+        if (!biop->bufListEndp) 
+            biop->bufListEndp = qdp;
                buf_Hold(tbp);
 
                /* from now on, a failure just stops our collection process, but
-                 * we still do the I/O to whatever we've already managed to collect.
-                 */
-               isFirst = 0;
-                collected += buf_bufferSize;
-        }
+         * we still do the I/O to whatever we've already managed to collect.
+         */
+        isFirst = 0;
+        collected += buf_bufferSize;
+    }
         
-        /* now, we've held in biop->bufListp all the buffer's we're really
+    /* now, we've held in biop->bufListp all the buffer's we're really
         * interested in.  We also have holds left from heldBufListp, and we
         * now release those holds on the buffers.
-         */
+     */
        for(qdp = heldBufListp; qdp; qdp = tqdp) {
                tqdp = (osi_queueData_t *) osi_QNext(&qdp->q);
                tbp = osi_GetQData(qdp);
-                osi_QDFree(qdp);
-                buf_Release(tbp);
-        }
+        osi_QDFree(qdp);
+        buf_Release(tbp);
+    }
 
        /* Caller expects this */
        lock_ObtainMutex(&scp->mx);
  
        /* if we got a failure setting up the first buffer, then we don't have
-         * any side effects yet, and we also have failed an operation that the
-         * caller requires to make any progress.  Give up now.
-         */
-        if (code && isFirst) {
+     * any side effects yet, and we also have failed an operation that the
+     * caller requires to make any progress.  Give up now.
+     */
+    if (code && isFirst) {
                buf_UnreserveBuffers(cm_chunkSize / buf_bufferSize);
                return code;
        }
         
-        /* otherwise, we're still OK, and should just return the I/O setup we've
-         * got.
-         */
+    /* otherwise, we're still OK, and should just return the I/O setup we've
+     * got.
+     */
        biop->length = collected;
        biop->reserved = reserving;
-        return 0;
+    return 0;
 }
 
 /* release a bulk I/O structure that was setup by cm_SetupFetchBIOD or by
@@ -1014,53 +1030,53 @@ long cm_SetupFetchBIOD(cm_scache_t *scp, osi_hyper_t *offsetp,
 void cm_ReleaseBIOD(cm_bulkIO_t *biop, int isStore)
 {
        cm_scache_t *scp;
-        cm_buf_t *bufp;
-        osi_queueData_t *qdp;
-        osi_queueData_t *nqdp;
-        int flags;
+    cm_buf_t *bufp;
+    osi_queueData_t *qdp;
+    osi_queueData_t *nqdp;
+    int flags;
 
        /* Give back reserved buffers */
        if (biop->reserved)
                buf_UnreserveBuffers(cm_chunkSize / buf_bufferSize);
         
        flags = CM_SCACHESYNC_NEEDCALLBACK;
-        if (isStore)
-               flags |= CM_SCACHESYNC_STOREDATA;
+    if (isStore)
+        flags |= CM_SCACHESYNC_STOREDATA;
        else
                flags |= CM_SCACHESYNC_FETCHDATA;
 
        scp = biop->scp;
-        for(qdp = biop->bufListp; qdp; qdp = nqdp) {
+    for(qdp = biop->bufListp; qdp; qdp = nqdp) {
                /* lookup next guy first, since we're going to free this one */
                nqdp = (osi_queueData_t *) osi_QNext(&qdp->q);
                 
                /* extract buffer and free queue data */
-                bufp = osi_GetQData(qdp);
-                osi_QDFree(qdp);
-                
-                /* now, mark I/O as done, unlock the buffer and release it */
+        bufp = osi_GetQData(qdp);
+        osi_QDFree(qdp);
+
+        /* now, mark I/O as done, unlock the buffer and release it */
                lock_ObtainMutex(&bufp->mx);
                lock_ObtainMutex(&scp->mx);
-                cm_SyncOpDone(scp, bufp, flags);
+        cm_SyncOpDone(scp, bufp, flags);
                lock_ReleaseMutex(&scp->mx);
                 
                /* turn off writing and wakeup users */
-                if (isStore) {
-                       if (bufp->flags & CM_BUF_WAITING) {
+        if (isStore) {
+            if (bufp->flags & CM_BUF_WAITING) {
                                osi_Wakeup((long) bufp);
-                        }
+            }
                        bufp->flags &= ~(CM_BUF_WAITING | CM_BUF_WRITING
-                                         | CM_BUF_DIRTY);
-                }
-
-                lock_ReleaseMutex(&bufp->mx);
-                buf_Release(bufp);
+                             | CM_BUF_DIRTY);
         }
-        
-        /* clean things out */
-        biop->bufListp = NULL;
-        biop->bufListEndp = NULL;
-}
+
+        lock_ReleaseMutex(&bufp->mx);
+        buf_Release(bufp);
+    }
+
+    /* clean things out */
+    biop->bufListp = NULL;
+    biop->bufListEndp = NULL;
+}   
 
 /* Fetch a buffer.  Called with scp locked.
  * The scp is locked on return.
@@ -1069,26 +1085,26 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up,
        cm_req_t *reqp)
 {
        long code;
-        long nbytes;                   /* bytes in transfer */
-        long rbytes;                   /* bytes in rx_Read call */
-        long temp;
-        AFSFetchStatus afsStatus;
-        AFSCallBack callback;
-        AFSVolSync volSync;
-        char *bufferp;
-        cm_buf_t *tbufp;               /* buf we're filling */
-        osi_queueData_t *qdp;          /* q element we're scanning */
-        AFSFid tfid;
-        struct rx_call *callp;
-        cm_bulkIO_t biod;              /* bulk IO descriptor */
-        cm_conn_t *connp;
+    long nbytes;                       /* bytes in transfer */
+    long rbytes;                       /* bytes in rx_Read call */
+    long temp;
+    AFSFetchStatus afsStatus;
+    AFSCallBack callback;
+    AFSVolSync volSync;
+    char *bufferp;
+    cm_buf_t *tbufp;           /* buf we're filling */
+    osi_queueData_t *qdp;              /* q element we're scanning */
+    AFSFid tfid;
+    struct rx_call *callp;
+    cm_bulkIO_t biod;          /* bulk IO descriptor */
+    cm_conn_t *connp;
        int getroot;
        long t1, t2;
 
-        /* now, the buffer may or may not be filled with good data (buf_GetNew
-         * drops lots of locks, and may indeed return a properly initialized
-         * buffer, although more likely it will just return a new, empty, buffer.
-         */
+    /* now, the buffer may or may not be filled with good data (buf_GetNew
+     * drops lots of locks, and may indeed return a properly initialized
+     * buffer, although more likely it will just return a new, empty, buffer.
+     */
 
 #ifdef AFS_FREELANCE_CLIENT
 
@@ -1096,7 +1112,9 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up,
        // handle it differently, since it's local rather than on any
        // server
 
-       getroot = (scp==cm_rootSCachep) ;
+       getroot = (scp==cm_rootSCachep);
+       if (getroot)
+               osi_Log1(afsd_logp,"GetBuffer returns cm_rootSCachep=%x",cm_rootSCachep);
 #endif
 
        cm_AFSFidFromFid(&tfid, &scp->fid);
@@ -1105,23 +1123,23 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up,
        if (code) {
                /* couldn't even get the first page setup properly */
                osi_Log1(afsd_logp, "SetupFetchBIOD failure code %d", code);
-               return code;
+        return code;
        }
 
-        /* once we get here, we have the callback in place, we know that no one
+    /* once we get here, we have the callback in place, we know that no one
         * is fetching the data now.  Check one last time that we still have
         * the wrong data, and then fetch it if we're still wrong.
         *
-         * We can lose a race condition and end up with biod.length zero, in
+     * We can lose a race condition and end up with biod.length zero, in
         * which case we just retry.
-         */
-        if (bufp->dataVersion == scp->dataVersion || biod.length == 0) {
+     */
+    if (bufp->dataVersion == scp->dataVersion || biod.length == 0) {
                osi_Log3(afsd_logp, "Bad DVs %d, %d or length 0x%x",
-                        bufp->dataVersion, scp->dataVersion, biod.length);
+                 bufp->dataVersion, scp->dataVersion, biod.length);
                if ((bufp->dataVersion == -1
                     || bufp->dataVersion < scp->dataVersion)
-                   && LargeIntegerGreaterThanOrEqualTo(bufp->offset,
-                                                       scp->serverLength)) {
+             && LargeIntegerGreaterThanOrEqualTo(bufp->offset,
+                                                 scp->serverLength)) {
                        if (bufp->dataVersion == -1)
                                memset(bufp->datap, 0, buf_bufferSize);
                        bufp->dataVersion = scp->dataVersion;
@@ -1129,14 +1147,14 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up,
                lock_ReleaseMutex(&scp->mx);
                cm_ReleaseBIOD(&biod, 0);
                lock_ObtainMutex(&scp->mx);
-                return 0;
-        }
+        return 0;
+    }
         
-        lock_ReleaseMutex(&scp->mx);
+    lock_ReleaseMutex(&scp->mx);
 
 #ifdef DISKCACHE95
-        DPRINTF("cm_GetBuffer: fetching data scpDV=%d bufDV=%d scp=%x bp=%x dcp=%x\n",
-                scp->dataVersion, bufp->dataVersion, scp, bufp, bufp->dcp);
+    DPRINTF("cm_GetBuffer: fetching data scpDV=%d bufDV=%d scp=%x bp=%x dcp=%x\n",
+            scp->dataVersion, bufp->dataVersion, scp, bufp, bufp->dcp);
 #endif /* DISKCACHE95 */
 
 #ifdef AFS_FREELANCE_CLIENT
@@ -1172,9 +1190,6 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up,
                // 0. 
                
                lock_ObtainMutex(&cm_Freelance_Lock);
-#ifdef DEBUG
-               afsi_log("bufp->offset is %d", bufp->offset);
-#endif
                t1 = bufp->offset.LowPart;
                qdp = biod.bufListEndp;
                while (qdp) {
@@ -1183,9 +1198,6 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up,
                        memset(bufferp, 0, buf_bufferSize);
                        t2 = cm_fakeDirSize - t1;
                        if (t2>buf_bufferSize) t2=buf_bufferSize;
-#ifdef DEBUG
-                       afsi_log("t1:%d, t2:%d", t1, t2);
-#endif
                        if (t2 > 0) {
                                memcpy(bufferp, cm_FakeRootDir+t1, t2);
                        } else {
@@ -1207,53 +1219,57 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up,
 #endif /* AFS_FREELANCE_CLIENT */
 
        /* now make the call */
-        do {
+    do {
                code = cm_Conn(&scp->fid, up, reqp, &connp);
-                if (code) continue;
+        if (code) 
+            continue;
                
                callp = rx_NewCall(connp->callp);
 
                osi_Log3(afsd_logp, "CALL FetchData vp %x, off 0x%x, size 0x%x",
-                       (long) scp, biod.offset.LowPart, biod.length);
+                 (long) scp, biod.offset.LowPart, biod.length);
 
-                code = StartRXAFS_FetchData(callp, &tfid, biod.offset.LowPart,
-                       biod.length);
+        code = StartRXAFS_FetchData(callp, &tfid, biod.offset.LowPart,
+                                    biod.length);
 
                /* now copy the data out of the pipe and put it in the buffer */
-               temp  = rx_Read(callp, &nbytes, 4);
+               temp  = rx_Read(callp, (char *)&nbytes, 4);
                if (temp == 4) {
                        nbytes = ntohl(nbytes);
-                        if (nbytes > biod.length) code = -1;
-                }
-                else code = -1;
+            if (nbytes > biod.length) 
+                code = (callp->error < 0) ? callp->error : -1;
+        }
+        else 
+            code = (callp->error < 0) ? callp->error : -1;
 
                if (code == 0) {
-                        qdp = biod.bufListEndp;
-                        if (qdp) {
+            qdp = biod.bufListEndp;
+            if (qdp) {
                                tbufp = osi_GetQData(qdp);
-                                bufferp = tbufp->datap;
-                        }
-                        else bufferp = NULL;
+                bufferp = tbufp->datap;
+            }
+            else 
+                bufferp = NULL;
                        /* fill nbytes of data from the pipe into the pages.
                         * When we stop, qdp will point at the last page we're
                         * dealing with, and bufferp will tell us where we
                         * stopped.  We'll need this info below when we clear
                         * the remainder of the last page out (and potentially
-                         * clear later pages out, if we fetch past EOF).
-                         */
-                       while(nbytes > 0) {
+             * clear later pages out, if we fetch past EOF).
+             */
+            while(nbytes > 0) {
                                /* assert that there are still more buffers;
                                 * our check above for nbytes being less than
                                 * biod.length should ensure this.
-                                 */
+                 */
                                osi_assert(bufferp != NULL);
 
                                /* read rbytes of data */
-                                rbytes = (nbytes > buf_bufferSize? buf_bufferSize : nbytes);
-                                temp = rx_Read(callp, bufferp, rbytes);
-                                if (temp < rbytes) {
-                                       code = -1;
-                                        break;
+                rbytes = (nbytes > buf_bufferSize? buf_bufferSize : nbytes);
+                temp = rx_Read(callp, bufferp, rbytes);
+                if (temp < rbytes) {
+                    code = (callp->error < 0) ? callp->error : -1;
+                    break;
                                }
 
                                /* allow read-while-fetching.
@@ -1269,83 +1285,90 @@ long cm_GetBuffer(cm_scache_t *scp, cm_buf_t *bufp, int *cpffp, cm_user_t *up,
                                }
                                if (cpffp && !*cpffp && !osi_QPrev(&qdp->q)) {
                                        *cpffp = 1;
-                                       cm_ClearPrefetchFlag(0, scp,
-                                                            &biod.offset);
+                                       cm_ClearPrefetchFlag(0, scp, &biod.offset);
                                }
                                lock_ReleaseMutex(&scp->mx);
 
                                /* and adjust counters */
-                                nbytes -= temp;
+                nbytes -= temp;
                                 
-                                /* and move to the next buffer */
+                /* and move to the next buffer */
                                if (nbytes != 0) {
-                                       qdp = (osi_queueData_t *) osi_QPrev(&qdp->q);
-                                       if (qdp) {
+                    qdp = (osi_queueData_t *) osi_QPrev(&qdp->q);
+                    if (qdp) {
                                                tbufp = osi_GetQData(qdp);
-                                               bufferp = tbufp->datap;
-                                       }
-                                       else bufferp = NULL;
-                               } else bufferp += temp;
-                       }
-
-                        /* zero out remainder of last pages, in case we are
+                        bufferp = tbufp->datap;
+                    }
+                    else 
+                        bufferp = NULL;
+                               } else 
+                    bufferp += temp;
+            }
+
+            /* zero out remainder of last pages, in case we are
                         * fetching past EOF.  We were fetching an integral #
                         * of pages, but stopped, potentially in the middle of
                         * a page.  Zero the remainder of that page, and then
                         * all of the rest of the pages.
-                         */
+             */
                        /* bytes fetched */
-                               rbytes = bufferp - tbufp->datap;
+            rbytes = bufferp - tbufp->datap;
                        /* bytes left to zero */
-                        rbytes = buf_bufferSize - rbytes;
-                        while(qdp) {
-                                if (rbytes != 0)
+            rbytes = buf_bufferSize - rbytes;
+            while(qdp) {
+                if (rbytes != 0)
                                        memset(bufferp, 0, rbytes);
-                                qdp = (osi_queueData_t *) osi_QPrev(&qdp->q);
-                               if (qdp == NULL) break;
+                qdp = (osi_queueData_t *) osi_QPrev(&qdp->q);
+                               if (qdp == NULL) 
+                    break;
                                tbufp = osi_GetQData(qdp);
-                                bufferp = tbufp->datap;
+                bufferp = tbufp->datap;
                                /* bytes to clear in this page */
                                rbytes = buf_bufferSize;
-                        }
+            }
                }
 
                if (code == 0)
                        code = EndRXAFS_FetchData(callp, &afsStatus, &callback, &volSync);
-                code = rx_EndCall(callp, code);
-                osi_Log0(afsd_logp, "CALL FetchData DONE");
-                
+               else
+                       osi_Log0(afsd_logp, "CALL EndRXAFS_FetchData skipped due to error");
+        code = rx_EndCall(callp, code);
+        if (code == RXKADUNKNOWNKEY)
+            osi_Log0(afsd_logp, "CALL EndCall returns RXKADUNKNOWNKEY");
+        osi_Log0(afsd_logp, "CALL FetchData DONE");
+
        } while (cm_Analyze(connp, up, reqp, &scp->fid, &volSync, NULL, code));
 
   fetchingcompleted:
-        code = cm_MapRPCError(code, reqp);
+    code = cm_MapRPCError(code, reqp);
 
-        lock_ObtainMutex(&scp->mx);
+    lock_ObtainMutex(&scp->mx);
        /* we know that no one else has changed the buffer, since we still have
         * the fetching flag on the buffers, and we have the scp locked again.
         * Copy in the version # into the buffer if we got code 0 back from the
         * read.
-         */
+     */
        if (code == 0) {
                for(qdp = biod.bufListp;
                    qdp;
                    qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
                        tbufp = osi_GetQData(qdp);
-                        tbufp->dataVersion = afsStatus.DataVersion;
+            tbufp->dataVersion = afsStatus.DataVersion;
 
 #ifdef DISKCACHE95
-                        /* write buffer out to disk cache */
-                        diskcache_Update(tbufp->dcp, tbufp->datap, buf_bufferSize,
-                                         tbufp->dataVersion);
+            /* write buffer out to disk cache */
+            diskcache_Update(tbufp->dcp, tbufp->datap, buf_bufferSize,
+                              tbufp->dataVersion);
 #endif /* DISKCACHE95 */
-                }
         }
+    }
 
        /* release scatter/gather I/O structure (buffers, locks) */
        lock_ReleaseMutex(&scp->mx);
        cm_ReleaseBIOD(&biod, 0);
        lock_ObtainMutex(&scp->mx);
 
-        if (code == 0) cm_MergeStatus(scp, &afsStatus, &volSync, up, 0);
+    if (code == 0) 
+        cm_MergeStatus(scp, &afsStatus, &volSync, up, 0);
        return code;
 }
index e817fc294ca3d1b37f4c4d59550c2240d46fe967..81a3962ba26918776d6fba159da2729307c62dbd 100644 (file)
@@ -10,6 +10,7 @@
 
 #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, ...);*/
 
@@ -40,6 +45,7 @@ void DNSlowerCase(char *str)
 
 int cm_InitDNS(int enabled)
 {
+#ifndef DNSAPI_ENV
   char configpath[100];
   int len;
   int code;
@@ -79,11 +85,12 @@ int cm_InitDNS(int enabled)
     }
     else fprintf(stderr, "Found DNS server %s\n", dns_addr);
   }
-
+#endif /* DNSAPI_ENV */
   cm_dnsEnabled = 1;
   return 0;
 }
 
+#ifndef DNSAPI_ENV
 SOCKADDR_IN setSockAddr(char *server, int port)
 {
   SOCKADDR_IN sockAddr;                     
@@ -481,7 +488,7 @@ void printReplyBuffer_AFSDB(PDNS_HDR replyBuff)
 
 };
 
-void processReplyBuffer_AFSDB(SOCKET commSock, PDNS_HDR replyBuff, int *cellHosts, int *numServers, int *ttl)
+void processReplyBuffer_AFSDB(SOCKET commSock, PDNS_HDR replyBuff, int *cellHostAddrs, char cellHostNames[][MAXHOSTCHARS], int *numServers, int *ttl)
   /*PAFS_SRV_LIST (srvList)*/
 {
   u_char *ptr = (u_char *) replyBuff;
@@ -531,7 +538,9 @@ void processReplyBuffer_AFSDB(SOCKET commSock, PDNS_HDR replyBuff, int *cellHost
 #ifdef DEBUG
       fprintf(stderr, "processRep_AFSDB: resolved name %s to addr %x\n", hostName, addr);
 #endif /* DEBUG */
-      memcpy(&cellHosts[srvCount], &addr.s_addr, sizeof(addr.s_addr));
+      memcpy(&cellHostAddrs[srvCount], &addr.s_addr, sizeof(addr.s_addr));
+         strncpy(cellHostNames[srvCount], hostName, MAXCELLCHARS);
+         cellHostNames[srvCount][MAXCELLCHARS-1] = '\0';
       srvCount++;
     }
     else {
@@ -582,9 +591,46 @@ u_char * processReplyBuffer_Addr(PDNS_HDR replyBuff)
 
 };
 
-int getAFSServer(char *cellName, int *cellHosts, int *numServers, int *ttl)
+int DNSgetAddr(SOCKET commSock, char *hostName, struct in_addr *iNet)
+{
+  /* Variables for DNS message parsing and creation */
+  PDNS_HDR  pDNShdr;
+
+  SOCKADDR_IN sockAddr;
+  char buffer[BUFSIZE];
+  u_char *addr;
+  u_long *aPtr;
+  int rc;
+
+  /**********************
+   * Get a DGRAM socket *
+   **********************/
+  
+  sockAddr = setSockAddr(dns_addr, DNS_PORT);
+  
+  rc = send_DNS_Addr_Query(hostName,commSock,sockAddr, buffer);
+  if (rc < 0) return rc;
+  pDNShdr = get_DNS_Response(commSock,sockAddr, buffer);
+  if (pDNShdr == NULL)
+    return -1;
+  
+  addr = processReplyBuffer_Addr(pDNShdr);
+  if (addr == 0)
+    return -1;
+
+  aPtr = (u_long *) addr;
+
+  iNet->s_addr = *aPtr;
+
+  return(0);
+}
+#endif /* DNSAPI_ENV */
+
+int getAFSServer(char *cellName, int *cellHostAddrs, char cellHostNames[][MAXHOSTCHARS], 
+                 int *numServers, int *ttl)
 {
-  /*static AFS_SRV_LIST srvList;  
+#ifndef DNSAPI_ENV
+   /*static AFS_SRV_LIST srvList;
     static int ans = 0;*/
   SOCKET commSock;
   SOCKADDR_IN sockAddr;
@@ -596,7 +642,7 @@ int getAFSServer(char *cellName, int *cellHosts, int *numServers, int *ttl)
   fprintf(stderr, "getAFSServer: cell %s, cm_dnsEnabled=%d\n", cellName, cm_dnsEnabled);
 #endif
 
-#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x500
+#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
   if (cm_dnsEnabled == -1) { /* not yet initialized, eg when called by klog */
     cm_InitDNS(1);    /* assume enabled */
   }
@@ -637,7 +683,7 @@ int getAFSServer(char *cellName, int *cellHosts, int *numServers, int *ttl)
   
   /*printReplyBuffer_AFSDB(pDNShdr);*/
   if (pDNShdr)
-    processReplyBuffer_AFSDB(commSock, pDNShdr, cellHosts, numServers, ttl);
+    processReplyBuffer_AFSDB(commSock, pDNShdr, cellHostAddrs, cellHostNames, numServers, ttl);
   else
     *numServers = 0;
   
@@ -647,40 +693,83 @@ int getAFSServer(char *cellName, int *cellHosts, int *numServers, int *ttl)
 
   else
     return 0;
-}
-
-int DNSgetAddr(SOCKET commSock, char *hostName, struct in_addr *iNet)
-{
-  /* Variables for DNS message parsing and creation */
-  PDNS_HDR  pDNShdr;
-
-  SOCKADDR_IN sockAddr;
-  char buffer[BUFSIZE];
-  u_char *addr;
-  u_long *aPtr;
-  int rc;
-
-  /**********************
-   * Get a DGRAM socket *
-   **********************/
-  
-  sockAddr = setSockAddr(dns_addr, DNS_PORT);
-  
-  rc = send_DNS_Addr_Query(hostName,commSock,sockAddr, buffer);
-  if (rc < 0) return rc;
-  pDNShdr = get_DNS_Response(commSock,sockAddr, buffer);
-  if (pDNShdr == NULL)
-    return -1;
-  
-  addr = processReplyBuffer_Addr(pDNShdr);
-  if (addr == 0)
-    return -1;
-
-  aPtr = (u_long *) addr;
-
-  iNet->s_addr = *aPtr;
+#else /* DNSAPI_ENV */
+       PDNS_RECORD pDnsCell, pDnsIter, pDnsVol,pDnsVolIter, pDnsCIter;
+       DWORD i;
+    struct sockaddr_in vlSockAddr;
+
+    *numServers = 0; 
+    *ttl = 0;
+
+    /* query the AFSDB records of cell */
+       if (DnsQuery_A(cellName, DNS_TYPE_AFSDB, DNS_QUERY_STANDARD, NULL, &pDnsCell, NULL) == ERROR_SUCCESS) {
+
+               memset((void*) &vlSockAddr, 0, sizeof(vlSockAddr));
+               
+               /* go through the returned records */
+               for (pDnsIter = pDnsCell;pDnsIter; pDnsIter = pDnsIter->pNext) {
+                       /* if we find an AFSDB record with Preference set to 1, we found a volserver */
+                       if (pDnsIter->wType == DNS_TYPE_AFSDB && pDnsIter->Data.Afsdb.wPreference == 1) {
+                               strncpy(cellHostNames[*numServers], pDnsIter->Data.Afsdb.pNameExchange, MAXHOSTCHARS);
+                cellHostNames[*numServers][MAXHOSTCHARS-1]='\0';
+                               (*numServers)++;
+                
+                               if (!*ttl) 
+                    *ttl = pDnsIter->dwTtl;
+                               if (*numServers == AFSMAXCELLHOSTS) 
+                    break;
+                       }
+               }
+
+               for (i=0;i<*numServers;i++) 
+            cellHostAddrs[i] = 0;
+
+               /* now check if there are any A records in the results */
+               for (pDnsIter = pDnsCell; pDnsIter; pDnsIter = pDnsIter->pNext) {
+                       if(pDnsIter->wType == DNS_TYPE_A)
+                               /* check if its for one of the volservers */
+                               for (i=0;i<*numServers;i++)
+                                       if(stricmp(pDnsIter->pName, cellHostNames[i]) == 0)
+                                               cellHostAddrs[i] = pDnsIter->Data.A.IpAddress;
+               }
+
+               for (i=0;i<*numServers;i++) {
+                       /* if we don't have an IP yet, then we should try resolving the volserver hostname
+                          in a separate query. */
+                       if (!cellHostAddrs[i]) {
+                               if (DnsQuery_A(cellHostNames[i], DNS_TYPE_A, DNS_QUERY_STANDARD, NULL, &pDnsVol, NULL) == ERROR_SUCCESS) {
+                                       for (pDnsVolIter = pDnsVol; pDnsVolIter; pDnsVolIter=pDnsVolIter->pNext) {
+                                               /* if we get an A record, keep it */
+                                               if (pDnsVolIter->wType == DNS_TYPE_A && stricmp(cellHostNames[i], pDnsVolIter->pName)==0) {
+                                                       cellHostAddrs[i] = pDnsVolIter->Data.A.IpAddress;
+                                                       break;
+                                               }
+                                               /* if we get a CNAME, look for a corresponding A record */
+                                               if (pDnsVolIter->wType == DNS_TYPE_CNAME && stricmp(cellHostNames[i], pDnsVolIter->pName)==0) {
+                                                       for (pDnsCIter=pDnsVolIter; pDnsCIter; pDnsCIter=pDnsCIter->pNext) {
+                                                               if (pDnsCIter->wType == DNS_TYPE_A && stricmp(pDnsVolIter->Data.CNAME.pNameHost, pDnsCIter->pName)==0) {
+                                                                       cellHostAddrs[i] = pDnsCIter->Data.A.IpAddress;
+                                                                       break;
+                                                               }
+                                                       }
+                                                       if (cellHostAddrs[i]) 
+                                break;
+                                                       /* TODO: if the additional section is missing, then do another lookup for the CNAME */
+                                               }
+                                       }
+                                       /* we are done with the volserver lookup */
+                                       DnsRecordListFree(pDnsVol, DnsFreeRecordListDeep);
+                               }
+                       }
+               }
+               DnsRecordListFree(pDnsCell, DnsFreeRecordListDeep);
+       }
 
-  return(0);
+    if ( *numServers > 0 )
+        return 0;
+    else
+        return -1;
+#endif /* DNSAPI_ENV */
 }
 
 #endif /* AFS_AFSDB_ENV */
index 1e5d28c8a691ea93843d689ba160832077f759cd..6bfa381e729171955c06e1e391ecd9146db9216d 100644 (file)
@@ -13,7 +13,7 @@
 
 /* this function will continue to return cell server
    names for the given cell, ending in null */
-int getAFSServer(char *cellname, int *cellHosts, int *numServers, int *ttl);
+int getAFSServer(char *cellname, int *cellHostAddrs, char cellHostNames[][MAXHOSTCHARS], int *numServers, int *ttl);
 
 /* a supplement for the DJGPP gethostbyname ... which 
    never bothers calling a DNS server ... so this function
index 62ec62ec9c60cd68158c21010c0f426cbf2ee8a4..b3ed545f757784f28b0b578bd3bbdb3bedab78df 100644 (file)
@@ -34,6 +34,12 @@ void cm_InitFakeRootDir();
 
 void cm_InitFreelance() {
   
+#ifdef COMMENT
+    while ( !IsDebuggerPresent() ) {
+        Sleep(1000);
+    }
+#endif
+
        lock_InitializeMutex(&cm_Freelance_Lock, "Freelance Lock");
   
        // yj: first we make a call to cm_initLocalMountPoints
@@ -103,8 +109,6 @@ void cm_InitFakeRootDir() {
        cm_FakeRootDir = malloc(dirSize);
        cm_fakeDirSize = dirSize;
 
-       
-
        // yj: when we get here, we've figured out how much memory we need and 
        // allocated the appropriate space for it. we now prceed to fill
        // it up with entries.
@@ -223,14 +227,12 @@ void cm_InitFakeRootDir() {
        cm_fakeDirCallback=1;
 
        // when we get here, we've set up everything! done!
-
-
 }
 
 int cm_FakeRootFid(cm_fid_t *fidp)
 {
       fidp->cell = 0x1;            /* root cell */
-      fidp->volume = 0x20000001;   /* root.afs ? */
+      fidp->volume = AFS_FAKE_ROOT_VOL_ID;   /* root.afs ? */
       fidp->vnode = 0x1;
       fidp->unique = 0x1;
       return 0;
@@ -261,16 +263,15 @@ int cm_reInitLocalMountPoints() {
        cm_scache_t *scp, **lscpp, *tscp;
 
        
-       printf("\n\n----- reinitialization starts ----- \n");
-
+       osi_Log0(afsd_logp,"----- freelance reinitialization starts ----- ");
 
        // first we invalidate all the SCPs that were created
        // for the local mount points
 
-       printf("Invalidating local mount point scp...  ");
+       osi_Log0(afsd_logp,"Invalidating local mount point scp...  ");
 
        aFid.cell = 0x1;
-       aFid.volume=0x20000001;
+       aFid.volume=AFS_FAKE_ROOT_VOL_ID;
        aFid.unique=0x1;
        aFid.vnode=0x2;
 
@@ -307,33 +308,33 @@ int cm_reInitLocalMountPoints() {
                aFid.vnode = aFid.vnode + 1;
        }
        lock_ReleaseWrite(&cm_scacheLock);
-       printf("\tall old scp cleared!\n");
+       osi_Log0(afsd_logp,"\tall old scp cleared!");
 
        // we must free the memory that was allocated in the prev
        // cm_InitLocalMountPoints call
-       printf("Removing old localmountpoints...  ");
+       osi_Log0(afsd_logp,"Removing old localmountpoints...  ");
        free(cm_localMountPoints);
-       printf("\tall old localmountpoints cleared!\n");
+       osi_Log0(afsd_logp,"\tall old localmountpoints cleared!");
 
        // now re-init the localmountpoints
-       printf("Creating new localmountpoints...  ");
+       osi_Log0(afsd_logp,"Creating new localmountpoints...  ");
        cm_InitLocalMountPoints();
-       printf("\tcreated new set of localmountpoints!\n");
+       osi_Log0(afsd_logp,"\tcreated new set of localmountpoints!");
        
        
        // now we have to free the memory allocated in cm_initfakerootdir
-       printf("Removing old fakedir...  ");
+       osi_Log0(afsd_logp,"Removing old fakedir...  ");
        free(cm_FakeRootDir);
-       printf("\t\told fakedir removed!\n");
+       osi_Log0(afsd_logp,"\t\told fakedir removed!");
 
        // then we re-create that dir
-       printf("Creating new fakedir...  ");
+       osi_Log0(afsd_logp,"Creating new fakedir...  ");
        cm_InitFakeRootDir();
-       printf("\t\tcreated new fakedir!\n");   
+       osi_Log0(afsd_logp,"\t\tcreated new fakedir!");
 
        lock_ReleaseMutex(&cm_Freelance_Lock);
 
-       printf("----- reinit complete -----\n\n");
+       osi_Log0(afsd_logp,"----- freelance reinit complete -----");
        return 0;
 }
 
@@ -365,9 +366,7 @@ long cm_InitLocalMountPoints() {
        }
 
        // we successfully opened the file
-#ifdef DEBUG
-       fprintf(stderr, "opened afs_freelance.ini\n");
-#endif
+       osi_Log0(afsd_logp,"opened afs_freelance.ini");
        
        // now we read the first line to see how many entries
        // there are
@@ -418,14 +417,12 @@ long cm_InitLocalMountPoints() {
                aLocalMountPoint->mountPointStringp=malloc(strlen(line) - (t-line) + 1);
                memcpy(aLocalMountPoint->mountPointStringp, t, strlen(line)-(t-line)-2);
                *(aLocalMountPoint->mountPointStringp + (strlen(line)-(t-line)-2)) = 0;
-#ifdef DEBUG
-               fprintf(stderr, "found mount point: name %s, string %s\n",
+    
+        osi_Log2(afsd_logp,"found mount point: name %s, string %s",
                        aLocalMountPoint->namep,
                        aLocalMountPoint->mountPointStringp);
-#endif
-               
-               aLocalMountPoint++;
 
+        aLocalMountPoint++;
        }
        fclose(fp);
        return 0;
@@ -447,17 +444,25 @@ long cm_FreelanceAddMount(char *filename, char *cellname, char *volume, cm_fid_t
     char line[200];
     char fullname[200];
     int n;
+    int alias = 0;
 
     /* before adding, verify the cell name; if it is not a valid cell,
-       don't add the mount point */
+       don't add the mount point.
+       allow partial matches as a means of poor man's alias. */
     /* major performance issue? */
-    if (!cm_GetCell_Gen(cellname, fullname, CM_FLAG_CREATE))
-      return -1;
-#if 0
-    if (strcmp(cellname, fullname) != 0)   /* no partial matches allowed */
-      return -1;
-#endif
+    osi_Log3(afsd_logp,"Freelance Add Mount request: filename=%s cellname=%s volume=%s",
+              filename, cellname, volume);
+    if (cellname[0] == '.') {
+        if (!cm_GetCell_Gen(&cellname[1], &fullname[1], CM_FLAG_CREATE))
+            return -1;
+        fullname[0]='.';
+    } else {
+        if (!cm_GetCell_Gen(cellname, fullname, CM_FLAG_CREATE))
+            return -1;
+    }
     
+    osi_Log1(afsd_logp,"Freelance Adding Mount for Cell: %s", cellname);
+
     lock_ObtainMutex(&cm_Freelance_Lock);
 
      cm_GetConfigDir(hfile);
@@ -475,13 +480,13 @@ long cm_FreelanceAddMount(char *filename, char *cellname, char *volume, cm_fid_t
      fclose(fp);
      lock_ReleaseMutex(&cm_Freelance_Lock);
 
-     /*cm_reInitLocalMountPoints(&vnode);*/
+     /* cm_reInitLocalMountPoints(); */
      if (fidp) {
        fidp->unique = 1;
        fidp->vnode = cm_noLocalMountPoints + 1;   /* vnode value of last mt pt */
      }
      cm_noteLocalMountPointChange();
-     
+    
      return 0;
 }
 
index 63cfae5399fd7f1e86ef9512330c61efad7b51ff..9ff028db0cd2e45fd5d25018daef5c5fa706a5a4 100644 (file)
@@ -13,7 +13,10 @@ extern long cm_InitLocalMountPoints();
 extern int cm_getLocalMountPointChange();
 extern int cm_reInitLocalMountPoints();
 extern cm_localMountPoint_t* cm_getLocalMountPoint(int vnode);
+extern void cm_InitFreelance();
+extern long cm_FreelanceRemoveMount(char *toremove);
+extern long cm_FreelanceAddMount(char *filename, char *cellname, char *volume, cm_fid_t *fidp);
 
 #define AFS_FREELANCE_INI "afs_freelance.ini"
-
+#define AFS_FAKE_ROOT_VOL_ID  0x00000001
 #endif // _CM_FREELANCE_H
index 57099b367490f414d228043a97addeaa684e5f67..cb35ba25b4927e0f73f0f53a9f2d61c539cd9675 100644 (file)
@@ -28,6 +28,7 @@
 #include "afsd_init.h"
 
 #include "smb.h"
+#include "cm_server.h"
 
 #ifndef DJGPP
 #include <rx/rxkad.h>
@@ -50,6 +51,7 @@
 osi_mutex_t cm_Afsdsbmt_Lock;
 
 extern afs_int32 cryptall;
+extern char cm_NetbiosName[];
 
 void cm_InitIoctl(void)
 {
@@ -136,28 +138,100 @@ long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
 {
        long code;
        cm_scache_t *substRootp;
+    char * relativePath = ioctlp->inDatap;
+
+    /* This is usually the file name, but for StatMountPoint it is the path. */
+    /* ioctlp->inDatap can be either of the form:
+     *    \path\.
+     *    \path\file
+     *    \\netbios-name\submount\path\.
+     *    \\netbios-name\submount\path\file
+     */
+       TranslateExtendedChars(relativePath);
 
-        /* This is usually the file name, but for StatMountPoint it is the path. */
-       TranslateExtendedChars(ioctlp->inDatap);
+    if (relativePath[0] == relativePath[1] &&
+         relativePath[1] == '\\' && 
+         !_strnicmp(cm_NetbiosName,relativePath+2,strlen(cm_NetbiosName))) 
+    {
+        char shareName[256];
+        char *sharePath;
+        int shareFound, i;
+
+        /* We may have found a UNC path. 
+         * If the first component is the NetbiosName,
+         * then throw out the second component (the submount)
+         * since it had better expand into the value of ioctl->tidPathp
+         */
+        char * p;
+        p = relativePath + 2 + strlen(cm_NetbiosName) + 1;
+        if ( !_strnicmp("all", p, 3) )
+            p += 4;
 
-       code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data,
-               CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
-               userp, ioctlp->tidPathp, reqp, &substRootp);
-       if (code) return code;
-        
-        code = cm_NameI(substRootp, ioctlp->inDatap, CM_FLAG_FOLLOW,
-               userp, NULL, reqp, scpp);
-       if (code) return code;
+        for (i = 0; *p && *p != '\\'; i++,p++ ) {
+            shareName[i] = *p;
+        }
+        p++;                    /* skip past trailing slash */
+        shareName[i] = 0;       /* terminate string */
+
+        shareFound = smb_FindShare(ioctlp->fidp->vcp, ioctlp->uidp, shareName, &sharePath);
+        if ( shareFound ) {
+            /* we found a sharename, therefore use the resulting path */
+            code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data,
+                             CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                             userp, sharePath, reqp, &substRootp);
+            free(sharePath);
+            if (code) return code;
+
+                       code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                         userp, NULL, reqp, scpp);
+                       if (code) return code;
+        } else {
+            /* otherwise, treat the name as a cellname mounted off the afs root.
+                        * This requires that we reconstruct the shareName string with 
+                        * leading and trailing slashes.
+                        */
+            p = relativePath + 2 + strlen(cm_NetbiosName) + 1;
+                       if ( !_strnicmp("all", p, 3) )
+                               p += 4;
+
+                       shareName[0] = '/';
+                       for (i = 1; *p && *p != '\\'; i++,p++ ) {
+                               shareName[i] = *p;
+                       }
+                       p++;                    /* skip past trailing slash */
+                       shareName[i++] = '/';   /* add trailing slash */
+                       shareName[i] = 0;       /* terminate string */
+
+                       
+                       code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data,
+                             CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                             userp, shareName, reqp, &substRootp);
+            if (code) return code;
+
+                       code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                         userp, NULL, reqp, scpp);
+                       if (code) return code;
+        }
+    } else {
+        code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data,
+                         CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                         userp, ioctlp->tidPathp, reqp, &substRootp);
+        if (code) return code;
         
+        code = cm_NameI(substRootp, relativePath, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                         userp, NULL, reqp, scpp);
+        if (code) return code;
+    }
+
        /* # of bytes of path */
-        code = strlen(ioctlp->inDatap) + 1;
-        ioctlp->inDatap += code;
+    code = strlen(ioctlp->inDatap) + 1;
+    ioctlp->inDatap += code;
 
-        /* This is usually nothing, but for StatMountPoint it is the file name. */
-        TranslateExtendedChars(ioctlp->inDatap);
+    /* This is usually nothing, but for StatMountPoint it is the file name. */
+    TranslateExtendedChars(ioctlp->inDatap);
 
        /* and return success */
-        return 0;
+    return 0;
 }
 
 void cm_SkipIoctlPath(smb_ioctl_t *ioctlp)
@@ -214,35 +288,101 @@ long cm_ParseIoctlParent(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
                         cm_scache_t **scpp, char *leafp)
 {
        long code;
-        char tbuffer[1024];
-        char *tp, *jp;
+    char tbuffer[1024];
+    char *tp, *jp;
        cm_scache_t *substRootp;
 
        strcpy(tbuffer, ioctlp->inDatap);
-        tp = strrchr(tbuffer, '\\');
+    tp = strrchr(tbuffer, '\\');
        jp = strrchr(tbuffer, '/');
        if (!tp)
                tp = jp;
        else if (jp && (tp - tbuffer) < (jp - tbuffer))
                tp = jp;
-        if (!tp) {
-               strcpy(tbuffer, "\\");
-                if (leafp) strcpy(leafp, ioctlp->inDatap);
-       }
-        else {
-               *tp = 0;
-                if (leafp) strcpy(leafp, tp+1);
+    if (!tp) {
+        strcpy(tbuffer, "\\");
+        if (leafp) 
+            strcpy(leafp, ioctlp->inDatap);
        }
+    else {
+        *tp = 0;
+        if (leafp) 
+            strcpy(leafp, tp+1);
+       }   
+
+    if (tbuffer[0] == tbuffer[1] &&
+        tbuffer[1] == '\\' && 
+        !_strnicmp(cm_NetbiosName,tbuffer+2,strlen(cm_NetbiosName))) 
+    {
+        char shareName[256];
+        char *sharePath;
+        int shareFound, i;
+
+        /* We may have found a UNC path. 
+         * If the first component is the NetbiosName,
+         * then throw out the second component (the submount)
+         * since it had better expand into the value of ioctl->tidPathp
+         */
+        char * p;
+        p = tbuffer + 2 + strlen(cm_NetbiosName) + 1;
+        if ( !_strnicmp("all", p, 3) )
+            p += 4;
 
-       code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data,
-               CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
-               userp, ioctlp->tidPathp, reqp, &substRootp);
-       if (code) return code;
+        for (i = 0; *p && *p != '\\'; i++,p++ ) {
+            shareName[i] = *p;
+        }
+        p++;                    /* skip past trailing slash */
+        shareName[i] = 0;       /* terminate string */
+
+        shareFound = smb_FindShare(ioctlp->fidp->vcp, ioctlp->uidp, shareName, &sharePath);
+        if ( shareFound ) {
+            /* we found a sharename, therefore use the resulting path */
+            code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data,
+                             CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                             userp, sharePath, reqp, &substRootp);
+            free(sharePath);
+            if (code) return code;
+
+                       code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                         userp, NULL, reqp, scpp);
+                       if (code) return code;
+        } else {
+            /* otherwise, treat the name as a cellname mounted off the afs root.
+                        * This requires that we reconstruct the shareName string with 
+                        * leading and trailing slashes.
+                        */
+            p = tbuffer + 2 + strlen(cm_NetbiosName) + 1;
+                       if ( !_strnicmp("all", p, 3) )
+                               p += 4;
+
+                       shareName[0] = '/';
+                       for (i = 1; *p && *p != '\\'; i++,p++ ) {
+                               shareName[i] = *p;
+                       }
+                       p++;                    /* skip past trailing slash */
+                       shareName[i++] = '/';   /* add trailing slash */
+                       shareName[i] = 0;       /* terminate string */
+                       
+                       code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data,
+                             CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                             userp, shareName, reqp, &substRootp);
+            if (code) return code;
+
+                       code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                         userp, NULL, reqp, scpp);
+                       if (code) return code;
+        }
+    } else {
+        code = cm_NameI(cm_rootSCachep, ioctlp->prefix->data,
+                    CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                    userp, ioctlp->tidPathp, reqp, &substRootp);
+        if (code) return code;
 
         code = cm_NameI(substRootp, tbuffer, CM_FLAG_FOLLOW,
-               userp, NULL, reqp, scpp);
-       if (code) return code;
-        
+                    userp, NULL, reqp, scpp);
+        if (code) return code;
+    }
+
        /* # of bytes of path */
         code = strlen(ioctlp->inDatap) + 1;
         ioctlp->inDatap += code;
@@ -938,18 +1078,41 @@ long cm_IoctlNewCell(struct smb_ioctl *ioctlp, struct cm_user *userp)
      * cell list will be cm_CellLock and cm_ServerLock will be held for write.
     */  
   
-    cm_cell_t *tcellp;
+    cm_cell_t *cp;
   
     cm_SkipIoctlPath(ioctlp);
     lock_ObtainWrite(&cm_cellLock);
   
-    for(tcellp = cm_allCellsp; tcellp; tcellp=tcellp->nextp) 
+    for(cp = cm_allCellsp; cp; cp=cp->nextp) 
     {
+        long code;
         /* delete all previous server lists - cm_FreeServerList will ask for write on cm_ServerLock*/
-        cm_FreeServerList(&tcellp->vlServersp);
-        tcellp->vlServersp = NULL;
-        cm_SearchCellFile(tcellp->namep, tcellp->namep, cm_AddCellProc, tcellp);
-        cm_RandomizeServer(&tcellp->vlServersp);
+        cm_FreeServerList(&cp->vlServersp);
+        cp->vlServersp = NULL;
+        code = cm_SearchCellFile(cp->namep, cp->namep, cm_AddCellProc, cp);
+#ifdef AFS_AFSDB_ENV
+               if (code) {
+            if (cm_dnsEnabled) {
+                int ttl;
+                code = cm_SearchCellByDNS(cp->namep, cp->namep, &ttl, cm_AddCellProc, cp);
+                if ( code == 0 ) { /* got cell from DNS */
+                    cp->flags |= CM_CELLFLAG_DNS;
+                    cp->flags &= ~CM_CELLFLAG_VLSERVER_INVALID;
+                    cp->timeout = time(0) + ttl;
+                }
+            }
+        } 
+        else {
+            cp->flags &= ~CM_CELLFLAG_DNS;
+        }
+#endif /* AFS_AFSDB_ENV */
+        if (code) {
+            cp->flags |= CM_CELLFLAG_VLSERVER_INVALID;
+        }
+        else {
+            cp->flags &= ~CM_CELLFLAG_VLSERVER_INVALID;
+            cm_RandomizeServer(&cp->vlServersp);
+        }
     }
     
     lock_ReleaseWrite(&cm_cellLock);
@@ -973,30 +1136,94 @@ long cm_IoctlGetWsCell(smb_ioctl_t *ioctlp, cm_user_t *userp)
 
 long cm_IoctlSysName(struct smb_ioctl *ioctlp, struct cm_user *userp)
 {
-       long setSysName;
-        char *cp;
+       long setSysName, foundname = 0;
+    char *cp, *cp2, inname[MAXSYSNAME], outname[MAXSYSNAME];
+    int t, count, num = 0;
+    char **sysnamelist[MAXSYSNAME];
         
        cm_SkipIoctlPath(ioctlp);
 
-        memcpy(&setSysName, ioctlp->inDatap, sizeof(long));
-        ioctlp->inDatap += sizeof(long);
+    memcpy(&setSysName, ioctlp->inDatap, sizeof(long));
+    ioctlp->inDatap += sizeof(long);
         
-        if (setSysName) {
-               strcpy(cm_sysName, ioctlp->inDatap);
+    if (setSysName) {
+        /* check my args */
+        if ( setSysName < 0 || setSysName > MAXNUMSYSNAMES )
+            return EINVAL;
+        cp2 = ioctlp->inDatap;
+        for ( cp=ioctlp->inDatap, count = 0; count < setSysName; count++ ) {
+            /* won't go past end of ioctlp->inDatap since maxsysname*num < ioctlp->inDatap length */
+            t = strlen(cp);
+            if (t >= MAXSYSNAME || t <= 0)
+                return EINVAL;
+            /* check for names that can shoot us in the foot */
+            if (*cp == '.' && (cp[1] == 0 || (cp[1] == '.' && cp[2] == 0)))
+                return EINVAL;
+            cp += t + 1;
         }
-        else {
+        /* args ok */
+
+        /* inname gets first entry in case we're being a translator */
+        /* (we are never a translator) */
+        t = strlen(ioctlp->inDatap);
+        memcpy(inname, ioctlp->inDatap, t + 1);
+        ioctlp->inDatap += t + 1;
+        num = count;
+    }
+
+    /* Not xlating, so local case */
+    if (!cm_sysName)
+        osi_panic("cm_IoctlSysName: !cm_sysName\n", __FILE__, __LINE__);
+
+    if (!setSysName) {      /* user just wants the info */
+        strcpy(outname, cm_sysName);
+        foundname = cm_sysNameCount;
+        *sysnamelist = cm_sysNameList;
+    } else {                /* Local guy; only root can change sysname */
+        /* clear @sys entries from the dnlc, once afs_lookup can
+         * do lookups of @sys entries and thinks it can trust them */
+        /* privs ok, store the entry, ... */
+        strcpy(cm_sysName, inname);
+        if (setSysName > 1) {       /* ... or list */
+            cp = ioctlp->inDatap;
+            for (count = 1; count < setSysName; ++count) {
+                if (!cm_sysNameList[count])
+                    osi_panic
+                        ("cm_IoctlSysName: no cm_sysNameList entry to write\n"
+                          , __FILE__, __LINE__);
+                t = strlen(cp);
+                memcpy(cm_sysNameList[count], cp, t + 1);  /* include null */
+                cp += t + 1;
+            }
+        }
+        cm_sysNameCount = setSysName;
+    }
+
+    if (!setSysName) {
                /* return the sysname to the caller */
-                setSysName = 1;        /* really means "found sys name */
                cp = ioctlp->outDatap;
-                memcpy(cp, &setSysName, sizeof(long));
-                cp += sizeof(long);    /* skip found flag */
-                strcpy(cp, cm_sysName);
-                cp += strlen(cp) + 1;  /* skip name and terminating null char */
-                ioctlp->outDatap = cp;
+        memcpy(cp, (char *)&foundname, sizeof(afs_int32));
+        cp += sizeof(afs_int32);       /* skip found flag */
+        if (foundname) {
+            strcpy(cp, outname);
+            cp += strlen(outname) + 1; /* skip name and terminating null char */
+            for ( count=1; count < foundname ; ++count) {   /* ... or list */
+                if ( !(*sysnamelist)[count] )
+                    osi_panic("cm_IoctlSysName: no cm_sysNameList entry to read\n"
+                               , __FILE__, __LINE__);
+                t = strlen((*sysnamelist)[count]);
+                if (t >= MAXSYSNAME)
+                    osi_panic("cm_IoctlSysName: sysname entry garbled\n"
+                               , __FILE__, __LINE__);
+                strcpy(cp, (*sysnamelist)[count]);
+                cp += t + 1;
+            }
         }
+        ioctlp->outDatap = cp;
+    }
         
        /* done: success */
-        return 0;
+    return 0;
 }
 
 long cm_IoctlGetCellStatus(struct smb_ioctl *ioctlp, struct cm_user *userp)
@@ -1207,6 +1434,7 @@ long cm_IoctlCreateMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp)
        if (cm_freelanceEnabled && dscp == cm_rootSCachep) {
          /* we are adding the mount point to the root dir., so call
             the freelance code to do the add. */
+         osi_Log0(afsd_logp,"IoctlCreateMountPoint within Freelance root dir");
          code = cm_FreelanceAddMount(leaf, fullCell, volume, NULL);
          return code;
        }
index 4e9089e2ee992f981a6b18828b6106b9fbf6a8ae..c9ba93249f1386ae63a448e671e23db62909fea1 100644 (file)
@@ -41,6 +41,12 @@ typedef struct cm_SSetPref {
 } cm_SSetPref_t;
 
 
+#define MAXNUMSYSNAMES    16      /* max that current constants allow */
+#define   MAXSYSNAME      128     /* max sysname (i.e. @sys) size */
+extern char *cm_sysName;
+extern int   cm_sysNameCount;
+extern char *cm_sysNameList[MAXNUMSYSNAMES];
+
 #ifndef __CM_IOCTL_INTERFACES_ONLY__
 
 void cm_InitIoctl(void);
index ced5db1ba7741b1f683a4f5197b423321fb4767d..c934ade45ebe4ebc828aad61ad2abc8175676514 100644 (file)
@@ -238,30 +238,30 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
        cm_req_t *reqp)
 {
        long hash;
-        cm_scache_t *scp;
-        long code;
-        cm_volume_t *volp;
-        cm_cell_t *cellp;
+    cm_scache_t *scp;
+    long code;
+    cm_volume_t *volp;
+    cm_cell_t *cellp;
        char* mp;
        int special; // yj: boolean variable to test if file is on root.afs
        int isRoot;
         
-        hash = CM_SCACHE_HASH(fidp);
+    hash = CM_SCACHE_HASH(fidp);
         
        osi_assert(fidp->cell != 0);
 
        // yj: check if we have the scp, if so, we don't need
        // to do anything else
-        lock_ObtainWrite(&cm_scacheLock);
+    lock_ObtainWrite(&cm_scacheLock);
        for(scp=cm_hashTablep[hash]; scp; scp=scp->nextp) {
                if (cm_FidCmp(fidp, &scp->fid) == 0) {
                        scp->refCount++;
-                        *outScpp = scp;
-                        cm_AdjustLRU(scp);
-                        lock_ReleaseWrite(&cm_scacheLock);
+            *outScpp = scp;
+            cm_AdjustLRU(scp);
+            lock_ReleaseWrite(&cm_scacheLock);
                        return 0;
-                }
         }
+    }
         
        // yj: when we get here, it means we don't have an scp
        // so we need to either load it or fake it, depending
@@ -272,19 +272,20 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
        // because we have to fill in the status stuff 'coz we
        // don't want trybulkstat to fill it in for us
 #ifdef AFS_FREELANCE_CLIENT
-       special = (fidp->cell==0x1 && fidp->volume==0x20000001 && 
+       special = (fidp->cell==0x1 && fidp->volume==AFS_FAKE_ROOT_VOL_ID && 
                           !(fidp->vnode==0x1 && fidp->unique==0x1));
-       isRoot = (fidp->cell==0x1 && fidp->volume==0x20000001 && 
+       isRoot = (fidp->cell==0x1 && fidp->volume==AFS_FAKE_ROOT_VOL_ID && 
                           fidp->vnode==0x1 && fidp->unique==0x1);
        if (cm_freelanceEnabled && isRoot) {
+               osi_Log0(afsd_logp,"cm_getSCache Freelance and isRoot");
           /* freelance: if we are trying to get the root scp for the first
              time, we will just put in a place holder entry. */
-         volp = NULL;
+               volp = NULL;
        }
          
        if (cm_freelanceEnabled && special) {
-         /*afsi_log("cm_getscache: special"); */
-               lock_ObtainMutex(&cm_Freelance_Lock);
+               osi_Log0(afsd_logp,"cm_getSCache Freelance and special");
+           lock_ObtainMutex(&cm_Freelance_Lock);
                mp =(cm_localMountPoints+fidp->vnode-2)->mountPointStringp;
                lock_ReleaseMutex(&cm_Freelance_Lock);
                
@@ -295,7 +296,7 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
                if (scp->dotdotFidp == (cm_fid_t *) NULL)
                        scp->dotdotFidp = (cm_fid_t *) malloc (sizeof(cm_fid_t));
                scp->dotdotFidp->cell=0x1;
-               scp->dotdotFidp->volume=0x20000001;
+               scp->dotdotFidp->volume=AFS_FAKE_ROOT_VOL_ID;
                scp->dotdotFidp->unique=1;
                scp->dotdotFidp->vnode=1;
                scp->flags |= (CM_SCACHEFLAG_PURERO | CM_SCACHEFLAG_RO);
@@ -328,15 +329,17 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
        // end of yj code
 #endif /* AFS_FREELANCE_CLIENT */
 
-        /* otherwise, we need to find the volume */
+    /* otherwise, we need to find the volume */
        if (!cm_freelanceEnabled || !isRoot) {
-         lock_ReleaseWrite(&cm_scacheLock);    /* for perf. reasons */
-         cellp = cm_FindCellByID(fidp->cell);
-         if (!cellp) return CM_ERROR_NOSUCHCELL;
-
-         code = cm_GetVolumeByID(cellp, fidp->volume, userp, reqp, &volp);
-         if (code) return code;
-          lock_ObtainWrite(&cm_scacheLock);
+        lock_ReleaseWrite(&cm_scacheLock);     /* for perf. reasons */
+        cellp = cm_FindCellByID(fidp->cell);
+        if (!cellp) 
+            return CM_ERROR_NOSUCHCELL;
+
+        code = cm_GetVolumeByID(cellp, fidp->volume, userp, reqp, &volp);
+        if (code) 
+            return code;
+        lock_ObtainWrite(&cm_scacheLock);
        }
         
         /* otherwise, we have the volume, now reverify that the scp doesn't
@@ -345,15 +348,15 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
        for(scp=cm_hashTablep[hash]; scp; scp=scp->nextp) {
                if (cm_FidCmp(fidp, &scp->fid) == 0) {
                        scp->refCount++;
-                        cm_AdjustLRU(scp);
-                        lock_ReleaseWrite(&cm_scacheLock);
-                        cm_PutVolume(volp);
-                        *outScpp = scp;
+            cm_AdjustLRU(scp);
+            lock_ReleaseWrite(&cm_scacheLock);
+            cm_PutVolume(volp);
+            *outScpp = scp;
                        return 0;
-                }
         }
+    }
         
-        /* now, if we don't have the fid, recycle something */
+    /* now, if we don't have the fid, recycle something */
        scp = cm_GetNewSCache();
        osi_assert(!(scp->flags & CM_SCACHEFLAG_INHASH));
        scp->fid = *fidp;
@@ -377,14 +380,13 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
        }
        scp->nextp = cm_hashTablep[hash];
        cm_hashTablep[hash] = scp;
-        scp->flags |= CM_SCACHEFLAG_INHASH;
+    scp->flags |= CM_SCACHEFLAG_INHASH;
        scp->refCount = 1;
-        lock_ReleaseWrite(&cm_scacheLock);
+    lock_ReleaseWrite(&cm_scacheLock);
         
-        /* now we have a held scache entry; just return it */
-        *outScpp = scp;
-        
-        return 0;
+    /* now we have a held scache entry; just return it */
+    *outScpp = scp;
+    return 0;
 }
 
 /* synchronize a fetch, store, read, write, fetch status or store status.
@@ -591,7 +593,7 @@ long cm_SyncOp(cm_scache_t *scp, cm_buf_t *bufp, cm_user_t *up, cm_req_t *reqp,
                        && (!cm_freelanceEnabled || !(!(scp->fid.vnode==0x1 &&
                                                         scp->fid.unique==0x1) &&
                                                         scp->fid.cell==0x1 &&
-                                                        scp->fid.volume==0x20000001))
+                                                        scp->fid.volume==AFS_FAKE_ROOT_VOL_ID))
 #endif /* AFS_FREELANCE_CLIENT */
                    ) {
                        if (!cm_HaveCallback(scp)) {
@@ -644,12 +646,14 @@ sleep:
 
                /* wait here, then try again */
                osi_Log1(afsd_logp, "CM SyncOp sleeping scp %x", (long) scp);
+        if ( scp->flags & CM_SCACHEFLAG_WAITING ) 
+            osi_Log1(afsd_logp, "CM SyncOp CM_SCACHEFLAG_WAITING already set for 0x%x", scp);
                scp->flags |= CM_SCACHEFLAG_WAITING;
                if (bufLocked) lock_ReleaseMutex(&bufp->mx);
-                osi_SleepM((long) &scp->flags, &scp->mx);
-                osi_Log0(afsd_logp, "CM SyncOp woke!");
-               if (bufLocked) lock_ObtainMutex(&bufp->mx);
-                lock_ObtainMutex(&scp->mx);
+        osi_SleepM((long) &scp->flags, &scp->mx);
+        osi_Log0(afsd_logp, "CM SyncOp woke!");
+        if (bufLocked) lock_ObtainMutex(&bufp->mx);
+        lock_ObtainMutex(&scp->mx);
         } /* big while loop */
         
         /* now, update the recorded state for RPC-type calls */
@@ -796,6 +800,7 @@ void cm_MergeStatus(cm_scache_t *scp, AFSFetchStatus *statusp, AFSVolSync *volp,
        // entries under that directory
 #ifdef AFS_FREELANCE_CLIENT
        if (cm_freelanceEnabled && scp == cm_rootSCachep) {
+               osi_Log0(afsd_logp,"cm_MergeStatus Freelance cm_rootSCachep");
                statusp->InterfaceVersion = 0x1;
                statusp->FileType = 0x2;
                statusp->LinkCount = scp->linkCount;
index 71cfc645c944b0e77bfa4af9d1193f79b710a89d..be349d495e872c1e00dd97b394a8e94d623dca52 100644 (file)
@@ -98,7 +98,7 @@ void cm_CheckServers(long flags, cm_cell_t *cellp)
                                        code = RXAFS_GetTime(connp->callp, &secs, &usecs);
                                }
                                if (wasDown)
-                                       rx_SetConnDeadTime(connp->callp, CM_CONN_CONNDEADTIME);
+                                       rx_SetConnDeadTime(connp->callp, ConnDeadtimeout);
                                cm_PutConn(connp);
                        }       /* got an unauthenticated connection to this server */
 
@@ -390,6 +390,33 @@ void cm_RandomizeServer(cm_serverRef_t** list)
     lock_ReleaseWrite(&cm_serverLock);
 }
 
+/* call cm_FreeServer while holding a write lock on cm_serverLock */
+void cm_FreeServer(cm_server_t* server)
+{
+    if (--(server->refCount) == 0)
+    {
+        /* we need to check to ensure that all of the connections
+         * for this server have a 0 refCount; otherwise, they will
+         * not be garbage collected 
+         */
+        cm_GCConnections(&server);  /* connsp */
+
+        lock_FinalizeMutex(&server->mx);
+        if ( cm_allServersp == server )
+            cm_allServersp = server->allNextp;
+        else {
+            cm_server_t *tsp;
+
+            for(tsp = cm_allServersp; tsp->allNextp; tsp=tsp->allNextp) {
+                if ( tsp->allNextp == server ) {
+                    tsp->allNextp = server->allNextp;
+                    break;
+                }
+            }
+        }
+    }
+ }
+
 void cm_FreeServerList(cm_serverRef_t** list)
 {
     cm_serverRef_t  *current = *list;
@@ -399,9 +426,10 @@ void cm_FreeServerList(cm_serverRef_t** list)
 
     while (current)
     {
-          next = current->next;
-          free(current);
-          current = next;
+        next = current->next;
+        cm_FreeServer(current->server);
+        free(current);
+        current = next;
     }
   
     lock_ReleaseWrite(&cm_serverLock);
index c0b357fb6e8426fbabbdfccb3ef608298988ed74..114a3782a6e5c193bfd708cbd05baee73ad4b7fc 100644 (file)
@@ -93,4 +93,8 @@ extern long cm_ChangeRankServer(cm_serverRef_t** list, cm_server_t* server);
 
 extern void cm_RandomizeServer(cm_serverRef_t** list); 
 
+extern void cm_FreeServer(cm_server_t* server);
+
+extern void cm_FreeServerList(cm_serverRef_t** list);
+
 #endif /*  __CM_SERVER_H_ENV__ */
index 4b50a0d368accb67335cbe4c92f777cb462119a7..d04aa29075410b903d1963e4e26053d3e109f009 100644 (file)
@@ -34,8 +34,6 @@ extern void afsi_log(char *pattern, ...);
 
 unsigned int cm_mountRootGen = 0;
 
-char cm_sysName[100];
-
 /*
  * Case-folding array.  This was constructed by inspecting of SMBtrace output.
  * I do not know anything more about it.
@@ -943,24 +941,24 @@ done:
 int cm_ExpandSysName(char *inp, char *outp, long outSize)
 {
        char *tp;
-        int prefixCount;
-        
-        tp = strrchr(inp, '@');
-        if (tp == NULL) return 0;              /* no @sys */
-        
-        if (strcmp(tp, "@sys") != 0) return 0; /* no @sys */
-        
+    int prefixCount;
+
+    tp = strrchr(inp, '@');
+    if (tp == NULL) return 0;          /* no @sys */
+
+    if (strcmp(tp, "@sys") != 0) return 0;     /* no @sys */
+
        /* caller just wants to know if this is a valid @sys type of name */
        if (outp == NULL) return 1;
 
        /* otherwise generate the properly expanded @sys name */
-        prefixCount = tp - inp;
-        
-        strncpy(outp, inp, prefixCount);       /* copy out "a." from "a.@sys" */
-        outp[prefixCount] = 0;                 /* null terminate the "a." */
-        strcat(outp, cm_sysName);              /* append i386_nt40 */
-        return 1;
-}
+    prefixCount = tp - inp;
+
+    strncpy(outp, inp, prefixCount);   /* copy out "a." from "a.@sys" */
+    outp[prefixCount] = 0;                     /* null terminate the "a." */
+    strcat(outp, cm_sysName);          /* append i386_nt40 */
+    return 1;
+}   
 
 long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
        cm_req_t *reqp, cm_scache_t **outpScpp)
@@ -1012,6 +1010,7 @@ long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
                 return CM_ERROR_NOSUCHFILE;
         }
         else {  /* nonexistent dir on freelance root, so add it */
+                       osi_Log1(afsd_logp,"cm_Lookup adding mount for non-existent directory: %s", namep);
             code = cm_FreelanceAddMount(namep, namep, "root.cell.",
                                        &rock.fid);
             if (code < 0) {   /* add mount point failed, so give up */
@@ -1550,12 +1549,10 @@ long cm_TryBulkProc(cm_scache_t *scp, cm_dirEntry_t *dep, void *rockp,
        // to be bulkstat-ed, instead, we call getSCache directly and under
        // getSCache, it is handled specially.
        if      (cm_freelanceEnabled &&
-           tfid.cell==0x1 && tfid.volume==0x20000001 &&
+           tfid.cell==0x1 && tfid.volume==AFS_FAKE_ROOT_VOL_ID &&
                           !(tfid.vnode==0x1 && tfid.unique==0x1) )
        {
-#ifdef DEBUG
-               afsi_log("   cm_trybulkproc going to call getscache");
-#endif
+        osi_Log0(afsd_logp, "cm_TryBulkProc Freelance calls cm_SCache on root.afs mountpoint");
                return cm_GetSCache(&tfid, &tscp, NULL, NULL);
        }
 #endif /* AFS_FREELANCE_CLIENT */
index dfa46242299992fb9511318e20a4618be8afd9f3..ce45999f180f562b63876a5dbf2c2d46b49be836 100644 (file)
@@ -107,8 +107,6 @@ extern long cm_HandleLink(cm_scache_t *linkScp, struct cm_user *userp,
 extern long cm_SymLink(cm_scache_t *dscp, char *namep, char *contentsp,
        long flags, cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
 
-extern char cm_sysName[100];
-
 extern int cm_ExpandSysName(char *inp, char *outp, long outSize);
 
 extern long cm_Open(cm_scache_t *scp, int type, cm_user_t *userp);
index 4daad5b6eb4750605d53972d600cb8a8c705c012..cae83b6648744f71859b8145230b7f8ce8aa62cd 100644 (file)
@@ -583,6 +583,69 @@ char *AclToString(acl)
     return mydata;
 }
 
+BOOL IsAdmin (void)
+{
+    static BOOL fAdmin = FALSE;
+    static BOOL fTested = FALSE;
+
+    if (!fTested)
+    {
+        /* Obtain the SID for BUILTIN\Administrators. If this is Windows NT,
+         * expect this call to succeed; if it does not, we can presume that
+         * it's not NT and therefore the user always has administrative
+         * privileges.
+         */
+        PSID psidAdmin = NULL;
+        SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY;
+
+        fTested = TRUE;
+
+        if (!AllocateAndInitializeSid (&auth, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &psidAdmin))
+            fAdmin = TRUE;
+        else
+        {
+            /* Then open our current ProcessToken */
+            HANDLE hToken;
+
+            if (OpenProcessToken (GetCurrentProcess(), TOKEN_QUERY, &hToken))
+            {
+                /* We'll have to allocate a chunk of memory to store the list of
+                 * groups to which this user belongs; find out how much memory
+                 * we'll need.
+                 */
+                DWORD dwSize = 0;
+                PTOKEN_GROUPS pGroups;
+                
+                GetTokenInformation (hToken, TokenGroups, NULL, dwSize, &dwSize);
+            
+                pGroups = (PTOKEN_GROUPS)malloc(dwSize);
+                
+                /* Allocate that buffer, and read in the list of groups. */
+                if (GetTokenInformation (hToken, TokenGroups, pGroups, dwSize, &dwSize))
+                {
+                    /* Look through the list of group SIDs and see if any of them
+                     * matches the Administrator group SID.
+                     */
+                    size_t iGroup = 0;
+                    for (; (!fAdmin) && (iGroup < pGroups->GroupCount); ++iGroup)
+                    {
+                        if (EqualSid (psidAdmin, pGroups->Groups[ iGroup ].Sid))
+                            fAdmin = TRUE;
+                    }
+                }
+
+                if (pGroups)
+                    free(pGroups);
+            }
+        }
+
+        if (psidAdmin)
+            FreeSid (psidAdmin);
+    }
+
+    return fAdmin;
+}
+
 static SetACLCmd(as)
 struct cmd_syndesc *as; {
     register afs_int32 code;
@@ -1585,12 +1648,26 @@ register struct cmd_syndesc *as; {
                } else if(checkserv.tinterval> 600) {
                    printf("Warning: The maximum -interval value is 10 mins (600 secs)\n");
                    checkserv.tinterval=600;    /* 10 min max interval */
-              }
+        }
        }
        else {
-         checkserv.tinterval = -1;     /* don't change current interval */
+        checkserv.tinterval = -1;      /* don't change current interval */
        }
 
+    if ( checkserv.tinterval != 0 ) {
+#ifdef WIN32
+        if ( !IsAdmin() ) {
+            fprintf (stderr,"Permission denied: requires Administrator access.\n");
+            return EACCES;
+        }
+#else /* WIN32 */
+        if (geteuid()) {
+            fprintf (stderr,"Permission denied: requires root access.\n");
+            return EACCES;
+        }
+#endif /* WIN32 */
+    }
+
     code = pioctl(0, VIOCCKSERV, &blob, 1);
     if (code) {
        if ((errno == EACCES) && (checkserv.tinterval > 0)) {
@@ -1690,6 +1767,18 @@ register struct cmd_syndesc *as; {
     struct ViceIoctl blob;
     afs_int32 temp;
     
+#ifdef WIN32
+    if ( !IsAdmin() ) {
+        fprintf (stderr,"Permission denied: requires Administrator access.\n");
+        return EACCES;
+    }
+#else /* WIN32 */
+    if (geteuid()) {
+        fprintf (stderr,"Permission denied: requires root access.\n");
+        return EACCES;
+    }
+#endif /* WIN32 */
+
     if (!as->parms[0].items && !as->parms[1].items) {
        fprintf(stderr,"%s: syntax error in set cache size cmd.\n", pn);
        return 1;
@@ -1792,6 +1881,18 @@ register struct cmd_syndesc *as; {
     register struct hostent *thp;
     afs_int32 fsport = 0, vlport = 0;
 
+#ifdef WIN32
+    if ( !IsAdmin() ) {
+        fprintf (stderr,"Permission denied: requires Administrator access.\n");
+        return EACCES;
+    }
+#else /* WIN32 */
+    if (geteuid()) {
+        fprintf (stderr,"Permission denied: requires root access.\n");
+        return EACCES;
+    }
+#endif /* WIN32 */
+
     memset(space, 0, MAXHOSTS * sizeof(afs_int32));
     tp = space;
     lp = (afs_int32 *)tp;
@@ -1995,42 +2096,68 @@ static SysNameCmd(as)
 register struct cmd_syndesc *as; {
     register afs_int32 code;
     struct ViceIoctl blob;
-    register struct cmd_item *ti;
+    struct cmd_item *ti;
     char *input = space;
-    afs_int32 setp = 1;
+    afs_int32 setp = 0;
     
     ti = as->parms[0].items;
-    if (!ti) setp = 0;
+    if (ti) {
+#ifdef WIN32
+    if ( !IsAdmin() ) {
+        fprintf (stderr,"Permission denied: requires Administrator access.\n");
+        return EACCES;
+    }
+#else /* WIN32 */
+    if (geteuid()) {
+        fprintf (stderr,"Permission denied: requires root access.\n");
+        return EACCES;
+    }
+#endif /* WIN32 */
+    }
+
     blob.in = space;
     blob.out = space;
     blob.out_size = MAXSIZE;
     blob.in_size = sizeof(afs_int32);
     memcpy(input, &setp, sizeof(afs_int32));
     input += sizeof(afs_int32);
-    if (ti) {
-       strcpy(input, ti->data);
-       blob.in_size += strlen(ti->data) + 1;
-       input += strlen(ti->data);
-       *(input++) = '\0';
+    for (; ti; ti = ti->next) {
+        setp++;
+        blob.in_size += strlen(ti->data) + 1;
+        if (blob.in_size > MAXSIZE) {
+            fprintf(stderr, "%s: sysname%s too long.\n", pn,
+                     setp > 1 ? "s" : "");
+            return 1;
+        }
+        strcpy(input, ti->data);
+        input += strlen(ti->data);
+        *(input++) = '\0';
     }
+    memcpy(space, &setp, sizeof(afs_int32));
     code = pioctl(0, VIOC_AFS_SYSNAME, &blob, 1);
     if (code) {
-       Die(errno, 0);
-       exit(1);
+        Die(errno, 0);
+        return 1;
     }    
     if (setp) {
-       printf("%s: new sysname set.\n", pn);
+        printf("%s: new sysname%s set.\n", pn, setp > 1 ? "s" : "");
+        return 0;
     }
-    else {
+
        input = space;
        memcpy(&setp, input, sizeof(afs_int32));
        input += sizeof(afs_int32);
        if (!setp) {
            fprintf(stderr,"No sysname name value was found\n");
-       } else {
-           printf("Current sysname is '%s'\n", input);
+        return 1;
+       } 
+    
+    printf("Current sysname%s", setp > 1 ? "s are" : " is");
+    for (; setp > 0; --setp ) {
+        printf(" \'%s\'", input);
+        input += strlen(input) + 1;
        }
-    }
+    printf("\n");
     return 0;
 }
 
@@ -2042,6 +2169,18 @@ register struct cmd_syndesc *as; {
     register struct cmd_item *ti;
     int export=0, type=0, mode = 0, exp = 0, gstat = 0, exportcall, pwsync=0, smounts=0;
     
+#ifdef WIN32
+    if ( !IsAdmin() ) {
+        fprintf (stderr,"Permission denied: requires Administrator access.\n");
+        return EACCES;
+    }
+#else /* WIN32 */
+    if (geteuid()) {
+        fprintf (stderr,"Permission denied: requires root access.\n");
+        return EACCES;
+    }
+#endif /* WIN32 */
+
     ti = as->parms[0].items;
     if (strcmp(ti->data, "nfs")        == 0) type = 0x71; /* NFS */
     else {
@@ -2170,6 +2309,18 @@ register struct cmd_syndesc *as; {
     args.stat = 0;
     args.junk = 0;
 
+#ifdef WIN32
+    if ( !IsAdmin() ) {
+        fprintf (stderr,"Permission denied: requires Administrator access.\n");
+        return EACCES;
+    }
+#else /* WIN32 */
+    if (geteuid()) {
+        fprintf (stderr,"Permission denied: requires root access.\n");
+        return EACCES;
+    }
+#endif /* WIN32 */
+
     if (! as->parms[1].items) args.stat |= CM_SETCELLFLAG_SUID; /* default to -nosuid */
 
     /* set stat for all listed cells */
@@ -2397,69 +2548,6 @@ static BOOL IsWindowsNT (void)
 }
 
 
-BOOL IsAdmin (void)
-{
-    static BOOL fAdmin = FALSE;
-    static BOOL fTested = FALSE;
-
-    if (!fTested)
-    {
-        /* Obtain the SID for BUILTIN\Administrators. If this is Windows NT,
-         * expect this call to succeed; if it does not, we can presume that
-         * it's not NT and therefore the user always has administrative
-         * privileges.
-         */
-        PSID psidAdmin = NULL;
-        SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY;
-
-        fTested = TRUE;
-
-        if (!AllocateAndInitializeSid (&auth, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &psidAdmin))
-            fAdmin = TRUE;
-        else
-        {
-            /* Then open our current ProcessToken */
-            HANDLE hToken;
-
-            if (OpenProcessToken (GetCurrentProcess(), TOKEN_QUERY, &hToken))
-            {
-                /* We'll have to allocate a chunk of memory to store the list of
-                 * groups to which this user belongs; find out how much memory
-                 * we'll need.
-                 */
-                DWORD dwSize = 0;
-                PTOKEN_GROUPS pGroups;
-                
-                GetTokenInformation (hToken, TokenGroups, NULL, dwSize, &dwSize);
-            
-                pGroups = (PTOKEN_GROUPS)malloc(dwSize);
-                
-                /* Allocate that buffer, and read in the list of groups. */
-                if (GetTokenInformation (hToken, TokenGroups, pGroups, dwSize, &dwSize))
-                {
-                    /* Look through the list of group SIDs and see if any of them
-                     * matches the Administrator group SID.
-                     */
-                    size_t iGroup = 0;
-                    for (; (!fAdmin) && (iGroup < pGroups->GroupCount); ++iGroup)
-                    {
-                        if (EqualSid (psidAdmin, pGroups->Groups[ iGroup ].Sid))
-                            fAdmin = TRUE;
-                    }
-                }
-
-                if (pGroups)
-                    free(pGroups);
-            }
-        }
-
-        if (psidAdmin)
-            FreeSid (psidAdmin);
-    }
-
-    return fAdmin;
-}
-
 static SetPrefCmd(as)
 register struct cmd_syndesc *as; {
   FILE *infd;
@@ -2477,7 +2565,6 @@ register struct cmd_syndesc *as; {
   gblob.out = space;
   gblob.out_size = MAXSIZE;
 
-
 #ifdef WIN32
     if ( !IsAdmin() ) {
         fprintf (stderr,"Permission denied: requires Administrator access.\n");
@@ -2625,33 +2712,45 @@ register struct cmd_syndesc *as; {
     }
   } while (!code && out->next_offset > 0);
 
-return code;
+    return code;
 }
 
 static TraceCmd(struct cmd_syndesc *asp)
 {
        long code;
-        struct ViceIoctl blob;
-        long inValue;
-        long outValue;
-        
-        if ((asp->parms[0].items && asp->parms[1].items)) {
-               fprintf(stderr, "fs trace: must use at most one of '-off' or '-on'\n");
-                return EINVAL;
+    struct ViceIoctl blob;
+    long inValue;
+    long outValue;
+    
+#ifdef WIN32
+    if ( !IsAdmin() ) {
+        fprintf (stderr,"Permission denied: requires Administrator access.\n");
+        return EACCES;
+    }
+#else /* WIN32 */
+        if (geteuid()) {
+            fprintf (stderr,"Permission denied: requires root access.\n");
+            return EACCES;
         }
+#endif /* WIN32 */
+
+    if ((asp->parms[0].items && asp->parms[1].items)) {
+               fprintf(stderr, "fs trace: must use at most one of '-off' or '-on'\n");
+        return EINVAL;
+    }
         
        /* determine if we're turning this tracing on or off */
        inValue = 0;
-        if (asp->parms[0].items)
-               inValue = 3;            /* enable */
+    if (asp->parms[0].items)
+        inValue = 3;           /* enable */
        else if (asp->parms[1].items) inValue = 2;      /* disable */
-        if (asp->parms[2].items) inValue |= 4;         /* do reset */
+    if (asp->parms[2].items) inValue |= 4;             /* do reset */
        if (asp->parms[3].items) inValue |= 8;          /* dump */
         
-        blob.in_size = sizeof(long);
-        blob.in = (char *) &inValue;
-        blob.out_size = sizeof(long);
-        blob.out = (char *) &outValue;
+    blob.in_size = sizeof(long);
+    blob.in = (char *) &inValue;
+    blob.out_size = sizeof(long);
+    blob.out = (char *) &outValue;
         
        code = pioctl(NULL, VIOC_TRACECTL, &blob, 1);
        if (code) {
@@ -2659,10 +2758,10 @@ static TraceCmd(struct cmd_syndesc *asp)
                return code;
        }
         
-        if (outValue) printf("AFS tracing enabled.\n");
-        else printf("AFS tracing disabled.\n");
+    if (outValue) printf("AFS tracing enabled.\n");
+    else printf("AFS tracing disabled.\n");
 
-        return 0;
+    return 0;
 }
 
 static void sbusage()
@@ -2679,6 +2778,18 @@ struct cmd_syndesc *as; {
     struct sbstruct tsb;
     int kb;
     
+#ifdef WIN32
+    if ( !IsAdmin() ) {
+        fprintf (stderr,"Permission denied: requires Administrator access.\n");
+        return EACCES;
+    }
+#else /* WIN32 */
+    if (geteuid()) {
+        fprintf (stderr,"Permission denied: requires root access.\n");
+        return EACCES;
+    }
+#endif /* WIN32 */
+
     if ((as->parms[0].items && as->parms[1].items) ||   
         (!as->parms[0].items && !as->parms[1].items)) /* same as logical xor */
       ;
@@ -2732,6 +2843,18 @@ static afs_int32 SetCryptCmd(as)
     struct ViceIoctl blob;
     char *tp;
  
+#ifdef WIN32
+    if ( !IsAdmin() ) {
+        fprintf (stderr,"Permission denied: requires Administrator access.\n");
+        return EACCES;
+    }
+#else /* WIN32 */
+    if (geteuid()) {
+        fprintf (stderr,"Permission denied: requires root access.\n");
+        return EACCES;
+    }
+#endif /* WIN32 */
+
     tp = as->parms[0].items->data;
     if (strcmp(tp, "on") == 0)
       flag = 1;
@@ -3131,7 +3254,19 @@ static CSCPolicyCmd(struct cmd_syndesc *asp)
        
        if (share)
        {
-               policy = "manual";
+#ifdef WIN32
+        if ( !IsAdmin() ) {
+            fprintf (stderr,"Permission denied: requires Administrator access.\n");
+            return EACCES;
+        }
+#else /* WIN32 */
+        if (geteuid()) {
+            fprintf (stderr,"Permission denied: requires root access.\n");
+            return EACCES;
+        }
+#endif /* WIN32 */
+
+        policy = "manual";
                
                if (asp->parms[1].items)
                        policy = "manual";
index 064f1f9862a63a3b6fb12682b9b54f791d1d9b7e..dddbb342df7702dcb4d07a598e948277e8f63be5 100644 (file)
@@ -64,61 +64,61 @@ long fs_GetFullPath(char *pathp, char *outPathp, long outSize)
 {
        char tpath[1000];
        char origPath[1000];
-        char *firstp;
-        long code;
-        int pathHasDrive;
-        int doSwitch;
-        char newPath[3];
+    char *firstp;
+    long code;
+    int pathHasDrive;
+    int doSwitch;
+    char newPath[3];
 
        if (pathp[0] != 0 && pathp[1] == ':') {
                /* there's a drive letter there */
-                firstp = pathp+2;
-                pathHasDrive = 1;
-        }
-        else {
-               firstp = pathp;
+        firstp = pathp+2;
+        pathHasDrive = 1;
+    }
+    else {
+        firstp = pathp;
                pathHasDrive = 0;
-       }
+       }   
         
-        if (*firstp == '\\' || *firstp == '/') {
+    if (*firstp == '\\' || *firstp == '/') {
                /* already an absolute pathname, just copy it back */
-                strcpy(outPathp, firstp);
-                return 0;
-        }
+        strcpy(outPathp, firstp);
+        return 0;
+    }
         
-        GetCurrentDirectory(sizeof(origPath), origPath);
+    GetCurrentDirectory(sizeof(origPath), origPath);
         
        doSwitch = 0;
-        if (pathHasDrive && (*pathp & ~0x20) != (origPath[0] & ~0x20)) {
+    if (pathHasDrive && (*pathp & ~0x20) != (origPath[0] & ~0x20)) {
                /* a drive has been specified and it isn't our current drive.
-                 * to get path, switch to it first.  Must case-fold drive letters
-                 * for user convenience.
-                 */
+         * to get path, switch to it first.  Must case-fold drive letters
+         * for user convenience.
+         */
                doSwitch = 1;
-                newPath[0] = *pathp;
-                newPath[1] = ':';
-                newPath[2] = 0;
-                if (!SetCurrentDirectory(newPath)) {
+        newPath[0] = *pathp;
+        newPath[1] = ':';
+        newPath[2] = 0;
+        if (!SetCurrentDirectory(newPath)) {
                        code = GetLastError();
-                        return code;
-                }
+            return code;
         }
+    }
         
-        /* now get the absolute path to the current wdir in this drive */
-        GetCurrentDirectory(sizeof(tpath), tpath);
-        strcpy(outPathp, tpath+2);     /* skip drive letter */
+    /* now get the absolute path to the current wdir in this drive */
+    GetCurrentDirectory(sizeof(tpath), tpath);
+    strcpy(outPathp, tpath+2); /* skip drive letter */
        /* if there is a non-null name after the drive, append it */
        if (*firstp != 0) {
-               strcat(outPathp, "\\");
-               strcat(outPathp, firstp);
+        strcat(outPathp, "\\");
+        strcat(outPathp, firstp);
        }
 
        /* finally, if necessary, switch back to our home drive letter */
-        if (doSwitch) {
+    if (doSwitch) {
                SetCurrentDirectory(origPath);
-        }
+    }
         
-        return 0;
+    return 0;
 }
 
 struct hostent *hostutil_GetHostByName(char *namep)
index 48d4074dccacb28164a435beeaccb89fb5ad85b8..46df33ed6ecf94b97c2ea270b6a01d45bab67533 100644 (file)
@@ -82,7 +82,7 @@ smb_ncb_t *smb_ncbFreeListp;
 
 int smb_NumServerThreads;
 
-int numNCBs, numSessions;
+int numNCBs, numSessions, numVCs;
 
 int smb_maxVCPerServer;
 int smb_maxMpxRequests;
@@ -728,6 +728,7 @@ smb_vc_t *smb_FindVC(unsigned short lsn, int flags, int lana)
        if (!vcp && (flags & SMB_FLAG_CREATE)) {
                vcp = malloc(sizeof(*vcp));
                memset(vcp, 0, sizeof(*vcp));
+        vcp->vcID = numVCs++;
                vcp->refCount = 1;
                vcp->tidCounter = 1;
                vcp->fidCounter = 1;
@@ -845,7 +846,7 @@ smb_user_t *smb_FindUID(smb_vc_t *vcp, unsigned short uid, int flags)
                uidp->vcp = vcp;
         vcp->refCount++;
                vcp->usersp = uidp;
-               lock_InitializeMutex(&uidp->mx, "uid_t mutex");
+               lock_InitializeMutex(&uidp->mx, "user_t mutex");
                uidp->userID = uid;
                osi_LogEvent("AFS smb_FindUID (Find by UID)",NULL,"VCP[%x] new-uid[%d] name[%s]",(int)vcp,uidp->userID,(uidp->unp ? uidp->unp->name : ""));
        }
@@ -1200,13 +1201,12 @@ int smb_ListShares()
 }
 
 /* find a shareName in the table of submounts */
-int smb_FindShare(smb_vc_t *vcp, smb_packet_t *inp, char *shareName,
+int smb_FindShare(smb_vc_t *vcp, smb_user_t *uidp, char *shareName,
        char **pathNamep)
 {
        DWORD len;
        char pathName[1024];
        char *var;
-       smb_user_t *uidp;
        char temp[1024];
        DWORD sizeTemp;
     char sbmtpath[MAX_PATH];
@@ -1274,25 +1274,19 @@ int smb_FindShare(smb_vc_t *vcp, smb_packet_t *inp, char *shareName,
         while (1)
         {
             if (var = smb_stristr(p, VNUserName)) {
-                uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
                 if (uidp && uidp->unp)
                     smb_subst(p, var, sizeof(VNUserName),uidp->unp->name);
                 else
                     smb_subst(p, var, sizeof(VNUserName)," ");
-                if (uidp)
-                    smb_ReleaseUID(uidp);
             }
             else if (var = smb_stristr(p, VNLCUserName)) 
             {
-                uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
                 if (uidp && uidp->unp)
                     strcpy(temp, uidp->unp->name);
                 else 
                     strcpy(temp, " ");
                 _strlwr(temp);
                 smb_subst(p, var, sizeof(VNLCUserName), temp);
-                if (uidp)
-                    smb_ReleaseUID(uidp);
             }
             else if (var = smb_stristr(p, VNComputerName)) 
             {
@@ -2005,6 +1999,7 @@ void smb_MapNTError(long code, unsigned long *NTStatusp)
        unsigned long NTStatus;
 
        /* map CM_ERROR_* errors to NT 32-bit status codes */
+    /* NT Status codes are listed in ntstatus.h not winerror.h */
        if (code == CM_ERROR_NOSUCHCELL) {
                NTStatus = 0xC000000FL; /* No such file */
        }
@@ -2100,11 +2095,7 @@ void smb_MapNTError(long code, unsigned long *NTStatusp)
                NTStatus = 0xC0000023L; /* Buffer too small */
        }
     else if (code == CM_ERROR_AMBIGUOUS_FILENAME) {
-#ifdef COMMENT
-               NTStatus = 0xC000049CL; /* Potential file found */
-#else
                NTStatus = 0xC0000035L; /* Object name collision */
-#endif
     }
        else {
                NTStatus = 0xC0982001L; /* SMB non-specific error */
@@ -2704,6 +2695,7 @@ long smb_ReceiveCoreGetDiskAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_pack
 long smb_ReceiveCoreTreeConnect(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *rsp)
 {
        smb_tid_t *tidp;
+    smb_user_t *uidp;
        unsigned short newTid;
        char shareName[256];
        char *sharePath;
@@ -2731,7 +2723,10 @@ long smb_ReceiveCoreTreeConnect(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *
        lock_ReleaseMutex(&vcp->mx);
         
        tidp = smb_FindTID(vcp, newTid, SMB_FLAG_CREATE);
-       shareFound = smb_FindShare(vcp, inp, shareName, &sharePath);
+    uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
+       shareFound = smb_FindShare(vcp, uidp, shareName, &sharePath);
+    if (uidp)
+        smb_ReleaseUID(uidp);
        if (!shareFound) {
                smb_ReleaseTID(tidp);
                return CM_ERROR_BADSHARENAME;
@@ -6693,7 +6688,8 @@ void smb_Listener(void *parmp)
          * we run out.
          */
 
-        osi_assert(i < Sessionmax && numNCBs < NCBmax - 1);
+        osi_assert(i < Sessionmax - 1);
+        osi_assert(numNCBs < NCBmax - 1);   /* if we pass this test we can allocate one more */
 
                LSNs[i] = ncbp->ncb_lsn;
                lanas[i] = ncbp->ncb_lana_num;
@@ -7030,6 +7026,7 @@ void smb_Init(osi_log_t *logp, char *snamep, int useV3, int LANadapt,
     smb_NetbiosInit();
 
        /* Initialize listener and server structures */
+    numVCs = 0;
        memset(dead_sessions, 0, sizeof(dead_sessions));
     sprintf(eventName, "SessionEvents[0]");
        SessionEvents[0] = thrd_CreateEvent(NULL, FALSE, FALSE, eventName);
index caa7c1316ffb1a39818f4ca8737b113ddfe77318..6396ad0e0890803dc8b196d3394df025983e28b5 100644 (file)
@@ -379,7 +379,7 @@ extern smb_fid_t *smb_FindFID(smb_vc_t *vcp, unsigned short fid, int flags);
 
 extern void smb_ReleaseFID(smb_fid_t *fidp);
 
-extern int smb_FindShare(smb_vc_t *vcp, smb_packet_t *inp, char *shareName, char **pathNamep);
+extern int smb_FindShare(smb_vc_t *vcp, smb_user_t *uidp, char *shareName, char **pathNamep);
 
 extern int smb_FindShareCSCPolicy(char *shareName);
 
index 95097b7cbbb4913ac1e2bedba147b6c26e86d231..8d3669e73c2144bfa480f9af41b7b97a5e1416d7 100644 (file)
@@ -237,6 +237,7 @@ long smb_ReceiveV3UserLogoffX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *ou
 long smb_ReceiveV3TreeConnectX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
 {
     smb_tid_t *tidp;
+    smb_user_t *uidp;
     unsigned short newTid;
     char shareName[256];
        char *sharePath;
@@ -271,7 +272,10 @@ long smb_ReceiveV3TreeConnectX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *o
        lock_ReleaseMutex(&vcp->mx);
         
        tidp = smb_FindTID(vcp, newTid, SMB_FLAG_CREATE);
-       shareFound = smb_FindShare(vcp, inp, shareName, &sharePath);
+    uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
+       shareFound = smb_FindShare(vcp, uidp, shareName, &sharePath);
+    if (uidp)
+        smb_ReleaseUID(uidp);
        if (!shareFound) {
                smb_ReleaseTID(tidp);
                return CM_ERROR_BADSHARENAME;
index b8391d34233f46e52f0ab408acbf1d9b8828c2eb..32d2bebc058083706520c377f312cc3a982b09c3 100644 (file)
@@ -266,47 +266,49 @@ done:
 long smb_IoctlV3Read(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
 {
        smb_ioctl_t *iop;
-        long count;
-        long code;
-        long leftToCopy;
-        char *op;
-        cm_user_t *userp;
-
-        iop = fidp->ioctlp;
-        count = smb_GetSMBParm(inp, 5);
+    long count;
+    long code;
+    long leftToCopy;
+    char *op;
+    cm_user_t *userp;
+    smb_user_t *uidp;
+
+    iop = fidp->ioctlp;
+    count = smb_GetSMBParm(inp, 5);
        
        userp = smb_GetUser(vcp, inp);
-
-       {
-               smb_user_t *uidp;
-
-               uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
-               if (uidp && uidp->unp)
-                   osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s",
-                            uidp->userID, userp,
-                            osi_LogSaveString(afsd_logp, uidp->unp->name));
-               else {
-                       if (uidp)
+       osi_assert(userp != 0);
+
+    uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
+    iop->uidp = uidp;
+    if (uidp && uidp->unp)
+        osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s",
+                  uidp->userID, userp,
+                  osi_LogSaveString(afsd_logp, uidp->unp->name));
+    else {
+        if (uidp)
                    osi_Log2(afsd_logp, "Ioctl uid %d user %x no name",
-                            uidp->userID, userp);
-                       else
+                      uidp->userID, userp);
+        else
                    osi_Log1(afsd_logp, "Ioctl no uid user %x no name",
-                            userp);
-               }
-               if (uidp) smb_ReleaseUID(uidp);
-       }
+                     userp);
+    }
 
        iop->tidPathp = smb_GetTIDPath(vcp, ((smb_t *)inp)->tid);
 
        code = smb_IoctlPrepareRead(fidp, iop, userp);
-        if (code) {
+    if (uidp) {
+        iop->uidp = 0;
+        smb_ReleaseUID(uidp);
+    }
+    if (code) {
                cm_ReleaseUser(userp);
-                smb_ReleaseFID(fidp);
+        smb_ReleaseFID(fidp);
                return code;
-        }
+    }
 
        leftToCopy = (iop->outDatap - iop->outAllocp) - iop->outCopied;
-        if (count > leftToCopy) count = leftToCopy;
+    if (count > leftToCopy) count = leftToCopy;
         
        /* 0 and 1 are reserved for request chaining, were setup by our caller,
          * and will be further filled in after we return.
diff --git a/src/WINNT/install/NSIS/AFSCreds.ini b/src/WINNT/install/NSIS/AFSCreds.ini
new file mode 100644 (file)
index 0000000..dc9bd46
--- /dev/null
@@ -0,0 +1,115 @@
+[Settings]
+NumFields=14
+
+[Field 11]
+Type=label
+Text=Startup parameters for AFS Credentials:
+Left=20
+Right=-1
+Top=10
+Bottom=20
+
+[Field 1]
+Type=checkbox
+State=1
+Left=50
+Right=60
+Top=25
+Bottom=35
+
+[Field 2]
+Type=label
+Text=Start AFS Credentials at system login
+Left=65
+Right=-1
+Top=25
+Bottom=35
+
+[Field 12]
+Type=label
+Text=Command line options for AFS Credentials:
+Left=20
+Right=-1
+Top=40
+Bottom=50
+
+[Field 3]
+Type=checkbox
+State=1
+Left=50
+Right=60
+Top=55
+Bottom=65
+
+[Field 4]
+Type=label
+Text=Auto initialize AFS Credentials
+Left=65
+Right=-1
+Top=55
+Bottom=65
+
+[Field 5]
+type=checkbox
+State=1
+Left=50
+Right=60
+Top=70
+Bottom=80
+
+[Field 6]
+Type=label
+Text=Renew drive maps
+Left=65
+Right=-1
+Top=70
+Bottom=80
+
+[Field 7]
+Type=checkbox
+State=1
+Left=50
+Right=60
+Top=85
+Bottom=95
+
+[Field 8]
+Type=label
+Text=IP Address change detection
+Left=65
+Right=-1
+Top=85
+Bottom=95
+
+[Field 9]
+Type=checkbox
+State=1
+Left=50
+Right=60
+Top=100
+Bottom=110
+
+[Field 10]
+Type=label
+Text=Quiet
+Left=65
+Right=-1
+Top=100
+Bottom=110
+
+[Field 13]
+Type=checkbox
+State=0
+Left=50
+Right=60
+Top=115
+Bottom=125
+
+[Field 14]
+Type=label
+Text=Show credentials window on startup
+Left=65
+Right=-1
+Top=115
+Bottom=125
+
index 25f5308ed3110a35bca1d99c5fa94308bd2be253..b90525f31fb812aa59a1c7866d55e370a8c838bf 100644 (file)
@@ -8,6 +8,8 @@ NSISDIR = C:\Program Files\NSIS
 # Revise the rule for compiling sources to use static libraries
 C2OBJ   = $(cc) /Fo$@ /Fd$*.pdb $(cflags) $(cdebug) $(cvars) $(afscflags) $(afscdefs) /c
 
+LOOPBACK_LIBS = wbemuuid.lib setupapi.lib msi.lib ole32.lib shell32.lib oleaut32.lib user32.lib
+
 $(OUT)\Service.obj: Service.cpp
           $(C2OBJ) Service.cpp
 
index 231a76476fd44c7b816180674fa16395815fa037..bf4bb790b355d5a63b45e8450300974d68122e99 100644 (file)
@@ -1,17 +1,34 @@
 ;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
@@ -103,6 +120,7 @@ VIAddVersionKey "PrivateBuild" "Checked/Debug"
   !insertmacro MUI_PAGE_DIRECTORY
   Page custom AFSPageGetCellServDB
   Page custom AFSPageGetCellName
+  Page custom AFSPageConfigAFSCreds
   !insertmacro MUI_PAGE_INSTFILES
   !insertmacro MUI_PAGE_FINISH
   
@@ -175,6 +193,15 @@ VIAddVersionKey "PrivateBuild" "Checked/Debug"
   LangString DESC_secClient ${LANG_KOREAN} "OpenAFS Client: Allows you to access AFS from your Windows PC."
   LangString DESC_secClient ${LANG_PORTUGUESEBR} "OpenAFS Client: Allows you to access AFS from your Windows PC."
   
+  LangString DESC_secLoopback ${LANG_ENGLISH} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
+  LangString DESC_secLoopback ${LANG_GERMAN} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
+  LangString DESC_secLoopback ${LANG_SPANISH} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
+  LangString DESC_secLoopback ${LANG_SIMPCHINESE} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
+  LangString DESC_secLoopback ${LANG_TRADCHINESE} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
+  LangString DESC_secLoopback ${LANG_JAPANESE} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
+  LangString DESC_secLoopback ${LANG_KOREAN} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
+  LangString DESC_secLoopback ${LANG_PORTUGUESEBR} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
+
   LangString DESC_secServer ${LANG_ENGLISH} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client."
   LangString DESC_secServer ${LANG_GERMAN} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client."
   LangString DESC_secServer ${LANG_SPANISH} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client."
@@ -211,6 +238,15 @@ VIAddVersionKey "PrivateBuild" "Checked/Debug"
   LangString DESC_secSDK ${LANG_KOREAN} "SDK: Header files and libraries for developing software with OpenAFS."
   LangString DESC_secSDK ${LANG_PORTUGUESEBR} "SDK: Header files and libraries for developing software with OpenAFS."
   
+  LangString DESC_secDEBUG ${LANG_ENGLISH} "Debug symbols: Used for debugging problems with OpenAFS."
+  LangString DESC_secDEBUG ${LANG_GERMAN} "Debug symbols: Used for debugging problems with OpenAFS."
+  LangString DESC_secDEBUG ${LANG_SPANISH} "Debug symbols: Used for debugging problems with OpenAFS."
+  LangString DESC_secDEBUG ${LANG_SIMPCHINESE} "Debug symbols: Used for debugging problems with OpenAFS."
+  LangString DESC_secDEBUG ${LANG_TRADCHINESE} "Debug symbols: Used for debugging problems with OpenAFS."
+  LangString DESC_secDEBUG ${LANG_JAPANESE} "Debug symbols: Used for debugging problems with OpenAFS."
+  LangString DESC_secDEBUG ${LANG_KOREAN} "Debug symbols: Used for debugging problems with OpenAFS."
+  LangString DESC_secDEBUG ${LANG_PORTUGUESEBR} "Debug symbols: Used for debugging problems with OpenAFS."
+
 ; Popup error messages
   LangString CellError ${LANG_ENGLISH} "You must specify a valid CellServDB file to copy during install"
   LangString CellError ${LANG_GERMAN} "You must specify a valid CellServDB file to copy during the install"
@@ -506,32 +542,6 @@ Section "AFS Client" secClient
   File "${AFS_DESTDIR}\etc\rxdebug.exe"
   File "${AFS_DESTDIR}\etc\backup.exe"
   
-!ifdef DEBUG
-  File "${AFS_CLIENT_BUILDDIR}\afsshare.pdb"
-  File "${AFS_CLIENT_BUILDDIR}\libosi.pdb"
-  File "${AFS_CLIENT_BUILDDIR}\libafsconf.pdb"
-  File "${AFS_CLIENT_BUILDDIR}\klog.pdb"
-  File "${AFS_CLIENT_BUILDDIR}\tokens.pdb"
-  File "${AFS_CLIENT_BUILDDIR}\unlog.pdb"
-  File "${AFS_CLIENT_BUILDDIR}\fs.pdb"
-  File "${AFS_CLIENT_BUILDDIR}\aklog.pdb"
-  File "${AFS_CLIENT_BUILDDIR}\afscreds.pdb"
-  File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext.pdb"
-  File "${AFS_CLIENT_BUILDDIR}\afsd_service.pdb"
-  File "${AFS_CLIENT_BUILDDIR}\afslogon.pdb"
-  File "${AFS_CLIENT_BUILDDIR}\symlink.pdb"
-  File "${AFS_DESTDIR}\bin\kpasswd.pdb"
-  File "${AFS_DESTDIR}\bin\pts.pdb"
-  File "${AFS_SERVER_BUILDDIR}\bos.pdb"
-  File "${AFS_SERVER_BUILDDIR}\kas.pdb"
-  File "${AFS_SERVER_BUILDDIR}\vos.pdb"
-  File "${AFS_SERVER_BUILDDIR}\udebug.pdb"
-  File "${AFS_DESTDIR}\bin\translate_et.pdb"
-  File "${AFS_DESTDIR}\etc\rxdebug.pdb"
-  File "${AFS_DESTDIR}\etc\backup.pdb"
-!endif
-
-
    Call AFSLangFiles
    
 
@@ -541,15 +551,9 @@ Section "AFS Client" secClient
   ; Do Windows SYSDIR (Control panel)
   SetOutPath "$SYSDIR"
   !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa.cpl" "$SYSDIR\afs_cpa.cpl" "$INSTDIR"
-!ifdef DEBUG
-  File "${AFS_CLIENT_BUILDDIR}\afs_cpa.pdb"
-!endif
   
   ; Get AFS CellServDB file
   Call afs.GetCellServDB
-!ifdef INSTALL_LOOPBACK
-  Call afs.InstallMSLoopback
-!endif
 
 !ifdef INSTALL_KFW
   ; Include Kerberos for Windows files in the installer...
@@ -607,9 +611,33 @@ Section "AFS Client" secClient
   ;Write start menu entries
   CreateDirectory "$SMPROGRAMS\OpenAFS\Client"
   CreateShortCut "$SMPROGRAMS\OpenAFS\Uninstall OpenAFS.lnk" "$INSTDIR\Uninstall.exe"
-  CreateShortCut "$SMPROGRAMS\OpenAFS\Client\Authentication.lnk" "$INSTDIR\Client\Program\afscreds.exe" "-A -M -N -Q"
-  CreateShortCut "$SMSTARTUP\AFS Credentials.lnk" "$INSTDIR\Client\Program\afscreds.exe" "-A -M -N -Q"
+  
+  ; Create command line options for AFSCreds...
+  StrCpy $R2 ""
+  ReadINIStr $R1 $2 "Field 3" "State"
+  StrCmp $R1 "1" +1 +2
+  StrCpy $R2 "-A "
+  ReadINIStr $R1 $2 "Field 5" "State"
+  StrCmp $R1 "1" +1 +2
+  StrCpy $R2 "$R2-M "
+  ReadINIStr $R1 $2 "Field 7" "State"
+  StrCmp $R1 "1" +1 +2
+  StrCpy $R2 "$R2-N "
+  ReadINIStr $R1 $2 "Field 9" "State"
+  StrCmp $R1 "1" +1 +2
+  StrCpy $R2 "$R2-Q "
+  ReadINIStr $R1 $2 "Field 13" "State"
+  StrCmp $R1 "1" +1 +2
+  StrCpy $R2 "$R2-S"
+  
+  CreateShortCut "$SMPROGRAMS\OpenAFS\Client\Authentication.lnk" "$INSTDIR\Client\Program\afscreds.exe" "$R2"
+  
+  ReadINIStr $R1 $2 "Field 1" "State"
+  StrCmp $R1 "1" +1 +2
+  CreateShortCut "$SMSTARTUP\AFS Credentials.lnk" "$INSTDIR\Client\Program\afscreds.exe" "$R2"
 
+  
+  
   Push "$INSTDIR\Client\Program"
   Call AddToUniquePath
   Push "$INSTDIR\Common"
@@ -671,7 +699,6 @@ skipremove:
   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "RxMaxMTU" 1260
   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "IsGateway" 0
   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "HideDotFiles" 1
-  WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "TruncateNetbios" "on"
 
   ; Find Lana By Name appears to be causing grief for many people 
   ; I do not have time to track this down so I am simply going to disable it
@@ -696,6 +723,16 @@ skipremove:
   
 SectionEnd
 
+
+
+; MS Loopback adapter
+Section "MS Loopback Adapter" secLoopback
+
+Call afs.InstallMSLoopback
+
+SectionEnd
+
+
 ;------------------------
 ; OpenAFS SERVER  
 Section "AFS Server" secServer
@@ -748,25 +785,6 @@ skipCheck:
   File "${AFS_SERVER_BUILDDIR}\vlserver.exe"
   File "${AFS_SERVER_BUILDDIR}\volinfo.exe"
   File "${AFS_SERVER_BUILDDIR}\volserver.exe"
-
-!ifdef DEBUG
-  File "${AFS_SERVER_BUILDDIR}\afskill.pdb"
-  File "${AFS_SERVER_BUILDDIR}\afssvrcfg.pdb"
-  File "${AFS_SERVER_BUILDDIR}\bosctlsvc.pdb"
-  File "${AFS_SERVER_BUILDDIR}\bosserver.pdb"
-  File "${AFS_SERVER_BUILDDIR}\buserver.pdb"
-  File "${AFS_ETC_BUILDDIR}\butc.pdb"
-  File "${AFS_SERVER_BUILDDIR}\fileserver.pdb"
-  File "${AFS_ETC_BUILDDIR}\fms.pdb"
-  File "${AFS_SERVER_BUILDDIR}\kaserver.pdb"
-  File "${AFS_SERVER_BUILDDIR}\ptserver.pdb"
-  File "${AFS_SERVER_BUILDDIR}\salvager.pdb"
-  File "${AFS_SERVER_BUILDDIR}\upclient.pdb"
-  File "${AFS_SERVER_BUILDDIR}\upserver.pdb"
-  File "${AFS_SERVER_BUILDDIR}\vlserver.pdb"
-  File "${AFS_SERVER_BUILDDIR}\volinfo.pdb"
-  File "${AFS_SERVER_BUILDDIR}\volserver.pdb"
-!endif
  
  ;AFS Server common files
  SetOutPath "$INSTDIR\Common"
@@ -777,21 +795,12 @@ skipCheck:
  File "${AFS_SERVER_BUILDDIR}\afsptsadmin.dll"
 
 !ifdef DEBUG
- File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb"
- File "${AFS_SERVER_BUILDDIR}\afsbosadmin.pdb"
- File "${AFS_SERVER_BUILDDIR}\afscfgadmin.pdb"
- File "${AFS_SERVER_BUILDDIR}\afskasadmin.pdb"
- File "${AFS_SERVER_BUILDDIR}\afsptsadmin.pdb"
 !endif
  SetOutPath "$INSTDIR\Common"
    Call AFSLangFiles
    
    SetOutPath "$SYSDIR"
   !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver.cpl" "$SYSDIR\afsserver.cpl" "$INSTDIR"
-
-!ifdef DEBUG
-   File "${AFS_SERVER_BUILDDIR}\afsserver.pdb"
-!endif
    
   ;Store install folder
   WriteRegStr HKCU "${AFS_REGKEY_ROOT}\AFS Server" "" $INSTDIR
@@ -865,11 +874,6 @@ Section "AFS Control Center" secControl
   File "${AFS_SERVER_BUILDDIR}\TaAfsAdmSvr.exe"
   File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager.exe"
    
-!ifdef DEBUG
-  File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager.pdb"
-  File "${AFS_SERVER_BUILDDIR}\TaAfsAdmSvr.pdb"
-  File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager.pdb"
-!endif
 
  ;AFS Server common files
  Call AFSCommon.Install
@@ -880,11 +884,8 @@ Section "AFS Control Center" secControl
 !IFDEF DEBUG
 !IFDEF CL_1310
    File "${SYSTEMDIR}\msvcr71d.dll"
-   File "${SYSTEMDIR}\msvcr71d.pdb"
    File "${SYSTEMDIR}\msvcp71d.dll"
-   File "${SYSTEMDIR}\msvcp71d.pdb"
    File "${SYSTEMDIR}\mfc71d.dll"
-   File "${SYSTEMDIR}\mfc71d.pdb"
    File "${SYSTEMDIR}\MFC71CHS.DLL"
    File "${SYSTEMDIR}\MFC71CHT.DLL"
    File "${SYSTEMDIR}\MFC71DEU.DLL"
@@ -897,11 +898,8 @@ Section "AFS Control Center" secControl
 !ELSE
 !IFDEF CL_1300
    File "${SYSTEMDIR}\msvcr70d.dll"
-   File "${SYSTEMDIR}\msvcr70d.pdb"
    File "${SYSTEMDIR}\msvcp70d.dll"
-   File "${SYSTEMDIR}\msvcp70d.pdb"
    File "${SYSTEMDIR}\mfc70d.dll"
-   File "${SYSTEMDIR}\mfc70d.pdb"
    File "${SYSTEMDIR}\MFC70CHS.DLL"
    File "${SYSTEMDIR}\MFC70CHT.DLL"
    File "${SYSTEMDIR}\MFC70DEU.DLL"
@@ -913,11 +911,8 @@ Section "AFS Control Center" secControl
    File "${SYSTEMDIR}\MFC70KOR.DLL"
 !ELSE
    File "${SYSTEMDIR}\mfc42d.dll"
-   File "${SYSTEMDIR}\mfc42d.pdb"
    File "${SYSTEMDIR}\msvcp60d.dll"
-   File "${SYSTEMDIR}\msvcp60d.pdb"
    File "${SYSTEMDIR}\msvcrtd.dll"
-   File "${SYSTEMDIR}\msvcrtd.pdb"
 !ENDIF
 !ENDIF
 !ELSE
@@ -1171,6 +1166,123 @@ Section "Software Development Kit (SDK)" secSDK
    Call AFSCommon.Install
 SectionEnd
 
+
+Section "Debug symbols" secDebug
+       SectionGetFlags ${secClient} $R0
+   IntOp $R0 $R0 & ${SF_SELECTED}
+   IntCmp $R0 ${SF_SELECTED} +1 DoServer
+  
+  ; Do client components
+  SetOutPath "$INSTDIR\Client\Program"
+  File "${AFS_CLIENT_BUILDDIR}\afsshare.pdb"
+  File "${AFS_CLIENT_BUILDDIR}\libosi.pdb"
+  File "${AFS_CLIENT_BUILDDIR}\libafsconf.pdb"
+  File "${AFS_CLIENT_BUILDDIR}\klog.pdb"
+  File "${AFS_CLIENT_BUILDDIR}\tokens.pdb"
+  File "${AFS_CLIENT_BUILDDIR}\unlog.pdb"
+  File "${AFS_CLIENT_BUILDDIR}\fs.pdb"
+  File "${AFS_CLIENT_BUILDDIR}\aklog.pdb"
+  File "${AFS_CLIENT_BUILDDIR}\afscreds.pdb"
+  File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext.pdb"
+  File "${AFS_CLIENT_BUILDDIR}\afsd_service.pdb"
+  File "${AFS_CLIENT_BUILDDIR}\afslogon.pdb"
+  File "${AFS_CLIENT_BUILDDIR}\symlink.pdb"
+  File "${AFS_DESTDIR}\bin\kpasswd.pdb"
+  File "${AFS_DESTDIR}\bin\pts.pdb"
+  File "${AFS_SERVER_BUILDDIR}\bos.pdb"
+  File "${AFS_SERVER_BUILDDIR}\kas.pdb"
+  File "${AFS_SERVER_BUILDDIR}\vos.pdb"
+  File "${AFS_SERVER_BUILDDIR}\udebug.pdb"
+  File "${AFS_DESTDIR}\bin\translate_et.pdb"
+  File "${AFS_DESTDIR}\etc\rxdebug.pdb"
+  File "${AFS_DESTDIR}\etc\backup.pdb"
+
+  SetOutPath "$SYSDIR"
+  File "${AFS_CLIENT_BUILDDIR}\afs_cpa.pdb"
+  
+DoServer:
+       SectionGetFlags ${secServer} $R0
+   IntOp $R0 $R0 & ${SF_SELECTED}
+   IntCmp $R0 ${SF_SELECTED} +1 DoControl
+
+  ; Do server components
+  SetOutPath "$INSTDIR\Server\usr\afs\bin"  
+  File "${AFS_SERVER_BUILDDIR}\afskill.pdb"
+  File "${AFS_SERVER_BUILDDIR}\afssvrcfg.pdb"
+  File "${AFS_SERVER_BUILDDIR}\bosctlsvc.pdb"
+  File "${AFS_SERVER_BUILDDIR}\bosserver.pdb"
+  File "${AFS_SERVER_BUILDDIR}\buserver.pdb"
+  File "${AFS_ETC_BUILDDIR}\butc.pdb"
+  File "${AFS_SERVER_BUILDDIR}\fileserver.pdb"
+  File "${AFS_ETC_BUILDDIR}\fms.pdb"
+  File "${AFS_SERVER_BUILDDIR}\kaserver.pdb"
+  File "${AFS_SERVER_BUILDDIR}\ptserver.pdb"
+  File "${AFS_SERVER_BUILDDIR}\salvager.pdb"
+  File "${AFS_SERVER_BUILDDIR}\upclient.pdb"
+  File "${AFS_SERVER_BUILDDIR}\upserver.pdb"
+  File "${AFS_SERVER_BUILDDIR}\vlserver.pdb"
+  File "${AFS_SERVER_BUILDDIR}\volinfo.pdb"
+  File "${AFS_SERVER_BUILDDIR}\volserver.pdb"
+
+  ; Do server common components
+ File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb"
+ File "${AFS_SERVER_BUILDDIR}\afsbosadmin.pdb"
+ File "${AFS_SERVER_BUILDDIR}\afscfgadmin.pdb"
+ File "${AFS_SERVER_BUILDDIR}\afskasadmin.pdb"
+ File "${AFS_SERVER_BUILDDIR}\afsptsadmin.pdb"
+   SetOutPath "$SYSDIR"
+   File "${AFS_SERVER_BUILDDIR}\afsserver.pdb"
+
+   ; Do control center components
+DoControl:
+       SectionGetFlags ${secControl} $R0
+   IntOp $R0 $R0 & ${SF_SELECTED}
+   IntCmp $R0 ${SF_SELECTED} +1 DoCommon
+
+   SetOutPath "$INSTDIR\Control Center"   
+  File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager.pdb"
+  File "${AFS_SERVER_BUILDDIR}\TaAfsAdmSvr.pdb"
+  File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager.pdb"
+
+DoCommon:
+  SetOutPath "$INSTDIR\Common"
+!IFDEF CL_1310
+   File "${SYSTEMDIR}\msvcr71d.pdb"
+   File "${SYSTEMDIR}\msvcp71d.pdb"
+   File "${SYSTEMDIR}\mfc71d.pdb"
+!ELSE
+!IFDEF CL_1300
+   File "${SYSTEMDIR}\msvcr70d.pdb"
+   File "${SYSTEMDIR}\msvcp70d.pdb"
+   File "${SYSTEMDIR}\mfc70d.pdb"
+!ELSE
+   File "${SYSTEMDIR}\mfc42d.pdb"
+   File "${SYSTEMDIR}\msvcp60d.pdb"
+   File "${SYSTEMDIR}\msvcrtd.pdb"
+!ENDIF
+!ENDIF
+  
+; Common Areas
+   SetOutPath "$INSTDIR\Common"
+   File "${AFS_CLIENT_BUILDDIR}\afs_config.pdb"
+   File "${AFS_SERVER_BUILDDIR}\afsadminutil.pdb"
+   File "${AFS_DESTDIR}\lib\afsauthent.pdb"
+   File "${AFS_DESTDIR}\lib\afspthread.pdb"
+   File "${AFS_DESTDIR}\lib\afsrpc.pdb"
+   File "${AFS_SERVER_BUILDDIR}\afsclientadmin.pdb"
+   File "${AFS_SERVER_BUILDDIR}\afsprocmgmt.pdb"
+   File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb"
+   File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib.pdb"
+   File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb"
+   File "${AFS_SERVER_BUILDDIR}\afsbosadmin.pdb"
+   File "${AFS_SERVER_BUILDDIR}\afscfgadmin.pdb"
+   File "${AFS_SERVER_BUILDDIR}\afskasadmin.pdb"
+   File "${AFS_SERVER_BUILDDIR}\afsptsadmin.pdb"
+
+SectionEnd
+
+
 ;Display the Finish header
 ;Insert this macro after the sections if you are not using a finish page
 ;!insertmacro MUI_SECTIONS_FINISHHEADER
@@ -1208,6 +1320,27 @@ contInstall:
 
 
 contInstall2:
+DoLoop:
+   ; If the Loopback is already installed, we mark the option OFF and Read Only
+   ; so the user can not select it.
+   Call afs.isLoopbackInstalled
+   IntCmp $R1 0 SkipLoop
+   SectionGetFlags ${secLoopback} $0
+   IntOp $0 $0 & ${SECTION_OFF}
+   IntOp $0 $0 | ${SF_RO}
+   SectionSetFlags ${secLoopback} $0
+   
+SkipLoop:
+   ; Never install debug symbols unless explicitly selected, except in DEBUG mode
+       !IFNDEF DEBUG
+   SectionGetFlags ${secDebug} $0
+       IntOp $0 $0 & ${SECTION_OFF}
+       SectionSetFlags ${secDebug} $0
+   !ELSE
+   SectionGetFlags ${secDebug} $0
+       IntOp $0 $0 | ${SF_SELECTED}
+       SectionSetFlags ${secDebug} $0
+   !ENDIF
    ; Our logic should be like this.
    ;     1) If no AFS components are installed, we do a clean install with default options. (Client/Docs)
    ;     2) If existing modules are installed, we keep them selected
@@ -1445,6 +1578,8 @@ Nope:
   File /oname=$0 CellServPage.ini
   GetTempFilename $1
   File /oname=$1 AFSCell.ini
+  GetTempFilename $2
+  File /oname=$2 AFSCreds.ini
   ;File /oname=$1 ConfigURL.ini
   
 FunctionEnd
@@ -1475,6 +1610,8 @@ FunctionEnd
   !insertmacro MUI_DESCRIPTION_TEXT ${secControl} $(DESC_secControl)
   !insertmacro MUI_DESCRIPTION_TEXT ${secDocs} $(DESC_secDocs)
   !insertmacro MUI_DESCRIPTION_TEXT ${secSDK} $(DESC_secSDK)
+  !insertmacro MUI_DESCRIPTION_TEXT ${secLoopback} $(DESC_secLoopback)
+  !insertmacro MUI_DESCRIPTION_TEXT ${secDebug} $(DESC_secDebug)
   !insertmacro MUI_FUNCTION_DESCRIPTION_END
  
 ;--------------------------------
@@ -1548,7 +1685,6 @@ StartRemove:
    Delete /REBOOTOK "$INSTDIR\Common\afskasadmin.dll"
    Delete /REBOOTOK "$INSTDIR\Common\afsptsadmin.dll"
 
-!IFDEF DEBUG
    Delete /REBOOTOK "$INSTDIR\Common\afs_config.pdb"
    Delete /REBOOTOK "$INSTDIR\Common\afs_shl_ext.pdb"
    Delete /REBOOTOK "$INSTDIR\Common\afsadminutil.pdb"
@@ -1588,7 +1724,6 @@ StartRemove:
    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.dll"
    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.pdb"
 !ENDIF
-!ENDIF
 !ELSE
 !IFDEF CL_1310
    Delete /REBOOTOK "$INSTDIR\bin\mfc71.dll"
@@ -1625,11 +1760,10 @@ StartRemove:
 !ENDIF
 !ENDIF
   
-   IfSilent SkipAsk
+   IfSilent SkipDel
 ;  IfFileExists "$WINDIR\afsdcell.ini" CellExists SkipDelAsk
 ;  CellExists:
   MessageBox MB_YESNO "Would you like to keep your configuration files?" IDYES SkipDel
-  SkipAsk:
   Delete "$WINDIR\afsdcell.ini"
 
   Delete "$WINDIR\afsdsbmt.ini"
@@ -1663,7 +1797,6 @@ StartRemove:
   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\volinfo.exe"
   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\volserver.exe"
 
-!ifdef DEBUG
   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\afskill.pdb"
   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\afssvrcfg.pdb"
   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\bosctlsvc.pdb"
@@ -1681,7 +1814,6 @@ StartRemove:
   Delete "$INSTDIR\Server\usr\afs\bin\vlserver.pdb"
   Delete "$INSTDIR\Server\usr\afs\bin\volinfo.pdb"
   Delete "$INSTDIR\Server\usr\afs\bin\volserver.pdb"
-!endif
 
   RMDir /r "$INSTDIR\Server\usr\afs\bin"
   ; do not delete the server configuration files
@@ -1695,10 +1827,8 @@ StartRemove:
   Delete /REBOOTOK "$SYSDIR\afsserver.cpl"
   Delete /REBOOTOK "$SYSDIR\afs_cpa.cpl"
 
-!ifdef DEBUG
   Delete /REBOOTOK "$SYSDIR\afsserver.pdb"
   Delete /REBOOTOK "$SYSDIR\afs_cpa.pdb"
-!endif
   
   RMDir /r "$INSTDIR\Documentation\html\CmdRef"
   RMDir /r "$INSTDIR\Documentation\html\InstallGd"
@@ -1710,9 +1840,7 @@ StartRemove:
   ; Delete DOC short cut
   Delete /REBOOTOK "$INSTDIR\Client\Program\afscreds.exe"
 
-!ifdef DEBUG
   Delete /REBOOTOK "$INSTDIR\Client\Program\afscreds.pdb"
-!endif
 
   Delete /REBOOTOK "$INSTDIR\Client\Program\*"
   Delete /REBOOTOK "$INSTDIR\Client\Program\Include\*"
@@ -1806,11 +1934,9 @@ StartRemove:
   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAdmSvr.exe"
   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsServerManager.exe"
   Delete /REBOOTOK "$INSTDIR\Control Center\CCUninst.dll"
-!ifdef DEBUG
   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAccountManager.pdb"
   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAdmSvr.pdb"
   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsServerManager.pdb"
-!endif
   RMDir  "$INSTDIR\Control Center"
   
   Delete "$SMPROGRAMS\OpenAFS\Uninstall OpenAFS.lnk"
@@ -1861,7 +1987,9 @@ FunctionEnd
 
 Function un.onUninstSuccess
 
-   MessageBox MB_OK "Please reboot your machine to complete uninstallation of the software"
+  IfSilent SkipAsk
+  MessageBox MB_OK "Please reboot your machine to complete uninstallation of the software"
+  SkipAsk:
 
 FunctionEnd
 
@@ -2143,6 +2271,30 @@ done:
 good:
 FunctionEnd
 
+
+;---------------------------------------------------------
+;Do the page to get the afscreds.exe startup configuration
+
+Function AFSPageConfigAFSCreds
+  ; Skip this page if we are not installing the client
+  SectionGetFlags ${secClient} $R0
+  IntOp $R0 $R0 & ${SF_SELECTED}
+  StrCmp $R0 "0" done
+  
+  ; Set the install options here
+  
+  !insertmacro MUI_HEADER_TEXT "AFS Credentials Configuration" "Please choose default options for configuring the AFS Credentials program:" 
+  InstallOptions::dialog $2
+  Pop $R1
+  StrCmp $R1 "cancel" exit
+  StrCmp $R1 "back" done
+  StrCmp $R1 "success" done
+exit: Quit
+done:
+   
+FunctionEnd
+
+
 ;-------------
 ; Common install routines for each module
 Function AFSCommon.Install
@@ -2578,23 +2730,6 @@ Function AFSLangFiles
 !ENDIF
 !ENDIF
 
-!ifdef DEBUG
-   File "${AFS_CLIENT_BUILDDIR}\afs_config.pdb"
-   File "${AFS_SERVER_BUILDDIR}\afsadminutil.pdb"
-   File "${AFS_DESTDIR}\lib\afsauthent.pdb"
-   File "${AFS_DESTDIR}\lib\afspthread.pdb"
-   File "${AFS_DESTDIR}\lib\afsrpc.pdb"
-   File "${AFS_SERVER_BUILDDIR}\afsclientadmin.pdb"
-   File "${AFS_SERVER_BUILDDIR}\afsprocmgmt.pdb"
-   File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb"
-   File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib.pdb"
-   File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb"
-   File "${AFS_SERVER_BUILDDIR}\afsbosadmin.pdb"
-   File "${AFS_SERVER_BUILDDIR}\afscfgadmin.pdb"
-   File "${AFS_SERVER_BUILDDIR}\afskasadmin.pdb"
-   File "${AFS_SERVER_BUILDDIR}\afsptsadmin.pdb"
-!endif
-
    StrCmp $LANGUAGE ${LANG_ENGLISH} DoEnglish
    StrCmp $LANGUAGE ${LANG_GERMAN} DoGerman
    StrCmp $LANGUAGE ${LANG_SPANISH} DoSpanish
@@ -3275,19 +3410,20 @@ FunctionEnd
 !endif
 
 
-
-!ifdef INSTALL_LOOPBACK
+; Installs the loopback adpater and disables it on Windows 2000
 Function afs.InstallMSLoopback
    GetTempFileName $R0
-   File /oname=$R0 "loopback_install.dll"
-   nsExec::Exec "rundll32.exe $R0 doLoopBackEntry quiet"
-   Call GetWindowsVersion
-   Pop $R1
-   StrCmp $R1 "2000" +1 +2
-   nsExec::Exec "rundll32.exe $R0 disableLoopBackEntry"
+   File /oname=$R0 "${AFS_WININSTALL_DIR}\afsloopback.dll"
+   nsExec::Exec "rundll32.exe $R0 doLoopBackEntry AFS 10.254.254.253 255.255.255.252"
    Delete $R0
 FunctionEnd
-!endif
+
+Function afs.isLoopbackInstalled
+   SetOutPath $TEMP
+   File "${AFS_WININSTALL_DIR}\afsloopback.dll"
+   System::Call "$TEMP\afsloopback.dll::IsLoopbackInstalled() i().r11"
+   Delete "$TEMP\afsloopback.dll"
+FunctionEnd
 
 
 ; GetWindowsVersion
diff --git a/src/WINNT/install/loopback/NTMakefile b/src/WINNT/install/loopback/NTMakefile
new file mode 100644 (file)
index 0000000..b134994
--- /dev/null
@@ -0,0 +1,59 @@
+# rcsid : $Id: NTMakefile,v 1.3 2004/06/24 04:08:57 jaltman Exp $
+
+RELDIR=WINNT\install\loopback
+!INCLUDE ..\..\..\config\NTMakefile.$(SYS_NAME)
+!INCLUDE ..\..\..\config\NTMakefile.version
+
+MEDIABINDIR = $(DESTDIR)\WinInstall\Config
+
+EXEFILE = $(MEDIABINDIR)\instloop.exe
+
+DLLFILE = $(MEDIABINDIR)\afsloopback.dll
+
+DLLEXPORTS=\
+       -EXPORT:UnInstallLoopBack \
+       -EXPORT:IsLoopbackInstalled \
+       -EXPORT:InstallLoopBack \
+       -EXPORT:doLoopBackEntryW \
+       -EXPORT:uninstallLoopBackEntryW \
+       -EXPORT:installLoopbackMSI \
+       -EXPORT:uninstallLoopbackMSI
+
+DLLLIBFILES=\
+       setupapi.lib msi.lib uuid.lib Shell32.lib ole32.lib advapi32.lib wbemuuid.lib
+
+LINK=link
+
+# afsloopback.dll
+
+DLLSOURCEFILES = loopbackutils.cpp renameconnection.cpp wmi.cpp
+DLLOBJFILES =  $(OUT)\loopbackutils.obj $(OUT)\renameconnection.obj $(OUT)\wmi.obj
+
+STATICC2OBJ=$(CC) $(cflags) $(afscflags) $(afscdefs) -ML
+
+$(OUT)\loopbackutils.obj: loopbackutils.cpp
+       $(STATICC2OBJ) -c -DUNICODE -D_UNICODE /Fo$@ $**
+
+$(OUT)\renameconnection.obj: renameconnection.cpp
+       $(STATICC2OBJ) -c -DUNICODE -D_UNICODE /Fo$@ $**
+
+$(OUT)\wmi.obj: wmi.cpp
+       $(STATICC2OBJ)  -I$(NTDDKDIR) -c -DUNICODE -D_UNICODE /Fo$@ $**
+
+$(DLLFILE): $(DLLOBJFILES)
+       $(LINK) -DLL $(DLLEXPORTS) -OUT:$@ $(DLLOBJFILES) $(DLLLIBFILES)
+
+# instloop.exe
+
+EXEOBJFILES = $(OUT)\instloop.obj $(DLLOBJFILES)
+#EXELIBFILES = $(MEDIABINDIR)\afsloopback.lib
+
+$(OUT)\instloop.obj: instloop.c
+      $(STATICC2OBJ) -c -DUNICODE -D_UNICODE /Fo$@ $**
+
+$(EXEFILE): $(EXEOBJFILES)
+      $(LINK) /OUT:$@ $(EXEOBJFILES) $(DLLLIBFILES)
+
+install:  $(DLLFILE) $(EXEFILE)
+
+clean  ::
diff --git a/src/WINNT/install/loopback/instloop.c b/src/WINNT/install/loopback/instloop.c
new file mode 100644 (file)
index 0000000..bb7427a
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+
+Copyright 2004 by the Massachusetts Institute of Technology
+
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of the Massachusetts
+Institute of Technology (M.I.T.) not be used in advertising or publicity
+pertaining to distribution of the software without specific, written
+prior permission.
+
+M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+*/
+
+#include <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;
+}
+
diff --git a/src/WINNT/install/loopback/loopbackutils.cpp b/src/WINNT/install/loopback/loopbackutils.cpp
new file mode 100644 (file)
index 0000000..7ec3e4b
--- /dev/null
@@ -0,0 +1,709 @@
+/*
+   Copyright 2004 by the Massachusetts Institute of Technology              
+                                                                            
+   All rights reserved.                                                     
+                                                                            
+   Permission to use, copy, modify, and distribute this software and its    
+   documentation for any purpose and without fee is hereby granted,         
+   provided that the above copyright notice appear in all copies and that   
+   both that copyright notice and this permission notice appear in          
+   supporting documentation, and that the name of the Massachusetts         
+   Institute of Technology (M.I.T.) not be used in advertising or publicity 
+   pertaining to distribution of the software without specific, written     
+   prior permission.                                                        
+                                                                            
+   M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING  
+   ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 
+   M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR   
+   ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,      
+   WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,   
+   ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS      
+   SOFTWARE.                                                                
+*/
+
+#define _WIN32_DCOM
+#include <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);
+}
diff --git a/src/WINNT/install/loopback/loopbackutils.h b/src/WINNT/install/loopback/loopbackutils.h
new file mode 100644 (file)
index 0000000..74b83fe
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+
+Copyright 2004 by the Massachusetts Institute of Technology
+
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of the Massachusetts
+Institute of Technology (M.I.T.) not be used in advertising or publicity
+pertaining to distribution of the software without specific, written
+prior permission.
+
+M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+*/
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+DWORD InstallLoopBack(LPCTSTR pConnectionName, LPCTSTR ip, LPCTSTR mask);
+BOOL IsLoopbackInstalled(void);
+DWORD UnInstallLoopBack(void);
+int RenameConnection(PCWSTR GuidString, PCWSTR pszNewName);
+DWORD SetIpAddress(LPCWSTR guid, LPCWSTR ip, LPCWSTR mask);
+HRESULT LoopbackBindings (LPCWSTR loopback_guid);
+BOOL UpdateHostsFile( LPCWSTR swName, LPCWSTR swIp, LPCSTR szFilename, BOOL bPre );
+void ReportMessage(int level, LPCSTR msg, LPCSTR str, LPCWSTR wstr, DWORD dw);
+void SetMsiReporter(LPCSTR strAction, LPCSTR strDesc, DWORD h);
+#ifdef  __cplusplus
+}
+#endif
+
+#define DRIVER_DESC "Microsoft Loopback Adapter"
+#define DRIVER _T("loopback")
+#define MANUFACTURE _T("microsoft")
+#define DEFAULT_NAME _T("AFS")
+#define DEFAULT_IP _T("10.254.254.253")
+#define DEFAULT_MASK _T("255.255.255.252")
+
+#ifdef USE_PAUSE
+#define PAUSE                                          \
+    do {                                               \
+        char c;                                        \
+        printf("PAUSED - PRESS ENTER TO CONTINUE\n");  \
+        scanf("%c", &c);                               \
+    } while(0)
+#else
+#define PAUSE
+#endif
+
+/*#define USE_SLEEP*/
+
+#ifdef USE_SLEEP
+#define SLEEP Sleep(10*1000)
+#else
+#define SLEEP
+#endif
+
+/* Reporting mechanisms */
+#define REPORT_PRINTF 1
+#define REPORT_MSI 2
+#define REPORT_IGNORE 3
+
+extern DWORD dwReporterType;
+extern DWORD hMsiHandle;
\ No newline at end of file
diff --git a/src/WINNT/install/loopback/renameconnection.cpp b/src/WINNT/install/loopback/renameconnection.cpp
new file mode 100644 (file)
index 0000000..5842f8f
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+
+Copyright 2004 by the Massachusetts Institute of Technology
+
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of the Massachusetts
+Institute of Technology (M.I.T.) not be used in advertising or publicity
+pertaining to distribution of the software without specific, written
+prior permission.
+
+M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+*/
+
+#include <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;
+}
diff --git a/src/WINNT/install/loopback/wmi.cpp b/src/WINNT/install/loopback/wmi.cpp
new file mode 100644 (file)
index 0000000..80cfaa6
--- /dev/null
@@ -0,0 +1,809 @@
+/*
+
+Copyright 2004 by the Massachusetts Institute of Technology
+
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of the Massachusetts
+Institute of Technology (M.I.T.) not be used in advertising or publicity
+pertaining to distribution of the software without specific, written
+prior permission.
+
+M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+*/
+
+//**************************************************************************
+//
+// Description:
+//
+//      Call EnableStatic method of Win32_NetworkAdapterConfiguration
+//      for some network adapter GUID.
+//
+// Note:
+//
+//     The EnableStatic method is notsupported on Win9x platforms.
+//
+//**************************************************************************
+
+#define _WIN32_DCOM
+#include <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
+
diff --git a/src/WINNT/install/wix/Binary/New.ico b/src/WINNT/install/wix/Binary/New.ico
new file mode 100644 (file)
index 0000000..27881df
Binary files /dev/null and b/src/WINNT/install/wix/Binary/New.ico differ
diff --git a/src/WINNT/install/wix/Binary/Up.ico b/src/WINNT/install/wix/Binary/Up.ico
new file mode 100644 (file)
index 0000000..86f6b5a
Binary files /dev/null and b/src/WINNT/install/wix/Binary/Up.ico differ
diff --git a/src/WINNT/install/wix/Binary/bannrbmp.bmp b/src/WINNT/install/wix/Binary/bannrbmp.bmp
new file mode 100644 (file)
index 0000000..423c631
Binary files /dev/null and b/src/WINNT/install/wix/Binary/bannrbmp.bmp differ
diff --git a/src/WINNT/install/wix/Binary/completi.ico b/src/WINNT/install/wix/Binary/completi.ico
new file mode 100644 (file)
index 0000000..93a95a1
Binary files /dev/null and b/src/WINNT/install/wix/Binary/completi.ico differ
diff --git a/src/WINNT/install/wix/Binary/custicon.ico b/src/WINNT/install/wix/Binary/custicon.ico
new file mode 100644 (file)
index 0000000..878d3ba
Binary files /dev/null and b/src/WINNT/install/wix/Binary/custicon.ico differ
diff --git a/src/WINNT/install/wix/Binary/dlgbmp.bmp b/src/WINNT/install/wix/Binary/dlgbmp.bmp
new file mode 100644 (file)
index 0000000..18bcf3c
Binary files /dev/null and b/src/WINNT/install/wix/Binary/dlgbmp.bmp differ
diff --git a/src/WINNT/install/wix/Binary/exclamic.ico b/src/WINNT/install/wix/Binary/exclamic.ico
new file mode 100644 (file)
index 0000000..906ce32
Binary files /dev/null and b/src/WINNT/install/wix/Binary/exclamic.ico differ
diff --git a/src/WINNT/install/wix/Binary/info.ico b/src/WINNT/install/wix/Binary/info.ico
new file mode 100644 (file)
index 0000000..7e0ff7f
Binary files /dev/null and b/src/WINNT/install/wix/Binary/info.ico differ
diff --git a/src/WINNT/install/wix/Binary/insticon.ico b/src/WINNT/install/wix/Binary/insticon.ico
new file mode 100644 (file)
index 0000000..94753ac
Binary files /dev/null and b/src/WINNT/install/wix/Binary/insticon.ico differ
diff --git a/src/WINNT/install/wix/Binary/removico.ico b/src/WINNT/install/wix/Binary/removico.ico
new file mode 100644 (file)
index 0000000..097cafe
Binary files /dev/null and b/src/WINNT/install/wix/Binary/removico.ico differ
diff --git a/src/WINNT/install/wix/Binary/repairic.ico b/src/WINNT/install/wix/Binary/repairic.ico
new file mode 100644 (file)
index 0000000..6fb6861
Binary files /dev/null and b/src/WINNT/install/wix/Binary/repairic.ico differ
diff --git a/src/WINNT/install/wix/CellServDB b/src/WINNT/install/wix/CellServDB
new file mode 100644 (file)
index 0000000..6d43dc8
--- /dev/null
@@ -0,0 +1,483 @@
+>grand.central.org      #GCO Public CellServDB 11 May 2004
+18.7.14.88                      #grand-opening.mit.edu
+128.2.191.224                   #penn.central.org
+>wu-wien.ac.at          #University of Economics, Vienna, Austria
+137.208.3.33                    #afsdb1.wu-wien.ac.at
+137.208.7.4                     #afsdb2.wu-wien.ac.at
+137.208.7.7                     #afsdb3.wu-wien.ac.at
+>hephy.at               #hephy-vienna
+193.170.243.10                  #mowgli.oeaw.ac.at
+193.170.243.12                  #baloo.oeaw.ac.at
+193.170.243.14                  #akela.oeaw.ac.at
+>itp.tugraz.at          #Institute for Theoretical Physics, TU Graz, Austria
+129.27.157.6                    #fubphsv2.tu-graz.ac.at
+129.27.161.7                    #faepsv01.tu-graz.ac.at
+129.27.161.15                   #faepsv02.tu-graz.ac.at
+>cern.ch                #European Laboratory for Particle Physics, Geneva
+137.138.128.148                 #afsdb1.cern.ch
+137.138.246.50                  #afsdb3.cern.ch
+137.138.246.51                  #afsdb2.cern.ch
+>ams.cern.ch            #AMS Experiment
+137.138.206.77                  #pcamsf2.cern.ch
+137.138.206.123                 #pcamsf4.cern.ch
+>ethz.ch                #Swiss Federal Inst. of Tech. - Zurich, Switzerland
+129.132.97.19                   #amalthea.ethz.ch
+129.132.97.27                   #nethzafs-001.ethz.ch
+129.132.115.3                   #himalia.ethz.ch
+129.132.115.37                  #nethzafs-005.ethz.ch
+129.132.115.38                  #nethzafs-006.ethz.ch
+>psi.ch                 #Paul Scherrer Institut - Villigen, Switzerland
+129.129.16.10                   #afs1.psi.ch
+129.129.16.11                   #afs2.psi.ch
+>extundo.com            #Simon Josefsson's cell
+195.42.214.241                  #slipsten.extundo.com
+>mekinok.com            #Mekinok, Inc.
+4.36.43.98                      #loggerhead.mekinok.com
+>membrain.com           #membrain.com
+66.93.118.125                   #stormy
+130.85.24.11                    #weasel
+130.85.24.13                    #straykitten
+>midnightlinux.com      #Midnight Linux, Pittsburgh PA
+66.93.62.18                     #romulus.midnihtlinux.com
+66.93.62.20                     #yar.midnightlinux.com
+>setfilepointer.com     #SetFilePointer.com
+63.224.10.2                     #hamlet.SetFilePointer.com
+63.224.10.4                     #troilus.SetFilePointer.com
+>sodre.cx               #Sodre.cx
+128.8.140.165                   #greed.sodre.cx
+>desy.de                #Deutsches Elektronen-Synchrotron
+131.169.40.62                   #vayu.desy.de
+131.169.244.60                  #solar00.desy.de
+>gppc.de                #GPP Chemnitz mbH
+213.187.92.33                   #gpp1.gppc.de
+213.187.92.34                   #paulchen.gppc.de
+213.187.92.35                   #lotus.gppc.de
+>ifh.de                 #DESY Zeuthen
+141.34.22.10                    #romulus.ifh.de
+141.34.22.11                    #remus.ifh.de
+141.34.22.29                    #hekate.ifh.de
+>lrz-muenchen.de        #Leibniz Computing Centre, Germany
+129.187.10.36                   #afs1.lrz-muenchen.de
+129.187.10.56                   #afs3.lrz-muenchen.de
+129.187.10.57                   #afs2.lrz-muenchen.de
+>ipp-garching.mpg.de    #Institut fuer Plasmaphysik
+130.183.9.5                     #afs-db1.rzg.mpg.de
+130.183.100.10                  #afs-db2.aug.ipp-garching.mpg.de
+130.183.100.23                  #afs-db3.aug.ipp-garching.mpg.de
+>mpe.mpg.de             #MPE cell
+130.183.130.7                   #irafs1.mpe-garching.mpg.de
+130.183.134.20                  #irafs2.mpe-garching.mpg.de
+>i1.informatik.rwth-aachen.de #Informatik I, RWTH Aachen
+137.226.244.79                  #remus.informatik.rwth-aachen.de
+>tu-chemnitz.de         #Technische Universitaet Chemnitz, Germany
+134.109.2.1                     #zuse.hrz.tu-chemnitz.de
+134.109.2.15                    #phoenix.hrz.tu-chemnitz.de
+134.109.200.7                   #aetius.hrz.tu-chemnitz.de
+>e18.ph.tum.de          #Experimental Physics, TU Munich, Germany
+129.187.154.223                 #hamlet.e18.physik.tu-muenchen.de
+>uni-bonn.de            #Cell name
+131.220.14.198                  #work15-eth.rhrz.uni-bonn.de
+131.220.14.203                  #node03-en2.rhrz.uni-bonn.de
+131.220.14.205                  #node05.rhrz.uni-bonn.de
+>uni-freiburg.de        #Albert-Ludwigs-Universitat Freiburg
+132.230.6.235                   #sv6.ruf.uni-freiburg.de
+132.230.6.236                   #sv7.ruf.uni-freiburg.de
+132.230.6.237                   #sv8.ruf.uni-freiburg.de
+>physik.uni-freiburg.de #institute of physics, university Freiburg, Germany
+132.230.77.16                   #hepafs.physik.uni-freiburg.de
+>urz.uni-heidelberg.de  #Uni Heidelberg (Rechenzentrum)
+129.206.119.10                  #afsdb.urz.uni-heidelberg.de
+129.206.119.16                  #afsdb1.urz.uni-heidelberg.de
+129.206.119.17                  #afsdb2.urz.uni-heidelberg.de
+>uni-hohenheim.de       #University of Hohenheim
+144.41.2.2                      #rs13.serv.uni-hohenheim.de
+144.41.2.3                      #rs14.serv.uni-hohenheim.de
+144.41.2.4                      #rs15.serv.uni-hohenheim.de
+>rz.uni-jena.de         #Rechenzentrum University of Jena, Germany
+141.35.2.160                    #lc00.rz.uni-jena.de
+141.35.7.9                      #fsuj01.rz.uni-jena.de
+141.35.7.10                     #zaphod.rz.uni-jena
+>meteo.uni-koeln.de     #Univ. of Cologne - Inst. for Geophysics & Meteorology
+134.95.144.22                   #afs1.meteo.uni-koeln.de
+134.95.144.24                   #afs2.meteo.uni-koeln.de
+>rrz.uni-koeln.de       #University of Cologne - Reg Comp Center
+134.95.19.3                     #afsdb1.rrz.uni-koeln.de
+134.95.19.30                    #fileserv3.rrz.uni-koeln.de
+134.95.67.97                    #afs.thp.uni-koeln.de
+134.95.140.190                  #rzkbserv.rrz.uni-koeln.de
+>physik.uni-mainz.de    #institute of physics, university Mainz, Germany
+134.93.130.93                   #hardy.physik.uni-mainz.de
+>uni-mannheim.de        #Uni Mannheim (Rechenzentrum)
+134.155.50.165                  #afsdbx.uni-mannheim.de
+134.155.50.166                  #afsdby.uni-mannheim.de
+134.155.50.167                  #afsdbz.uni-mannheim.de
+>physik.uni-wuppertal.de #Physics department of Bergische Universität Wuppertal
+132.195.104.3                   #afs1.physik.uni-wuppertal.de
+132.195.104.230                 #afs2.physik.uni-wuppertal.de
+>ies.auc.dk             #Aalborg Univ., Inst. of Electronic Systems, Denmark
+130.225.51.73                   #afsdb1.kom.auc.dk
+130.225.51.74                   #afsdb2.kom.auc.dk
+130.225.51.85                   #afsdb3.kom.auc.dk
+>hep.caltech.edu        #CalTech High Energy Physics
+131.215.126.150                 #afs.hep.caltech.edu
+>andrew.cmu.edu         #Carnegie Mellon University - Computing Services Cell
+128.2.10.2                      #vice2.fs.andrew.cmu.edu
+128.2.10.7                      #vice7.fs.andrew.cmu.edu
+128.2.10.11                     #vice11.fs.andrew.cmu.edu
+128.2.10.28                     #vice28.fs.andrew.cmu.edu
+128.2.32.44                     #new-vice12.fs.andrew.cmu.edu
+>club.cc.cmu.edu        #Carnegie Mellon University Computer Club
+128.2.4.131                     #yttrium.club.cc.cmu.edu
+128.2.4.132                     #zirconium.club.cc.cmu.edu
+>chem.cmu.edu           #Carnegie Mellon University - Chemistry Dept.
+128.2.40.134                    #afs.chem.cmu.edu
+128.2.40.140                    #afs2.chem.cmu.edu
+>cs.cmu.edu             #Carnegie Mellon University - School of Comp. Sci.
+128.2.194.178                   #cherry.srv.cs.cmu.edu
+128.2.194.179                   #pumpkin.srv.cs.cmu.edu
+128.2.194.180                   #strawberry.srv.cs.cmu.edu
+>ece.cmu.edu            #Carnegie Mellon University - Elec. Comp. Eng. Dept.
+128.2.129.7                     #porok.ece.cmu.edu
+128.2.129.8                     #vicio.ece.cmu.edu
+128.2.129.9                     #e-xing.ece.cmu.edu
+>scotch.ece.cmu.edu     #CMU ECE CALCM research group
+128.2.134.82                    #lagavulin.ece.cmu.edu
+>msc.cornell.edu        #Cornell University Materials Science Center
+128.84.231.242                  #miranda.ccmr.cornell.edu
+128.84.241.35                   #co.ccmr.cornell.edu
+128.84.249.78                   #dax.ccmr.cornell.edu
+>dbic.dartmouth.edu     #Dartmouth Brain Imaging Center
+129.170.30.143                  #dbicafs1.dartmouth.edu
+129.170.30.144                  #dbicafs2.dartmouth.edu
+129.170.30.145                  #dbicafs3.dartmouth.edu
+>northstar.dartmouth.edu #Dartmouth College Research Computing
+129.170.16.22                   #halley.dartmouth.edu
+129.170.16.42                   #oort.dartmouth.edu
+129.170.16.43                   #cygnusx1.dartmouth.edu
+>iastate.edu            #Iowa State University
+129.186.1.243                   #afsdb-1.iastate.edu
+129.186.6.243                   #afsdb-2.iastate.edu
+129.186.142.243                 #afsdb-3.iastate.edu
+>athena.mit.edu         #MIT/Athena cell
+18.7.1.66                       #paris.mit.edu.
+18.7.1.74                       #chimera.mit.edu.
+18.158.0.37                     #prill.mit.edu.
+>dev.mit.edu            #MIT/IS Development cell
+18.7.1.70                       #wham.mit.edu.
+18.7.15.89                      #rattle.mit.edu.
+18.7.15.93                      #hum.mit.edu.
+>net.mit.edu            #MIT/Network Group cell
+18.7.7.73                       #gracie.mit.edu
+18.7.21.95                      #george.mit.edu
+>sipb.mit.edu           #MIT/SIPB cell
+18.181.0.19                     #reynelda.mit.edu.
+18.181.0.22                     #rosebud.mit.edu.
+18.181.0.23                     #ronald-ann.mit.edu.
+>msu.edu                #Michigan State University Main Cell
+35.9.7.10                       #afsdb0.cl.msu.edu
+>nd.edu                 #University of Notre Dame
+129.74.223.17                   #john.helios.nd.edu
+129.74.223.33                   #lizardo.helios.nd.edu
+129.74.223.65                   #buckaroo.helios.nd.edu
+>pitt.edu               #University of Pittsburgh
+136.142.8.15                    #afs09.srv.cis.pitt.edu
+136.142.8.20                    #afs10.srv.cis.pitt.edu
+136.142.8.21                    #afs11.srv.cis.pitt.edu
+>cs.pitt.edu            #University of Pittsburgh - Computer Science
+130.49.220.11                   #afs01.cs.pitt.edu
+130.49.220.12                   #afs02.cs.pitt.edu
+130.49.220.13                   #afs03.cs.pitt.edu
+>psc.edu                #PSC (Pittsburgh Supercomputing Center)
+128.182.59.182                  #shaggy.psc.edu
+128.182.66.184                  #velma.psc.edu
+128.182.66.185                  #daphne.psc.edu
+>scoobydoo.psc.edu      #PSC Test Cell
+128.182.59.181                  #scooby.psc.edu
+>cede.psu.edu           #Penn State - Center for Engr. Design & Entrepeneurship
+146.186.218.10                  #greenly.cede.psu.edu
+146.186.218.60                  #b50.cede.psu.edu
+146.186.218.246                 #stalin.cede.psu.edu
+>rose-hulman.edu        #Rose-Hulman Institute of Technology
+137.112.7.11                    #afs1.rose-hulman.edu
+137.112.7.12                    #afs2.rose-hulman.edu
+137.112.7.13                    #afs3.rose-hulman.edu
+>cs.rose-hulman.edu     #Rose-Hulman CS Department
+137.112.40.10                   #galaxy.cs.rose-hulman.edu
+>rpi.edu                #Rensselaer Polytechnic Institute
+128.113.22.11                   #saul.server.rpi.edu
+128.113.22.12                   #joab.server.rpi.edu
+128.113.22.13                   #korah.server.rpi.edu
+128.113.22.14                   #achan.server.rpi.edu
+>hep.sc.edu             #University of South Carolina, Dept. of Physics
+129.252.78.77                   #cpeven.physics.sc.edu
+>cs.stanford.edu        #Stanford University Computer Science Department
+171.64.64.10                    #cs-afs-1.Stanford.EDU
+171.64.64.66                    #cs-afs-2.stanford.edu
+171.64.64.69                    #cs-afs-3.stanford.edu
+>ir.stanford.edu        #Stanford University
+171.64.7.222                    #afsdb1.stanford.edu
+171.64.7.234                    #afsdb2.stanford.edu
+171.64.7.246                    #afsdb3.stanford.edu
+>slac.stanford.edu      #Stanford Linear Accelerator Center
+134.79.18.25                    #afsdb1.slac.stanford.edu
+134.79.18.26                    #afsdb2.slac.stanford.edu
+134.79.18.27                    #afsdb3.slac.stanford.edu
+>cats.ucsc.edu          #UC Santa Cruz, Comm. and Tech. Services, California U.S.A
+128.114.129.14                  #elan.ucsc.edu
+128.114.129.15                  #ichabod.ucsc.edu
+128.114.129.18                  #maneki.ucsc.edu
+>acm.uiuc.edu           #ACM at the University of Illinois
+128.174.251.8                   #alnitak.acm.uiuc.edu
+128.174.251.9                   #alnilam.acm.uiuc.edu
+128.174.251.10                  #mintaka.acm.uiuc.edu
+>ncsa.uiuc.edu          #University of Illinois
+141.142.3.5                     #congo.ncsa.uiuc.edu
+141.142.3.8                     #nile.ncsa.uiuc.edu
+141.142.230.19                  #jinx.ncsa.uiuc.edu
+>umbc.edu               #University of Maryland, Baltimore County
+130.85.24.23                    #db2.afs.umbc.edu
+130.85.24.87                    #db3.afs.umbc.edu
+130.85.24.101                   #db1.afs.umbc.edu
+>glue.umd.edu           #University of Maryland - Project Glue
+128.8.70.11                     #olmec.umd.edu
+128.8.73.3                      #babylon.umd.edu
+129.2.128.53                    #egypt.umd.edu
+>wam.umd.edu            #University of Maryland Network WAM Project
+128.8.70.9                      #csc-srv.wam.umd.edu
+128.8.73.9                      #pg2-srv.wam.umd.edu
+129.2.128.54                    #avw-srv.wam.umd.edu
+>umich.edu              #University of Michigan - Campus
+141.211.1.32                    #fear.ifs.umich.edu
+141.211.1.33                    #surprise.ifs.umich.edu
+141.211.1.34                    #ruthless.ifs.umich.edu
+>atlas.umich.edu        #ATLAS group cell in physics at University of Michigan
+141.211.43.102                  #linat02.grid.umich.edu
+141.211.43.106                  #linat06.grid.umich.edu
+141.211.43.109                  #atgrid.grid.umich.edu
+>citi.umich.edu         #Center for Information Technology Integration
+141.211.133.5                   #babylon.citi.umich.edu
+>lsa.umich.edu          #University of Michigan - College of LS&A
+141.211.54.132                  #curtis.admin.lsa.umich.edu
+141.211.61.23                   #zee.admin.lsa.umich.edu
+141.211.68.15                   #marshall.lsa.umich.edu
+>math.lsa.umich.edu     #University of Michigan - Math Department
+141.211.61.40                   #ike.math.lsa.umich.edu
+141.211.61.41                   #clark.math.lsa.umich.edu
+141.211.61.42                   #nimitz.math.lsa.umich.edu
+>umr.edu                #University of Missouri - Rolla
+131.151.1.59                    #afsdb1.umr.edu
+131.151.1.70                    #afsdb3.umr.edu
+131.151.1.146                   #afsdb2.umr.edu
+>physics.unc.edu        #Univ. of NC at Chapel Hill, Dept. of Physics
+152.2.5.2                       #valerian.physics.unc.edu
+152.2.5.3                       #augustus.physics.unc.edu
+152.2.7.67                      #nerva.astro.unc.edu
+>uncc.edu               #University of NC at Charlotte Mosaic AFS Cell
+152.15.10.70                    #as-sm1.uncc.edu
+152.15.13.7                     #as-sm2.uncc.edu
+152.15.30.27                    #fs-kenn3.uncc.edu
+>eng.utah.edu           #University of Utah - Engineering
+155.99.222.9                    #lenny.eng.utah.edu
+155.99.222.10                   #carl.eng.utah.edu
+>cs.uwm.edu             #University of Wisconsin--Milwaukee
+129.89.38.124                   #solomons.cs.uwm.edu
+>cs.wisc.edu            #Univ. of Wisconsin-Madison, Computer Sciences Dept.
+128.105.132.14                  #timon.cs.wisc.edu
+128.105.132.15                  #pumbaa.cs.wisc.edu
+128.105.132.16                  #zazu.cs.wisc.edu
+>engr.wisc.edu          #University of Wisconsin-Madison, College of Engineering
+144.92.13.14                    #larry.cae.wisc.edu
+144.92.13.15                    #curly.cae.wisc.edu
+144.92.13.16                    #moe.cae.wisc.edu
+>hep.wisc.edu           #University of Wisconsin -- High Energy Physics
+128.104.28.219                  #anise.physics.wisc.edu
+>physics.wisc.edu       #Univ. of Wisconsin-Madison, Physics Department
+128.104.220.51                  #bubbles.physics.wisc.edu
+128.104.220.52                  #buttercup.physics.wisc.edu
+128.104.220.53                  #blossom.physics.wisc.edu
+>ifca.unican.es         #Instituto de Fisica de Cantabria (IFCA), Santander, Spain
+193.144.209.20                  #gridwall.ifca.unican.es
+>ific.uv.es             #Instituto de Fisica Corpuscular, Valencia, Spain
+147.156.163.11                  #alpha.ific.uv.es
+>biocenter.helsinki.fi  #University of Helsinki, Institute of Biotechnology
+128.214.58.174                  #afsdb1.biocenter.helsinki.fi
+128.214.88.114                  #afsdb2.biocenter.helsinki.fi
+>dapnia.saclay.cea.fr   #CEA DAPNIA
+132.166.32.7                    #dphrsg.saclay.cea.fr
+132.166.32.12                   #dphrsl.saclay.cea.fr
+>in2p3.fr               #IN2P3 production cell
+134.158.232.11                  #ccafsdb1.in2p3.fr
+134.158.232.12                  #ccafsdb2.in2p3.fr
+134.158.232.13                  #ccafsdb3.in2p3.fr
+>anl.gov                #Argonne National Laboratory
+146.137.96.33                   #arteus.ctd.anl.gov
+146.137.162.88                  #agamemnon.ctd.anl.gov
+146.137.194.80                  #antenor.ctd.anl.gov
+>rhic.bnl.gov           #Relativistic Heavy Ion Collider
+130.199.6.51                    #rafs03.rcf.bnl.gov
+130.199.6.52                    #rafs02.rcf.bnl.gov
+130.199.6.69                    #rafs01.rcf.bnl.gov
+>usatlas.bnl.gov        #US Atlas Tier 1 Facility at BNL
+130.199.48.32                   #aafs01.usatlas.bnl.gov
+130.199.48.33                   #aafs02.usatlas.bnl.gov
+130.199.48.34                   #aafs03.usatlas.bnl.gov
+>fnal.gov               #Fermi National Acclerator Laboratory
+131.225.68.1                    #fsus01.fnal.gov
+131.225.68.4                    #fsus03.fnal.gov
+131.225.68.14                   #fsus04.fnal.gov
+>ic-afs.arc.nasa.gov    #Code IC, Ames Research Center
+128.102.105.62                  #udanax.arc.nasa.gov
+>nersc.gov              #National Energy Research Supercomputer Center
+128.55.128.250                  #mars.nersc.gov
+128.55.128.252                  #alfred.nersc.gov
+128.55.128.254                  #lurch.nersc.gov
+>caspur.it              #CASPUR Inter-University Computing Consortium, Rome
+193.204.5.45                    #pomodoro.caspur.it
+193.204.5.46                    #banana.caspur.it
+193.204.5.50                    #maslo.caspur.it
+>fusione.it             #Assoz. FUSIONE/Euratom, ENEA, Frascati-Italy
+192.107.90.2                    #fusafs1.frascati.enea.it
+192.107.90.3                    #fusafs2.frascati.enea.it
+192.107.90.4                    #fusafs3.frascati.enea.it
+>icemb.it               #ICEMB, Universita' La Sapienza - Rome - Italy
+193.204.6.130                   #icembfs.caspur.it
+>infn.it                #Istituto Nazionale di Fisica Nucleare (INFN), Italia
+131.154.1.7                     #afs3.infn.it
+141.108.3.252                   #afs1.infn.it
+192.84.134.75                   #afs2.infn.it
+>kloe.infn.it           #INFN, KLOE experiment at Laboratori di Frascati
+192.135.25.111                  #kloeafs1.lnf.infn.it
+192.135.25.112                  #kloeafs2.lnf.infn.it
+>le.infn.it             #INFN, Sezione di Lecce
+192.84.152.40                   #afs01.le.infn.it
+192.84.152.148                  #afs02.le.infn.it
+>lnf.infn.it            #INFN, Laboratori Nazionali di Frascati
+193.206.84.121                  #afs1.lnf.infn.it
+193.206.84.122                  #afs2.lnf.infn.it
+193.206.84.123                  #afs3.lnf.infn.it
+>lngs.infn.it           #INFN, Laboratori Nazionali di Gran Sasso
+192.84.135.21                   #rsgs05.lngs.infn.it
+>pi.infn.it             #INFN, Sezione di Pisa
+131.114.134.26                  #unknownhost.pi.infn.it
+192.84.133.50                   #aix1.pi.infn.it
+>psm.it                 #Progetto San Marco, Universita' di Roma-1
+151.100.1.65                    #atlante.psm.uniroma1.it
+>tgrid.it               #CASPUR-CILEA-CINECA Grid Cell
+193.204.5.33                    #cccgrid.caspur.it
+>ictp.trieste.it        #The Abdus Salam International Centre for Theoretical Physics (IC
+140.105.16.8                    #fs1.ictp.trieste.it
+140.105.16.9                    #fs2.ictp.trieste.it
+>ing.uniroma1.it        #Universita' La Sapienza, Fac. Ingeneria
+151.100.85.253                  #alfa.ing.uniroma1.it
+>vn.uniroma3.it         #University of Rome 3, Area Vasca Navale
+193.204.161.136                 #alfa.dia.uniroma3.it
+193.204.161.137                 #beta.dia.uniroma3.it
+193.204.161.138                 #gamma.dia.uniroma3.it
+>italia                 #Italian public AFS cell
+193.204.5.9                     #afs.caspur.it
+>cmf.nrl.navy.mil       #Naval Research Lab - CCS
+134.207.10.68                   #picard.cmf.nrl.navy.mil
+134.207.10.69                   #riker.cmf.nrl.navy.mil
+134.207.10.70                   #kirk.cmf.nrl.navy.mil
+>lcp.nrl.navy.mil       #Naval Research Lab - Lab for Computational Physics
+132.250.114.2                   #afs1.lcp.nrl.navy.mil
+132.250.114.4                   #afs2.lcp.nrl.navy.mil
+132.250.114.6                   #afs3.lcp.nrl.navy.mil
+>es.net                 #Energy Sciences Net
+198.128.3.21                    #fs1.es.net
+198.128.3.22                    #fs2.es.net
+198.128.3.23                    #fs3.es.net
+>laroia.net             #Laroia Networks
+66.66.102.254                   #supercore.laroia.net
+>sinenomine.net         #Sine Nomine Associates
+66.92.236.139                   #afs.sinenomine.net
+>slackers.net           #The Slackers' Network
+63.201.48.27                    #alexandria.slackers.net
+>nikhef.nl              #The Dutch National Institute for High Energy Physics
+192.16.185.26                   #afs1.nikhef.nl
+192.16.185.27                   #afs2.nikhef.nl
+>1ts.org                #KCR/private Karl Ramm, Cambridge, MA
+4.36.43.102                     #dol-guldur.1ts.org
+>bazquux.org            #Baz Quux Organization
+66.207.142.196                  #baxquux.org
+>coed.org               #Adam Pennington's Cell
+66.93.61.184                    #vice1.coed.org
+128.2.4.163                     #vice3.coed.org
+>dementia.org           #Dementia Unlimited
+128.2.12.45                     #alycia.dementia.org
+128.2.120.216                   #meredith.dementia.org
+>idahofuturetruck.org   #University of Idaho hybrid vehicle development
+12.18.238.210                   #dsle210.fsr.net
+>nimlabs.org            #Nimlabs, Ink. Cell.
+18.238.1.103                    #olfin.nimlabs.org
+18.238.1.105                    #caerbanog.nimlabs.org
+>nomh.org               #nomh.org
+204.29.154.12                   #iota.nomh.org
+>oc7.org                #The OC7 Project
+128.2.6.107                     #vice3.oc7.org
+128.2.122.140                   #vice2.oc7.org
+>openafs.org            #OpenAFS Project
+128.2.13.199                    #new-virtue.openafs.org
+128.2.121.218                   #virtue.openafs.org
+130.237.48.87                   #andrew.e.kth.se
+130.237.48.107                  #onyx.e.kth.se
+>e.kth.se               #Royal Institute of Technology, Elektro
+130.237.32.145                  #sonen.e.kth.se
+130.237.48.7                    #anden.e.kth.se
+130.237.48.244                  #fadern.e.kth.se
+>hallf.kth.se           #Royal Institute of Technology, HALLF
+130.237.24.141                  #rasmus13.hallf.kth.se
+130.237.24.152                  #rasmus3.hallf.kth.se
+130.237.24.177                  #rasmus29.hallf.kth.se
+>isk.kth.se             #Royal Institute of Technology, ISK
+130.237.202.12                  #afsdb2.isk.kth.se
+130.237.206.13                  #afsdb1.isk.kth.se
+130.237.209.141                 #afsdb3.isk.kth.se
+>it.kth.se              #Royal Institute of Technology, IT
+130.237.212.15                  #ptah.it.kth.se
+130.237.212.16                  #toth.it.kth.se
+130.237.215.7                   #isis.it.kth.se
+>md.kth.se              #Royal Institute of Technology, MMK
+130.237.57.68                   #trinity.md.kth.se
+130.237.57.72                   #morpheus.md.kth.se
+130.237.67.230                  #neo.speech.kth.se
+>mech.kth.se            #Royal Institute of Technology, MECH
+130.237.233.142                 #matterhorn.mech.kth.se
+130.237.233.143                 #castor.mech.kth.se
+130.237.233.144                 #pollux.mech.kth.se
+>nada.kth.se            #Royal Institute of Technology, NADA
+130.237.222.20                  #kosmos.nada.kth.se
+130.237.223.12                  #sputnik.nada.kth.se
+130.237.224.78                  #mir.nada.kth.se
+130.237.227.23                  #gagarin.nada.kth.se
+130.237.228.28                  #laika.nada.kth.se
+>pdc.kth.se             #Royal Institute of Technology, PDC
+130.237.232.29                  #crab.pdc.kth.se
+130.237.232.112                 #anna.pdc.kth.se
+130.237.232.114                 #hokkigai.pdc.kth.se
+>stacken.kth.se         #Stacken Computer Club
+130.237.234.3                   #milko.stacken.kth.se
+130.237.234.43                  #hot.stacken.kth.se
+130.237.237.230                 #fishburger.stacken.kth.se
+>syd.kth.se             #Royal Institute of Technology, KTH-Syd
+130.237.83.23                   #afs.haninge.kth.se
+>physto.se              #Physics department Stockholm University
+130.237.205.36                  #sysafs1.physto.se
+130.237.205.72                  #sysafs2.physto.se
+>sanchin.se             #Sanchin Consulting AB, Sweden
+192.195.148.10                  #sesan.sanchin.se
+>su.se                  #Stockholm University
+130.237.162.81                  #afsdb1.su.se
+130.237.162.82                  #afsdb2.su.se
+>f9.ijs.si              #F9, Jozef Stefan Institue
+194.249.156.1                   #brenta.ijs.si
+>p-ng.si                #Nova Gorica Polytechnic
+193.2.120.2                     #solkan.p-ng.si
+>phy.bris.ac.uk         #Bristol University - phyics
+137.222.58.9                    #afs1.phy.bris.ac.uk
+>hep.man.ac.uk          #Manchester HEP
+194.36.2.3                      #afs1.hep.man.ac.uk
+194.36.2.4                      #afs2.hep.man.ac.uk
+194.36.2.5                      #afs3.hep.man.ac.uk
+>rl.ac.uk               #Rutherford Appleton Lab, England
+130.246.183.164                 #wallace.cc.rl.ac.uk
diff --git a/src/WINNT/install/wix/Icon/ico_AcctManager.ico b/src/WINNT/install/wix/Icon/ico_AcctManager.ico
new file mode 100644 (file)
index 0000000..321a135
Binary files /dev/null and b/src/WINNT/install/wix/Icon/ico_AcctManager.ico differ
diff --git a/src/WINNT/install/wix/Icon/ico_Help.ico b/src/WINNT/install/wix/Icon/ico_Help.ico
new file mode 100644 (file)
index 0000000..2ed9e7a
Binary files /dev/null and b/src/WINNT/install/wix/Icon/ico_Help.ico differ
diff --git a/src/WINNT/install/wix/Icon/ico_ServerManager.ico b/src/WINNT/install/wix/Icon/ico_ServerManager.ico
new file mode 100644 (file)
index 0000000..1827121
Binary files /dev/null and b/src/WINNT/install/wix/Icon/ico_ServerManager.ico differ
diff --git a/src/WINNT/install/wix/Icon/ico_afscreds.ico b/src/WINNT/install/wix/Icon/ico_afscreds.ico
new file mode 100644 (file)
index 0000000..1abfe16
Binary files /dev/null and b/src/WINNT/install/wix/Icon/ico_afscreds.ico differ
diff --git a/src/WINNT/install/wix/Icon/ico_afssvrcfg.ico b/src/WINNT/install/wix/Icon/ico_afssvrcfg.ico
new file mode 100644 (file)
index 0000000..f06b8ac
Binary files /dev/null and b/src/WINNT/install/wix/Icon/ico_afssvrcfg.ico differ
diff --git a/src/WINNT/install/wix/NTMakefile b/src/WINNT/install/wix/NTMakefile
new file mode 100644 (file)
index 0000000..ce69def
--- /dev/null
@@ -0,0 +1,73 @@
+RELDIR=WINNT\install\wix
+!INCLUDE ..\..\..\config\NTMakefile.$(SYS_NAME)
+!INCLUDE ..\..\..\config\NTMakefile.version
+
+MEDIADIR = $(DESTDIR)\WinInstall
+MEDIABINDIR = $(MEDIADIR)\Dll
+
+MSIFILE = $(MEDIADIR)\openafs-$(LANG).msi
+
+WIXINCLUDES = \
+       config.wxi \
+       feature.wxi \
+       files.wxi \
+       language_config.wxi \
+       property.wxi \
+       registry.wxi \
+       lang\$(LANG)\ui.wxi
+
+WIXOBJ = $(OJT)\openafs-$(LANG).wixobj
+
+LANGUAGES=en_US de_DE es_ES ja_JP ko_KR pt_BR zh_CN zh_TW
+
+languages:
+# Don't bother with non en_US for now.  The other builds comprise of either
+# verbatim copies of en_US files, partial translations or doesn't build 
+# (no languages resources). Someday when OpenAFS 8.1029828419 comes out we'll 
+# get someone to translate.
+#      for %l in ( $(LANGUAGES ) do (
+#      $(MAKE) /f NTMakefile /nologo LANG=%l lang
+#      )
+       $(MAKE) /f NTMakefile /nologo LANG=en_US lang
+
+lang:: $(MSIFILE)
+
+customactions:
+       $(CD) custom
+       $(MAKE) /f NTMakefile /nologo install
+       $(CD) ..
+
+install: customactions languages
+
+$(MSIFILE): $(WIXOBJ)
+       light -nologo -out $(MSIFILE) \
+               -loc lang\$(LANG)\strings.wxl \
+               $(WIXOBJ)
+       dir $(MSIFILE)
+
+$(WIXOBJ): openafs.wxs $(WIXINCLUDES)
+       candle -nologo -out $@  \
+               "-dCellName=$(CELLNAME_DEFAULT)" \
+               -dLanguage=$(LANG) \
+               -dNumericVersion=$(AFSPRODUCT_VERSION)  \
+               -dVersionMajor=$(AFSPRODUCT_VER_MAJOR)  \
+               -dVersionMinor=$(AFSPRODUCT_VER_MINOR)  \
+               -dVersionPatch=$(AFSPRODUCT_VER_PATCH)  \
+               "-dDestDir=$(DESTDIR)\\" \
+               -dCellDbFile=CellServDB \
+               -v0 \
+               -w0 \
+               openafs.wxs
+
+# Cleanup
+clean::
+       for %l in ( $(LANGUAGES) ) do (
+               $(MAKE) /f NTMakefile /nologo LANG=%l lang_clean
+       )
+       $(CD) custom
+       $(MAKE) /f NTMakefile /nologo clean
+       $(CD) ..
+       
+lang_clean:
+       -$(DEL) $(WIXOBJ)
+       -$(DEL) $(MSIFILE)
diff --git a/src/WINNT/install/wix/config.wxi b/src/WINNT/install/wix/config.wxi
new file mode 100644 (file)
index 0000000..e2d8b81
--- /dev/null
@@ -0,0 +1,150 @@
+<?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>
diff --git a/src/WINNT/install/wix/custom/NTMakefile b/src/WINNT/install/wix/custom/NTMakefile
new file mode 100644 (file)
index 0000000..7d03602
--- /dev/null
@@ -0,0 +1,35 @@
+# rcsid : $Id: NTMakefile,v 1.2 2004/06/23 07:48:23 jaltman Exp $
+
+RELDIR=WINNT\install\wix\custom
+!INCLUDE ..\..\..\..\config\NTMakefile.$(SYS_NAME)
+!INCLUDE ..\..\..\..\config\NTMakefile.version
+
+MEDIABINDIR = $(DESTDIR)\WinInstall\Dll
+
+DLLFILE = $(MEDIABINDIR)\afscustom.dll
+
+DLLEXPORTS=\
+       -EXPORT:InstallNetProvider \
+       -EXPORT:UninstallNetProvider \
+       -EXPORT:ConfigureClientService \
+       -EXPORT:ConfigureServerService \
+       -EXPORT:AbortMsiImmediate \
+       -EXPORT:UninstallNsisInstallation
+
+DLLLIBFILES=\
+       msi.lib advapi32.lib
+
+LINK=link
+
+# afscustom.dll
+
+$(OUT)\afscustom.obj: afscustom.cpp
+       $(CC) -ML -c /Fo$@ $**
+
+$(DLLFILE): $(OUT)\afscustom.obj
+       $(LINK) -DLL $(DLLEXPORTS) \
+         -OUT:$@ $** $(DLLLIBFILES)
+
+install: $(DLLFILE)
+
+clean  ::
diff --git a/src/WINNT/install/wix/custom/afscustom.cpp b/src/WINNT/install/wix/custom/afscustom.cpp
new file mode 100644 (file)
index 0000000..5783720
--- /dev/null
@@ -0,0 +1,378 @@
+/*
+
+Copyright 2004 by the Massachusetts Institute of Technology
+
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of the Massachusetts
+Institute of Technology (M.I.T.) not be used in advertising or publicity
+pertaining to distribution of the software without specific, written
+prior permission.
+
+M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+*/
+
+/**************************************************************
+* afscustom.cpp : Dll implementing custom action to install AFS
+*
+*         The functions in this file are for use as entry points
+*         for calls from MSI only. The specific MSI parameters
+*         are noted in the comments section of each of the
+*         functions.
+*
+* rcsid: $Id: afscustom.cpp,v 1.2 2004/06/23 03:55:13 jaltman Exp $
+**************************************************************/
+
+// Only works for Win2k and above
+
+#define _WIN32_WINNT 0x0500
+
+#include "afscustom.h"
+#include "tchar.h"
+
+void ShowMsiError( MSIHANDLE hInstall, DWORD errcode, DWORD param ){
+       MSIHANDLE hRecord;
+
+       hRecord = MsiCreateRecord(3);
+       MsiRecordClearData(hRecord);
+       MsiRecordSetInteger(hRecord, 1, errcode);
+       MsiRecordSetInteger(hRecord, 2, param);
+
+       MsiProcessMessage( hInstall, INSTALLMESSAGE_ERROR, hRecord );
+       
+       MsiCloseHandle( hRecord );
+}
+
+/* Abort the installation (called as an immediate custom action) */
+MSIDLLEXPORT AbortMsiImmediate( MSIHANDLE hInstall ) {
+    DWORD rv;
+       DWORD dwSize = 0;
+       LPTSTR sReason = NULL;
+       LPTSTR sFormatted = NULL;
+       MSIHANDLE hRecord = NULL;
+       LPTSTR cAbortReason = _T("ABORTREASON");
+
+       rv = MsiGetProperty( hInstall, cAbortReason, _T(""), &dwSize );
+       if(rv != ERROR_MORE_DATA) goto _cleanup;
+
+       sReason = new TCHAR[ ++dwSize ];
+
+       rv = MsiGetProperty( hInstall, cAbortReason, sReason, &dwSize );
+
+       if(rv != ERROR_SUCCESS) goto _cleanup;
+
+    hRecord = MsiCreateRecord(3);
+       MsiRecordClearData(hRecord);
+       MsiRecordSetString(hRecord, 0, sReason);
+
+       dwSize = 0;
+
+       rv = MsiFormatRecord(hInstall, hRecord, "", &dwSize);
+       if(rv != ERROR_MORE_DATA) goto _cleanup;
+
+       sFormatted = new TCHAR[ ++dwSize ];
+
+       rv = MsiFormatRecord(hInstall, hRecord, sFormatted, &dwSize);
+
+       if(rv != ERROR_SUCCESS) goto _cleanup;
+
+       MsiCloseHandle(hRecord);
+
+       hRecord = MsiCreateRecord(3);
+       MsiRecordClearData(hRecord);
+       MsiRecordSetInteger(hRecord, 1, ERR_ABORT);
+       MsiRecordSetString(hRecord,2, sFormatted);
+       MsiProcessMessage(hInstall, INSTALLMESSAGE_ERROR, hRecord);
+
+_cleanup:
+       if(sFormatted) delete sFormatted;
+       if(hRecord) MsiCloseHandle( hRecord );
+       if(sReason) delete sReason;
+
+       return ~ERROR_SUCCESS;
+}
+
+/* Configure the client and server services */
+MSIDLLEXPORT ConfigureClientService( MSIHANDLE hInstall ) {
+       DWORD rv = ConfigService( 1 );
+       if(rv != ERROR_SUCCESS) {
+               ShowMsiError( hInstall, ERR_SCC_FAILED, rv );
+       }
+       return rv;
+}
+
+MSIDLLEXPORT ConfigureServerService( MSIHANDLE hInstall ) {
+       DWORD rv = ConfigService( 2 );
+       if(rv != ERROR_SUCCESS) {
+               ShowMsiError( hInstall, ERR_SCS_FAILED, rv );
+       }
+       return ERROR_SUCCESS;
+}
+
+DWORD ConfigService( int svc ) {
+       SC_HANDLE scm = NULL;
+       SC_HANDLE hsvc = NULL;
+       SC_LOCK scl = NULL;
+       DWORD rv = ERROR_SUCCESS;
+
+       scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
+       if(scm == NULL) {rv = GetLastError(); goto _cleanup; }
+
+       scl = LockServiceDatabase(scm);
+       if(scl == NULL) {rv = GetLastError(); goto _cleanup; }
+
+       hsvc = OpenService( scm, ((svc==1)? _T("TransarcAFSDaemon") : _T("TransarcAFSServer")), SERVICE_ALL_ACCESS);
+       if(hsvc == NULL) {rv = GetLastError(); goto _cleanup; }
+
+       SERVICE_FAILURE_ACTIONS sfa;
+       SC_ACTION saact[3];
+
+       sfa.dwResetPeriod = 3600; // one hour
+       sfa.lpRebootMsg = NULL;
+       sfa.lpCommand = NULL;
+       sfa.cActions = 3;
+       sfa.lpsaActions = saact;
+
+       saact[0].Type = SC_ACTION_RESTART;
+       saact[0].Delay = 5000;
+       saact[1].Type = SC_ACTION_RESTART;
+       saact[1].Delay = 5000;
+       saact[2].Type = SC_ACTION_NONE;
+       saact[2].Delay = 5000;
+
+       if(!ChangeServiceConfig2(hsvc, SERVICE_CONFIG_FAILURE_ACTIONS, &sfa))
+               rv = GetLastError();
+
+_cleanup:
+       if(hsvc) CloseServiceHandle(hsvc);
+       if(scl) UnlockServiceDatabase(scl);
+       if(scm) CloseServiceHandle(scm);
+
+       return rv;
+}
+
+/* Sets the registry keys required for the functioning of the network
+provider */
+
+MSIDLLEXPORT InstallNetProvider( MSIHANDLE hInstall ) {
+    return InstNetProvider( hInstall, 1 );
+}
+
+MSIDLLEXPORT UninstallNetProvider( MSIHANDLE hInstall) {
+    return InstNetProvider( hInstall, 0 );
+}
+
+DWORD InstNetProvider(MSIHANDLE hInstall, int bInst) {
+    LPTSTR strOrder;
+    HKEY hkOrder;
+    LONG rv;
+    DWORD dwSize;
+    HANDLE hProcHeap;
+    
+    strOrder = (LPTSTR) 0;
+    
+    CHECK(rv = RegOpenKeyEx( HKEY_LOCAL_MACHINE, STR_KEY_ORDER, 0, KEY_READ | KEY_WRITE, &hkOrder ));
+    
+    dwSize = 0;
+    CHECK(rv = RegQueryValueEx( hkOrder, STR_VAL_ORDER, NULL, NULL, NULL, &dwSize ) );
+    
+    strOrder = new TCHAR[ (dwSize + STR_SERVICE_LEN) * sizeof(TCHAR) ];
+    
+    CHECK(rv = RegQueryValueEx( hkOrder, STR_VAL_ORDER, NULL, NULL, (LPBYTE) strOrder, &dwSize));
+    
+    npi_CheckAndAddRemove( strOrder, STR_SERVICE , bInst);
+    
+    dwSize = (lstrlen( strOrder ) + 1) * sizeof(TCHAR);
+    
+    CHECK(rv = RegSetValueEx( hkOrder, STR_VAL_ORDER, NULL, REG_SZ, (LPBYTE) strOrder, dwSize ));
+    
+    /* everything else should be set by the MSI tables */
+    rv = ERROR_SUCCESS;
+_cleanup:
+       
+    if( rv != ERROR_SUCCESS ) {
+        ShowMsiError( hInstall, ERR_NPI_FAILED, rv );
+    }
+    
+    if(strOrder) delete strOrder;
+    
+    return rv;
+}
+
+/* Check and add or remove networkprovider key value
+       str : target string
+       str2: string to add/remove
+       bInst: == 1 if string should be added to target if not already there, otherwise remove string from target if present.
+    */
+int npi_CheckAndAddRemove( LPTSTR str, LPTSTR str2, int bInst ) {
+
+    LPTSTR target, charset, match;
+    int ret=0;
+
+    target = new TCHAR[lstrlen(str)+3];
+    lstrcpy(target,_T(","));
+    lstrcat(target,str);
+    lstrcat(target,_T(","));
+    charset = new TCHAR[lstrlen(str2)+3];
+    lstrcpy(charset,_T(","));
+    lstrcat(charset,str2);
+    lstrcat(charset,_T(","));
+
+    match = _tcsstr(target, charset);
+    
+    if ((match) && (bInst)) {
+        ret = INP_ERR_PRESENT;
+        goto cleanup;
+    }
+    
+    if ((!match) && (!bInst)) {
+        ret = INP_ERR_ABSENT;
+        goto cleanup;
+    }
+
+    if (bInst) // && !match
+    {
+       lstrcat(str, _T(","));
+       lstrcat(str, str2);
+       ret = INP_ERR_ADDED;
+       goto cleanup;
+    }
+
+    // if (!bInst) && (match)
+    {
+       lstrcpy(str+(match-target),match+lstrlen(str2)+2);  
+       str[lstrlen(str)-1]=_T('\0');
+       ret = INP_ERR_REMOVED;
+       goto cleanup;
+    }
+
+cleanup:
+
+    delete target;
+    delete charset;
+    return ret;
+}
+
+/* Uninstall NSIS */
+MSIDLLEXPORT UninstallNsisInstallation( MSIHANDLE hInstall )
+{
+       DWORD rv = ERROR_SUCCESS;
+       // lookup the NSISUNINSTALL property value
+       LPTSTR cNsisUninstall = _T("NSISUNINSTALL");
+       HANDLE hIo = NULL;
+       DWORD dwSize = 0;
+       LPTSTR strPathUninst = NULL;
+       HANDLE hJob = NULL;
+       STARTUPINFO sInfo;
+       PROCESS_INFORMATION pInfo;
+
+       pInfo.hProcess = NULL;
+       pInfo.hThread = NULL;
+
+       rv = MsiGetProperty( hInstall, cNsisUninstall, _T(""), &dwSize );
+       if(rv != ERROR_MORE_DATA) goto _cleanup;
+
+       strPathUninst = new TCHAR[ ++dwSize ];
+
+       rv = MsiGetProperty( hInstall, cNsisUninstall, strPathUninst, &dwSize );
+       if(rv != ERROR_SUCCESS) goto _cleanup;
+
+       // Create a process for the uninstaller
+       sInfo.cb = sizeof(sInfo);
+       sInfo.lpReserved = NULL;
+       sInfo.lpDesktop = _T("");
+       sInfo.lpTitle = _T("Foo");
+       sInfo.dwX = 0;
+       sInfo.dwY = 0;
+       sInfo.dwXSize = 0;
+       sInfo.dwYSize = 0;
+       sInfo.dwXCountChars = 0;
+       sInfo.dwYCountChars = 0;
+       sInfo.dwFillAttribute = 0;
+       sInfo.dwFlags = 0;
+       sInfo.wShowWindow = 0;
+       sInfo.cbReserved2 = 0;
+       sInfo.lpReserved2 = 0;
+       sInfo.hStdInput = 0;
+       sInfo.hStdOutput = 0;
+       sInfo.hStdError = 0;
+
+       if(!CreateProcess( 
+               strPathUninst,
+               _T("Uninstall /S"),
+               NULL,
+               NULL,
+               FALSE,
+               CREATE_SUSPENDED,
+               NULL,
+               NULL,
+               &sInfo,
+               &pInfo)) {
+                       pInfo.hProcess = NULL;
+                       pInfo.hThread = NULL;
+                       rv = 40;
+                       goto _cleanup;
+               };
+
+       // Create a job object to contain the NSIS uninstall process tree
+
+       JOBOBJECT_ASSOCIATE_COMPLETION_PORT acp;
+
+       acp.CompletionKey = 0;
+
+       hJob = CreateJobObject(NULL, _T("NSISUninstallObject"));
+       if(!hJob) {
+               rv = 41;
+               goto _cleanup;
+       }
+
+       hIo = CreateIoCompletionPort(INVALID_HANDLE_VALUE,0,0,0);
+       if(!hIo) {
+               rv = 42;
+               goto _cleanup;
+       }
+
+       acp.CompletionPort = hIo;
+
+       SetInformationJobObject( hJob, JobObjectAssociateCompletionPortInformation, &acp, sizeof(acp));
+
+       AssignProcessToJobObject( hJob, pInfo.hProcess );
+
+       ResumeThread( pInfo.hThread );
+
+       DWORD a,b,c;
+       for(;;) {
+               if(!GetQueuedCompletionStatus(hIo, &a, (PULONG_PTR) &b, (LPOVERLAPPED *) &c, INFINITE)) {
+                       Sleep(1000);
+                       continue;
+               }
+               if(a == JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO) {
+                       break;
+               }
+       }
+
+       rv = ERROR_SUCCESS;
+    
+_cleanup:
+       if(hIo) CloseHandle(hIo);
+       if(pInfo.hProcess)      CloseHandle( pInfo.hProcess );
+       if(pInfo.hThread)       CloseHandle( pInfo.hThread );
+       if(hJob) CloseHandle(hJob);
+       if(strPathUninst) delete strPathUninst;
+
+       if(rv != ERROR_SUCCESS) {
+        ShowMsiError( hInstall, ERR_NSS_FAILED, rv );
+       }
+       return rv;
+}
diff --git a/src/WINNT/install/wix/custom/afscustom.h b/src/WINNT/install/wix/custom/afscustom.h
new file mode 100644 (file)
index 0000000..8dcda8a
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+
+Copyright 2004 by the Massachusetts Institute of Technology
+
+All rights reserved.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of the Massachusetts
+Institute of Technology (M.I.T.) not be used in advertising or publicity
+pertaining to distribution of the software without specific, written
+prior permission.
+
+M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+*/
+
+/* afscustom.h
+ *
+ * Declarations for OpenAFS MSI setup tools
+ *
+ * rcsid : $Id: afscustom.h,v 1.2 2004/06/23 03:55:13 jaltman Exp $
+ */
+
+#ifndef __afsMsiTools_H__
+#define __afsMsiTools_H__
+
+#include<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__*/
diff --git a/src/WINNT/install/wix/feature.wxi b/src/WINNT/install/wix/feature.wxi
new file mode 100644 (file)
index 0000000..7a56537
--- /dev/null
@@ -0,0 +1,249 @@
+<?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 &lt; 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>
diff --git a/src/WINNT/install/wix/files.wxi b/src/WINNT/install/wix/files.wxi
new file mode 100644 (file)
index 0000000..c87a2d8
--- /dev/null
@@ -0,0 +1,1273 @@
+<?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>
diff --git a/src/WINNT/install/wix/lang/de_DE/ActionText.wxi b/src/WINNT/install/wix/lang/de_DE/ActionText.wxi
new file mode 100644 (file)
index 0000000..51183f4
--- /dev/null
@@ -0,0 +1,143 @@
+<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>
diff --git a/src/WINNT/install/wix/lang/de_DE/Error.wxi b/src/WINNT/install/wix/lang/de_DE/Error.wxi
new file mode 100644 (file)
index 0000000..e076f2d
--- /dev/null
@@ -0,0 +1,319 @@
+<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>
diff --git a/src/WINNT/install/wix/lang/en_US/ActionText.wxi b/src/WINNT/install/wix/lang/en_US/ActionText.wxi
new file mode 100644 (file)
index 0000000..e16f004
--- /dev/null
@@ -0,0 +1,137 @@
+<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>
diff --git a/src/WINNT/install/wix/lang/en_US/Error.wxi b/src/WINNT/install/wix/lang/en_US/Error.wxi
new file mode 100644 (file)
index 0000000..004c98a
--- /dev/null
@@ -0,0 +1,263 @@
+<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>
diff --git a/src/WINNT/install/wix/lang/en_US/strings.wxl b/src/WINNT/install/wix/lang/en_US/strings.wxl
new file mode 100644 (file)
index 0000000..1c342f2
--- /dev/null
@@ -0,0 +1,55 @@
+<?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>
diff --git a/src/WINNT/install/wix/lang/en_US/ui.wxi b/src/WINNT/install/wix/lang/en_US/ui.wxi
new file mode 100644 (file)
index 0000000..c5ffea7
--- /dev/null
@@ -0,0 +1,1086 @@
+<?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">&lt; &amp;Back</Property>
+               <Property Id="ButtonText_Browse">Br&amp;owse</Property>
+               <Property Id="ButtonText_Cancel">Cancel</Property>
+               <Property Id="ButtonText_Exit">&amp;Exit</Property>
+               <Property Id="ButtonText_Finish">&amp;Finish</Property>
+               <Property Id="ButtonText_Ignore">&amp;Ignore</Property>
+               <Property Id="ButtonText_Install">&amp;Install</Property>
+               <Property Id="ButtonText_Next">&amp;Next &gt;</Property>
+               <Property Id="ButtonText_No">&amp;no</Property>
+               <Property Id="ButtonText_OK">OK</Property>
+               <Property Id="ButtonText_Remove">&amp;Remove</Property>
+               <Property Id="ButtonText_Repair">&amp;Repair</Property>
+               <Property Id="ButtonText_Reset">&amp;Reset</Property>
+               <Property Id="ButtonText_Resume">&amp;Resume</Property>
+               <Property Id="ButtonText_Retry">&amp;Retry</Property>
+               <Property Id="ButtonText_Return">&amp;Return</Property>
+               <Property Id="ButtonText_Yes">&amp;yes</Property>
+               <Property Id="CompleteSetupIcon">completi</Property>
+               <Property Id="CustomSetupIcon">custicon</Property>
+               <Property Id="DialogBitmap">dlgbmp</Property>
+               <Property Id="DlgTitleFont">{&amp;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="&amp;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="&amp;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>&amp;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>&amp;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 &amp;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="&amp;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="&amp;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 &amp;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>&lt;The selection's path&gt;</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 &lt;&gt; 1 AND (IBMAFS_UPGRADE OR OPENAFS_UPGRADE OR NSISUNINSTALL &lt;&gt; "")</Publish>
+          <Publish Event="NewDialog" Value="SetupTypeDlg">IAgree = "yes" AND ShowUserRegistrationDlg &lt;&gt; 1 AND NOT (IBMAFS_UPGRADE OR OPENAFS_UPGRADE OR NSISUNINSTALL &lt;&gt; "")</Publish>
+          <Condition Action="disable">IAgree &lt;&gt; "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]&amp;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&amp;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]&amp;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 &lt;&gt; 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 &lt;&gt; ""</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 &lt;&gt; 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]&amp;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&amp;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&amp;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 &lt;&gt; 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 &lt;&gt; ""</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 &amp;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 &lt;&gt; "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="&amp;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="&amp;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 &amp;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 &lt;&gt; 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 &amp;feaClient &lt;&gt; 3</Publish>
+          <Publish Event="NewDialog" Value="ConfigCredsDlg">(InstallMode = "Custom" OR InstallMode = "Change") AND &amp;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 &lt;&gt; 1</Publish>
+          <Publish Event="EndDialog" Value="Return">OutOfDiskSpace &lt;&gt; 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 &lt;&gt; 1</Publish>
+          <Publish Event="Reinstall" Value="All">OutOfDiskSpace &lt;&gt; 1</Publish>
+          <Publish Event="EndDialog" Value="Return">OutOfDiskSpace &lt;&gt; 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 &amp;accept the terms in the License Agreement" X="5" Y="0" Width="250" Height="15">yes</RadioButton>
+        <RadioButton Text="{\DlgFont8}I &amp;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>
diff --git a/src/WINNT/install/wix/lang/es_ES/ActionText.wxi b/src/WINNT/install/wix/lang/es_ES/ActionText.wxi
new file mode 100644 (file)
index 0000000..1082c5f
--- /dev/null
@@ -0,0 +1,143 @@
+<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>
diff --git a/src/WINNT/install/wix/lang/es_ES/Error.wxi b/src/WINNT/install/wix/lang/es_ES/Error.wxi
new file mode 100644 (file)
index 0000000..41d0ede
--- /dev/null
@@ -0,0 +1,319 @@
+<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>
diff --git a/src/WINNT/install/wix/lang/ja_JP/ActionText.wxi b/src/WINNT/install/wix/lang/ja_JP/ActionText.wxi
new file mode 100644 (file)
index 0000000..893302e
--- /dev/null
@@ -0,0 +1,143 @@
+<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]\81\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]\81\83f\83B\83\8c\83N\83g\83\8a: [9]\81\83T\83C\83Y: [6]">\83l\83b\83g\83\8f\81[\83\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\83\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\83\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]\81\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\83\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]\81\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\83\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]\81\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\83\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\83\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]\81\96¼\91O: [2]\81\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>
diff --git a/src/WINNT/install/wix/lang/ja_JP/Error.wxi b/src/WINNT/install/wix/lang/ja_JP/Error.wxi
new file mode 100644 (file)
index 0000000..427ea65
--- /dev/null
@@ -0,0 +1,319 @@
+<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]\81\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[\83\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[\83\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[\83\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[\83\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81B</Error>
+
+<Error Id="1319">\83\\81[\83\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[\83\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[\83\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\83\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\83\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\83\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\83\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\83\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[\83\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\83\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[\83\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\83\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\83\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[\83\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\83\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[\83\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\83\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[\83\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\83\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\83\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\83\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]\81\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\83\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\83\83T\81[\83r\83X\82ª\95K\97v\82Å\82·\81B\83R\83\93\83|\81[\83l\83\93\83\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\83\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[\83\83o\81[\83W\83\87\83\93 : [3], OS \83v\83\8d\83e\83N\83e\83b\83\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[\83\83o\81[\83W\83\87\83\93 : [3], OS \83v\83\8d\83e\83N\83e\83b\83\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>
diff --git a/src/WINNT/install/wix/lang/ko_KR/ActionText.wxi b/src/WINNT/install/wix/lang/ko_KR/ActionText.wxi
new file mode 100644 (file)
index 0000000..ac6ff0e
--- /dev/null
@@ -0,0 +1,143 @@
+<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>
diff --git a/src/WINNT/install/wix/lang/ko_KR/Error.wxi b/src/WINNT/install/wix/lang/ko_KR/Error.wxi
new file mode 100644 (file)
index 0000000..f30e692
--- /dev/null
@@ -0,0 +1,319 @@
+<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">¿øº» ÆÄÀϠijºñ³ÝÀ» ¿­ ¶§ ³×Æ®¿öÅ© ¿À·ù°¡ »ý°å½À´Ï´Ù: [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]ÀÌ(°¡) µðÁöÅР¼­¸íµÇÁö ¾Ê¾Ò±â ¶§¹®¿¡, ÇÊ¿äÇÑ ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº Ä³ºñ³Ý ÆÄÀÏÀÌ ¼Õ»óµÇ¾úÀ½À» ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.</Error>
+
+<Error Id="1330">ijºñ³Ý ÆÄÀÏ [2]ÀÌ(°¡) ¿Ã¹Ù¸£Áö ¾ÊÀº µðÁöÅР¼­¸íÀ» °¡Áö°í Àֱ⠶§¹®¿¡, ÇÊ¿äÇÑ ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº Ä³ºñ³Ý ÆÄÀÏÀÌ ¼Õ»óµÇ¾úÀ½À» ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù.{{ WinVerifyTrust¿¡¼­ ¿À·ù [3]À»(¸¦) ¹ÝȯÇß½À´Ï´Ù.}}</Error>
+
+<Error Id="1331">[2] ÆÄÀÏÀ» ¿Ã¹Ù¸£°Ô º¹»çÇÏÁö ¸øÇß½À´Ï´Ù: CRC ¿À·ùÀÔ´Ï´Ù.</Error>
+
+<Error Id="1332">[2] ÆÄÀÏÀ» ¿Ã¹Ù¸£°Ô À̵¿ÇÏÁö ¸øÇß½À´Ï´Ù: CRC ¿À·ùÀÔ´Ï´Ù.</Error>
+
+<Error Id="1333">[2] ÆÄÀÏÀ» ¿Ã¹Ù¸£°Ô ÆÐÄ¡ÇÏÁö ¸øÇß½À´Ï´Ù: CRC ¿À·ùÀÔ´Ï´Ù.</Error>
+
+<Error Id="1334">ÆÄÀÏÀ» Ä³ºñ³Ý ÆÄÀÏ '[3]'¿¡¼­ Ã£À» ¼ö ¾ø±â ¶§¹®¿¡, '[2]' ÆÄÀÏÀ» ¼³Ä¡ÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº ³×Æ®¿öÅ© ¿À·ù, CD-ROMÀ¸·ÎºÎÅÍÀÇ Àб⠿À·ù, ¶Ç´Â ÀÌ ÆÐŰÁö¿¡ ¹®Á¦°¡ ÀÖÀ½À» ³ªÅ¸³À´Ï´Ù.</Error>
+
+<Error Id="1335">¼³Ä¡¿¡ ÇÊ¿äÇѠijºñ³Ý ÆÄÀÏ '[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]À»(¸¦) Ä³½ÃÇϴµ¥ ½ÇÆÐÇß½À´Ï´Ù. ¿À·ù: [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>
diff --git a/src/WINNT/install/wix/lang/pt_BR/ActionText.wxi b/src/WINNT/install/wix/lang/pt_BR/ActionText.wxi
new file mode 100644 (file)
index 0000000..9463da5
--- /dev/null
@@ -0,0 +1,143 @@
+<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>
diff --git a/src/WINNT/install/wix/lang/pt_BR/Error.wxi b/src/WINNT/install/wix/lang/pt_BR/Error.wxi
new file mode 100644 (file)
index 0000000..1fd868e
--- /dev/null
@@ -0,0 +1,319 @@
+<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>
diff --git a/src/WINNT/install/wix/lang/zh_CN/ActionText.wxi b/src/WINNT/install/wix/lang/zh_CN/ActionText.wxi
new file mode 100644 (file)
index 0000000..ba32b7d
--- /dev/null
@@ -0,0 +1,143 @@
+<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>
diff --git a/src/WINNT/install/wix/lang/zh_CN/Error.wxi b/src/WINNT/install/wix/lang/zh_CN/Error.wxi
new file mode 100644 (file)
index 0000000..0072676
--- /dev/null
@@ -0,0 +1,319 @@
+<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>
diff --git a/src/WINNT/install/wix/lang/zh_TW/ActionText.wxi b/src/WINNT/install/wix/lang/zh_TW/ActionText.wxi
new file mode 100644 (file)
index 0000000..892b2d9
--- /dev/null
@@ -0,0 +1,143 @@
+<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>
diff --git a/src/WINNT/install/wix/lang/zh_TW/Error.wxi b/src/WINNT/install/wix/lang/zh_TW/Error.wxi
new file mode 100644 (file)
index 0000000..45806e2
--- /dev/null
@@ -0,0 +1,319 @@
+<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©w­n¨ú®ø¶Ü ?</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·Q­nµy«á¤â°Ê­«·s±Ò°Ê¡C</Error>
+
+<Error Id="1703">Installer ¥²¶·­«·s±Ò°Ê±zªº¨t²Î¡A¹ï [2] ³]©wªºÅܧó¤~·|¥Í®Ä¡A«ö "¬O" ¥ß§Y­«·s±Ò°Ê¡A«ö "§_"¡A¦pªG±z·Q­nµy«á¤â°Ê­«·s±Ò°Ê¡C</Error>
+
+<Error Id="1704">¦w¸Ë [2] ¥Ø«e³Q¼È°±¡A±z¥²¶·´_­ì¸Ó¦w¸Ë©Ò°µªºÅܧó¤~¯àÄ~Äò¡A±z­n´_­ì³o¨ÇÅܧó¶Ü ?</Error>
+
+<Error Id="1705">¥t¤@­Ó¦w¸Ë³o­Ó²£«~ªºµ{¦¡¥¿¦b¶i¦æ¤¤¡A±z¥²¶·´_­ì¸Ó¦w¸Ë©Ò°µªºÅܧó¤~¯àÄ~Äò¡A±z­n´_­ì³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±z­nÁÙ­ì¶Ü ?</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>
diff --git a/src/WINNT/install/wix/language_config.wxi b/src/WINNT/install/wix/language_config.wxi
new file mode 100644 (file)
index 0000000..d82090e
--- /dev/null
@@ -0,0 +1,44 @@
+<?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>
diff --git a/src/WINNT/install/wix/openafs.wxs b/src/WINNT/install/wix/openafs.wxs
new file mode 100644 (file)
index 0000000..dc4eb00
--- /dev/null
@@ -0,0 +1,208 @@
+<?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 &lt;&gt; "" AND UILevel &gt;= 4</Custom>
+                       <Custom Action="AbortInstallationA" Before="CostInitialize">NSISUNINSTALL &lt;&gt; "" AND UILevel &lt; 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">&amp;feaLoopback=2 OR &amp;feaLoopback=3</Custom>
+            <Custom Action="RollbackLoopback" After="RemoveLoopback">&amp;feaLoopback=3</Custom>
+            <Custom Action="InstallLoopback" After="RollbackLoopback">&amp;feaLoopback=3</Custom>
+               <?else?>
+            <Custom Action="InstallLoopback" After="SelfRegModules">&amp;feaLoopback=3</Custom>
+        <?endif?>
+            <Custom Action="RollbackNetProvider" After="WriteRegistryValues">&amp;feaClient=3</Custom>
+                       <Custom Action="InstallNetProvider" After="RollbackNetProvider">&amp;feaClient=3</Custom>
+                       <Custom Action="RemoveNetProvider" After="InstallNetProvider">&amp;feaClient=2</Custom>
+                       <Custom Action="ConfigureClient" After="InstallServices">&amp;feaClient=3</Custom>
+                       <Custom Action="ConfigureServer" After="ConfigureClient">&amp;feaServer=3</Custom>
+            <ScheduleReboot After="PublishProduct">&amp;feaClient=3 OR &amp;feaServer=3 OR &amp;feaClient=2 OR &amp;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>
diff --git a/src/WINNT/install/wix/property.wxi b/src/WINNT/install/wix/property.wxi
new file mode 100644 (file)
index 0000000..70a4697
--- /dev/null
@@ -0,0 +1,112 @@
+<?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>
diff --git a/src/WINNT/install/wix/registry.wxi b/src/WINNT/install/wix/registry.wxi
new file mode 100644 (file)
index 0000000..3f50ea5
--- /dev/null
@@ -0,0 +1,190 @@
+<?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>
diff --git a/src/WINNT/install/wix/runtime.wxi b/src/WINNT/install/wix/runtime.wxi
new file mode 100644 (file)
index 0000000..569d016
--- /dev/null
@@ -0,0 +1,42 @@
+<?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
diff --git a/src/WINNT/install/wix/runtime_debug.wxi b/src/WINNT/install/wix/runtime_debug.wxi
new file mode 100644 (file)
index 0000000..2a76867
--- /dev/null
@@ -0,0 +1,38 @@
+<?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>
index be31ed6a603f4edf433a6b8d3ad5f29c79270c9e..9ae45f43be05abbe851eb9c15797c5e864a739f1 100644 (file)
@@ -11,7 +11,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/DARWIN/osi_vm.c,v 1.11 2003/07/15 23:14:18 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/DARWIN/osi_vm.c,v 1.14 2004/06/23 18:34:48 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -42,7 +42,7 @@ osi_VM_FlushVCache(struct vcache *avc, int *slept)
     if (UBCINFOEXISTS(vp))
        return EBUSY;
 #endif
-    if (avc->vrefCount)
+    if (avc->vrefCount > DARWIN_REFBASE)
        return EBUSY;
 
     if (avc->opens)
@@ -61,6 +61,30 @@ osi_VM_FlushVCache(struct vcache *avc, int *slept)
        ubc_release(vp);
        ubc_info_free(vp);
     }
+#else
+    /* This is literally clean_up_name_parent_ptrs() */
+    /* Critical to clean up any state attached to the vnode here since it's
+       being recycled, and we're not letting refcnt drop to 0 to trigger
+       normal recycling. */
+    if (VNAME(vp) || VPARENT(vp)) {
+       char *tmp1;
+       struct vnode *tmp2;
+
+       /* do it this way so we don't block before clearing 
+          these fields. */
+       tmp1 = VNAME(vp);
+       tmp2 = VPARENT(vp);
+       VNAME(vp) = NULL;
+       VPARENT(vp) = NULL;
+            
+       if (tmp1) {
+           remove_name(tmp1);
+       }
+            
+       if (tmp2) {
+           vrele(tmp2);
+       }
+    }
 #endif
 
     AFS_GLOCK();
@@ -165,6 +189,9 @@ osi_VM_TryReclaim(struct vcache *avc, int *slept)
     struct proc *p = current_proc();
     struct vnode *vp = AFSTOV(avc);
     void *obj;
+#ifdef AFS_DARWIN14_ENV
+    int didhold;
+#endif
 
     if (slept)
        *slept = 0;
@@ -173,17 +200,28 @@ osi_VM_TryReclaim(struct vcache *avc, int *slept)
        AFS_RELE(vp);
        return;
     }
-    if (!UBCINFOEXISTS(vp) || vp->v_count != 2) {
+    if (!UBCINFOEXISTS(vp) || vp->v_usecount != 2+DARWIN_REFBASE) {
        simple_unlock(&vp->v_interlock);
        AFS_RELE(vp);
        return;
     }
+    if (ISSET(vp->v_flag, VUINACTIVE)) {
+       simple_unlock(&vp->v_interlock);
+        AFS_RELE(vp);
+        printf("vnode %x still inactive!", vp);
+        return;
+    }
 #ifdef AFS_DARWIN14_ENV
     if (vp->v_ubcinfo->ui_refcount > 1 || vp->v_ubcinfo->ui_mapped) {
        simple_unlock(&vp->v_interlock);
        AFS_RELE(vp);
        return;
     }
+    if (ISSET(vp->v_flag, VORECLAIM)) {
+        simple_unlock(&vp->v_interlock);
+        AFS_RELE(vp);
+        return;
+    }
 #else
     if (vp->v_ubcinfo->ui_holdcnt) {
        simple_unlock(&vp->v_interlock);
@@ -198,7 +236,9 @@ osi_VM_TryReclaim(struct vcache *avc, int *slept)
        return;
     }
 
+#ifndef AFS_DARWIN14_ENV
     vp->v_usecount--;          /* we want the usecount to be 1 */
+#endif
 
     if (slept) {
        ReleaseWriteLock(&afs_xvcache);
@@ -216,47 +256,91 @@ osi_VM_TryReclaim(struct vcache *avc, int *slept)
 #endif
        if (ubc_issetflags(vp, UI_HASOBJREF))
            printf("ubc_release didn't release the reference?!\n");
-    } else if (!vn_lock(vp, LK_EXCLUSIVE | LK_INTERLOCK, current_proc())) {
+    } else {
 #ifdef AFS_DARWIN14_ENV
-       obj = ubc_getobject(vp, UBC_HOLDOBJECT);
+        SET(vp->v_flag, VORECLAIM);
+#endif
+       if (!vn_lock(vp, LK_EXCLUSIVE|LK_INTERLOCK,current_proc())) {
+#ifdef AFS_DARWIN14_ENV
+           obj = ubc_getobject(vp,UBC_HOLDOBJECT);
+           if ((didhold = ubc_hold(vp)))
+               (void)ubc_clean(vp, 0);
 #else
 #ifdef AFS_DARWIN13_ENV
-       obj = ubc_getobject(vp, (UBC_NOREACTIVATE | UBC_HOLDOBJECT));
+           obj = ubc_getobject(vp,(UBC_NOREACTIVATE|UBC_HOLDOBJECT));
+#else
+           obj = ubc_getobject(vp);
+#endif
+           (void)ubc_clean(vp, 1);
+#endif
+           vinvalbuf(vp, V_SAVE, &afs_osi_cred, p, 0, 0);
+           if (vp->v_usecount ==
+#ifdef AFS_DARWIN14_ENV
+               2 + DARWIN_REFBASE
 #else
-       obj = ubc_getobject(vp);
+               1
 #endif
+               )
+               VOP_INACTIVE(vp, p);
+           else
+               VOP_UNLOCK(vp, 0, p);
+#ifdef AFS_DARWIN14_ENV
+           if (didhold)
+               ubc_rele(vp);
 #endif
-       (void)ubc_clean(vp, 1);
-       vinvalbuf(vp, V_SAVE, &afs_osi_cred, p, 0, 0);
-       if (vp->v_usecount == 1)
-           VOP_INACTIVE(vp, p);
-       else
-           VOP_UNLOCK(vp, 0, p);
-       if (obj) {
-           if (ISSET(vp->v_flag, VTERMINATE))
-               panic("afs_vnreclaim: already teminating");
-           SET(vp->v_flag, VTERMINATE);
-           memory_object_destroy(obj, 0);
-           while (ISSET(vp->v_flag, VTERMINATE)) {
-               SET(vp->v_flag, VTERMWANT);
-               tsleep((caddr_t) & vp->v_ubcinfo, PINOD, "afs_vnreclaim", 0);
+           if (obj) {
+               if (ISSET(vp->v_flag, VTERMINATE))
+                   panic("afs_vnreclaim: already teminating");
+               SET(vp->v_flag, VTERMINATE);
+               memory_object_destroy(obj, 0);
+               while (ISSET(vp->v_flag, VTERMINATE)) {
+                   SET(vp->v_flag, VTERMWANT);
+                   tsleep((caddr_t)&vp->v_ubcinfo, PINOD, "afs_vnreclaim", 0);
+               }
            }
-       }
-    } else {
-       if (simple_lock_try(&vp->v_interlock))
-           panic("afs_vnreclaim: slept, but did no work :(");
-       if (UBCINFOEXISTS(vp) && vp->v_count == 1) {
-           vp->v_usecount++;
-           simple_unlock(&vp->v_interlock);
-           VN_RELE(vp);
-       } else
+#ifdef AFS_DARWIN14_ENV
+           simple_lock(&vp->v_interlock);
+           CLR(vp->v_flag, VORECLAIM);
+           if (ISSET((vp)->v_flag, VXWANT)) {
+               CLR((vp)->v_flag, VXWANT);
+                wakeup((caddr_t)(vp));
+           }       
+           vp->v_usecount--;
            simple_unlock(&vp->v_interlock);
+#endif
+       } else {
+#ifdef AFS_DARWIN14_ENV
+           CLR(vp->v_flag, VORECLAIM);
+#endif
+           if (simple_lock_try(&vp->v_interlock))
+               panic("afs_vnreclaim: slept, but did no work :(");
+           if (UBCINFOEXISTS(vp) && vp->v_count == DARWIN_REFBASE +
+#ifdef AFS_DARWIN14_ENV
+               2
+#else
+               1
+#endif
+               ) {
+#ifndef AFS_DARWIN14_ENV
+               /* We left the refcount high in 1.4 */
+               vp->v_usecount++;
+#endif
+               simple_unlock(&vp->v_interlock);
+               VN_RELE(vp);
+           } else {
+#ifdef AFS_DARWIN14_ENV
+               /* We left the refcount high in 1.4 */
+               vp->v_usecount--;
+#endif
+               simple_unlock(&vp->v_interlock);
+           }
+       }
     }
     AFS_GLOCK();
     if (slept)
-       ObtainWriteLock(&afs_xvcache, 175);
+        ObtainWriteLock(&afs_xvcache,175);
     else
-       ObtainReadLock(&afs_xvcache);
+        ObtainReadLock(&afs_xvcache);
 }
 
 void
index b914bbc5f1bfcaaa454e2efb59f3c0c57e77f4b9..9f4189cfddd94a9de2a584f55170194428113c9a 100644 (file)
@@ -5,7 +5,7 @@
 #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 */
@@ -188,6 +188,16 @@ afs_vop_lookup(ap)
     vp = AFSTOV(vcp);          /* always get a node if no error */
     vp->v_vfsp = dvp->v_vfsp;
 
+    if (UBCINFOMISSING(vp) ||
+       UBCINFORECLAIMED(vp)) {
+#ifdef AFS_DARWIN14_ENV
+       if (UBCINFORECLAIMED(vp) && ISSET(vp->v_flag, (VXLOCK|VORECLAIM))) {
+           DROPNAME();
+           return (ENXIO);
+       } else 
+#endif
+           ubc_info_init(vp);
+    }
     /* The parent directory comes in locked.  We unlock it on return
      * unless the caller wants it left locked.
      * we also always return the vnode locked. */
@@ -253,8 +263,17 @@ afs_vop_create(ap)
        *ap->a_vpp = AFSTOV(vcp);
        (*ap->a_vpp)->v_vfsp = dvp->v_vfsp;
        vn_lock(*ap->a_vpp, LK_EXCLUSIVE | LK_RETRY, p);
-       if (UBCINFOMISSING(*ap->a_vpp) || UBCINFORECLAIMED(*ap->a_vpp))
-           ubc_info_init(*ap->a_vpp);
+       if (UBCINFOMISSING(*ap->a_vpp) || UBCINFORECLAIMED(*ap->a_vpp)) {
+#ifdef AFS_DARWIN14_ENV
+           if (UBCINFORECLAIMED(*ap->a_vpp) && ISSET((*ap->a_vpp)->v_flag, 
+                                                     (VXLOCK|VORECLAIM))) {
+               vput(dvp);
+               DROPNAME();
+               return (ENXIO);
+           } else 
+#endif
+               ubc_info_init(*ap->a_vpp);
+       }
     } else
        *ap->a_vpp = 0;
 
@@ -352,6 +371,17 @@ afs_vop_close(ap)
            printf("afs: WARNING: ui_refcount panic averted\n");
        }
     }
+    if (UBCINFOMISSING(ap->a_vp) ||
+       UBCINFORECLAIMED(ap->a_vp)) {
+       if (UBCINFORECLAIMED(ap->a_vp) && ISSET(ap->a_vp->v_flag, 
+                                               (VXLOCK|VORECLAIM))) {
+           printf("no ubc for %x in close, reclaim set\n", ap->a_vp);
+           return (ENXIO);
+       } else {
+           printf("no ubc for %x in close, put back\n", ap->a_vp);
+           ubc_info_init(ap->a_vp);
+       }
+    }
 #endif
 
     return code;
@@ -833,7 +863,8 @@ afs_vop_remove(ap)
     cache_purge(vp);
     if (!error && UBCINFOEXISTS(vp)) {
 #ifdef AFS_DARWIN14_ENV
-       (void)ubc_uncache(vp);
+       /* If crashes continue in ubc_hold, comment this out */
+       /* (void)ubc_uncache(vp);*/
 #else
        int wasmapped = ubc_issetflags(vp, UI_WASMAPPED);
        int hasobjref = ubc_issetflags(vp, UI_HASOBJREF);
@@ -957,8 +988,22 @@ afs_vop_rename(ap)
        if ((fcnp->cn_flags & SAVESTART) == 0)
            panic("afs_rename: lost from startdir");
        fcnp->cn_nameiop = DELETE;
-       (void)relookup(fdvp, &fvp, fcnp);
-       return (VOP_REMOVE(fdvp, fvp, fcnp));
+
+        VREF(fdvp); 
+        error=relookup(fdvp, &fvp, fcnp);
+        if (error == 0)
+           vrele(fdvp);
+        if (fvp == NULL) {
+           return (ENOENT);
+        }
+        
+        error=VOP_REMOVE(fdvp, fvp, fcnp);
+        if (fdvp == fvp)
+            vrele(fdvp);
+        else
+            vput(fdvp);
+        vput(fvp);
+        return (error);
     }
     if (error = vn_lock(fvp, LK_EXCLUSIVE, p))
        goto abortit;
index 52f1e6036034b2498880852623888206f53efd6d..02d4023f3fbdd882037fcba8a63d3364de56761c 100644 (file)
@@ -17,7 +17,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/LINUX/osi_groups.c,v 1.22 2004/04/21 02:20:23 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/LINUX/osi_groups.c,v 1.23 2004/06/02 06:15:45 shadow Exp $");
 
 #include "afs/sysincludes.h"
 #include "afsincludes.h"
@@ -156,10 +156,9 @@ setpag(cred_t ** cr, afs_uint32 pagvalue, afs_uint32 * newpag,
     AFS_STATCNT(setpag);
 
     group_info = afs_getgroups(*cr);
-    g0 = GROUP_AT(group_info, 0);
-    g1 = GROUP_AT(group_info, 1);
-
-    if (afs_get_pag_from_groups(g0, g1) == NOPAG) {
+    if (group_info->ngroups < 2
+       ||  afs_get_pag_from_groups(GROUP_AT(group_info, 0),
+                                   GROUP_AT(group_info, 1)) == NOPAG) {
        /* We will have to make sure group_info is big enough for pag */
        struct group_info *tmp;
        int i;
index 9a6d1a2c594196d75e7cc4b5ff204fd68d36f7d5..2ef2eeabf01bdba22658b1001de26ba4c2d2252b 100644 (file)
@@ -15,7 +15,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/LINUX/osi_misc.c,v 1.33 2004/05/08 03:58:27 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/LINUX/osi_misc.c,v 1.34 2004/05/15 06:43:12 shadow Exp $");
 
 #include "afs/sysincludes.h"
 #include "afsincludes.h"
@@ -334,7 +334,8 @@ afs_osi_SetTime(osi_timeval_t * tvp)
     AFS_STATCNT(osi_SetTime);
 
     TO_USER_SPACE();
-    (void)(*sys_settimeofdayp) (tvp, NULL);
+    if (sys_settimeofdayp)
+       (void)(*sys_settimeofdayp) (tvp, NULL);
     TO_KERNEL_SPACE();
 #endif
 }
index 4eafd9d40931647116cab6e3bdf40884aa23e67b..fc86e54ff42eaa52ad3f1732b1aaafab9697bf3e 100644 (file)
@@ -15,7 +15,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/LINUX/osi_module.c,v 1.48 2004/05/11 20:36:13 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/LINUX/osi_module.c,v 1.52 2004/06/21 21:46:17 shadow Exp $");
 
 #include "afs/sysincludes.h"
 #include "afsincludes.h"
@@ -37,14 +37,6 @@ RCSID
 #include <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
@@ -147,7 +139,7 @@ afsproc_init()
     struct proc_dir_entry *entry1;
 
     openafs_procfs = proc_mkdir(PROC_FSDIRNAME, proc_root_fs);
-    entry1 = create_proc_entry(PROC_SYSCALL_NAME, 0, openafs_procfs);
+    entry1 = create_proc_entry(PROC_SYSCALL_NAME, 0666, openafs_procfs);
 
     entry1->proc_fops = &afs_syscall_fops;
 
@@ -163,6 +155,9 @@ afsproc_exit()
     remove_proc_entry(PROC_FSDIRNAME, proc_root_fs);
 }
 
+extern asmlinkage long
+afs_syscall(long syscall, long parm1, long parm2, long parm3, long parm4);
+
 static int
 afs_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
          unsigned long arg)
@@ -239,7 +234,6 @@ init_module(void)
     unsigned long kernel_gp = 0;
     static struct fptr sys_setgroups;
 #endif /* defined(AFS_IA64_LINUX20_ENV) */
-    extern int afs_syscall();
     extern long afs_xsetgroups();
 #if defined(__NR_setgroups32)
     extern int afs_xsetgroups32();
@@ -369,7 +363,6 @@ init_module(void)
 #endif /* EXPORTED_KALLSYMS_ADDRESS */
     if (!sys_call_table) {
        printf("Failed to find address of sys_call_table\n");
-       sys_settimeofdayp = 0;
     } else {
        printf("Found sys_call_table at %x\n", sys_call_table);
 #ifdef AFS_SPARC64_LINUX20_ENV
index b559dd2c9e6ce7b444082984607b7481b87d74b3..b86855299894e84904e2a1693a6a0c43ae5fd759 100644 (file)
@@ -11,7 +11,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/LINUX/osi_sleep.c,v 1.21 2003/07/15 23:14:24 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/LINUX/osi_sleep.c,v 1.22 2004/06/21 19:30:21 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -193,6 +193,10 @@ afs_osi_SleepSig(void *event)
        AFS_ASSERT_GLOCK();
        AFS_GUNLOCK();
        schedule();
+#ifdef AFS_LINUX26_ENV
+       if (current->flags & PF_FREEZE)
+           refrigerator(PF_FREEZE);
+#endif
        AFS_GLOCK();
        if (signal_pending(current)) {
            retval = EINTR;
@@ -271,6 +275,10 @@ osi_TimedSleep(char *event, afs_int32 ams, int aintok)
            code = EINTR;
     } else
        schedule_timeout(ticks);
+#ifdef AFS_LINUX26_ENV
+    if (current->flags & PF_FREEZE)
+       refrigerator(PF_FREEZE);
+#endif
 
     AFS_GLOCK();
     remove_wait_queue(&evp->cond, &wait);
index fad6b768761e6e7b27c411b3938f7f1512c34b07..f64c21573e7e6f71b61ac26b016c3315aab13b54 100644 (file)
@@ -22,7 +22,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.74 2004/04/21 02:20:23 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.78 2004/06/24 17:28:03 shadow Exp $");
 
 #include "afs/sysincludes.h"
 #include "afsincludes.h"
@@ -464,8 +464,9 @@ afs_linux_vma_close(struct vm_area_struct *vmap)
                (void)afs_close(vcp, vmap->vm_file->f_flags, credp);
                /* only decrement the execsOrWriters flag if this is not a
                 * writable file. */
-               if (!(vmap->vm_file->f_flags & (FWRITE | FTRUNC)))
-                   vcp->execsOrWriters--;
+               if (!(vcp->states & CRO) )
+                   if (! (vmap->vm_file->f_flags & (FWRITE | FTRUNC)))
+                       vcp->execsOrWriters--;
                vcp->states &= ~CMAPPED;
                crfree(credp);
            } else if ((vmap->vm_file->f_flags & (FWRITE | FTRUNC)))
@@ -546,7 +547,8 @@ afs_linux_mmap(struct file *fp, struct vm_area_struct *vmap)
 
        /* Add an open reference on the first mapping. */
        if (vcp->mapcnt == 0) {
-           vcp->execsOrWriters++;
+           if (!(vcp->states & CRO))
+               vcp->execsOrWriters++;
            vcp->opens++;
            vcp->states |= CMAPPED;
        }
@@ -850,13 +852,15 @@ afs_linux_dentry_revalidate(struct dentry *dp)
     struct vcache *lookupvcp = NULL;
     int code, bad_dentry = 1;
     struct sysname_info sysState;
-    struct vcache *vcp = ITOAFS(dp->d_inode);
-    struct vcache *parentvcp = ITOAFS(dp->d_parent->d_inode);
+    struct vcache *vcp, *parentvcp;
+
+    sysState.allocked = 0;
 
     AFS_GLOCK();
     lock_kernel();
 
-    sysState.allocked = 0;
+    vcp = ITOAFS(dp->d_inode);
+    parentvcp = ITOAFS(dp->d_parent->d_inode);
 
     /* If it's a negative dentry, then there's nothing to do. */
     if (!vcp || !parentvcp)
@@ -907,14 +911,14 @@ afs_linux_dentry_revalidate(struct dentry *dp)
     if (sysState.allocked)
        osi_FreeLargeSpace(name);
 
-    AFS_GUNLOCK();
-    crfree(credp);
-
     if (bad_dentry) {
        shrink_dcache_parent(dp);
        d_drop(dp);
     }
+
     unlock_kernel();
+    AFS_GUNLOCK();
+    crfree(credp);
 
     return !bad_dentry;
 }
@@ -1138,7 +1142,7 @@ afs_linux_unlink(struct inode *dip, struct dentry *dp)
     if (!code)
        d_drop(dp);
 #if defined(AFS_LINUX26_ENV)
-    lock_kernel();
+    unlock_kernel();
 #endif
     AFS_GUNLOCK();
     crfree(credp);
@@ -1380,7 +1384,7 @@ afs_linux_readpage(struct file *fp, struct page *pp)
     uio_t tuio;
     struct iovec iovec;
     struct inode *ip = FILE_INODE(fp);
-    int cnt = atomic_read(&pp->count);
+    int cnt = page_count(pp);
     struct vcache *avc = ITOAFS(ip);
 
     AFS_GLOCK();
@@ -1525,7 +1529,7 @@ afs_linux_writepage_sync(struct inode *ip, struct page *pp,
 
     credp = crref();
     afs_Trace4(afs_iclSetp, CM_TRACE_UPDATEPAGE, ICL_TYPE_POINTER, vcp,
-              ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, atomic_read(&pp->count),
+              ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, page_count(pp),
               ICL_TYPE_INT32, 99999);
 
     setup_uio(&tuio, &iovec, buffer, base, count, UIO_WRITE, AFS_UIOSYS);
@@ -1547,7 +1551,7 @@ afs_linux_writepage_sync(struct inode *ip, struct page *pp,
     code = code ? -code : count - tuio.uio_resid;
 
     afs_Trace4(afs_iclSetp, CM_TRACE_UPDATEPAGE, ICL_TYPE_POINTER, vcp,
-              ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, atomic_read(&pp->count),
+              ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, page_count(pp),
               ICL_TYPE_INT32, code);
 
     crfree(credp);
@@ -1586,7 +1590,7 @@ afs_linux_updatepage(struct file *fp, struct page *pp, unsigned long offset,
     credp = crref();
     AFS_GLOCK();
     afs_Trace4(afs_iclSetp, CM_TRACE_UPDATEPAGE, ICL_TYPE_POINTER, vcp,
-              ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, atomic_read(&pp->count),
+              ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, page_count(pp),
               ICL_TYPE_INT32, 99999);
     setup_uio(&tuio, &iovec, page_addr + offset,
              (afs_offs_t) (pageoff(pp) + offset), count, UIO_WRITE,
@@ -1598,7 +1602,7 @@ afs_linux_updatepage(struct file *fp, struct page *pp, unsigned long offset,
 
     code = code ? -code : count - tuio.uio_resid;
     afs_Trace4(afs_iclSetp, CM_TRACE_UPDATEPAGE, ICL_TYPE_POINTER, vcp,
-              ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, atomic_read(&pp->count),
+              ICL_TYPE_POINTER, pp, ICL_TYPE_INT32, page_count(pp),
               ICL_TYPE_INT32, code);
 
     AFS_GUNLOCK();
index d31ce8dc59cab1ba33bcbc294628f45a220e0f0e..9a289ef6e9fa837b0b26c25f3aaf84e862d3a4b7 100644 (file)
@@ -55,7 +55,7 @@ install:   ${DESTDIR}${includedir}/afs/afs.h  ${DESTDIR}${includedir}/afs/osi_in
 
 clean:
        -$(RM) -f *.o core AFS_component_version_number.c afs_trace.h afs_trace.msf afszcm.cat
-
+       -$(RM) -f unified_afs.c unified_afs.h
 include ../config/Makefile.version
 ${DEST}/include/afs/afs.h: afs.h
        ${INSTALL} $? $@
index 657e68f4323a0b8bf6b87812fa36b529e6ce313f..8c86720df9741535ff2a18098632321c9ecfd1c6 100644 (file)
@@ -11,7 +11,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_file.c,v 1.12 2003/07/15 23:14:26 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_file.c,v 1.13 2004/06/24 17:38:24 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -271,7 +271,15 @@ osi_UFSTruncate(register struct osi_file *afile, afs_int32 asize)
      * The only time a flag is used (ATTR_UTIME) is when we're changing the time 
      */
     AFS_GUNLOCK();
+#ifdef AFS_SUN510_ENV
+    {
+       caller_context_t ct;
+
+       code = VOP_SETATTR(afile->vnode, &tvattr, 0, &afs_osi_cred, &ct);
+    }
+#else
     code = VOP_SETATTR(afile->vnode, &tvattr, 0, &afs_osi_cred);
+#endif
     AFS_GLOCK();
     MReleaseWriteLock(&afs_xosi);
     return code;
index a7b66bcf7692356cb109e28f5e248357e529a3be..c1eb7baba08be32ba0c1c328b9a03f35283171e4 100644 (file)
@@ -17,7 +17,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_inode.c,v 1.14 2003/07/15 23:14:26 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_inode.c,v 1.15 2004/06/24 17:38:24 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -129,7 +129,11 @@ igetinode(vfsp, dev, inode, ipp, credp, perror)
         * Don't call dnlc for the cm inodes since it's a big performance 
         * penalty there!
         */
+#ifdef AFS_SUN510_ENV
+       dnlc_enter(ITOV(ip), "a", ITOV(ip));
+#else
        dnlc_enter(ITOV(ip), "a", ITOV(ip), (struct AFS_UCRED *)0);
+#endif
     }
 
     *ipp = ip;
@@ -201,7 +205,11 @@ afs_syscall_icreate(dev, near_inode, param1, param2, param3, param4, rvp,
 #endif
     newip->i_nlink = 1;
     newip->i_mode = IFREG;
+#ifdef AFS_SUN510_ENV
+    newip->i_vnode->v_type = VREG;
+#else
     newip->i_vnode.v_type = VREG;
+#endif
 
     newip->i_vicep1 = param1;
     if (param2 == 0x1fffffff /*INODESPECIAL*/) {
index 3712418245b8a5a2acaa2b288ec24745181c0392..57a2419ac0256f393299f954fb5ce0164d206f9c 100644 (file)
@@ -14,7 +14,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_vfsops.c,v 1.17 2003/07/15 23:14:26 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_vfsops.c,v 1.18 2004/06/24 17:38:24 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -237,6 +237,19 @@ afs_swapvp(struct vfs *afsp, struct vnode **avpp, char *nm)
 }
 
 
+#ifdef AFS_SUN510_ENV
+struct fs_operation_def afs_vfsops_template[] = {
+    { VFSNAME_MOUNT,           afs_mount },
+    { VFSNAME_UNMOUNT,         afs_unmount },
+    { VFSNAME_ROOT,            afs_root },
+    { VFSNAME_STATVFS,         afs_statvfs },
+    { VFSNAME_SYNC,            afs_sync },
+    { VFSNAME_VGET,            afs_vget },
+    { VFSNAME_MOUNTROOT,       afs_mountroot },
+    { VFSNAME_FREEVFS,         fs_freevfs },
+};
+struct vfsops *afs_vfsopsp;
+#else
 struct vfsops Afs_vfsops = {
     afs_mount,
     afs_unmount,
@@ -250,6 +263,7 @@ struct vfsops Afs_vfsops = {
     fs_freevfs,
 #endif
 };
+#endif
 
 
 /*
@@ -264,10 +278,14 @@ int (*afs_orig_ioctl) (), (*afs_orig_ioctl32) ();
 int (*afs_orig_setgroups) (), (*afs_orig_setgroups32) ();
 
 struct streamtab *udp_infop = 0;
+#ifndef AFS_SUN510_ENV
 struct ill_s *ill_g_headp = 0;
+#endif
 
 int afs_sinited = 0;
 
+extern struct fs_operation_def afs_vnodeops_template[];
+
 #if    !defined(AFS_NONFSTRANS)
 int (*nfs_rfsdisptab_v2) ();
 int (*nfs_rfsdisptab_v3) ();
@@ -279,7 +297,11 @@ int (*nfs_checkauth) ();
 
 extern Afs_syscall();
 
+#ifdef AFS_SUN510_ENV
+afsinit(int fstype, char *dummy)
+#else
 afsinit(struct vfssw *vfsswp, int fstype)
+#endif
 {
     extern int afs_xioctl();
     extern int afs_xsetgroups();
@@ -298,8 +320,14 @@ afsinit(struct vfssw *vfsswp, int fstype)
     sysent32[SYS_ioctl].sy_call = afs_xioctl;
 #endif
 
+#ifdef AFS_SUN510_ENV
+    vfs_setfsops(fstype, afs_vfsops_template, &afs_vfsopsp);
+    afsfstype = fstype;
+    vn_make_ops("afs", afs_vnodeops_template, &afs_ops);
+#else
     vfsswp->vsw_vfsops = &Afs_vfsops;
     afsfstype = fstype;
+#endif
 
 
 #if    !defined(AFS_NONFSTRANS)
@@ -337,23 +365,38 @@ afsinit(struct vfssw *vfsswp, int fstype)
     ufs_igetp = (int (*)())modlookup("ufs", "ufs_iget");
     ufs_itimes_nolockp = (void (*)())modlookup("ufs", "ufs_itimes_nolock");
     udp_infop = (struct streamtab *)modlookup("udp", "udpinfo");
+#ifdef AFS_SUN510_ENV
+    if (!ufs_iallocp || !ufs_iupdatp || !ufs_itimes_nolockp || !ufs_igetp
+       || !udp_infop)
+       afs_warn("AFS to UFS mapping cannot be fully initialised\n");
+#else
     ill_g_headp = (struct ill_s *)modlookup("ip", "ill_g_head");
 
     if (!ufs_iallocp || !ufs_iupdatp || !ufs_itimes_nolockp || !ufs_igetp
        || !udp_infop || !ill_g_headp)
        afs_warn("AFS to UFS mapping cannot be fully initialised\n");
+#endif
 
     afs_sinited = 1;
     return 0;
 
 }
 
+#ifdef AFS_SUN510_ENV
+static struct vfsdef_v3 afs_vfsdef = {
+    VFSDEF_VERSION,
+    "afs",
+    afsinit,
+    0
+};
+#else
 static struct vfssw afs_vfw = {
     "afs",
     afsinit,
     &Afs_vfsops,
     0
 };
+#endif
 
 static struct sysent afssysent = {
     6,
@@ -373,7 +416,11 @@ extern struct mod_ops mod_syscallops;
 static struct modlfs afsmodlfs = {
     &mod_fsops,
     "afs filesystem",
+#ifdef AFS_SUN510_ENV
+    &afs_vfsdef
+#else
     &afs_vfw
+#endif
 };
 
 static struct modlsys afsmodlsys = {
index 752e92b3f14ed20fcfc5749c1681c4934e4d78a1..9270e1ab0cffdf5be0eb52968d32cea55cca7ffc 100644 (file)
@@ -11,7 +11,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_vnodeops.c,v 1.19 2003/07/15 23:14:26 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_vnodeops.c,v 1.20 2004/06/24 17:38:24 shadow Exp $");
 
 #if    defined(AFS_SUN_ENV) || defined(AFS_SUN5_ENV)
 /*
@@ -139,12 +139,22 @@ afs_delmap(avp, offset, asp, addr, length, prot, maxprot, flags, credp)
     return (0);
 }
 
+#ifdef AFS_SUN510_ENV
+int
+afs_vmread(avp, auio, ioflag, acred, ct)
+     register struct vnode *avp;
+     struct uio *auio;
+     int ioflag;
+     struct AFS_UCRED *acred;
+     caller_context_t *ct;
+#else
 int
 afs_vmread(avp, auio, ioflag, acred)
      register struct vnode *avp;
      struct uio *auio;
      int ioflag;
      struct AFS_UCRED *acred;
+#endif
 {
     register int code;
 
@@ -157,12 +167,22 @@ afs_vmread(avp, auio, ioflag, acred)
 }
 
 
+#ifdef AFS_SUN510_ENV
+int
+afs_vmwrite(avp, auio, ioflag, acred, ct)
+     register struct vnode *avp;
+     struct uio *auio;
+     int ioflag;
+     struct AFS_UCRED *acred;
+     caller_context_t *ct;
+#else
 int
 afs_vmwrite(avp, auio, ioflag, acred)
      register struct vnode *avp;
      struct uio *auio;
      int ioflag;
      struct AFS_UCRED *acred;
+#endif
 {
     register int code;
 
@@ -1761,6 +1781,55 @@ extern int gafs_fid(), gafs_readlink(), fs_setfl(), afs_pathconf();
 extern int afs_lockctl();
 extern void gafs_inactive();
 
+#ifdef AFS_SUN510_ENV
+struct fs_operation_def afs_vnodeops_template[] = {
+    { VOPNAME_OPEN,            gafs_open },
+    { VOPNAME_CLOSE,           gafs_close },
+    { VOPNAME_READ,            afs_vmread },
+    { VOPNAME_WRITE,           afs_vmwrite },
+    { VOPNAME_IOCTL,           afs_ioctl },
+    { VOPNAME_SETFL,           fs_setfl },
+    { VOPNAME_GETATTR,         gafs_getattr },
+    { VOPNAME_SETATTR,         gafs_setattr },
+    { VOPNAME_ACCESS,          gafs_access },
+    { VOPNAME_LOOKUP,          gafs_lookup },
+    { VOPNAME_CREATE,          gafs_create },
+    { VOPNAME_REMOVE,          gafs_remove },
+    { VOPNAME_LINK,            gafs_link },
+    { VOPNAME_RENAME,          gafs_rename },
+    { VOPNAME_MKDIR,           gafs_mkdir },
+    { VOPNAME_RMDIR,           gafs_rmdir },
+    { VOPNAME_READDIR,         gafs_readdir },
+    { VOPNAME_SYMLINK,         gafs_symlink },   
+    { VOPNAME_READLINK,                gafs_readlink },
+    { VOPNAME_FSYNC,           gafs_fsync },
+    { VOPNAME_INACTIVE,                gafs_inactive },
+    { VOPNAME_FID,             gafs_fid },
+    { VOPNAME_RWLOCK,          afs_rwlock },
+    { VOPNAME_RWUNLOCK,                afs_rwunlock },
+    { VOPNAME_SEEK,            afs_seek },
+    { VOPNAME_CMP,             afs_cmp },
+    { VOPNAME_FRLOCK,          afs_frlock },
+    { VOPNAME_SPACE,           afs_space },
+    { VOPNAME_REALVP,          afs_realvp },
+    { VOPNAME_GETPAGE,         afs_getpage },
+    { VOPNAME_PUTPAGE,         afs_putpage },
+    { VOPNAME_MAP,             afs_map },
+    { VOPNAME_ADDMAP,          afs_addmap },
+    { VOPNAME_DELMAP,          afs_delmap },
+    { VOPNAME_POLL,            fs_poll },
+    { VOPNAME_DUMP,            afs_dump },
+    { VOPNAME_PATHCONF,                afs_pathconf },
+    { VOPNAME_PAGEIO,          afs_pageio },
+    { VOPNAME_DUMPCTL,         afs_dumpctl },   
+    { VOPNAME_DISPOSE,         afs_dispose },
+    { VOPNAME_GETSECATTR,      afs_getsecattr },
+    { VOPNAME_SETSECATTR,      afs_setsecattr },
+    { VOPNAME_SHRLOCK,         fs_shrlock },
+    NULL,
+};
+struct vnodeops *afs_ops;
+#else
 struct vnodeops Afs_vnodeops = {
     gafs_open,
     gafs_close,
@@ -1811,6 +1880,7 @@ struct vnodeops Afs_vnodeops = {
 #endif
 };
 struct vnodeops *afs_ops = &Afs_vnodeops;
+#endif
 
 
 
index 410713fa9252192f06852bd0015edbb035100f77..b6f6cfb97d5cde9d9ebd7bd0771539fd134611c1 100644 (file)
@@ -15,7 +15,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/UKERNEL/afs_usrops.c,v 1.26 2004/05/10 13:51:16 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/UKERNEL/afs_usrops.c,v 1.27 2004/05/20 19:15:04 kolya Exp $");
 
 
 #ifdef UKERNEL
@@ -2751,6 +2751,10 @@ uafs_open_r(char *path, int flags, int mode)
     if (flags & (O_WRONLY | O_RDWR)) {
        openFlags |= FWRITE;
     }
+    if ((openFlags & (FREAD | FWRITE)) == 0) {
+       /* O_RDONLY is 0, so ... */
+       openFlags |= FREAD;
+    }
 
     /*
      * Truncate if necessary
@@ -3064,7 +3068,6 @@ uafs_fstat_r(int fd, struct stat *buf)
        return -1;
     }
     code = uafs_GetAttr(vp, buf);
-    VN_RELE(vp);
     if (code) {
        errno = code;
        return -1;
index 960d2aadf6b73e66c711d00740102036b687f8ba..51501d0360a912eb4c15a2ecc2d49481f337fe8f 100644 (file)
@@ -19,7 +19,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_read.c,v 1.25 2003/08/27 21:43:19 rees Exp $");
+    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_read.c,v 1.26 2004/06/24 17:38:25 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -27,6 +27,7 @@ RCSID
 #include "afs/afs_cbqueue.h"
 #include "afs/nfsclient.h"
 #include "afs/afs_osidnlc.h"
+#include "afs/afs_osi.h"
 
 
 extern char afs_zeros[AFS_ZEROS];
@@ -755,9 +756,19 @@ afs_UFSRead(register struct vcache *avc, struct uio *auio,
                          &tuio, NULL, NULL, -1);
 #elif defined(AFS_SUN5_ENV)
            AFS_GUNLOCK();
+#ifdef AFS_SUN510_ENV
+           {
+               caller_context_t ct;
+
+               VOP_RWLOCK(tfile->vnode, 0, &ct);
+               code = VOP_READ(tfile->vnode, &tuio, 0, afs_osi_credp, &ct);
+               VOP_RWUNLOCK(tfile->vnode, 0, &ct);
+           }
+#else
            VOP_RWLOCK(tfile->vnode, 0);
            code = VOP_READ(tfile->vnode, &tuio, 0, afs_osi_credp);
            VOP_RWUNLOCK(tfile->vnode, 0);
+#endif
            AFS_GLOCK();
 #elif defined(AFS_SGI_ENV)
            AFS_GUNLOCK();
index 55c060eafecc1ad6ae312f935c81973e17a06083..c484b466a5c375059f2ebcd9b7479d584f02c07c 100644 (file)
@@ -23,7 +23,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_remove.c,v 1.28 2004/04/05 06:26:17 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_remove.c,v 1.31 2004/06/23 22:25:06 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -402,11 +402,16 @@ OSI_VC_DECL(adp);
        Ttvcr = VREFCOUNT(tvc);
 #ifdef AFS_AIX_ENV
     if (tvc && (VREFCOUNT(tvc) > 2) && tvc->opens > 0
-       && !(tvc->states & CUnlinked)) {
+       && !(tvc->states & CUnlinked)) 
+#else
+#ifdef AFS_DARWIN14_ENV
+    if (tvc && (VREFCOUNT(tvc) > 1 + DARWIN_REFBASE) && tvc->opens > 0 && !(tvc->states & CUnlinked)) 
 #else
     if (tvc && (VREFCOUNT(tvc) > 1) && tvc->opens > 0
-       && !(tvc->states & CUnlinked)) {
+       && !(tvc->states & CUnlinked)) 
+#endif
 #endif
+    {
        char *unlname = newname();
 
        ReleaseWriteLock(&adp->lock);
@@ -454,6 +459,7 @@ afs_remunlink(register struct vcache *avc, register int doit)
     struct VenusFid dirFid;
     register struct dcache *tdc;
     afs_int32 code = 0;
+    int oldref;
 
     if (NBObtainWriteLock(&avc->lock, 423))
        return 0;
@@ -470,7 +476,7 @@ afs_remunlink(register struct vcache *avc, register int doit)
            cred = avc->uncred;
            avc->uncred = NULL;
 
-#ifdef AFS_DARWIN_ENV
+#if defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN14_ENV)
            /* this is called by vrele (via VOP_INACTIVE) when the refcount
             * is 0. we can't just call VN_HOLD since vref will panic.
             * we can't just call osi_vnhold because a later AFS_RELE will call
@@ -488,6 +494,12 @@ afs_remunlink(register struct vcache *avc, register int doit)
             */
            avc->states &= ~(CUnlinked | CUnlinkedDel);
 
+#ifdef AFS_DARWIN14_ENV
+           if (VREFCOUNT(avc) < 4) {
+               oldref = 4 - VREFCOUNT(avc);
+               VREFCOUNT_SET(avc, 4);
+           }
+#endif
            ReleaseWriteLock(&avc->lock);
 
            dirFid.Cell = avc->fid.Cell;
@@ -512,8 +524,15 @@ afs_remunlink(register struct vcache *avc, register int doit)
            osi_FreeSmallSpace(unlname);
            crfree(cred);
 #ifdef AFS_DARWIN_ENV
+#ifndef AFS_DARWIN14_ENV
            osi_Assert(VREFCOUNT(avc) == 1);
            VREFCOUNT_SET(avc, 0);
+#else
+           if (oldref) {
+               int newref = VREFCOUNT(avc) - oldref;
+               VREFCOUNT_SET(avc, newref);
+           }
+#endif
 #endif
        }
     } else {
index 57b702f76018214d5c4f9c0255e3402daa35672a..7fa94c4b6baf0952b6de904f9eea0750108dc7f2 100644 (file)
@@ -21,7 +21,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_write.c,v 1.35 2003/08/29 22:00:04 rees Exp $");
+    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_write.c,v 1.36 2004/06/24 17:38:25 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -530,9 +530,19 @@ afs_UFSWrite(register struct vcache *avc, struct uio *auio, int aio,
                      &tuio, NULL, NULL, -1);
 #elif defined(AFS_SUN5_ENV)
        AFS_GUNLOCK();
+#ifdef AFS_SUN510_ENV
+       {
+           caller_context_t ct;
+
+           VOP_RWLOCK(tfile->vnode, 1, &ct);
+           code = VOP_WRITE(tfile->vnode, &tuio, 0, afs_osi_credp, &ct);
+           VOP_RWUNLOCK(tfile->vnode, 1, &ct);
+       }
+#else
        VOP_RWLOCK(tfile->vnode, 1);
        code = VOP_WRITE(tfile->vnode, &tuio, 0, afs_osi_credp);
        VOP_RWUNLOCK(tfile->vnode, 1);
+#endif
        AFS_GLOCK();
        if (code == ENOSPC)
            afs_warnuser
index 355a29345a4563c3aaa816b5db9114a6ca47eb31..49f2c408d0723df027e212756d74154312a0997b 100644 (file)
@@ -633,8 +633,8 @@ struct vcache {
        afs_uint32 Date;
        afs_uint32 Owner;
        afs_uint32 Group;
-       ushort Mode;            /* XXXX Should be afs_int32 XXXX */
-       ushort LinkCount;
+       afs_uint16 Mode;        /* XXXX Should be afs_int32 XXXX */
+       afs_uint16 LinkCount;
        /* vnode type is in v.v_type */
     } m;
     afs_rwlock_t lock;         /* The lock on the vcache contents. */
index add1b69022ace4b6b765f7c3415a9a564b2b1d9c..b387709d4154455ac0db693fceae281ecf510b4d 100644 (file)
@@ -11,7 +11,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/afs_call.c,v 1.66 2004/04/12 16:04:31 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/afs_call.c,v 1.69 2004/06/24 17:38:22 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -130,7 +130,7 @@ afs_InitSetup(int preallocs)
     rx_extraPackets = AFS_NRXPACKETS;  /* smaller # of packets */
     code = rx_Init(htons(7001));
     if (code) {
-       printf("AFS: RX failed to initialize.\n");
+       printf("AFS: RX failed to initialize %d).\n", code);
        return code;
     }
     rx_SetRxDeadTime(afs_rx_deadtime);
@@ -270,7 +270,7 @@ afsd_thread(void *rock)
        complete_and_exit(0, 0);
        break;
     default:
-       printf("Unknown op %d in StartDaemon()\n");
+       printf("Unknown op %d in StartDaemon()\n", parm);
        break;
     }
     return 0;
@@ -708,7 +708,6 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6)
        afs_int32 *mtubuffer =
            afs_osi_Alloc(sizeof(afs_int32) * AFS_MAX_INTERFACE_ADDR);
        int i;
-       int code;
 
        if (count > AFS_MAX_INTERFACE_ADDR) {
            code = ENOMEM;
index dba98a25081da96487163067642d5329fc17d306..c97edaa5b99936289f5012eb8ce16d6e52764d50 100644 (file)
@@ -17,7 +17,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/afs_callback.c,v 1.26 2004/04/16 04:57:01 kolya Exp $");
+    ("$Header: /cvs/openafs/src/afs/afs_callback.c,v 1.27 2004/06/24 16:56:20 shadow Exp $");
 
 #include "afs/sysincludes.h"   /*Standard vendor system headers */
 #include "afsincludes.h"       /*AFS-based standard headers */
@@ -221,16 +221,12 @@ SRXAFSCB_GetCE64(struct rx_call *a_call, afs_int32 a_index,
     a_result->lock.pid_writer = 0;
     a_result->lock.src_indicator = 0;
 #endif /* AFS_OSF20_ENV */
-#ifdef AFS_64BIT_ENV
-    a_result->Length = tvc->m.Length;
-#else /* AFS_64BIT_ENV */
-#ifdef AFS_64BIT_CLIENT
-    a_result->Length = tvc->m.Length;
-#else /* AFS_64BIT_CLIENT */
+#if !defined(AFS_64BIT_ENV) 
     a_result->Length.high = 0;
     a_result->Length.low = tvc->m.Length;
-#endif /* AFS_64BIT_CLIENT */
-#endif /* AFS_64BIT_ENV */
+#else
+    a_result->Length = tvc->m.Length;
+#endif
     a_result->DataVersion = hgetlo(tvc->m.DataVersion);
     a_result->callback = afs_data_pointer_to_int32(tvc->callback);     /* XXXX Now a pointer; change it XXXX */
     a_result->cbExpires = tvc->cbExpires;
index 145d6e465f6f4d591e0d5a6005c4c87fd0b90ee1..6066c82f3920eb0af4802327b311e4c9e3e8566a 100644 (file)
@@ -11,7 +11,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/afs_osi.c,v 1.44 2004/04/21 02:20:21 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/afs_osi.c,v 1.45 2004/06/21 20:01:50 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -74,13 +74,14 @@ osi_Init(void)
 #endif /* AFS_HPUX_ENV */
 
     if (!afs_osicred_initialized) {
-#if defined(AFS_LINUX26_ENV)
-       afs_osi_credp = crref();
-#elif defined(AFS_XBSD_ENV)
+#if defined(AFS_XBSD_ENV)
        /* Can't just invent one, must use crget() because of mutex */
        afs_osi_credp = crdup(osi_curcred());
 #else
        memset(&afs_osi_cred, 0, sizeof(struct AFS_UCRED));
+#if defined(AFS_LINUX26_ENV)
+        afs_osi_cred.cr_group_info = groups_alloc(0);
+#endif
        crhold(&afs_osi_cred);  /* don't let it evaporate */
        afs_osi_credp = &afs_osi_cred;
 #endif
index a573e8978073caf68abea3730ccdb87e50826a40..923c92e950481b59c7734bb6cc1e965791437a1d 100644 (file)
@@ -174,7 +174,7 @@ extern struct vnodeops *afs_ops;
   */
 
 
-#if defined(AFS_HPUX_ENV) || defined(AFS_SUN57_ENV) || defined(AFS_LINUX_64BIT_KERNEL) || (defined(AFS_SGI61_ENV) && defined(KERNEL) && defined(_K64U64))
+#if defined(AFS_HPUX_ENV) || (defined(AFS_SUN57_ENV) && !defined(AFS_SUN510_ENV)) || defined(AFS_LINUX_64BIT_KERNEL) || (defined(AFS_SGI61_ENV) && defined(KERNEL) && defined(_K64U64))
 typedef struct {
     afs_int32 tv_sec;
     afs_int32 tv_usec;
index 663fe0eb611f299b14f869f2e37ae315bbc25014..289d5cf0a20201f5db5e172da7fdb291be62f39a 100644 (file)
@@ -11,7 +11,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/afs_pioctl.c,v 1.78 2004/04/18 06:13:47 kolya Exp $");
+    ("$Header: /cvs/openafs/src/afs/afs_pioctl.c,v 1.81 2004/06/08 17:27:46 rees Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #ifdef AFS_OBSD_ENV
@@ -88,6 +88,7 @@ DECL_PIOCTL(PRxStatProc);
 DECL_PIOCTL(PRxStatPeer);
 DECL_PIOCTL(PPrefetchFromTape);
 DECL_PIOCTL(PResidencyCmd);
+DECL_PIOCTL(PCallBackAddr);
 
 /*
  * A macro that says whether we're going to need HandleClientContext().
@@ -188,6 +189,7 @@ static int (*(CpioctlSw[])) () = {
     PBogus,                    /* 0 */
        PNewAlias,              /* 1 -- create new cell alias */
        PListAliases,           /* 2 -- list cell aliases */
+       PCallBackAddr,          /* 3 -- request addr for callback rxcon */
 };
 
 #define PSetClientContext 99   /*  Special pioctl to setup caller's creds  */
@@ -3744,3 +3746,100 @@ DECL_PIOCTL(PResidencyCmd)
     }
     return code;
 }
+
+DECL_PIOCTL(PCallBackAddr)
+{
+#ifndef UKERNEL
+    afs_uint32 addr, code;
+    int srvAddrCount;
+    struct server *ts;
+    struct srvAddr *sa;
+    struct conn *tc;
+    afs_int32 i, j;
+    struct unixuser *tu;
+    struct srvAddr **addrs;
+
+    /*AFS_STATCNT(PCallBackAddr);*/
+    if ( !afs_resourceinit_flag )      /* afs deamons havn't started yet */
+       return EIO;          /* Inappropriate ioctl for device */
+
+    if (!afs_osi_suser(acred))
+       return EACCES;
+
+    if ( ainSize < sizeof(afs_int32) )
+       return EINVAL;
+
+    memcpy(&addr, ain, sizeof(afs_int32));
+
+    ObtainReadLock(&afs_xinterface);
+    for ( i=0; (unsigned short)i < afs_cb_interface.numberOfInterfaces; i++) {
+       if (afs_cb_interface.addr_in[i] == addr) break;
+    }
+
+    ReleaseWriteLock(&afs_xinterface);
+
+    if (afs_cb_interface.addr_in[i] != addr)
+       return EINVAL;
+
+    ObtainReadLock(&afs_xserver);  /* Necessary? */
+    ObtainReadLock(&afs_xsrvAddr);
+
+    srvAddrCount = 0;
+    for (i=0;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;
+}
index 43aa28236425e40a7646390ff25c6c0393d99b7e..84e787b2c7d2750caa04052b920e821b4a2efb11 100644 (file)
@@ -685,7 +685,7 @@ extern struct srvAddr *afs_srvAddrs[NSERVERS];
 extern struct server *afs_servers[NSERVERS];
 extern int afs_totalServers;
 extern struct server *afs_setTimeHost;
-extern struct server *afs_FindServer(afs_int32 aserver, ushort aport,
+extern struct server *afs_FindServer(afs_int32 aserver, afs_uint16 aport,
                                     afsUUID * uuidp, afs_int32 locktype);
 extern struct server *afs_GetServer(afs_uint32 * aserver, afs_int32 nservers,
                                    afs_int32 acell, u_short aport,
@@ -711,6 +711,7 @@ extern int afsi_SetServerIPRank(struct srvAddr *sa, afs_int32 addr,
 void afsi_SetServerIPRank(struct srvAddr *sa, struct in_ifaddr *ifa);
 #endif
 #endif
+extern int afs_HaveCallBacksFrom(struct server *aserver);
 
 
 
index 4688ac97785e94d33dd2fea2f78fc23e4e9218b0..a5055bcc3279e9d9eeb8fe47efd20dc78a24f1ff 100644 (file)
@@ -33,7 +33,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/afs_server.c,v 1.29 2004/05/08 04:23:56 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/afs_server.c,v 1.33 2004/06/24 17:38:23 shadow Exp $");
 
 #include "afs/stds.h"
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
@@ -259,8 +259,8 @@ afs_ServerDown(struct srvAddr *sa)
 
 
 /* return true if we have any callback promises from this server */
-static int
-HaveCallBacksFrom(struct server *aserver)
+int
+afs_HaveCallBacksFrom(struct server *aserver)
 {
     register afs_int32 now;
     register int i;
@@ -583,7 +583,7 @@ afs_CheckServers(int adown, struct cell *acellp)
        if (!tc)
            continue;
 
-       if ((sa->sa_flags & SRVADDR_ISDOWN) || HaveCallBacksFrom(sa->server)
+       if ((sa->sa_flags & SRVADDR_ISDOWN) || afs_HaveCallBacksFrom(sa->server)
            || (tc->srvr->server == afs_setTimeHost)) {
            conns[nconns]=tc; 
            rxconns[nconns]=tc->id;
@@ -714,7 +714,7 @@ afs_CheckServers(int adown, struct cell *acellp)
 
 /* find a server structure given the host address */
 struct server *
-afs_FindServer(afs_int32 aserver, ushort aport, afsUUID * uuidp,
+afs_FindServer(afs_int32 aserver, afs_uint16 aport, afsUUID * uuidp,
               afs_int32 locktype)
 {
     struct server *ts;
@@ -1212,16 +1212,24 @@ static int afs_SetServerPrefs(struct srvAddr *sa) {
     }
 #else                          /* AFS_USERSPACE_IP_ADDR */
 #if    defined(AFS_SUN5_ENV)
+#ifdef AFS_SUN510_ENV
+    ill_walk_context_t ctx;
+#else
     extern struct ill_s *ill_g_headp;
+    long *addr = (long *)ill_g_headp;
+#endif
     ill_t *ill;
     ipif_t *ipif;
     int subnet, subnetmask, net, netmask;
-    long *addr = (long *)ill_g_headp;
 
     if (sa)
          sa->sa_iprank = 0;
+#ifdef AFS_SUN510_ENV
+    for (ill = ILL_START_WALK_ALL(&ctx) ; ill ; ill = ill_next(&ctx, ill)) {
+#else
     for (ill = (struct ill_s *)*addr /*ill_g_headp */ ; ill;
         ill = ill->ill_next) {
+#endif
 #ifdef AFS_SUN58_ENV
        /* Make sure this is an IPv4 ILL */
        if (ill->ill_isv6)
index 5fde338b32b473cc7c36b3866e0fbfc0cc92430a..9d067e91e3e5a1ad4c35c7f3c2524e10dd9f762a 100644 (file)
@@ -39,7 +39,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/afs_vcache.c,v 1.62 2004/05/08 04:20:39 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/afs_vcache.c,v 1.64 2004/06/23 18:34:45 shadow Exp $");
 
 #include "afs/sysincludes.h"   /*Standard vendor system headers */
 #include "afsincludes.h"       /*AFS-based standard headers */
@@ -822,8 +822,15 @@ afs_NewVCache(struct VenusFid *afid, struct server *serverp)
                refpanic("VLRU inconsistent");
            }
 #ifdef AFS_DARWIN_ENV
+           if ((VREFCOUNT(tvc) < DARWIN_REFBASE) || 
+               (VREFCOUNT(tvc) < 1+DARWIN_REFBASE && 
+                UBCINFOEXISTS(&tvc->v))) {
+              VREFCOUNT_SET(tvc, 
+                            DARWIN_REFBASE + (UBCINFOEXISTS(&tvc->v) ? 1 : 0));
+           }
            if (tvc->opens == 0 && ((tvc->states & CUnlinkedDel) == 0)
-               && VREFCOUNT(tvc) == 1 && UBCINFOEXISTS(&tvc->v)) {
+               && VREFCOUNT(tvc) == DARWIN_REFBASE+1 
+               && UBCINFOEXISTS(&tvc->v)) {
                osi_VM_TryReclaim(tvc, &fv_slept);
                if (fv_slept) {
                    uq = VLRU.prev;
@@ -843,7 +850,13 @@ afs_NewVCache(struct VenusFid *afid, struct server *serverp)
            }
 #endif
 
-           if (VREFCOUNT(tvc) == 0 && tvc->opens == 0
+           if (VREFCOUNT(tvc) == 
+#ifdef AFS_DARWIN_ENV
+               DARWIN_REFBASE
+#else
+               0 
+#endif
+               && tvc->opens == 0
                && (tvc->states & CUnlinkedDel) == 0) {
 #if defined(AFS_XBSD_ENV)
                /*
@@ -1051,6 +1064,12 @@ afs_NewVCache(struct VenusFid *afid, struct server *serverp)
 #if !defined(AFS_LINUX26_ENV)
     if (afs_globalVFS)
        ip->i_dev = afs_globalVFS->s_dev;
+#else
+#ifdef STRUCT_INODE_HAS_I_SECURITY
+    ip->i_security = NULL;
+    if (security_inode_alloc(ip))
+        panic("Cannot allocate inode security");
+#endif
 #endif
     ip->i_sb = afs_globalVFS;
     put_inode_on_dummy_list(ip);
@@ -1142,7 +1161,7 @@ afs_NewVCache(struct VenusFid *afid, struct server *serverp)
     /* VLISTNONE(&tvc->v); */
     tvc->v.v_freelist.tqe_next = 0;
     tvc->v.v_freelist.tqe_prev = (struct vnode **)0xdeadb;
-    /*tvc->vrefCount++; */
+    tvc->vrefCount+=DARWIN_REFBASE;
 #endif
     /*
      * The proper value for mvstat (for root fids) is setup by the caller.
@@ -1355,7 +1374,8 @@ afs_FlushActiveVcaches(register afs_int32 doflocks)
                }
            }
 #ifdef AFS_DARWIN_ENV
-           if (VREFCOUNT(tvc) == 1 && UBCINFOEXISTS(&tvc->v)) {
+           if (VREFCOUNT(tvc) == 1+DARWIN_REFBASE 
+               && UBCINFOEXISTS(&tvc->v)) {
                if (tvc->opens)
                    panic("flushactive open, hasubc, but refcnt 1");
                osi_VM_TryReclaim(tvc, 0);
@@ -2172,6 +2192,22 @@ afs_GetRootVCache(struct VenusFid *afid, struct vrequest *areq,
            if (vg)
                continue;
 #endif /* AFS_OSF_ENV */
+#ifdef AFS_DARWIN14_ENV
+           /* It'd really suck if we allowed duplicate vcaches for the 
+              same fid to happen. Wonder if this will work? */
+           struct vnode *vp = AFSTOV(tvc);
+           if (vp->v_flag & (VXLOCK|VORECLAIM|VTERMINATE)) {
+               printf("precluded FindVCache on %x (%d:%d:%d)\n", 
+                      vp, tvc->fid.Fid.Volume, tvc->fid.Fid.Vnode,
+                      tvc->fid.Fid.Unique);
+               simple_lock(&vp->v_interlock);
+               SET(vp->v_flag, VTERMWANT);
+               simple_unlock(&vp->v_interlock);
+               (void)tsleep((caddr_t)&vp->v_ubcinfo, PINOD, "vget1", 0);
+               printf("VTERMWANT ended on %x\n", vp);
+               continue;
+           }
+#endif
            break;
        }
     }
index 2146b7e584229f90b03e72432893ac1ec3292916..1b0fec866d6d0a4534a79bfdb9bba8d0bc4c233c 100644 (file)
 #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.
@@ -182,6 +186,10 @@ typedef unsigned short etap_event_t;
 #include "h/stream.h"          /* stops SUN56 socketvar.h errors */
 #endif
 
+#ifdef AFS_SUN510_ENV
+#include <sys/cred_impl.h>
+#endif
+
 #include "h/socket.h"
 #include "h/socketvar.h"
 #include "h/protosw.h"
index f5080e806610a8f0d14bea2b90a754d0e88405fe..7f4d0c7574e616be77d54f0142c09ebbda3b62a2 100644 (file)
@@ -168,7 +168,7 @@ LIBOBJS=$(LIBCOMMON_OBJS) $(LIBAPACHE_OBJS)
 OBJS=$(LIBOBJS) apache_afs_weblog.o weblog.o
 
 .c.o:
-       $(CC) -c $(CFLAGS) $(AFS_INCL) $(AUX_CFLAGS) $<
+       $(CCOBJ) -c $(CFLAGS) $(AFS_INCL) $(AUX_CFLAGS) $<
 
 
 weblog: weblog.o $(APACHE_AFS_COMMON_LIB) $(DCE_ADK_LIB)
index 0a3d3a00f62196012903ff4d132892b071986d6b..0658ce94914525fc910e56cacb3c2d3a62579f31 100644 (file)
@@ -84,7 +84,7 @@ EXELIBS =\
 
 
 $(SETKEY_EXEFILE): $(SETKEY_EXEOBJS) $(EXELIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP) 
 
 # build copyauth
@@ -108,7 +108,9 @@ ktc_errors.c auth.h: ktc_errors.et auth.p.h
        $(DEL) auth.h ktc_errors.c
        $(COMPILE_ET) ktc_errors.et -h auth
 
-install: $(INCFILES) $(AFSAUTH_LIBFILE) $(OUT)\setkey.exe # $(COPYAUTH_EXEFILE) $(AFSAUTH_KRB_LIBFILE)
+install_headers: $(INCFILES)
+
+install: $(AFSAUTH_LIBFILE) $(OUT)\setkey.exe # $(COPYAUTH_EXEFILE) $(AFSAUTH_KRB_LIBFILE)
 
 install9x: install
 
index ed74a815ca07e30127cb1e3480c982aabf2f955e..4fd0792b353b8a8faf553affdfc01a4d8e26c0f0 100644 (file)
@@ -11,7 +11,7 @@
 #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>
@@ -25,9 +25,6 @@ RCSID
 #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>
@@ -64,7 +61,12 @@ RCSID
 #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,},
@@ -792,14 +794,15 @@ afsconf_GetAfsdbInfo(char *acellName, char *aservice,
     register afs_int32 i;
     int tservice;
     struct afsconf_entry DNSce;
-    afs_int32 cellHosts[AFSMAXCELLHOSTS];
+    afs_int32 cellHostAddrs[AFSMAXCELLHOSTS];
+       char      cellHostNames[AFSMAXCELLHOSTS][MAXHOSTCHARS];
     int numServers;
     int rc;
     int ttl;
 
     DNSce.cellInfo.numServers = 0;
     DNSce.next = NULL;
-    rc = getAFSServer(acellName, cellHosts, &numServers, &ttl);
+    rc = getAFSServer(acellName, cellHostAddrs, cellHostNames, &numServers, &ttl);
     /* ignore the ttl here since this code is only called by transitory programs
      * like klog, etc. */
     if (rc < 0)
@@ -808,8 +811,9 @@ afsconf_GetAfsdbInfo(char *acellName, char *aservice,
        return -1;
 
     for (i = 0; i < numServers; i++) {
-       memcpy(&acellInfo->hostAddr[i].sin_addr.s_addr, &cellHosts[i],
+       memcpy(&acellInfo->hostAddr[i].sin_addr.s_addr, &cellHostAddrs[i],
               sizeof(long));
+       memcpy(acellInfo->hostName[i], cellHostNames[i], MAXHOSTCHARS);
        acellInfo->hostAddr[i].sin_family = AF_INET;
 
        /* sin_port supplied by connection code */
index e59bcd29e9609ce54456d9114846e0c6f67299bd..8d7b8a72b165f5e4345d5e4f415068b84dde126d 100644 (file)
@@ -70,7 +70,7 @@ BOSSERVER_EXELIBS =\
        $(DESTDIR)\lib\cm_dns.obj
 
 $(BOSSERVER_EXEFILE): $(BOSSERVER_EXEOBJS) $(BOSSERVER_EXELIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP)
 
 
@@ -106,7 +106,7 @@ BOS_EXELIBS =\
 
 
 $(RS_BOS_EXEFILE): $(BOS_EXEOBJS) $(BOS_EXELIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP)
 
 $(CL_BOS_EXEFILE): $(RS_BOS_EXEFILE)
index a055a7cb6af61841ae96447d0749f792381378b9..71bf0ceab53b2fb05c508754ad9e7d3f6aa8771e 100644 (file)
@@ -90,7 +90,7 @@ EXELIBS =\
        
 
 $(EXEFILE): $(EXEOBJS) $(EXELIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP)
 
 
index 96a3c4f9f11f083e36f15fcc933bad8eb4b8e97a..e9b716082aa6a3a87f310a6fa1b22de2c0f1388f 100644 (file)
@@ -80,7 +80,7 @@ EXELIBS =\
 
 
 $(EXEFILE): $(EXEOBJS)  $(EXELIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP) 
 
 ############################################################################
index 5f466a25f0d45578eb7bfd3b18c3f8b97cbbb2b3..a644f9ce212056fbdc3082d99af609a894c6d4a7 100644 (file)
@@ -53,7 +53,7 @@ EXELIBS =\
        $(DESTDIR)\lib\cm_dns.obj
 
 $(EXEFILE): $(EXEOBJS) $(EXELIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP)
 
 ############################################################################
index c4374295d1701c1cd73b66c2f5d279f67a483c3e..dd19ecd8a84000476b0dab8e856c33ec15d96f5f 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl $Id: aix-cc.m4,v 1.1 2002/08/15 21:10:23 shadow Exp $
+dnl $Id: aix-cc.m4,v 1.2 2004/06/03 05:13:29 shadow Exp $
 dnl 
 
 dnl We do not quite know how the version number of the xlc
@@ -14,7 +14,7 @@ dnl vac.C 4.4.0.0             440
 dnl vac.C 5.0.2.1              502
 dnl
 
-AC_DEFUN(AC_AIX_CC_GOOD, [
+AC_DEFUN([AC_AIX_CC_GOOD], [
 AIXCC="$CC"
 save_CC="$CC"
 if test "$CC" ; then
index 5a2087a4b148e50681aa30ed4c04ce9a61cbfc5b..87c627e003a036a15bcb3071dc969351e6ba0d34 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl $Id: bigendian.m4,v 1.2 2001/06/28 05:03:55 shadow Exp $
+dnl $Id: bigendian.m4,v 1.3 2004/06/03 05:13:29 shadow Exp $
 dnl
 
 dnl check if this computer is little or big-endian
@@ -7,7 +7,7 @@ dnl if we can figure it out at compile-time then don't define the cpp symbol
 dnl otherwise test for it and define it.  also allow options for overriding
 dnl it when cross-compiling
 
-AC_DEFUN(OPENAFS_CHECK_BIGENDIAN, [
+AC_DEFUN([OPENAFS_CHECK_BIGENDIAN], [
 AC_ARG_ENABLE(bigendian,
 [  --enable-bigendian  the target is big endian],
 openafs_cv_c_bigendian=yes)
index ea11ecb6abc2aee694dcc44d03e7b1617a4c44a2..18d7291629403c75c661049f2bfc27c90761ef95 100644 (file)
@@ -1,4 +1,4 @@
-AC_DEFUN(COMPILER_HAS_FUNCTION_MACRO, [
+AC_DEFUN([COMPILER_HAS_FUNCTION_MACRO], [
 AC_MSG_CHECKING(for __FUNCTION__ and __LINE__ macros)
 AC_CACHE_VAL(ac_cv_compiler_has_function_macro,
 [
index 354d15945dde4ffd1720d4790d9dfa300336dabd..81b23c5c647d06889507396a08edd8f0d2174bc6 100644 (file)
@@ -1,4 +1,4 @@
-AC_DEFUN(IRIX_SYS_SYSTM_H_HAS_MEM_FUNCS, [
+AC_DEFUN([IRIX_SYS_SYSTM_H_HAS_MEM_FUNCS], [
 AC_MSG_CHECKING(for mem* in sys/systm.h)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="$CPPFLAGS -D_KERNEL -D__STRING_H__"
index ee298b29aae3171e5b8e5aaf7dba3d806022553e..44f2d9f94ffb9b8281d76f2506391dccd01c9d77 100644 (file)
@@ -1,4 +1,4 @@
-AC_DEFUN(LINUX_INODE_SETATTR_RETURN_TYPE,[
+AC_DEFUN([LINUX_INODE_SETATTR_RETURN_TYPE],[
 AC_MSG_CHECKING(for inode_setattr return type)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
index ff54411c4a6f5384bb34aa58b6cb3ba5b1fccafd..cc7d39c1c6d2e39e08854c122f58f7d65c1994be 100644 (file)
@@ -1,4 +1,4 @@
-AC_DEFUN(LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_GFP_MASK, [
+AC_DEFUN([LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_GFP_MASK], [
 AC_MSG_CHECKING(for gfp_mask in struct address_space)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -13,7 +13,7 @@ ac_cv_linux_fs_struct_address_space_has_gfp_mask=no)])
 AC_MSG_RESULT($ac_cv_linux_fs_struct_address_space_has_gfp_mask)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_BYTES, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_BYTES], [
 AC_MSG_CHECKING(for i_bytes in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -28,7 +28,7 @@ ac_cv_linux_fs_struct_inode_has_i_bytes=no)])
 AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_bytes)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_ALLOC_SEM, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_ALLOC_SEM], [
 AC_MSG_CHECKING(for i_alloc_sem in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -43,7 +43,7 @@ ac_cv_linux_fs_struct_inode_has_i_alloc_sem=no)])
 AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_alloc_sem)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_TRUNCATE_SEM], [
 AC_MSG_CHECKING(for i_truncate_sem in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -58,7 +58,7 @@ ac_cv_linux_fs_struct_inode_has_i_truncate_sem=no)])
 AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_truncate_sem)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK, [
+AC_DEFUN([LINUX_FS_STRUCT_ADDRESS_SPACE_HAS_PAGE_LOCK], [
 AC_MSG_CHECKING(for page_lock in struct address_space)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -77,7 +77,7 @@ CPPFLAGS="$save_CPPFLAGS"])
 dnl LINUX_BUILD_VNODE_FROM_INODE (configdir, outputdir, tmpldir)
 dnl            defaults: (src/config, src/afs/LINUX, src/afs/linux)
 
-AC_DEFUN(LINUX_BUILD_VNODE_FROM_INODE, [
+AC_DEFUN([LINUX_BUILD_VNODE_FROM_INODE], [
 AC_MSG_CHECKING(whether to build osi_vfs.h)
 configdir=ifelse([$1], ,[src/config],$1)
 outputdir=ifelse([$2], ,[src/afs/LINUX],$2)
index 53abcfab13c43b7a60abdfad91f17f83a8ba3f6d..1f2afc072287b8d5264b0e4d852994a3c846184f 100644 (file)
@@ -1,4 +1,4 @@
-AC_DEFUN(LINUX_KERNEL_LINUX_SYSCALL_H,[
+AC_DEFUN([LINUX_KERNEL_LINUX_SYSCALL_H],[
   AC_MSG_CHECKING(for linux/syscall.h in kernel)
   if test -f "${LINUX_KERNEL_PATH}/include/linux/syscall.h"; then
     ac_linux_syscall=yes
@@ -9,7 +9,7 @@ AC_DEFUN(LINUX_KERNEL_LINUX_SYSCALL_H,[
   fi
 ])
 
-AC_DEFUN(LINUX_NEED_RHCONFIG,[
+AC_DEFUN([LINUX_NEED_RHCONFIG],[
 RHCONFIG_SP=""
 RHCONFIG_MP=""
 if test "x$enable_redhat_buildsys" = "xyes"; then
@@ -33,7 +33,7 @@ AC_SUBST(RHCONFIG_SP)
 AC_SUBST(RHCONFIG_MP)
 ])
 
-AC_DEFUN(LINUX_WHICH_MODULES,[
+AC_DEFUN([LINUX_WHICH_MODULES],[
 if test "x$enable_redhat_buildsys" = "xyes"; then
   MPS=Default
 else
@@ -79,3 +79,18 @@ fi
 AC_SUBST(MPS)
 ])
 
+AC_DEFUN([LINUX_KERNEL_SELINUX],[
+AC_MSG_CHECKING(for SELinux kernel)
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="-I${LINUX_KERNEL_PATH}/include $CPPFLAGS"
+AC_CACHE_VAL(ac_cv_linux_kernel_is_selinux,
+[
+AC_TRY_COMPILE(
+  [#include <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"])
index fb8c796ad4c59258ade96b7140cb8e4d11394ace..08e0c974bb450acf9e5510dc7bba866bc0e23919 100644 (file)
@@ -1,4 +1,4 @@
-AC_DEFUN(LINUX_COMPLETION_H_EXISTS, [
+AC_DEFUN([LINUX_COMPLETION_H_EXISTS], [
 AC_MSG_CHECKING(for linux/completion.h existance)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -18,7 +18,7 @@ AC_MSG_RESULT($ac_cv_linux_completion_h_exists)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_DEFINES_FOR_EACH_PROCESS, [
+AC_DEFUN([LINUX_DEFINES_FOR_EACH_PROCESS], [
 AC_MSG_CHECKING(for defined for_each_process)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -35,7 +35,7 @@ AC_MSG_RESULT($ac_cv_linux_defines_for_each_process)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_DEFINES_PREV_TASK, [
+AC_DEFUN([LINUX_DEFINES_PREV_TASK], [
 AC_MSG_CHECKING(for defined prev_task)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -52,7 +52,7 @@ AC_MSG_RESULT($ac_cv_linux_defines_prev_task)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_INIT_MM, [
+AC_DEFUN([LINUX_EXPORTS_INIT_MM], [
 AC_MSG_CHECKING(for exported init_mm)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -69,7 +69,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_init_mm)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_KALLSYMS_ADDRESS, [
+AC_DEFUN([LINUX_EXPORTS_KALLSYMS_ADDRESS], [
 AC_MSG_CHECKING(for exported kallsyms_address_to_symbol)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -86,7 +86,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_kallsyms_address)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_KALLSYMS_SYMBOL, [
+AC_DEFUN([LINUX_EXPORTS_KALLSYMS_SYMBOL], [
 AC_MSG_CHECKING(for exported kallsyms_symbol_to_address)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -103,7 +103,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_kallsyms_symbol)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_SYS_CALL_TABLE, [
+AC_DEFUN([LINUX_EXPORTS_SYS_CALL_TABLE], [
 AC_MSG_CHECKING(for exported sys_call_table)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -120,7 +120,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_call_table)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_IA32_SYS_CALL_TABLE, [
+AC_DEFUN([LINUX_EXPORTS_IA32_SYS_CALL_TABLE], [
 AC_MSG_CHECKING(for exported ia32_sys_call_table)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -137,7 +137,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_ia32_sys_call_table)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_SYS_CHDIR, [
+AC_DEFUN([LINUX_EXPORTS_SYS_CHDIR], [
 AC_MSG_CHECKING(for exported sys_chdir)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -154,7 +154,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_chdir)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_SYS_CLOSE, [
+AC_DEFUN([LINUX_EXPORTS_SYS_CLOSE], [
 AC_MSG_CHECKING(for exported sys_close)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -171,7 +171,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_close)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_SYS_WAIT4, [
+AC_DEFUN([LINUX_EXPORTS_SYS_WAIT4], [
 AC_MSG_CHECKING(for exported sys_wait4)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -188,7 +188,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_sys_wait4)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_EXPORTS_TASKLIST_LOCK, [
+AC_DEFUN([LINUX_EXPORTS_TASKLIST_LOCK], [
 AC_MSG_CHECKING(for exported tasklist_lock)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -205,7 +205,7 @@ AC_MSG_RESULT($ac_cv_linux_exports_tasklist_lock)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_CDEV, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_CDEV], [
 AC_MSG_CHECKING(for i_cdev in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -221,7 +221,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_cdev)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_DEVICES, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_DEVICES], [
 AC_MSG_CHECKING(for i_devices in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -237,7 +237,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_devices)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_DIRTY_DATA_BUFFERS], [
 AC_MSG_CHECKING(for i_dirty_data_buffers in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -253,7 +253,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_dirty_data_buffers)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_MAPPING_OVERLOAD, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_MAPPING_OVERLOAD], [
 AC_MSG_CHECKING(for i_mapping_overload in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -269,7 +269,7 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_mapping_overload)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_FS_STRUCT_INODE_HAS_I_MMAP_SHARED, [
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_MMAP_SHARED], [
 AC_MSG_CHECKING(for i_mmap_shared in struct inode)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -285,7 +285,23 @@ AC_MSG_RESULT($ac_cv_linux_fs_struct_inode_has_i_mmap_shared)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_RECALC_SIGPENDING_ARG_TYPE,[
+AC_DEFUN([LINUX_FS_STRUCT_INODE_HAS_I_SECURITY], [
+AC_MSG_CHECKING(for i_security in struct inode)
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
+AC_CACHE_VAL(ac_cv_linux_fs_struct_inode_has_i_security, 
+[
+AC_TRY_COMPILE(
+[#include <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"
@@ -300,7 +316,7 @@ AC_MSG_RESULT($ac_cv_linux_func_recalc_sigpending_takes_void)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT, [
+AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_PARENT], [
 AC_MSG_CHECKING(for parent in struct task_struct)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -316,7 +332,7 @@ AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_parent)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_REAL_PARENT, [
+AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_REAL_PARENT], [
 AC_MSG_CHECKING(for real_parent in struct task_struct)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -332,7 +348,7 @@ AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_real_parent)
 CPPFLAGS="$save_CPPFLAGS"])
 
 
-AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIG, [
+AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIG], [
 AC_MSG_CHECKING(for sig in struct task_struct)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -347,7 +363,7 @@ ac_cv_linux_sched_struct_task_struct_has_sig=no)])
 AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_sig)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGMASK_LOCK, [
+AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGMASK_LOCK], [
 AC_MSG_CHECKING(for sigmask_lock in struct task_struct)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
@@ -362,7 +378,7 @@ ac_cv_linux_sched_struct_task_struct_has_sigmask_lock=no)])
 AC_MSG_RESULT($ac_cv_linux_sched_struct_task_struct_has_sigmask_lock)
 CPPFLAGS="$save_CPPFLAGS"])
 
-AC_DEFUN(LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGHAND, [
+AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGHAND], [
 AC_MSG_CHECKING(for sighand in struct task_struct)
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="-I${LINUX_KERNEL_PATH}/include -I${LINUX_KERNEL_PATH}/include/asm/mach-${SUBARCH} -D__KERNEL__ $CPPFLAGS"
index 73724f66c3835585f2ad59c8258df0819e95bf56..209683da4ae17b5017424cf2fcc8f8ba23f79e3a 100644 (file)
@@ -1,5 +1,5 @@
 
-AC_DEFUN(OPENAFS_GCC_SUPPORTS_MARCH, [
+AC_DEFUN([OPENAFS_GCC_SUPPORTS_MARCH], [
 AC_MSG_CHECKING(if $CC accepts -march=pentium)
 save_CFLAGS="$CFLAGS"
 CFLAGS="-MARCH=pentium"
@@ -18,7 +18,7 @@ fi
 CFLAGS="$save_CFLAGS"
 ])
 
-AC_DEFUN(OPENAFS_GCC_NEEDS_NO_STRICT_ALIASING, [
+AC_DEFUN([OPENAFS_GCC_NEEDS_NO_STRICT_ALIASING], [
 AC_MSG_CHECKING(if $CC needs -fno-strict-aliasing)
 save_CFLAGS="$CFLAGS"
 CFLAGS="-fno-strict-aliasing"
@@ -35,7 +35,7 @@ fi
 CFLAGS="$save_CFLAGS"
 ])
 
-AC_DEFUN(OPENAFS_GCC_NEEDS_NO_STRENGTH_REDUCE, [
+AC_DEFUN([OPENAFS_GCC_NEEDS_NO_STRENGTH_REDUCE], [
 AC_MSG_CHECKING(if $CC needs -fno-strength-reduce)
 save_CFLAGS="$CFLAGS"
 CFLAGS="-fno-strength-reduce"
@@ -52,7 +52,7 @@ fi
 CFLAGS="$save_CFLAGS"
 ])
 
-AC_DEFUN(OPENAFS_GCC_SUPPORTS_NO_COMMON, [
+AC_DEFUN([OPENAFS_GCC_SUPPORTS_NO_COMMON], [
 AC_MSG_CHECKING(if $CC supports -fno-common)
 save_CFLAGS="$CFLAGS"
 CFLAGS="-fno-common"
@@ -69,7 +69,7 @@ fi
 CFLAGS="$save_CFLAGS"
 ])
 
-AC_DEFUN(OPENAFS_GCC_SUPPORTS_PIPE, [
+AC_DEFUN([OPENAFS_GCC_SUPPORTS_PIPE], [
 AC_MSG_CHECKING(if $CC supports -pipe)
 save_CFLAGS="$CFLAGS"
 CFLAGS="-pipe"
index 751444e65ca3ee0ed25c1abc6ea4c79f93644328..75d5ce4e1a260e66e62607fe2f08c892e611ba74 100644 (file)
@@ -1,5 +1,5 @@
 
-AC_DEFUN(OPENAFS_OSCONF, [
+AC_DEFUN([OPENAFS_OSCONF], [
 
 dnl defaults, override in case below as needed
 XCFLAGS='${DBG} ${OPTMZ}'
@@ -253,22 +253,6 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${MT_CC} -shared"
                ;;
 
-       i386_linux22)
-               CC="gcc -pipe"
-               CCOBJ="gcc -pipe"
-               MT_CC="gcc -pipe"
-               KERN_OPTMZ=-O2
-               LEX="flex -l"
-               MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}'
-               MT_LIBS="-lpthread"
-               PAM_CFLAGS="-O2 -Dlinux -DLINUX_PAM -fPIC"
-               SHLIB_LDFLAGS="-shared -Xlinker -x"
-               TXLIBS="-lncurses"
-               XCFLAGS="-O2 -D_LARGEFILE64_SOURCE"
-               YACC="bison -y"
-               SHLIB_LINKER="${MT_CC} -shared"
-               ;;
-
        i386_umlinux22)
                CC="gcc -pipe"
                CCOBJ="gcc -pipe"
@@ -285,7 +269,7 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${MT_CC} -shared"
                ;;
 
-       i386_linux24)
+       i386_linux*)
                CC="gcc -pipe"
                CCOBJ="gcc -pipe"
                MT_CC="gcc -pipe"
@@ -701,7 +685,7 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
                ;;
 
-       sunx86_57)
+       sun4x_510)
                CC="/opt/SUNWspro/bin/cc"
                CCOBJ="/opt/SUNWspro/bin/cc"
                LEX="lex"
@@ -722,6 +706,26 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
                ;;
 
+       sunx86_57)
+               CC="/opt/SUNWspro/bin/cc"
+               CCOBJ="/opt/SUNWspro/bin/cc"
+               LEX="lex"
+               LD="/usr/ccs/bin/ld"
+               MT_CC="/opt/SUNWspro/bin/cc"
+               MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}'
+               MT_LIBS="-lpthread -lsocket"
+               PAM_CFLAGS="-KPIC"
+               PAM_LIBS="-lc -lpam -lsocket -lnsl -lm"
+               SHLIB_CFLAGS="-KPIC"
+               SHLIB_LDFLAGS="-G -Bsymbolic"
+               TXLIBS="-lcurses"
+               XCFLAGS64='${XCFLAGS} -xarch=v9'
+               XCFLAGS="-dy -Bdynamic"
+               XLIBELFA="-lelf"
+               XLIBKVM="-lkvm"
+               XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl"
+               SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
+               ;;
 
        sunx86_58)
                CC="/opt/SUNWspro/bin/cc"
@@ -744,7 +748,26 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
                ;;
 
-
+       sunx86_510)
+               CC="/opt/SUNWspro/bin/cc"
+               CCOBJ="/opt/SUNWspro/bin/cc"
+               LEX="lex"
+               LD="/usr/ccs/bin/ld"
+               MT_CC="/opt/SUNWspro/bin/cc"
+               MT_CFLAGS='-mt -DAFS_PTHREAD_ENV ${XCFLAGS}'
+               MT_LIBS="-lpthread -lsocket"
+               PAM_CFLAGS="-KPIC"
+               PAM_LIBS="-lc -lpam -lsocket -lnsl -lm"
+               SHLIB_CFLAGS="-KPIC"
+               SHLIB_LDFLAGS="-G -Bsymbolic"
+               TXLIBS="-lcurses"
+               XCFLAGS64='${XCFLAGS} -xarch=v9'
+               XCFLAGS="-dy -Bdynamic"
+               XLIBELFA="-lelf"
+               XLIBKVM="-lkvm"
+               XLIBS="${LIB_AFSDB} -lsocket -lnsl -lintl -ldl"
+               SHLIB_LINKER="${CC} -G -dy -Wl,-M\$(srcdir)/mapfile -Bsymbolic -z text"
+               ;;
 esac
 
 #
index a0861dea2e331a63a9386196a19c1ed736a273cc..c8cc0f4cc1c98efe9235ff2f236ca5a1a0c7a3b2 100644 (file)
@@ -1,4 +1,4 @@
-AC_DEFUN(AC_FUNC_RES_SEARCH, [
+AC_DEFUN([AC_FUNC_RES_SEARCH], [
   ac_cv_func_res_search=no
   AC_TRY_LINK([
 #include <sys/types.h>
index 8b4752ddad282e48286c7ddadc147465deb295cf..7bee1cd9686261eb96d2366cb4fc77e7a6d4c508 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl $Id: solaris-cc.m4,v 1.2 2002/08/15 21:10:23 shadow Exp $
+dnl $Id: solaris-cc.m4,v 1.3 2004/06/03 05:13:30 shadow Exp $
 dnl 
 
 dnl
@@ -8,7 +8,7 @@ dnl whose digits correspond to the digits in the compiler
 dnl version. Thus compiler version 4.2.0 is 0x420.
 dnl
 
-AC_DEFUN(AC_SOLARIS_CC_GOOD, [
+AC_DEFUN([AC_SOLARIS_CC_GOOD], [
 SOLARISCC="$CC"
 save_CC="$CC"
 if test "$CC" ; then
index b5aa65702b2bc4fd458222f7137c4507817d9de5..c26aa1c018be893248afba29c51bf55ac41c1c0e 100644 (file)
@@ -1,4 +1,4 @@
-AC_DEFUN(SOLARIS_UFSVFS_HAS_DQRWLOCK, [
+AC_DEFUN([SOLARIS_UFSVFS_HAS_DQRWLOCK], [
 AC_MSG_CHECKING(for vfs_dqrwlock in struct ufsvfs)
 AC_CACHE_VAL(ac_cv_solaris_ufsvfs_has_dqrwlock,
 [
index 01d78d0f5f9834ff7cc374c7a7b2136d8f0cec00..3fc22c6ad9a3486287d640f775007eb9cef8caa3 100644 (file)
@@ -1,4 +1,4 @@
-AC_DEFUN(SOLARIS_FS_HAS_FS_ROLLED, [
+AC_DEFUN([SOLARIS_FS_HAS_FS_ROLLED], [
 AC_MSG_CHECKING(for fs_rolled in struct proc)
 AC_CACHE_VAL(ac_cv_solaris_fs_has_fs_rolled,
 [
index 6764e421588e775427380df43bbf8f960fae270a..a350a600056f859b10b1f51624948a27f47536dc 100644 (file)
@@ -1,4 +1,4 @@
-AC_DEFUN(SOLARIS_PROC_HAS_P_COREFILE, [
+AC_DEFUN([SOLARIS_PROC_HAS_P_COREFILE], [
 AC_MSG_CHECKING(for p_corefile in struct proc)
 AC_CACHE_VAL(ac_cv_solaris_proc_has_p_corefile,
 [
index fb073793adf02a77e6a5b805b27bafb9905df4de..3101731252c1df44f436a39faff67fe38a1da6e5 100644 (file)
@@ -347,9 +347,18 @@ idirs: doclink
 !      IF (!EXIST($(OJT)\WINNT\install\InstallShield5))
                $(MKDIR) $(OJT)\WINNT\install\InstallShield5
 !      ENDIF
+!      IF (!EXIST($(OJT)\WINNT\install\loopback))
+               $(MKDIR) $(OJT)\WINNT\install\loopback
+!      ENDIF
 !      IF (!EXIST($(OJT)\WINNT\install\NSIS))
                $(MKDIR) $(OJT)\WINNT\install\NSIS
 !      ENDIF
+!      IF (!EXIST($(OJT)\WINNT\install\wix))
+               $(MKDIR) $(OJT)\WINNT\install\wix
+!      ENDIF
+!      IF (!EXIST($(OJT)\WINNT\install\wix\custom))
+               $(MKDIR) $(OJT)\WINNT\install\wix\custom
+!      ENDIF
 !      IF (!EXIST($(OJT)\WINNT\install\Win9x))
                $(MKDIR) $(OJT)\WINNT\install\Win9x
 !      ENDIF
index b820297a033fbe9b0778a1883990f32410105845..7ab2fe65a5850b2ed719fc55785f826cee776544 100644 (file)
@@ -79,11 +79,12 @@ LIB = $(AFSDEV_LIB)
 #define used in WinNT/2000 installation and program version display
 AFSPRODUCT_VER_MAJOR=1
 AFSPRODUCT_VER_MINOR=3
-AFSPRODUCT_VER_PATCH=6400
+AFSPRODUCT_VER_PATCH=6500
 AFSPRODUCT_VER_BUILD=0
 AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
 AFSPRODUCT_FILE_VERSION=$(AFSPRODUCT_VER_MAJOR),$(AFSPRODUCT_VER_MINOR),$(AFSPRODUCT_VER_PATCH),$(AFSPRODUCT_VER_BUILD)
-CELLNAME_DEFAULT=Your Cell Name
+# Set CELLNAME_DEFAULT to "your cell name"
+CELLNAME_DEFAULT=openafs.org
 CELLSERVDB_INSTALL=CellServDB.GrandCentral
 CELLSERVDB_WEB=http://grand.central.org/dl/cellservdb/CellServDB
 TARGETOS = WINNT
@@ -166,7 +167,7 @@ OUT=$(OJT)\$(RELDIR)
 # !ENDIF
 
 !IF ("$(APPVER)" == "")
-APPVER=4.0
+APPVER=5.0
 !ENDIF
 
 
@@ -242,7 +243,7 @@ afscdefs = $(afscdefs) /G7 /GT /GS
 
 !IF ("$(AFSDEV_BUILDTYPE)" == "FREE")
 
-afscflags = $(afscflags) /Ox
+afscflags = $(afscflags) /Ox /Zi
 cdebug = $(cdebug:-Od=) # avoid annoying override warning (D4025)
 cvarsdll = $(cvarsdll:-MDd=-MD)
 NODEBUG=1
@@ -350,7 +351,7 @@ mfclibsdll = $(mfclibsdll:msvcrt.lib=)
 # Link with binmode.obj; files will be opened in binary mode by default.
 !IF ("$(AFSDEV_BUILDTYPE)" == "FREE")
 
-ldebug=
+ldebug=/DEBUG /PDB:$*.pdb 
 EXEPREP = rebase -b 0x00400000 -x $(@D) -q $@
 DLLPREP = rebase -i $(DESTDIR)\NTDllmap.txt -x $(@D) -q $@
 
index c568352cbb7ee4ae741b695fe47ccef01494299b..ceda90e576bb9a18548361ec6a847e7ef17f1027 100644 (file)
@@ -46,8 +46,8 @@
 #define SYS_NAME_ID_hp_ux102            414
 #define SYS_NAME_ID_hp_ux110            415
 #define SYS_NAME_ID_hp_ux11i             416
-#define SYS_NAME_ID_ia64_hpux1122               417
-#define SYS_NAME_ID_ia64_hpux1123               418
+#define SYS_NAME_ID_ia64_hpux1122       417
+#define SYS_NAME_ID_ia64_hpux1123       418
 
 #define SYS_NAME_ID_mac2_51             500
 #define SYS_NAME_ID_mac_aux10           501
 #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
index 9ec0a3fe58b1e7d27e9ef05085485a1c24f15ede..150c3bf3a5f1a6c3215dbcdcb485e9cdd3c45c84 100644 (file)
 /* 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
 
index 641dc8d051a7dde0f42c04a678cfc70375270fc2..392c469bcd71fe88ac3da98726c23962af9f886a 100644 (file)
 #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>
index 9c1ef4063b54d368e104474d4fda86e4d73517a7..2d1fdd04ca33cadb309e3833bc64c3ffe2f3ed18 100644 (file)
@@ -52,7 +52,7 @@
 #endif
 
 #define AFS_HAVE_FFS            1      /* Use system's ffs. */
-#define AFS_HAVE_STATVFS       0       /* System doesn't supports statvfs */
+#define AFS_HAVE_STATVFS       1       /* System supports statvfs */
 
 #define AFS_GCPAGS             0       /* if nonzero, garbage collect PAGs */
 #define AFS_USE_GETTIMEOFDAY    1      /* use gettimeofday to implement rx clock */
index becb467733d483b4b5698a3d94e1b64c23abd868..7d2b162aad52f62d0c5febc1c60b2344d10169ce 100644 (file)
@@ -14,6 +14,7 @@
 #define AFS_DARWIN_ENV
 #define AFS_NONFSTRANS
 #define AFS_SYSCALL             230
+#define DARWIN_REFBASE 0
 
 /* File system entry (used if mount.h doesn't define MOUNT_AFS */
 #define AFS_MOUNT_AFS    "afs"
@@ -77,6 +78,7 @@
 #define AFS_USR_DARWIN_ENV
 #define AFS_NONFSTRANS
 #define AFS_SYSCALL             230
+#define DARWIN_REFBASE 0
 
 /* File system entry (used if mount.h doesn't define MOUNT_AFS */
 #define AFS_MOUNT_AFS    "afs"
index 59b9c0421e111226633de6a400c724d92051d14f..2c36b97f316f8d00bd5a9f5ac2f659ae3f5cf55e 100644 (file)
@@ -15,6 +15,7 @@
 #define AFS_DARWIN13_ENV
 #define AFS_NONFSTRANS
 #define AFS_SYSCALL             230
+#define DARWIN_REFBASE 0
 
 /* File system entry (used if mount.h doesn't define MOUNT_AFS */
 #define AFS_MOUNT_AFS    "afs"
@@ -80,6 +81,7 @@
 #define AFS_USR_DARWIN13_ENV
 #define AFS_NONFSTRANS
 #define AFS_SYSCALL             230
+#define DARWIN_REFBASE 0
 
 /* File system entry (used if mount.h doesn't define MOUNT_AFS */
 #define AFS_MOUNT_AFS    "afs"
index 6652e2f8446b79d32e4cb2370eede1cf66aff509..cb46448047edd1f97ce7a3f983b94d25ce4e7b3a 100644 (file)
@@ -17,6 +17,7 @@
 #define AFS_NONFSTRANS
 #define AFS_SYSCALL             230
 #define AFS_NAMEI_ENV 1
+#define DARWIN_REFBASE 0
 
 /* File system entry (used if mount.h doesn't define MOUNT_AFS */
 #define AFS_MOUNT_AFS    "afs"
@@ -84,6 +85,7 @@
 #define AFS_USR_DARWIN14_ENV
 #define AFS_NONFSTRANS
 #define AFS_SYSCALL             230
+#define DARWIN_REFBASE 0
 
 /* File system entry (used if mount.h doesn't define MOUNT_AFS */
 #define AFS_MOUNT_AFS    "afs"
index e0cb9c05ea571d00b2fedd6544f3a1a571806323..82d695c32d10e3238ca89fa0cf6ee59ff06e0134 100644 (file)
@@ -20,6 +20,7 @@
 #define AFS_NONFSTRANS
 #define AFS_SYSCALL             230
 #define AFS_NAMEI_ENV 1
+#define DARWIN_REFBASE 3
 
 /* File system entry (used if mount.h doesn't define MOUNT_AFS */
 #define AFS_MOUNT_AFS    "afs"
@@ -92,6 +93,7 @@
 #define AFS_USR_DARWIN70_ENV
 #define AFS_NONFSTRANS
 #define AFS_SYSCALL             230
+#define DARWIN_REFBASE 0
 
 /* File system entry (used if mount.h doesn't define MOUNT_AFS */
 #define AFS_MOUNT_AFS    "afs"
index d69c1e16e3df19176c22f6a54c56eca712a18b11..433f81df7a5c3dd0f620883f7dcf510161ec548a 100644 (file)
 #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) */
diff --git a/src/config/param.sun4x_510.h b/src/config/param.sun4x_510.h
new file mode 100644 (file)
index 0000000..8403141
--- /dev/null
@@ -0,0 +1,190 @@
+#ifndef UKERNEL
+/* This section for kernel libafs compiles only */
+
+#ifndef        AFS_PARAM_H
+#define        AFS_PARAM_H
+
+#define AFS_VFS_ENV            1
+/* Used only in vfsck code; is it needed any more???? */
+
+#define AFS_VFSINCL_ENV                1       /* NOBODY uses this.... */
+#define AFS_GREEDY43_ENV       1       /* Used only in rx/rx_user.c */
+#define AFS_ENV                        1
+#define AFS_SUN_ENV            1
+#define AFS_SUN5_ENV           1
+#define        AFS_SUN52_ENV           1
+#define        AFS_SUN53_ENV           1
+#define        AFS_SUN54_ENV           1
+#define        AFS_SUN55_ENV           1
+#define        AFS_SUN56_ENV           1
+#define AFS_SUN57_ENV          1
+#define AFS_SUN58_ENV          1
+#define AFS_SUN59_ENV          1
+#define AFS_SUN510_ENV         1
+
+#define AFS_64BIT_ENV          1       /* Defines afs_int32 as int, not long. */
+
+#define AFS_HAVE_FLOCK_SYSID   1
+
+#ifdef AFS_NAMEI_ENV
+#define AFS_64BIT_IOPS_ENV     1       /* needed for NAMEI... */
+#else /* AFS_NAMEI_ENV */
+#define AFS_3DISPARES          1       /* Utilize the 3 available disk inode 'spares' */
+#endif /* AFS_NAMEI_ENV */
+
+#include <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) */
diff --git a/src/config/param.sunx86_510.h b/src/config/param.sunx86_510.h
new file mode 100644 (file)
index 0000000..102a96f
--- /dev/null
@@ -0,0 +1,204 @@
+#ifndef UKERNEL
+/* This section for kernel libafs compiles only */
+
+/*
+ * Copyright 2000, International Business Machines Corporation and others.
+ * All Rights Reserved.
+ * 
+ * This software has been released under the terms of the IBM Public
+ * License.  For details, see the LICENSE file in the top-level source
+ * directory or online at http://www.openafs.org/dl/license10.html
+ */
+
+#ifndef        AFS_PARAM_H
+#define        AFS_PARAM_H
+
+#define AFS_VFS_ENV            1
+/* Used only in vfsck code; is it needed any more???? */
+
+#define AFS_VFSINCL_ENV                1       /* NOBODY uses this.... */
+#define AFS_GREEDY43_ENV       1       /* Used only in rx/rx_user.c */
+#define AFS_ENV                        1
+#define AFS_SUN_ENV            1
+#define AFS_SUN5_ENV           1
+#define        AFS_SUN52_ENV           1
+#define        AFS_SUN53_ENV           1
+#define        AFS_SUN54_ENV           1
+#define        AFS_SUN55_ENV           1
+#define        AFS_SUN56_ENV           1
+#define AFS_SUN57_ENV          1
+#define AFS_SUN58_ENV          1
+#define AFS_SUN59_ENV          1
+#define AFS_SUN510_ENV         1
+#define AFS_X86_ENV            1
+
+#define AFS_64BIT_ENV          1       /* Defines afs_int32 as int, not long. */
+
+#define AFS_HAVE_FLOCK_SYSID    1
+
+#include <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) */
index c887475fa291abe930f7097857e23426bed6250c..f5380264f77a51eaae3a233b7591112ea0210c7a 100644 (file)
@@ -179,5 +179,6 @@ struct cm_initparams {
 /* Coordinated 'C' pioctl's */
 #define VIOC_NEWALIAS          _CVICEIOCTL(1)  /* create new cell alias */
 #define VIOC_GETALIAS          _CVICEIOCTL(2)  /* get alias info */
+#define VIOC_CBADDR            _CVICEIOCTL(3)  /* push callback addr */
 
 #endif /* AFS_VENUS_H */
index ac46e5d2a1864939a4fba9767380c0acd6b2cdda..9dbefd946787102142d22bd68611df0c4880646c 100644 (file)
@@ -53,9 +53,6 @@ all: \
 #
 # Build rules
 #
-.c.o:
-       ${CC} -c ${CFLAGS} $<
-
 libdes.a: ${OBJS} AFS_component_version_number.o
        $(RM) -f libdes.a
        $(AR) crv libdes.a ${OBJS} AFS_component_version_number.o
index 6903771bff8bc23c3cfa9546e4aca1aced23ff62..40cb7dafc3f9cd327528e1291b697dcbc128f2da 100644 (file)
@@ -119,7 +119,8 @@ ${DEST}/include/afs/afsint.h: afsint.h
 
 clean:
        $(RM) -f *.o *.cs.c *.ss.c *.er.c *.a *.xdr.c core \
-               afsint.h afscbint.h AFS_component_version_number.c 
+               afsint.h afscbint.h AFS_component_version_number.c   \
+       Kvice.h Kcallback.h
 
 include ../config/Makefile.version
 
index bc00cd9c78ba964150df8b0b2842fc4643ea099f..7637d22f46c5d051891d99530179274eaed147ce 100644 (file)
@@ -698,3 +698,7 @@ GiveUpAllCallBacks(
 GetCapabilities(
   Capabilities *capabilities
 ) = 65540;
+
+CallBackRxConnAddr(
+  IN afs_int32 *addr
+) = 65541;
index 447bf4d78e56eaa65eb252eb2f4fe764a4968ac1..d89b5a842351d914867275a9640e4e4ed3557699 100644 (file)
@@ -125,7 +125,7 @@ KASERVER_EXELIBS =\
        $(DESTDIR)\lib\afs\afsprocmgmt.lib
 
 $(KASERVER): $(KASERVER_OBJS) $(AFSLIBS) $(KASERVER_EXELIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP) 
 
 #build $(OUT)\kadatabase.obj
@@ -149,7 +149,7 @@ KAS_OBJS =\
        $(OUT)\kas.res
        
 $(KAS): $(KAS_OBJS) $(AFSLIBS) $(KAUTH_LIBFILE) $(TOKENLIB)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP) 
 
 ########### Misc Exes #######################################################
@@ -162,20 +162,20 @@ KPASSWD_OBJS =\
        $(OUT)\kpasswd.res
 
 $(KPASSWD_EXEFILE): $(KPASSWD_OBJS) $(AFSLIBS) $(KAUTH_LIBFILE) $(TOKENLIB)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP)
 
 #kpwvalid.exe
 $(OUT)\kpwvalid.exe: $(OUT)\kpwvalid.obj $(AFSLIBS) $(KAUTH_LIBFILE)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
 
 #kdb.exe - Not implemented for NT - because dbm not available on NT
 #kdb.exe: $(OUT)\kdb.obj $(AFSLIBS) $(KAUTH_LIBFILE) 
-#      $(EXECONLINK)
+#      $(EXECONLINK) dnsapi.lib
 
 #rebuild.exe 
 $(OUT)\rebuild.exe: $(OUT)\rebuild.obj $(OUT)\kautils.obj $(AFSLIBS) 
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
 
 ############################################################################
 # Definitions for generating versioninfo resources
index 176e19dbc0632b84fb904a44ec36e893f8b952b0..7f1ba214587b92825c06be888521caf96e162182 100644 (file)
@@ -12,7 +12,7 @@
 #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>
@@ -211,10 +211,10 @@ CommandProc(as, arock)
      char *arock;
      struct cmd_syndesc *as;
 {
-    char name[MAXKTCNAMELEN];
-    char instance[MAXKTCNAMELEN];
-    char cell[MAXKTCREALMLEN];
-    char realm[MAXKTCREALMLEN];
+    char name[MAXKTCNAMELEN]="";
+    char instance[MAXKTCNAMELEN]="";
+    char cell[MAXKTCREALMLEN]="";
+    char realm[MAXKTCREALMLEN]="";
     afs_int32 serverList[MAXSERVERS];
     char *lcell;               /* local cellname */
     int code;
index ef3443c2ad003d32911df9e4f3e80bb8fc6400a8..61042771854dc466a458b4457acf04022f61cdb3 100644 (file)
@@ -85,7 +85,7 @@ setup:
        ln -fs /usr/include/sys sys
        ln -fs /usr/include/nfs nfs
        ln -fs /usr/include/jfs ufs
-       for m in $${KMODS} ; do \
+       for m in ${KMODS} ; do \
                KDIR=MODLOAD-$$m ; \
                mkdir -p $${KDIR} ; \
                ln -fs ../Makefile $${KDIR}/Makefile ; \
@@ -94,7 +94,7 @@ setup:
        done
 
 ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}:
-       for m in $${KMODS} ; do \
+       for m in ${KMODS} ; do \
                KDIR=MODLOAD-$$m ; \
                echo Building in directory: $${KDIR} ; \
                if [ "$$m" = "32" ] ; then \
index efba6f412c3746c8c1a9ff9f84e3bf3ac96558d3..620de5095ca16d8242d97c5f62f39279d2e4e35e 100644 (file)
@@ -36,8 +36,10 @@ LINUX_KERNEL_PATH=@LINUX_KERNEL_PATH@
 
 # 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@
@@ -86,7 +88,8 @@ CCFLAGS = $(COMMON_KERN_CFLAGS) -ffixed-r13 -mfixed-range=f10-f15,f32-f127 -fali
 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)
 
@@ -101,6 +104,12 @@ DESTDIRS=linux_destdirs
 
 include Makefile.common
 
+<i386_linux26>
+LINUX_MODULE_EXT=ko
+<all -i386_linux26>
+LINUX_MODULE_EXT=o
+<all>
+
 LINUX_MODULE_NAME=
 LOCAL_SMP_DEF=
 
@@ -110,7 +119,7 @@ setup:
        for m in ${MPS} ; do \
                KDIR=$(KOBJ)-${LINUX_VERSION}${LINUX_MODULE_NAME}-$$m; \
                mkdir -p $${KDIR}; \
-               ln -fs ../Makefile $${KDIR}/Makefile ; \
+               ln -fs ../Makefile $${KDIR}/Makefile.afs ; \
                ln -fs ../Makefile.common $${KDIR}/Makefile.common; \
                ln -fs ../config $${KDIR}/config; \
        done 
@@ -135,7 +144,7 @@ ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}:
        ln -fs ${LINUX_KERNEL_PATH}/include/asm-parisc asm
 <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
@@ -153,8 +162,6 @@ ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}:
        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 ; \
@@ -173,8 +180,9 @@ ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}:
                        TARG=libafs ; \
                fi ; \
                cd $${KDIR} ; \
-               $(MAKE) SMP_DEF="$${SMP_DEF}" $@_$${TARG} CLIENT=${LINUX_VERSION}${LINUX_MODULE_NAME} || exit $$?; \
+               $(MAKE) -f Makefile.afs SMP_DEF="$${SMP_DEF}" $@_$${TARG} CLIENT=${LINUX_VERSION}${LINUX_MODULE_NAME} KDIR=$${KDIR} || exit $$?; \
                cd ../ ; \
+<all>
        done
 
 linux_compdirs_libafs: depsrcs libafs
@@ -193,10 +201,10 @@ linux_destdirs_libafs.bm: dest_libafs.bm
 
 # Below this line are targets when in the COMMON directory:
 # For Linux there is no kernel NFS server.
-LIBAFS = libafs-${CLIENT}.o
-LIBAFS_MP = libafs-${CLIENT}.mp.o
-LIBAFS_EP = libafs-${CLIENT}.ep.o
-LIBAFS_BM = libafs-${CLIENT}.bm.o
+LIBAFS = libafs-${CLIENT}.${LINUX_MODULE_EXT}
+LIBAFS_MP = libafs-${CLIENT}.mp.${LINUX_MODULE_EXT}
+LIBAFS_EP = libafs-${CLIENT}.ep.${LINUX_MODULE_EXT}
+LIBAFS_BM = libafs-${CLIENT}.bm.${LINUX_MODULE_EXT}
 
 INST_LIBAFS = ${DESTDIR}${afskerneldir}/${LIBAFS}
 INST_LIBAFS_MP = ${DESTDIR}${afskerneldir}/${LIBAFS_MP}
@@ -221,6 +229,17 @@ libafs.ep: $(LIBAFS_EP)
 libafs.bm: $(LIBAFS_BM)
        echo BM Build Complete
 
+<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)
@@ -236,6 +255,7 @@ ${LIBAFS_EP}: $(AFSAOBJS) $(AFSNONFSOBJS)
 ${LIBAFS_BM}: $(AFSAOBJS) $(AFSNONFSOBJS)
        $(RM) -f $@
        $(LD) -r -o $@ $(AFSAOBJS) $(AFSNONFSOBJS)
+<all>
 
 install_libafs:        $(INST_LIBAFS) 
        echo SP Install Complete
index 8cc86d72c99809ca26387f7386d61a6608ddaf98..ae3886a9f6f71d98348ce325213f69d6b21f603e 100644 (file)
@@ -33,7 +33,7 @@ DEFINES= -DAFSDEBUG -DKERNEL -DAFS -DVICE -DNFS -DUFS -DINET -DQUOTA -DGETMOUNT
 KDEFS= -Dsun4c -DSUN4C_60 -DNFSCLIENT -DSYSACCT -DOLDSCSI -DVDDRV -D_KERNEL \
        -DSYSV -dn ${ARCH_DEFS}
 
-<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 
 
@@ -43,7 +43,7 @@ CFLAGS=-I. -I.. -I${TOP_OBJDIR}/src/config ${FSINCLUDES} $(DEFINES) $(KDEFS) $(K
 # Name of directory to hold object files and libraries.
 <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
 
 
@@ -53,7 +53,7 @@ COMPDIRS = single_compdir
 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
@@ -85,7 +85,7 @@ setup:
 ## This is the target for a Solaris 7. Here we build both the 32 bit and
 ## the 64 bit libafs in MODLOAD32 and MODLOAD64 directories respectively
 
-<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 ; \
@@ -121,7 +121,7 @@ INST_LIBAFSNONFS = ${DESTDIR}${afskerneldir}/${LIBAFSNONFS}
 DEST_LIBAFS = ${DEST}/root.client/usr/vice/etc/modload/${LIBAFS}
 DEST_LIBAFSNONFS = ${DEST}/root.client/usr/vice/etc/modload/${LIBAFSNONFS}
 
-<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
 
index 3355afa7fca39d272ccc7c42528dbae698154723..47cb2eec71b51990075c6867c17d9361e0ca02fb 100644 (file)
@@ -6,3 +6,4 @@ afs.startup
 redhat.sh
 sgi_master
 sgi_system
+make_kbuild_makefile.pl
diff --git a/src/libafs/make_kbuild_makefile.pl b/src/libafs/make_kbuild_makefile.pl
new file mode 100644 (file)
index 0000000..03584cc
--- /dev/null
@@ -0,0 +1,104 @@
+#!/usr/bin/perl
+# make_kbuild_makefile.pl
+# Generate a Makefile for use with the Linux 2.6+ kernel build system
+#
+# Usage: make_kbuild_makefile.pl ${KDIR} ${TARG} Makefiles...
+#
+# The specified makefiles will be scanned for variable values
+# The module ${TARG} will be built in ${TOP_SRCDIR}/src/libafs/${KDIR}.
+# It will include objects listed in ${AFSAOBJS} and ${AFSNONFSOBJS}
+# Appropriate source files for each object will be symlinked into ${KDIR}
+# EXTRA_CFLAGS will be set to ${CFLAGS} ${COMMON_INCLUDE}
+
+# Produces ${KDIR}/Makefile, suitable for use with kbuild
+
+use IO::File;
+
+
+if (@ARGV < 3) {
+  die "Usage: echo objects... | $0 KDIR TARG Makefiles...\n";
+}
+
+($KDIR, $TARG, @Makefiles) = @ARGV;
+$TARG =~ s/\.k?o$//;
+
+## Read in all of the Makefiles given on the command line
+## Our ultimate goal is to find the correct source file for each object.
+## We make the following assumptions:
+## - Every variable is defined before it is used.
+## - Each of our objects has exactly one dependency, which is the name
+##   of the source file that needs to be symlinked into $KDIR
+foreach $mf (@Makefiles) {
+  $F = new IO::File($mf, O_RDONLY) or die "$mf: $!\n";
+  $text = '';
+  while (<$F>) {
+    chomp;
+    $text .= $_;
+    next if $text =~ s/\\$/ /;                 ## Continuation
+    if ($text =~ /^#/) { $text = ''; next }    ## Comment
+    #print STDERR "<< $text\n";
+
+    $text =~ s/\$\((\w+)\)/$vars{$1}/g;        # Substitute variables
+    $text =~ s/\$\{(\w+)\}/$vars{$1}/g;
+    #print STDERR ">> $text\n";
+
+    if ($text =~ /^\s*(\S+)\s*=/) {            ## Variable definition
+      ($key, $value) = ($1, $');
+      $value =~ s/^\s*//;                      # Remove leading and
+      $value =~ s/\s*$//;                      # trailing whitespace
+      $vars{$key} = $value;                    # Store it
+    }
+    elsif ($text =~ /^(\S+\.o):\s*(\S+\.c)/) {    ## Dependency
+      $deps{$1} = $2;
+    }
+    $text = '';
+  }
+  $F->close();
+}
+
+
+$KDIR = "$vars{TOP_OBJDIR}/src/libafs/$KDIR";
+@objects = (split(' ', $vars{AFSAOBJS}), split(' ', $vars{AFSNONFSOBJS}));
+
+$MV = new IO::File("$vars{TOP_OBJDIR}/src/config/Makefile.version", O_RDONLY)
+        or die "$vars{TOP_OBJDIR}/src/config/Makefile.version: $!\n";
+while (<$MV>) {
+  s#AFS_component_version_number#$KDIR/AFS_component_version_number#g;
+  $MakefileVersion .= $_;
+}
+$MV->close();
+
+if (! -d $KDIR) {
+  mkdir($KDIR, 0777) or die "$KDIR: $!\n";
+}
+
+
+foreach (@objects) {
+  ($src = $_) =~ s/\.o$/.c/;
+  die "No source known for $_\n" unless exists $deps{$_};
+  if (-e "$KDIR/$src" || -l "$KDIR/$src") {
+    unlink("$KDIR/$src") or die "$KDIR/$src: $!\n";
+  }
+  next unless $deps{$_} =~ m#/#;
+  symlink($deps{$_}, "$KDIR/$src") or die "$KDIR/$src: $!\n";
+}
+
+foreach $src (qw(h sys netinet)) {
+  if (-e "$KDIR/$src" || -l "$KDIR/$src") {
+    unlink("$KDIR/$src") or die "$KDIR/$src: $!\n";
+  }
+  symlink("$vars{LINUX_KERNEL_PATH}/include/linux", "$KDIR/$src")
+    or die "$KDIR/$src: $!\n";
+}
+
+$cflags = "$vars{CFLAGS} $vars{COMMON_INCLUDE}";
+$cflags =~ s#-I(?!/)#-I$KDIR/#g;
+$cflags =~ s/\s+/ \\\n /g;
+$F = new IO::File("$KDIR/Makefile", O_WRONLY|O_CREAT|O_TRUNC, 0666)
+     or die "$KDIR/Makefile: $!\n";
+print $F "EXTRA_CFLAGS=$cflags\n";
+print $F "obj-m := $TARG.o\n";
+print $F "$TARG-objs := ", join("\\\n $_", @objects), "\n";
+print $F "\n$MakefileVersion\n";
+$F->close() or die "$KDIR/Makefile: $!\n";
+
index ec46254702d2ae4fc832e1a30bd6051c38b7d3ed..903903f4f6151f5149ab0c0a73090a33fd812b15 100644 (file)
@@ -56,7 +56,7 @@ process.o     : process.s process.i386.s process.c
                ${AS} process.ss -o process.o ;  \
                $(RM) -f process.S ;;\
        ncrx86_* | sunx86_*) \
-               /usr/ccs/lib/cpp -P -I${TOP_INCDIR} ${srcdir}/process.i386.s process.ss; \
+               /usr/ccs/lib/cpp -P -D__i386 -DIGNORE_STDS_H -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s process.ss; \
                ${AS} -o process.o process.ss; \
                $(RM) process.ss ;; \
        alpha_nbsd* ) \
@@ -71,7 +71,7 @@ process.o     : process.s process.i386.s process.c
        ia64_hpux11* | hp_ux11* ) \
                ${CC} ${CFLAGS} -c ${srcdir}/process.c;; \
        i386_*) \
-               /lib/cpp -P -I${TOP_INCDIR} ${srcdir}/process.i386.s process.ss; \
+               /lib/cpp -P -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s process.ss; \
                ${AS} process.ss -o process.o; \
                $(RM) process.ss ;; \
        *) \
index 6ca4c4075588b943ed7c4c20494d19126dfbf740..3b88ef70a3a97628f613ca0cba272cc803aefa5d 100644 (file)
@@ -34,8 +34,9 @@
 /*
  * For common usage of elf platforms
  *
- * $Id: lwp_elf.h,v 1.1 2003/09/24 19:02:05 shadow Exp $
+ * $Id: lwp_elf.h,v 1.2 2004/06/24 17:38:32 shadow Exp $
  */
+#include <afs/param.h>
 
 #ifndef _C_LABEL
 #if !defined(SYSV) && !defined(__ELF__) && !defined(AFS_SUN5_ENV)
index dec729919988fe111ad2f40d616431008d3ef031..aab27c2ddba912b1fb17c1d7d15a03f1e67625d2 100644 (file)
@@ -45,38 +45,23 @@ static char inline[maxlinesize];
 static char outline[maxlinesize];
 static struct macro *macrohashtable[macrohashsize];
 
-static
-error(a0, a1)
-     char *a0, *a1;
+static int
+error(char *a0, char *a1)
 {
     fprintf(stderr, a0, a1);
     putc('\n', stderr);
     exit(1);
 }
 
-static
-fileerror(a0, a1)
-     char *a0, *a1;
+static int
+fileerror(char *a0, char *a1);
 {
     fprintf(stderr, "%s; line %d: ", filep->name, filep->lineno);
     error(a0, a1);
 }
 
-static char *
-strsav(s)
-     char *s;
-{
-    char *p;
-
-    if ((p = malloc(strlen(s) + 1)) == NULL)
-       error("Out of Memory");
-    strcpy(p, s);
-    return p;
-}
-
 static struct macro **
-macrolookup(name)
-     char *name;
+macrolookup(char *name)
 {
     register struct macro **mpp, *mp;
     register char *cp;
@@ -89,9 +74,8 @@ macrolookup(name)
     return mpp;
 }
 
-static
-macroundefine(name)
-     char *name;
+static void
+macroundefine(char *name)
 {
     register struct macro **mpp, *mp;
 
@@ -104,11 +88,8 @@ macroundefine(name)
     }
 }
 
-static
-macrodefine(name, value, mode)
-     char *name;
-     char *value;
-     enum macromode mode;
+static void
+macrodefine(char *name, char *value, enum macromode mode)
 {
     register struct macro **mpp, *mp;
 
@@ -120,18 +101,17 @@ macrodefine(name, value, mode)
     } else {
        if ((mp = (struct macro *)malloc(sizeof(struct macro))) == 0)
            error("Out of memory");
-       mp->name = strsav(name);
+       mp->name = strdup(name);
        mp->next = 0;
        *mpp = mp;
     }
     mp->mode = mode;
-    mp->value = strsav(value);
+    mp->value = strdup(value);
 }
 
 
 static char *
-macroexpand(dst, src)
-     register char *dst, *src;
+macroexpand(register char *dst, register char *src)
 {
     char name[macronamesize];
     register char *np;
@@ -174,9 +154,8 @@ macroexpand(dst, src)
 
 
 
-static
-readline(line)
-     char *line;
+static int
+readline(char *line)
 {
     while (filep >= &files[0]) {
        filep->lineno++;
@@ -192,17 +171,15 @@ readline(line)
     return 0;
 }
 
-static
-writeline(line)
-     char *line;
+static void
+writeline(char *line)
 {
     fputs(line, stdout);
 }
 
 
-static
-directive(what)
-     char *what;
+static int
+directive(char *what)
 {
     char *arg[3], *cp;
     int n;
@@ -271,7 +248,7 @@ directive(what)
            filep--;
            fileerror("Can't open %s", arg[1]);
        }
-       filep->name = strsav(arg[1]);
+       filep->name = strdup(arg[1]);
        filep->lineno = 0;
        return 1;
     }
@@ -286,18 +263,18 @@ directive(what)
     fileerror("Unknown directive %s", arg[0]);
 }
 
-expandfile(name)
-     char *name;
+void 
+expandfile(char *name)
 {
     if (strcmp(name, "-") == 0) {
        filep->stream = stdin;
-       filep->name = strsav("(stdin)");
+       filep->name = strdup("(stdin)");
     } else {
        if ((filep->stream = fopen(name, "r")) == NULL) {
            fileerror("Can't open %s", name);
            exit(1);
        }
-       filep->name = strsav(name);
+       filep->name = strdup(name);
     }
     filep->lineno = 0;
     while (readline(inline)) {
@@ -316,7 +293,7 @@ expandfile(name)
     }
 }
 
-static
+static int
 usage()
 {
     fprintf(stderr, "Usage: mpp [-cC][-s][-Dname=value][-Uname][-][files]\n");
@@ -325,9 +302,8 @@ usage()
 
 #include "AFS_component_version_number.c"
 
-main(argc, argv)
-     int argc;
-     char **argv;
+int
+main(int argc, char **argv)
 {
     argv++, argc--;
     if (argc == 0)
index 16166ecdef7da2bac95b5a704612c51d0776cde5..97434dc86bb47373b591a9b769052b20815d15f3 100644 (file)
@@ -52,12 +52,9 @@ static char path3[MAXPATHLEN + 1];   /* $$get rid of this */
  *     May exit from package.
  *------------------------------------------------------------------------*/
 
-static
-CheckMount(path)
-     char *path;
-
+static void
+CheckMount(char *path)
 {                              /*CheckMount */
-
     struct stat stb;           /*Parent's stat block */
     struct stat stb2;          /*Child's stat block */
     char dir[MAXPATHLEN];      /*Pathname of candidate mount point */
@@ -122,7 +119,6 @@ CheckMount(path)
      * verbose, tell everyone.
      */
     verbose_message("Found Unix mountpoint %s", dir);
-
 }                              /*CheckMount */
 
 /*------------------------------------------------------------------------
@@ -149,10 +145,7 @@ CheckMount(path)
  *------------------------------------------------------------------------*/
 
 int
-check(np, path)
-     register CTREEPTR np;
-     char *path;
-
+check(register CTREEPTR np, char *path)
 {                              /*check */
 
     register CTREEPTR np2;     /*Node ptr for np's child */
@@ -326,5 +319,4 @@ check(np, path)
      */
     (void)closedir(dp);
     return (retval);
-
 }                              /*check */
index 555404e80005799098cb35f5479313bb3d2707b9..1fdfda57a72892138e0e0c35205b50475f9fe820 100644 (file)
@@ -54,9 +54,7 @@ extern FILE *yyin;            /*Input file for the YACC parser */
  *------------------------------------------------------------------------*/
 
 static int
-namehash(name)
-     register char *name;
-
+namehash(register char *name)
 {                              /*namehash */
 
     register int hash;
@@ -123,10 +121,7 @@ AllocConfigNode()
  *------------------------------------------------------------------------*/
 
 static int
-ValidUpdtSpec(ftype, uspec)
-     u_short ftype;
-     u_short uspec;
-
+ValidUpdtSpec(u_short ftype, u_short uspec)
 {                              /*ValidUpdtSpec */
 
     register struct updatetype *u;
@@ -169,10 +164,7 @@ ValidUpdtSpec(ftype, uspec)
  *------------------------------------------------------------------------*/
 
 static int
-ValidateUserName(name, uidp)
-     register char *name;
-     register short *uidp;
-
+ValidateUserName(register char *name, register short *uidp)
 {                              /*ValidateUserName */
 
     register afs_int32 uid;
@@ -242,10 +234,7 @@ ValidateUserName(name, uidp)
  *------------------------------------------------------------------------*/
 
 static int
-ValidateGroupName(name, gidp)
-     register char *name;
-     register short *gidp;
-
+ValidateGroupName(register char *name, register short *gidp)
 {                              /*ValidateGroupName */
 
     register afs_int32 gid;
@@ -342,11 +331,7 @@ InitializeConfigTree()
  *------------------------------------------------------------------------*/
 
 CTREEPTR
-LocateChildNode(dp, name, lmode)
-     register CTREEPTR dp;
-     register char *name;
-     register int lmode;
-
+LocateChildNode(register CTREEPTR dp, register char *name, register int lmode)
 {                              /*LocateChildNode */
 
     register int hash;         /*Hash value for given name */
@@ -442,13 +427,8 @@ LocateChildNode(dp, name, lmode)
  *------------------------------------------------------------------------*/
 
 CTREEPTR
-LocatePathNode(dp, path, lmode)
-     register CTREEPTR dp;
-     register char *path;
-     register int lmode;
-
+LocatePathNode(register CTREEPTR dp, register char *path, register int lmode)
 {                              /*LocatePathNode */
-
     register char *name;       /*Points to start of new subdir/file in path */
     register char savech;      /*Saves chars being murdered during search */
 
@@ -497,7 +477,6 @@ LocatePathNode(dp, path, lmode)
      * just return it.
      */
     return (dp);
-
 }                              /*LocatePathNode */
 
 /*------------------------------------------------------------------------
@@ -521,17 +500,13 @@ LocatePathNode(dp, path, lmode)
  *------------------------------------------------------------------------*/
 
 int
-BuildConfigTree(f)
-     FILE *f;
-
+BuildConfigTree(FILE *f)
 {                              /*BuildConfigTree */
-
     int ret;
 
     yyin = f;
     ret = yyparse();
     return (ret);
-
 }                              /*BuildConfigTree */
 
 /*------------------------------------------------------------------------
@@ -564,16 +539,8 @@ BuildConfigTree(f)
  *------------------------------------------------------------------------*/
 
 int
-AddEntry(filetype, updtspec, filename, prototype, ownershipinfo, mode)
-     u_short filetype;
-     u_short updtspec;
-     char *filename;
-     PROTOTYPE prototype;
-     OWNER ownershipinfo;
-     MODE mode;
-
+AddEntry(u_short filetype, u_short updtspec, char *filename, PROTOTYPE prototype, OWNER ownershipinfo, MODE mode)
 {                              /*AddEntry */
-
     CTREEPTR np;               /*Ptr to config tree node holding info on filename */
     short uid, gid;            /*Uid, gid returned from validation functions */
 
@@ -723,9 +690,7 @@ AddEntry(filetype, updtspec, filename, prototype, ownershipinfo, mode)
  *------------------------------------------------------------------------*/
 
 void
-ApplyConfigTree(func)
-     int (*func) ();
-
+ApplyConfigTree(int (*func) ())
 {                              /*ApplyConfigTree */
 
     char *path;                        /*Path to pass on down */
@@ -764,13 +729,9 @@ ApplyConfigTree(func)
  *     Whatever func might do.
  *------------------------------------------------------------------------*/
 
-TraverseConfigTree(np, path, func)
-     register CTREEPTR np;
-     char *path;
-     int (*func) ();
-
+void
+TraverseConfigTree(register CTREEPTR np, char *path, int (*func) ())
 {                              /*TraverseConfigTree */
-
     register char *endp;       /*Marks the end of a string */
     register ENTRYPTR ep;      /*Current entry pointer */
     register int len;          /*Length of the pathname */
@@ -820,5 +781,4 @@ TraverseConfigTree(np, path, func)
      * the path properly before returning.
      */
     *--endp = 0;
-
 }                              /*TraverseConfigTree */
index e624103551f9f5b7507da4046f1c1eb24d900683..b53963f75e7c94adaa7546b597063a35e27f9eae 100644 (file)
@@ -40,9 +40,7 @@
  *------------------------------------------------------------------------*/
 
 char *
-emalloc(size)
-     unsigned size;
-
+emalloc(unsigned int size)
 {                              /*emalloc */
 
     char *malloc();
@@ -55,7 +53,6 @@ emalloc(size)
        exit(ERR_OUTOFMEMORY);
     } else
        return (ptr);
-
 }                              /*emalloc */
 
 /*------------------------------------------------------------------------
@@ -80,10 +77,7 @@ emalloc(size)
  *------------------------------------------------------------------------*/
 
 char *
-ecalloc(nelem, size)
-     unsigned nelem;
-     unsigned size;
-
+ecalloc(unsigned int nelem, unsigned int size)
 {                              /*ecalloc */
 
     char *calloc();
@@ -120,10 +114,7 @@ ecalloc(nelem, size)
  *------------------------------------------------------------------------*/
 
 FILE *
-efopen(filename, type)
-     char *filename;
-     char *type;
-
+efopen(char *filename, char *type)
 {                              /*efopen */
 
     FILE *f;
index 5d018ccc98778040998ae46ff59fb9f2e846be3b..6da38f4395e6f14c7121db053154c8e0e72492c8 100644 (file)
 
 
 static char *
-putnum(dp, n, b)
-     register char *dp;
-     register unsigned n;
-     register int b;
-
+putnum(register char *dp, register unsigned n, register int b)
 {                              /*putnum */
     register int s;
 
@@ -79,10 +75,7 @@ putnum(dp, n, b)
 }                              /*putnum */
 
 static char *
-putstr(dp, s)
-     register char *dp;
-     register char *s;
-
+putstr(register char *dp, register char *s)
 {                              /*putstr */
 
     while (*s)
@@ -93,11 +86,7 @@ putstr(dp, s)
 }                              /*putstr */
 
 static char *
-putformat(dp, fp, ap)
-     register char *dp;
-     register char *fp;
-     register va_list ap;
-
+putformat(register char *dp, register char *fp, register va_list ap)
 {                              /*putformat */
 
     while (*fp) {
index f4d2d17e9815f1ad3fd6662da35d864cb16be147..8ed56d71c4d5ede7698bd6dcbe521608bde8909d 100644 (file)
@@ -19,14 +19,14 @@ yywrap()
     return 1;
 }
 
-sprint(s)
-     char *s;
+void 
+sprint(char *s)
 {
     printf("sprint - %s", s);
 }
 
-allprint(i)
-     int i;
+void 
+allprint(int i)
 {
     printf("allprint - %d\n", i);
 }
index 927d6119c46c0eef2759ba679e71f50d896f9174..98629bd9c079491f18a7962e60a8cdd0bea11483 100644 (file)
@@ -204,12 +204,8 @@ getsystype()
  *------------------------------------------------------------------------*/
 
 static int
-packageInit(as, arock)
-     struct cmd_syndesc *as;
-     char *arock;
-
+packageInit(struct cmd_syndesc *as, char *arock)
 {                              /*packageInit */
-
     systype = getsystype();
 
     /*
@@ -287,10 +283,8 @@ packageInit(as, arock)
 
 #include "AFS_component_version_number.c"
 
-main(argc, argv)
-     int argc;
-     char **argv;
-
+int
+main(int argc, char **argv)
 {                              /*main */
 
     register afs_int32 code;   /*Return code */
index 20e10f79cd7357c7038ad54c1764bc167e238586..6e76d4863d52bf10fc98b4eb88ffd2b3ca463a52 100644 (file)
@@ -44,12 +44,9 @@ int opt_debug = 1;           /*Debugging output enabled? */
 
 #include "AFS_component_version_number.c"
 
-main(argc, argv)
-     int argc;
-     char **argv;
-
+int 
+main(int argc, char **argv)
 {                              /*main */
-
     int code;                  /*Return code */
 
     if (argc > 1)
@@ -62,7 +59,6 @@ main(argc, argv)
               test_linecounter);
     if (yyin != stdin)
        fclose(yyin);
-
 }                              /*main */
 
 /*------------------------------------------------------------------------
@@ -91,15 +87,9 @@ main(argc, argv)
  *------------------------------------------------------------------------*/
 
 int
-AddRegEntry(f, p, o, m, u)
-     char *f;
-     PROTOTYPE p;
-     OWNER o;
-     MODE m;
-     u_short u;
+AddRegEntry(char *f, PROTOTYPE p, OWNER o, MODE m, u_short u)
 
 {                              /*AddRegEntry */
-
     printf("F");
     echo_updateoptions(u);
     printf("%s", f);
@@ -107,7 +97,6 @@ AddRegEntry(f, p, o, m, u)
     echo_ownerinfo(o);
     echo_modeinfo(m);
     return (0);
-
 }                              /*AddRegEntry */
 
 /*------------------------------------------------------------------------
@@ -136,13 +125,7 @@ AddRegEntry(f, p, o, m, u)
  *------------------------------------------------------------------------*/
 
 int
-AddDirEntry(f, p, o, m, u)
-     char *f;
-     PROTOTYPE p;
-     OWNER o;
-     MODE m;
-     u_short u;
-
+AddDirEntry(char *f, PROTOTYPE p, OWNER o, MODE m, u_short u)
 {                              /*AddDirEntry */
 
     printf("D");
@@ -181,15 +164,8 @@ AddDirEntry(f, p, o, m, u)
  *------------------------------------------------------------------------*/
 
 int
-AddLnkEntry(f, p, o, m, u)
-     char *f;
-     PROTOTYPE p;
-     OWNER o;
-     MODE m;
-     u_short u;
-
+AddLnkEntry(char *f, PROTOTYPE p, OWNER o, MODE m, u_short u)
 {                              /*AddLnkEntry */
-
     printf("L");
     echo_updateoptions(u);
     printf("%s", f);
@@ -197,7 +173,6 @@ AddLnkEntry(f, p, o, m, u)
     echo_ownerinfo(o);
     echo_modeinfo(m);
     return (0);
-
 }                              /*AddLnkEntry */
 
 /*------------------------------------------------------------------------
@@ -226,15 +201,8 @@ AddLnkEntry(f, p, o, m, u)
  *------------------------------------------------------------------------*/
 
 int
-AddBlkEntry(f, p, o, m, u)
-     char *f;
-     PROTOTYPE p;
-     OWNER o;
-     MODE m;
-     u_short u;
-
+AddBlkEntry(char *f, PROTOTYPE p, OWNER o, MODE m, u_short u)
 {                              /*AddBlkEntry */
-
     printf("B");
     echo_updateoptions(u);
     printf("%s", f);
@@ -242,7 +210,6 @@ AddBlkEntry(f, p, o, m, u)
     echo_ownerinfo(o);
     echo_modeinfo(m);
     return (0);
-
 }                              /*AddBlkEntry */
 
 /*------------------------------------------------------------------------
@@ -271,15 +238,8 @@ AddBlkEntry(f, p, o, m, u)
  *------------------------------------------------------------------------*/
 
 int
-AddChrEntry(f, p, o, m, u)
-     char *f;
-     PROTOTYPE p;
-     OWNER o;
-     MODE m;
-     u_short u;
-
+AddChrEntry(char *f, PROTOTYPE p, OWNER o, MODE m, u_short u)
 {                              /*AddChrEntry */
-
     printf("C");
     echo_updateoptions(u);
     printf("%s", f);
@@ -287,7 +247,6 @@ AddChrEntry(f, p, o, m, u)
     echo_ownerinfo(o);
     echo_modeinfo(m);
     return (0);
-
 }                              /*AddChrEntry */
 
 /*------------------------------------------------------------------------
@@ -312,9 +271,7 @@ AddChrEntry(f, p, o, m, u)
  *------------------------------------------------------------------------*/
 
 int
-AddSktEntry(f)
-     char *f;
-
+AddSktEntry(char *f)
 {                              /*AddSktEntry */
 
     printf("S");
@@ -348,15 +305,8 @@ AddSktEntry(f)
  *------------------------------------------------------------------------*/
 
 int
-AddPipeEntry(f, p, o, m, u)
-     char *f;
-     PROTOTYPE p;
-     OWNER o;
-     MODE m;
-     u_short u;
-
+AddPipeEntry(char *f, PROTOTYPE p, OWNER o, MODE m, u_short u)
 {                              /*AddPipeEntry */
-
     printf("P");
     echo_updateoptions(u);
     printf("\t%s\n", f);
@@ -364,7 +314,6 @@ AddPipeEntry(f, p, o, m, u)
     echo_ownerinfo(o);
     echo_modeinfo(m);
     return (0);
-
 }                              /*AddPipeEntry */
 
 /*------------------------------------------------------------------------
@@ -388,11 +337,8 @@ AddPipeEntry(f, p, o, m, u)
  *------------------------------------------------------------------------*/
 
 int
-echo_updateoptions(u)
-     u_short u;
-
+echo_updateoptions(u_short u)
 {                              /*echo_updateoptions */
-
     if (u & U_LOSTFOUND)
        printf("X");
     if (u & U_RMEXTRA)
@@ -407,7 +353,6 @@ echo_updateoptions(u)
        printf("Q");
     printf("\t");
     return (0);
-
 }                              /*echo_updateoptions */
 
 /*------------------------------------------------------------------------
@@ -431,11 +376,8 @@ echo_updateoptions(u)
  *------------------------------------------------------------------------*/
 
 int
-echo_prototypeinfo(p)
-     PROTOTYPE p;
-
+echo_prototypeinfo(PROTOTYPE p)
 {                              /*echo_prototypeinfo */
-
     switch (p.flag) {
     case P_FILE:
        printf("\t%s", p.info.path);
@@ -454,7 +396,6 @@ echo_prototypeinfo(p)
        printf("\t[Neither file nor device]");
        break;
     }
-
 }                              /*echo_prototypeinfo */
 
 /*------------------------------------------------------------------------
@@ -478,11 +419,8 @@ echo_prototypeinfo(p)
  *------------------------------------------------------------------------*/
 
 int
-echo_ownerinfo(o)
-     OWNER o;
-
+echo_ownerinfo(OWNER o)
 {                              /*echo_ownerinfo */
-
     if (o.username != NULL)
        printf("\t%s", o.username);
     else
@@ -491,7 +429,6 @@ echo_ownerinfo(o)
        printf("\t%s", o.groupname);
     else
        printf("\t[No group info]");
-
 }                              /*echo_ownerinfo */
 
 /*------------------------------------------------------------------------
@@ -515,17 +452,13 @@ echo_ownerinfo(o)
  *------------------------------------------------------------------------*/
 
 int
-echo_modeinfo(m)
-     MODE m;
-
+echo_modeinfo(MODE m)
 {                              /*echo_modeinfo */
-
     if (m.inherit_flag != TRUE)
        printf("\t%o", m.modeval);
     else
        printf("\t[Inherited mode]");
     printf("\n");
-
 }                              /*echo_modeinfo */
 
 /*------------------------------------------------------------------------
@@ -558,16 +491,8 @@ echo_modeinfo(m)
  *------------------------------------------------------------------------*/
 
 int
-testAddEntry(a_ftype, a_updspecs, a_filename, a_proto, a_owner, a_mode)
-     u_short a_ftype;
-     u_short a_updspecs;
-     char *a_filename;
-     PROTOTYPE a_proto;
-     OWNER a_owner;
-     MODE a_mode;
-
+testAddEntry(u_short a_ftype, u_short a_updspecs, char *a_filename, PROTOTYPE a_proto, OWNER a_owner, MODE a_mode)
 {                              /*testAddEntry */
-
     switch (a_ftype) {
     case S_IFREG:              /*Regular file */
        AddRegEntry(a_filename, a_proto, a_owner, a_mode, a_updspecs);
@@ -606,5 +531,4 @@ testAddEntry(a_ftype, a_updspecs, a_filename, a_proto, a_owner, a_mode)
        break;
 
     }                          /*switch a_ftype */
-
 }                              /*testAddEntry */
index 70d94e1ece64cb888df5319383d3784ac0fe4cf6..0e74e095d3f758c8ccf456dffee1fa0f1e1f1c49 100644 (file)
@@ -55,10 +55,7 @@ static FixReg();
 /* $$important: these will have to be fixed with an error recovery mechanism */
 
 int
-update(np, path)
-     CTREEPTR np;
-     char *path;
-
+update(CTREEPTR np, char *path)
 {                              /*update */
 
     switch (np->type) {
@@ -94,11 +91,8 @@ update(np, path)
 
 }                              /*update */
 
-static
-UpdateSock(np, path)
-     CTREEPTR np;
-     char *path;
-
+static void
+UpdateSock(CTREEPTR np, char *path)
 {                              /*UpdateSock */
 
     (void)dochtyp(np, path);
@@ -106,11 +100,8 @@ UpdateSock(np, path)
 }                              /*UpdateSock */
 
 
-static
-UpdateDev(np, path)
-     CTREEPTR np;
-     char *path;
-
+static void
+UpdateDev(CTREEPTR np, char *path)
 {                              /*UpdateDev */
 
     register int ret;
@@ -167,11 +158,8 @@ UpdateDev(np, path)
 
 }                              /*UpdateDev */
 
-static
-UpdatePipe(np, path)
-     CTREEPTR np;
-     char *path;
-
+static void
+UpdatePipe(CTREEPTR np, char *path)
 {                              /*UpdatePipe */
 
     register int ret;
@@ -214,11 +202,8 @@ UpdatePipe(np, path)
 
 }                              /*UpdatePipe */
 
-static
-UpdateLnk(np, path)
-     CTREEPTR np;
-     char *path;
-
+static void
+UpdateLnk(CTREEPTR np, char *path)
 {                              /*UpdateLnk */
 
     register int ret;
@@ -260,11 +245,8 @@ UpdateLnk(np, path)
 }                              /*UpdateLnk */
 
 
-static
-UpdateDir(np, path)
-     CTREEPTR np;
-     char *path;
-
+static void
+UpdateDir(CTREEPTR np, char *path)
 {                              /*UpdateDir */
 
     register int ret;
@@ -295,11 +277,8 @@ UpdateDir(np, path)
 }                              /*UpdateDir */
 
 
-static
-UpdateReg(np, path)
-     CTREEPTR np;
-     char *path;
-
+static void
+UpdateReg(CTREEPTR np, char *path)
 {                              /*UpdateReg */
 
     register int ret;
@@ -343,13 +322,9 @@ UpdateReg(np, path)
  * reboot scenario is true), we return 0.
  */
 
-static
-dochtyp(np, path)
-     CTREEPTR np;
-     char *path;
-
+static int
+dochtyp(CTREEPTR np, char *path)
 {                              /*dochtyp */
-
     if (lstat(path, &stb) < 0)
        return -1;
 #ifdef KFLAG
@@ -367,16 +342,11 @@ dochtyp(np, path)
        rm(path);
        return -1;
     }
-
 }                              /*dochtyp */
 
-static
-dochmod(np, path)
-     CTREEPTR np;
-     char *path;
-
+static void
+dochmod(CTREEPTR np, char *path)
 {                              /*dochmod */
-
     if ((np->flag & F_MODE) == 0)
        return;
     if ((np->mode & ~S_IFMT) == (stb.st_mode & ~S_IFMT))
@@ -384,16 +354,11 @@ dochmod(np, path)
     loudonly_message("chmod %s %o", path, np->mode & ~S_IFMT);
     if (!opt_lazy && chmod(path, (int)np->mode & ~S_IFMT) < 0)
        message("chmod %s; %m", path);
-
 }                              /*dochmod */
 
-static
-dochown(np, path)
-     CTREEPTR np;
-     char *path;
-
+static void
+dochown(CTREEPTR np, char *path)
 {                              /*dochown */
-
     if ((np->flag & F_UID) == 0)
        np->uid = stb.st_uid;
     if ((np->flag & F_GID) == 0)
@@ -403,16 +368,11 @@ dochown(np, path)
     loudonly_message("chown %s %d %d", path, np->uid, np->gid);
     if (!opt_lazy && chown(path, np->uid, np->gid) < 0)
        message("chown %s; %m", path);
-
 }                              /*dochown */
 
-static
-dochtim(np, path)
-     CTREEPTR np;
-     char *path;
-
+static void
+dochtim(CTREEPTR np, char *path)
 {                              /*dochtim */
-
     struct timeval tm[2];
 
     if (np->mtime == stb.st_mtime
@@ -429,28 +389,19 @@ dochtim(np, path)
     }
     if (!opt_lazy && utimes(path, tm) < 0)
        message("utimes %s; %m", path);
-
 }                              /*dochtim */
 
 static int
-FixLostFoundDir(path)
-     char *path;
-
+FixLostFoundDir(char *path)
 {                              /*FixLostFoundDir */
-
     if (stb.st_size >= 3584)
        return 0;
     return mklostfound(path);
-
 }                              /*FixLostFoundDir */
 
 static int
-FixDir(np, path)
-     CTREEPTR np;
-     char *path;
-
+FixDir(CTREEPTR np, char *path)
 {                              /*FixDir */
-
     register DIR *dp;
     register struct dirent *de;
     register char *endp;
@@ -477,16 +428,11 @@ FixDir(np, path)
     *--endp = 0;
     (void)closedir(dp);
     return 0;
-
 }                              /*FixDir */
 
-static
-FixReg(np, path)
-     CTREEPTR np;
-     char *path;
-
+static int
+FixReg(CTREEPTR np, char *path)
 {                              /*FixReg */
-
     char new[MAXPATHLEN], old[MAXPATHLEN], temp[MAXPATHLEN];
 
     if (!opt_reboot && (np->updtspec & U_REBOOT)) {
@@ -511,5 +457,4 @@ FixReg(np, path)
     if (np->updtspec & U_REBOOT)
        status = status_reboot;
     return 0;
-
 }                              /*FixReg */
index 28f42bc81d2aebd0adb84b0c24cad80bd7b61e3e..ae2c058a94585ea172d2eef0f8bf0345102d82e1 100644 (file)
@@ -73,7 +73,7 @@ PTSERVER_EXELIBS =$(PTSERVER_EXELIBS) $(DESTDIR)\lib\afs\afsprocmgmt.lib
 !ENDIF
 
 $(PTSERVER): $(PTSERVER_EXEOBJS) $(RXKADOBJS) $(PTSERVER_EXELIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP) 
 
 
@@ -104,7 +104,7 @@ PTS_EXELIBS =\
        $(DESTDIR)\lib\cm_dns.obj
 
 $(PTS): $(PTS_EXEOBJS) $(PTS_EXELIBS) 
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP) 
 
 
@@ -180,16 +180,16 @@ clean::
 TEST_LIBS = $(PTS_EXELIBS)
 
 $(OUT)\readgroup.exe: $(OUT)\readgroup.obj $(LIBFILE) $(TEST_LIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
 
 $(OUT)\readpwd.exe: $(OUT)\readpwd.obj $(LIBFILE) $(TEST_LIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
 
 $(OUT)\testpt.exe: $(OUT)\testpt.obj $(LIBFILE) $(TEST_LIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
 
 $(OUT)\db_verify.exe: $(OUT)\db_verify.obj $(OUT)\pterror.obj $(OUT)\display.obj $(LIBFILE) $(TEST_LIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
 
 mkdir:
        
index d3b187812b8156da0a7c04b83608451ffe069df1..df6d7e924f9a9e0b49350d15a90a6464ccccf92b 100644 (file)
@@ -12,7 +12,7 @@
 #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
@@ -69,8 +69,7 @@ char *whoami = "db_verify";
 #define UBIK_HEADERSIZE 64
 
 afs_int32
-printheader(h)
-     struct prheader *h;
+printheader(struct prheader *h)
 {
     printf("Version           = %d\n", ntohl(h->version));
     printf("Header Size       = %d\n", ntohl(h->headerSize));
@@ -91,10 +90,7 @@ printheader(h)
 }
 
 static afs_int32
-pr_Read(pos, buff, len)
-     afs_int32 pos;
-     char *buff;
-     afs_int32 len;
+pr_Read(afs_int32 pos, char *buff, afs_int32 len)
 {
     afs_int32 code;
 
@@ -140,16 +136,14 @@ ReadHeader()
 }
 
 static afs_int32
-IDHash(x)
-     afs_int32 x;
+IDHash(afs_int32 x)
 {
     /* returns hash bucket for x */
     return ((abs(x)) % HASHSIZE);
 }
 
 static afs_int32
-NameHash(aname)
-     register unsigned char *aname;
+NameHash(register unsigned char *aname)
 {
     /* returns hash bucket for aname */
     register unsigned int hash = 0;
@@ -208,8 +202,7 @@ int idcount(struct idused **idmapp, int id);
 #endif
 
 int
-readUbikHeader(misc)
-     struct misc_data *misc;
+readUbikHeader(struct misc_data *misc)
 {
     int offset, r;
     struct ubik_hdr uheader;
@@ -252,9 +245,7 @@ readUbikHeader(misc)
 }
 
 afs_int32
-ConvertDiskAddress(ea, eiP)
-     afs_uint32 ea;
-     int *eiP;
+ConvertDiskAddress(afs_uint32 ea, int *eiP)
 {
     int i;
 
@@ -274,11 +265,7 @@ ConvertDiskAddress(ea, eiP)
 }
 
 int
-PrintEntryError(misc, ea, e, indent)
-     struct misc_data *misc;
-     afs_int32 ea;
-     struct prentry *e;
-     int indent;
+PrintEntryError(struct misc_data *misc, afs_int32 ea, struct prentry *e, int indent)
 {
 
     pr_PrintEntry(stderr, /*net order */ 0, ea, e, indent);
@@ -286,11 +273,10 @@ PrintEntryError(misc, ea, e, indent)
 }
 
 afs_int32
-WalkHashTable(hashtable, hashType, map, misc)
-     afs_int32 hashtable[];    /* hash table to walk */
-     int hashType;             /* hash function to use */
-     char map[];               /* one byte per db entry */
-     struct misc_data *misc;   /* stuff to keep track of */
+WalkHashTable(afs_int32 hashtable[],   /* hash table to walk */
+             int hashType,             /* hash function to use */
+             char map[],               /* one byte per db entry */
+             struct misc_data *misc)   /* stuff to keep track of */
 {
     afs_int32 code;
     int hi;                    /* index in hash table */
@@ -404,11 +390,9 @@ WalkHashTable(hashtable, hashType, map, misc)
 }
 
 afs_int32
-WalkNextChain(map, misc, ea, e)
-     char map[];               /* one byte per db entry */
-     struct misc_data *misc;   /* stuff to keep track of */
-     afs_int32 ea;
-     struct prentry *e;
+WalkNextChain(char map[],              /* one byte per db entry */
+             struct misc_data *misc,   /* stuff to keep track of */
+             afs_int32 ea, struct prentry *e)
 {
     afs_int32 head;
     int bit;
@@ -725,11 +709,9 @@ WalkNextChain(map, misc, ea, e)
 }
 
 afs_int32
-WalkOwnedChain(map, misc, ea, e)
-     char map[];               /* one byte per db entry */
-     struct misc_data *misc;   /* stuff to keep track of */
-     afs_int32 ea;
-     struct prentry *e;
+WalkOwnedChain(char map[],             /* one byte per db entry */
+              struct misc_data *misc,  /* stuff to keep track of */
+              afs_int32 ea, struct prentry *e)
 {
     afs_int32 head;
     afs_int32 code;
@@ -809,9 +791,8 @@ WalkOwnedChain(map, misc, ea, e)
 }
 
 afs_int32
-WalkChains(map, misc)
-     char map[];               /* one byte per db entry */
-     struct misc_data *misc;   /* stuff to keep track of */
+WalkChains(char map[],         /* one byte per db entry */
+          struct misc_data *misc)      /* stuff to keep track of */
 {
     afs_int32 code;
     int ei;
@@ -924,9 +905,7 @@ WalkChains(map, misc)
 }
 
 afs_int32
-GC(map, misc)
-     char map[];
-     struct misc_data *misc;
+GC(char map[], struct misc_data *misc)
 {
     afs_int32 code;
     int ei;
@@ -958,13 +937,14 @@ GC(map, misc)
            id = ntohl(e.id);
 #if defined(SUPERGROUPS)
            if ((id != ANONYMOUSID)
-               && ((refCount = idcount(&misc->idmap, id)) != ntohl(e.count))) {
+               && ((refCount = idcount(&misc->idmap, id)) != ntohl(e.count))) 
 #else
            if ((id >= misc->minId) && (id <= misc->maxId)
                && (id != ANONYMOUSID)
                && ((refCount = misc->idmap[id - misc->minId]) !=
-                   ntohl(e.count))) {
+                   ntohl(e.count))) 
 #endif /* SUPERGROUPS */
+             {
                afs_int32 na;
                fprintf(stderr,
                        "Entry membership count is inconsistent: %d entries refer to this one\n",
@@ -991,8 +971,7 @@ GC(map, misc)
 }
 
 char *
-QuoteName(s)
-     char *s;
+QuoteName(char *s)
 {
     char *qs;
     if (strpbrk(s, " \t")) {
@@ -1006,9 +985,7 @@ QuoteName(s)
 }
 
 afs_int32
-DumpRecreate(map, misc)
-     char map[];
-     struct misc_data *misc;
+DumpRecreate(char map[], struct misc_data *misc)
 {
     afs_int32 code;
     int ei;
@@ -1069,10 +1046,11 @@ DumpRecreate(map, misc)
                /* check for duplicate id.  This may still lead to duplicate
                 * names. */
 #if defined(SUPERGROUPS)
-               if (idcount(&idmap, id)) {
+               if (idcount(&idmap, id)) 
 #else
-               if (idmap[id - misc->minId]) {
+               if (idmap[id - misc->minId]) 
 #endif
+                 {
                    fprintf(stderr, "Skipping entry with duplicate id %di\n",
                            id);
                    goto user_done;
@@ -1179,10 +1157,11 @@ DumpRecreate(map, misc)
 
            owner = ntohl(e.owner);
 #if defined(SUPERGROUPS)
-           if (!idcount(&idmap, owner)) {
+           if (!idcount(&idmap, owner)) 
 #else
-           if (idmap[owner - misc->minId] == 0) {
+           if (idmap[owner - misc->minId] == 0) 
 #endif
+             {
                fprintf(stderr,
                        "Skipping chown of '%s' to non-existant owner %di\n",
                        e.name, owner);
@@ -1310,8 +1289,7 @@ DumpRecreate(map, misc)
 }
 
 afs_int32
-CheckPrDatabase(misc)
-     struct misc_data *misc;   /* info & statistics */
+CheckPrDatabase(struct misc_data *misc)        /* info & statistics */
 {
     afs_int32 code;
     afs_int32 eof;
@@ -1450,12 +1428,11 @@ CheckPrDatabase(misc)
     free(map);
     return code;
 }
-
+    
 #include "AFS_component_version_number.c"
 
-WorkerBee(as, arock)
-     struct cmd_syndesc *as;
-     char *arock;
+int
+WorkerBee(struct cmd_syndesc *as, char *arock)
 {
     afs_int32 code;
     char *recreateFile;
@@ -1508,9 +1485,8 @@ WorkerBee(as, arock)
     exit(0);
 }
 
-main(argc, argv)
-     int argc;
-     char *argv[];
+int
+main(int argc, char *argv[])
 {
     struct cmd_syndesc *ts;
 
@@ -1536,8 +1512,7 @@ main(argc, argv)
 /* new routines to deal with very large ID numbers */
 
 void
-zeromap(idmap)
-     struct idused *idmap;
+zeromap(struct idused *idmap)
 {
     while (idmap) {
        bzero((char *)idmap->idcount, sizeof idmap->idcount);
@@ -1574,8 +1549,7 @@ inccount(struct idused **idmapp, int id)
 }
 
 int
-idcount(idmapp, id)
-     struct idused **idmapp;
+idcount(struct idused **idmapp, int id)
 {
     struct idused *idmap;
 
@@ -1591,5 +1565,4 @@ idcount(idmapp, id)
     }
     return 0;
 }
-
 #endif /* SUPERGROUPS */
index 365ee1718fc07cd660ec9002cbc6c1383240308e..90b617ef6585a83e25e6cea6bddfb2fcb2b3b103 100644 (file)
@@ -11,7 +11,7 @@
 #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>
@@ -62,12 +62,7 @@ pr_TimeToString(time_t clock)
 #define host(a) (hostOrder ? (a) : ntohl(a))
 
 static void
-PrintEntries(f, hostOrder, indent, e, n)
-     FILE *f;
-     int hostOrder;            /* structures in host order */
-     int indent;
-     struct prentry *e;
-     int n;
+PrintEntries(FILE *f, int hostOrder, int indent, struct prentry *e, int n)
 {
     int i;
     int newline;
@@ -98,12 +93,7 @@ PrintEntries(f, hostOrder, indent, e, n)
 }
 
 int
-pr_PrintEntry(f, hostOrder, ea, e, indent)
-     FILE *f;
-     int hostOrder;            /* structures in host order */
-     afs_int32 ea;
-     struct prentry *e;
-     int indent;
+pr_PrintEntry(FILE *f, int hostOrder, afs_int32 ea, struct prentry *e, int indent)
 {
     int i;
 
index cd155edc6ca21012364aaacce5091c04e2815bb0..48bc06a66c5dcf3d3dbea17100566739057aba6b 100644 (file)
@@ -35,7 +35,7 @@
 #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>
@@ -69,15 +69,8 @@ struct bitmap {
 #define Aflag  (debug_mask & (1L<<('Z'-'@')))
 extern int debug_mask;
 
-#if __STDC__
 int
 in_map(struct map *parm, long node)
-#else
-int
-in_map(parm, node)
-     struct map *parm;
-     long node;
-#endif
 {
     struct bitmap *map;
     long bit;
@@ -117,8 +110,7 @@ in_map(parm, node)
 }
 
 void
-free_map(parm)
-     struct map *parm;
+free_map(struct map *parm)
 {
     struct bitmap *map, *next;
 #ifdef MAP_DEBUG
@@ -137,9 +129,7 @@ free_map(parm)
 }
 
 struct map *
-add_map(parm, node)
-     struct map *parm;
-     long node;
+add_map(struct map *parm, long node)
 {
     struct bitmap *map;
     long bit;
@@ -198,8 +188,7 @@ add_map(parm, node)
 }
 
 struct bitmap *
-simplify_bitmap(map)
-     struct bitmap *map;
+simplify_bitmap(struct bitmap *map)
 {
     struct bitmap **mpp, *mp2;
     int i;
@@ -221,8 +210,7 @@ simplify_bitmap(map)
 }
 
 struct bitmap *
-or_bitmap(left, right)
-     struct bitmap *left, *right;
+or_bitmap(struct bitmap *left, struct bitmap *right)
 {
     struct bitmap **rightmp, *lmap, *rmap;
     int i;
@@ -242,8 +230,7 @@ or_bitmap(left, right)
 }
 
 struct bitmap *
-and_bitmap(left, right)
-     struct bitmap *left, *right;
+and_bitmap(struct bitmap *left, struct bitmap *right)
 {
     struct bitmap **rightmp, *lmap, *rmap, **leftmp;
     int i;
@@ -271,8 +258,7 @@ and_bitmap(left, right)
 
 /* bit set in left, but not in right */
 struct bitmap *
-bic_bitmap(left, right)
-     struct bitmap *left, *right;
+bic_bitmap(struct bitmap *left, struct bitmap *right)
 {
     struct bitmap **rightmp, *lmap, *rmap, **leftmp;
     int i;
@@ -310,8 +296,7 @@ bic_bitmap(left, right)
 }
 
 struct map *
-and_map(mp1, mp2)
-     struct map *mp1, *mp2;
+and_map(struct map *mp1, struct map *mp2)
 {
 #ifdef MAP_DEBUG
     if (Mflag) {
@@ -341,8 +326,7 @@ and_map(mp1, mp2)
 }
 
 struct map *
-or_map(mp1, mp2)
-     struct map *mp1, *mp2;
+or_map(struct map *mp1, struct map *mp2)
 {
 #ifdef MAP_DEBUG
     if (Mflag) {
@@ -372,8 +356,7 @@ or_map(mp1, mp2)
 }
 
 struct map *
-not_map(map)
-     struct map *map;
+not_map(struct map *map)
 {
 #ifdef MAP_DEBUG
     if (Mflag) {
@@ -386,8 +369,7 @@ not_map(map)
 }
 
 struct map *
-copy_map(parm)
-     struct map *parm;
+copy_map(struct map *parm)
 {
     struct bitmap *result, **mpp, *map;
 #ifdef MAP_DEBUG
@@ -419,8 +401,7 @@ copy_map(parm)
 }
 
 long
-count_map(parm)
-     struct map *parm;
+count_map(struct map *parm)
 {
     long nf;
     struct bitmap *map;
@@ -451,9 +432,7 @@ count_map(parm)
 }
 
 long
-next_map(parm, node)
-     struct map *parm;
-     long node;
+next_map(struct map *parm, long node)
 {
     struct bitmap *map, *lowest;
     long bit, mask;
@@ -525,16 +504,13 @@ next_map(parm, node)
 }
 
 long
-first_map(parm)
-     struct map *parm;
+first_map(struct map *parm)
 {
     return next_map(parm, -9999);
 }
 
 long
-prev_map(parm, node)
-     struct map *parm;
-     long node;
+prev_map(struct map *parm, long node)
 {
     struct bitmap *map, *lowest;
     long bit, mask;
@@ -609,22 +585,19 @@ prev_map(parm, node)
 }
 
 long
-last_map(parm)
-     struct map *parm;
+last_map(struct map *parm)
 {
     return prev_map(parm, 0x7fffffff);
 }
 
 struct map *
-negative_map(map)
-     struct map *map;
+negative_map(struct map *map)
 {
     return (struct map *)NEGMAP(map);
 }
 
 struct map *
-bic_map(mp1, mp2)
-     struct map *mp1, *mp2;
+bic_map(struct map *mp1, struct map *mp2)
 {
 #ifdef MAP_DEBUG
     if (Mflag) {
@@ -646,8 +619,8 @@ bic_map(mp1, mp2)
 }
 
 #ifdef PRINT_MAP_ERROR
-print_map(parm)
-     struct map *parm;
+void 
+print_map(struct map *parm)
 {
     struct bitmap *map;
     int i, j;
@@ -694,9 +667,7 @@ print_map(parm)
 
 #ifdef NEED_READ_WRITE
 struct map *
-read_map(f, arg)
-     int (*f) ();
-     char *arg;
+read_map(int (*f) (), char *arg)
 {
     struct bitmap *map, *result, **mp;
     int page;
@@ -752,10 +723,8 @@ read_map(f, arg)
     return (struct map *)result;
 }
 
-write_map(parm, f, arg)
-     struct map *parm;
-     int (*f) ();
-     char *arg;
+int 
+write_map(struct map *parm, int (*f) (), char *arg)
 {
     struct bitmap *map;
     int page;
index 4a7b76526db8501843bcc67f60beda72e337d1cc..7739f45e1ff78711fc8ea65877b5dbcf6a51cd67 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: pt_util.c,v 1.8 2003/08/08 21:20:46 shadow Exp $ */
+/* $Id: pt_util.c,v 1.9 2004/06/23 14:27:41 shadow Exp $ */
 
 /*
  *
@@ -23,7 +23,7 @@
 #include <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>
@@ -97,9 +97,8 @@ int nflag = 0;
 int wflag = 0;
 int flags = 0;
 
-main(argc, argv)
-     int argc;
-     char **argv;
+int
+main(int argc, char **argv)
 {
 
     register struct cmd_syndesc *cs;   /*Command line syntax descriptor */
@@ -129,8 +128,7 @@ main(argc, argv)
 }
 
 int
-CommandProc(a_as)
-     register struct cmd_syndesc *a_as;
+CommandProc(register struct cmd_syndesc *a_as)
 {
     register int i;
     register long code;
@@ -342,8 +340,7 @@ CommandProc(a_as)
 }
 
 int
-display_entry(offset)
-     int offset;
+display_entry(int offset)
 {
     register int i;
 
@@ -367,8 +364,7 @@ display_entry(offset)
 }
 
 void
-add_group(id)
-     long id;
+add_group(long id)
 {
     struct grp_list *g;
     register long i;
@@ -403,8 +399,7 @@ display_groups()
 }
 
 void
-display_group(id)
-     int id;
+display_group(int id)
 {
     register int i, offset;
     int print_grp = 0;
@@ -475,8 +470,7 @@ display_group(id)
 }
 
 void
-fix_pre(pre)
-     struct prentry *pre;
+fix_pre(struct prentry *pre)
 {
     register int i;
 
@@ -503,8 +497,7 @@ fix_pre(pre)
 }
 
 char *
-id_to_name(id)
-     int id;
+id_to_name(int id)
 {
     register int offset;
     static struct prentry pre;
@@ -531,8 +524,7 @@ id_to_name(id)
 }
 
 char *
-checkin(pre)
-     struct prentry *pre;
+checkin(struct prentry *pre)
 {
     struct hash_entry *he, *last;
     register int id;
@@ -562,8 +554,7 @@ checkin(pre)
 }
 
 char *
-check_core(id)
-     register int id;
+check_core(register int id)
 {
     struct hash_entry *he;
     he = hat[IDHash(id)];
index 8c868cb4e21a4416bccfa29e74e73a01d025aec5..70e91481d2bbe4725effb2740f596d62d2430f92 100644 (file)
@@ -51,7 +51,7 @@
 #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>
@@ -103,6 +103,9 @@ afs_int32 listSuperGroups();
 static stolower();
 extern int IDCmp();
 
+extern int prp_group_default;
+extern int prp_user_default;
+
 /* When abort, reset initd so that the header is read in on next call.
  * Abort the transaction and return the code.
  */
@@ -1513,9 +1516,9 @@ listEntry(call, aid, aentry)
     aentry->flags = tentry.flags >> PRIVATE_SHIFT;
     if (aentry->flags == 0) {
        if (tentry.flags & PRGRP)
-           aentry->flags = PRP_GROUP_DEFAULT >> PRIVATE_SHIFT;
+           aentry->flags = prp_group_default >> PRIVATE_SHIFT;
        else
-           aentry->flags = PRP_USER_DEFAULT >> PRIVATE_SHIFT;
+           aentry->flags = prp_user_default >> PRIVATE_SHIFT;
     }
     aentry->owner = tentry.owner;
     aentry->id = tentry.id;
@@ -1659,7 +1662,7 @@ put_prentries(tentry, bulkentries)
     if (entry->flags == 0) {
        entry->flags =
            ((tentry->
-             flags & PRGRP) ? PRP_GROUP_DEFAULT : PRP_USER_DEFAULT) >>
+             flags & PRGRP) ? prp_group_default : prp_user_default) >>
            PRIVATE_SHIFT;
     }
     entry->owner = tentry->owner;
index bd0b38a9d47a3c233c23eaf656ceafe5ba79aa7e..2377b91995bf243169c0b2966e8ac7ff40ee025c 100644 (file)
@@ -23,7 +23,7 @@
 #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>
@@ -73,24 +73,21 @@ struct sourcestack {
 } *shead;
 
 int
-Interactive(as)
-     register struct cmd_syndesc *as;
+Interactive(register struct cmd_syndesc *as)
 {
     finished = 0;
     return 0;
 }
 
 int
-Quit(as)
-     register struct cmd_syndesc *as;
+Quit(register struct cmd_syndesc *as)
 {
     finished = 1;
     return 0;
 }
 
 int
-Source(as)
-     register struct cmd_syndesc *as;
+Source(register struct cmd_syndesc *as)
 {
     FILE *fd;
     struct sourcestack *sp;
@@ -118,8 +115,7 @@ Source(as)
 }
 
 int
-Sleep(as)
-     register struct cmd_syndesc *as;
+Sleep(register struct cmd_syndesc *as)
 {
     int delay;
     if (!as->parms[0].items) {
@@ -157,8 +153,7 @@ osi_audit()
 }
 
 int
-GetGlobals(as)
-     register struct cmd_syndesc *as;
+GetGlobals(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     char *cell;
@@ -190,8 +185,7 @@ GetGlobals(as)
 }
 
 int
-CleanUp(as)
-     register struct cmd_syndesc *as;
+CleanUp(register struct cmd_syndesc *as)
 {
 #if defined(SUPERGROUPS)
     if (as && !strcmp(as->name, "help"))
@@ -212,8 +206,8 @@ CleanUp(as)
     return 0;
 }
 
-CreateGroup(as)
-     register struct cmd_syndesc *as;
+int
+CreateGroup(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     afs_int32 id;
@@ -272,8 +266,8 @@ CreateGroup(as)
     return 0;
 }
 
-CreateUser(as)
-     register struct cmd_syndesc *as;
+int
+CreateUser(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     afs_int32 id;
@@ -319,10 +313,7 @@ CreateUser(as)
 
 #ifdef notdef
 int
-GetNameOrId(as, lids, lnames)
-     register struct cmd_syndesc *as;
-     struct idlist *lids;
-     struct namelist *lnames;
+GetNameOrId(register struct cmd_syndesc *as, struct idlist *lids, struct namelist *lnames)
 {
     register afs_int32 code = 0;
     int n = 0;
@@ -413,10 +404,7 @@ GetNameOrId(as, lids, lnames)
 
 
 int
-GetNameOrId(as, lids, lnames)
-     register struct cmd_syndesc *as;
-     struct idlist *lids;
-     struct namelist *lnames;
+GetNameOrId(register struct cmd_syndesc *as, struct idlist *lids, struct namelist *lnames)
 {
     register afs_int32 code = 0;
     int n = 0, nd = 0, nm = 0, id, x;
@@ -503,8 +491,8 @@ GetNameOrId(as, lids, lnames)
 }
 
 
-AddToGroup(as)
-     register struct cmd_syndesc *as;
+int
+AddToGroup(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     struct cmd_item *u, *g;
@@ -524,8 +512,8 @@ AddToGroup(as)
     return 0;
 }
 
-RemoveFromGroup(as)
-     register struct cmd_syndesc *as;
+int
+RemoveFromGroup(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     struct cmd_item *u, *g;
@@ -545,8 +533,8 @@ RemoveFromGroup(as)
     return 0;
 }
 
-ListMembership(as)
-     register struct cmd_syndesc *as;
+int
+ListMembership(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     idlist ids;
@@ -590,8 +578,8 @@ ListMembership(as)
     return 0;
 }
 
-Delete(as)
-     register struct cmd_syndesc *as;
+int
+Delete(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     idlist ids;
@@ -629,8 +617,8 @@ char *flags_upcase = "SOMA ";       /* legal all access values */
 char *flags_dncase = "s mar";  /* legal member acces values */
 int flags_shift[5] = { 2, 1, 2, 2, 1 };        /* bits for each */
 
-CheckEntry(as)
-     register struct cmd_syndesc *as;
+int
+CheckEntry(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     afs_int32 rcode = 1;
@@ -728,8 +716,8 @@ CheckEntry(as)
     return (rcode);
 }
 
-ListEntries(as)
-     struct cmd_syndesc *as;
+int
+ListEntries(struct cmd_syndesc *as)
 {
     afs_int32 code = 0;
     afs_int32 flag, startindex, nentries, nextstartindex;
@@ -765,8 +753,8 @@ ListEntries(as)
     return code;
 }
 
-ChownGroup(as)
-     register struct cmd_syndesc *as;
+int
+ChownGroup(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     char *name;
@@ -781,8 +769,8 @@ ChownGroup(as)
     return code;
 }
 
-ChangeName(as)
-     register struct cmd_syndesc *as;
+int
+ChangeName(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     char *oldname;
@@ -797,8 +785,8 @@ ChangeName(as)
     return code;
 }
 
-ListMax(as)
-     register struct cmd_syndesc *as;
+int
+ListMax(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     afs_int32 maxUser, maxGroup;
@@ -818,8 +806,8 @@ ListMax(as)
     return code;
 }
 
-SetMax(as)
-     register struct cmd_syndesc *as;
+int
+SetMax(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     afs_int32 maxid;
@@ -858,8 +846,8 @@ SetMax(as)
     return code;
 }
 
-SetFields(as)
-     register struct cmd_syndesc *as;
+int
+SetFields(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     idlist ids;
@@ -953,8 +941,8 @@ SetFields(as)
     return 0;
 }
 
-ListOwned(as)
-     register struct cmd_syndesc *as;
+int
+ListOwned(register struct cmd_syndesc *as)
 {
     register afs_int32 code;
     idlist ids;
@@ -1004,8 +992,7 @@ ListOwned(as)
 }
 
 static void
-add_std_args(ts)
-     register struct cmd_syndesc *ts;
+add_std_args(register struct cmd_syndesc *ts)
 {
     char test_help[AFSDIR_PATH_MAX];
 
@@ -1031,9 +1018,7 @@ static void add_NameOrId_args (ts)
 #include "AFS_component_version_number.c"
 
 int
-main(argc, argv)
-     int argc;
-     char **argv;
+main(int argc, char **argv)
 {
     register afs_int32 code;
     register struct cmd_syndesc *ts;
index 819cd21606b5cc7fd1c2032130c289af38bb8ec6..1fdab155dd4fa3d38db545068934a5b272f15c41 100644 (file)
 #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
@@ -165,12 +165,37 @@ char *pr_realmName;
 
 static struct afsconf_cell info;
 
+extern int prp_group_default;
+extern int prp_user_default;
+
 #include "AFS_component_version_number.c"
 
+int
+prp_access_mask(s)
+    char *s;
+{
+    int r;
+    if (*s >= '0' && *s <= '9') {
+       return strtol(s, NULL, 0);
+    }
+    r = 0;
+    while (*s) switch(*s++)
+    {
+    case 'S':  r |= PRP_STATUS_ANY; break;
+    case 's':  r |= PRP_STATUS_MEM; break;
+    case 'O':  r |= PRP_OWNED_ANY; break;
+    case 'M':  r |= PRP_MEMBER_ANY; break;
+    case 'm':  r |= PRP_MEMBER_MEM; break;
+    case 'A':  r |= PRP_ADD_ANY; break;
+    case 'a':  r |= PRP_ADD_MEM; break;
+    case 'r':  r |= PRP_REMOVE_MEM; break;
+    }
+    return r;
+}
+
 /* check whether caller is authorized to manage RX statistics */
 int
-pr_rxstat_userok(call)
-     struct rx_call *call;
+pr_rxstat_userok(struct rx_call *call)
 {
     return afsconf_SuperUser(prdir, call, NULL);
 }
@@ -267,6 +292,10 @@ main(int argc, char **argv)
            depthsg = atoi(argv[++a]);  /* Max search depth for supergroups */
        }
 #endif
+       else if (strncmp(arg, "-default_access", alen) == 0) {
+           prp_user_default = prp_access_mask(argv[++a]);
+           prp_group_default = prp_access_mask(argv[++a]);
+       }
        else if (strncmp(arg, "-enable_peer_stats", alen) == 0) {
            rx_enablePeerRPCStats();
        } else if (strncmp(arg, "-enable_process_stats", alen) == 0) {
@@ -291,10 +320,12 @@ main(int argc, char **argv)
                   "[-p <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
@@ -303,9 +334,11 @@ main(int argc, char **argv)
                   "[-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
index f16ad89e97a43018ce4affd84a86440656e3a326..5d6ba833cfb55c6a9c1766b2635b9980fa6ad6eb 100644 (file)
@@ -15,7 +15,7 @@
 #endif
 
 RCSID
-    ("$Header: /cvs/openafs/src/ptserver/ptuser.c,v 1.15 2003/12/11 19:06:16 shadow Exp $");
+    ("$Header: /cvs/openafs/src/ptserver/ptuser.c,v 1.16 2004/06/23 14:27:42 shadow Exp $");
 
 #if defined(UKERNEL)
 #include "afs/sysincludes.h"
@@ -64,10 +64,7 @@ static afs_int32 lastLevel;  /* security level pruclient, if any */
 static char *whoami = "libprot";
 
 afs_int32
-pr_Initialize(secLevel, confDir, cell)
-     IN afs_int32 secLevel;
-     IN char *confDir;
-     IN char *cell;
+pr_Initialize(IN afs_int32 secLevel, IN char *confDir, IN char *cell)
 {
     afs_int32 code;
     struct rx_connection *serverconns[MAXSERVERS];
@@ -212,7 +209,7 @@ pr_Initialize(secLevel, confDir, cell)
     return code;
 }
 
-
+int
 pr_End()
 {
     int code = 0;
@@ -226,9 +223,8 @@ pr_End()
 
 
 
-pr_CreateUser(name, id)
-     char name[PR_MAXNAMELEN];
-     afs_int32 *id;
+int
+pr_CreateUser(char name[PR_MAXNAMELEN], afs_int32 *id)
 {
     register afs_int32 code;
 
@@ -243,10 +239,8 @@ pr_CreateUser(name, id)
 
 }
 
-pr_CreateGroup(name, owner, id)
-     char name[PR_MAXNAMELEN];
-     char owner[PR_MAXNAMELEN];
-     afs_int32 *id;
+int 
+pr_CreateGroup(char name[PR_MAXNAMELEN], char owner[PR_MAXNAMELEN], afs_int32 *id)
 {
     register afs_int32 code;
     afs_int32 oid = 0;
@@ -270,8 +264,8 @@ pr_CreateGroup(name, owner, id)
     }
 }
 
-pr_Delete(name)
-     char *name;
+int
+pr_Delete(char *name)
 {
     register afs_int32 code;
     afs_int32 id;
@@ -286,8 +280,8 @@ pr_Delete(name)
     return code;
 }
 
-pr_DeleteByID(id)
-     afs_int32 id;
+int
+pr_DeleteByID(afs_int32 id)
 {
     register afs_int32 code;
 
@@ -295,9 +289,8 @@ pr_DeleteByID(id)
     return code;
 }
 
-pr_AddToGroup(user, group)
-     char *user;
-     char *group;
+int
+pr_AddToGroup(char *user, char *group)
 {
     register afs_int32 code;
     namelist lnames;
@@ -329,9 +322,8 @@ pr_AddToGroup(user, group)
     return code;
 }
 
-pr_RemoveUserFromGroup(user, group)
-     char *user;
-     char *group;
+int
+pr_RemoveUserFromGroup(char *user, char *group)
 {
     register afs_int32 code;
     namelist lnames;
@@ -364,9 +356,8 @@ pr_RemoveUserFromGroup(user, group)
 
 }
 
-pr_NameToId(names, ids)
-     namelist *names;
-     idlist *ids;
+int
+pr_NameToId(namelist *names, idlist *ids)
 {
     register afs_int32 code;
     register afs_int32 i;
@@ -377,9 +368,8 @@ pr_NameToId(names, ids)
     return code;
 }
 
-pr_SNameToId(name, id)
-     char name[PR_MAXNAMELEN];
-     afs_int32 *id;
+int
+pr_SNameToId(char name[PR_MAXNAMELEN], afs_int32 *id)
 {
     namelist lnames;
     idlist lids;
@@ -401,11 +391,8 @@ pr_SNameToId(name, id)
     return code;
 }
 
-
-
-pr_IdToName(ids, names)
-     idlist *ids;
-     namelist *names;
+int
+pr_IdToName(idlist *ids, namelist *names)
 {
     register afs_int32 code;
 
@@ -413,9 +400,8 @@ pr_IdToName(ids, names)
     return code;
 }
 
-pr_SIdToName(id, name)
-     afs_int32 id;
-     char name[PR_MAXNAMELEN];
+int
+pr_SIdToName(afs_int32 id, char name[PR_MAXNAMELEN])
 {
     namelist lnames;
     idlist lids;
@@ -436,11 +422,8 @@ pr_SIdToName(id, name)
     return code;
 }
 
-
-
-pr_GetCPS(id, CPS)
-     afs_int32 id;
-     prlist *CPS;
+int
+pr_GetCPS(afs_int32 id, prlist *CPS)
 {
     register afs_int32 code;
     afs_int32 over;
@@ -458,11 +441,8 @@ pr_GetCPS(id, CPS)
     return 0;
 }
 
-
-pr_GetCPS2(id, host, CPS)
-     afs_int32 id;
-     afs_int32 host;
-     prlist *CPS;
+int
+pr_GetCPS2(afs_int32 id, afs_int32 host, prlist *CPS)
 {
     register afs_int32 code;
     afs_int32 over;
@@ -480,9 +460,8 @@ pr_GetCPS2(id, host, CPS)
     return 0;
 }
 
-pr_GetHostCPS(host, CPS)
-     afs_int32 host;
-     prlist *CPS;
+int
+pr_GetHostCPS(afs_int32 host, prlist *CPS)
 {
     register afs_int32 code;
     afs_int32 over;
@@ -501,10 +480,8 @@ pr_GetHostCPS(host, CPS)
     return 0;
 }
 
-
-pr_ListMembers(group, lnames)
-     char *group;
-     namelist *lnames;
+int
+pr_ListMembers(char *group, namelist *lnames)
 {
     register afs_int32 code;
     afs_int32 gid;
@@ -518,10 +495,8 @@ pr_ListMembers(group, lnames)
     return code;
 }
 
-pr_ListOwned(oid, lnames, moreP)
-     afs_int32 oid;
-     namelist *lnames;
-     afs_int32 *moreP;
+int
+pr_ListOwned(afs_int32 oid, namelist *lnames, afs_int32 *moreP)
 {
     register afs_int32 code;
     prlist alist;
@@ -547,9 +522,8 @@ pr_ListOwned(oid, lnames, moreP)
     return PRSUCCESS;
 }
 
-pr_IDListMembers(gid, lnames)
-     afs_int32 gid;
-     namelist *lnames;
+int
+pr_IDListMembers(afs_int32 gid, namelist *lnames)
 {
     register afs_int32 code;
     prlist alist;
@@ -574,10 +548,8 @@ pr_IDListMembers(gid, lnames)
     return PRSUCCESS;
 }
 
-
-pr_ListEntry(id, aentry)
-     afs_int32 id;
-     struct prcheckentry *aentry;
+int
+pr_ListEntry(afs_int32 id, struct prcheckentry *aentry)
 {
     register afs_int32 code;
 
@@ -586,11 +558,7 @@ pr_ListEntry(id, aentry)
 }
 
 afs_int32
-pr_ListEntries(flag, startindex, nentries, entries, nextstartindex)
-     afs_int32 startindex;
-     afs_int32 *nentries;
-     struct prlistentries **entries;
-     afs_int32 *nextstartindex;
+pr_ListEntries(int flag, afs_int32 startindex, afs_int32 *nentries, struct prlistentries **entries, afs_int32 *nextstartindex)
 {
     afs_int32 code;
     prentries bulkentries;
@@ -609,11 +577,8 @@ pr_ListEntries(flag, startindex, nentries, entries, nextstartindex)
     return code;
 }
 
-pr_CheckEntryByName(name, id, owner, creator)
-     char *name;
-     afs_int32 *id;
-     char *owner;
-     char *creator;
+int
+pr_CheckEntryByName(char *name, afs_int32 *id, char *owner, char *creator)
 {
     /* struct prcheckentry returns other things, which aren't useful to show at this time. */
     register afs_int32 code;
@@ -637,11 +602,8 @@ pr_CheckEntryByName(name, id, owner, creator)
     return PRSUCCESS;
 }
 
-pr_CheckEntryById(name, id, owner, creator)
-     char *name;
-     afs_int32 id;
-     char *owner;
-     char *creator;
+int
+pr_CheckEntryById(char *name, afs_int32 id, char *owner, char *creator)
 {
     /* struct prcheckentry returns other things, which aren't useful to show at this time. */
     register afs_int32 code;
@@ -665,11 +627,8 @@ pr_CheckEntryById(name, id, owner, creator)
     return PRSUCCESS;
 }
 
-pr_ChangeEntry(oldname, newname, newid, newowner)
-     char *oldname;
-     char *newname;
-     afs_int32 *newid;
-     char *newowner;
+int
+pr_ChangeEntry(char *oldname, char *newname, afs_int32 *newid, char *newowner)
 {
     register afs_int32 code;
     afs_int32 id;
@@ -691,10 +650,8 @@ pr_ChangeEntry(oldname, newname, newid, newowner)
     return code;
 }
 
-pr_IsAMemberOf(uname, gname, flag)
-     char *uname;
-     char *gname;
-     afs_int32 *flag;
+int
+pr_IsAMemberOf(char *uname, char *gname, afs_int32 *flag)
 {
     register afs_int32 code;
     namelist lnames;
@@ -726,9 +683,8 @@ pr_IsAMemberOf(uname, gname, flag)
     return code;
 }
 
-
-pr_ListMaxUserId(mid)
-     afs_int32 *mid;
+int
+pr_ListMaxUserId(afs_int32 *mid)
 {
     register afs_int32 code;
     afs_int32 gid;
@@ -736,8 +692,8 @@ pr_ListMaxUserId(mid)
     return code;
 }
 
-pr_SetMaxUserId(mid)
-     afs_int32 mid;
+int
+pr_SetMaxUserId(afs_int32 mid)
 {
     register afs_int32 code;
     afs_int32 flag = 0;
@@ -745,8 +701,8 @@ pr_SetMaxUserId(mid)
     return code;
 }
 
-pr_ListMaxGroupId(mid)
-     afs_int32 *mid;
+int
+pr_ListMaxGroupId(afs_int32 *mid)
 {
     register afs_int32 code;
     afs_int32 id;
@@ -754,8 +710,8 @@ pr_ListMaxGroupId(mid)
     return code;
 }
 
-pr_SetMaxGroupId(mid)
-     afs_int32 mid;
+int
+pr_SetMaxGroupId(afs_int32 mid)
 {
     register afs_int32 code;
     afs_int32 flag = 0;
@@ -766,10 +722,7 @@ pr_SetMaxGroupId(mid)
 }
 
 afs_int32
-pr_SetFieldsEntry(id, mask, flags, ngroups, nusers)
-     afs_int32 id;
-     afs_int32 mask;
-     afs_int32 flags, ngroups, nusers;
+pr_SetFieldsEntry(afs_int32 id, afs_int32 mask, afs_int32 flags, afs_int32 ngroups, afs_int32 nusers)
 {
     register afs_int32 code;
 
@@ -779,10 +732,8 @@ pr_SetFieldsEntry(id, mask, flags, ngroups, nusers)
     return code;
 }
 
-
 int
-stolower(s)
-     char *s;
+stolower(char *s)
 {
     while (*s) {
        if (isupper(*s))
index 87185e18f343c4bf276e53e6ffcd62395fa9d5e7..96cbabf4e3e33264d434163978782ae5cfc7aec8 100644 (file)
@@ -24,7 +24,7 @@
 #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>
@@ -62,6 +62,9 @@ extern int IDCmp();
 extern afs_int32 AddToEntry();
 static char *whoami = "ptserver";
 
+int prp_user_default = PRP_USER_DEFAULT;
+int prp_group_default = PRP_GROUP_DEFAULT;
+
 #if defined(SUPERGROUPS)
 
 #include "map.h"
@@ -91,10 +94,7 @@ struct map *sg_found;
 int (*pt_save_dbase_write) ();
 
 int
-pt_mywrite(tdb, fno, bp, pos, count)
-     struct ubik_dbase *tdb;
-     afs_int32 fno, pos, count;
-     char *bp;
+pt_mywrite(struct ubik_dbase *tdb, afs_int32 fno, char *bp, afs_int32 pos, afs_int32 count)
 {
     afs_uint32 headersize = ntohl(cheader.headerSize);
 
@@ -188,6 +188,7 @@ pt_mywrite(tdb, fno, bp, pos, count)
  *  just after ubik_ServerInit.
  */
 
+void 
 pt_hook_write()
 {
     extern struct ubik_dbase *ubik_dbase;
@@ -208,8 +209,7 @@ pt_hook_write()
  *   return one if name is OK and zero if name is bogus. */
 
 static int
-CorrectUserName(name)
-     char *name;
+CorrectUserName(char *name)
 {
     extern int pr_realmNameLen;
 
@@ -227,12 +227,10 @@ CorrectUserName(name)
  * rename, which then compares the correct name with the requested new name. */
 
 static afs_int32
-CorrectGroupName(ut, aname, cid, oid, cname)
-     struct ubik_trans *ut;
-     char aname[PR_MAXNAMELEN];        /* name for group */
-     afs_int32 cid;            /* caller id */
-     afs_int32 oid;            /* owner of group */
-     char cname[PR_MAXNAMELEN];        /* correct name for group */
+CorrectGroupName(struct ubik_trans *ut, char aname[PR_MAXNAMELEN],     /* name for group */
+                afs_int32 cid,         /* caller id */
+                afs_int32 oid,         /* owner of group */
+                char cname[PR_MAXNAMELEN])     /* correct name for group */
 {
     afs_int32 code;
     int admin;
@@ -308,12 +306,10 @@ CorrectGroupName(ut, aname, cid, oid, cname)
 }
 
 int
-AccessOK(ut, cid, tentry, mem, any)
-     struct ubik_trans *ut;
-     afs_int32 cid;            /* caller id */
-     struct prentry *tentry;   /* object being accessed */
-     int mem;                  /* check membership in aid, if group */
-     int any;                  /* if set return true */
+AccessOK(struct ubik_trans *ut, afs_int32 cid,         /* caller id */
+        struct prentry *tentry,        /* object being accessed */
+        int mem,                       /* check membership in aid, if group */
+        int any)                       /* if set return true */
 {
     afs_int32 flags;
     afs_int32 oid;
@@ -332,9 +328,9 @@ AccessOK(ut, cid, tentry, mem, any)
     }
     if (!(flags & PRACCESS)) { /* provide default access */
        if (flags & PRGRP)
-           flags |= PRP_GROUP_DEFAULT;
+           flags |= prp_group_default;
        else
-           flags |= PRP_USER_DEFAULT;
+           flags |= prp_user_default;
     }
 
     if (flags & any)
@@ -360,14 +356,7 @@ AccessOK(ut, cid, tentry, mem, any)
 }
 
 afs_int32
-CreateEntry(at, aname, aid, idflag, flag, oid, creator)
-     struct ubik_trans *at;
-     char aname[PR_MAXNAMELEN];
-     afs_int32 *aid;
-     afs_int32 idflag;
-     afs_int32 flag;
-     afs_int32 oid;
-     afs_int32 creator;
+CreateEntry(struct ubik_trans *at, char aname[PR_MAXNAMELEN], afs_int32 *aid, afs_int32 idflag, afs_int32 flag, afs_int32 oid, afs_int32 creator)
 {
     /* get and init a new entry */
     afs_int32 code;
@@ -633,10 +622,7 @@ CreateEntry(at, aname, aid, idflag, flag, oid, creator)
  * entry if appropriate */
 
 afs_int32
-RemoveFromEntry(at, aid, bid)
-     struct ubik_trans *at;
-     afs_int32 aid;
-     afs_int32 bid;
+RemoveFromEntry(struct ubik_trans *at, afs_int32 aid, afs_int32 bid)
 {
     afs_int32 code;
     struct prentry tentry;
@@ -724,11 +710,7 @@ RemoveFromEntry(at, aid, bid)
  * entry if appropriate */
 
 afs_int32
-ChangeIDEntry(at, aid, newid, bid)
-     register struct ubik_trans *at;
-     register afs_int32 aid;
-     register afs_int32 bid;
-     afs_int32 newid;
+ChangeIDEntry(register struct ubik_trans *at, register afs_int32 aid, afs_int32 newid, register afs_int32 bid)
 {
     register afs_int32 code;
     struct prentry tentry;
@@ -796,10 +778,7 @@ ChangeIDEntry(at, aid, newid, bid)
  * continuation entry if appropriate */
 
 afs_int32
-RemoveFromSGEntry(at, aid, bid)
-     register struct ubik_trans *at;
-     register afs_int32 aid;
-     register afs_int32 bid;
+RemoveFromSGEntry(register struct ubik_trans *at, register afs_int32 aid, register afs_int32 bid)
 {
     register afs_int32 code;
     struct prentry tentry;
@@ -897,10 +876,7 @@ RemoveFromSGEntry(at, aid, bid)
  * groups, putting groups owned by it on orphan chain, and freeing the space */
 
 afs_int32
-DeleteEntry(at, tentry, loc)
-     struct ubik_trans *at;
-     struct prentry *tentry;
-     afs_int32 loc;
+DeleteEntry(struct ubik_trans *at, struct prentry *tentry, afs_int32 loc)
 {
     afs_int32 code;
     struct contentry centry;
@@ -1051,11 +1027,7 @@ DeleteEntry(at, tentry, loc)
  * Note the entry is written out by this routine. */
 
 afs_int32
-AddToEntry(tt, entry, loc, aid)
-     struct ubik_trans *tt;
-     struct prentry *entry;
-     afs_int32 loc;
-     afs_int32 aid;
+AddToEntry(struct ubik_trans *tt, struct prentry *entry, afs_int32 loc, afs_int32 aid)
 {
     afs_int32 code;
     afs_int32 i;
@@ -1168,11 +1140,7 @@ AddToEntry(tt, entry, loc, aid)
  * Note the entry is written out by this routine. */
 
 afs_int32
-AddToSGEntry(tt, entry, loc, aid)
-     struct ubik_trans *tt;
-     struct prentry *entry;
-     afs_int32 loc;
-     afs_int32 aid;
+AddToSGEntry(struct ubik_trans *tt, struct prentry *entry, afs_int32 loc, afs_int32 aid)
 {
     register afs_int32 code;
     afs_int32 i;
@@ -1281,10 +1249,7 @@ AddToSGEntry(tt, entry, loc, aid)
 #endif /* SUPERGROUPS */
 
 afs_int32
-AddToPRList(alist, sizeP, id)
-     prlist *alist;
-     int *sizeP;
-     afs_int32 id;
+AddToPRList(prlist *alist, int *sizeP, afs_int32 id)
 {
     char *tmp;
     int count;
@@ -1307,11 +1272,7 @@ AddToPRList(alist, sizeP, id)
 }
 
 afs_int32
-GetList(at, tentry, alist, add)
-     struct ubik_trans *at;
-     struct prentry *tentry;
-     prlist *alist;
-     afs_int32 add;
+GetList(struct ubik_trans *at, struct prentry *tentry, prlist *alist, afs_int32 add)
 {
     afs_int32 code;
     afs_int32 i;
@@ -1386,12 +1347,7 @@ GetList(at, tentry, alist, add)
 
 
 afs_int32
-GetList2(at, tentry, tentry2, alist, add)
-     struct ubik_trans *at;
-     struct prentry *tentry;
-     struct prentry *tentry2;
-     prlist *alist;
-     afs_int32 add;
+GetList2(struct ubik_trans *at, struct prentry *tentry, struct prentry *tentry2, prlist *alist, afs_int32 add)
 {
     afs_int32 code = 0;
     afs_int32 i;
@@ -1499,12 +1455,7 @@ GetList2(at, tentry, tentry2, alist, add)
 #if defined(SUPERGROUPS)
 
 afs_int32
-GetListSG2(at, gid, alist, sizeP, depth)
-     struct ubik_trans *at;
-     afs_int32 gid;
-     prlist *alist;
-     afs_int32 depth;
-     afs_int32 *sizeP;
+GetListSG2(struct ubik_trans *at, afs_int32 gid, prlist *alist, afs_int32 *sizeP, afs_int32 depth)
 {
     register afs_int32 code;
     struct prentry tentry;
@@ -1620,10 +1571,7 @@ GetListSG2(at, gid, alist, sizeP, depth)
 }
 
 afs_int32
-GetSGList(at, tentry, alist)
-     struct ubik_trans *at;
-     struct prentry *tentry;
-     prlist *alist;
+GetSGList(struct ubik_trans *at, struct prentry *tentry, prlist *alist)
 {
     register afs_int32 code;
     afs_int32 i;
@@ -1677,10 +1625,7 @@ GetSGList(at, tentry, alist)
 #endif /* SUPERGROUPS */
 
 afs_int32
-GetOwnedChain(ut, next, alist)
-     struct ubik_trans *ut;
-     afs_int32 *next;
-     prlist *alist;
+GetOwnedChain(struct ubik_trans *ut, afs_int32 *next, prlist *alist)
 {
     afs_int32 code;
     struct prentry tentry;
@@ -1711,10 +1656,7 @@ GetOwnedChain(ut, next, alist)
 }
 
 afs_int32
-GetMax(at, uid, gid)
-     struct ubik_trans *at;
-     afs_int32 *uid;
-     afs_int32 *gid;
+GetMax(struct ubik_trans *at, afs_int32 *uid, afs_int32 *gid)
 {
     *uid = ntohl(cheader.maxID);
     *gid = ntohl(cheader.maxGroup);
@@ -1722,10 +1664,7 @@ GetMax(at, uid, gid)
 }
 
 afs_int32
-SetMax(at, id, flag)
-     struct ubik_trans *at;
-     afs_int32 id;
-     afs_int32 flag;
+SetMax(struct ubik_trans *at, afs_int32 id, afs_int32 flag)
 {
     afs_int32 code;
     if (flag & PRGRP) {
@@ -1747,8 +1686,7 @@ SetMax(at, id, flag)
 }
 
 afs_int32
-read_DbHeader(tt)
-     struct ubik_trans *tt;
+read_DbHeader(struct ubik_trans *tt)
 {
     afs_int32 code;
 
@@ -1904,13 +1842,7 @@ Initdb()
 }
 
 afs_int32
-ChangeEntry(at, aid, cid, name, oid, newid)
-     struct ubik_trans *at;
-     afs_int32 aid;
-     afs_int32 cid;
-     char *name;
-     afs_int32 oid;
-     afs_int32 newid;
+ChangeEntry(struct ubik_trans *at, afs_int32 aid, afs_int32 cid, char *name, afs_int32 oid, afs_int32 newid)
 {
     afs_int32 code;
     afs_int32 i, nptr, pos;
@@ -2243,10 +2175,8 @@ inRange(struct prentry *cellEntry, afs_int32 aid)
 
 }
 
-AddAuthGroup(tentry, alist, size)
-     struct prentry *tentry;
-     prlist *alist;
-     afs_int32 *size;
+int
+AddAuthGroup(struct prentry *tentry, prlist *alist, afs_int32 *size)
 {
     if (!(strchr(tentry->name, '@')))
        return (AddToPRList(alist, size, AUTHUSERID));
index 11cf01e899b187b18e87d180f8a7d54b2b2f51d1..6b138fd795f2dfa99e4fd68191b887bc50184ec1 100644 (file)
@@ -11,7 +11,7 @@
 #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
@@ -36,10 +36,7 @@ int verbose = 0;
 void skip();
 
 void
-report_error(code, name, gname)
-     afs_int32 code;
-     char *name;
-     char *gname;
+report_error(afs_int32 code, char *name, char *gname)
 {
     if (code == 0) {
        if (verbose)
@@ -65,9 +62,8 @@ osi_audit()
 
 #include "AFS_component_version_number.c"
 
-main(argc, argv)
-     afs_int32 argc;
-     char **argv;
+int
+main(int argc, char **argv)
 {
     register afs_int32 code;
     char name[PR_MAXNAMELEN];
@@ -218,8 +214,7 @@ main(argc, argv)
 }
 
 void
-skip(s)
-     char **s;
+skip(char **s)
 {
     while (**s != ' ' && **s != '\t' && **s != '\0')
        (*s)++;
index 52f1aa0ca2d3f5fb86f7a70e87a63f7159ad1500..e7996d59843bbbbef587bade21e52371680d16e1 100644 (file)
@@ -11,7 +11,7 @@
 #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
@@ -42,9 +42,8 @@ osi_audit()
 
 #include "AFS_component_version_number.c"
 
-main(argc, argv)
-     afs_int32 argc;
-     char **argv;
+int
+main(afs_int32 argc, char **argv)
 {
 
     register afs_int32 code;
index 175a4926a950ef60e5fcb939a4e032be3dc21ec1..63c614150568d7279443fb59ae617b8b0757da9c 100644 (file)
@@ -11,7 +11,7 @@
 #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>
@@ -55,9 +55,8 @@ static struct afsconf_dir *conf;      /* cell info, set by MyBeforeProc */
 static char conf_dir[100];
 static char lcell[MAXCELLCHARS];
 
-ListUsedIds(as, arock)
-     struct cmd_syndesc *as;
-     char *arock;
+int
+ListUsedIds(struct cmd_syndesc *as, char *arock)
 {
     afs_int32 code;
     namelist lnames;
@@ -184,9 +183,7 @@ afs_int32 *groupOwners;             /* ids of owners of groups */
 int nUsers, nGroups, nAdds, nRems, nUDels, nGDels;
 
 int
-IdCmp(a, b)
-     afs_int32 *a;
-     afs_int32 *b;
+IdCmp(afs_int32 *a, afs_int32 *b)
 {
     if (*a > *b) {
        return 1;
@@ -198,16 +195,13 @@ IdCmp(a, b)
 }
 
 static int
-sqr(n)
-     int n;
+sqr(int n)
 {
     return n * n;
 }
 
 static int
-GetGroupLimit(N, x)
-     int N;
-     int x;
+GetGroupLimit(int N, int x)
 {
     int y;
     double sqrt();
@@ -239,8 +233,7 @@ GetGroupLimit(N, x)
 }
 
 void
-CreateUser(u)
-     int u;
+CreateUser(int u)
 {
     afs_int32 code;
     char name[16];
@@ -278,8 +271,7 @@ CreateUser(u)
 }
 
 void
-CreateGroup(g)
-     int g;
+CreateGroup(int g)
 {
     afs_int32 code;
     char name[16];
@@ -347,8 +339,7 @@ CreateGroup(g)
 }
 
 int
-DeleteRandomId(list)
-     afs_int32 *list;
+DeleteRandomId(afs_int32 *list)
 {
     afs_int32 code;
     afs_int32 id;
@@ -376,8 +367,7 @@ DeleteRandomId(list)
 }
 
 void
-AddUser(u, g)
-     int u, g;
+AddUser(int u, int g)
 {
     afs_int32 code;
     afs_int32 ui, gi;
@@ -400,8 +390,7 @@ AddUser(u, g)
 }
 
 void
-RemUser(u, g)
-     int u, g;
+RemUser(int u, int g)
 {
     afs_int32 code;
     afs_int32 ui, gi;
@@ -419,9 +408,8 @@ RemUser(u, g)
     nRems++;
 }
 
-TestManyMembers(as, arock)
-     struct cmd_syndesc *as;
-     char *arock;
+int
+TestManyMembers(struct cmd_syndesc *as, char *arock)
 {
     char *filled;              /* users filled up */
     char *cleaned;             /* users cleaned up */
@@ -736,11 +724,10 @@ TestManyMembers(as, arock)
 /* Converts a byte string to ascii.  Return the number of unconverted bytes. */
 
 static int
-ka_ConvertBytes(ascii, alen, bs, bl)
-     char *ascii;              /* output buffer */
-     int alen;                 /* buffer length */
-     char bs[];                        /* byte string */
-     int bl;                   /* number of bytes */
+ka_ConvertBytes(char *ascii,           /* output buffer */
+               int alen,               /* buffer length */
+               char bs[],              /* byte string */
+               int bl)                 /* number of bytes */
 {
     int i;
     unsigned char c;
@@ -778,9 +765,8 @@ ka_ConvertBytes(ascii, alen, bs, bl)
  *     must be correct.
  */
 
-TestPrServ(as, arock)
-     struct cmd_syndesc *as;
-     char *arock;
+int
+TestPrServ(struct cmd_syndesc *as, char *arock)
 {
     afs_int32 id;
     char name[PR_MAXNAMELEN + 1];
@@ -926,9 +912,7 @@ static char tmp_cell_file[128] = "";
 static char tmp_noauth_file[128] = "";
 
 static int
-MyAfterProc(as, arock)
-     struct cmd_syndesc *as;
-     char *arock;
+MyAfterProc(struct cmd_syndesc *as, char *arock)
 {
     if (strlen(tmp_conf_file))
        unlink(tmp_conf_file);
@@ -942,9 +926,7 @@ MyAfterProc(as, arock)
 }
 
 static int
-MyBeforeProc(as, arock)
-     struct cmd_syndesc *as;
-     char *arock;
+MyBeforeProc(struct cmd_syndesc *as, char *arock)
 {
     afs_int32 code;
     int i;
@@ -1079,8 +1061,7 @@ MyBeforeProc(as, arock)
 }
 
 static void
-add_std_args(ts)
-     register struct cmd_syndesc *ts;
+add_std_args(register struct cmd_syndesc *ts)
 {
     cmd_Seek(ts, 12);
     cmd_AddParm(ts, "-confdir", CMD_SINGLE, CMD_OPTIONAL,
@@ -1102,9 +1083,8 @@ osi_audit()
 
 #include "AFS_component_version_number.c"
 
-main(argc, argv)
-     int argc;
-     char *argv[];
+int 
+main(int argc, char *argv[])
 {
     afs_int32 code;
     struct cmd_syndesc *ts;    /* ptr to parsed command line syntax */
index 0f2f393de521c12901f8e07ea9bfd066cc663a83..4be9bd13b74861fc9cf9c77a8ad991dab0865ce1 100644 (file)
@@ -11,7 +11,7 @@
 #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>
@@ -40,16 +40,14 @@ afs_int32 IsAMemberOfSG(struct ubik_trans *at, afs_int32 aid, afs_int32 gid,
 #endif
 
 afs_int32
-IDHash(x)
-     afs_int32 x;
+IDHash(afs_int32 x)
 {
     /* returns hash bucket for x */
     return ((abs(x)) % HASHSIZE);
 }
 
 afs_int32
-NameHash(aname)
-     register unsigned char *aname;
+NameHash(register unsigned char *aname)
 {
     /* returns hash bucket for aname */
     register unsigned int hash = 0;
@@ -62,12 +60,7 @@ NameHash(aname)
 
 
 afs_int32
-pr_Write(tt, afd, pos, buff, len)
-     struct ubik_trans *tt;
-     afs_int32 afd;
-     afs_int32 pos;
-     char *buff;
-     afs_int32 len;
+pr_Write(struct ubik_trans *tt, afs_int32 afd, afs_int32 pos, char *buff, afs_int32 len)
 {
     /* package up seek and write into one procedure for ease of use */
     afs_int32 code;
@@ -84,12 +77,7 @@ pr_Write(tt, afd, pos, buff, len)
 }
 
 afs_int32
-pr_Read(tt, afd, pos, buff, len)
-     struct ubik_trans *tt;
-     afs_int32 afd;
-     afs_int32 pos;
-     char *buff;
-     afs_int32 len;
+pr_Read(struct ubik_trans *tt, afs_int32 afd, afs_int32 pos, char *buff, afs_int32 len)
 {
     /* same thing for read */
     afs_int32 code;
@@ -100,11 +88,8 @@ pr_Read(tt, afd, pos, buff, len)
     return code;
 }
 
-pr_WriteEntry(tt, afd, pos, tentry)
-     struct ubik_trans *tt;
-     afs_int32 afd;
-     afs_int32 pos;
-     struct prentry *tentry;
+int
+pr_WriteEntry(struct ubik_trans *tt, afs_int32 afd, afs_int32 pos, struct prentry *tentry)
 {
     afs_int32 code;
     register afs_int32 i;
@@ -144,11 +129,8 @@ pr_WriteEntry(tt, afd, pos, tentry)
     return (code);
 }
 
-pr_ReadEntry(tt, afd, pos, tentry)
-     struct ubik_trans *tt;
-     afs_int32 afd;
-     afs_int32 pos;
-     struct prentry *tentry;
+int
+pr_ReadEntry(struct ubik_trans *tt, afs_int32 afd, afs_int32 pos, struct prentry *tentry)
 {
     afs_int32 code;
     register afs_int32 i;
@@ -193,11 +175,8 @@ pr_ReadEntry(tt, afd, pos, tentry)
     return (code);
 }
 
-pr_WriteCoEntry(tt, afd, pos, tentry)
-     struct ubik_trans *tt;
-     afs_int32 afd;
-     afs_int32 pos;
-     struct contentry *tentry;
+int
+pr_WriteCoEntry(struct ubik_trans *tt, afs_int32 afd, afs_int32 pos, struct contentry *tentry)
 {
     afs_int32 code;
     register afs_int32 i;
@@ -217,11 +196,8 @@ pr_WriteCoEntry(tt, afd, pos, tentry)
     return (code);
 }
 
-pr_ReadCoEntry(tt, afd, pos, tentry)
-     struct ubik_trans *tt;
-     afs_int32 afd;
-     afs_int32 pos;
-     struct contentry *tentry;
+int
+pr_ReadCoEntry(struct ubik_trans *tt, afs_int32 afd, afs_int32 pos, struct contentry *tentry)
 {
     afs_int32 code;
     register afs_int32 i;
@@ -250,8 +226,7 @@ pr_ReadCoEntry(tt, afd, pos, tentry)
  * new entry */
 
 afs_int32
-AllocBlock(at)
-     register struct ubik_trans *at;
+AllocBlock(register struct ubik_trans *at)
 {
     register afs_int32 code;
     afs_int32 temp;
@@ -284,9 +259,7 @@ AllocBlock(at)
 }
 
 afs_int32
-FreeBlock(at, pos)
-     register struct ubik_trans *at;
-     afs_int32 pos;
+FreeBlock(register struct ubik_trans *at, afs_int32 pos)
 {
     /* add a block of storage to the free list */
     register afs_int32 code;
@@ -307,9 +280,7 @@ FreeBlock(at, pos)
 }
 
 afs_int32
-FindByID(at, aid)
-     register struct ubik_trans *at;
-     afs_int32 aid;
+FindByID(register struct ubik_trans *at, afs_int32 aid)
 {
     /* returns address of entry if found, 0 otherwise */
     register afs_int32 code;
@@ -342,13 +313,8 @@ FindByID(at, aid)
     return 0;
 }
 
-
-
 afs_int32
-FindByName(at, aname, tentryp)
-     register struct ubik_trans *at;
-     char aname[PR_MAXNAMELEN];
-     struct prentry *tentryp;
+FindByName(register struct ubik_trans *at, char aname[PR_MAXNAMELEN], struct prentry *tentryp)
 {
     /* ditto */
     register afs_int32 code;
@@ -379,10 +345,7 @@ FindByName(at, aname, tentryp)
 }
 
 afs_int32
-AllocID(at, flag, aid)
-     register struct ubik_trans *at;
-     afs_int32 flag;
-     afs_int32 *aid;
+AllocID(register struct ubik_trans *at, afs_int32 flag, afs_int32 *aid)
 {
     /* allocs an id from the proper area of address space, based on flag */
     register afs_int32 code = 1;
@@ -441,10 +404,7 @@ AllocID(at, flag, aid)
 }
 
 afs_int32
-IDToName(at, aid, aname)
-     register struct ubik_trans *at;
-     afs_int32 aid;
-     char aname[PR_MAXNAMELEN];
+IDToName(register struct ubik_trans *at, afs_int32 aid, char aname[PR_MAXNAMELEN])
 {
     afs_int32 temp;
     struct prentry tentry;
@@ -461,10 +421,7 @@ IDToName(at, aid, aname)
 }
 
 afs_int32
-NameToID(at, aname, aid)
-     register struct ubik_trans *at;
-     char aname[PR_MAXNAMELEN];
-     afs_int32 *aid;
+NameToID(register struct ubik_trans *at, char aname[PR_MAXNAMELEN], afs_int32 *aid)
 {
     afs_int32 temp;
     struct prentry tentry;
@@ -477,9 +434,7 @@ NameToID(at, aname, aid)
 }
 
 int
-IDCmp(a, b)
-     afs_int32 *a;
-     afs_int32 *b;
+IDCmp(afs_int32 *a, afs_int32 *b)
 {
     /* used to sort CPS's so that comparison with acl's is easier */
     if (*a > *b) {
@@ -492,10 +447,7 @@ IDCmp(a, b)
 }
 
 afs_int32
-RemoveFromIDHash(tt, aid, loc)
-     struct ubik_trans *tt;
-     afs_int32 aid;
-     afs_int32 *loc;           /* ??? in case ID hashed twice ??? */
+RemoveFromIDHash(struct ubik_trans *tt, afs_int32 aid, afs_int32 *loc)         /* ??? in case ID hashed twice ??? */
 {
     /* remove entry designated by aid from id hash table */
     register afs_int32 code;
@@ -546,10 +498,7 @@ RemoveFromIDHash(tt, aid, loc)
 }
 
 afs_int32
-AddToIDHash(tt, aid, loc)
-     struct ubik_trans *tt;
-     afs_int32 aid;
-     afs_int32 loc;            /* ??? */
+AddToIDHash(struct ubik_trans *tt, afs_int32 aid, afs_int32 loc)
 {
     /* add entry at loc designated by aid to id hash table */
     register afs_int32 code;
@@ -577,10 +526,7 @@ AddToIDHash(tt, aid, loc)
 }
 
 afs_int32
-RemoveFromNameHash(tt, aname, loc)
-     struct ubik_trans *tt;
-     char *aname;
-     afs_int32 *loc;
+RemoveFromNameHash(struct ubik_trans *tt, char *aname, afs_int32 *loc)
 {
     /* remove from name hash */
     register afs_int32 code;
@@ -629,10 +575,7 @@ RemoveFromNameHash(tt, aname, loc)
 }
 
 afs_int32
-AddToNameHash(tt, aname, loc)
-     struct ubik_trans *tt;
-     char *aname;
-     afs_int32 loc;
+AddToNameHash(struct ubik_trans *tt, char *aname, afs_int32 loc)
 {
     /* add to name hash */
     register afs_int32 code;
@@ -658,10 +601,7 @@ AddToNameHash(tt, aname, loc)
 }
 
 afs_int32
-AddToOwnerChain(at, gid, oid)
-     struct ubik_trans *at;
-     afs_int32 gid;
-     afs_int32 oid;
+AddToOwnerChain(struct ubik_trans *at, afs_int32 gid, afs_int32 oid)
 {
     /* add entry designated by gid to owner chain of entry designated by oid */
     register afs_int32 code;
@@ -699,10 +639,7 @@ AddToOwnerChain(at, gid, oid)
 /* RemoveFromOwnerChain - remove gid from owner chain for oid */
 
 afs_int32
-RemoveFromOwnerChain(at, gid, oid)
-     struct ubik_trans *at;
-     afs_int32 gid;
-     afs_int32 oid;
+RemoveFromOwnerChain(struct ubik_trans *at, afs_int32 gid, afs_int32 oid)
 {
     register afs_int32 code;
     afs_int32 nptr;
@@ -761,9 +698,7 @@ RemoveFromOwnerChain(at, gid, oid)
 /* AddToOrphan - add gid to orphan list, as it's owner has died */
 
 afs_int32
-AddToOrphan(at, gid)
-     struct ubik_trans *at;
-     afs_int32 gid;
+AddToOrphan(struct ubik_trans *at, afs_int32 gid)
 {
     register afs_int32 code;
     afs_int32 loc;
@@ -787,9 +722,7 @@ AddToOrphan(at, gid)
 }
 
 afs_int32
-RemoveFromOrphan(at, gid)
-     struct ubik_trans *at;
-     afs_int32 gid;
+RemoveFromOrphan(struct ubik_trans *at, afs_int32 gid)
 {
     /* remove gid from the orphan list */
     register afs_int32 code;
@@ -844,10 +777,7 @@ RemoveFromOrphan(at, gid)
 }
 
 afs_int32
-IsOwnerOf(at, aid, gid)
-     struct ubik_trans *at;
-     afs_int32 aid;
-     afs_int32 gid;
+IsOwnerOf(struct ubik_trans *at, afs_int32 aid, afs_int32 gid)
 {
     /* returns 1 if aid is the owner of gid, 0 otherwise */
     register afs_int32 code;
@@ -866,9 +796,7 @@ IsOwnerOf(at, aid, gid)
 }
 
 afs_int32
-OwnerOf(at, gid)
-     struct ubik_trans *at;
-     afs_int32 gid;
+OwnerOf(struct ubik_trans *at, afs_int32 gid)
 {
     /* returns the owner of gid */
     register afs_int32 code;
@@ -886,10 +814,7 @@ OwnerOf(at, gid)
 
 
 afs_int32
-IsAMemberOf(at, aid, gid)
-     struct ubik_trans *at;
-     afs_int32 aid;
-     afs_int32 gid;
+IsAMemberOf(struct ubik_trans *at, afs_int32 aid, afs_int32 gid)
 {
     /* returns true if aid is a member of gid */
 #if !defined(SUPERGROUPS)
@@ -947,13 +872,8 @@ IsAMemberOf(at, aid, gid)
 
 
 #if defined(SUPERGROUPS)
-
 afs_int32
-IsAMemberOfSG(at, aid, gid, depth)
-     struct ubik_trans *at;
-     afs_int32 aid;
-     afs_int32 gid;
-     afs_int32 depth;
+IsAMemberOfSG(struct ubik_trans *at, afs_int32 aid, afs_int32 gid, afs_int32 depth) 
 {
     /* returns true if aid is a member of gid */
     struct prentry tentry;
@@ -1017,5 +937,4 @@ IsAMemberOfSG(at, aid, gid, depth)
     }
     return 0;                  /* actually, should never get here */
 }
-
 #endif /* SUPERGROUPS */
index d3ce2a96ede9f03fb871b707ba9c4db3e2943abd..d407e690596a3cafb76a7cf44c6cb100871108a4 100644 (file)
@@ -16,7 +16,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/rx/LINUX/rx_knet.c,v 1.19 2003/07/15 23:16:22 shadow Exp $");
+    ("$Header: /cvs/openafs/src/rx/LINUX/rx_knet.c,v 1.20 2004/06/21 20:06:26 shadow Exp $");
 
 #include <linux/version.h>
 #ifdef AFS_LINUX22_ENV
@@ -37,7 +37,11 @@ rxk_NewSocket(short aport)
     int code;
 
 
+#ifdef LINUX_KERNEL_IS_SELINUX
+    code = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sockp, 0);
+#else
     code = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sockp);
+#endif
     if (code < 0)
        return NULL;
 
index 4834c5b265a73c954d49e3000d6943e41373d388..678e2769f32f11b4768b32bb46451366989403a9 100644 (file)
@@ -11,7 +11,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/rx/SOLARIS/rx_knet.c,v 1.16 2003/07/15 23:16:26 shadow Exp $");
+    ("$Header: /cvs/openafs/src/rx/SOLARIS/rx_knet.c,v 1.17 2004/06/24 17:38:34 shadow Exp $");
 
 #ifdef AFS_SUN5_ENV
 #include "rx/rx_kcommon.h"
@@ -52,10 +52,12 @@ int (*sockfs_sosendmsg)
   (struct sonode *, struct nmsghdr *, struct uio *) = NULL;
 int (*sockfs_sosetsockopt)
   (struct sonode *, int, int, void *, int) = NULL;
+#ifndef AFS_SUN510_ENV
 int (*sockfs_sounbind)
   (struct sonode *, int);
 void (*sockfs_sockfree)
   (struct sonode *);
+#endif
 
 static afs_uint32 myNetAddrs[ADDRSPERSITE];
 static int myNetMTUs[ADDRSPERSITE];
@@ -70,6 +72,9 @@ rxi_GetIFInfo()
     ill_t *ill;
     ipif_t *ipif;
     int rxmtu, maxmtu;
+#ifdef AFS_SUN510_ENV
+    ill_walk_context_t ctx;
+#endif
 
     int mtus[ADDRSPERSITE];
     afs_uint32 addrs[ADDRSPERSITE];
@@ -78,7 +83,11 @@ rxi_GetIFInfo()
     memset(mtus, 0, sizeof(mtus));
     memset(addrs, 0, sizeof(addrs));
 
+#ifdef AFS_SUN510_ENV
+    for (ill = ILL_START_WALK_ALL(&ctx) ; ill ; ill = ill_next(&ctx, ill)) {
+#else
     for (ill = ill_g_head; ill; ill = ill->ill_next) {
+#endif
 #ifdef AFS_SUN58_ENV
        /* Make sure this is an IPv4 ILL */
        if (ill->ill_isv6)
@@ -144,6 +153,9 @@ rxi_FindIfMTU(afs_uint32 addr)
     afs_uint32 myAddr, netMask;
     int match_value = 0;
     int mtu = -1;
+#ifdef AFS_SUN510_ENV
+    ill_walk_context_t ctx;
+#endif
 
     if (numMyNetAddrs == 0)
        rxi_GetIFInfo();
@@ -158,7 +170,11 @@ rxi_FindIfMTU(afs_uint32 addr)
     else
        netMask = 0;
 
+#ifdef AFS_SUN510_ENV
+    for (ill = ILL_START_WALK_ALL(&ctx) ; ill ; ill = ill_next(&ctx, ill)) {
+#else
     for (ill = ill_g_head; ill; ill = ill->ill_next) {
+#endif
 #ifdef AFS_SUN58_ENV
        /* Make sure this is an IPv4 ILL */
        if (ill->ill_isv6)
@@ -254,6 +270,7 @@ rxk_NewSocket(short aport)
            return NULL;
        }
     }
+#ifndef AFS_SUN510_ENV
     if (sockfs_sounbind == NULL) {
        sockfs_sounbind = (int (*)())modlookup("sockfs", "sounbind");
        if (sockfs_sounbind == NULL)
@@ -264,6 +281,7 @@ rxk_NewSocket(short aport)
        if (sockfs_sockfree == NULL)
            return NULL;
     }
+#endif
 
     accessvp = sockfs_solookup(AF_INET, SOCK_DGRAM, 0, "/dev/udp", &error);
     if (accessvp == NULL) {
@@ -307,6 +325,7 @@ osi_FreeSocket(register struct osi_socket *asocket)
     struct sockaddr_in taddr;
     struct iovec dvec;
     char c;
+    vnode_t *vp;
 
     AFS_STATCNT(osi_FreeSocket);
 
@@ -322,8 +341,14 @@ osi_FreeSocket(register struct osi_socket *asocket)
        afs_osi_Sleep(&rxk_ListenerPid);
     }
 
+#ifdef AFS_SUN510_ENV
+    vp = SOTOV(so);
+    VOP_CLOSE(vp, FREAD|FWRITE, 1, (offset_t)0, CRED());
+    VN_RELE(vp);
+#else
     sockfs_sounbind(so, 0);
     sockfs_sockfree(so);
+#endif
     return 0;
 }
 
index 6bb49e2dcd3c90e9bb0c6560d0e5c65aa69f5067..6930ee4c143c3c6b764dadbf86922ffff3e60a15 100644 (file)
@@ -17,7 +17,7 @@
 #endif
 
 RCSID
-    ("$Header: /cvs/openafs/src/rx/rx.c,v 1.54 2004/04/18 06:13:51 kolya Exp $");
+    ("$Header: /cvs/openafs/src/rx/rx.c,v 1.56 2004/06/02 06:08:01 shadow Exp $");
 
 #ifdef KERNEL
 #include "afs/sysincludes.h"
@@ -3993,7 +3993,8 @@ rxi_AttachServerProc(register struct rx_call *call,
            MUTEX_ENTER(&rx_stats_mutex);
            rx_nWaiting--;
            MUTEX_EXIT(&rx_stats_mutex);
-           queue_Remove(call);
+           if (queue_IsOnQueue(call))
+               queue_Remove(call);
        }
        call->state = RX_STATE_ACTIVE;
        call->mode = RX_MODE_RECEIVING;
@@ -6127,16 +6128,18 @@ MakeDebugCall(osi_socket socket, afs_uint32 remoteAddr, afs_uint16 remotePort,
        tv.tv_sec = 1;
        tv.tv_usec = 0;
        code = select(socket + 1, &imask, 0, 0, &tv);
-       if (code > 0) {
+       if (code == 1 && FD_ISSET(socket,&imask)) {
            /* now receive a packet */
            faddrLen = sizeof(struct sockaddr_in);
            code =
                recvfrom(socket, tbuffer, sizeof(tbuffer), 0,
                         (struct sockaddr *)&faddr, &faddrLen);
 
-           memcpy(&theader, tbuffer, sizeof(struct rx_header));
-           if (counter == ntohl(theader.callNumber))
-               break;
+        if (code > 0) {
+            memcpy(&theader, tbuffer, sizeof(struct rx_header));
+            if (counter == ntohl(theader.callNumber))
+                break;
+        }
        }
 
        /* see if we've timed out */
index 4d97357b0c61d567024fed0c4373d69d27ae2f42..75b594a326411581d167b543e40a2256503e7fd2 100644 (file)
 /* 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
index 41a4d997d745d5fed036515cff9df2551f36862f..e70a9d428e3ccf31964399ae6dd29d76c728f1bd 100644 (file)
  * 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"
index e15d82307196d176adb616fb844a850bb8475811..ca41daf534cbb321edb94696aead7af52dcffc9f 100644 (file)
@@ -7,15 +7,15 @@
  * 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
index cb46a78ea42b110651d892e254a0c416beff2be5..a24f25e4dae9e1c81b6c0b0cdc8473cf39d1fd8b 100644 (file)
@@ -15,7 +15,7 @@
 #endif
 
 RCSID
-    ("$Header: /cvs/openafs/src/rx/rx_packet.c,v 1.33 2003/11/29 21:46:30 jaltman Exp $");
+    ("$Header: /cvs/openafs/src/rx/rx_packet.c,v 1.35 2004/06/02 14:50:23 jaltman Exp $");
 
 #ifdef KERNEL
 #if defined(UKERNEL)
@@ -64,6 +64,9 @@ RCSID
 #if defined(AFS_NT40_ENV) || defined(AFS_DJGPP_ENV)
 #ifdef AFS_NT40_ENV
 #include <winsock2.h>
+#ifndef EWOULDBLOCK
+#define EWOULDBLOCK WSAEWOULDBLOCK
+#endif
 #else
 #include <sys/socket.h>
 #include <netinet/in.h>
@@ -826,13 +829,11 @@ rxi_ReadPacket(int socket, register struct rx_packet *p, afs_uint32 * host,
     if ((nbytes > tlen) || (p->length & 0x8000)) {     /* Bogus packet */
        if (nbytes > 0)
            rxi_MorePackets(rx_initSendWindow);
-#ifndef AFS_NT40_ENV
        else if (nbytes < 0 && errno == EWOULDBLOCK) {
            MUTEX_ENTER(&rx_stats_mutex);
            rx_stats.noPacketOnRead++;
            MUTEX_EXIT(&rx_stats_mutex);
        }
-#endif
        else {
            MUTEX_ENTER(&rx_stats_mutex);
            rx_stats.bogusPacketOnRead++;
@@ -1154,6 +1155,7 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
 #ifndef        RX_ENABLE_LOCKS
            tstat.waitingForPackets = rx_waitingForPackets;
 #endif
+           MUTEX_ENTER(&rx_serverPool_lock);
            tstat.nFreePackets = htonl(rx_nFreePackets);
            tstat.callsExecuted = htonl(rxi_nCalls);
            tstat.packetReclaims = htonl(rx_packetReclaims);
@@ -1161,6 +1163,7 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
            tstat.nWaiting = htonl(rx_nWaiting);
            queue_Count(&rx_idleServerQueue, np, nqe, rx_serverQueueEntry,
                        tstat.idleThreads);
+           MUTEX_EXIT(&rx_serverPool_lock);
            tstat.idleThreads = htonl(tstat.idleThreads);
            tl = sizeof(struct rx_debugStats) - ap->length;
            if (tl > 0)
index 8dee03af864f390537ef19b7195b57fe186d2ce4..04f37cfa62e0d2b6e34b66225697508e56410f3b 100644 (file)
@@ -18,7 +18,7 @@
 #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)
 
@@ -78,6 +78,14 @@ recvmsg(int socket, struct msghdr *msgP, int flags)
        /* Accounts for any we didn't copy in to iovecs. */
        code -= size;
     } else {
+#ifdef AFS_NT40_ENV
+    if (code == SOCKET_ERROR)
+        code = WSAGetLastError();
+    if (code == WSAEWOULDBLOCK)
+        errno = WSAEWOULDBLOCK;
+    else
+        errno = EIO;
+#endif /* AFS_NT40_ENV */
        code = -1;
     }
 
@@ -125,10 +133,12 @@ sendmsg(int socket, struct msghdr *msgP, int flags)
        switch (code) {
        case WSAEINPROGRESS:
        case WSAENETRESET:
-       case WSAEWOULDBLOCK:
        case WSAENOBUFS:
            errno = 0;
            break;
+    case WSAEWOULDBLOCK:
+        errno = WSAEWOULDBLOCK;
+        break;
        default:
            errno = EIO;
            break;
@@ -145,8 +155,4 @@ sendmsg(int socket, struct msghdr *msgP, int flags)
     return code;
 
 }
-
-
-
-
 #endif /* AFS_NT40_ENV || AFS_DJGPP_ENV */
index ca18695f98759e5fb453dfb4a7319db78c474e26..b13983b124a8d69398f006c827a97dcb2c476f25 100644 (file)
@@ -172,8 +172,12 @@ enum xdr_op {
 #if 0
 typedef bool_t(*xdrproc_t) ();
 #else
+#ifdef AFS_I386_LINUX26_ENV
+typedef bool_t(*xdrproc_t) (void *, caddr_t *, u_int);
+#else
 typedef bool_t(*xdrproc_t) (void *, ...);
 #endif
+#endif
 
 
 /*
index aa1fa8ae203e8ba39159e485a5e56fd4c3ee9886..04106554d81dcda17d4e85280cde2d3d06d3a61a 100644 (file)
  * 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
index e968d94d58f41dbcf264e66cc290ddec1e980231..0bf95d9530a063ed402bbf3c41242dbf4b4a6fdb 100644 (file)
  * 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
index a571ee540383de97c44043f57a5e619464680195..37441430e9caf455288c89f6a2a78c77bf6ea255 100644 (file)
@@ -23,7 +23,7 @@
 #define INCLUDE_RXKAD_PRIVATE_DECLS
 
 RCSID
-    ("$Header: /cvs/openafs/src/rxkad/rxkad_common.c,v 1.19 2004/03/10 07:46:34 shadow Exp $");
+    ("$Header: /cvs/openafs/src/rxkad/rxkad_common.c,v 1.20 2004/06/23 14:27:44 shadow Exp $");
 
 #ifdef KERNEL
 #ifndef UKERNEL
@@ -526,3 +526,27 @@ rxkad_GetStats(struct rx_securityClass *aobj, struct rx_connection *aconn,
     }
     return 0;
 }
+
+rxkad_level
+rxkad_StringToLevel(char *name)
+{
+  if (strcmp(name, "clear") == 0)
+    return rxkad_clear;
+  if (strcmp(name, "auth") == 0)
+    return rxkad_auth;
+  if (strcmp(name, "crypt") == 0)
+    return rxkad_crypt;
+  return -1;
+}
+
+char *
+rxkad_LevelToString(rxkad_level level)
+{
+  if (level == rxkad_clear) 
+      return "clear";
+  if (level == rxkad_auth) 
+      return "auth";
+  if (level == rxkad_crypt) 
+      return "crypt";
+  return "unknown";
+}
index 3dc8930b78140051c232d7d1dddf38edfe2c991b..c689ea2d8c820ddc556e725844175252dfea83e9 100644 (file)
@@ -76,6 +76,8 @@ extern int rxkad_PreparePacket(struct rx_securityClass *aobj,
 extern int rxkad_GetStats(struct rx_securityClass *aobj,
                          struct rx_connection *aconn,
                          struct rx_securityObjectStats *astats);
+extern rxkad_level rxkad_StringToLevel(char *string);
+extern char *rxkad_LevelToString(rxkad_level level);
 
 
 /* rxkad_errs.c */
index 78c6ce87c9302195ed109738a5f63f1e775afd9e..8489fedb04b69c44aceb45f5fb710d42be88b4fc 100644 (file)
@@ -7,3 +7,5 @@ rmtsys.h
 rmtsys.ss.c
 rmtsys.xdr.c
 rmtsysd
+afs.exp
+afsl.exp
index 23033ffb8bf905cfe9cb4f9855ab193bd775ab46..4a197c8e01291ef4c20fe0d3a63a2f324e92c184 100644 (file)
@@ -45,7 +45,7 @@ tests:        pagsh pagsh.krb fixit iinc idec icreate iopen istat rmtsysd
 
 syscall.o: syscall.s
        case "$(SYS_NAME)" in \
-        sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53  | sun4_53 | sun4_52 | sun4_54 | sun4c_54 | sun4m_54 | sun4x_5? | sunx86_5?) \
+        sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53  | sun4_53 | sun4_52 | sun4_54 | sun4c_54 | sun4m_54 | sun4x_5? | sun4x_5?? | sunx86_5? | sunx86_5?? ) \
                /usr/ccs/lib/cpp  ${SFLAGS} ${srcdir}/syscall.s syscall.ss; \
                as -o syscall.o syscall.ss;             \
                $(RM) syscall.ss;;                              \
index 2784d6a0e8ba7cbd7d5600c1d71a507de15c5207..0fd2dcab83502a57fa0c95c7d84eb83402f7c133 100644 (file)
@@ -11,7 +11,7 @@
 #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>
@@ -103,7 +103,7 @@ GetIoctlHandle(char *fileNamep, HANDLE * handlep)
 {
     char *drivep;
     char netbiosName[MAX_NB_NAME_LENGTH];
-    char tbuffer[100];
+    char tbuffer[256]="";
     HANDLE fh;
 
     if (fileNamep) {
@@ -112,10 +112,47 @@ GetIoctlHandle(char *fileNamep, HANDLE * handlep)
             tbuffer[0] = *(drivep - 1);
             tbuffer[1] = ':';
             strcpy(tbuffer + 2, SMB_IOCTL_FILENAME);
-        } else
-            strcpy(tbuffer, SMB_IOCTL_FILENAME);
-    } else {
-        /* No file name specified, use UNC name */
+        } else if (fileNamep[0] == fileNamep[1] && 
+                              fileNamep[0] == '\\')
+        {
+            int count = 0, i = 0;
+
+            while (count < 4 && fileNamep[i]) {
+                tbuffer[i] = fileNamep[i];
+                if ( tbuffer[i++] == '\\' )
+                    count++;
+            }
+            if (tbuffer[i] == 0)
+                tbuffer[i++] = '\\';
+            tbuffer[i] = 0;
+            strcat(tbuffer, SMB_IOCTL_FILENAME);
+        } else {
+            char curdir[256]="";
+
+            GetCurrentDirectory(sizeof(curdir), curdir);
+            if ( curdir[1] == ':' ) {
+                tbuffer[0] = curdir[0];
+                tbuffer[1] = ':';
+                strcpy(tbuffer + 2, SMB_IOCTL_FILENAME);
+            } else if (curdir[0] == curdir[1] &&
+                       curdir[0] == '\\') 
+            {
+                int count = 0, i = 0;
+
+                while (count < 4 && curdir[i]) {
+                    tbuffer[i] = curdir[i];
+                    if ( tbuffer[i++] == '\\' )
+                        count++;
+                }
+                if (tbuffer[i] == 0)
+                    tbuffer[i++] = '\\';
+                tbuffer[i] = 0;
+                strcat(tbuffer, SMB_IOCTL_FILENAME);
+            }
+        }
+       }
+       if (!tbuffer[0]) {
+        /* No file name starting with drive colon specified, use UNC name */
         lana_GetNetbiosName(netbiosName,LANA_NETBIOS_NAME_FULL);
         sprintf(tbuffer,"\\\\%s\\all%s",netbiosName,SMB_IOCTL_FILENAME);
     }
@@ -256,11 +293,16 @@ fs_GetFullPath(char *pathp, char *outPathp, long outSize)
 
     /* now get the absolute path to the current wdir in this drive */
     GetCurrentDirectory(sizeof(tpath), tpath);
-    strcpy(outPathp, tpath + 2);       /* skip drive letter */
+       if (tpath[1] == ':')
+           strcpy(outPathp, tpath + 2);        /* skip drive letter */
+       else
+               strcpy(outPathp, tpath);                /* copy entire UNC path */
     /* if there is a non-null name after the drive, append it */
     if (*firstp != 0) {
-       strcat(outPathp, "\\");
-       strcat(outPathp, firstp);
+               int len = strlen(outPathp);
+               if (outPathp[len-1] != '\\' && outPathp[len-1] != '/') 
+                       strcat(outPathp, "\\");
+               strcat(outPathp, firstp);
     }
 
     /* finally, if necessary, switch back to our home drive letter */
index f8bd9794f78504e884e8a656f55cd7af395584e0..779059455d486f000f8f8597378cfff21b6dc308 100644 (file)
@@ -111,7 +111,7 @@ BUTCLIBS=$(DESTDIR)\lib\afs\afsbudb.lib  \
 #----------------------------------------------- BUTC
 
 $(BUTCEXE): $(BUTCOBJS) $(BUTCLIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP)
 
 .c.$(OUT)\obj:
diff --git a/src/tvolser/.cvsignore b/src/tvolser/.cvsignore
new file mode 100644 (file)
index 0000000..8aea0ea
--- /dev/null
@@ -0,0 +1,3 @@
+AFS_component_version_number.c
+Makefile
+volserver
index 9d92ca209e9c5ce88f2cf5ef0312a918a74a64b3..55713835d7f57ba8d07ae5de11df27ef4ffc86ef 100644 (file)
@@ -42,7 +42,7 @@ USVR_OBJS = \
        $(OUT)\upserver.res
 
 $(UPSERVER):  $(USVR_OBJS) $(LIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP) 
 
 ############################################################################
@@ -57,7 +57,7 @@ UCLNT_OBJS = \
        $(OUT)\upclient.res
 
 $(UPCLIENT):  $(UCLNT_OBJS)  $(LIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP) 
 
 ############################################################################
index f419a4a05627f94e70e7a026a1758febe474bf8e..f8f00c13bf3dc8f2025d58a2ff3a7b570006fdb7 100644 (file)
@@ -11,7 +11,7 @@
 #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
@@ -55,6 +55,9 @@ RCSID
 #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"
 
@@ -69,8 +72,7 @@ static int RenameNewFiles(struct filestr *modFiles);
 static int PathsAreEquivalent(char *path1, char *path2);
 
 afs_int32
-GetServer(aname)
-     char *aname;
+GetServer(char *aname)
 {
     register struct hostent *th;
     afs_int32 addr;
@@ -98,9 +100,7 @@ osi_audit()
 #endif
 
 int
-main(argc, argv)
-     int argc;
-     char **argv;
+main(int argc, char **argv)
 {
     struct rx_connection *conn;
     struct rx_call *call;
@@ -405,10 +405,9 @@ main(argc, argv)
 }
 
 /* returns 1 if the file is upto date else returns 0*/
+/*check the dir case more carefully */
 int
-IsCompatible(filename, time, length)   /*check the dir case more carefully */
-     char *filename;
-     afs_int32 time, length;
+IsCompatible(char *filename, afs_int32 time, afs_int32 length) 
 {
     struct stat status;
     afs_int32 error;
@@ -425,7 +424,7 @@ IsCompatible(filename, time, length)        /*check the dir case more carefully */
     free(localname);
 
     if (error == -1)
-       return 0;               /*a non-existent file, has to be fetched fresh */
+       return 0;       /*a non-existent file, has to be fetched fresh */
     if ((status.st_mode & S_IFMT) == S_IFDIR
        || ((status.st_mtime == time) && (status.st_size == length)))
        return (1);
@@ -434,10 +433,7 @@ IsCompatible(filename, time, length)       /*check the dir case more carefully */
 }
 
 int
-FetchFile(call, remoteFile, localFile, dirFlag)
-     struct rx_call *call;
-     char *localFile, *remoteFile;
-     int dirFlag;
+FetchFile(struct rx_call *call, char *remoteFile, char *localFile, int dirFlag)
 {
     int fd = -1, error = 0;
     struct stat status;
@@ -473,33 +469,20 @@ FetchFile(call, remoteFile, localFile, dirFlag)
 
 
 int
-update_ReceiveFile(fd, call, status)
-     register int fd;
-     register struct rx_call *call;
-     register struct stat *status;
+update_ReceiveFile(register int fd, register struct rx_call *call, register struct stat *status)
 {
     register char *buffer = (char *)0;
     afs_int32 length;
-#ifdef notdef
-    XDR xdr;
-#endif
     register int blockSize;
     afs_int32 error = 0, len;
 #ifdef AFS_AIX_ENV
-#include <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);
@@ -585,9 +568,7 @@ PathsAreEquivalent(char *path1, char *path2)
  * deleted on client site) else it returns 0 */
 
 int
-NotOnHost(filename, okhostfiles)
-     char *filename;
-     struct filestr *okhostfiles;
+NotOnHost(char *filename, struct filestr *okhostfiles)
 {
     int i, rc;
     struct stat status;
@@ -663,8 +644,7 @@ RenameNewFiles(struct filestr *modFiles)
  * and the uid, gid, file mode, access and modification times will be set to
  * the passed in values.
  */
-static
-    int
+static int
 GetFileFromUpServer(struct rx_connection *conn,        /* handle for upserver */
                    char *filename,     /* name of file to be fetched */
                    short uid, short gid,       /* uid/gid for fetched file */
index 084f4e1f0ad815f05c788ff7ee81318db8d1f088..4ca37f185372dd926da503cdcc9d2861661c6be7 100644 (file)
@@ -11,7 +11,7 @@
 #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
@@ -50,11 +50,13 @@ RCSID
 #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);
@@ -69,8 +71,7 @@ static int Quit();
 
 /* check whether caller is authorized to manage RX statistics */
 int
-update_rxstat_userok(call)
-     struct rx_call *call;
+update_rxstat_userok(struct rx_call *call)
 {
     return afsconf_SuperUser(cdir, call, NULL);
 }
@@ -131,11 +132,8 @@ PathInDirectory(char *dir, char *path)
     return inDir;
 }
 
-
 int
-AuthOkay(call, name)
-     struct rx_call *call;
-     char *name;
+AuthOkay(struct rx_call *call, char *name)
 {
     int i;
     rxkad_level level;
@@ -181,9 +179,7 @@ osi_audit()
 #endif
 
 int
-main(argc, argv)
-     int argc;
-     char *argv[];
+main(int argc, char *argv[])
 {
     struct rx_securityClass *securityObjects[3];
     struct rx_service *service;
@@ -240,7 +236,7 @@ main(argc, argv)
        if (argv[a][0] == '-') {        /* parse options */
            char arg[256];
            lcstring(arg, argv[a], sizeof(arg));
-           newLevel = StringToLevel(&argv[a][1]);
+           newLevel = rxkad_StringToLevel(&argv[a][1]);
            if (newLevel != -1) {
                level = newLevel;       /* set new level */
                continue;
@@ -317,9 +313,7 @@ main(argc, argv)
 /* fetch the file name and send it to the remote requester specified by call */
 
 int
-UPDATE_FetchFile(call, name)
-     struct rx_call *call;
-     char *name;
+UPDATE_FetchFile(struct rx_call *call, char *name)
 {
     int fd = -1;
     int error = 0;
@@ -352,9 +346,7 @@ UPDATE_FetchFile(call, name)
 /* fetch dir info about directory name and send it to remote host associated
   with call. */
 int
-UPDATE_FetchInfo(call, name)
-     struct rx_call *call;
-     char *name;
+UPDATE_FetchInfo(struct rx_call *call, char *name)
 {
     int error = 0;
     struct stat status;
@@ -395,19 +387,12 @@ Quit(msg, a, b)
 }
 
 int
-update_SendFile(fd, call, status)
-     register int fd;
-     register struct rx_call *call;
-     register struct stat *status;
+update_SendFile(register int fd, register struct rx_call *call, register struct stat *status)
 {
     char *buffer = (char *)0;
     int blockSize;
     afs_int32 length, tlen;
-#ifdef notdef
-    XDR xdr;
-#endif
 #ifdef AFS_AIX_ENV
-#include <sys/statfs.h>
     struct statfs tstatfs;
 #endif
 
@@ -427,14 +412,8 @@ update_SendFile(fd, call, status)
        printf("malloc failed\n");
        return UPDATE_ERROR;
     }
-#ifdef notdef
-    xdrrx_create(&xdr, call, XDR_ENCODE);
-    if (!xdr_afs_int32(&xdr, &length))
-       error = UPDATE_ERROR;
-#else
     tlen = htonl(length);
     rx_Write(call, &tlen, sizeof(afs_int32));  /* send length on fetch */
-#endif
     while (!error && length) {
        register int nbytes = (length > blockSize ? blockSize : length);
        nbytes = read(fd, buffer, nbytes);
@@ -456,11 +435,10 @@ update_SendFile(fd, call, status)
 /* Enumerate dir (name) and write dir entry info into temp file. 
  */
 int
-update_SendDirInfo(name, call, status, origDir)
-     char *name;               /* Name of dir to enumerate */
-     register struct rx_call *call;    /* rx call */
-     register struct stat *status;     /* stat struct for dir */
-     char *origDir;            /* orig name of dir before being localized */
+update_SendDirInfo(char *name,         /* Name of dir to enumerate */
+     register struct rx_call *call,    /* rx call */
+     register struct stat *status,     /* stat struct for dir */
+     char *origDir)            /* orig name of dir before being localized */
 {
     DIR *dirp;
     struct dirent *dp;
index 37d7f7fd472e1dd92ddd1c9a2fc97a9ec9e58f27..bdf2918534f4d96d11069d1dc839b2047ce3b2a9 100644 (file)
@@ -11,7 +11,7 @@
 #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>
@@ -35,9 +35,7 @@ RCSID
 #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));
@@ -49,8 +47,7 @@ AddToList(ah, aname)
 }
 
 int
-ZapList(ah)
-     struct filestr **ah;
+ZapList(struct filestr **ah)
 {
     register struct filestr *tf, *nf;
     for (tf = *ah; tf; tf = nf) {
@@ -61,19 +58,3 @@ ZapList(ah)
     *ah = NULL;
     return 0;
 }
-
-/* StringToLevel - converts the name of an rxkad security level to a integer
- * suitable for calling rxkad_New*SecurityObject. */
-
-rxkad_level
-StringToLevel(name)
-     char *name;
-{
-    if (strcmp(name, "clear") == 0)
-       return rxkad_clear;
-    if (strcmp(name, "auth") == 0)
-       return rxkad_auth;
-    if (strcmp(name, "crypt") == 0)
-       return rxkad_crypt;
-    return -1;
-}
index c0bddbba13a0522200e4456b49b20cd8bec9ff12..105e209a5c8f9269b047fdceb33ffed7f1675e2b 100644 (file)
@@ -41,14 +41,7 @@ CMLIBS=${TOP_LIBDIR}/libsys.a \
 
 LIBS = ${FSLIBS} 
 
-#
-# In order not to rebuild kdump* again and again we use
-# AFS_SYSNAME dependent targets (generated by configure)
-#
-KDUMP=@KDUMP@
-KDUMP64=@KDUMP64@
-
-all: fs up fstrace cmdebug livesys ${KDUMP} ${KDUMP64}
+all: fs up fstrace cmdebug livesys kdump-build
 
 #
 # Build targets
@@ -73,43 +66,6 @@ ${DEST}/etc/fstrace: fstrace
 ${DEST}/bin/cmdebug: cmdebug
        ${INSTALL} -s $? $@
 
-${DEST}/etc/${KDUMP}: ${KDUMP}
-       -set -x; \
-       case ${SYS_NAME} in \
-       sgi_6? ) \
-               ${INSTALLex} -f ${srcdir}/kdump.sh.sgi_ipnos ${DEST}/etc/kdump; \
-               ln -fs kdump ${DEST}/etc/kdump32; \
-               ln -fs kdump.IP20 ${DEST}/etc/kdump.IP22; \
-               ln -fs kdump.IP20 ${DEST}/etc/kdump.IP32; \
-               for f in kdump.IP??; \
-                       do ${INSTALL} -s $$f ${DEST}/etc/$$f || exit $$? ; \
-               done ;; \
-       sun*_5[789] ) \
-               ${INSTALLex} -f ${srcdir}/kdump.sh.solaris7 ${DEST}/etc/kdump; \
-               ${INSTALL} -s -f $? $@;; \
-       *alpha_linux* ) \
-               ${INSTALLex} -f ${srcdir}/kdump.sh.linux ${DEST}/etc/kdump; \
-               ${INSTALL} -s kdump-alpha_linux-${LINUX_VERSION} $@ ;; \
-       *linux* ) \
-               ${INSTALLex} -f ${srcdir}/kdump.sh.linux ${DEST}/etc/kdump; \
-               ${INSTALL} -s kdump-linux-${LINUX_VERSION} $@ ;; \
-       hp_ux11* ) \
-               ${INSTALLex} -f ${srcdir}/kdump.sh.hp_ux11 ${DEST}/etc/kdump; \
-               ${INSTALL} -s -f $? $@;; \
-       *nbsd*) \
-               ;; \
-       *) \
-               ${INSTALL} -s $? $@ ;; \
-       esac
-
-${DEST}/etc/${KDUMP64}: ${KDUMP64}
-       -set -x; \
-       case ${SYS_NAME} in \
-       sun4x_5[789] | hp_ux11* |sunx86_5[789] ) \
-               ${INSTALL} -s $? $@ ;;\
-       * ) \
-               echo skipping kdump64 for ${SYS_NAME} ;; \
-       esac
 
 
 up.o: up.c AFS_component_version_number.c
@@ -167,43 +123,70 @@ cmdebug.o: cmdebug.c ${INCLS} AFS_component_version_number.c
 cmdebug: cmdebug.o ${CMLIBS}
        $(CC) -o cmdebug cmdebug.o ${CFLAGS} ${CMLIBS} ${XLIBS}
 
+
+
 #
 # Kernel info dumper - these are done with submakes so that
 # the build process does not attempt to rebuild them every time it runs.
 #
 
-# *linux* - Builds kdump-X.Y.Z according to kernel version
-kdump-linux-@LINUX_VERSION@.o: kdump.c ${INCLS} AFS_component_version_number.c
-       ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${LINUX_KERNEL_PATH}/include -I${TOP_INCDIR}/afs \
-               -I${TOP_OBJDIR}/src \
-               -I${TOP_OBJDIR}/src/afs/${MKAFS_OSTYPE} \
-               -I${TOP_OBJDIR}/src/config -I${TOP_OBJDIR}/src/libafs/afs \
-               -I${TOP_SRCDIR} -I${TOP_SRCDIR}/afs/${MKAFS_OSTYPE} \
-               -I${TOP_INCDIR} ${XCFLAGS} -o kdump-linux-${LINUX_VERSION}.o \
-               -c ${srcdir}/kdump.c
+#
+# Branching target, run the actual build depending on sysname
+#
+kdump-build: kdump.c ${INCLS} AFS_component_version_number.c
+       $(MAKE) kdump kdump64
+       touch kdump-build
 
-kdump-linux-@LINUX_VERSION@: kdump-linux-@LINUX_VERSION@.o
-       ${CC} ${KERN_DBG} ${KERN_OPTMZ} -o kdump-linux-${LINUX_VERSION} kdump-linux-${LINUX_VERSION}.o \
-               ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS}
+#
+# Build targets - one for each type of kdump build process we have
+#
+kdump: kdump.o
+       -set -x; \
+       case ${SYS_NAME} in \
+       sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53 | sun4_53 | sun4_54 | sun4c_54 | sun4m_54 | sunx86_5? ) \
+               ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a  ${TOP_LIBDIR}/util.a /usr/lib/libkvm.a -lelf ${XLIBS} ;; \
+       sun*_5? | sun*_5?? ) \
+               ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a  ${TOP_LIBDIR}/util.a  ${XLIBELFA} ${XLIBKVM} ${XLIBS} ;; \
+       sgi_6? ) \
+               for f in ../libafs/STATIC.IP*/CPU_KDEFS; \
+               do      IP=`expr "$$f" : '../libafs/STATIC.\(IP..\)'`; \
+                       CPU_KDEFS=`sed 's/-mips.//' $$f`; \
+                       echo IP = $$IP; \
+                       echo CPU_KDEFS = $$CPU_KDEFS; \
+                       case $$CPU_KDEFS in \
+                       *-64*)  ${CC} ${XCFLAGS64} \
+                                       $$CPU_KDEFS \
+                                       -o kdump.$$IP kdump.$$IP.o \
+                                       ${TOP_LIBDIR}/libcmd64.a -lelf \
+                               ;; \
+                       *)      ${CC} ${XCFLAGS} \
+                                       $$CPU_KDEFS \
+                                       -o kdump.$$IP kdump.$$IP.o \
+                                       ${TOP_LIBDIR}/libcmd.a -lelf \
+                               ;; \
+                       esac || exit $$? ; \
+               done ;; \
+       *alpha_linux* ) \
+               $(MAKE) kdump-alpha_linux-@LINUX_VERSION@ ;; \
+       *linux* ) \
+               $(MAKE) kdump-linux-@LINUX_VERSION@ ;; \
+       alpha_osf1 | alpha_osf20 |  alpha_osf30 | alpha_osf32 | alpha_osf32c | alpha_dux??) \
+               ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a  ${TOP_LIBDIR}/util.a ${XLIBS} -ll -lmld;; \
+       ncrx86_* ) ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a  ${TOP_LIBDIR}/util.a -lelf ${XLIBS} ;; \
+       *nbsd*) touch kdump ;; \
+       * )     ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a  ${TOP_LIBDIR}/util.a ${XLIBS} ;; \
+       esac
 
-# *alpha_linux* - Builds kdump-X.Y.Z according to kernel version
-kdump-alpha_linux-@LINUX_VERSION@.o: kdump.c ${INCLS} AFS_component_version_number.c
-       ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${LINUX_KERNEL_PATH}/include -I${TOP_INCDIR}/afs \
-               -I${TOP_OBJDIR}/src \
-               -I${TOP_OBJDIR}/src/afs/${MKAFS_OSTYPE} \
-               -I${TOP_OBJDIR}/src/config -I${TOP_OBJDIR}/src/libafs/afs \
-               -I${TOP_SRCDIR} -I${TOP_SRCDIR}/afs/${MKAFS_OSTYPE} \
-               -I${TOP_INCDIR} ${XCFLAGS} -mno-fp-regs -ffixed-8 \
-               -o kdump-alpha_linux-${LINUX_VERSION}.o -c ${srcdir}/kdump.c ;; \
+kdump64: 
+       -set -x; \
+       case ${SYS_NAME} in \
+       sun4x_5[789] | hp_ux11* |sunx86_5[789] )  \
+               $(MAKE) kdump64.o ; \
+               ${CC} ${XCFLAGS64} -o kdump64 kdump64.o ${TOP_LIBDIR}/libcmd64.a ${XLIBELFA} ${XLIBKVM} ${XLIBS} ;; \
+       esac
 
-kdump-alpha_linux-@LINUX_VERSION@: kdump-alpha_linux-@LINUX_VERSION@.o
-       ${CC} ${KERN_DBG} ${KERN_OPTMZ} -o kdump-alpha_linux-${LINUX_VERSION} kdump-alpha_linux-${LINUX_VERSION}.o \
-               ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS}
 
-#
-# Default target
-#
-${KDUMP}.o: kdump.c ${INCLS} AFS_component_version_number.c
+kdump.o: kdump.c ${INCLS} AFS_component_version_number.c
        -set -x; \
        case ${SYS_NAME} in \
                alpha_linux* ) \
@@ -239,61 +222,85 @@ ${KDUMP}.o: kdump.c ${INCLS} AFS_component_version_number.c
                *nbsd*) \
                        touch kdump.o ;; \
                *) \
-                       ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${TOP_SRCDIR} -I${TOP_INCDIR}/afs -I${TOP_OBJDIR}/src/config -I${TOP_INCDIR} ${XCFLAGS} -o ${KDUMP}.o -c ${srcdir}/kdump.c ;; \
+                       ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${TOP_SRCDIR} -I${TOP_INCDIR}/afs \
+                       -I${TOP_OBJDIR}/src/config -I${TOP_OBJDIR}/src -I${TOP_INCDIR} ${XCFLAGS} \
+                       -o kdump.o -c ${srcdir}/kdump.c ;; \
        esac ;
 
-${KDUMP64}.o : kdump.c ${INCLS} AFS_component_version_number.c
+kdump64.o : kdump.c ${INCLS} AFS_component_version_number.c
        -set -x; \
        case ${SYS_NAME} in \
        sun4x_5[789] | hp_ux11* |sunx86_5[789] ) \
-               ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${TOP_SRCDIR} -I${TOP_INCDIR}/afs -I${TOP_OBJDIR}/src/config -I${TOP_INCDIR} ${XCFLAGS64} -o ${KDUMP64}.o -c ${srcdir}/kdump.c ;; \
+               ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${TOP_SRCDIR} -I${TOP_INCDIR}/afs \
+               -I${TOP_OBJDIR}/src/config -I${TOP_OBJDIR}/src -I${TOP_INCDIR} ${XCFLAGS64} \
+               -o kdump64.o -c ${srcdir}/kdump.c ;; \
        esac
 
-${KDUMP}:  ${KDUMP}.o
+# *linux* - Builds kdump-X.Y.Z according to kernel version
+kdump-linux-@LINUX_VERSION@.o: kdump.c ${INCLS} AFS_component_version_number.c
+       ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${LINUX_KERNEL_PATH}/include -I${TOP_INCDIR}/afs \
+               -I${TOP_OBJDIR}/src \
+               -I${TOP_OBJDIR}/src/afs/${MKAFS_OSTYPE} \
+               -I${TOP_OBJDIR}/src/config -I${TOP_OBJDIR}/src/libafs/afs \
+               -I${TOP_SRCDIR} -I${TOP_SRCDIR}/afs/${MKAFS_OSTYPE} \
+               -I${TOP_INCDIR} ${XCFLAGS} -o kdump-linux-${LINUX_VERSION}.o \
+               -c ${srcdir}/kdump.c
+
+kdump-linux-@LINUX_VERSION@: kdump-linux-@LINUX_VERSION@.o
+       ${CC} ${KERN_DBG} ${KERN_OPTMZ} -o kdump-linux-${LINUX_VERSION} kdump-linux-${LINUX_VERSION}.o \
+               ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS}
+
+# *alpha_linux* - Builds kdump-X.Y.Z according to kernel version
+kdump-alpha_linux-@LINUX_VERSION@.o: kdump.c ${INCLS} AFS_component_version_number.c
+       ${CC} ${KERN_DBG} ${KERN_OPTMZ} -I${LINUX_KERNEL_PATH}/include -I${TOP_INCDIR}/afs \
+               -I${TOP_OBJDIR}/src \
+               -I${TOP_OBJDIR}/src/afs/${MKAFS_OSTYPE} \
+               -I${TOP_OBJDIR}/src/config -I${TOP_OBJDIR}/src/libafs/afs \
+               -I${TOP_SRCDIR} -I${TOP_SRCDIR}/afs/${MKAFS_OSTYPE} \
+               -I${TOP_INCDIR} ${XCFLAGS} -mno-fp-regs -ffixed-8 \
+               -o kdump-alpha_linux-${LINUX_VERSION}.o -c ${srcdir}/kdump.c ;; \
+
+kdump-alpha_linux-@LINUX_VERSION@: kdump-alpha_linux-@LINUX_VERSION@.o
+       ${CC} ${KERN_DBG} ${KERN_OPTMZ} -o kdump-alpha_linux-${LINUX_VERSION} kdump-alpha_linux-${LINUX_VERSION}.o \
+               ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a ${XLIBS}
+
+#
+# kdump install targets
+#
+${DEST}/etc/kdump: kdump-build
        -set -x; \
        case ${SYS_NAME} in \
-       sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53 | sun4_53 | sun4_54 | sun4c_54 | sun4m_54 | sunx86_5? ) \
-               ${CC} -o ${KDUMP} ${KDUMP}.o ${TOP_LIBDIR}/libcmd.a  ${TOP_LIBDIR}/util.a /usr/lib/libkvm.a -lelf ${XLIBS} ;; \
-       sun*_5? ) \
-               ${CC} -o ${KDUMP} ${KDUMP}.o ${TOP_LIBDIR}/libcmd.a  ${TOP_LIBDIR}/util.a  ${XLIBELFA} ${XLIBKVM} ${XLIBS} ;; \
        sgi_6? ) \
-               for f in ../libafs/STATIC.IP*/CPU_KDEFS; \
-               do      IP=`expr "$$f" : '../libafs/STATIC.\(IP..\)'`; \
-                       CPU_KDEFS=`sed 's/-mips.//' $$f`; \
-                       echo IP = $$IP; \
-                       echo CPU_KDEFS = $$CPU_KDEFS; \
-                       case $$CPU_KDEFS in \
-                       *-64*)  ${CC} ${XCFLAGS64} \
-                                       $$CPU_KDEFS \
-                                       -o kdump.$$IP kdump.$$IP.o \
-                                       ${TOP_LIBDIR}/libcmd64.a -lelf \
-                               ;; \
-                       *)      ${CC} ${XCFLAGS} \
-                                       $$CPU_KDEFS \
-                                       -o kdump.$$IP kdump.$$IP.o \
-                                       ${TOP_LIBDIR}/libcmd.a -lelf \
-                               ;; \
-                       esac || exit $$? ; \
+               ${INSTALLex} -f ${srcdir}/kdump.sh.sgi_ipnos ${DEST}/etc/kdump; \
+               ln -fs kdump ${DEST}/etc/kdump32; \
+               ln -fs kdump.IP20 ${DEST}/etc/kdump.IP22; \
+               ln -fs kdump.IP20 ${DEST}/etc/kdump.IP32; \
+               for f in kdump.IP??; \
+                       do ${INSTALL} -s $$f ${DEST}/etc/$$f || exit $$? ; \
                done ;; \
+       sun*_5[789] ) \
+               ${INSTALLex} -f ${srcdir}/kdump.sh.solaris7 ${DEST}/etc/kdump; \
+               ${INSTALL} -s -f $? $@;; \
        *alpha_linux* ) \
-               $(MAKE) kdump-alpha_linux-@LINUX_VERSION@ ;; \
+               ${INSTALLex} -f ${srcdir}/kdump.sh.linux ${DEST}/etc/kdump; \
+               ${INSTALL} -s kdump-alpha_linux-${LINUX_VERSION} $@ ;; \
        *linux* ) \
-               $(MAKE) kdump-linux-@LINUX_VERSION@ ;; \
-       alpha_osf1 | alpha_osf20 |  alpha_osf30 | alpha_osf32 | alpha_osf32c | alpha_dux??) \
-               ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a  ${TOP_LIBDIR}/util.a ${XLIBS} -ll -lmld;; \
-       ncrx86_* ) ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a  ${TOP_LIBDIR}/util.a -lelf ${XLIBS} ;; \
-       *nbsd*) touch kdump ;; \
-       * )     ${CC} -o kdump kdump.o ${TOP_LIBDIR}/libcmd.a  ${TOP_LIBDIR}/util.a ${XLIBS} ;; \
+               ${INSTALLex} -f ${srcdir}/kdump.sh.linux ${DEST}/etc/kdump; \
+               ${INSTALL} -s kdump-linux-${LINUX_VERSION} $@ ;; \
+       hp_ux11* ) \
+               ${INSTALLex} -f ${srcdir}/kdump.sh.hp_ux11 ${DEST}/etc/kdump; \
+               ${INSTALL} -s -f $? $@;; \
+       *nbsd*) \
+               ;; \
+       *) \
+               ${INSTALL} -s $? $@ ;; \
        esac
 
-## kdump to read from 64 bit kernel dumps
+${DEST}/etc/kdump64: kdump-build
+       if [ -f kdump64 ]; then \
+               ${INSTALL} -s kdump64 $@; \
+       fi
 
-${KDUMP64}: ${KDUMP64}.o
-       -set -x; \
-       case ${SYS_NAME} in \
-       sun4x_5[789] | hp_ux11* |sunx86_5[789] )  \
-               ${CC} ${XCFLAGS64} -o ${KDUMP64} ${KDUMP64}.o ${TOP_LIBDIR}/libcmd64.a ${XLIBELFA} ${XLIBKVM} ${XLIBS} ;; \
-       esac
 
 #
 # Install targets
@@ -305,15 +312,15 @@ install: \
        ${DESTDIR}${bindir}/up \
        ${DESTDIR}${sbindir}/fstrace \
        ${DESTDIR}${bindir}/cmdebug \
-       ${DESTDIR}${sbindir}/${KDUMP} \
-       ${DESTDIR}${sbindir}/${KDUMP64}
+       ${DESTDIR}${sbindir}/kdump \
+       ${DESTDIR}${sbindir}/kdump64
 
 #
 # Misc targets
 #
 
 clean:
-       $(RM) -f *.o *.a up fs kdump-* kdump kdump64 core cmdebug AFS_component_version_number.c fstrace gcpags
+       $(RM) -f *.o *.a up fs kdump-* kdump kdump64 core cmdebug AFS_component_version_number.c fstrace gcpags livesys
 
 test:
        cd test; $(MAKE)
@@ -338,7 +345,7 @@ ${DESTDIR}${sbindir}/fstrace: fstrace
 ${DESTDIR}${bindir}/cmdebug: cmdebug
        ${INSTALL} -s $? $@
 
-${DESTDIR}${sbindir}/${KDUMP}: ${KDUMP}
+${DESTDIR}${sbindir}/kdump: kdump-build
        -set -x; \
        case ${SYS_NAME} in \
        sgi_6? ) \
@@ -362,14 +369,10 @@ ${DESTDIR}${sbindir}/${KDUMP}: ${KDUMP}
                ${INSTALL} -s $? $@ ;; \
        esac
 
-${DESTDIR}${sbindir}/kdump64: kdump64
-       -set -x; \
-       case ${SYS_NAME} in \
-       sun4x_5[789] | hp_ux11* ) \
-               ${INSTALL} -s $? $@ ;;\
-       * ) \
-               echo skipping kdump64 for ${SYS_NAME} ;; \
-       esac
+${DESTDIR}${sbindir}/kdump64: kdump-build
+       if [ -f kdump64 ]; then \
+               ${INSTALL} -s kdump64 $@; \
+       fi
 
 dest: \
        ${DEST}/bin/fs \
@@ -378,6 +381,6 @@ dest: \
        ${DEST}/bin/up \
        ${DEST}/etc/fstrace \
        ${DEST}/bin/cmdebug \
-       ${DEST}/etc/${KDUMP} \
-       ${DEST}/etc/${KDUMP64}
+       ${DEST}/etc/kdump \
+       ${DEST}/etc/kdump64
 
index e7217135074822448a766e18c15a40766ead75bb..89143d6f9b542aa577b0c27ce57a1fbf85f26a3e 100644 (file)
@@ -11,7 +11,7 @@
 #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>
@@ -2075,6 +2075,45 @@ ListAliasesCmd(struct cmd_syndesc *as)
     return 0;
 }
 
+static int
+CallBackRxConnCmd(struct cmd_syndesc *as)
+{
+    afs_int32 code;
+    struct ViceIoctl blob;
+    struct cmd_item *ti;
+    afs_int32 hostAddr;
+    struct hostent *thp;
+    char *tp;
+    int setp;
+    
+    ti = as->parms[0].items;
+    setp = 1;
+    if (ti) {
+        thp = hostutil_GetHostByName(ti->data);
+       if (!thp) {
+           fprintf(stderr, "host %s not found in host table.\n", ti->data);
+           return 1;
+       }
+       else memcpy(&hostAddr, thp->h_addr, sizeof(afs_int32));
+    } else {
+        hostAddr = 0;   /* means don't set host */
+       setp = 0;       /* aren't setting host */
+    }
+    
+    /* now do operation */
+    blob.in_size = sizeof(afs_int32);
+    blob.out_size = sizeof(afs_int32);
+    blob.in = (char *) &hostAddr;
+    blob.out = (char *) &hostAddr;
+    
+    code = pioctl(0, VIOC_CBADDR, &blob, 1);
+    if (code < 0) {
+       Die(errno, 0);
+       return 1;
+    }
+    return 0;
+}
+
 static int
 NewCellCmd(struct cmd_syndesc *as)
 {
@@ -3417,6 +3456,9 @@ defect 3069
     cmd_AddParm(ts, "-disable", CMD_FLAG, CMD_OPTIONAL, "Disable RX stats");
     cmd_AddParm(ts, "-clear", CMD_FLAG, CMD_OPTIONAL, "Clear RX stats");
 
+    ts = cmd_CreateSyntax("setcbaddr", CallBackRxConnCmd, 0, "configure callback connection address");
+    cmd_AddParm(ts, "-addr", CMD_SINGLE, CMD_OPTIONAL, "host name or address");
+
     code = cmd_Dispatch(argc, argv);
     if (rxInitDone)
        rx_Finalize();
@@ -3773,3 +3815,4 @@ RxStatPeerCmd(struct cmd_syndesc *as)
 
     return 0;
 }
+
index a1f660e2bd999f38c3b04ee9dfda2d0e6b307994..76b3cd46d1c18962fabd604a79e00ff568cb99f8 100644 (file)
@@ -19,7 +19,7 @@
 #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
@@ -380,6 +380,7 @@ setup(dev)
        return (-1);
 #endif
 #ifdef AFS_NEWCG_ENV
+# ifndef AFS_SUN510_ENV
     if (sblock.fs_interleave < 1) {
        pwarn("IMPOSSIBLE INTERLEAVE=%d IN SUPERBLOCK", sblock.fs_interleave);
        sblock.fs_interleave = 1;
@@ -390,6 +391,7 @@ setup(dev)
            dirty(&asblk);
        }
     }
+# endif /* AFS_SUN510_ENV */
 #endif /* AFS_NEWCG_ENV */
 #ifdef AFS_NEWCG_ENV
     if (sblock.fs_npsect < sblock.fs_nsect) {
@@ -471,7 +473,9 @@ setup(dev)
 #if    defined(AFS_SUN_ENV) && !defined(AFS_SUN3_ENV)
 #ifdef AFS_SUN5_ENV
            sblock.fs_npsect = 0;
+# ifndef AFS_SUN510_ENV
            sblock.fs_interleave = 0;
+# endif
            sblock.fs_state = FSOKAY - sblock.fs_time;  /* make mountable */
 #else
            fs_set_state(&sblock, FSOKAY - sblock.fs_time);
@@ -739,7 +743,9 @@ readsb(listerr)
      */
     altsblock.fs_fsbtodb = sblock.fs_fsbtodb;
 #ifdef AFS_NEWCG_ENV
+# ifndef AFS_SUN510_ENV
     altsblock.fs_interleave = sblock.fs_interleave;
+# endif
     altsblock.fs_npsect = sblock.fs_npsect;
     altsblock.fs_nrpos = sblock.fs_nrpos;
 #endif /* AFS_NEWCG_ENV */
index 108f0012cf0793b3e300d76ea80818e5decb6c21..9b9dec5751e96747e5d5451d996202359e75e624 100644 (file)
@@ -29,7 +29,7 @@
 #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>
@@ -7225,6 +7225,82 @@ init_sys_error_to_et(void)
     sys2et[EMEDIUMTYPE] = UAEMEDIUMTYPE;
 }
 
+afs_int32
+SRXAFS_CallBackRxConnAddr (struct rx_call * acall, afs_int32 *addr)
+{
+    Error errorCode = 0;
+    struct host *thost;
+    struct client *tclient;
+    static struct rx_securityClass *sc = 0;
+    int i,j;
+    struct rx_connection *tcon;
+    struct rx_connection *conn;
+    
+    if (errorCode = CallPreamble(acall, ACTIVECALL, &tcon))
+           goto Bad_CallBackRxConnAddr1;
+    
+#ifndef __EXPERIMENTAL_CALLBACK_CONN_MOVING
+    errorCode = 1;
+#else
+
+    H_LOCK
+    tclient = h_FindClient_r(tcon);
+    thost = tclient->host;
+    
+    /* nothing more can be done */
+    if ( !thost->interface ) 
+       goto Bad_CallBackRxConnAddr;
+    
+    assert(thost->interface->numberOfInterfaces > 0 );
+    
+    /* the only address is the primary interface */
+    /* can't change when there's only 1 address, anyway */
+    if ( thost->interface->numberOfInterfaces == 1 ) 
+       goto Bad_CallBackRxConnAddr;
+    
+    /* initialise a security object only once */
+    if ( !sc )
+       sc = (struct rx_securityClass *) rxnull_NewClientSecurityObject();
+    
+    for ( i=0; i < thost->interface->numberOfInterfaces; i++)
+    {
+           if ( *addr == thost->interface->addr[i] ) {
+                   break;
+           }
+    }
+    
+    if ( *addr != thost->interface->addr[i] ) 
+       goto Bad_CallBackRxConnAddr;
+
+    conn = rx_NewConnection (thost->interface->addr[i],
+                            thost->port, 1, sc, 0);
+    rx_SetConnDeadTime(conn, 2); 
+    rx_SetConnHardDeadTime(conn, AFS_HARDDEADTIME); 
+    H_UNLOCK
+    errorCode = RXAFSCB_Probe(conn);
+    H_LOCK
+    if (!errorCode) {
+       if ( thost->callback_rxcon )
+           rx_DestroyConnection(thost->callback_rxcon);
+       thost->callback_rxcon = conn;
+       thost->host           = addr;
+       rx_SetConnDeadTime(thost->callback_rxcon, 50);
+       rx_SetConnHardDeadTime(thost->callback_rxcon, AFS_HARDDEADTIME);
+       H_UNLOCK;
+       errorCode = CallPostamble(tcon, errorCode);
+       return errorCode;
+    } else {
+       rx_DestroyConnection(conn);
+    }      
+#endif
+
+ Bad_CallBackRxConnAddr:
+    H_UNLOCK;
+    errorCode = CallPostamble(tcon, errorCode);
+ Bad_CallBackRxConnAddr1:
+    return errorCode;          /* failure */
+}
+
 afs_int32
 sys_error_to_et(afs_int32 in)
 {
index b0dfcb109ba9685349bb230ce548bd3f23905882..86f6a3e0dd4edf0c1440388e1ad1f9a010df507b 100644 (file)
@@ -89,7 +89,7 @@ VLSERVER_EXECLIBS = \
 
        
 $(VLSERVER): $(VLSERVER_EXEOBJS) $(LIBFILE) $(VLSERVER_EXECLIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP) 
 
 ############################################################################
@@ -135,7 +135,7 @@ VLCLIENT_LIBS = \
        $(DESTDIR)\lib\afs\afspioctl.lib
 
 $(OUT)\vlclient.exe: $(OUT)\vlclient.obj  $(LIBFILE) $(VLSERVER_EXECLIBS) $(VLCLIENT_LIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
 
 
 ############################################################################
index 1bfde891d904122b257c0b2a1f9affa6febba63a..d1d427f575114b8cb54e0a25ba00aa88df2b3196 100644 (file)
@@ -17,7 +17,7 @@
 #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>
@@ -103,6 +103,7 @@ void StickOnLruChain_r(register Vnode * vnp,
 #define        THELOGSIZE      5120
 static afs_int32 theLog[THELOGSIZE];
 static afs_int32 vnLogPtr = 0;
+void
 VNLog(aop, anparms, av1, av2, av3, av4)
      afs_int32 aop, anparms;
      afs_int32 av1, av2, av3, av4;
index 81839e62f2d0bef650d10e73d4d53da099650cb8..482e6a4539dcaa38f0aadfd38ef6406f0fae2555 100644 (file)
@@ -18,7 +18,7 @@
 #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>
@@ -78,6 +78,7 @@ int online = 0;
 int dheader = 0;
 int dsizeOnly = 0, totvolsize = 0, Vauxsize = 0, Vdiskused = 0, Vvnodesize =
     0;
+int Vvnodesize_k = 0, Vauxsize_k = 0;
 int Totvolsize = 0, TVauxsize = 0, TVdiskused = 0, TVvnodesize = 0;
 int Stotvolsize = 0, SVauxsize = 0, SVdiskused = 0, SVvnodesize = 0;
 int fixheader = 0, saveinodes = 0, orphaned = 0;
@@ -580,6 +581,7 @@ HandleVolume(struct DiskPartition *dp, char *name)
            }
 #endif
            Vauxsize = size;
+           Vauxsize_k = size / 1024;
        }
        close(fd);
        vp = AttachVolume(dp, name, &header);
@@ -602,19 +604,16 @@ HandleVolume(struct DiskPartition *dp, char *name)
        PrintVnodes(vp, vSmall);
     }
     if (dsizeOnly) {
-       Vauxsize = Vauxsize / 1024;
-       Vvnodesize = Vvnodesize / 1024;
-       totvolsize = Vauxsize + Vvnodesize;
+       totvolsize = Vauxsize_k + Vvnodesize_k;
        if (saveinodes)
            printf
                ("Volume-Id\t  Volsize  Auxsize Inodesize  AVolsize SizeDiff                (VolName)\n");
-
-       printf("%u\t%9d%9d%10d%10d%9d\t%24s\n", V_id(vp), Vdiskused, Vauxsize,
-              Vvnodesize, totvolsize, totvolsize - Vdiskused, V_name(vp));
+       printf("%u\t%9d%9d%10d%10d%9d\t%24s\n", V_id(vp), Vdiskused, Vauxsize_k,
+              Vvnodesize_k, totvolsize, totvolsize - Vdiskused, V_name(vp));
     }
 }
 
-
+int
 main(int argc, char **argv)
 {
     register struct cmd_syndesc *ts;
@@ -880,6 +879,7 @@ PrintVnode(int offset, VnodeDiskObject * vnode, VnodeId vnodeNumber,
 
     VNDISK_GET_LEN(fileLength, vnode);
     Vvnodesize += fileLength;
+    Vvnodesize_k += fileLength / 1024;
     if (dsizeOnly)
        return;
     if (orphaned && (fileLength == 0 || vnode->parent || !offset))
index fc3ddc890c492ff75c3d77818775887b0037bfc1..91b9e146830b652345031cc73d66a3ce2574432b 100644 (file)
@@ -92,7 +92,7 @@ Vnodes with 0 inode pointers in RW volumes are now deleted.
 #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>
@@ -864,7 +864,12 @@ ObtainSalvageLock(void)
 #else
     salvageLock =
        afs_open(AFSDIR_SERVER_SLVGLOCK_FILEPATH, O_CREAT | O_RDWR, 0666);
-    assert(salvageLock >= 0);
+    if (salvageLock < 0) {
+       fprintf(stderr,
+               "salvager:  can't open salvage lock file %s, aborting\n",
+               AFSDIR_SERVER_SLVGLOCK_FILEPATH);
+       Exit(1);
+    }
 #ifdef AFS_DARWIN_ENV
     if (flock(salvageLock, LOCK_EX) == -1) {
 #else
index 8d0ac86609c60cd7c67f467360631f125edcb39a..4d410a409c8abd6b115f1d1e9dbfd08cab6820cd 100644 (file)
@@ -9,3 +9,4 @@ volint.xdr.c
 volser.h
 volserver
 vos
+voldump
index ff0e91446c2e349f378c36598ae48e6b99830e80..e86eb8d6a609b18e800f771a32cb7902194d1bee 100644 (file)
@@ -93,7 +93,7 @@ VOLSERVER_EXELIBS = \
        $(DESTDIR)\lib\afs\afsprocmgmt.lib
 
 $(VOLSERVER_EXEFILE): $(VOLSERVER_EXEOBJS) $(VOLSERVER_EXELIBS) $(EXEC_LIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP) 
 
 ############################################################################
@@ -118,7 +118,7 @@ VOS_EXELIBS = \
        $(DESTDIR)\lib\afs\afspioctl.lib
 
 $(RS_VOS_EXEFILE): $(VOS_EXEOBJS) $(VOS_EXELIBS) $(EXEC_LIBS)
-       $(EXECONLINK)
+       $(EXECONLINK) dnsapi.lib
        $(EXEPREP) 
 
 $(CL_VOS_EXEFILE): $(RS_VOS_EXEFILE)
index 7faec41582f40711c5370a9ed774281d57ee2470..544336e77c0525944d7c50a2943e17f8912f3f1c 100644 (file)
@@ -11,7 +11,7 @@
 #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>
@@ -532,9 +532,10 @@ SubEnumerateEntry(struct nvldbentry *entry)
            fprintf(STDOUT, "RO Site ");
        if (isMixed) {
            if (entry->serverFlags[i] & NEW_REPSITE)
-               fprintf(STDOUT, " -- New release");
+               fprintf(STDOUT," -- New release");
            else
-               fprintf(STDOUT, " -- Old release");
+               if (!(entry->serverFlags[i] & ITSRWVOL))
+                   fprintf(STDOUT," -- Old release");
        } else {
            if (entry->serverFlags[i] & RO_DONTUSE)
                fprintf(STDOUT, " -- Not released");
@@ -3213,11 +3214,13 @@ UV_ReleaseVolume(afs_int32 afromvol, afs_int32 afromserver,
     }
 
     /* Will we be completing a previously unfinished release. -force overrides */
-    for (fullrelease = 1, i = 0; (fullrelease && (i < entry.nServers)); i++) {
-       if (entry.serverFlags[i] & NEW_REPSITE)
-           fullrelease = 0;
+    for (s = 0, m = 0, fullrelease=0, i=0; (i<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 */