]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Merge in changes for openafs 1.3.74
authorSam Hartman <hartmans@debian.org>
Sun, 14 Nov 2004 17:36:11 +0000 (17:36 +0000)
committerSam Hartman <hartmans@debian.org>
Sun, 14 Nov 2004 17:36:11 +0000 (17:36 +0000)
84 files changed:
README-NT
acinclude.m4
aclocal.m4
configure
configure-libafs
configure-libafs.in
configure.in
debian/changelog
src/WINNT/afsapplib/NTMakefile
src/WINNT/afsd/NTMakefile
src/WINNT/afsd/afsd.c
src/WINNT/afsd/afsd95.c
src/WINNT/afsd/afsd_init.c
src/WINNT/afsd/afsd_service.c
src/WINNT/afsd/afskfw.c
src/WINNT/afsd/cm.h
src/WINNT/afsd/cm_buf.c
src/WINNT/afsd/cm_buf.h
src/WINNT/afsd/cm_conn.c
src/WINNT/afsd/cm_freelance.c
src/WINNT/afsd/cm_freelance.h
src/WINNT/afsd/cm_ioctl.c
src/WINNT/afsd/cm_scache.c
src/WINNT/afsd/cm_scache.h
src/WINNT/afsd/cm_vnodeops.c
src/WINNT/afsd/cm_vnodeops.h
src/WINNT/afsd/smb.c
src/WINNT/afsd/smb3.c
src/WINNT/afsd/symlink.c
src/WINNT/afssvrcfg/NTMakefile
src/WINNT/afssvrcpa/NTMakefile
src/WINNT/afssvrmgr/NTMakefile
src/WINNT/afsusrmgr/NTMakefile
src/WINNT/client_config/config.cpp
src/WINNT/client_creds/NTMakefile
src/WINNT/client_exp/lang/en_US/afs_shl_ext.rc
src/WINNT/client_exp/make_symbolic_link_dlg.cpp
src/WINNT/install/wix/NTMakefile
src/WINNT/install/wix/config.wxi
src/WINNT/install/wix/feature.wxi
src/WINNT/install/wix/files.wxi
src/WINNT/install/wix/openafs.wxs
src/WINNT/pthread/pthread.c
src/afs/FBSD/osi_module.c
src/afs/FBSD/osi_vfsops.c
src/afs/IRIX/osi_vnodeops.c
src/afs/LINUX/osi_vnodeops.c
src/afs/VNOPS/afs_vnop_attrs.c
src/afs/VNOPS/afs_vnop_create.c
src/afs/VNOPS/afs_vnop_dirops.c
src/afs/VNOPS/afs_vnop_link.c
src/afs/VNOPS/afs_vnop_lookup.c
src/afs/VNOPS/afs_vnop_readdir.c
src/afs/VNOPS/afs_vnop_remove.c
src/afs/VNOPS/afs_vnop_rename.c
src/afs/VNOPS/afs_vnop_symlink.c
src/afs/afs.h
src/afs/afs_buffer.c
src/afs/afs_dcache.c
src/afs/afs_nfsdisp.c
src/afs/afs_osi_pag.c
src/afs/afs_pioctl.c
src/afs/afs_prototypes.h
src/afs/afs_segments.c
src/cf/osconf.m4
src/config/NTMakefile.i386_nt40
src/packaging/MacOS/OpenAFS.Info.plist
src/packaging/MacOS/OpenAFS.info
src/rx/rx_getaddr.c
src/sys/pioctl_nt.c
src/ubik/ubik.p.h
src/ubik/uinit.c
src/util/Makefile.in
src/vfsck/fsck.h
src/vfsck/utilities.c
src/viced/afsfileprocs.c
src/viced/callback.c
src/viced/host.c
src/vol/namei_ops.c
src/vol/vol-salvage.c
src/volser/volprocs.c
src/volser/volser_prototypes.h
src/volser/vos.c
src/volser/vsprocs.c

index 292aa72adda5123f9538bb20a7c4e93d98a1c6f3..40e4103fb6c41e79ecb608d7601ea68f330483f4 100644 (file)
--- a/README-NT
+++ b/README-NT
@@ -42,17 +42,38 @@ The Microsoft development tools require anywhere from 660 MB to 1.8GB
 of storage depending on which compilers are selected.  The following 
 versions are supported:
 
-    Microsoft Visual C++ 6.0
     Microsoft Visual .NET 
+      available via a MSDN subscription
+
     Microsoft Visual .NET 2003 (recommended)
+      available via a MSDN subscription
+
+    Microsoft Visual C++ Toolkit 2003 (same as .NET 2003)
+      http://msdn.microsoft.com/visualc/vctoolkit2003/
+
+The following Microsoft SDK is required:
+
+    Microsoft Platform SDK for Windows XP SP2 [Core, Data Access and Installer SDKs are required]
+      http://www.microsoft.com/msdownload/platformsdk/sdkupdate/downlevel.htm [IE required]
+      http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
+
+The following Microsoft DDK is required:
 
-    Microsoft Platform SDK for Windows XP SP2
-      [Core and Data Access SDKs are required]
+    Microsoft Windows Server 2003 DDK
+      available via a MSDN subscription or via free CD
+      http://www.microsoft.com/whdc/devtools/ddk/orderddkcd.mspx
 
 The NSIS installer requires about 14 MB of storage. The following 
-version is supported.
+version is supported:
 
     Nullsoft Scriptable Installation System 2.0 
+      http://nsis.sourceforge.net/home/
+
+The WiX installer requires about 18 MB of storage.  The following 
+version is supported:
+
+    Wix 2.0.2217.0
+      http://prdownloads.sourceforge.net/wix/sources-2.0.2217.0.zip
 
 The InstallShield scripts (although not supported) require version 5.5
 of InstallShiled. Version 6.0 or higher of InstallShield are not 
@@ -69,13 +90,13 @@ Transfer OpenAFS source tree onto your hardrive.  The source can be
 downloaded from the OpenAFS web site:
        http://www.OpenAFS.org/release/snapindex.html.
 
-For this example, download source for version 1.3.60 using the
+For this example, download source for version 1.3.74 using the
 following URL:
-http://www.openafs.org/dl/openafs/1.3.60/openafs-1.3.60-src.tar
+http://www.openafs.org/dl/openafs/1.3.74/openafs-1.3.74-src.tar
 
 HINT: DailySnapShots are pre-release source trees and much more
 likely to have compilation errors. If this is your first attempt, do
-your build based on a release version of the source, e.g. 1.3.60. Once
+your build based on a release version of the source, e.g. 1.3.74. Once
 you have completed a build process successfully, you can experiment with
 other source trees.
 
@@ -83,23 +104,24 @@ You will need an unzip utility that can expand compressed tar files.
 For example "Pkzip for Windows" from Pkware will uncompress tar files.
 (http://www.pkware.com/)
 
-Expand the downloaded tar file (openafs-1.3.60-src.tar) into target
+Expand the downloaded tar file (openafs-1.3.74-src.tar) into target
 directory (c:\OpenAFS), the unzip routine will expand the source into a
 subdirectory tree:
-               c:\OpenAFS\OpenAFS-1.3.60\src
+    c:\OpenAFS\OpenAFS-1.3.74\src
 
 Copy the files 'NTMakefile' and 'ntbuild.bat' from 'src' to the OpenAFS 
-base directory:
+base directory (aka %AFSROOT%):
 
   From a DOS command prompt window, enter the following copy commands:
 
-    copy c:\OpenAFS\OpenAFS-1.3.60\src\NTMakefile c:\OpenAFS\OpenAFS-1.3.60\.
-    copy c:\OpenAFS\OpenAFS-1.3.60\src\ntbuild.bat c:\OpenAFS\OpenAFS-1.3.60\.
+    cd c:\OpenAFS\OpenAFS-1.3.74
+    copy src\NTMakefile .
+    copy src\ntbuild.bat .
 
 
 The AFS base directory should look something like the following:
 
-  c:\OpenAFS\OpenAFS-1.3.60\
+  c:\OpenAFS\OpenAFS-1.3.74\
     NTMakefile
     ntbuild.bat
     src
@@ -107,8 +129,8 @@ The AFS base directory should look something like the following:
 
 STEP B. Install compiler and development tools.
 
-Install a copy of Microsoft Visual C++ 6.0, Visual .NET, or Visual .NET 2003.
-The "Typical" install setting is sufficient.
+Install a copy of Microsoft Visual .NET, Visual .NET 2003, Visual C++
+Toolkit 2003.  The "Typical" install setting is sufficient.
 
 (1) You can reduce the installation size by selecting "Custom" install
 and remove all but the following Options:
@@ -121,17 +143,19 @@ and remove all but the following Options:
 
 STEP C. Install SDK header files.
 
-Files from Microsoft's Platform SDK (August 2001 or later) are required to
-complete a build on Windows 2000 or XP.   You can install the "Core SDK"
-from
+Files from Microsoft's Platform SDK for Windows XP SP2 is required to
+complete a build on Windows 2000/XP/2003.   You can install the "Core, Data
+Access and Installer SDKs" from
 
   http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
 
 by using Internet Explorer 5.x or higher.  (Active X controls are required)
+If you do not which to use IE a complete SDK package is available from
+
+  http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
 
 The header files that are required are found from a Microsoft SDK are:
 
-   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)
@@ -139,16 +163,11 @@ The header files that are required are found from a Microsoft SDK are:
 These files come from the following Microsoft DDKs/SDKs:
 
    npapi.h:
-        Windows XP/2003 Platform SDK - include/
+        Windows XP SP2 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.
 
@@ -159,6 +178,7 @@ must be defined to match your configuration:
   AFSVER_CL: Set to 1200 if using MS Visual C++ 6.0
              Set to 1300 if using MS Visual .NET
              Set to 1310 if using MS Visual .NET 2003
+             Set to 1400 if using MS Visual .NET 2005
 
   MSVCDIR: Set to the short name version of the directory into which
            the visual C++ compiler was installed regardless of version
@@ -184,17 +204,17 @@ Edit file %AFSROOT%\src\config\NTMakefile.i386_nt40
     AFSPRODUCT_VER_MINOR - Version Minor Number
     AFSPRODUCT_VER_PATCH - Version Patch Number
     AFSPRODUCT_VER_BUILD - Version Build Number
-       CELLSERVDB_INSTALL - The default file name for the CellServDB
-       included in the install Package.
-       CELLNAME_DEFAULT -  The default home cell name.
-       CELLSERVDB_WEB  - The default web address to obtain CellServDB
+    CELLSERVDB_INSTALL   - The default file name for the CellServDB
+                          included in the install Package.
+    CELLNAME_DEFAULT     - The default home cell name.
+    CELLSERVDB_WEB       - The default web address to obtain CellServDB
 
 For example: in the file %AFSROOT%\src\config\NTMakefile.i386_nt40 you would
 see the following:
 
    AFSPRODUCT_VER_MAJOR=1
    AFSPRODUCT_VER_MINOR=3
-   AFSPRODUCT_VER_PATCH=6000
+   AFSPRODUCT_VER_PATCH=7400
    AFSPRODUCT_VER_BUILD=0
    CELLNAME_DEFAULT=openafs.org
    CELLSERVDB_INSTALL=CellServDB.GrandCentral
@@ -206,7 +226,7 @@ one that can be downloaded from the web (CELLSERVDB_WEB).
 
 STEP F. Begin the build
 
-(1) From Windows 2000/XP open up a DOS prompt window.
+(1) From Windows 2000/XP/2003 open up a DOS prompt window.
 
 (2) Change to the %AFSROOT% directory
 
@@ -267,16 +287,16 @@ sources.  The following changes were made to exehead\config.h.
 
 STEP H.  Build OpenAFS NSIS install package
 
-From the DOS command prompt window run:
+From the %AFSROOT% directory execute:
 
     nmake /f NTMakefile NSIS
 
 
 STEP I.  Install Wix MSI Installer
 
-Download the Wix 2.0.1927.1 installer from 
+Download the Wix 2.0.2217.0 installer from 
 
-    http://prdownloads.sourceforge.net/wix/sources-2.0.1927.1.zip
+    http://prdownloads.sourceforge.net/wix/sources-2.0.2217.0.zip
 
 Apply the following patches to the source tree and execute 
 
@@ -284,152 +304,114 @@ Apply the following patches to the source tree and execute
 
 from the \src\wix directory.  
 
+Index: src/wix/Common.cs
+===================================================================
+RCS file: /cvsroot/wix/wix/src/wix/Common.cs,v
+retrieving revision 1.7
+diff -w -r1.7 Common.cs
+140a141,146
+>              public static long GetFileTimeFromDateTime(string dateTime) 
+>              {
+>                      System.DateTime sdt = System.Xml.XmlConvert.ToDateTime(dateTime);
+>                      return sdt.ToFileTime();
+>              }
+> 
 Index: src/wix/Compiler.cs
 ===================================================================
 RCS file: /cvsroot/wix/wix/src/wix/Compiler.cs,v
-retrieving revision 1.10
-diff -u -w -r1.10 Compiler.cs
---- src/wix/Compiler.cs        28 Jul 2004 15:50:22 -0000      1.10
-+++ src/wix/Compiler.cs        4 Aug 2004 16:28:16 -0000
-@@ -647,7 +647,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)
-@@ -7385,6 +7385,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;
-@@ -8715,6 +8729,7 @@
-                         }
-                         bits ^= (bit * 65536);
-                         break;
-+
-                     default:
-                         bit = this.NameToBit(MsiInterop.CommonControlAttributes, attrib.Name, attrib.Value, node.Name, id);
-                         if (-1 == bit)
+retrieving revision 1.14
+diff -w -r1.14 Compiler.cs
+847c847
+<                     this.AddRegistryKey(sourceLineNumbers, null, MsiInterop.MsidbRegistryRootClassesRoot, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[!", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context
+---
+>                     this.AddRegistryKey(sourceLineNumbers, null, MsiInterop.MsidbRegistryRootClassesRoot, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[#", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context
+2352a2353,2358
+>                      // if a Value attribute was given by itself, make this a type 19 custom action
+>                      if( sourceBits == 0 && targetBits == MsiInterop.MsidbCustomActionTypeTextData ) 
+>                      {
+>                              sourceBits = MsiInterop.MsidbCustomActionTypeSourceFile;
+>                      }
+> 
+3881c3887
+<                         minDate = attrib.Value;
+---
+>                         minDate = Common.GetFileTimeFromDateTime( attrib.Value ).ToString();
+3884c3890
+<                         maxDate = attrib.Value;
+---
+>                         maxDate = Common.GetFileTimeFromDateTime( attrib.Value ).ToString();
+8187a8194,8207
+>                                      case "Delete":
+>                                              switch (attrib.Value)
+>                                              {
+>                                                      case "install":
+>                                                              events |= MsiInterop.MsidbServiceControlEventDelete;
+>                                                              break;
+>                                                      case "uninstall":
+>                                                              events |= MsiInterop.MsidbServiceControlEventUninstallDelete;
+>                                                              break;
+>                                                      case "both":
+>                                                              events |= MsiInterop.MsidbServiceControlEventDelete | MsiInterop.MsidbServiceControlEventUninstallDelete;
+>                                                              break;
+>                                              }
+>                                              break;
+9685a9706
+> 
 Index: src/wix/Preprocessor.cs
 ===================================================================
 RCS file: /cvsroot/wix/wix/src/wix/Preprocessor.cs,v
-retrieving revision 1.5
-diff -u -w -r1.5 Preprocessor.cs
---- src/wix/Preprocessor.cs    28 Jul 2004 15:50:22 -0000      1.5
-+++ src/wix/Preprocessor.cs    4 Aug 2004 16:28:16 -0000
-@@ -267,12 +267,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":
-@@ -354,6 +354,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;
-@@ -401,6 +403,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>
+retrieving revision 1.6
+diff -w -r1.6 Preprocessor.cs
+274c274
+<                             context = new IfContext(context.IsTrue & context.Active, this.variables.ContainsKey(reader.Value.Trim()), IfState.If);
+---
+>                             context = new IfContext(context.IsTrue & context.Active, this.IsDefined(reader.Value.Trim()), IfState.If);
+279c279
+<                             context = new IfContext(context.IsTrue & context.Active, !this.variables.ContainsKey(reader.Value.Trim()), IfState.If);
+---
+>                             context = new IfContext(context.IsTrue & context.Active, !this.IsDefined(reader.Value.Trim()), IfState.If);
+360a361,362
+>                                              case "error":
+>                                                      throw new WixPreprocessorException(this.GetCurrentSourceLineNumbers(), this.PreprocessVariables(reader.Value));
+419a422,437
+>              /// Returns true if the symbol exists.
+>              /// </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>
 Index: src/wix/wix.csproj
 ===================================================================
 RCS file: /cvsroot/wix/wix/src/wix/wix.csproj,v
 retrieving revision 1.4
-diff -u -w -r1.4 wix.csproj
---- src/wix/wix.csproj 31 May 2004 01:07:40 -0000      1.4
-+++ src/wix/wix.csproj 4 Aug 2004 16:28:16 -0000
-@@ -659,9 +659,19 @@
-                     BuildAction = "EmbeddedResource"
-                 />
-                 <File
-+                    RelPath = "Xsd\wix.xsx"
-+                    DependentUpon = "wix.xsd"
-+                    BuildAction = "None"
-+                />
-+                <File
-                     RelPath = "Xsd\wixloc.xsd"
-                     BuildAction = "Content"
-                 />
-+                <File
-+                    RelPath = "Xsd\wixloc.xsx"
-+                    DependentUpon = "wixloc.xsd"
-+                    BuildAction = "None"
-+                />
-             </Include>
-         </Files>
-     </CSHARP>
-Index: src/wix/Xsd/wix.xsd
-===================================================================
-RCS file: /cvsroot/wix/wix/src/wix/Xsd/wix.xsd,v
-retrieving revision 1.12
-diff -u -w -r1.12 wix.xsd
---- src/wix/Xsd/wix.xsd        28 Jul 2004 15:50:24 -0000      1.12
-+++ src/wix/Xsd/wix.xsd        4 Aug 2004 16:28:17 -0000
-@@ -2733,6 +2733,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>
+diff -w -r1.4 wix.csproj
+661a662,666
+>                     RelPath = "Xsd\wix.xsx"
+>                     DependentUpon = "wix.xsd"
+>                     BuildAction = "None"
+>                 />
+>                 <File
+664a670,674
+>                 <File
+>                     RelPath = "Xsd\wixloc.xsx"
+>                     DependentUpon = "wixloc.xsd"
+>                     BuildAction = "None"
+>                 />
 
 
 STEP J.  Build Wix MSI install package
 
-From the DOS command prompt window run:
+From the %AFSROOT% directory execute:
 
     nmake /f NTMakefile wix
 
@@ -442,7 +424,7 @@ STEP K. Final Results
 The build process generates its binaries in %AFSROOT%\DEST. The subdirectory
 would look like the following:
 
-%AFSROOT%:\DEST\{checked,free}\
+%AFSROOT%\DEST\{checked,free}\
        bin
        etc
        include
@@ -454,7 +436,8 @@ would look like the following:
     Bin - contains build utilities.
     root.client - contains Open AFS binaries
     root.server - contain Open AFS Server binaries
-    WinInstall\OpenAFSforWindows.exe - is the install package for Open AFS
+    WinInstall\OpenAFSforWindows.exe - is the NSIS install package
+    WinInstall\openafs-en_US.msi - is the WiX MSI install package
 
 
 STEP L. Optional Items
index 4dc416222cd8b102b3a61e7f97f2afb710fbbf80..a887fc73731b762c063afffdae72ef5c16176d80 100644 (file)
@@ -41,7 +41,7 @@ AC_ARG_WITH(dux-kernel-headers,
 [  --with-dux-kernel-headers=path      use the kernel headers found at path(optional, defaults to first match in /usr/sys)]
 )
 AC_ARG_WITH(linux-kernel-headers,
-[  --with-linux-kernel-headers=path            use the kernel headers found at path(optional, defaults to /usr/src/linux)]
+[  --with-linux-kernel-headers=path            use the kernel headers found at path(optional, defaults to /usr/src/linux-2.4, then /usr/src/linux)]
 )
 AC_ARG_WITH(bsd-kernel-headers,
 [  --with-bsd-kernel-headers=path      use the kernel headers found at path(optional, defaults to /usr/src/sys)]
@@ -404,6 +404,9 @@ else
                i?86-*-openbsd3.5)
                        AFS_SYSNAME="i386_obsd35"
                        ;;
+               i?86-*-openbsd3.6)
+                       AFS_SYSNAME="i386_obsd36"
+                       ;;
                i?86-*-freebsd4.2*)
                        AFS_SYSNAME="i386_fbsd_42"
                        ;;
@@ -431,6 +434,9 @@ else
                i?86-*-freebsd5.2*)
                        AFS_SYSNAME="i386_fbsd_52"
                        ;;
+               i?86-*-freebsd5.3*)
+                       AFS_SYSNAME="i386_fbsd_53"
+                       ;;
                i?86-*-netbsd*1.5*)
                        AFS_PARAM_COMMON=param.nbsd15.h
                        AFS_SYSNAME="i386_nbsd15"
index 0d324a9c811e2f31c1a157fe11bc7b9043f0cf0b..6458da4caaf77c8bdc5b440a3dd6162b3a13f8bf 100644 (file)
@@ -54,7 +54,7 @@ AC_ARG_WITH(dux-kernel-headers,
 [  --with-dux-kernel-headers=path      use the kernel headers found at path(optional, defaults to first match in /usr/sys)]
 )
 AC_ARG_WITH(linux-kernel-headers,
-[  --with-linux-kernel-headers=path            use the kernel headers found at path(optional, defaults to /usr/src/linux)]
+[  --with-linux-kernel-headers=path            use the kernel headers found at path(optional, defaults to /usr/src/linux-2.4, then /usr/src/linux)]
 )
 AC_ARG_WITH(bsd-kernel-headers,
 [  --with-bsd-kernel-headers=path      use the kernel headers found at path(optional, defaults to /usr/src/sys)]
@@ -417,6 +417,9 @@ else
                i?86-*-openbsd3.5)
                        AFS_SYSNAME="i386_obsd35"
                        ;;
+               i?86-*-openbsd3.6)
+                       AFS_SYSNAME="i386_obsd36"
+                       ;;
                i?86-*-freebsd4.2*)
                        AFS_SYSNAME="i386_fbsd_42"
                        ;;
@@ -444,6 +447,9 @@ else
                i?86-*-freebsd5.2*)
                        AFS_SYSNAME="i386_fbsd_52"
                        ;;
+               i?86-*-freebsd5.3*)
+                       AFS_SYSNAME="i386_fbsd_53"
+                       ;;
                i?86-*-netbsd*1.5*)
                        AFS_PARAM_COMMON=param.nbsd15.h
                        AFS_SYSNAME="i386_nbsd15"
@@ -2321,6 +2327,19 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${MT_CC} -shared"
                ;;
 
+       ppc64_linux26)
+               KERN_OPTMZ=-O2
+               LEX="flex -l"
+               MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}'
+               MT_LIBS="-lpthread"
+               PAM_CFLAGS="-g -O2 -Dlinux -DLINUX_PAM -fPIC"
+               SHLIB_LDFLAGS="-shared -Xlinker -x"
+               TXLIBS="-lncurses"
+               XCFLAGS="-g -O2 -D_LARGEFILE64_SOURCE"
+               YACC="bison -y"
+               SHLIB_LINKER="${MT_CC} -shared"
+               ;;
+
        i386_umlinux22)
                CC="gcc -pipe"
                CCOBJ="gcc -pipe"
index 8587d8c8784a43444216a77374e90eb82114efec..42f0c21cad2d87dcbf3b282493017390bbc78512 100755 (executable)
--- a/configure
+++ b/configure
@@ -883,7 +883,7 @@ Optional Packages:
 
   --with-dux-kernel-headers=path       use the kernel headers found at path(optional, defaults to first match in /usr/sys)
 
-  --with-linux-kernel-headers=path     use the kernel headers found at path(optional, defaults to /usr/src/linux)
+  --with-linux-kernel-headers=path     use the kernel headers found at path(optional, defaults to /usr/src/linux-2.4, then /usr/src/linux)
 
   --with-bsd-kernel-headers=path       use the kernel headers found at path(optional, defaults to /usr/src/sys)
 
@@ -1612,7 +1612,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE=openafs
- VERSION=1.3.73
+ VERSION=1.3.74
 
 
 cat >>confdefs.h <<_ACEOF
@@ -7543,6 +7543,9 @@ echo $ECHO_N "checking your AFS sysname... $ECHO_C" >&6
                i?86-*-openbsd3.5)
                        AFS_SYSNAME="i386_obsd35"
                        ;;
+               i?86-*-openbsd3.6)
+                       AFS_SYSNAME="i386_obsd36"
+                       ;;
                i?86-*-freebsd4.2*)
                        AFS_SYSNAME="i386_fbsd_42"
                        ;;
@@ -7570,6 +7573,9 @@ echo $ECHO_N "checking your AFS sysname... $ECHO_C" >&6
                i?86-*-freebsd5.2*)
                        AFS_SYSNAME="i386_fbsd_52"
                        ;;
+               i?86-*-freebsd5.3*)
+                       AFS_SYSNAME="i386_fbsd_53"
+                       ;;
                i?86-*-netbsd*1.5*)
                        AFS_PARAM_COMMON=param.nbsd15.h
                        AFS_SYSNAME="i386_nbsd15"
@@ -12313,6 +12319,19 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${MT_CC} -shared"
                ;;
 
+       ppc64_linux26)
+               KERN_OPTMZ=-O2
+               LEX="flex -l"
+               MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}'
+               MT_LIBS="-lpthread"
+               PAM_CFLAGS="-g -O2 -Dlinux -DLINUX_PAM -fPIC"
+               SHLIB_LDFLAGS="-shared -Xlinker -x"
+               TXLIBS="-lncurses"
+               XCFLAGS="-g -O2 -D_LARGEFILE64_SOURCE"
+               YACC="bison -y"
+               SHLIB_LINKER="${MT_CC} -shared"
+               ;;
+
        i386_umlinux22)
                CC="gcc -pipe"
                CCOBJ="gcc -pipe"
index 8fd8b7f7fa8b5afc6b5c25f3c295c14cc821fc2c..2010c827e8a582755634069adddac6c79476fe19 100755 (executable)
@@ -883,7 +883,7 @@ Optional Packages:
 
   --with-dux-kernel-headers=path       use the kernel headers found at path(optional, defaults to first match in /usr/sys)
 
-  --with-linux-kernel-headers=path     use the kernel headers found at path(optional, defaults to /usr/src/linux)
+  --with-linux-kernel-headers=path     use the kernel headers found at path(optional, defaults to /usr/src/linux-2.4, then /usr/src/linux)
 
   --with-bsd-kernel-headers=path       use the kernel headers found at path(optional, defaults to /usr/src/sys)
 
@@ -1612,7 +1612,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE=openafs-libafs
- VERSION=1.3.73
+ VERSION=1.3.74
 
 
 cat >>confdefs.h <<_ACEOF
@@ -7543,6 +7543,9 @@ echo $ECHO_N "checking your AFS sysname... $ECHO_C" >&6
                i?86-*-openbsd3.5)
                        AFS_SYSNAME="i386_obsd35"
                        ;;
+               i?86-*-openbsd3.6)
+                       AFS_SYSNAME="i386_obsd36"
+                       ;;
                i?86-*-freebsd4.2*)
                        AFS_SYSNAME="i386_fbsd_42"
                        ;;
@@ -7570,6 +7573,9 @@ echo $ECHO_N "checking your AFS sysname... $ECHO_C" >&6
                i?86-*-freebsd5.2*)
                        AFS_SYSNAME="i386_fbsd_52"
                        ;;
+               i?86-*-freebsd5.3*)
+                       AFS_SYSNAME="i386_fbsd_53"
+                       ;;
                i?86-*-netbsd*1.5*)
                        AFS_PARAM_COMMON=param.nbsd15.h
                        AFS_SYSNAME="i386_nbsd15"
@@ -12313,6 +12319,19 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${MT_CC} -shared"
                ;;
 
+       ppc64_linux26)
+               KERN_OPTMZ=-O2
+               LEX="flex -l"
+               MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}'
+               MT_LIBS="-lpthread"
+               PAM_CFLAGS="-g -O2 -Dlinux -DLINUX_PAM -fPIC"
+               SHLIB_LDFLAGS="-shared -Xlinker -x"
+               TXLIBS="-lncurses"
+               XCFLAGS="-g -O2 -D_LARGEFILE64_SOURCE"
+               YACC="bison -y"
+               SHLIB_LINKER="${MT_CC} -shared"
+               ;;
+
        i386_umlinux22)
                CC="gcc -pipe"
                CCOBJ="gcc -pipe"
index eaf1f0a5bb643a43c8072b6f7f7114e017f9093f..9cdfec49c95bdf6b3a887f54289fcabfd6613f07 100644 (file)
@@ -1,5 +1,5 @@
 AC_INIT(src/libafs/Makefile.common.in)
-AM_INIT_AUTOMAKE(openafs-libafs,1.3.73)
+AM_INIT_AUTOMAKE(openafs-libafs,1.3.74)
 AC_CONFIG_HEADER(src/config/afsconfig.h)
 define(OPENAFS_CONFIGURE_LIBAFS)
 
index 298ae18419ca0ef8606e7df9e447d81f3fca55af..09a744b64bee4ff68077e8ccdd1574b6df7dc964 100644 (file)
@@ -1,5 +1,5 @@
 AC_INIT(src/config/stds.h)
-AM_INIT_AUTOMAKE(openafs,1.3.73)
+AM_INIT_AUTOMAKE(openafs,1.3.74)
 AC_CONFIG_HEADER(src/config/afsconfig.h)
 
 AC_PROG_CC
index 9d17cd8918bd6619a9ff025a4fcc9682c1a8f623..9102c708c2bdda59ce0138ab3cad4b00103819e0 100644 (file)
@@ -1,3 +1,9 @@
+openafs (1.3.74-1) UNRELEASED; urgency=low
+
+  * New upstream version
+
+ -- Sam Hartman <hartmans@mit.edu>  Sun, 14 Nov 2004 12:34:42 -0500
+
 openafs (1.3.73-1) experimental; urgency=low
 
   * New upstream version
index e4503835b8182f43effa648864e5065d7c9898e5..3b757ec6d50d5c989b7a77113ee765c21de3aaa0 100644 (file)
@@ -126,6 +126,9 @@ $(DLLFILE) : $(DLLOBJS) $(DLLLIBS)
        $(DEL) $*.lib $*.exp
 
 clean::
+       $(CD) lang
+       for /f %l in ('dir /B ??_??') do @$(NTLANG) %l $(MAKECMD) /nologo /f NTMakefile clean
+       $(CD) ..
 
 
 ############################################################################
index 7f325edd3b1c4cc09df50e4f0a661dc15495820a..4797139ece767ad3bc1e630610fcc2e6cfbfff1f 100644 (file)
@@ -339,26 +339,26 @@ AFSD_EXEFILE = $(EXEDIR)\afsd.exe
 AFSD_SDKLIBS =\
        largeint.lib \
        netapi32.lib \
-    dnsapi.lib mpr.lib \
+        dnsapi.lib mpr.lib \
        rpcrt4.lib \
        user32.lib \
-    Dbghelp.lib \
-    strsafe.lib \
-    mpr.lib \
-    secur32.lib \
-    ole32.lib \
-    oleaut32.lib
+        Dbghelp.lib \
+        strsafe.lib \
+        mpr.lib \
+        secur32.lib \
+        ole32.lib \
+        oleaut32.lib
 
 AFSD_EXELIBS =\
        $(DESTDIR)\lib\libosi.lib \
        $(DESTDIR)\lib\afsrpc.lib \
-    $(DESTDIR)\lib\afsrx.lib \
+        $(DESTDIR)\lib\afsrx.lib \
        $(DESTDIR)\lib\afsauthent.lib \
        $(DESTDIR)\lib\afs\mtafsvldb.lib \
        $(DESTDIR)\lib\afs\mtafsint.lib \
        $(DESTDIR)\lib\libafsconf.lib \
        $(DESTDIR)\lib\afs\afsreg.lib \
-    $(LANAHELPERLIB)
+        $(LANAHELPERLIB)
 
 $(AFSD_EXEFILE): $(OUT)\afsd.obj $(AFSDOBJS) $(OUT)\afsd.res  $(RXOBJS) $(AFSD_EXELIBS)
        $(EXEGUILINK) $(AFSD_SDKLIBS)
index 8e29f678e7b4f4c08a4c12a7197ac74ebafbc7c8..d8661ebbbf124211951479768004cf14ee27c69e 100644 (file)
@@ -53,6 +53,7 @@ void afsd_notifier(char *msgp, char *filep, long line)
        MessageBox(NULL, tbuffer, msgp, MB_OK|MB_ICONSTOP|MB_SETFOREGROUND);
 
        afsd_ForceTrace(TRUE);
+        buf_ForceTrace(TRUE);
 
        if (traceOnPanic) {
                _asm int 3h;
index 75cd53ae1f414f27d6f41d2dbdc426b5851f9a4f..2b77da329022a1fb81eaadd445df6794ee58033b 100644 (file)
@@ -52,6 +52,7 @@ void afsd_notifier(char *msgp, char *filep, long line)
        /*MessageBox(NULL, tbuffer, msgp, MB_OK|MB_ICONSTOP|MB_SETFOREGROUND);*/
 
        afsd_ForceTrace(TRUE);
+        buf_ForceTrace(TRUE);
 
        if (traceOnPanic) {
                /*asm("int 3");*/
index a11118b945e579e69dac435102cbf103b7a59d06..8c3456849b8eefdd02d1256e8dcbd10adbd9da98 100644 (file)
@@ -22,7 +22,6 @@
 #include "afsd.h"
 #include <rx\rx.h>
 #include <rx\rx_null.h>
-
 #include <WINNT/syscfg.h>
 
 #include "smb.h"
@@ -651,7 +650,7 @@ int afsd_InitCM(char **reasonP)
         char * p, *q; 
         afsi_log("Sys name %s", buf);
 
-        for (p = q = buf; p < cm_sysName + dummyLen; p++)
+        for (p = q = buf; p < buf + dummyLen; p++)
         {
             if (*p == '\0' || isspace(*p)) {
                 memcpy(cm_sysNameList[cm_sysNameCount],q,p-q);
index 43fcb783f139a3803a6f1a8e5236d9e86bb93896..d9236c3dddb2557b4aa3a66f06a54b00434258f5 100644 (file)
@@ -82,6 +82,7 @@ static void afsd_notifier(char *msgp, char *filep, long line)
     osi_LogEnable(afsd_logp);
 
     afsd_ForceTrace(TRUE);
+    buf_ForceTrace(TRUE);
 
     afsi_log("--- begin dump ---");
     cm_DumpSCache(afsi_file, "a");
@@ -176,8 +177,10 @@ afsd_ServiceControlHandler(DWORD ctrlCode)
         RegCloseKey (parmKey);
         if (code != ERROR_SUCCESS)
             doTrace = 0;
-        if (doTrace)
+        if (doTrace) {
             afsd_ForceTrace(FALSE);
+            buf_ForceTrace(FALSE);
+        }
 
       doneTrace:
         ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
@@ -239,8 +242,10 @@ afsd_ServiceControlHandlerEx(
         RegCloseKey (parmKey);
         if (code != ERROR_SUCCESS)
             doTrace = 0;
-        if (doTrace)
+        if (doTrace) {
             afsd_ForceTrace(FALSE);
+            buf_ForceTrace(FALSE);
+        }
 
       doneTrace:
         ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
index 743374a28b7198eb86b1cfb3c0902c330fb4049a..01ace95a8d3c372cc81bd07e31556cad0223ab59 100644 (file)
@@ -56,7 +56,7 @@
 
 
 #define USE_MS2MIT
-#define USE_KRB4
+#undef  USE_KRB4
 #include "afskfw-int.h"
 #include "afskfw.h"
 
@@ -288,6 +288,7 @@ FUNC_INFO k5_fi[] = {
     END_FUNC_INFO
 };
 
+#ifdef USE_KRB4
 FUNC_INFO k4_fi[] = {
     MAKE_FUNC_INFO(krb_get_cred),
     MAKE_FUNC_INFO(krb_get_tf_realm),
@@ -295,6 +296,7 @@ FUNC_INFO k4_fi[] = {
     MAKE_FUNC_INFO(tkt_string),
     END_FUNC_INFO
 };
+#endif
 
 FUNC_INFO k524_fi[] = {
     MAKE_FUNC_INFO(krb524_init_ets),
@@ -388,7 +390,9 @@ KFW_initialize(void)
         if ( !inited ) {
             inited = 1;
             LoadFuncs(KRB5_DLL, k5_fi, &hKrb5, 0, 1, 0, 0);
+#ifdef USE_KRB4
             LoadFuncs(KRB4_DLL, k4_fi, &hKrb4, 0, 1, 0, 0);
+#endif /* USE_KRB4 */
             LoadFuncs(COMERR_DLL, ce_fi, &hComErr, 0, 0, 1, 0);
             LoadFuncs(SERVICE_DLL, service_fi, &hService, 0, 1, 0, 0);
 #ifdef USE_MS2MIT
@@ -457,20 +461,17 @@ KFW_use_krb524(void)
         len = sizeof(use524);
         code = RegQueryValueEx(parmKey, "Use524", NULL, NULL,
                                 (BYTE *) &use524, &len);
-        if (code != ERROR_SUCCESS) {
-            RegCloseKey(parmKey);
-
-            code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, OpenAFSConfigKeyName,
-                                 0, KEY_QUERY_VALUE, &parmKey);
-            if (code == ERROR_SUCCESS) {
-                len = sizeof(use524);
-                code = RegQueryValueEx(parmKey, "Use524", NULL, NULL,
-                                        (BYTE *) &use524, &len);
-                if (code != ERROR_SUCCESS)
-                    use524 = 0;
-            }
+        RegCloseKey(parmKey);
+    }
+    if (code != ERROR_SUCCESS) {
+        code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, OpenAFSConfigKeyName,
+                             0, KEY_QUERY_VALUE, &parmKey);
+        if (code == ERROR_SUCCESS) {
+            len = sizeof(use524);
+            code = RegQueryValueEx(parmKey, "Use524", NULL, NULL,
+                                    (BYTE *) &use524, &len);
+            RegCloseKey (parmKey);
         }
-        RegCloseKey (parmKey);
     }
     return use524;
 }
@@ -488,21 +489,20 @@ KFW_is_available(void)
         len = sizeof(enableKFW);
         code = RegQueryValueEx(parmKey, "EnableKFW", NULL, NULL,
                                 (BYTE *) &enableKFW, &len);
-        if (code != ERROR_SUCCESS) {
-            RegCloseKey(parmKey);
-
-            code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, OpenAFSConfigKeyName,
-                                 0, KEY_QUERY_VALUE, &parmKey);
-            if (code == ERROR_SUCCESS) {
-                len = sizeof(enableKFW);
-                code = RegQueryValueEx(parmKey, "EnableKFW", NULL, NULL,
-                                        (BYTE *) &enableKFW, &len);
-                if (code != ERROR_SUCCESS)
-                    enableKFW = 1;
-            }
-        }
         RegCloseKey (parmKey);
     }
+    
+    if (code != ERROR_SUCCESS) {
+        code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, OpenAFSConfigKeyName,
+                             0, KEY_QUERY_VALUE, &parmKey);
+        if (code == ERROR_SUCCESS) {
+            len = sizeof(enableKFW);
+            code = RegQueryValueEx(parmKey, "EnableKFW", NULL, NULL,
+                                    (BYTE *) &enableKFW, &len);
+            RegCloseKey (parmKey);
+        }
+    } 
+
     if ( !enableKFW )
         return FALSE;
 
@@ -2643,7 +2643,8 @@ KFW_AFS_klog(
         }       
     }
 #else
-    goto cleanup;
+    if (!try_krb5)
+        goto cleanup;
 #endif
     strcpy(realm_of_cell, afs_realm_of_cell(ctx, &ak_cellconfig));
 
@@ -2700,7 +2701,7 @@ KFW_AFS_klog(
         code = pkrb5_get_credentials(ctx, 0, cc, &increds, &k5creds);
         if (code == KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN ||
              code == KRB5KRB_ERR_GENERIC /* heimdal */ ||
-                        code == KRB5KRB_AP_ERR_MSG_TYPE) {
+             code == KRB5KRB_AP_ERR_MSG_TYPE) {
             /* Or service@REALM */
             pkrb5_free_principal(ctx,increds.server);
             increds.server = 0;
@@ -2730,7 +2731,7 @@ KFW_AFS_klog(
 
         if ((code == KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN ||
               code == KRB5KRB_ERR_GENERIC /* heimdal */ ||
-                         code == KRB5KRB_AP_ERR_MSG_TYPE) &&
+              code == KRB5KRB_AP_ERR_MSG_TYPE) &&
              strcmp(RealmName, realm_of_cell)) {
             /* Or service/cell@REALM_OF_CELL */
             strcpy(RealmName, realm_of_cell);
@@ -3021,7 +3022,7 @@ KFW_AFS_klog(
     if (ctx && (ctx != alt_ctx))
         pkrb5_free_context(ctx);
 
-       return(rc? rc : code);
+    return(rc? rc : code);
 }
 
 /**************************************/
index b0cef02e88f89c203ccc62bc5caafc370f416b56..423bdd30f46d4973d0883a3afbc9947847da512b 100644 (file)
@@ -245,8 +245,9 @@ int RXAFS_Lookup (struct rx_connection *,
 #define CM_ERROR_BUFFERTOOSMALL                (CM_ERROR_BASE+38)
 #define CM_ERROR_RENAME_IDENTICAL      (CM_ERROR_BASE+39)
 #define CM_ERROR_ALLOFFLINE             (CM_ERROR_BASE+40)
-#define CM_ERROR_AMBIGUOUS_FILENAME (CM_ERROR_BASE+41)
-#define CM_ERROR_BADLOGONTYPE  (CM_ERROR_BASE+42)
-#define CM_ERROR_GSSCONTINUE    (CM_ERROR_BASE+43)
-#define CM_ERROR_TIDIPC         (CM_ERROR_BASE+44)
+#define CM_ERROR_AMBIGUOUS_FILENAME     (CM_ERROR_BASE+41)
+#define CM_ERROR_BADLOGONTYPE          (CM_ERROR_BASE+42)
+#define CM_ERROR_GSSCONTINUE            (CM_ERROR_BASE+43)
+#define CM_ERROR_TIDIPC                 (CM_ERROR_BASE+44)
+#define CM_ERROR_TOO_MANY_SYMLINKS      (CM_ERROR_BASE+45)
 #endif /*  __CM_H_ENV__ */
index 9fef57dfe10669c3fa8d246b2d677cc100c478a9..06c9cc162cb485e6f28edc442b741c8b801b82a7 100644 (file)
 #include <malloc.h>
 #include <stdio.h>
 #include <assert.h>
+#include <strsafe.h>
 
 #include "afsd.h"
 
+#ifdef DEBUG
+#define TRACE_BUFFER 1
+#endif
+
 extern void afsi_log(char *pattern, ...);
 
 /* This module implements the buffer package used by the local transaction
@@ -306,12 +311,12 @@ long buf_Init(cm_buf_ops_t *opsp)
                              OPEN_ALWAYS,
                              FILE_ATTRIBUTE_NORMAL,
                              NULL);
+            FreeCacheFileSA(psa);
             if (hf == INVALID_HANDLE_VALUE) {
                 afsi_log("Error creating cache file \"%s\" error %d", 
                           cm_CachePath, GetLastError());
                 return CM_ERROR_INVAL;
             }
-            FreeCacheFileSA(psa);
         } else { /* buf_cacheType == CM_BUF_CACHETYPE_VIRTUAL */
             hf = INVALID_HANDLE_VALUE;
         }
@@ -378,8 +383,11 @@ long buf_Init(cm_buf_ops_t *opsp)
         /* just for safety's sake */
         buf_maxReservedBufs = buf_nbuffers - 3;
 
+#ifdef TRACE_BUFFER
         /* init the buffer trace log */
-        buf_logp = osi_LogCreate("buffer", 10);
+        buf_logp = osi_LogCreate("buffer", 1000);
+        osi_LogEnable(buf_logp);
+#endif
 
         osi_EndOnce(&once);
 
@@ -532,7 +540,7 @@ void buf_WaitIO(cm_buf_t *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);
+        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
@@ -1481,3 +1489,24 @@ int cm_DumpBufHashTable(FILE *outputFile, char *cookie)
     return 0;
 }
 
+void buf_ForceTrace(BOOL flush)
+{
+    HANDLE handle;
+    int len;
+    char buf[256];
+
+    if (!buf_logp) 
+        return;
+
+    len = GetTempPath(sizeof(buf)-10, buf);
+    StringCbCopyA(&buf[len], sizeof(buf)-len, "/afs-buffer.log");
+    handle = CreateFile(buf, GENERIC_WRITE, FILE_SHARE_READ,
+                           NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+    if (handle == INVALID_HANDLE_VALUE) {
+        osi_panic("Cannot create log file", __FILE__, __LINE__);
+    }
+    osi_LogPrint(buf_logp, handle);
+    if (flush)
+        FlushFileBuffers(handle);
+    CloseHandle(handle);
+}
index 4ca977ad4ca9d72332a7d0174d5cb5b4ce7eb9a9..1f1bc42accc55c712546b7b59c564cd8c6092690 100644 (file)
@@ -195,6 +195,8 @@ extern long buf_FlushCleanPages(cm_scache_t *scp, cm_user_t *userp,
 
 extern long buf_SetNBuffers(long nbuffers);
 
+extern void buf_ForceTrace(BOOL flush);
+
 /* error codes */
 #define CM_BUF_EXISTS  1       /* buffer exists, and shouldn't */
 #define CM_ERROR_BASEBUF       0x33333333
index 32e748ad1d5cdc7c065d7e8a8bf7c1eddd0963df..4dbfb2cfd8775d67ba5b0e27bce6efbd1ce32eb0 100644 (file)
@@ -384,12 +384,12 @@ out:
 long cm_ConnByMServers(cm_serverRef_t *serversp, cm_user_t *usersp,
        cm_req_t *reqp, cm_conn_t **connpp)
 {
-       long code;
-       cm_serverRef_t *tsrp;
+    long code;
+    cm_serverRef_t *tsrp;
     cm_server_t *tsp;
     long firstError = 0;
-       int someBusy = 0, someOffline = 0, allBusy = 1, allDown = 1;
-       long timeUsed, timeLeft, hardTimeLeft;
+    int someBusy = 0, someOffline = 0, allBusy = 1, allDown = 1;
+    long timeUsed, timeLeft, hardTimeLeft;
 #ifdef DJGPP
     struct timeval now;
 #endif /* DJGPP */        
@@ -397,17 +397,17 @@ long cm_ConnByMServers(cm_serverRef_t *serversp, cm_user_t *usersp,
     *connpp = NULL;
 
 #ifndef DJGPP
-       timeUsed = (GetCurrentTime() - reqp->startTime) / 1000;
+    timeUsed = (GetCurrentTime() - reqp->startTime) / 1000;
 #else
     gettimeofday(&now, NULL);
     timeUsed = sub_time(now, reqp->startTime) / 1000;
 #endif
         
-       /* leave 5 seconds margin of safety */
-       timeLeft =  ConnDeadtimeout - timeUsed - 5;
-       hardTimeLeft = HardDeadtimeout - timeUsed - 5;
+    /* leave 5 seconds margin of safety */
+    timeLeft =  ConnDeadtimeout - timeUsed - 5;
+    hardTimeLeft = HardDeadtimeout - timeUsed - 5;
 
-       lock_ObtainWrite(&cm_serverLock);
+    lock_ObtainWrite(&cm_serverLock);
     for (tsrp = serversp; tsrp; tsrp=tsrp->next) {
         tsp = tsrp->server;
         cm_GetServerNoLock(tsp);
@@ -419,7 +419,7 @@ long cm_ConnByMServers(cm_serverRef_t *serversp, cm_user_t *usersp,
             else if (tsrp->status == offline)
                 someOffline = 1;
             else {
-                               allBusy = 0;
+                allBusy = 0;
                 code = cm_ConnByServer(tsp, usersp, connpp);
                 if (code == 0) {
                     cm_PutServer(tsp);
@@ -439,24 +439,24 @@ long cm_ConnByMServers(cm_serverRef_t *serversp, cm_user_t *usersp,
                 if (firstError == 0) 
                     firstError = code;
             }
-               
+        } 
         lock_ObtainWrite(&cm_serverLock);
         cm_PutServerNoLock(tsp);
     }   
 
-       lock_ReleaseWrite(&cm_serverLock);
-       if (firstError == 0) {
+    lock_ReleaseWrite(&cm_serverLock);
+    if (firstError == 0) {
         if (serversp == NULL)
-                       firstError = CM_ERROR_NOSUCHVOLUME;
+            firstError = CM_ERROR_NOSUCHVOLUME;
         else if (allDown) 
-                       firstError = CM_ERROR_ALLOFFLINE;
-               else if (allBusy) 
-                       firstError = CM_ERROR_ALLBUSY;
-               else
-                       firstError = CM_ERROR_TIMEDOUT;
-       }
+            firstError = CM_ERROR_ALLOFFLINE;
+        else if (allBusy) 
+            firstError = CM_ERROR_ALLBUSY;
+        else
+            firstError = CM_ERROR_TIMEDOUT;
+    }
 
-       osi_Log1(afsd_logp, "cm_ConnByMServers returning %x", firstError);
+    osi_Log1(afsd_logp, "cm_ConnByMServers returning %x", firstError);
     return firstError;
 }
 
index 2933c0f50a4f4a86cd22877550a4fe9e9457e005..0894791a1a0d0382b4ab4e53f0d7cb9ab40d074f 100644 (file)
@@ -73,6 +73,45 @@ void cm_FreelanceChangeNotifier(void * parmp) {
         }
     }
 }
+
+void cm_FreelanceSymlinkChangeNotifier(void * parmp) {
+    HANDLE hFreelanceSymlinkChangeEvent = 0;
+    HKEY   hkFreelance = 0;
+
+    if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, 
+                      "SOFTWARE\\OpenAFS\\Client\\Freelance\\Symlinks",
+                      0,
+                      KEY_NOTIFY,
+                      &hkFreelance) == ERROR_SUCCESS) {
+
+        hFreelanceSymlinkChangeEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
+        if (hFreelanceSymlinkChangeEvent == NULL) {
+            RegCloseKey(hkFreelance);
+            return;
+        }
+    }
+
+    while ( TRUE ) {
+    /* check hFreelanceSymlinkChangeEvent to see if it is set. 
+     * if so, call cm_noteLocalMountPointSymlinkChange()
+     */
+        if (RegNotifyChangeKeyValue( hkFreelance,   /* hKey */
+                                     FALSE,         /* bWatchSubtree */
+                                     REG_NOTIFY_CHANGE_LAST_SET, /* dwNotifyFilter */
+                                     hFreelanceSymlinkChangeEvent, /* hEvent */
+                                     TRUE          /* fAsynchronous */
+                                     ) != ERROR_SUCCESS) {
+            RegCloseKey(hkFreelance);
+            CloseHandle(hFreelanceSymlinkChangeEvent);
+            return;
+        }
+
+        if (WaitForSingleObject(hFreelanceSymlinkChangeEvent, INFINITE) == WAIT_OBJECT_0)
+        {
+            cm_noteLocalMountPointChange();
+        }
+    }
+}
 #endif
 
 void cm_InitFreelance() {
@@ -98,13 +137,17 @@ void cm_InitFreelance() {
                           NULL, 0, &lpid, "cm_FreelanceChangeNotifier");
     osi_assert(phandle != NULL);
     thrd_CloseHandle(phandle);
+
+    phandle = thrd_Create(NULL, 65536, (ThreadFunc) cm_FreelanceSymlinkChangeNotifier,
+                          NULL, 0, &lpid, "cm_FreelanceSymlinkChangeNotifier");
+    osi_assert(phandle != NULL);
+    thrd_CloseHandle(phandle);
 #endif
 }
 
 /* yj: Initialization of the fake root directory */
 /* to be called while holding freelance lock unless during init. */
 void cm_InitFakeRootDir() {
-       
     int i, t1, t2;
     char* currentPos;
     int noChunks;
@@ -398,12 +441,12 @@ long cm_InitLocalMountPoints() {
     long code;
     char rootCellName[256];
 #if !defined(DJGPP)
-    HKEY hkFreelance = 0;
+    HKEY hkFreelance = 0, hkFreelanceSymlinks = 0;
     DWORD dwType, dwSize;
-    DWORD dwMountPoints;
+    DWORD dwMountPoints = 0;
     DWORD dwIndex;
+    DWORD dwSymlinks = 0;
     FILETIME ftLastWriteTime;
-    afs_uint32 unixTime;
 #endif
 
 #if !defined(DJGPP)
@@ -440,9 +483,34 @@ long cm_InitLocalMountPoints() {
             dwMountPoints = 2;
         }
 
+        if (RegCreateKeyEx( HKEY_LOCAL_MACHINE, 
+                          "SOFTWARE\\OpenAFS\\Client\\Freelance\\Symlinks",
+                          0,
+                          NULL,
+                          REG_OPTION_NON_VOLATILE,
+                          KEY_READ|KEY_WRITE|KEY_QUERY_VALUE,
+                          NULL,
+                          &hkFreelanceSymlinks,
+                          NULL) == ERROR_SUCCESS) {
+
+            RegQueryInfoKey( hkFreelanceSymlinks,
+                             NULL,  /* lpClass */
+                             NULL,  /* lpcClass */
+                             NULL,  /* lpReserved */
+                             NULL,  /* lpcSubKeys */
+                             NULL,  /* lpcMaxSubKeyLen */
+                             NULL,  /* lpcMaxClassLen */
+                             &dwSymlinks, /* lpcValues */
+                             NULL,  /* lpcMaxValueNameLen */
+                             NULL,  /* lpcMaxValueLen */
+                             NULL,  /* lpcbSecurityDescriptor */
+                             NULL   /* lpftLastWriteTime */
+                             );
+        }
+
         // get the number of entries there are from the first line
         // that we read
-        cm_noLocalMountPoints = dwMountPoints;
+        cm_noLocalMountPoints = dwMountPoints + dwSymlinks;
 
         // create space to store the local mount points
         cm_localMountPoints = malloc(sizeof(cm_localMountPoint_t) * cm_noLocalMountPoints);
@@ -478,14 +546,16 @@ long cm_InitLocalMountPoints() {
                 cm_noLocalMountPoints--;
                 continue;
             }
+
+            aLocalMountPoint->fileType = CM_SCACHETYPE_MOUNTPOINT;
             aLocalMountPoint->namep=malloc(t-line+1);
             strncpy(aLocalMountPoint->namep, line, t-line);
             aLocalMountPoint->namep[t-line] = '\0';
                
-            /* copy the mount point string without the trailing dot */
+            /* copy the mount point string */
             aLocalMountPoint->mountPointStringp=malloc(strlen(t));
-                       strncpy(aLocalMountPoint->mountPointStringp, t, strlen(t)-1);
-                       aLocalMountPoint->mountPointStringp[strlen(t)-1] = '\0';
+            strncpy(aLocalMountPoint->mountPointStringp, t, strlen(t)-1);
+            aLocalMountPoint->mountPointStringp[strlen(t)-1] = '\0';
     
             osi_Log2(afsd_logp,"found mount point: name %s, string %s",
                       osi_LogSaveString(afsd_logp,aLocalMountPoint->namep),
@@ -494,6 +564,48 @@ long cm_InitLocalMountPoints() {
             aLocalMountPoint++;
         }
 
+        for ( dwIndex = 0 ; dwIndex < dwSymlinks; dwIndex++ ) {
+            TCHAR szValueName[16];
+            DWORD dwValueSize = 16;
+            dwSize = sizeof(line);
+            RegEnumValue( hkFreelanceSymlinks, dwIndex, szValueName, &dwValueSize, NULL,
+                          &dwType, line, &dwSize);
+
+            /* find the trailing dot; null terminate after it */
+            t2 = strrchr(line, '.');
+            if (t2)
+                *(t2+1) = '\0';
+
+            // line is not empty, so let's parse it
+            t = strchr(line, ':');
+
+            // make sure that there is a ':' separator in the line
+            if (!t) {
+                afsi_log("error occurred while parsing symlink entry: no ':' separator in line %d", dwIndex);
+                fprintf(stderr, "error occurred while parsing symlink entry: no ':' separator in line %d", dwIndex);
+                cm_noLocalMountPoints--;
+                continue;
+            }
+
+            aLocalMountPoint->fileType = CM_SCACHETYPE_SYMLINK;
+            aLocalMountPoint->namep=malloc(t-line+1);
+            strncpy(aLocalMountPoint->namep, line, t-line);
+            aLocalMountPoint->namep[t-line] = '\0';
+               
+            /* copy the symlink string */
+            aLocalMountPoint->mountPointStringp=malloc(strlen(t)-1);
+            strncpy(aLocalMountPoint->mountPointStringp, t+1, strlen(t)-2);
+            aLocalMountPoint->mountPointStringp[strlen(t)-2] = '\0';
+    
+            osi_Log2(afsd_logp,"found symlink: name %s, string %s",
+                      osi_LogSaveString(afsd_logp,aLocalMountPoint->namep),
+                      osi_LogSaveString(afsd_logp,aLocalMountPoint->mountPointStringp));
+
+            aLocalMountPoint++;
+        }
+
+        if ( hkFreelanceSymlinks )
+            RegCloseKey( hkFreelanceSymlinks );
         RegCloseKey(hkFreelance);
         return 0;
     }
@@ -625,10 +737,6 @@ int cm_getNoLocalMountPoints() {
     return cm_noLocalMountPoints;
 }
 
-cm_localMountPoint_t* cm_getLocalMountPoint(int vnode) {
-    return 0;
-}
-
 long cm_FreelanceAddMount(char *filename, char *cellname, char *volume, int rw, cm_fid_t *fidp)
 {
     FILE *fp;
@@ -688,22 +796,35 @@ long cm_FreelanceAddMount(char *filename, char *cellname, char *volume, int rw,
                          );
 
         if (rw)
-            sprintf(line, "%s%%%s:%s\n", filename, fullname, volume);
+            sprintf(line, "%s%%%s:%s", filename, fullname, volume);
         else
-            sprintf(line, "%s#%s:%s\n", filename, fullname, volume);
+            sprintf(line, "%s#%s:%s", filename, fullname, volume);
 
         /* If we are adding a new value, there must be an unused name
          * within the range 0 to dwMountPoints 
          */
         for ( dwIndex = 0; dwIndex <= dwMountPoints; dwIndex++ ) {
             char szIndex[16];
+            char szMount[1024];
+
+            dwSize = sizeof(szMount);
             sprintf(szIndex, "%d", dwIndex);
-            if (RegQueryValueEx( hkFreelance, szIndex, 0, &dwType, NULL, &dwSize) != ERROR_SUCCESS) {
+            if (RegQueryValueEx( hkFreelance, szIndex, 0, &dwType, szMount, &dwSize) != ERROR_SUCCESS) {
                 /* found an unused value */
                 dwType = REG_SZ;
                 dwSize = strlen(line) + 1;
                 RegSetValueEx( hkFreelance, szIndex, 0, dwType, line, dwSize);
                 break;
+            } else {
+                               int len = strlen(filename);
+                               if ( dwType == REG_SZ && !strncmp(filename, szMount, len) && 
+                                       (szMount[len] == '%' || szMount[len] == '#')) {
+                    /* Replace the existing value */
+                    dwType = REG_SZ;
+                    dwSize = strlen(line) + 1;
+                    RegSetValueEx( hkFreelance, szIndex, 0, dwType, line, dwSize);
+                    break;
+                }
             }
         }
         RegCloseKey(hkFreelance);
@@ -847,4 +968,160 @@ long cm_FreelanceRemoveMount(char *toremove)
     return 0;
 }
 
+long cm_FreelanceAddSymlink(char *filename, char *destination, cm_fid_t *fidp)
+{
+    FILE *fp;
+    char hfile[120];
+    char line[512];
+    char fullname[200];
+    int n;
+    int alias = 0;
+#if !defined(DJGPP)
+    HKEY hkFreelanceSymlinks = 0;
+    DWORD dwType, dwSize;
+    DWORD dwSymlinks;
+    DWORD dwIndex;
+#endif
+
+    /* before adding, verify the cell name; if it is not a valid cell,
+       don't add the mount point.
+       allow partial matches as a means of poor man's alias. */
+    /* major performance issue? */
+    osi_Log2(afsd_logp,"Freelance Add Symlink request: filename=%s destination=%s",
+              osi_LogSaveString(afsd_logp,filename), 
+              osi_LogSaveString(afsd_logp,destination));
+    
+    lock_ObtainMutex(&cm_Freelance_Lock);
+
+#if !defined(DJGPP)
+    if (RegCreateKeyEx( HKEY_LOCAL_MACHINE, 
+                        "SOFTWARE\\OpenAFS\\Client\\Freelance\\Symlinks",
+                        0,
+                        NULL,
+                        REG_OPTION_NON_VOLATILE,
+                        KEY_READ|KEY_WRITE|KEY_QUERY_VALUE,
+                        NULL,
+                        &hkFreelanceSymlinks,
+                        NULL) == ERROR_SUCCESS) {
+
+        RegQueryInfoKey( hkFreelanceSymlinks,
+                         NULL,  /* lpClass */
+                         NULL,  /* lpcClass */
+                         NULL,  /* lpReserved */
+                         NULL,  /* lpcSubKeys */
+                         NULL,  /* lpcMaxSubKeyLen */
+                         NULL,  /* lpcMaxClassLen */
+                         &dwSymlinks, /* lpcValues */
+                         NULL,  /* lpcMaxValueNameLen */
+                         NULL,  /* lpcMaxValueLen */
+                         NULL,  /* lpcbSecurityDescriptor */
+                         NULL   /* lpftLastWriteTime */
+                         );
+
+        sprintf(line, "%s:%s.", filename, destination);
+
+        /* If we are adding a new value, there must be an unused name
+         * within the range 0 to dwSymlinks 
+         */
+        for ( dwIndex = 0; dwIndex <= dwSymlinks; dwIndex++ ) {
+            char szIndex[16];
+            char szLink[1024];
+
+            dwSize = sizeof(szLink);
+            sprintf(szIndex, "%d", dwIndex);
+            if (RegQueryValueEx( hkFreelanceSymlinks, szIndex, 0, &dwType, szLink, &dwSize) != ERROR_SUCCESS) {
+                /* found an unused value */
+                dwType = REG_SZ;
+                dwSize = strlen(line) + 1;
+                RegSetValueEx( hkFreelanceSymlinks, szIndex, 0, dwType, line, dwSize);
+                break;
+            } else {
+                               int len = strlen(filename);
+                               if ( dwType == REG_SZ && !strncmp(filename, szLink, len) && szLink[len] == ':') {
+                    /* Replace the existing value */
+                    dwType = REG_SZ;
+                    dwSize = strlen(line) + 1;
+                    RegSetValueEx( hkFreelanceSymlinks, szIndex, 0, dwType, line, dwSize);
+                    break;
+                }
+            }
+        }
+        RegCloseKey(hkFreelanceSymlinks);
+    } 
+#endif
+    lock_ReleaseMutex(&cm_Freelance_Lock);
+
+    /* cm_reInitLocalMountPoints(); */
+    if (fidp) {
+        fidp->unique = 1;
+        fidp->vnode = cm_noLocalMountPoints + 1;   /* vnode value of last mt pt */
+    }
+    cm_noteLocalMountPointChange();
+    return 0;
+}
+
+long cm_FreelanceRemoveSymlink(char *toremove)
+{
+    int i, n;
+    char* cp;
+    char line[512];
+    char shortname[200];
+    char hfile[120], hfile2[120];
+    FILE *fp1, *fp2;
+    int found=0;
+#if !defined(DJGPP)
+    HKEY hkFreelanceSymlinks = 0;
+    DWORD dwType, dwSize;
+    DWORD dwSymlinks;
+    DWORD dwIndex;
+#endif
+
+    lock_ObtainMutex(&cm_Freelance_Lock);
+
+
+#if !defined(DJGPP)
+    if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, 
+                      "SOFTWARE\\OpenAFS\\Client\\Freelance\\Symlinks",
+                      0,
+                      KEY_READ|KEY_WRITE|KEY_QUERY_VALUE,
+                      &hkFreelanceSymlinks) == ERROR_SUCCESS) {
+
+        RegQueryInfoKey( hkFreelanceSymlinks,
+                         NULL,  /* lpClass */
+                         NULL,  /* lpcClass */
+                         NULL,  /* lpReserved */
+                         NULL,  /* lpcSubKeys */
+                         NULL,  /* lpcMaxSubKeyLen */
+                         NULL,  /* lpcMaxClassLen */
+                         &dwSymlinks, /* lpcValues */
+                         NULL,  /* lpcMaxValueNameLen */
+                         NULL,  /* lpcMaxValueLen */
+                         NULL,  /* lpcbSecurityDescriptor */
+                         NULL   /* lpftLastWriteTime */
+                         );
+
+        for ( dwIndex = 0; dwIndex < dwSymlinks; dwIndex++ ) {
+            TCHAR szValueName[16];
+            DWORD dwValueSize = 16;
+            dwSize = sizeof(line);
+            RegEnumValue( hkFreelanceSymlinks, dwIndex, szValueName, &dwValueSize, NULL,
+                          &dwType, line, &dwSize);
+
+            cp=strchr(line, ':');
+            memcpy(shortname, line, cp-line);
+            shortname[cp-line]=0;
+
+            if (!strcmp(shortname, toremove)) {
+                RegDeleteValue( hkFreelanceSymlinks, szValueName );
+                break;
+            }
+        }
+        RegCloseKey(hkFreelanceSymlinks);
+    }
+#endif
+    
+    lock_ReleaseMutex(&cm_Freelance_Lock);
+    cm_noteLocalMountPointChange();
+    return 0;
+}
 #endif /* AFS_FREELANCE_CLIENT */
index 3d02b9e09290adaa50b9ebc19d16cde3426ea2a8..effeb9ee6aea0f3ccbb37f20e247d98e34c36e82 100644 (file)
@@ -3,19 +3,21 @@
 
 
 typedef struct cm_localMountPoint {
-       char* namep;
-       char* mountPointStringp;
-       struct cm_localMountPoint* next;
+    char*                       namep;
+    char*                       mountPointStringp;
+    unsigned int                fileType;
+    struct cm_localMountPoint*  next;
 } cm_localMountPoint_t;
 
 extern int cm_getNoLocalMountPoints();
 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, int rw, cm_fid_t *fidp);
+extern long cm_FreelanceRemoveSymlink(char *toremove);
+extern long cm_FreelanceAddSymlink(char *filename, char *destination, cm_fid_t *fidp);
 extern int cm_clearLocalMountPointChange();
 extern int cm_FakeRootFid(cm_fid_t *fidp);
 
index 13bd7a48f6648fe2e4aa86e99bc5955910a47a37..bb60b77e6b7d1b47afef6c9102807681110e824c 100644 (file)
@@ -458,13 +458,26 @@ long cm_IoctlGetFileCellName(struct smb_ioctl *ioctlp, struct cm_user *userp)
     code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp);
     if (code) return code;
 
-    cellp = cm_FindCellByID(scp->fid.cell);
-    if (cellp) {
-        strcpy(ioctlp->outDatap, cellp->namep);
+#ifdef AFS_FREELANCE_CLIENT
+    if ( cm_freelanceEnabled && 
+         scp->fid.cell==AFS_FAKE_ROOT_CELL_ID &&
+         scp->fid.volume==AFS_FAKE_ROOT_VOL_ID &&
+         scp->fid.vnode==0x1 && scp->fid.unique==0x1 ) {
+        strcpy(ioctlp->outDatap, "Freelance.Local.Root");
         ioctlp->outDatap += strlen(ioctlp->outDatap) + 1;
         code = 0;
+    } else 
+#endif /* AFS_FREELANCE_CLIENT */
+    {
+        cellp = cm_FindCellByID(scp->fid.cell);
+        if (cellp) {
+            strcpy(ioctlp->outDatap, cellp->namep);
+            ioctlp->outDatap += strlen(ioctlp->outDatap) + 1;
+            code = 0;
+        }
+        else 
+            code = CM_ERROR_NOSUCHCELL;
     }
-    else code = CM_ERROR_NOSUCHCELL;
 
     cm_ReleaseSCache(scp);
     return code;
@@ -983,6 +996,7 @@ long cm_IoctlTraceControl(struct smb_ioctl *ioctlp, struct cm_user *userp)
     /* print trace */
     if (inValue & 8) {
         afsd_ForceTrace(FALSE);
+        buf_ForceTrace(FALSE);
     }
         
     if (inValue & 2) {
@@ -1213,6 +1227,7 @@ long cm_IoctlSysName(struct smb_ioctl *ioctlp, struct cm_user *userp)
          * do lookups of @sys entries and thinks it can trust them */
         /* privs ok, store the entry, ... */
         strcpy(cm_sysName, inname);
+               strcpy(cm_sysNameList[0], inname);
         if (setSysName > 1) {       /* ... or list */
             cp = ioctlp->inDatap;
             for (count = 1; count < setSysName; ++count) {
@@ -1220,7 +1235,7 @@ long cm_IoctlSysName(struct smb_ioctl *ioctlp, struct cm_user *userp)
                     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 */
+                strcpy(cm_sysNameList[count], cp);
                 cp += t + 1;
             }
         }
@@ -1509,6 +1524,26 @@ long cm_IoctlSymlink(struct smb_ioctl *ioctlp, struct cm_user *userp)
 
     cp = ioctlp->inDatap;              /* contents of link */
 
+#ifdef AFS_FREELANCE_CLIENT
+    if (cm_freelanceEnabled && dscp == cm_rootSCachep) {
+        /* we are adding the symlink to the root dir., so call
+         * the freelance code to do the add. */
+        if (cp[0] == cp[1] && cp[1] == '\\' && 
+            !_strnicmp(cm_NetbiosName,cp+2,strlen(cm_NetbiosName))) 
+        {
+            /* skip \\AFS\ or \\AFS\all\ */
+            char * p;
+            p = cp + 2 + strlen(cm_NetbiosName) + 1;
+            if ( !_strnicmp("all", p, 3) )
+                p += 4;
+            cp = p;
+        }
+        osi_Log0(afsd_logp,"IoctlCreateSymlink within Freelance root dir");
+        code = cm_FreelanceAddSymlink(leaf, cp, NULL);
+        return code;
+    }
+#endif
+
     /* Create symlink with mode 0755. */
     tattr.mask = CM_ATTRMASK_UNIXMODEBITS;
     tattr.unixModeBits = 0755;
@@ -1618,6 +1653,16 @@ long cm_IoctlDeletelink(struct smb_ioctl *ioctlp, struct cm_user *userp)
 
     cp = ioctlp->inDatap;
 
+#ifdef AFS_FREELANCE_CLIENT
+    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,"IoctlDeletelink from Freelance root dir");
+        code = cm_FreelanceRemoveSymlink(cp);
+        return code;
+    }
+#endif
+
     code = cm_Lookup(dscp, cp, CM_FLAG_NOMOUNTCHASE, userp, &req, &scp);
         
     /* if something went wrong, bail out now */
index b1d29854c10647fae4b0257f682e339103bcb43f..b5e2a7626f886a3cb29ebe98f321361a1575bdbd 100644 (file)
@@ -52,10 +52,10 @@ extern osi_mutex_t cm_Freelance_Lock;
 /* must be called with cm_scacheLock write-locked! */
 void cm_AdjustLRU(cm_scache_t *scp)
 {
-       if (scp == cm_scacheLRULastp)
-               cm_scacheLRULastp = (cm_scache_t *) osi_QPrev(&scp->q);
-       osi_QRemove((osi_queue_t **) &cm_scacheLRUFirstp, &scp->q);
-       osi_QAdd((osi_queue_t **) &cm_scacheLRUFirstp, &scp->q);
+    if (scp == cm_scacheLRULastp)
+        cm_scacheLRULastp = (cm_scache_t *) osi_QPrev(&scp->q);
+    osi_QRemove((osi_queue_t **) &cm_scacheLRUFirstp, &scp->q);
+    osi_QAdd((osi_queue_t **) &cm_scacheLRUFirstp, &scp->q);
     if (!cm_scacheLRULastp) 
         cm_scacheLRULastp = scp;
 }
@@ -65,118 +65,118 @@ void cm_AdjustLRU(cm_scache_t *scp)
  */
 cm_scache_t *cm_GetNewSCache(void)
 {
-       cm_scache_t *scp;
-        int i;
-        cm_scache_t **lscpp;
-        cm_scache_t *tscp;
-
-       if (cm_currentSCaches >= cm_maxSCaches) {
-               for (scp = cm_scacheLRULastp;
-                    scp;
-                    scp = (cm_scache_t *) osi_QPrev(&scp->q)) {
+    cm_scache_t *scp;
+    int i;
+    cm_scache_t **lscpp;
+    cm_scache_t *tscp;
+
+    if (cm_currentSCaches >= cm_maxSCaches) {
+        for (scp = cm_scacheLRULastp;
+              scp;
+              scp = (cm_scache_t *) osi_QPrev(&scp->q)) {
             if (scp->refCount == 0) 
                 break;
-               }
+        }
                 
-                if (scp) {
-                       /* we found an entry, so return it */
-                        if (scp->flags & CM_SCACHEFLAG_INHASH) {
-                               /* hash it out first */
-                                i = CM_SCACHE_HASH(&scp->fid);
-                               lscpp = &cm_hashTablep[i];
-                               for (tscp = *lscpp;
-                                    tscp;
-                                    lscpp = &tscp->nextp, tscp = *lscpp) {
+        if (scp) {
+            /* we found an entry, so return it */
+            if (scp->flags & CM_SCACHEFLAG_INHASH) {
+                /* hash it out first */
+                i = CM_SCACHE_HASH(&scp->fid);
+                lscpp = &cm_hashTablep[i];
+                for (tscp = *lscpp;
+                      tscp;
+                      lscpp = &tscp->nextp, tscp = *lscpp) {
                     if (tscp == scp) 
                         break;
-                                }
-                                osi_assertx(tscp, "afsd: scache hash screwup");
-                                *lscpp = scp->nextp;
-                                scp->flags &= ~CM_SCACHEFLAG_INHASH;
-                        }
-
-                       /* look for things that shouldn't still be set */
-                        osi_assert(scp->bufWritesp == NULL);
-                        osi_assert(scp->bufReadsp == NULL);
-
-                       /* invalidate so next merge works fine;
-                        * also initialize some flags */
-                        scp->flags &= ~(CM_SCACHEFLAG_STATD
-                                       | CM_SCACHEFLAG_RO
-                                       | CM_SCACHEFLAG_PURERO
-                                       | CM_SCACHEFLAG_OVERQUOTA
-                                       | CM_SCACHEFLAG_OUTOFSPACE);
-                        scp->serverModTime = 0;
-                        scp->dataVersion = 0;
-                       scp->bulkStatProgress = hzero;
-
-                        /* discard callback */
+                }
+                osi_assertx(tscp, "afsd: scache hash screwup");
+                *lscpp = scp->nextp;
+                scp->flags &= ~CM_SCACHEFLAG_INHASH;
+            }
+
+            /* look for things that shouldn't still be set */
+            osi_assert(scp->bufWritesp == NULL);
+            osi_assert(scp->bufReadsp == NULL);
+
+            /* invalidate so next merge works fine;
+            * also initialize some flags */
+            scp->flags &= ~(CM_SCACHEFLAG_STATD
+                             | CM_SCACHEFLAG_RO
+                             | CM_SCACHEFLAG_PURERO
+                             | CM_SCACHEFLAG_OVERQUOTA
+                             | CM_SCACHEFLAG_OUTOFSPACE);
+            scp->serverModTime = 0;
+            scp->dataVersion = 0;
+            scp->bulkStatProgress = hzero;
+
+            /* discard callback */
             if (scp->cbServerp) {
                 cm_PutServer(scp->cbServerp);
-                        scp->cbServerp = NULL;
+                scp->cbServerp = NULL;
             }
-                        scp->cbExpires = 0;
-
-                       /* remove from dnlc */
-                       cm_dnlcPurgedp(scp);
-                       cm_dnlcPurgevp(scp);
-
-                       /* discard cached status; if non-zero, Close
-                        * tried to store this to server but failed */
-                       scp->mask = 0;
-
-                       /* drop held volume ref */
-                       if (scp->volp) {
-                               cm_PutVolume(scp->volp);
-                               scp->volp = NULL;
-                       }
-
-                        /* discard symlink info */
-                        if (scp->mountPointStringp) {
-                               free(scp->mountPointStringp);
-                                scp->mountPointStringp = NULL;
-                       }
-                       if (scp->mountRootFidp) {
-                               free(scp->mountRootFidp);
-                               scp->mountRootFidp = NULL;
-                       }
-                       if (scp->dotdotFidp) {
-                               free(scp->dotdotFidp);
-                               scp->dotdotFidp = NULL;
-                       }
-                        
-                       /* not locked, but there can be no references to this guy
-                         * while we hold the global refcount lock.
-                         */
-                        cm_FreeAllACLEnts(scp);
-                        
-                        /* now remove from the LRU queue and put it back at the
-                         * head of the LRU queue.
-                         */
-                       cm_AdjustLRU(scp);
-                       
-                        /* and we're done */
-                        return scp;
-                }
-       }
+            scp->cbExpires = 0;
+
+            /* remove from dnlc */
+            cm_dnlcPurgedp(scp);
+            cm_dnlcPurgevp(scp);
+
+            /* discard cached status; if non-zero, Close
+             * tried to store this to server but failed */
+            scp->mask = 0;
+
+            /* drop held volume ref */
+            if (scp->volp) {
+                cm_PutVolume(scp->volp);
+                scp->volp = NULL;
+            }
+
+            /* discard symlink info */
+            if (scp->mountPointStringp) {
+                free(scp->mountPointStringp);
+                scp->mountPointStringp = NULL;
+            }
+            if (scp->mountRootFidp) {
+                free(scp->mountRootFidp);
+                scp->mountRootFidp = NULL;
+            }
+            if (scp->dotdotFidp) {
+                free(scp->dotdotFidp);
+                scp->dotdotFidp = NULL;
+            }
+
+            /* not locked, but there can be no references to this guy
+             * while we hold the global refcount lock.
+             */
+            cm_FreeAllACLEnts(scp);
+
+            /* now remove from the LRU queue and put it back at the
+             * head of the LRU queue.
+             */
+            cm_AdjustLRU(scp);
+
+            /* and we're done */
+            return scp;
+        }
+    }
         
-        /* if we get here, we should allocate a new scache entry.  We either are below
-         * quota or we have a leak and need to allocate a new one to avoid panicing.
-         */
-        scp = malloc(sizeof(*scp));
-        memset(scp, 0, sizeof(*scp));
-       lock_InitializeMutex(&scp->mx, "cm_scache_t mutex");
-        lock_InitializeRWLock(&scp->bufCreateLock, "cm_scache_t bufCreateLock");
-       
-        /* and put it in the LRU queue */
-        osi_QAdd((osi_queue_t **) &cm_scacheLRUFirstp, &scp->q);
+    /* if we get here, we should allocate a new scache entry.  We either are below
+     * quota or we have a leak and need to allocate a new one to avoid panicing.
+     */
+    scp = malloc(sizeof(*scp));
+    memset(scp, 0, sizeof(*scp));
+    lock_InitializeMutex(&scp->mx, "cm_scache_t mutex");
+    lock_InitializeRWLock(&scp->bufCreateLock, "cm_scache_t bufCreateLock");
+
+    /* and put it in the LRU queue */
+    osi_QAdd((osi_queue_t **) &cm_scacheLRUFirstp, &scp->q);
     if (!cm_scacheLRULastp) 
         cm_scacheLRULastp = scp;
-        cm_currentSCaches++;
-       cm_dnlcPurgedp(scp); /* make doubly sure that this is not in dnlc */
-       cm_dnlcPurgevp(scp); 
-        return scp;
-}
+    cm_currentSCaches++;
+    cm_dnlcPurgedp(scp); /* make doubly sure that this is not in dnlc */
+    cm_dnlcPurgevp(scp); 
+    return scp;
+}       
 
 /* like strcmp, only for fids */
 int cm_FidCmp(cm_fid_t *ap, cm_fid_t *bp)
@@ -189,78 +189,78 @@ int cm_FidCmp(cm_fid_t *ap, cm_fid_t *bp)
         return 1;
     if (ap->cell != bp->cell) 
         return 1;
-        return 0;
+    return 0;
 }
 
 void cm_fakeSCacheInit()
 {
-       memset(&cm_fakeSCache, 0, sizeof(cm_fakeSCache));
-       lock_InitializeMutex(&cm_fakeSCache.mx, "cm_scache_t mutex");
-       cm_fakeSCache.cbServerp = (struct cm_server *)(-1);
-       /* can leave clientModTime at 0 */
-       cm_fakeSCache.fileType = CM_SCACHETYPE_FILE;
-       cm_fakeSCache.unixModeBits = 0777;
-       cm_fakeSCache.length.LowPart = 1000;
-       cm_fakeSCache.linkCount = 1;
-}
+    memset(&cm_fakeSCache, 0, sizeof(cm_fakeSCache));
+    lock_InitializeMutex(&cm_fakeSCache.mx, "cm_scache_t mutex");
+    cm_fakeSCache.cbServerp = (struct cm_server *)(-1);
+    /* can leave clientModTime at 0 */
+    cm_fakeSCache.fileType = CM_SCACHETYPE_FILE;
+    cm_fakeSCache.unixModeBits = 0777;
+    cm_fakeSCache.length.LowPart = 1000;
+    cm_fakeSCache.linkCount = 1;
+}       
 
 void cm_InitSCache(long maxSCaches)
 {
-       static osi_once_t once;
+    static osi_once_t once;
         
-        if (osi_Once(&once)) {
-               lock_InitializeRWLock(&cm_scacheLock, "cm_scacheLock");
-                cm_hashTableSize = maxSCaches / 2;
-                cm_hashTablep = malloc(sizeof(cm_scache_t *) * cm_hashTableSize);
-                memset(cm_hashTablep, 0, sizeof(cm_scache_t *) * cm_hashTableSize);
-               cm_allFileLocks = NULL;
-                cm_currentSCaches = 0;
-                cm_maxSCaches = maxSCaches;
-               cm_fakeSCacheInit();
-               cm_dnlcInit();
-               osi_EndOnce(&once);
-        }
+    if (osi_Once(&once)) {
+        lock_InitializeRWLock(&cm_scacheLock, "cm_scacheLock");
+        cm_hashTableSize = maxSCaches / 2;
+        cm_hashTablep = malloc(sizeof(cm_scache_t *) * cm_hashTableSize);
+        memset(cm_hashTablep, 0, sizeof(cm_scache_t *) * cm_hashTableSize);
+        cm_allFileLocks = NULL;
+        cm_currentSCaches = 0;
+        cm_maxSCaches = maxSCaches;
+        cm_fakeSCacheInit();
+        cm_dnlcInit();
+        osi_EndOnce(&once);
+    }
 }
 
 /* version that doesn't bother creating the entry if we don't find it */
 cm_scache_t *cm_FindSCache(cm_fid_t *fidp)
 {
-       long hash;
-        cm_scache_t *scp;
-        
-        hash = CM_SCACHE_HASH(fidp);
+    long hash;
+    cm_scache_t *scp;
+
+    hash = CM_SCACHE_HASH(fidp);
         
-       osi_assert(fidp->cell != 0);
+    osi_assert(fidp->cell != 0);
 
-        lock_ObtainWrite(&cm_scacheLock);
-       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);
-                       return scp;
-                }
+    lock_ObtainWrite(&cm_scacheLock);
+    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);
+            return scp;
         }
-        lock_ReleaseWrite(&cm_scacheLock);
-        return NULL;
+    }
+    lock_ReleaseWrite(&cm_scacheLock);
+    return NULL;
 }
 
 long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
-       cm_req_t *reqp)
+                  cm_req_t *reqp)
 {
-       long hash;
+    long hash;
     cm_scache_t *scp;
     long code;
     cm_volume_t *volp = 0;
     cm_cell_t *cellp;
     char* mp = 0;
-       int special; // yj: boolean variable to test if file is on root.afs
-       int isRoot;
+    int special; // yj: boolean variable to test if file is on root.afs
+    int isRoot;
     extern cm_fid_t cm_rootFid;
         
     hash = CM_SCACHE_HASH(fidp);
         
-       osi_assert(fidp->cell != 0);
+    osi_assert(fidp->cell != 0);
 
     if (fidp->cell== cm_rootFid.cell && 
          fidp->volume==cm_rootFid.volume &&
@@ -269,92 +269,92 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
         osi_Log0(afsd_logp,"cm_getSCache called with root cell/volume and vnode=0 and unique=0");
     }
 
-       // yj: check if we have the scp, if so, we don't need
-       // to do anything else
+    // yj: check if we have the scp, if so, we don't need
+    // to do anything else
     lock_ObtainWrite(&cm_scacheLock);
-       for(scp=cm_hashTablep[hash]; scp; scp=scp->nextp) {
-               if (cm_FidCmp(fidp, &scp->fid) == 0) {
-                       scp->refCount++;
+    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);
-                       return 0;
+            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
-       // on whether the file is "special", see below.
-
-       // yj: if we're trying to get an scp for a file that's
-       // on root.afs of homecell, we want to handle it specially
-       // because we have to fill in the status stuff 'coz we
-       // don't want trybulkstat to fill it in for us
+    // yj: when we get here, it means we don't have an scp
+    // so we need to either load it or fake it, depending
+    // on whether the file is "special", see below.
+
+    // yj: if we're trying to get an scp for a file that's
+    // on root.afs of homecell, we want to handle it specially
+    // 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==AFS_FAKE_ROOT_CELL_ID && 
+    special = (fidp->cell==AFS_FAKE_ROOT_CELL_ID && 
                fidp->volume==AFS_FAKE_ROOT_VOL_ID &&
-                          !(fidp->vnode==0x1 && fidp->unique==0x1));
-       isRoot = (fidp->cell==AFS_FAKE_ROOT_CELL_ID && 
+               !(fidp->vnode==0x1 && fidp->unique==0x1));
+    isRoot = (fidp->cell==AFS_FAKE_ROOT_CELL_ID && 
               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
+              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) {
-               osi_Log0(afsd_logp,"cm_getSCache Freelance and special");
+    if (cm_freelanceEnabled && special) {
+        osi_Log0(afsd_logp,"cm_getSCache Freelance and special");
         if (fidp->vnode > 1) {
            lock_ObtainMutex(&cm_Freelance_Lock);
-               mp =(cm_localMountPoints+fidp->vnode-2)->mountPointStringp;
-               lock_ReleaseMutex(&cm_Freelance_Lock);
+            mp =(cm_localMountPoints+fidp->vnode-2)->mountPointStringp;
+            lock_ReleaseMutex(&cm_Freelance_Lock);
         } else {
             mp = "";
         }
-               scp = cm_GetNewSCache();
+        scp = cm_GetNewSCache();
                
-               scp->fid = *fidp;
-               scp->volp = cm_rootSCachep->volp;
-               if (scp->dotdotFidp == (cm_fid_t *) NULL)
-                       scp->dotdotFidp = (cm_fid_t *) malloc (sizeof(cm_fid_t));
-               scp->dotdotFidp->cell=AFS_FAKE_ROOT_CELL_ID;
-               scp->dotdotFidp->volume=AFS_FAKE_ROOT_VOL_ID;
-               scp->dotdotFidp->unique=1;
-               scp->dotdotFidp->vnode=1;
-               scp->flags |= (CM_SCACHEFLAG_PURERO | CM_SCACHEFLAG_RO);
-               scp->nextp=cm_hashTablep[hash];
-               cm_hashTablep[hash]=scp;
-               scp->flags |= CM_SCACHEFLAG_INHASH;
-               scp->refCount = 1;
-               scp->fileType = CM_SCACHETYPE_MOUNTPOINT;
-
-               lock_ObtainMutex(&cm_Freelance_Lock);
-               scp->length.LowPart = strlen(mp)+4;
-               scp->mountPointStringp=malloc(strlen(mp)+1);
-               strcpy(scp->mountPointStringp,mp);
-               lock_ReleaseMutex(&cm_Freelance_Lock);
-
-               scp->owner=0x0;
-               scp->unixModeBits=0x1ff;
-               scp->clientModTime=FakeFreelanceModTime;
-               scp->serverModTime=FakeFreelanceModTime;
-               scp->parentUnique = 0x1;
-               scp->parentVnode=0x1;
-               scp->group=0;
-               scp->dataVersion=0x8;
-               *outScpp = scp;
-               lock_ReleaseWrite(&cm_scacheLock);
-               /*afsi_log("   getscache done");*/
-               return 0;
-       }
-       // end of yj code
+        scp->fid = *fidp;
+        scp->volp = cm_rootSCachep->volp;
+        if (scp->dotdotFidp == (cm_fid_t *) NULL)
+            scp->dotdotFidp = (cm_fid_t *) malloc (sizeof(cm_fid_t));
+        scp->dotdotFidp->cell=AFS_FAKE_ROOT_CELL_ID;
+        scp->dotdotFidp->volume=AFS_FAKE_ROOT_VOL_ID;
+        scp->dotdotFidp->unique=1;
+        scp->dotdotFidp->vnode=1;
+        scp->flags |= (CM_SCACHEFLAG_PURERO | CM_SCACHEFLAG_RO);
+        scp->nextp=cm_hashTablep[hash];
+        cm_hashTablep[hash]=scp;
+        scp->flags |= CM_SCACHEFLAG_INHASH;
+        scp->refCount = 1;
+        scp->fileType = (cm_localMountPoints+fidp->vnode-2)->fileType;
+
+        lock_ObtainMutex(&cm_Freelance_Lock);
+        scp->length.LowPart = strlen(mp)+4;
+        scp->mountPointStringp=malloc(strlen(mp)+1);
+        strcpy(scp->mountPointStringp,mp);
+        lock_ReleaseMutex(&cm_Freelance_Lock);
+
+        scp->owner=0x0;
+        scp->unixModeBits=0x1ff;
+        scp->clientModTime=FakeFreelanceModTime;
+        scp->serverModTime=FakeFreelanceModTime;
+        scp->parentUnique = 0x1;
+        scp->parentVnode=0x1;
+        scp->group=0;
+        scp->dataVersion=0x8;
+        *outScpp = scp;
+        lock_ReleaseWrite(&cm_scacheLock);
+        /*afsi_log("   getscache done");*/
+        return 0;
+    }
+    // end of yj code
 #endif /* AFS_FREELANCE_CLIENT */
 
     /* otherwise, we need to find the volume */
-       if (!cm_freelanceEnabled || !isRoot) {
+    if (!cm_freelanceEnabled || !isRoot) {
         lock_ReleaseWrite(&cm_scacheLock);     /* for perf. reasons */
         cellp = cm_FindCellByID(fidp->cell);
         if (!cellp) 
@@ -364,56 +364,56 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
         if (code) 
             return code;
         lock_ObtainWrite(&cm_scacheLock);
-       }
+    }
         
-        /* otherwise, we have the volume, now reverify that the scp doesn't
-         * exist, and proceed.
-         */
-       for(scp=cm_hashTablep[hash]; scp; scp=scp->nextp) {
-               if (cm_FidCmp(fidp, &scp->fid) == 0) {
-                       scp->refCount++;
+    /* otherwise, we have the volume, now reverify that the scp doesn't
+     * exist, and proceed.
+     */
+    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);
             if (volp)
-            cm_PutVolume(volp);
+                cm_PutVolume(volp);
             *outScpp = scp;
-                       return 0;
+            return 0;
         }
     }
         
     /* now, if we don't have the fid, recycle something */
-       scp = cm_GetNewSCache();
-       osi_assert(!(scp->flags & CM_SCACHEFLAG_INHASH));
-       scp->fid = *fidp;
-       scp->volp = volp;       /* a held reference */
-
-       if (!cm_freelanceEnabled || !isRoot) {
-         /* if this scache entry represents a volume root then we need 
-          * to copy the dotdotFipd from the volume structure where the 
-          * "master" copy is stored (defect 11489)
-          */
-         if(scp->fid.vnode == 1 && scp->fid.unique == 1 && volp->dotdotFidp) {
+    scp = cm_GetNewSCache();
+    osi_assert(!(scp->flags & CM_SCACHEFLAG_INHASH));
+    scp->fid = *fidp;
+    scp->volp = volp;  /* a held reference */
+
+    if (!cm_freelanceEnabled || !isRoot) {
+        /* if this scache entry represents a volume root then we need 
+         * to copy the dotdotFipd from the volume structure where the 
+         * "master" copy is stored (defect 11489)
+         */
+        if (scp->fid.vnode == 1 && scp->fid.unique == 1 && volp->dotdotFidp) {
            if (scp->dotdotFidp == (cm_fid_t *) NULL)
-             scp->dotdotFidp = (cm_fid_t *) malloc(sizeof(cm_fid_t));
+                scp->dotdotFidp = (cm_fid_t *) malloc(sizeof(cm_fid_t));
            *(scp->dotdotFidp) = *volp->dotdotFidp;
-         }
+        }
          
-         if (volp->roID == fidp->volume)
+        if (volp->roID == fidp->volume)
            scp->flags |= (CM_SCACHEFLAG_PURERO | CM_SCACHEFLAG_RO);
-         else if (volp->bkID == fidp->volume)
+        else if (volp->bkID == fidp->volume)
            scp->flags |= CM_SCACHEFLAG_RO;
-       }
-       scp->nextp = cm_hashTablep[hash];
-       cm_hashTablep[hash] = scp;
+    }
+    scp->nextp = cm_hashTablep[hash];
+    cm_hashTablep[hash] = scp;
     scp->flags |= CM_SCACHEFLAG_INHASH;
-       scp->refCount = 1;
-
-       /* XXX - The following fields in the cm_scache are 
-        * uninitialized:
-        *   fileType
-        *   parentVnode
-        *   parentUnique
-        */
+    scp->refCount = 1;
+
+    /* XXX - The following fields in the cm_scache are 
+     * uninitialized:
+     *   fileType
+     *   parentVnode
+     *   parentUnique
+     */
     lock_ReleaseWrite(&cm_scacheLock);
         
     /* now we have a held scache entry; just return it */
@@ -477,278 +477,278 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp,
  * CM_SCACHESYNC_STOREDATA_EXCL and CM_SCACHEFLAG_DATASTORING.
  */
 long cm_SyncOp(cm_scache_t *scp, cm_buf_t *bufp, cm_user_t *up, cm_req_t *reqp,
-       long rights, long flags)
+               long rights, long flags)
 {
-       osi_queueData_t *qdp;
-        long code;
-        cm_buf_t *tbufp;
-        long outRights;
-        int bufLocked;
-
-       /* lookup this first */
-       bufLocked = flags & CM_SCACHESYNC_BUFLOCKED;
-
-       /* some minor assertions */
-       if (flags & (CM_SCACHESYNC_STOREDATA | CM_SCACHESYNC_FETCHDATA
-                       | CM_SCACHESYNC_READ | CM_SCACHESYNC_WRITE
-                       | CM_SCACHESYNC_SETSIZE)) {
-               if (bufp) {
-                       osi_assert(bufp->refCount > 0);
-                       /*
-                       osi_assert(cm_FidCmp(&bufp->fid, &scp->fid) == 0);
-                        */
-               }
-       }
-       else osi_assert(bufp == NULL);
-
-       /* Do the access check.  Now we don't really do the access check
-        * atomically, since the caller doesn't expect the parent dir to be
-        * returned locked, and that is what we'd have to do to prevent a
-        * callback breaking message on the parent due to a setacl call from
-        * being processed while we're running.  So, instead, we check things
-         * here, and if things look fine with the access, we proceed to finish
-        * the rest of this check.  Sort of a hack, but probably good enough.
-         */
+    osi_queueData_t *qdp;
+    long code;
+    cm_buf_t *tbufp;
+    long outRights;
+    int bufLocked;
+
+    /* lookup this first */
+    bufLocked = flags & CM_SCACHESYNC_BUFLOCKED;
+
+    /* some minor assertions */
+    if (flags & (CM_SCACHESYNC_STOREDATA | CM_SCACHESYNC_FETCHDATA
+                  | CM_SCACHESYNC_READ | CM_SCACHESYNC_WRITE
+                  | CM_SCACHESYNC_SETSIZE)) {
+        if (bufp) {
+            osi_assert(bufp->refCount > 0);
+            /*
+               osi_assert(cm_FidCmp(&bufp->fid, &scp->fid) == 0);
+             */
+        }
+    }
+    else osi_assert(bufp == NULL);
+
+    /* Do the access check.  Now we don't really do the access check
+     * atomically, since the caller doesn't expect the parent dir to be
+     * returned locked, and that is what we'd have to do to prevent a
+     * callback breaking message on the parent due to a setacl call from
+     * being processed while we're running.  So, instead, we check things
+     * here, and if things look fine with the access, we proceed to finish
+     * the rest of this check.  Sort of a hack, but probably good enough.
+     */
+
+    while (1) {
+        if (flags & CM_SCACHESYNC_FETCHSTATUS) {
+            /* if we're bringing in a new status block, ensure that
+             * we aren't already doing so, and that no one is
+             * changing the status concurrently, either.  We need
+             * to do this, even if the status is of a different
+             * type, since we don't have the ability to figure out,
+             * in the AFS 3 protocols, which status-changing
+             * operation ran first, or even which order a read and
+             * a write occurred in.
+             */
+            if (scp->flags & (CM_SCACHEFLAG_FETCHING | CM_SCACHEFLAG_STORING
+                               | CM_SCACHEFLAG_SIZESTORING | CM_SCACHEFLAG_GETCALLBACK))
+                goto sleep;
+        }
+        if (flags & (CM_SCACHESYNC_STORESIZE | CM_SCACHESYNC_STORESTATUS
+                      | CM_SCACHESYNC_SETSIZE | CM_SCACHESYNC_GETCALLBACK)) {
+            /* if we're going to make an RPC to change the status, make sure
+             * that no one is bringing in or sending out the status.
+             */
+            if (scp->flags & (CM_SCACHEFLAG_FETCHING | CM_SCACHEFLAG_STORING
+                               | CM_SCACHEFLAG_SIZESTORING | CM_SCACHEFLAG_GETCALLBACK))
+                goto sleep;
+            if (scp->bufReadsp || scp->bufWritesp) goto sleep;
+        }
+        if (flags & CM_SCACHESYNC_FETCHDATA) {
+            /* if we're bringing in a new chunk of data, make sure that
+             * nothing is happening to that chunk, and that we aren't
+             * changing the basic file status info, either.
+             */
+            if (scp->flags & (CM_SCACHEFLAG_FETCHING | CM_SCACHEFLAG_STORING
+                               | CM_SCACHEFLAG_SIZESTORING | CM_SCACHEFLAG_GETCALLBACK))
+                goto sleep;
+            if (bufp && (bufp->cmFlags & (CM_BUF_CMFETCHING | CM_BUF_CMSTORING)))
+                goto sleep;
+        }
+        if (flags & CM_SCACHESYNC_STOREDATA) {
+            /* same as fetch data */
+            if (scp->flags & (CM_SCACHEFLAG_FETCHING | CM_SCACHEFLAG_STORING
+                               | CM_SCACHEFLAG_SIZESTORING | CM_SCACHEFLAG_GETCALLBACK))
+                goto sleep;
+            if (bufp && (bufp->cmFlags & (CM_BUF_CMFETCHING | CM_BUF_CMSTORING)))
+                goto sleep;
+        }
 
-       while (1) {
-               if (flags & CM_SCACHESYNC_FETCHSTATUS) {
-                       /* if we're bringing in a new status block, ensure that
-                        * we aren't already doing so, and that no one is
-                        * changing the status concurrently, either.  We need
-                        * to do this, even if the status is of a different
-                         * type, since we don't have the ability to figure out,
-                        * in the AFS 3 protocols, which status-changing
-                        * operation ran first, or even which order a read and
-                        * a write occurred in.
-                         */
-                       if (scp->flags & (CM_SCACHEFLAG_FETCHING | CM_SCACHEFLAG_STORING
-                                         | CM_SCACHEFLAG_SIZESTORING | CM_SCACHEFLAG_GETCALLBACK))
-                               goto sleep;
-                }
-                if (flags & (CM_SCACHESYNC_STORESIZE | CM_SCACHESYNC_STORESTATUS
-                               | CM_SCACHESYNC_SETSIZE | CM_SCACHESYNC_GETCALLBACK)) {
-                       /* if we're going to make an RPC to change the status, make sure
-                         * that no one is bringing in or sending out the status.
-                         */
-                       if (scp->flags & (CM_SCACHEFLAG_FETCHING | CM_SCACHEFLAG_STORING
-                                         | CM_SCACHEFLAG_SIZESTORING | CM_SCACHEFLAG_GETCALLBACK))
-                               goto sleep;
-                       if (scp->bufReadsp || scp->bufWritesp) goto sleep;
-                }
-                if (flags & CM_SCACHESYNC_FETCHDATA) {
-                       /* if we're bringing in a new chunk of data, make sure that
-                         * nothing is happening to that chunk, and that we aren't
-                         * changing the basic file status info, either.
-                         */
-                       if (scp->flags & (CM_SCACHEFLAG_FETCHING | CM_SCACHEFLAG_STORING
-                                         | CM_SCACHEFLAG_SIZESTORING | CM_SCACHEFLAG_GETCALLBACK))
-                               goto sleep;
-                        if (bufp && (bufp->cmFlags & (CM_BUF_CMFETCHING | CM_BUF_CMSTORING)))
-                               goto sleep;
-                }
-                if (flags & CM_SCACHESYNC_STOREDATA) {
-                       /* same as fetch data */
-                       if (scp->flags & (CM_SCACHEFLAG_FETCHING | CM_SCACHEFLAG_STORING
-                                         | CM_SCACHEFLAG_SIZESTORING | CM_SCACHEFLAG_GETCALLBACK))
-                               goto sleep;
-                        if (bufp && (bufp->cmFlags & (CM_BUF_CMFETCHING | CM_BUF_CMSTORING)))
-                               goto sleep;
-                }
+        if (flags & CM_SCACHESYNC_STOREDATA_EXCL) {
+            /* Don't allow concurrent StoreData RPC's */
+            if (scp->flags & CM_SCACHEFLAG_DATASTORING)
+                goto sleep;
+        }
 
-               if (flags & CM_SCACHESYNC_STOREDATA_EXCL) {
-                       /* Don't allow concurrent StoreData RPC's */
-                       if (scp->flags & CM_SCACHEFLAG_DATASTORING)
-                               goto sleep;
-               }
-
-               if (flags & CM_SCACHESYNC_ASYNCSTORE) {
-                       /* Don't allow more than one BKG store request */
-                       if (scp->flags & CM_SCACHEFLAG_ASYNCSTORING)
-                               goto sleep;
-               }
-
-               if (flags & CM_SCACHESYNC_LOCK) {
-                       /* Don't allow concurrent fiddling with lock lists */
-                       if (scp->flags & CM_SCACHEFLAG_LOCKING)
-                               goto sleep;
-               }
-
-                /* now the operations that don't correspond to making RPCs */
-                if (flags & CM_SCACHESYNC_GETSTATUS) {
-                       /* we can use the status that's here, if we're not
-                        * bringing in new status.
-                         */
-                       if (scp->flags & (CM_SCACHEFLAG_FETCHING))
-                               goto sleep;
-                }
-               if (flags & CM_SCACHESYNC_SETSTATUS) {
-                       /* we can make a change to the local status, as long as
-                        * the status isn't changing now.
-                        *
-                         * If we're fetching or storing a chunk of data, we can
-                        * change the status locally, since the fetch/store
-                        * operations don't change any of the data that we're
-                        * changing here.
-                         */
-                       if (scp->flags & (CM_SCACHEFLAG_FETCHING | CM_SCACHEFLAG_STORING
-                                         | CM_SCACHEFLAG_SIZESTORING))
-                               goto sleep;
-                }
-                if (flags & CM_SCACHESYNC_READ) {
-                       /* we're going to read the data, make sure that the
-                        * status is available, and that the data is here.  It
-                        * is OK to read while storing the data back.
-                         */
-                       if (scp->flags & CM_SCACHEFLAG_FETCHING)
-                               goto sleep;
-                        if (bufp && ((bufp->cmFlags
-                                        & (CM_BUF_CMFETCHING
-                                            | CM_BUF_CMFULLYFETCHED))
-                                       == CM_BUF_CMFETCHING))
-                               goto sleep;
-                }
-               if (flags & CM_SCACHESYNC_WRITE) {
-                       /* don't write unless the status is stable and the chunk
-                         * is stable.
-                         */
-                       if (scp->flags & (CM_SCACHEFLAG_FETCHING | CM_SCACHEFLAG_STORING
-                                         | CM_SCACHEFLAG_SIZESTORING))
-                               goto sleep;
-                        if (bufp && (bufp->cmFlags & (CM_BUF_CMFETCHING | CM_BUF_CMSTORING)))
-                               goto sleep;
-                }
+        if (flags & CM_SCACHESYNC_ASYNCSTORE) {
+            /* Don't allow more than one BKG store request */
+            if (scp->flags & CM_SCACHEFLAG_ASYNCSTORING)
+                goto sleep;
+        }
+
+        if (flags & CM_SCACHESYNC_LOCK) {
+            /* Don't allow concurrent fiddling with lock lists */
+            if (scp->flags & CM_SCACHEFLAG_LOCKING)
+                goto sleep;
+        }
 
-               // yj: modified this so that callback only checked if we're
-               // not checking something on /afs
+        /* now the operations that don't correspond to making RPCs */
+        if (flags & CM_SCACHESYNC_GETSTATUS) {
+            /* we can use the status that's here, if we're not
+             * bringing in new status.
+             */
+            if (scp->flags & (CM_SCACHEFLAG_FETCHING))
+                goto sleep;
+        }
+        if (flags & CM_SCACHESYNC_SETSTATUS) {
+            /* we can make a change to the local status, as long as
+             * the status isn't changing now.
+             *
+             * If we're fetching or storing a chunk of data, we can
+             * change the status locally, since the fetch/store
+             * operations don't change any of the data that we're
+             * changing here.
+             */
+            if (scp->flags & (CM_SCACHEFLAG_FETCHING | CM_SCACHEFLAG_STORING
+                               | CM_SCACHEFLAG_SIZESTORING))
+                goto sleep;
+        }
+        if (flags & CM_SCACHESYNC_READ) {
+            /* we're going to read the data, make sure that the
+             * status is available, and that the data is here.  It
+             * is OK to read while storing the data back.
+             */
+            if (scp->flags & CM_SCACHEFLAG_FETCHING)
+                goto sleep;
+            if (bufp && ((bufp->cmFlags
+                           & (CM_BUF_CMFETCHING
+                               | CM_BUF_CMFULLYFETCHED))
+                          == CM_BUF_CMFETCHING))
+                goto sleep;
+        }
+        if (flags & CM_SCACHESYNC_WRITE) {
+            /* don't write unless the status is stable and the chunk
+             * is stable.
+             */
+            if (scp->flags & (CM_SCACHEFLAG_FETCHING | CM_SCACHEFLAG_STORING
+                               | CM_SCACHEFLAG_SIZESTORING))
+                goto sleep;
+            if (bufp && (bufp->cmFlags & (CM_BUF_CMFETCHING | CM_BUF_CMSTORING)))
+                goto sleep;
+        }
+
+        // yj: modified this so that callback only checked if we're
+        // not checking something on /afs
         /* fix the conditional to match the one in cm_HaveCallback */
-               if (  (flags & CM_SCACHESYNC_NEEDCALLBACK)
+        if (  (flags & CM_SCACHESYNC_NEEDCALLBACK)
 #ifdef AFS_FREELANCE_CLIENT
              && (!cm_freelanceEnabled || 
                   !(scp->fid.vnode==0x1 && scp->fid.unique==0x1) ||
                   scp->fid.cell!=AFS_FAKE_ROOT_CELL_ID ||
                   scp->fid.volume!=AFS_FAKE_ROOT_VOL_ID ||
-                                 cm_fakeDirCallback < 2)
+                  cm_fakeDirCallback < 2)
 #endif /* AFS_FREELANCE_CLIENT */
-                   ) {
-                       if (!cm_HaveCallback(scp)) {
-                               osi_Log1(afsd_logp, "CM SyncOp getting callback on scp %x",
-                                       (long) scp);
-                               if (bufLocked) lock_ReleaseMutex(&bufp->mx);
-                               code = cm_GetCallback(scp, up, reqp, 0);
-                                if (bufLocked) {
-                                       lock_ReleaseMutex(&scp->mx);
-                                        lock_ObtainMutex(&bufp->mx);
-                                        lock_ObtainMutex(&scp->mx);
-                                }
-                                if (code) return code;
-                               continue;
-                        }
+             ) {
+            if (!cm_HaveCallback(scp)) {
+                osi_Log1(afsd_logp, "CM SyncOp getting callback on scp %x",
+                          (long) scp);
+                if (bufLocked) lock_ReleaseMutex(&bufp->mx);
+                code = cm_GetCallback(scp, up, reqp, 0);
+                if (bufLocked) {
+                    lock_ReleaseMutex(&scp->mx);
+                    lock_ObtainMutex(&bufp->mx);
+                    lock_ObtainMutex(&scp->mx);
                 }
-                
-               if (rights) {
-                       /* can't check access rights without a callback */
-                       osi_assert(flags & CM_SCACHESYNC_NEEDCALLBACK);
-
-                       if ((rights & PRSFS_WRITE) && (scp->flags & CM_SCACHEFLAG_RO))
-                               return CM_ERROR_READONLY;
-
-                       if (cm_HaveAccessRights(scp, up, rights, &outRights)) {
-                               if (~outRights & rights) return CM_ERROR_NOACCESS;
-                        }
-                        else {
-                               /* we don't know the required access rights */
-                               if (bufLocked) lock_ReleaseMutex(&bufp->mx);
-                                code = cm_GetAccessRights(scp, up, reqp);
-                                if (code) return code;
-                                if (bufLocked) {
-                                       lock_ReleaseMutex(&scp->mx);
-                                        lock_ObtainMutex(&bufp->mx);
-                                        lock_ObtainMutex(&scp->mx);
-                                }
-                                continue;
-                        }
+                if (code) return code;
+                continue;
+            }
+        }
+
+        if (rights) {
+            /* can't check access rights without a callback */
+            osi_assert(flags & CM_SCACHESYNC_NEEDCALLBACK);
+
+            if ((rights & PRSFS_WRITE) && (scp->flags & CM_SCACHEFLAG_RO))
+                return CM_ERROR_READONLY;
+
+            if (cm_HaveAccessRights(scp, up, rights, &outRights)) {
+                if (~outRights & rights) return CM_ERROR_NOACCESS;
+            }
+            else {
+                /* we don't know the required access rights */
+                if (bufLocked) lock_ReleaseMutex(&bufp->mx);
+                code = cm_GetAccessRights(scp, up, reqp);
+                if (code) return code;
+                if (bufLocked) {
+                    lock_ReleaseMutex(&scp->mx);
+                    lock_ObtainMutex(&bufp->mx);
+                    lock_ObtainMutex(&scp->mx);
                 }
+                continue;
+            }
+        }
 
-                /* if we get here, we're happy */
-                break;
+        /* if we get here, we're happy */
+        break;
 
-sleep:
-               /* first check if we're not supposed to wait: fail 
-                 * in this case, returning with everything still locked.
-                 */
-               if (flags & CM_SCACHESYNC_NOWAIT) return CM_ERROR_WOULDBLOCK;
+      sleep:
+        /* first check if we're not supposed to wait: fail 
+         * in this case, returning with everything still locked.
+         */
+        if (flags & CM_SCACHESYNC_NOWAIT) return CM_ERROR_WOULDBLOCK;
 
-               /* wait here, then try again */
-               osi_Log1(afsd_logp, "CM SyncOp sleeping scp %x", (long) scp);
+        /* wait here, then try again */
+        osi_Log1(afsd_logp, "CM SyncOp sleeping scp %x", (long) scp);
         if ( scp->flags & CM_SCACHEFLAG_WAITING ) 
             osi_Log1(afsd_logp, "CM SyncOp CM_SCACHEFLAG_WAITING already set for 0x%x", scp);
         else 
             osi_Log1(afsd_logp, "CM SyncOp CM_SCACHEFLAG_WAITING set for 0x%x", scp);
-               scp->flags |= CM_SCACHEFLAG_WAITING;
-               if (bufLocked) lock_ReleaseMutex(&bufp->mx);
+        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);
-        } /* big while loop */
+    } /* big while loop */
         
-        /* now, update the recorded state for RPC-type calls */
-        if (flags & CM_SCACHESYNC_FETCHSTATUS)
-               scp->flags |= CM_SCACHEFLAG_FETCHING;
-       if (flags & CM_SCACHESYNC_STORESTATUS)
-               scp->flags |= CM_SCACHEFLAG_STORING;
-       if (flags & CM_SCACHESYNC_STORESIZE)
-               scp->flags |= CM_SCACHEFLAG_SIZESTORING;
-       if (flags & CM_SCACHESYNC_GETCALLBACK)
-               scp->flags |= CM_SCACHEFLAG_GETCALLBACK;
-       if (flags & CM_SCACHESYNC_STOREDATA_EXCL)
-               scp->flags |= CM_SCACHEFLAG_DATASTORING;
-       if (flags & CM_SCACHESYNC_ASYNCSTORE)
-               scp->flags |= CM_SCACHEFLAG_ASYNCSTORING;
-       if (flags & CM_SCACHESYNC_LOCK)
-               scp->flags |= CM_SCACHEFLAG_LOCKING;
-
-       /* now update the buffer pointer */
-        if (flags & CM_SCACHESYNC_FETCHDATA) {
-               /* ensure that the buffer isn't already in the I/O list */
-               if (bufp) {
-                       for(qdp = scp->bufReadsp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
-                               tbufp = osi_GetQData(qdp);
-                               osi_assert(tbufp != bufp);
-                       }
-               }
-                
-               /* queue a held reference to the buffer in the "reading" I/O list */
-                qdp = osi_QDAlloc();
-                osi_SetQData(qdp, bufp);
-               if (bufp) {
-                       buf_Hold(bufp);
-                       bufp->cmFlags |= CM_BUF_CMFETCHING;
-               }
-                osi_QAdd((osi_queue_t **) &scp->bufReadsp, &qdp->q);
+    /* now, update the recorded state for RPC-type calls */
+    if (flags & CM_SCACHESYNC_FETCHSTATUS)
+        scp->flags |= CM_SCACHEFLAG_FETCHING;
+    if (flags & CM_SCACHESYNC_STORESTATUS)
+        scp->flags |= CM_SCACHEFLAG_STORING;
+    if (flags & CM_SCACHESYNC_STORESIZE)
+        scp->flags |= CM_SCACHEFLAG_SIZESTORING;
+    if (flags & CM_SCACHESYNC_GETCALLBACK)
+        scp->flags |= CM_SCACHEFLAG_GETCALLBACK;
+    if (flags & CM_SCACHESYNC_STOREDATA_EXCL)
+        scp->flags |= CM_SCACHEFLAG_DATASTORING;
+    if (flags & CM_SCACHESYNC_ASYNCSTORE)
+        scp->flags |= CM_SCACHEFLAG_ASYNCSTORING;
+    if (flags & CM_SCACHESYNC_LOCK)
+        scp->flags |= CM_SCACHEFLAG_LOCKING;
+
+    /* now update the buffer pointer */
+    if (flags & CM_SCACHESYNC_FETCHDATA) {
+        /* ensure that the buffer isn't already in the I/O list */
+        if (bufp) {
+            for(qdp = scp->bufReadsp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
+                tbufp = osi_GetQData(qdp);
+                osi_assert(tbufp != bufp);
+            }
         }
 
-        if (flags & CM_SCACHESYNC_STOREDATA) {
-               /* ensure that the buffer isn't already in the I/O list */
-               if (bufp) {
-                       for(qdp = scp->bufWritesp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
-                               tbufp = osi_GetQData(qdp);
-                               osi_assert(tbufp != bufp);
-                       }
-               }
-                
-               /* queue a held reference to the buffer in the "writing" I/O list */
-                qdp = osi_QDAlloc();
-                osi_SetQData(qdp, bufp);
-               if (bufp) {
-                       buf_Hold(bufp);
-                       bufp->cmFlags |= CM_BUF_CMSTORING;
-               }
-                osi_QAdd((osi_queue_t **) &scp->bufWritesp, &qdp->q);
+        /* queue a held reference to the buffer in the "reading" I/O list */
+        qdp = osi_QDAlloc();
+        osi_SetQData(qdp, bufp);
+        if (bufp) {
+            buf_Hold(bufp);
+            bufp->cmFlags |= CM_BUF_CMFETCHING;
         }
-        
-        return 0;
+        osi_QAdd((osi_queue_t **) &scp->bufReadsp, &qdp->q);
+    }
+
+    if (flags & CM_SCACHESYNC_STOREDATA) {
+        /* ensure that the buffer isn't already in the I/O list */
+        if (bufp) {
+            for(qdp = scp->bufWritesp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
+                tbufp = osi_GetQData(qdp);
+                osi_assert(tbufp != bufp);
+            }
+        }
+
+        /* queue a held reference to the buffer in the "writing" I/O list */
+        qdp = osi_QDAlloc();
+        osi_SetQData(qdp, bufp);
+        if (bufp) {
+            buf_Hold(bufp);
+            bufp->cmFlags |= CM_BUF_CMSTORING;
+        }
+        osi_QAdd((osi_queue_t **) &scp->bufWritesp, &qdp->q);
+    }
+
+    return 0;
 }
 
 /* for those syncops that setup for RPCs.
@@ -756,67 +756,67 @@ sleep:
  */
 void cm_SyncOpDone(cm_scache_t *scp, cm_buf_t *bufp, long flags)
 {
-       osi_queueData_t *qdp;
-       cm_buf_t *tbufp;
-
-        /* now, update the recorded state for RPC-type calls */
-        if (flags & CM_SCACHESYNC_FETCHSTATUS)
-               scp->flags &= ~CM_SCACHEFLAG_FETCHING;
-       if (flags & CM_SCACHESYNC_STORESTATUS)
-               scp->flags &= ~CM_SCACHEFLAG_STORING;
-       if (flags & CM_SCACHESYNC_STORESIZE)
-               scp->flags &= ~CM_SCACHEFLAG_SIZESTORING;
-       if (flags & CM_SCACHESYNC_GETCALLBACK)
-               scp->flags &= ~CM_SCACHEFLAG_GETCALLBACK;
-       if (flags & CM_SCACHESYNC_STOREDATA_EXCL)
-               scp->flags &= ~CM_SCACHEFLAG_DATASTORING;
-       if (flags & CM_SCACHESYNC_ASYNCSTORE)
-               scp->flags &= ~CM_SCACHEFLAG_ASYNCSTORING;
-       if (flags & CM_SCACHESYNC_LOCK)
-               scp->flags &= ~CM_SCACHEFLAG_LOCKING;
-
-       /* now update the buffer pointer */
-        if (flags & CM_SCACHESYNC_FETCHDATA) {
-               /* ensure that the buffer isn't already in the I/O list */
-               for(qdp = scp->bufReadsp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
-                       tbufp = osi_GetQData(qdp);
-                       if (tbufp == bufp) break;
-                }
-                osi_assert(qdp != NULL);
-               osi_assert(osi_GetQData(qdp) == bufp);
-               osi_QRemove((osi_queue_t **) &scp->bufReadsp, &qdp->q);
-                osi_QDFree(qdp);
-               if (bufp) {
-                       bufp->cmFlags &=
-                         ~(CM_BUF_CMFETCHING | CM_BUF_CMFULLYFETCHED);
-                       buf_Release(bufp);
-               }
+    osi_queueData_t *qdp;
+    cm_buf_t *tbufp;
+
+    /* now, update the recorded state for RPC-type calls */
+    if (flags & CM_SCACHESYNC_FETCHSTATUS)
+        scp->flags &= ~CM_SCACHEFLAG_FETCHING;
+    if (flags & CM_SCACHESYNC_STORESTATUS)
+        scp->flags &= ~CM_SCACHEFLAG_STORING;
+    if (flags & CM_SCACHESYNC_STORESIZE)
+        scp->flags &= ~CM_SCACHEFLAG_SIZESTORING;
+    if (flags & CM_SCACHESYNC_GETCALLBACK)
+        scp->flags &= ~CM_SCACHEFLAG_GETCALLBACK;
+    if (flags & CM_SCACHESYNC_STOREDATA_EXCL)
+        scp->flags &= ~CM_SCACHEFLAG_DATASTORING;
+    if (flags & CM_SCACHESYNC_ASYNCSTORE)
+        scp->flags &= ~CM_SCACHEFLAG_ASYNCSTORING;
+    if (flags & CM_SCACHESYNC_LOCK)
+        scp->flags &= ~CM_SCACHEFLAG_LOCKING;
+
+    /* now update the buffer pointer */
+    if (flags & CM_SCACHESYNC_FETCHDATA) {
+        /* ensure that the buffer isn't already in the I/O list */
+        for(qdp = scp->bufReadsp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
+            tbufp = osi_GetQData(qdp);
+            if (tbufp == bufp) break;
+        }
+        osi_assert(qdp != NULL);
+        osi_assert(osi_GetQData(qdp) == bufp);
+        osi_QRemove((osi_queue_t **) &scp->bufReadsp, &qdp->q);
+        osi_QDFree(qdp);
+        if (bufp) {
+            bufp->cmFlags &=
+                ~(CM_BUF_CMFETCHING | CM_BUF_CMFULLYFETCHED);
+            buf_Release(bufp);
         }
+    }
 
-       /* now update the buffer pointer */
-        if (flags & CM_SCACHESYNC_STOREDATA) {
-               /* ensure that the buffer isn't already in the I/O list */
-               for(qdp = scp->bufWritesp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
-                       tbufp = osi_GetQData(qdp);
-                       if (tbufp == bufp) break;
-                }
-                osi_assert(qdp != NULL);
-               osi_assert(osi_GetQData(qdp) == bufp);
-               osi_QRemove((osi_queue_t **) &scp->bufWritesp, &qdp->q);
-                osi_QDFree(qdp);
-               if (bufp) {
-                       bufp->cmFlags &= ~CM_BUF_CMSTORING;
-                       buf_Release(bufp);
-               }
+    /* now update the buffer pointer */
+    if (flags & CM_SCACHESYNC_STOREDATA) {
+        /* ensure that the buffer isn't already in the I/O list */
+        for(qdp = scp->bufWritesp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) {
+            tbufp = osi_GetQData(qdp);
+            if (tbufp == bufp) break;
         }
-        
-        /* and wakeup anyone who is waiting */
-        if (scp->flags & CM_SCACHEFLAG_WAITING) {
-            osi_Log1(afsd_logp, "CM SyncOp CM_SCACHEFLAG_WAITING reset for 0x%x", scp);
-            scp->flags &= ~CM_SCACHEFLAG_WAITING;
-            osi_Wakeup((long) &scp->flags);
+        osi_assert(qdp != NULL);
+        osi_assert(osi_GetQData(qdp) == bufp);
+        osi_QRemove((osi_queue_t **) &scp->bufWritesp, &qdp->q);
+        osi_QDFree(qdp);
+        if (bufp) {
+            bufp->cmFlags &= ~CM_BUF_CMSTORING;
+            buf_Release(bufp);
         }
-}
+    }
+
+    /* and wakeup anyone who is waiting */
+    if (scp->flags & CM_SCACHEFLAG_WAITING) {
+        osi_Log1(afsd_logp, "CM SyncOp CM_SCACHEFLAG_WAITING reset for 0x%x", scp);
+        scp->flags &= ~CM_SCACHEFLAG_WAITING;
+        osi_Wakeup((long) &scp->flags);
+    }
+}       
 
 /* merge in a response from an RPC.  The scp must be locked, and the callback
  * is optional.
@@ -832,123 +832,123 @@ void cm_SyncOpDone(cm_scache_t *scp, cm_buf_t *bufp, long flags)
  * started before that, can cause old info to be merged from the first call.
  */
 void cm_MergeStatus(cm_scache_t *scp, AFSFetchStatus *statusp, AFSVolSync *volp,
-       cm_user_t *userp, int flags)
+                    cm_user_t *userp, int flags)
 {
-       // yj: i want to create some fake status for the /afs directory and the
-       // entries under that directory
+    // yj: i want to create some fake status for the /afs directory and the
+    // 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;
+    if (cm_freelanceEnabled && scp == cm_rootSCachep) {
+        osi_Log0(afsd_logp,"cm_MergeStatus Freelance cm_rootSCachep");
+        statusp->InterfaceVersion = 0x1;
         statusp->FileType = CM_SCACHETYPE_DIRECTORY;
-               statusp->LinkCount = scp->linkCount;
-               statusp->Length = cm_fakeDirSize;
-               statusp->DataVersion = cm_fakeDirVersion;
-               statusp->Author = 0x1;
-               statusp->Owner = 0x0;
-               statusp->CallerAccess = 0x9;
-               statusp->AnonymousAccess = 0x9;
-               statusp->UnixModeBits = 0x1ff;
-               statusp->ParentVnode = 0x1;
-               statusp->ParentUnique = 0x1;
-               statusp->ResidencyMask = 0;
-               statusp->ClientModTime = FakeFreelanceModTime;
-               statusp->ServerModTime = FakeFreelanceModTime;
-               statusp->Group = 0;
-               statusp->SyncCounter = 0;
-               statusp->dataVersionHigh = 0;
-       }
+        statusp->LinkCount = scp->linkCount;
+        statusp->Length = cm_fakeDirSize;
+        statusp->DataVersion = cm_fakeDirVersion;
+        statusp->Author = 0x1;
+        statusp->Owner = 0x0;
+        statusp->CallerAccess = 0x9;
+        statusp->AnonymousAccess = 0x9;
+        statusp->UnixModeBits = 0x1ff;
+        statusp->ParentVnode = 0x1;
+        statusp->ParentUnique = 0x1;
+        statusp->ResidencyMask = 0;
+        statusp->ClientModTime = FakeFreelanceModTime;
+        statusp->ServerModTime = FakeFreelanceModTime;
+        statusp->Group = 0;
+        statusp->SyncCounter = 0;
+        statusp->dataVersionHigh = 0;
+    }
 #endif /* AFS_FREELANCE_CLIENT */
 
-       if (!(flags & CM_MERGEFLAG_FORCE)
-                       && statusp->DataVersion < (unsigned long) scp->dataVersion) {
-               struct cm_cell *cellp;
-               struct cm_volume *volp;
-
-               cellp = cm_FindCellByID(scp->fid.cell);
-               cm_GetVolumeByID(cellp, scp->fid.volume, userp,
-                                (cm_req_t *) NULL, &volp);
-               if (scp->cbServerp)
-                       osi_Log2(afsd_logp, "old data from server %x volume %s",
-                                scp->cbServerp->addr.sin_addr.s_addr,
-                                volp->namep);
-               osi_Log3(afsd_logp, "Bad merge, scp %x, scp dv %d, RPC dv %d",
-                        scp, scp->dataVersion, statusp->DataVersion);
-               /* we have a number of data fetch/store operations running
-                * concurrently, and we can tell which one executed last at the
-                * server by its mtime.
-                * Choose the one with the largest mtime, and ignore the rest.
-                *
-                * These concurrent calls are incompatible with setting the
-                * mtime, so we won't have a locally changed mtime here.
-                 *
-                 * We could also have ACL info for a different user than usual,
-                * in which case we have to do that part of the merge, anyway.
-                * We won't have to worry about the info being old, since we
-                * won't have concurrent calls
-                 * that change file status running from this machine.
-                *
-                * Added 3/17/98:  if we see data version regression on an RO
-                * file, it's probably due to a server holding an out-of-date
-                * replica, rather than to concurrent RPC's.  Failures to
-                * release replicas are now flagged by the volserver, but only
-                * since AFS 3.4 5.22, so there are plenty of clients getting
-                * out-of-date replicas out there.
-                *
-                * If we discover an out-of-date replica, by this time it's too
-                * late to go to another server and retry.  Also, we can't
-                * reject the merge, because then there is no way for
-                * GetAccess to do its work, and the caller gets into an
-                * infinite loop.  So we just grin and bear it.
-                */
-               if (!(scp->flags & CM_SCACHEFLAG_RO))
-                       return;
-       }
-        scp->serverModTime = statusp->ServerModTime;
-
-       if (!(scp->mask & CM_SCACHEMASK_CLIENTMODTIME)) {
-               scp->clientModTime = statusp->ClientModTime;
-       }
-        if (!(scp->mask & CM_SCACHEMASK_LENGTH)) {
-               scp->length.LowPart = statusp->Length;
-                scp->length.HighPart = 0;
-       }
-
-       scp->serverLength.LowPart = statusp->Length;
-       scp->serverLength.HighPart = 0;
-
-       scp->linkCount = statusp->LinkCount;
-        scp->dataVersion = statusp->DataVersion;
-        scp->owner = statusp->Owner;
-        scp->group = statusp->Group;
-        scp->unixModeBits = statusp->UnixModeBits & 07777;
-        
-        if (statusp->FileType == File)
-               scp->fileType = CM_SCACHETYPE_FILE;
-       else if (statusp->FileType == Directory)
-               scp->fileType = CM_SCACHETYPE_DIRECTORY;
-       else if (statusp->FileType == SymbolicLink) {
-               if ((scp->unixModeBits & 0111) == 0)
-                       scp->fileType = CM_SCACHETYPE_MOUNTPOINT;
-               else
-                       scp->fileType = CM_SCACHETYPE_SYMLINK;
-        }
+    if (!(flags & CM_MERGEFLAG_FORCE)
+         && statusp->DataVersion < (unsigned long) scp->dataVersion) {
+        struct cm_cell *cellp;
+        struct cm_volume *volp;
+
+        cellp = cm_FindCellByID(scp->fid.cell);
+        cm_GetVolumeByID(cellp, scp->fid.volume, userp,
+                          (cm_req_t *) NULL, &volp);
+        if (scp->cbServerp)
+            osi_Log2(afsd_logp, "old data from server %x volume %s",
+                      scp->cbServerp->addr.sin_addr.s_addr,
+                      volp->namep);
+        osi_Log3(afsd_logp, "Bad merge, scp %x, scp dv %d, RPC dv %d",
+                  scp, scp->dataVersion, statusp->DataVersion);
+        /* we have a number of data fetch/store operations running
+         * concurrently, and we can tell which one executed last at the
+         * server by its mtime.
+         * Choose the one with the largest mtime, and ignore the rest.
+         *
+         * These concurrent calls are incompatible with setting the
+         * mtime, so we won't have a locally changed mtime here.
+         *
+         * We could also have ACL info for a different user than usual,
+         * in which case we have to do that part of the merge, anyway.
+         * We won't have to worry about the info being old, since we
+         * won't have concurrent calls
+         * that change file status running from this machine.
+         *
+         * Added 3/17/98:  if we see data version regression on an RO
+         * file, it's probably due to a server holding an out-of-date
+         * replica, rather than to concurrent RPC's.  Failures to
+         * release replicas are now flagged by the volserver, but only
+         * since AFS 3.4 5.22, so there are plenty of clients getting
+         * out-of-date replicas out there.
+         *
+         * If we discover an out-of-date replica, by this time it's too
+         * late to go to another server and retry.  Also, we can't
+         * reject the merge, because then there is no way for
+         * GetAccess to do its work, and the caller gets into an
+         * infinite loop.  So we just grin and bear it.
+         */
+        if (!(scp->flags & CM_SCACHEFLAG_RO))
+            return;
+    }       
+    scp->serverModTime = statusp->ServerModTime;
+
+    if (!(scp->mask & CM_SCACHEMASK_CLIENTMODTIME)) {
+        scp->clientModTime = statusp->ClientModTime;
+    }
+    if (!(scp->mask & CM_SCACHEMASK_LENGTH)) {
+        scp->length.LowPart = statusp->Length;
+        scp->length.HighPart = 0;
+    }
+
+    scp->serverLength.LowPart = statusp->Length;
+    scp->serverLength.HighPart = 0;
+
+    scp->linkCount = statusp->LinkCount;
+    scp->dataVersion = statusp->DataVersion;
+    scp->owner = statusp->Owner;
+    scp->group = statusp->Group;
+    scp->unixModeBits = statusp->UnixModeBits & 07777;
+
+    if (statusp->FileType == File)
+        scp->fileType = CM_SCACHETYPE_FILE;
+    else if (statusp->FileType == Directory)
+        scp->fileType = CM_SCACHETYPE_DIRECTORY;
+    else if (statusp->FileType == SymbolicLink) {
+        if ((scp->unixModeBits & 0111) == 0)
+            scp->fileType = CM_SCACHETYPE_MOUNTPOINT;
+        else
+            scp->fileType = CM_SCACHETYPE_SYMLINK;
+    }       
     else {
         osi_Log1(afsd_logp, "Merge, Invalid File Type, scp %x", scp);
         scp->fileType = 0;     /* invalid */
     }
-        /* and other stuff */
-        scp->parentVnode = statusp->ParentVnode;
-        scp->parentUnique = statusp->ParentUnique;
+    /* and other stuff */
+    scp->parentVnode = statusp->ParentVnode;
+    scp->parentUnique = statusp->ParentUnique;
         
-        /* and merge in the private acl cache info, if this is more than the public
-         * info; merge in the public stuff in any case.
-         */
-       scp->anyAccess = statusp->AnonymousAccess;
+    /* and merge in the private acl cache info, if this is more than the public
+     * info; merge in the public stuff in any case.
+     */
+    scp->anyAccess = statusp->AnonymousAccess;
 
-        if (userp != NULL) {
-               cm_AddACLCache(scp, userp, statusp->CallerAccess);
-        }
+    if (userp != NULL) {
+        cm_AddACLCache(scp, userp, statusp->CallerAccess);
+    }
 }
 
 /* note that our stat cache info is incorrect, so force us eventually
@@ -961,60 +961,58 @@ void cm_MergeStatus(cm_scache_t *scp, AFSFetchStatus *statusp, AFSVolSync *volp,
  */
 void cm_DiscardSCache(cm_scache_t *scp)
 {
-       lock_AssertMutex(&scp->mx);
+    lock_AssertMutex(&scp->mx);
     if (scp->cbServerp) {
         cm_PutServer(scp->cbServerp);
        scp->cbServerp = NULL;
     }
-        scp->cbExpires = 0;
-       cm_dnlcPurgedp(scp);
-        cm_FreeAllACLEnts(scp);
+    scp->cbExpires = 0;
+    cm_dnlcPurgedp(scp);
+    cm_FreeAllACLEnts(scp);
 }
 
 void cm_AFSFidFromFid(AFSFid *afsFidp, cm_fid_t *fidp)
 {
-       afsFidp->Volume = fidp->volume;
-        afsFidp->Vnode = fidp->vnode;
-        afsFidp->Unique = fidp->unique;
-}
+    afsFidp->Volume = fidp->volume;
+    afsFidp->Vnode = fidp->vnode;
+    afsFidp->Unique = fidp->unique;
+}       
 
 void cm_HoldSCache(cm_scache_t *scp)
 {
-       lock_ObtainWrite(&cm_scacheLock);
-       osi_assert(scp->refCount > 0);
-       scp->refCount++;
-       lock_ReleaseWrite(&cm_scacheLock);
+    lock_ObtainWrite(&cm_scacheLock);
+    osi_assert(scp->refCount > 0);
+    scp->refCount++;
+    lock_ReleaseWrite(&cm_scacheLock);
 }
 
 void cm_ReleaseSCache(cm_scache_t *scp)
 {
-       lock_ObtainWrite(&cm_scacheLock);
-       osi_assert(scp->refCount-- > 0);
-       lock_ReleaseWrite(&cm_scacheLock);
+    lock_ObtainWrite(&cm_scacheLock);
+    osi_assert(scp->refCount-- > 0);
+    lock_ReleaseWrite(&cm_scacheLock);
 }
 
 /* just look for the scp entry to get filetype */
 /* doesn't need to be perfectly accurate, so locking doesn't matter too much */
 int cm_FindFileType(cm_fid_t *fidp)
 {
-        long hash;
-        cm_scache_t *scp;
+    long hash;
+    cm_scache_t *scp;
         
-        hash = CM_SCACHE_HASH(fidp);
+    hash = CM_SCACHE_HASH(fidp);
         
-        osi_assert(fidp->cell != 0);
+    osi_assert(fidp->cell != 0);
 
-        lock_ObtainWrite(&cm_scacheLock);
-        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);
-                  return scp->fileType;
-                }
+    lock_ObtainWrite(&cm_scacheLock);
+    for (scp=cm_hashTablep[hash]; scp; scp=scp->nextp) {
+        if (cm_FidCmp(fidp, &scp->fid) == 0) {
+            lock_ReleaseWrite(&cm_scacheLock);
+            return scp->fileType;
         }
-        lock_ReleaseWrite(&cm_scacheLock);
-        return 0;
+    }
+    lock_ReleaseWrite(&cm_scacheLock);
+    return 0;
 }
 
 /* dump all scp's that have reference count > 0 to a file. 
index 18b3450332479e5587cb54477cf2b965b5a8e344..3cf2bf33c1508cc42d5ce265248de3b5fcc077ce 100644 (file)
@@ -24,7 +24,7 @@ typedef struct cm_fid {
 typedef struct cm_accessCache {
        osi_queue_t q;                  /* queue header */
         struct cm_user *userp;         /* user having access rights */
-        long rights;                   /* rights */
+        unsigned long rights;          /* rights */
 } cm_accessCache_t;
 
 typedef struct cm_file_lock {
@@ -50,7 +50,7 @@ typedef struct cm_scache {
        osi_queue_t q;                  /* lru queue; cm_scacheLock */
        struct cm_scache *nextp;        /* next in hash; cm_scacheLock */
        cm_fid_t fid;
-        long flags;                    /* flags; locked by mx */
+        unsigned long flags;           /* flags; locked by mx */
 
        /* synchronization stuff */
         osi_mutex_t mx;                        /* mutex for this structure */
@@ -67,17 +67,17 @@ typedef struct cm_scache {
         long parentUnique;             /* for ACL callbacks */
 
        /* local modification stat */
-        long mask;                     /* for clientModTime, length and
+        unsigned long mask;            /* for clientModTime, length and
                                         * truncPos */
 
        /* file status */
-       int fileType;                   /* file type */
+       unsigned int fileType;                  /* file type */
        time_t clientModTime;   /* mtime */
         time_t serverModTime;  /* at server, for concurrent call
                                         * comparisons */
         osi_hyper_t length;            /* file length */
        cm_prefetch_t prefetch;         /* prefetch info structure */
-        int unixModeBits;              /* unix protection mode bits */
+        unsigned int unixModeBits;     /* unix protection mode bits */
         int linkCount;                 /* link count */
         long dataVersion;              /* data version */
         long owner;                    /* file owner */
@@ -118,7 +118,7 @@ typedef struct cm_scache {
         osi_hyper_t bulkStatProgress;  /* track bulk stats of large dirs */
 
         /* open state */
-        short openReads;               /* opens for reading */
+        short openReads;               /* open for reading */
         short openWrites;              /* open for writing */
         short openShares;              /* open for read excl */
         short openExcls;               /* open for exclusives */
index 5397dcbdd699dd9a1116eb2aaaad59a6d5cad5c0..0455b40f75b8042f5078984c184a0c02e9a9731f 100644 (file)
@@ -427,6 +427,9 @@ long cm_CheckNTDelete(cm_scache_t *dscp, cm_scache_t *scp, cm_user_t *userp,
  * Iterate through all entries in a directory.
  * When the function funcp is called, the buffer is locked but the
  * directory vnode is not.
+ *
+ * If the retscp parameter is not NULL, the parmp must be a 
+ * cm_lookupSearch_t object.  
  */
 long cm_ApplyDir(cm_scache_t *scp, cm_DirFuncp_t funcp, void *parmp,
                   osi_hyper_t *startOffsetp, cm_user_t *userp, cm_req_t *reqp,
@@ -465,17 +468,26 @@ long cm_ApplyDir(cm_scache_t *scp, cm_DirFuncp_t funcp, void *parmp,
     if (retscp)                        /* if this is a lookup call */
     {
         cm_lookupSearch_t*     sp = parmp;
-        int casefold = sp->caseFold;
-
-        sp->caseFold = 0; /* we have a strong preference for exact matches */
-        if ( *retscp = cm_dnlcLookup(scp, sp)) /* dnlc hit */
-        {
-            sp->caseFold = casefold;
-            lock_ReleaseMutex(&scp->mx);
-            return 0;
-        }
 
-        sp->caseFold = casefold;
+#ifdef AFS_FREELANCE_CLIENT
+       /* Freelance entries never end up in the DNLC because they
+        * do not have an associated cm_server_t
+        */
+    if ( !(cm_freelanceEnabled &&
+                       sp->fid.cell==AFS_FAKE_ROOT_CELL_ID &&
+                       sp->fid.volume==AFS_FAKE_ROOT_VOL_ID ) )
+#endif /* AFS_FREELANCE_CLIENT */
+               {
+               int casefold = sp->caseFold;
+                       sp->caseFold = 0; /* we have a strong preference for exact matches */
+                       if ( *retscp = cm_dnlcLookup(scp, sp))  /* dnlc hit */
+                       {
+                               sp->caseFold = casefold;
+                               lock_ReleaseMutex(&scp->mx);
+                               return 0;
+                       }
+               sp->caseFold = casefold;
+               }
     }  
 
     /*
@@ -787,7 +799,8 @@ long cm_ReadMountPoint(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
         }
     }
     /* locked, has callback, has valid data in buffer */
-    if ((tlen = scp->length.LowPart) > 1000) return CM_ERROR_TOOBIG;
+    if ((tlen = scp->length.LowPart) > 1000) 
+        return CM_ERROR_TOOBIG;
     if (tlen <= 0) {
         code = CM_ERROR_INVAL;
         goto done;
@@ -1096,6 +1109,13 @@ long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
     int sysNameIndex = 0;
     cm_scache_t *scp = 0;
 
+    if ( stricmp(namep,SMB_IOCTL_FILENAME_NOSLASH) == 0 ) {
+        if (flags & CM_FLAG_CHECKPATH)
+            return CM_ERROR_NOSUCHPATH;
+        else
+            return CM_ERROR_NOSUCHFILE;
+    }
+
     for ( sysNameIndex = 0; sysNameIndex < MAXNUMSYSNAMES; sysNameIndex++) {
         code = cm_ExpandSysName(namep, tname, sizeof(tname), sysNameIndex);
         if (code > 0) {
@@ -1104,10 +1124,10 @@ long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
                 *outpScpp = scp;
                 return 0;
             }
-                       if (scp) {
-                               cm_ReleaseSCache(scp);
-                               scp = 0;
-                       }
+            if (scp) {
+                cm_ReleaseSCache(scp);
+                scp = 0;
+            }
         } else {
             return cm_LookupInternal(dscp, namep, flags, userp, reqp, outpScpp);
         }
@@ -1405,12 +1425,12 @@ long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
                 if (tscp->fileType == CM_SCACHETYPE_SYMLINK) {
                     /* this is a symlink; assemble a new buffer */
                     lock_ReleaseMutex(&tscp->mx);
-                    if (symlinkCount++ >= 16) {
+                    if (symlinkCount++ >= MAX_SYMLINK_COUNT) {
                         cm_ReleaseSCache(tscp);
                         cm_ReleaseSCache(dirScp);
                         if (psp) 
                             cm_FreeSpace(psp);
-                        return CM_ERROR_TOOBIG;
+                        return CM_ERROR_TOO_MANY_SYMLINKS;
                     }
                     if (tc == 0) 
                         restp = "";
@@ -1659,9 +1679,10 @@ void cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp, cm_user_t *userp,
     bb.counter = 0;
     bb.bufOffset = *offsetp;
 
+    lock_ReleaseMutex(&dscp->mx);
     /* first, assemble the file IDs we need to stat */
-    code = cm_ApplyDir(dscp, cm_TryBulkProc, (void *) &bb, offsetp, userp,
-                        reqp, NULL);
+    code = cm_ApplyDir(dscp, cm_TryBulkProc, (void *) &bb, offsetp, userp, reqp, NULL);
+    lock_ObtainMutex(&dscp->mx);
 
     /* if we failed, bail out early */
     if (code && code != CM_ERROR_STOPNOW) return;
@@ -1671,7 +1692,7 @@ void cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp, cm_user_t *userp,
      * time.
      */
     filex = 0;
-    while(filex < bb.counter) {
+    while (filex < bb.counter) {
         filesThisCall = bb.counter - filex;
         if (filesThisCall > AFSCBMAX) filesThisCall = AFSCBMAX;
 
index 9f2a7a641a13cdd6fe8db40fb2323799e3ffa044..fc5a5e57c6a3dc3318634229f067945239cdd242 100644 (file)
@@ -154,4 +154,5 @@ extern void cm_CheckLocks();
 
 extern long cm_RetryLock(cm_file_lock_t *oldFileLock, int vcp_is_dead);
 
+#define MAX_SYMLINK_COUNT 16
 #endif /*  __CM_VNODEOPS_H_ENV__ */
index fb3e1aefd51c4d1d617447ad623958b2aa4271f2..ebea271a77f8a17e42fefecfb547b3a353ac230c 100644 (file)
@@ -387,10 +387,21 @@ unsigned int smb_Attributes(cm_scache_t *scp)
 {
     unsigned int attrs;
 
-    if (scp->fileType == CM_SCACHETYPE_DIRECTORY
-         || scp->fileType == CM_SCACHETYPE_MOUNTPOINT)
+    if ( scp->fileType == CM_SCACHETYPE_DIRECTORY ||
+         scp->fileType == CM_SCACHETYPE_MOUNTPOINT) 
+    {
         attrs = SMB_ATTR_DIRECTORY;
-    else
+#ifdef SPECIAL_FOLDERS
+#ifdef AFS_FREELANCE_CLIENT
+        if ( cm_freelanceEnabled &&
+             scp->fid.cell==AFS_FAKE_ROOT_CELL_ID && 
+             scp->fid.volume==AFS_FAKE_ROOT_VOL_ID &&
+             scp->fid.vnode==0x1 && scp->fid.unique==0x1) {
+            attrs |= SMB_ATTR_SYSTEM;          /* FILE_ATTRIBUTE_SYSTEM */
+        }
+#endif /* AFS_FREELANCE_CLIENT */
+#endif /* SPECIAL_FOLDERS */
+    } else
         attrs = 0;
 
     /*
@@ -1300,7 +1311,7 @@ long smb_FindShareProc(cm_scache_t *scp, cm_dirEntry_t *dep, void *rockp,
 {
     int matchType = 0;
     smb_findShare_rock_t * vrock = (smb_findShare_rock_t *) rockp;
-    if(!strnicmp(dep->name, vrock->shareName, 12)) {
+    if (!strnicmp(dep->name, vrock->shareName, 12)) {
         if(!stricmp(dep->name, vrock->shareName))
             matchType = SMB_FINDSHARE_EXACT_MATCH;
         else
@@ -1464,7 +1475,7 @@ int smb_FindShare(smb_vc_t *vcp, smb_user_t *uidp, char *shareName,
             (uidp? (uidp->unp ? uidp->unp->userp : NULL) : NULL), &req, NULL);
         cm_ReleaseSCache(cm_rootSCachep);
 
-        if(vrock.matchType) {
+        if (vrock.matchType) {
             sprintf(pathName,"/%s/",vrock.match);
             *pathNamep = strdup(strlwr(pathName));
             free(vrock.match);
@@ -1546,11 +1557,11 @@ int smb_FindShareCSCPolicy(char *shareName)
 /* find a dir search structure by cookie value, and return it held.
  * Must be called with smb_globalLock held.
  */
-smb_dirSearch_t *smb_FindDirSearchNL(long cookie)
+smb_dirSearch_t *smb_FindDirSearchNoLock(long cookie)
 {
     smb_dirSearch_t *dsp;
         
-    for(dsp = smb_firstDirSearchp; dsp; dsp = (smb_dirSearch_t *) osi_QNext(&dsp->q)) {
+    for (dsp = smb_firstDirSearchp; dsp; dsp = (smb_dirSearch_t *) osi_QNext(&dsp->q)) {
         if (dsp->cookie == cookie) {
             if (dsp != smb_firstDirSearchp) {
                 /* move to head of LRU queue, too, if we're not already there */
@@ -1562,7 +1573,9 @@ smb_dirSearch_t *smb_FindDirSearchNL(long cookie)
                 if (!smb_lastDirSearchp)
                     smb_lastDirSearchp = (smb_dirSearch_t *) &dsp->q;
             }
+            lock_ObtainMutex(&dsp->mx);
             dsp->refCount++;
+            lock_ReleaseMutex(&dsp->mx);
             break;
         }
     }
@@ -1572,10 +1585,9 @@ smb_dirSearch_t *smb_FindDirSearchNL(long cookie)
 void smb_DeleteDirSearch(smb_dirSearch_t *dsp)
 {
     lock_ObtainWrite(&smb_globalLock);
-    dsp->flags |= SMB_DIRSEARCH_DELETE;
-    lock_ReleaseWrite(&smb_globalLock);
     lock_ObtainMutex(&dsp->mx);
-    if(dsp->scp != NULL) {
+    dsp->flags |= SMB_DIRSEARCH_DELETE;
+    if (dsp->scp != NULL) {
         lock_ObtainMutex(&dsp->scp->mx);
         if (dsp->flags & SMB_DIRSEARCH_BULKST) {
             dsp->flags &= ~SMB_DIRSEARCH_BULKST;
@@ -1585,37 +1597,47 @@ void smb_DeleteDirSearch(smb_dirSearch_t *dsp)
         lock_ReleaseMutex(&dsp->scp->mx);
     }  
     lock_ReleaseMutex(&dsp->mx);
+    lock_ReleaseWrite(&smb_globalLock);
 }               
 
-void smb_ReleaseDirSearch(smb_dirSearch_t *dsp)
+/* Must be called with the smb_globalLock held */
+void smb_ReleaseDirSearchNoLock(smb_dirSearch_t *dsp)
 {
     cm_scache_t *scp;
         
     scp = NULL;
 
-    lock_ObtainWrite(&smb_globalLock);
+    lock_ObtainMutex(&dsp->mx);
     osi_assert(dsp->refCount-- > 0);
     if (dsp->refCount == 0 && (dsp->flags & SMB_DIRSEARCH_DELETE)) {
         if (&dsp->q == (osi_queue_t *) smb_lastDirSearchp)
             smb_lastDirSearchp = (smb_dirSearch_t *) osi_QPrev(&smb_lastDirSearchp->q);
         osi_QRemove((osi_queue_t **) &smb_firstDirSearchp, &dsp->q);
+        lock_ReleaseMutex(&dsp->mx);
         lock_FinalizeMutex(&dsp->mx);
         scp = dsp->scp;
         free(dsp);
+    } else {
+        lock_ReleaseMutex(&dsp->mx);
     }
-    lock_ReleaseWrite(&smb_globalLock);
-
     /* do this now to avoid spurious locking hierarchy creation */
     if (scp) cm_ReleaseSCache(scp);
 }       
 
+void smb_ReleaseDirSearch(smb_dirSearch_t *dsp)
+{
+    lock_ObtainWrite(&smb_globalLock);
+    smb_ReleaseDirSearchNoLock(dsp);
+    lock_ReleaseWrite(&smb_globalLock);
+}       
+
 /* find a dir search structure by cookie value, and return it held */
 smb_dirSearch_t *smb_FindDirSearch(long cookie)
 {
     smb_dirSearch_t *dsp;
 
     lock_ObtainWrite(&smb_globalLock);
-    dsp = smb_FindDirSearchNL(cookie);
+    dsp = smb_FindDirSearchNoLock(cookie);
     lock_ReleaseWrite(&smb_globalLock);
     return dsp;
 }
@@ -1650,15 +1672,14 @@ void smb_GCDirSearches(int isV3)
         }
 
         /* don't do more than this */
-        if (victimCount >= SMB_DIRSEARCH_GCMAX) break;
+        if (victimCount >= SMB_DIRSEARCH_GCMAX) 
+            break;
     }
        
     /* now release them */
-    lock_ReleaseWrite(&smb_globalLock);
-    for(i = 0; i < victimCount; i++) {
-        smb_ReleaseDirSearch(victimsp[i]);
+    for (i = 0; i < victimCount; i++) {
+        smb_ReleaseDirSearchNoLock(victimsp[i]);
     }
-    lock_ObtainWrite(&smb_globalLock);
 }
 
 /* function for allocating a dir search entry.  We need these to remember enough context
@@ -1677,25 +1698,27 @@ smb_dirSearch_t *smb_NewDirSearch(int isV3)
     counter = 0;
 
     /* what's the biggest ID allowed in this version of the protocol */
-    if (isV3) maxAllowed = 65535;
-    else maxAllowed = 255;
+    maxAllowed = isV3 ? 65535 : 255;
 
-    while(1) {
+    while (1) {
         /* twice so we have enough tries to find guys we GC after one pass;
          * 10 extra is just in case I mis-counted.
          */
-        if (++counter > 2*maxAllowed+10) osi_panic("afsd: dir search cookie leak",
-                                                    __FILE__, __LINE__);
+        if (++counter > 2*maxAllowed+10) 
+            osi_panic("afsd: dir search cookie leak", __FILE__, __LINE__);
+
         if (smb_dirSearchCounter > maxAllowed) {       
             smb_dirSearchCounter = 1;
-            smb_GCDirSearches(isV3);   /* GC some (drops global lock) */
+            smb_GCDirSearches(isV3);   /* GC some */
         }      
-        dsp = smb_FindDirSearchNL(smb_dirSearchCounter);
+        dsp = smb_FindDirSearchNoLock(smb_dirSearchCounter);
         if (dsp) {
             /* don't need to watch for refcount zero and deleted, since
             * we haven't dropped the global lock.
             */
+            lock_ObtainMutex(&dsp->mx);
             dsp->refCount--;
+            lock_ReleaseMutex(&dsp->mx);
             ++smb_dirSearchCounter;
             continue;
         }      
@@ -1703,7 +1726,8 @@ smb_dirSearch_t *smb_NewDirSearch(int isV3)
         dsp = malloc(sizeof(*dsp));
         memset(dsp, 0, sizeof(*dsp));
         osi_QAdd((osi_queue_t **) &smb_firstDirSearchp, &dsp->q);
-        if (!smb_lastDirSearchp) smb_lastDirSearchp = (smb_dirSearch_t *) &dsp->q;
+        if (!smb_lastDirSearchp) 
+            smb_lastDirSearchp = (smb_dirSearch_t *) &dsp->q;
         dsp->cookie = smb_dirSearchCounter;
         ++smb_dirSearchCounter;
         dsp->refCount = 1;
@@ -2275,6 +2299,13 @@ void smb_MapNTError(long code, unsigned long *NTStatusp)
     else if (code == CM_ERROR_GSSCONTINUE) {
         NTStatus = 0xC0000016L; /* more processing required */
     }
+    else if (code == CM_ERROR_TOO_MANY_SYMLINKS) {
+#ifdef COMMENT
+        NTStatus = 0xC0000280L; /* reparse point not resolved */
+#else
+        NTStatus = 0xC0000022L; /* Access Denied */
+#endif
+    }
     else {
         NTStatus = 0xC0982001L;        /* SMB non-specific error */
     }
@@ -3402,7 +3433,6 @@ long smb_ReceiveCoreSearchDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *ou
     else {
         spacep = inp->spacep;
         smb_StripLastComponent(spacep->data, NULL, pathp);
-        lock_ReleaseMutex(&dsp->mx);
         code = smb_LookupTIDPath(vcp, ((smb_t *)inp)->tid, &tidPathp);
         if (code) {
             lock_ReleaseMutex(&dsp->mx);
@@ -3413,9 +3443,9 @@ long smb_ReceiveCoreSearchDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *ou
         }
         code = cm_NameI(cm_rootSCachep, spacep->data,
                         caseFold | CM_FLAG_FOLLOW, userp, tidPathp, &req, &scp);
-        lock_ObtainMutex(&dsp->mx);
         if (code == 0) {
-            if (dsp->scp != 0) cm_ReleaseSCache(dsp->scp);
+            if (dsp->scp != 0) 
+                cm_ReleaseSCache(dsp->scp);
             dsp->scp = scp;
             /* we need one hold for the entry we just stored into,
              * and one for our own processing.  When we're done with this
@@ -3520,13 +3550,14 @@ long smb_ReceiveCoreSearchDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *ou
             lock_ObtainRead(&scp->bufCreateLock);
             code = buf_Get(scp, &thyper, &bufferp);
             lock_ReleaseRead(&scp->bufCreateLock);
+            lock_ObtainMutex(&dsp->mx);
 
             /* now, if we're doing a star match, do bulk fetching of all of 
              * the status info for files in the dir.
              */
             if (starPattern) {
-                smb_ApplyDirListPatches(&dirListPatchesp, userp,
-                                         &req);
+                smb_ApplyDirListPatches(&dirListPatchesp, userp, &req);
+                lock_ObtainMutex(&scp->mx);
                 if ((dsp->flags & SMB_DIRSEARCH_BULKST) &&
                      LargeIntegerGreaterThanOrEqualTo(thyper, 
                                                       scp->bulkStatProgress)) {
@@ -3539,11 +3570,13 @@ long smb_ReceiveCoreSearchDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *ou
                     } else
                         cm_TryBulkStat(scp, &thyper, userp, &req);
                 }
+            } else {
+                lock_ObtainMutex(&scp->mx);
             }
-
-            lock_ObtainMutex(&scp->mx);
+            lock_ReleaseMutex(&dsp->mx);
             if (code) 
                 break;
+
             bufferOffset = thyper;
 
             /* now get the data in the cache */
@@ -4917,8 +4950,7 @@ void smb_FullName(cm_scache_t *dscp, cm_scache_t *scp, char *pathp,
     rock.name = pathp;
     rock.vnode = scp;
 
-    code = cm_ApplyDir(dscp, smb_FullNameProc, &rock, NULL, 
-                       userp, reqp, NULL); 
+    code = cm_ApplyDir(dscp, smb_FullNameProc, &rock, NULL, userp, reqp, NULL); 
     if (code == CM_ERROR_STOPNOW)
         *newPathp = rock.fullName;
     else
@@ -6932,6 +6964,7 @@ DWORD smb_ServerExceptionFilter(void) {
     }
 
     afsd_ForceTrace(TRUE);
+    buf_ForceTrace(TRUE);
     return EXCEPTION_CONTINUE_SEARCH;
 }       
 #endif
index 9c8691f64a399de0e62d865841be42d5554d9811..980da2c5a210b170c3b403ae595d6c582fce4b6b 100644 (file)
@@ -72,9 +72,20 @@ unsigned long smb_ExtAttributes(cm_scache_t *scp)
     unsigned long attrs;
 
     if (scp->fileType == CM_SCACHETYPE_DIRECTORY ||
-        scp->fileType == CM_SCACHETYPE_MOUNTPOINT)
+        scp->fileType == CM_SCACHETYPE_MOUNTPOINT) 
+    {
         attrs = SMB_ATTR_DIRECTORY;
-    else
+#ifdef SPECIAL_FOLDERS
+#ifdef AFS_FREELANCE_CLIENT
+        if ( cm_freelanceEnabled &&
+             scp->fid.cell==AFS_FAKE_ROOT_CELL_ID && 
+             scp->fid.volume==AFS_FAKE_ROOT_VOL_ID &&
+             scp->fid.vnode==0x1 && scp->fid.unique==0x1) {
+            attrs |= SMB_ATTR_SYSTEM;          /* FILE_ATTRIBUTE_SYSTEM */
+        }
+#endif /* AFS_FREELANCE_CLIENT */
+#endif /* SPECIAL_FOLDERS */
+    } else
         attrs = 0;
     /*
      * We used to mark a file RO if it was in an RO volume, but that
@@ -2477,8 +2488,7 @@ long cm_GetShortName(char *pathp, cm_user_t *userp, cm_req_t *reqp,
     rock.shortName = shortName;
     rock.vnode = vnode;
     rock.maskp = lastNamep;
-    code = cm_ApplyDir(dscp, cm_GetShortNameProc, &rock, &thyper, userp,
-                        reqp, NULL);
+    code = cm_ApplyDir(dscp, cm_GetShortNameProc, &rock, &thyper, userp, reqp, NULL);
 
     cm_ReleaseSCache(dscp);
 
@@ -3575,8 +3585,10 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t
         pathp = ((char *) p->parmsp) + 12;     /* points to path */
         nextCookie = 0;
         maskp = strrchr(pathp, '\\');
-        if (maskp == NULL) maskp = pathp;
-        else maskp++;  /* skip over backslash */
+        if (maskp == NULL) 
+            maskp = pathp;
+        else 
+            maskp++;   /* skip over backslash */
         strcpy(dsp->mask, maskp);      /* and save mask */
         /* track if this is likely to match a lot of entries */
         starPattern = smb_V3IsStarMask(maskp);
@@ -3585,7 +3597,8 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t
         osi_assert(p->opcode == 2);
         /* find next; obtain basic parameters from request or open dir file */
         dsp = smb_FindDirSearch(p->parmsp[0]);
-        if (!dsp) return CM_ERROR_BADFD;
+        if (!dsp) 
+            return CM_ERROR_BADFD;
         attribute = dsp->attribute;
         maxCount = p->parmsp[1];
         infoLevel = p->parmsp[2];
@@ -3653,10 +3666,9 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t
     else {
         spacep = cm_GetSpace();
         smb_StripLastComponent(spacep->data, NULL, pathp);
-        lock_ReleaseMutex(&dsp->mx);
-
         code = smb_LookupTIDPath(vcp, p->tid, &tidPathp);
         if (code) {
+            lock_ReleaseMutex(&dsp->mx);
             cm_ReleaseUser(userp);
             smb_SendTran2Error(vcp, p, opx, CM_ERROR_NOFILES);
             smb_FreeTran2Packet(outp);
@@ -3669,9 +3681,9 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t
                         userp, tidPathp, &req, &scp);
         cm_FreeSpace(spacep);
 
-        lock_ObtainMutex(&dsp->mx);
         if (code == 0) {
-            if (dsp->scp != 0) cm_ReleaseSCache(dsp->scp);
+            if (dsp->scp != 0) 
+                cm_ReleaseSCache(dsp->scp);
             dsp->scp = scp;
             /* we need one hold for the entry we just stored into,
              * and one for our own processing.  When we're done
@@ -3784,6 +3796,7 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t
             lock_ObtainRead(&scp->bufCreateLock);
             code = buf_Get(scp, &thyper, &bufferp);
             lock_ReleaseRead(&scp->bufCreateLock);
+            lock_ObtainMutex(&dsp->mx);
 
             /* now, if we're doing a star match, do bulk fetching
              * of all of the status info for files in the dir.
@@ -3792,6 +3805,7 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t
                 smb_ApplyV3DirListPatches(scp, &dirListPatchesp,
                                            infoLevel, userp,
                                            &req);
+                lock_ObtainMutex(&scp->mx);
                 if ((dsp->flags & SMB_DIRSEARCH_BULKST) &&
                     LargeIntegerGreaterThanOrEqualTo(thyper, scp->bulkStatProgress)) {
                     /* Don't bulk stat if risking timeout */
@@ -3803,10 +3817,13 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t
                     } else
                         cm_TryBulkStat(scp, &thyper, userp, &req);
                 }
+            } else {
+                lock_ObtainMutex(&scp->mx);
             }
+            lock_ReleaseMutex(&dsp->mx);
+            if (code) 
+                break;
 
-            lock_ObtainMutex(&scp->mx);
-            if (code) break;
             bufferOffset = thyper;
 
             /* now get the data in the cache */
index 69fe625fd23b5a96cb0268755c6b51c95fdc1354..0b7322ae1aefa85317466f5be8066d0cb5a00188 100644 (file)
@@ -22,8 +22,6 @@
 #include <osi.h>
 #include <afsint.h>
 
-typedef long afs_int32;
-
 #include "fs_utils.h"
 #include "cmd.h"
 
@@ -243,6 +241,11 @@ register struct cmd_syndesc *as; {
     /* create symlink with a special pioctl for Windows NT, since it doesn't
      * have a symlink system call.
      */
+
+    /* TODO: Code needs to go here to prevent the creation of symlinks
+     * in \\AFS\all when not in the "AFS Client Admins" group.
+     */
+
     blob.out_size = 0;
     blob.in_size = 1 + strlen(space);
     blob.in = space;
index 257130f24b192053e5f03a1083cfc73b7b536562..d74932b89014233d383140550ac2b10d2f254166 100644 (file)
@@ -90,6 +90,9 @@ lang::
 # Local clean target; augments predefined clean target
 
 clean::
+       $(CD) lang
+       for /f %l in ('dir /B ??_??') do @$(NTLANG) %l $(MAKECMD) /nologo /f NTMakefile clean
+       $(CD) ..
 
 mkdir:
        -mkdir $(OUT)\lang
index 487e7b215b9037517f59c92a6e8f3445cceccec5..c9dfd8205d60d8c301f546c1b5160d8c550f3e1f 100644 (file)
@@ -55,7 +55,9 @@ lang::
 # Local clean target; augments predefined clean target
 
 clean::
-
+       $(CD) lang
+       for /f %l in ('dir /B ??_??') do @$(NTLANG) %l $(MAKECMD) /nologo /f NTMakefile clean
+       $(CD) ..
 
 mkdir:
        -mkdir $(OUT)\lang
index 97619e3e5575504ecf9c78a44b1413b0f19d7fe3..0526ac91a43cf3a914b408021b6a7dc4dc865941 100644 (file)
@@ -116,9 +116,14 @@ install : $(EXEFILE) lang
 
 $(OUT)\svrmgr_stub.res : AFS_component_version_number.h
 
+clean::
+       $(CD) lang
+       for /f %l in ('dir /B ??_??') do @$(NTLANG) %l $(MAKECMD) /nologo /f NTMakefile clean
+       $(CD) ..
+
 mkdir:
        -mkdir $(OUT)\lang
        cd lang
        nmake /nologo /f ntmakefile SRC=$(SRC) OBJ=$(OBJ) mkdir
        cd ..
-       
+
index 422c47816a8be74574288aaf265cb70ad23f14ff..3514cc0d5e42477b05f0bd63935b72998bccc010 100644 (file)
@@ -93,6 +93,11 @@ install : $(EXEFILE) lang
 
 $(OUT)\AfsUsrMgr_stub.res : AFS_component_version_number.h
 
+clean::
+       $(CD) lang
+       for /f %l in ('dir /B ??_??') do @$(NTLANG) %l $(MAKECMD) /nologo /f NTMakefile clean
+       $(CD) ..
+
 mkdir:
        -mkdir $(OUT)\lang
        cd lang
index d39f24fc3dc9508316f319cadbc12d99c14f697a..f3ea6628f0777fad48e1e4095b9fd66e4c2d3fed 100644 (file)
@@ -671,51 +671,67 @@ BOOL Config_SetNumDaemons (ULONG cDaemons, ULONG *pStatus)
 
 void Config_GetSysName (LPTSTR pszName)
 {
-   if (!Config_ReadGlobalString (TEXT("SysName"), pszName, MAX_PATH))
-      lstrcpy (pszName, TEXT("i386_nt40"));
+    if (!Config_ReadGlobalString (TEXT("SysName"), pszName, MAX_PATH))
+        lstrcpy (pszName, TEXT("i386_nt40"));
 }
 
 
 BOOL Config_SetSysName (LPCTSTR pszName, ULONG *pStatus)
 {
-   BOOL rc = TRUE;
-   ULONG status = 0;
-
-   if (Config_GetServiceState() == SERVICE_RUNNING)
-      {
-      struct {
-         ULONG cbData;
-         TCHAR szData[ PIOCTL_MAXSIZE ];
-      } InData;
-      memset (&InData, 0x00, sizeof(InData));
-      InData.cbData = lstrlen(pszName);
-      lstrcpy (InData.szData, pszName);
-
-      BYTE OutData[ PIOCTL_MAXSIZE ];
-      memset (OutData, 0x00, sizeof(OutData));
-
-      struct ViceIoctl IOInfo;
-      IOInfo.in_size = sizeof(ULONG) +lstrlen(pszName) +1;
-      IOInfo.in = (char *)&InData;
-      IOInfo.out = (char *)OutData;
-      IOInfo.out_size = PIOCTL_MAXSIZE;
-
-      if ((status = pioctl (0, VIOC_AFS_SYSNAME, &IOInfo, 1)) != 0)
-         {
-         rc = FALSE;
-         }
-      }
-
-   if (rc)
-      {
-      Config_WriteGlobalString (TEXT("SysName"), pszName);
-      }
-
-   if (pStatus && !rc)
-      *pStatus = status;
-   if (!rc)
-      Message (MB_ICONHAND, GetErrorTitle(), IDS_FAILCONFIG_SYSNAME, TEXT("%ld"), status);
-   return rc;
+    BOOL rc = TRUE;
+    ULONG status = 0;
+
+    if (Config_GetServiceState() == SERVICE_RUNNING)
+    {
+        struct {
+            ULONG cbData;
+            TCHAR szData[ PIOCTL_MAXSIZE ];
+        } InData;
+        memset (&InData, 0x00, sizeof(InData));
+        USHORT i=0, j=0, len=lstrlen(pszName);
+        
+        if ( len == 0 ) {
+            Message (MB_ICONHAND, GetErrorTitle(), IDS_FAILCONFIG_SYSNAME, TEXT("A sysname must be specified"));
+            return(-1);
+        }
+
+        while ( pszName[i] ) {
+            if ( !isspace(pszName[i]) ) {
+                InData.szData[j++] = pszName[i];
+            } else if (InData.szData[j-1] != '\0') {
+                InData.szData[j++] = '\0';
+                InData.cbData++;
+            }
+            i++;
+        }
+        InData.szData[j++] = '\0';
+        InData.cbData++;      /* one word */
+
+        BYTE OutData[ PIOCTL_MAXSIZE ];
+        memset (OutData, 0x00, sizeof(OutData));
+
+        struct ViceIoctl IOInfo;
+        IOInfo.in_size = sizeof(ULONG) + j;
+        IOInfo.in = (char *)&InData;
+        IOInfo.out = (char *)OutData;
+        IOInfo.out_size = PIOCTL_MAXSIZE;
+
+        if ((status = pioctl (0, VIOC_AFS_SYSNAME, &IOInfo, 1)) != 0)
+        {
+            rc = FALSE;
+        }
+    }
+
+    if (rc)
+    {
+        Config_WriteGlobalString (TEXT("SysName"), pszName);
+    }
+
+    if (pStatus && !rc)
+        *pStatus = status;
+    if (!rc)
+        Message (MB_ICONHAND, GetErrorTitle(), IDS_FAILCONFIG_SYSNAME, TEXT("%ld"), status);
+    return rc;
 }
 
 
index f577152aac922936aa567ad2cddf4b88849daca0..b58c51e07c8979231b0e04c9021d0fdc784ceeaa 100644 (file)
@@ -127,6 +127,11 @@ lang ::
 
 $(OUT)\afscreds_stub.res : afscreds_stub.rc AFS_component_version_number.h
 
+clean::
+       $(CD) lang
+       for /f %l in ('dir /B ??_??') do @$(NTLANG) %l $(MAKECMD) /nologo /f NTMakefile clean
+       $(CD) ..
+
 mkdir:
        -mkdir $(OUT)\lang
        cd lang
index 0933ba43a37f2b02c1ca7d5315299054822f2872..75edee5af5281249d7ea8493ce755c7215f949e1 100644 (file)
@@ -429,7 +429,21 @@ BEGIN
     PUSHBUTTON      "OK",IDOK,22,53,45,14
     PUSHBUTTON      "Cancel",IDCANCEL,92,53,45,14
     PUSHBUTTON      "Help",9,167,53,45,14
-    LTEXT           "Share Name:",IDC_STATIC,18,10,29,8
+    LTEXT           "Submount Name:",IDC_STATIC,18,10,29,8
+    LTEXT           "Path Name:",IDC_STATIC,19,25,28,8
+END
+
+IDD_SYMBOLICLINK_ADD DIALOG DISCARDABLE  0, 0, 235, 79
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Add Symbolic Link"
+FONT 8, "MS Sans Serif"
+BEGIN
+    EDITTEXT        IDC_NAME,62,8,163,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_DIR,62,23,163,12,ES_AUTOHSCROLL
+    PUSHBUTTON      "OK",IDOK,22,53,45,14
+    PUSHBUTTON      "Cancel",IDCANCEL,92,53,45,14
+    PUSHBUTTON      "Help",9,167,53,45,14
+    LTEXT           "Link Name:",IDC_STATIC,18,10,29,8
     LTEXT           "Path Name:",IDC_STATIC,19,25,28,8
 END
 
index d1889fbc1da75254f82a85fe47ac62d9e8465703..ff3a29de5e5d878eda381e1ee819a93e8c68790a 100644 (file)
@@ -51,7 +51,7 @@ void CMakeSymbolicLinkDlg::DoDataExchange(CDataExchange* pDX)
        DDX_Text(pDX, IDC_NAME, m_strName);
        DDV_MaxChars(pDX, m_strName, 63);
        DDX_Text(pDX, IDC_DIR, m_strDir);
-       DDV_MaxChars(pDX, m_strDir, 63);
+       DDV_MaxChars(pDX, m_strDir, 255);
        //}}AFX_DATA_MAP
 }
 
index 8ea9570bf35035b68a94d7b67cf356bb3e1c32be..b335a430ce577a41d7e566b9b1ddff6a0df832b8 100644 (file)
@@ -62,9 +62,8 @@ $(WIXOBJ): openafs.wxs $(WIXINCLUDES)
 
 # Cleanup
 clean::
-       for %l in ( $(LANGUAGES) ) do (
+       for %l in ( $(LANGUAGES) ) do \
                $(MAKE) /f NTMakefile /nologo LANG=%l lang_clean
-       )
        $(CD) custom
        $(MAKE) /f NTMakefile /nologo clean
        $(CD) ..
index e4702b09d2c9d71308785e0166bead0b4380d919..bd7af64ed7eeeba7322fa8da3ce669cc4f4c2d15 100644 (file)
 
     <!-- We are including debug symbols anyway.  Undefine this for a leaner installer witout debug syms. -->
     <?define DebugSyms?>
+
+    <!-- Parameters for the features containing debug symbols -->
+    <?ifdef DebugSyms?>
+         <?ifdef Debug?>
+             <?define DebugSymInstallDefault="followParent"?>
+             <?define DebugSymLowLevel="30"?>
+             <?define DebugSymHighLevel="130"?>
+         <?else?>
+             <?define DebugSymInstallDefault="followParent"?>
+             <?define DebugSymLowLevel="130"?>
+             <?define DebugSymHighLevel="130"?>
+         <?endif?>
+    <?endif?>
     
     <!-- Use the afsloopback.dll instead of instloop.exe -->
     <?define UseDllLoopbackInstaller?>
                <?error AFSVER_CL needs to be set to the compiler version?>
     <?endif?>
     <?define SystemDir="$(env.SystemRoot)\System32\"?>
+
+
 </Include>
index 273b9042ccff229c203b3e5baf9aadc27db9a67a..d786b2d75920e3f1f3748a8a9c7ab5db3e665d2b 100644 (file)
@@ -1,42 +1,29 @@
 ï»¿<?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)">
+                InstallDefault="followParent" Level="30" Title="$(loc.StrAFSClientDesc)">
                 
-                <Feature Id="feaLoopback" FollowParent="yes" AllowAdvertise="no" Description="$(loc.StrLoopbackLongDesc)"
-                    Display="expand" InstallDefault="local" Level="30" Title="$(loc.StrLoopbackDesc)">
+                <Feature Id="feaLoopback" AllowAdvertise="no" Description="$(loc.StrLoopbackLongDesc)"
+                    Display="expand" InstallDefault="followParent" 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">
+                               <Feature Id="feaKB301673" AllowAdvertise="no" Absent="disallow" Display="hidden" InstallDefault="followParent" Level="0">
                                        <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">
+                               <Feature Id="feaCredsStartup" AllowAdvertise="no" Display="hidden" InstallDefault="followParent" Level="30">
                                        <ComponentRef Id="cmp_credsStartup" />
                                        <Condition Level="130">CREDSSTARTUP = 0</Condition>
                                </Feature>
                                
                        <?ifdef DebugSyms?>
                                <Feature Id="feaClientDebug" AllowAdvertise="no" Description="$(loc.StrAFSClientDebugLongDesc)" Display="expand"
-                                       FollowParent="$(var.DebugSymFollowParent)" InstallDefault="local" Level="$(var.DebugSymLowLevel)" Title="$(loc.StrAFSClientDebugDesc)">
+                                       InstallDefault="$(var.DebugSymInstallDefault)" Level="$(var.DebugSymLowLevel)" Title="$(loc.StrAFSClientDebugDesc)">
                     <ComponentRef Id="cmp_ClientProgramDebug" />
                     <ComponentRef Id="cmp_CommonCommonDebug" />
                     <ComponentRef Id="cmp_ClientCommonDebug" />
@@ -98,7 +85,7 @@
             </Feature>
             
             <Feature Id="feaServer" AllowAdvertise="no" Description="$(loc.StrAFSServerLongDesc)" Display="expand"
-                FollowParent="yes" InstallDefault="local" Level="130" Title="$(loc.StrAFSServerDesc)">
+                InstallDefault="followParent" Level="130" Title="$(loc.StrAFSServerDesc)">
 
                                <ComponentRef Id="rcm_Server" />
                                <ComponentRef Id="cmp_CommonDir" />
 
             <?ifdef DebugSyms?>
                                <Feature Id="feaServerDebug" AllowAdvertise="no" Description="$(loc.StrAFSServerDebugLongDesc)" Display="expand"
-                                       FollowParent="$(var.DebugSymFollowParent)" InstallDefault="local" Level="$(var.DebugSymHighLevel)" Title="$(loc.StrAFSServerDebugDesc)">
+                                       InstallDefault="$(var.DebugSymInstallDefault)" Level="$(var.DebugSymHighLevel)" Title="$(loc.StrAFSServerDebugDesc)">
                                        <ComponentRef Id="cmp_Server_Program_Debug" />
                                        <ComponentRef Id="cmp_ServerCommonDebug" />
                                        <ComponentRef Id="cmp_CommonCommonDebug" />
                 <?include runtime.wxi?>
             </Feature>
             <Feature Id="feaControlCenter" AllowAdvertise="no" Description="$(loc.StrAFSCCLongDesc)"
-                Display="expand" FollowParent="yes" InstallDefault="local" Level="130" Title="$(loc.StrAFSCCDesc)">
+                Display="expand" InstallDefault="followParent" Level="130" Title="$(loc.StrAFSCCDesc)">
                 
                 <ComponentRef Id="rcm_Control_Center" />
                 <ComponentRef Id="cmp_CommonDir" />
 
             <?ifdef DebugSyms?>
                                <Feature Id="feaControlCenterDebug" AllowAdvertise="no" Description="$(loc.StrAFSCCDebugLongDesc)"
-                                       Display="expand" FollowParent="$(var.DebugSymFollowParent)" InstallDefault="local" Level="$(var.DebugSymHighLevel)" Title="$(loc.StrAFSCCDebugDesc)">
+                                       Display="expand" InstallDefault="$(var.DebugSymInstallDefault)" Level="$(var.DebugSymHighLevel)" Title="$(loc.StrAFSCCDebugDesc)">
                                        <ComponentRef Id="cmp_Control_CenterDebug" />
                                        <ComponentRef Id="cmp_ServerCommonDebug" />
                                        <ComponentRef Id="cmp_CommonCommonDebug" />
                 <?include runtime.wxi?>
             </Feature>
             <Feature Id="feaSDK" AllowAdvertise="no" Description="$(loc.StrAFSSDKLongDesc)" Display="expand"
-                FollowParent="yes" InstallDefault="local" Level="130" Title="$(loc.StrAFSSDKDesc)">
+                InstallDefault="followParent" Level="130" Title="$(loc.StrAFSSDKDesc)">
 
                                <ComponentRef Id="rcm_SDK" />
 
 
                        <?ifdef DebugSyms?>
                                <Feature Id="feaSDKDebug" AllowAdvertise="no" Description="$(loc.StrAFSSDKDebugLongDesc)" Display="expand"
-                                       FollowParent="$(var.DebugSymFollowParent)" InstallDefault="local" Level="$(var.DebugSymHighLevel)" Title="$(loc.StrAFSSDKDebugDesc)">
+                                       InstallDefault="$(var.DebugSymInstallDefault)" Level="$(var.DebugSymHighLevel)" Title="$(loc.StrAFSSDKDebugDesc)">
                                        <?include runtime_debug.wxi?>
                                </Feature>
                        <?endif?>
             </Feature>
             
             <Feature Id="feaDocumentation" AllowAdvertise="no" Description="$(loc.StrAFSDocLongDesc)"
-                Display="expand" FollowParent="yes" InstallDefault="local" Level="130" Title="$(loc.StrAFSDocDesc)">
+                Display="expand" InstallDefault="followParent" Level="130" Title="$(loc.StrAFSDocDesc)">
 
                                <ComponentRef Id="rcm_Documentation" />
                 
index 0a61cca5d45e1b3f322d3840b42fb696580cb408..b2bf6a7c1ea9c087e9112f9bae8054f161319134 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <Include>
-    <Directory Id="SystemFolder" SourceName="System" LongSource="System">
+    <Directory Id="SystemFolder" SourceName="System">
         <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" src="$(var.ClientDir)afslogon.dll" />
             <Registry Id="reg_afslogon01" Root="HKLM" Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon\Notify\AfsLogon" Action="createKeyAndRemoveKeyOnUninstall" />
@@ -19,7 +19,7 @@
     </Directory>
     <Directory Id="ProgramFilesFolder">
         <Directory Id="AFSDIR" Name="OpenAFS" SourceName=".">
-            <Directory Id="dirCommon" Name="Common" LongName="Common" SourceName="Common">
+            <Directory Id="dirCommon" Name="Common">
                 <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 />
                     <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="en_US" src="$(var.SrcDir)\WINNT\doc\help\en_US\">
+                <Directory Id="dirCommon_en_US" Name="en_US" 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" />
 
             <Directory Id="dirDocumentation" Name="Docum" LongName="Documentation" SourceName="Docs">
                                <!-- The following directory and everything below it is language dependent. -->
-                <Directory Id="dirDoc_$(var.Language)" Name="$(var.Language)" LongName="$(var.Language)" SourceName="$(var.Language)">
-                    <Directory Id="dirHtml_$(var.Language)" Name="Html" LongName="Html" SourceName="html" src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\">
+                <Directory Id="dirDoc_$(var.Language)" Name="$(var.Language)">
+                    <Directory Id="dirHtml_$(var.Language)" Name="Html" 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 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="CmdRef" src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\CmdRef\">
+                        <Directory Id="dirCmdRef_$(var.Language)" Name="CmdRef" 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="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="InstGd" LongSource="InstallGuide" src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\InstallGd\">
+                        <Directory Id="dirInstallGd_$(var.Language)" Name="InstalGd" SourceName="InstGd" LongSource="InstallGuide" 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="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="Relea" LongSource="ReleaseNotes" src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\ReleaseNotes\">
+                        <Directory Id="dirReleaseNotes_$(var.Language)" Name="Relea" LongName="ReleaseNotes" 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" />
                 </Directory> <!-- $(var.Language) -->
             </Directory> <!-- Documentation -->
 
-            <Directory Id="dirClient" Name="Client" LongName="Client" SourceName="Client">
+            <Directory Id="dirClient" Name="Client">
                 <Component Id="efl_CellServDB" Guid="8E69FDAB-08C5-4927-B1AA-57FCEEB065F2" NeverOverwrite="yes" Permanent="yes">
                     <File Id="file_CellServDB" Name="CelSrvDB" LongName="CellServDB" KeyPath="yes" DiskId="1" src="$(var.CellDbFile)"/>
                     <Condition>OLDCELLSERVDB = ""</Condition>
                     <CopyFile Id="copy_CellServDB" Delete="yes" DestinationDirectory="dirClient" DestinationName="CellServ|CellServDB" SourceDirectory="WindowsFolder" SourceName="afsdcell.ini" />
                     <Condition>OLDCELLSERVDB &lt;&gt; ""</Condition>
                 </Component>
-                <Directory Id="dirProgram" Name="Program" LongName="Program" SourceName="Program" src="$(var.ClientDir)">
+                <Directory Id="dirProgram" Name="Program" 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>
                 <?endif?>
                     
-                    <Directory Id="dirSample" Name="Sampl" LongName="Sample" SourceName="Sample">
+                    <Directory Id="dirSample" Name="Sample">
                         <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="Include">
+                    <Directory Id="dirInclude" Name="Include">
                         <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="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="afs">
+                        <Directory Id="dirIncludeAfs" Name="afs">
                             <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="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="rx">
+                        <Directory Id="dirIncludeRx" Name="rx">
                             <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="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="WINNT">
+                        <Directory Id="dirIncludeWinnt" Name="WINNT">
                             <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" /> 
                             </Component>
                         </Directory>
                     </Directory>
-                    <Directory Id="dirLib" Name="lib" LongName="lib" SourceName="lib">
+                    <Directory Id="dirLib" Name="lib">
                         <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="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="afs">
+                        <Directory Id="dirLibAfs" Name="afs">
                             <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" /> 
                     </Directory>
                 </Directory> <!-- /Program -->
             </Directory> <!-- /Client -->
-            <Directory Id="dirServer" Name="Server" LongName="Server" SourceName="Server">
-                <Directory Id="dirusr" Name="usr" LongName="usr" SourceName="usr">
-                    <Directory Id="dirafs" Name="afs" LongName="afs" SourceName="afs">
-                        <Directory Id="dirbin" Name="bin" LongName="bin" SourceName="bin" src="$(var.ServerDir)">
+            <Directory Id="dirServer" Name="Server">
+                <Directory Id="dirusr" Name="usr">
+                    <Directory Id="dirafs" Name="afs">
+                        <Directory Id="dirbin" Name="bin" 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>
     </Directory> <!-- program files -->
     <!-- References -->
     <Directory Id="ProgramMenuFolder" Name=".">
-        <Directory Id="dirShortCut" Name="OpenAFS" LongName="OpenAFS"/>
+        <Directory Id="dirShortCut" Name="OpenAFS"/>
     </Directory>
     <Directory Id="StartupFolder" Name="." />
     <Directory Id="WindowsVolume" Name="." />
index 2ca393c78845bb860362943f09d341385dc9bd1c..d0c493b296a039d224113c967ded20f5fbf12492 100644 (file)
                 BinaryKey="BIN_afsCustom"
                 DllEntry="UninstallNsisInstallation"
                 Execute="immediate" />
-               <CustomAction
+               <CustomAction
                 Id="CreateAFSAdminGroup"
                 BinaryKey="BIN_afsCustom"
                 DllEntry="CreateAFSClientAdminGroup"
index 33a17a4a03e032b3063cb7a7fbdd92474af6437f..4c72ab6c17b1391029746a3d3856b59d5dd8a9a2 100644 (file)
@@ -590,14 +590,11 @@ static void pthread_sync_terminate_thread(void) {
     (pthread_cache_done || pthread_once(&pthread_cache_once, create_once));
 
     if (terminate_thread_handle == INVALID_HANDLE_VALUE) {
-        CHAR eventName[MAX_PATH];
-        static eventCount = 0;
-        sprintf(eventName, "terminate_thread_wakeup_event %d::%d", _getpid(), eventCount++);
-        terminate_thread_wakeup_event = CreateEvent((LPSECURITY_ATTRIBUTES) 0,
-                                                     TRUE, FALSE, (LPCTSTR) eventName);
-        terminate_thread_handle = CreateThread((LPSECURITY_ATTRIBUTES) 0, 0, 
-                                                terminate_thread_routine, (LPVOID) 0, 0, 
-                                                &terminate_thread_id);
+       terminate_thread_wakeup_event = CreateEvent((LPSECURITY_ATTRIBUTES) 0,
+                               TRUE, FALSE, (LPCTSTR) 0);
+       terminate_thread_handle = CreateThread((LPSECURITY_ATTRIBUTES) 0, 0, 
+                               terminate_thread_routine, (LPVOID) 0, 0, 
+                               &terminate_thread_id);
     } else {
        SetEvent (terminate_thread_wakeup_event);
     }
@@ -714,11 +711,8 @@ static cond_waiters_t *get_waiter() {
     if (queue_IsEmpty(&waiter_cache)) {
         new = (cond_waiters_t *) malloc(sizeof(cond_waiters_t));
        if (new != NULL) {
-        CHAR eventName[MAX_PATH];
-        static eventCount = 0;
-        sprintf(eventName, "cond_waiters_t %d::%d", _getpid(), eventCount++);
-        new->event = CreateEvent((LPSECURITY_ATTRIBUTES) 0, FALSE,
-                                  FALSE, (LPCTSTR) eventName);
+           new->event = CreateEvent((LPSECURITY_ATTRIBUTES) 0, FALSE,
+                                    FALSE, (LPCTSTR) 0);
            if (new->event == NULL) {
                free(new);
                new = NULL;
index a562ee25153f158ff1eac877b2754dcbaa06bc5c..153763882b67ac72d798e4ccd44c48c29b6671c1 100644 (file)
@@ -12,7 +12,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/FBSD/osi_module.c,v 1.5 2004/03/10 23:01:51 rees Exp $");
+    ("$Header: /cvs/openafs/src/afs/FBSD/osi_module.c,v 1.5.2.1 2004/11/09 17:11:34 shadow Exp $");
 
 #include <afs/sysincludes.h>
 #include <afsincludes.h>
@@ -43,21 +43,25 @@ afs_module_handler(module_t mod, int what, void *arg)
     case MOD_LOAD:
        if (inited) {
            printf("afs cannot be MOD_LOAD'd more than once\n");
-           error = -1;
+           error = EBUSY;
            break;
        }
        if (sysent[AFS_SYSCALL].sy_call != nosys
            && sysent[AFS_SYSCALL].sy_call != lkmnosys) {
            printf("AFS_SYSCALL in use. aborting\n");
-           error = -1;
+           error = EBUSY;
            break;
        }
        memset(&afs_vfsconf, 0, sizeof(struct vfsconf));
+#ifdef AFS_FBSD53_ENV
+       afs_vfsconf.vfc_version = VFS_VERSION;
+#endif
        strcpy(afs_vfsconf.vfc_name, "AFS");
        afs_vfsconf.vfc_vfsops = &afs_vfsops;
        afs_vfsconf.vfc_typenum = -1;   /* set by vfs_register */
        afs_vfsconf.vfc_flags = VFCF_NETWORK;
-       vfs_register(&afs_vfsconf);     /* doesn't fail */
+       if ((error = vfs_register(&afs_vfsconf)) != 0)
+           break;
        vfs_add_vnodeops(&afs_vnodeop_opv_desc);
        osi_Init();
 #if 0
@@ -80,11 +84,10 @@ afs_module_handler(module_t mod, int what, void *arg)
            break;
        }
        if (afs_globalVFS) {
-           error = -1;
+           error = EBUSY;
            break;
        }
-       if (vfs_unregister(&afs_vfsconf)) {
-           error = -1;
+       if ((error = vfs_unregister(&afs_vfsconf)) != 0) {
            break;
        }
        vfs_rm_vnodeops(&afs_vnodeop_opv_desc);
index fdec535019c9abe1cda44909e023091fcfea2867..08a850e218337939d6b6870db2090a84e29ddfcb 100644 (file)
@@ -2,7 +2,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/FBSD/osi_vfsops.c,v 1.16 2004/07/27 16:24:40 rees Exp $");
+    ("$Header: /cvs/openafs/src/afs/FBSD/osi_vfsops.c,v 1.16.2.1 2004/11/09 17:11:34 shadow Exp $");
 
 #include <afs/sysincludes.h>   /* Standard vendor system headers */
 #include <afsincludes.h>       /* Afs-based standard headers */
@@ -12,8 +12,8 @@ RCSID
 #include <sys/conf.h>
 #include <sys/syscall.h>
 
-struct vcache *afs_globalVp = 0;
-struct mount *afs_globalVFS = 0;
+struct vcache *afs_globalVp = NULL;
+struct mount *afs_globalVFS = NULL;
 int afs_pbuf_freecnt = -1;
 
 #ifdef AFS_FBSD50_ENV
@@ -29,9 +29,23 @@ afs_start(struct mount *mp, int flags, THREAD_OR_PROC)
     return (0);                        /* nothing to do. ? */
 }
 
+#ifdef AFS_FBSD53_ENV
+int
+afs_mount(struct mount *mp, struct thread *td)
+{
+    int afs_omount(struct mount *mp, char *path, caddr_t data, struct thread *p);
+
+    return afs_omount(mp, NULL, NULL, td);
+}
+#endif
+
 int
-afs_mount(struct mount *mp, char *path, caddr_t data, struct nameidata *ndp,
+#ifdef AFS_FBSD53_ENV
+afs_omount(struct mount *mp, char *path, caddr_t data, struct thread *p)
+#else
+afs_omount(struct mount *mp, char *path, caddr_t data, struct nameidata *ndp,
        THREAD_OR_PROC)
+#endif
 {
     /* ndp contains the mounted-from device.  Just ignore it.
      * we also don't care about our proc struct. */
@@ -45,7 +59,7 @@ afs_mount(struct mount *mp, char *path, caddr_t data, struct nameidata *ndp,
 
     if (afs_globalVFS) {       /* Don't allow remounts. */
        AFS_GUNLOCK();
-       return (EBUSY);
+       return EBUSY;
     }
 
     afs_globalVFS = mp;
@@ -53,7 +67,8 @@ afs_mount(struct mount *mp, char *path, caddr_t data, struct nameidata *ndp,
     vfs_getnewfsid(mp);
     mp->mnt_stat.f_iosize = 8192;
 
-    (void)copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
+    if (path)
+       (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
     memset(mp->mnt_stat.f_mntonname + size, 0, MNAMELEN - size);
     memset(mp->mnt_stat.f_mntfromname, 0, MNAMELEN);
     strcpy(mp->mnt_stat.f_mntfromname, "AFS");
@@ -89,13 +104,19 @@ afs_unmount(struct mount *mp, int flags, THREAD_OR_PROC)
 }
 
 int
+#ifdef AFS_FBSD53_ENV
+afs_root(struct mount *mp, struct vnode **vpp, struct thread *td)
+#else
 afs_root(struct mount *mp, struct vnode **vpp)
+#endif
 {
     int error;
     struct vrequest treq;
     register struct vcache *tvp = 0;
 #ifdef AFS_FBSD50_ENV
+#ifndef AFS_FBSD53_ENV
     struct thread *td = curthread;
+#endif
     struct ucred *cr = td->td_ucred;
 #else
     struct proc *p = curproc;
@@ -202,7 +223,10 @@ afs_init(struct vfsconf *vfc)
 }
 
 struct vfsops afs_vfsops = {
+#ifdef AFS_FBSD53_ENV
     afs_mount,
+#endif
+    afs_omount,
     afs_start,
     afs_unmount,
     afs_root,
@@ -217,6 +241,6 @@ struct vfsops afs_vfsops = {
     vfs_stduninit,
     vfs_stdextattrctl,
 #ifdef AFS_FBSD50_ENV
-    NULL,
+    vfs_stdsysctl,
 #endif
 };
index 37301249520239062ab6a9b323e7b0a48fc91be9..5c71785a889b37cd47d254c16f047d6cd60b3d90 100644 (file)
@@ -14,7 +14,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/IRIX/osi_vnodeops.c,v 1.14.2.1 2004/08/25 07:09:34 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/IRIX/osi_vnodeops.c,v 1.14.2.2 2004/11/09 17:13:17 shadow Exp $");
 
 #ifdef AFS_SGI62_ENV
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
@@ -354,9 +354,9 @@ afsrwvp(register struct vcache *avc, register struct uio *uio, enum uio_rw rw,
     register struct vnode *vp = AFSTOV(avc);
     struct buf *bp;
     daddr_t bn;
-    size_t acnt, cnt;
-    int off, newoff;
-    ssize_t bsize, rem, len;
+    off_t acnt, cnt;
+    off_t off, newoff;
+    off_t bsize, rem, len;
     int error;
     struct bmapval bmv[2];
     int nmaps, didFakeOpen = 0;
@@ -372,7 +372,7 @@ afsrwvp(register struct vcache *avc, register struct uio *uio, enum uio_rw rw,
     if (uio->uio_resid <= 0) {
        return (0);
     }
-    if (uio->uio_offset < 0 || (signed long)newoff < 0) {
+    if (uio->uio_offset < 0 || newoff < 0)  {
        return (EINVAL);
     }
     if (ioflag & IO_DIRECT)
@@ -473,7 +473,7 @@ afsrwvp(register struct vcache *avc, register struct uio *uio, enum uio_rw rw,
            /*
             * read/paging in a normal file
             */
-           rem = avc->m.Length - (afs_int32) uio->uio_offset;
+           rem = avc->m.Length - uio->uio_offset;
            if (rem <= 0)
                /* EOF */
                break;
@@ -604,7 +604,7 @@ afsrwvp(register struct vcache *avc, register struct uio *uio, enum uio_rw rw,
        if (bp->b_flags & B_ERROR) {
            /*
             * Since we compile -signed, b_error is a signed
-            * char when it should ba an unsigned char.
+            * char when it should be an unsigned char.
             * This can cause some errors codes to be interpreted
             * as negative #s
             */
@@ -638,7 +638,7 @@ afsrwvp(register struct vcache *avc, register struct uio *uio, enum uio_rw rw,
             * Make sure it is at least as high as the last byte we just wrote
             * into the buffer.
             */
-           if (avc->m.Length < (afs_int32) uio->uio_offset) {
+           if (avc->m.Length < uio->uio_offset)  {
                AFS_GLOCK();
                ObtainWriteLock(&avc->lock, 235);
                avc->m.Length = uio->uio_offset;
index fda7e6a3ee16987ea9b3e99134f25132d0caa094..b843665bf5f354c3f5beeb69820cbe0d032fccae 100644 (file)
@@ -22,7 +22,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.81.2.3 2004/10/18 17:43:51 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.81.2.4 2004/11/09 17:15:02 shadow Exp $");
 
 #include "afs/sysincludes.h"
 #include "afsincludes.h"
@@ -333,11 +333,11 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
     code = 0;
     offset = (int) fp->f_pos;
     while (1) {
-       dirpos = BlobScan(&tdc->f, offset);
+       dirpos = BlobScan(tdc, offset);
        if (!dirpos)
            break;
 
-       de = afs_dir_GetBlob(&tdc->f, dirpos);
+       de = afs_dir_GetBlob(tdc, dirpos);
        if (!de)
            break;
 
index aa154054a673b7ae688e3011c26ff31fe8547ab3..90dc9aef25311e477eeab9f49dea4ffe08ca7fc7 100644 (file)
@@ -24,7 +24,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_attrs.c,v 1.27.2.1 2004/08/25 07:09:35 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_attrs.c,v 1.27.2.2 2004/11/09 17:17:25 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -317,6 +317,14 @@ afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, struct AFS_UCRED *acred)
                                     CMB_ALLOW_EXEC_AS_READ)) {
                    return EACCES;
                }
+#if 0
+/* The effect of the following is to force the NFS client to refetch the
+ * volume root every time, since the mtime changes.  For Solaris 9 NFSv3
+ * clients, this means looping forever, since for some reason (related
+ * to caching?) it wants the mtime to be consistent two reads in a row.
+ * Why are volume roots special???
+ * --jhutz 2-May-2004
+ */
                if (avc->mvstat == 2) {
 #if defined(AFS_SGI_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_AIX41_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
                    attrs->va_mtime.tv_nsec += ((++avc->xlatordv) * 1000);
@@ -324,6 +332,7 @@ afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, struct AFS_UCRED *acred)
                    attrs->va_mtime.tv_usec += ++avc->xlatordv;
 #endif
                }
+#endif
            }
            if ((au = afs_FindUser(treq.uid, -1, READ_LOCK))) {
                register struct afs_exporter *exporter = au->exporter;
index 73705c288645e5b86d0dfbabfb91f4e70718de54..d69d9966ac3ccb2f5b7fedb7c3c8d740a80cfb6a 100644 (file)
@@ -17,7 +17,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_create.c,v 1.16.2.2 2004/10/18 17:43:51 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_create.c,v 1.16.2.3 2004/11/09 17:15:04 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -154,7 +154,7 @@ afs_create(OSI_VC_DECL(adp), char *aname, struct vattr *attrs,
     if (tdc) {
        /* see if file already exists.  If it does, we only set 
         * the size attributes (to handle O_TRUNC) */
-       code = afs_dir_Lookup(&tdc->f, aname, &newFid.Fid);     /* use dnlc first xxx */
+       code = afs_dir_Lookup(tdc, aname, &newFid.Fid); /* use dnlc first xxx */
        if (code == 0) {
            ReleaseSharedLock(&tdc->lock);
            afs_PutDCache(tdc);
@@ -368,10 +368,10 @@ afs_create(OSI_VC_DECL(adp), char *aname, struct vattr *attrs,
        UpgradeSToWLock(&tdc->lock, 631);
     if (afs_LocalHero(adp, tdc, &OutDirStatus, 1)) {
        /* we can do it locally */
-       code = afs_dir_Create(&tdc->f, aname, &newFid.Fid);
+       code = afs_dir_Create(tdc, aname, &newFid.Fid);
        if (code) {
            ZapDCE(tdc);
-           DZap(&tdc->f);
+           DZap(tdc);
        }
     }
     if (tdc) {
@@ -531,7 +531,7 @@ afs_LocalHero(register struct vcache *avc, register struct dcache *adc,
     } else {
        if (adc) {
            ZapDCE(adc);
-           DZap(&adc->f);
+           DZap(adc);
        }
        if (avc->states & CStatd) {
            osi_dnlc_purgedp(avc);
index d7e2028e64d8a6ae467f8d36d22674b360148861..46c5778e3301cfdbf457ed485b28100c5fa8da45 100644 (file)
@@ -21,7 +21,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_dirops.c,v 1.14.2.2 2004/10/18 17:43:51 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_dirops.c,v 1.14.2.3 2004/11/09 17:15:04 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -147,10 +147,10 @@ afs_mkdir(OSI_VC_ARG(adp), aname, attrs, avcp, acred)
        ObtainWriteLock(&tdc->lock, 632);
     if (afs_LocalHero(adp, tdc, &OutDirStatus, 1)) {
        /* we can do it locally */
-       code = afs_dir_Create(&tdc->f, aname, &newFid.Fid);
+       code = afs_dir_Create(tdc, aname, &newFid.Fid);
        if (code) {
            ZapDCE(tdc);        /* surprise error -- use invalid value */
-           DZap(&tdc->f);
+           DZap(tdc);
        }
     }
     if (tdc) {
@@ -250,7 +250,7 @@ afs_rmdir(adp, aname, acred)
        struct VenusFid unlinkFid;
 
        unlinkFid.Fid.Vnode = 0;
-       code = afs_dir_Lookup(&tdc->f, aname, &unlinkFid.Fid);
+       code = afs_dir_Lookup(tdc, aname, &unlinkFid.Fid);
        if (code == 0) {
            afs_int32 cached = 0;
 
@@ -304,10 +304,10 @@ afs_rmdir(adp, aname, acred)
        UpgradeSToWLock(&tdc->lock, 634);
     if (afs_LocalHero(adp, tdc, &OutDirStatus, 1)) {
        /* we can do it locally */
-       code = afs_dir_Delete(&tdc->f, aname);
+       code = afs_dir_Delete(tdc, aname);
        if (code) {
            ZapDCE(tdc);        /* surprise error -- invalid value */
-           DZap(&tdc->f);
+           DZap(tdc);
        }
     }
     if (tdc) {
index a8621422f619f1df61963b90207e2c8d660d4a01..b16de16ee4061c27903609a11721996de692105d 100644 (file)
@@ -17,7 +17,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_link.c,v 1.15.2.2 2004/10/18 17:43:51 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_link.c,v 1.15.2.3 2004/11/09 17:15:04 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -137,10 +137,10 @@ afs_link(avc, OSI_VC_ARG(adp), aname, acred)
        ObtainWriteLock(&tdc->lock, 635);
     if (afs_LocalHero(adp, tdc, &OutDirStatus, 1)) {
        /* we can do it locally */
-       code = afs_dir_Create(&tdc->f, aname, &avc->fid.Fid);
+       code = afs_dir_Create(tdc, aname, &avc->fid.Fid);
        if (code) {
            ZapDCE(tdc);        /* surprise error -- invalid value */
-           DZap(&tdc->f);
+           DZap(tdc);
        }
     }
     if (tdc) {
index 8743957887b0d7e45e69e7b32d082036b396b81b..99d0de3a21bd68dd03002f753737a134e19e6b4b 100644 (file)
@@ -18,7 +18,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_lookup.c,v 1.50.2.3 2004/10/18 17:43:51 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_lookup.c,v 1.50.2.4 2004/11/09 17:15:04 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -507,21 +507,7 @@ Next_AtSys(register struct vcache *avc, struct vrequest *areq,
     return 1;
 }
 
-#if (defined(AFS_SGI62_ENV) || defined(AFS_SUN57_64BIT_ENV))
-extern int BlobScan(ino64_t * afile, afs_int32 ablob);
-#else
-#if defined(AFS_HPUX1123_ENV)
-/* DEE should use the new afs_inode_t  for all */
-extern int BlobScan(ino_t * afile, afs_int32 ablob);
-#else
-#if defined AFS_LINUX_64BIT_KERNEL
-extern int BlobScan(long *afile, afs_int32 ablob);
-#else
-extern int BlobScan(afs_int32 * afile, afs_int32 ablob);
-#endif
-#endif
-#endif
-
+extern int BlobScan(struct dcache * afile, afs_int32 ablob);
 
 /* called with an unlocked directory and directory cookie.  Areqp
  * describes who is making the call.
@@ -674,7 +660,7 @@ afs_DoBulkStat(struct vcache *adp, long dirCookie, struct vrequest *areqp)
        /* look for first safe entry to examine in the directory.  BlobScan
         * looks for a the 1st allocated dir after the dirCookie slot.
         */
-       newIndex = BlobScan(&dcp->f, (dirCookie >> 5));
+       newIndex = BlobScan(dcp, (dirCookie >> 5));
        if (newIndex == 0)
            break;
 
@@ -683,7 +669,7 @@ afs_DoBulkStat(struct vcache *adp, long dirCookie, struct vrequest *areqp)
 
        /* get a ptr to the dir entry */
        dirEntryp =
-           (struct DirEntry *)afs_dir_GetBlob(&dcp->f, newIndex);
+           (struct DirEntry *)afs_dir_GetBlob(dcp, newIndex);
        if (!dirEntryp)
            break;
 
@@ -1293,7 +1279,6 @@ afs_lookup(adp, aname, avcp, acred)
     {                          /* sub-block just to reduce stack usage */
        register struct dcache *tdc;
        afs_size_t dirOffset, dirLen;
-       struct fcache *theDir;
        struct VenusFid tfid;
 
        /* now we have to lookup the next fid */
@@ -1351,15 +1336,14 @@ afs_lookup(adp, aname, avcp, acred)
 
        /* lookup the name in the appropriate dir, and return a cache entry
         * on the resulting fid */
-       theDir = &tdc->f;
        code =
-           afs_dir_LookupOffset(theDir, sysState.name, &tfid.Fid,
+           afs_dir_LookupOffset(tdc, sysState.name, &tfid.Fid,
                                 &dirCookie);
 
        /* If the first lookup doesn't succeed, maybe it's got @sys in the name */
        while (code == ENOENT && Next_AtSys(adp, &treq, &sysState))
            code =
-               afs_dir_LookupOffset(theDir, sysState.name, &tfid.Fid,
+               afs_dir_LookupOffset(tdc, sysState.name, &tfid.Fid,
                                     &dirCookie);
        tname = sysState.name;
 
index 0eb41e088d49f69b7009b5e4181fa7f8a2da9725..eae187795e1466fb2008863a7b60f1363fdab12d 100644 (file)
@@ -23,7 +23,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_readdir.c,v 1.24.2.2 2004/10/18 17:43:53 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_readdir.c,v 1.24.2.4 2004/11/09 17:19:16 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -67,7 +67,7 @@ extern struct DirEntry *afs_dir_GetBlob();
     become static.
 */
 int
-BlobScan(struct fcache * afile, afs_int32 ablob)
+BlobScan(struct dcache * afile, afs_int32 ablob)
 {
     register afs_int32 relativeBlob;
     afs_int32 pageBlob;
@@ -292,6 +292,9 @@ afs_readdir_move(de, vc, auio, slen, rlen, off)
      afs_size_t off;
 {
     int code = 0;
+    struct volume *tvp;
+    afs_uint32 Volume = vc->fid.Fid.Volume;
+    afs_uint32 Vnode  = de->fid.vnode;
 #if    defined(AFS_SUN56_ENV)
     struct dirent64 *direntp;
 #else
@@ -304,6 +307,79 @@ afs_readdir_move(de, vc, auio, slen, rlen, off)
 #endif /* AFS_SGI53_ENV */
 
     AFS_STATCNT(afs_readdir_move);
+
+#define READDIR_CORRECT_INUMS
+#ifdef READDIR_CORRECT_INUMS
+    if (de->name[0] == '.' && !de->name[1]) {
+       /* This is the '.' entry; if we are a volume root, we need to
+        * ignore the directory and use the inum for the mount point.
+        */
+       if (!FidCmp(&afs_rootFid, &vc->fid)) {
+           Volume = 0;
+           Vnode  = 2;
+       } else if (vc->mvstat == 2) {
+           tvp = afs_GetVolume(&vc->fid, 0, READ_LOCK);
+           if (tvp) {
+               Volume = tvp->mtpoint.Fid.Volume;
+               Vnode  = tvp->mtpoint.Fid.Vnode;
+               afs_PutVolume(tvp, READ_LOCK);
+           }
+       }
+    }
+    else if (de->name[0] == '.' && de->name[1] == '.' && !de->name[2]) {
+       /* This is the '..' entry.  Getting this right is very tricky,
+        * because we might be a volume root (so our parent is in a
+        * different volume), or our parent might be a volume root
+        * (so we actually want the mount point) or BOTH! */
+       if (!FidCmp(&afs_rootFid, &vc->fid)) {
+           /* We are the root of the AFS root, and thus our own parent */
+           Volume = 0;
+           Vnode  = 2;
+       } else if (vc->mvstat == 2) {
+           /* We are a volume root, which means our parent is in another
+            * volume.  Luckily, we should have his fid cached... */
+           if (vc->mvid) {
+               if (!FidCmp(&afs_rootFid, vc->mvid)) {
+                   /* Parent directory is the root of the AFS root */
+                   Volume = 0;
+                   Vnode  = 2;
+               } else if (vc->mvid->Fid.Vnode == 1
+                          && vc->mvid->Fid.Unique == 1) {
+                   /* XXX The above test is evil and probably breaks DFS */
+                   /* Parent directory is the target of a mount point */
+                   tvp = afs_GetVolume(vc->mvid, 0, READ_LOCK);
+                   if (tvp) {
+                       Volume = tvp->mtpoint.Fid.Volume;
+                       Vnode  = tvp->mtpoint.Fid.Vnode;
+                       afs_PutVolume(tvp, READ_LOCK);
+                   }
+               } else {
+                   /* Parent directory is not a volume root */
+                   Volume = vc->mvid->Fid.Volume;
+                   Vnode  = vc->mvid->Fid.Vnode;
+               }
+           }
+       } else if (de->fid.vnode == 1 && de->fid.vunique == 1) {
+           /* XXX The above test is evil and probably breaks DFS */
+           /* Parent directory is a volume root; use the right inum */
+           tvp = afs_GetVolume(&vc->fid, 0, READ_LOCK);
+           if (tvp) {
+               if (tvp->cell == afs_rootFid.Cell
+                   && tvp->volume == afs_rootFid.Fid.Volume) {
+                   /* Parent directory is the root of the AFS root */
+                   Volume = 0;
+                   Vnode  = 2;
+               } else {
+                   /* Parent directory is the target of a mount point */
+                   Volume = tvp->mtpoint.Fid.Volume;
+                   Vnode  = tvp->mtpoint.Fid.Vnode;
+               }
+               afs_PutVolume(tvp, READ_LOCK);
+           }
+       }
+    }
+#endif
+
 #ifdef AFS_SGI53_ENV
     {
        afs_int32 use64BitDirent;
@@ -328,8 +404,7 @@ afs_readdir_move(de, vc, auio, slen, rlen, off)
 
        if (use64BitDirent) {
            struct min_dirent sdirEntry;
-           sdirEntry.d_fileno =
-               (vc->fid.Fid.Volume << 16) + ntohl(de->fid.vnode);
+           sdirEntry.d_fileno = (Volume << 16) + ntohl(Vnode);
            FIXUPSTUPIDINODE(sdirEntry.d_fileno);
            sdirEntry.d_reclen = rlen;
            sdirEntry.d_off = (off_t) off;
@@ -352,8 +427,7 @@ afs_readdir_move(de, vc, auio, slen, rlen, off)
            }
        } else {
            struct irix5_min_dirent sdirEntry;
-           sdirEntry.d_fileno =
-               (vc->fid.Fid.Volume << 16) + ntohl(de->fid.vnode);
+           sdirEntry.d_fileno = (Volume << 16) + ntohl(Vnode);
            FIXUPSTUPIDINODE(sdirEntry.d_fileno);
            sdirEntry.d_reclen = rlen;
            sdirEntry.d_off = (afs_int32) off;
@@ -384,7 +458,7 @@ afs_readdir_move(de, vc, auio, slen, rlen, off)
 #else
     direntp = (struct dirent *)osi_AllocLargeSpace(AFS_LRALLOCSIZ);
 #endif
-    direntp->d_ino = (vc->fid.Fid.Volume << 16) + ntohl(de->fid.vnode);
+    direntp->d_ino =  (Volume << 16) + ntohl(Vnode);
     FIXUPSTUPIDINODE(direntp->d_ino);
 #if defined(AFS_AIX51_ENV) && defined(AFS_64BIT_KERNEL)
     direntp->d_offset = off;
@@ -398,7 +472,7 @@ afs_readdir_move(de, vc, auio, slen, rlen, off)
     osi_FreeLargeSpace((char *)direntp);
 #else /* AFS_SUN5_ENV */
     /* Note the odd mechanism for building the inode number */
-    sdirEntry.d_fileno = (vc->fid.Fid.Volume << 16) + ntohl(de->fid.vnode);
+    sdirEntry.d_fileno = (Volume << 16) + ntohl(Vnode);
     FIXUPSTUPIDINODE(sdirEntry.d_fileno);
     sdirEntry.d_reclen = rlen;
 #if !defined(AFS_SGI_ENV)
@@ -641,8 +715,8 @@ afs_readdir(OSI_VC_ARG(avc), auio, acred)
        origOffset = auio->afsio_offset;
        /* scan for the next interesting entry scan for in-use blob otherwise up point at
         * this blob note that ode, if non-zero, also represents a held dir page */
-       if (!(us = BlobScan(&tdc->f, (origOffset >> 5)))
-           || !(nde = (struct DirEntry *)afs_dir_GetBlob(&tdc->f, us))) {
+       if (!(us = BlobScan(tdc, (origOffset >> 5)))
+           || !(nde = (struct DirEntry *)afs_dir_GetBlob(tdc, us))) {
            /* failed to setup nde, return what we've got, and release ode */
            if (len) {
                /* something to hand over. */
@@ -932,8 +1006,8 @@ afs1_readdir(avc, auio, acred)
 
        /* scan for the next interesting entry scan for in-use blob otherwise up point at
         * this blob note that ode, if non-zero, also represents a held dir page */
-       if (!(us = BlobScan(&tdc->f, (origOffset >> 5)))
-           || !(nde = (struct DirEntry *)afs_dir_GetBlob(&tdc->f, us))) {
+       if (!(us = BlobScan(tdc, (origOffset >> 5)))
+           || !(nde = (struct DirEntry *)afs_dir_GetBlob(tdc, us))) {
            /* failed to setup nde, return what we've got, and release ode */
            if (len) {
                /* something to hand over. */
index 70521a5ae920192cd273f38e708933f66bbac786..409bd8b045d45f98070d68de4345a4d509ef8e7a 100644 (file)
@@ -23,7 +23,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_remove.c,v 1.31.2.2 2004/10/18 17:43:53 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_remove.c,v 1.31.2.3 2004/11/09 17:15:04 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -154,10 +154,10 @@ afsremove(register struct vcache *adp, register struct dcache *tdc,
        UpgradeSToWLock(&tdc->lock, 637);
     if (afs_LocalHero(adp, tdc, &OutDirStatus, 1)) {
        /* we can do it locally */
-       code = afs_dir_Delete(&tdc->f, aname);
+       code = afs_dir_Delete(tdc, aname);
        if (code) {
            ZapDCE(tdc);        /* surprise error -- invalid value */
-           DZap(&tdc->f);
+           DZap(tdc);
        }
     }
     if (tdc) {
@@ -357,7 +357,7 @@ afs_remove(OSI_VC_ARG(adp), aname, acred)
      * done the work */
     if (!tvc)
        if (tdc) {
-           code = afs_dir_Lookup(&tdc->f, aname, &unlinkFid.Fid);
+           code = afs_dir_Lookup(tdc, aname, &unlinkFid.Fid);
            if (code == 0) {
                afs_int32 cached = 0;
 
index b23fc3eeb0f1a2bc514a6a5e61e14f5e3bf278cf..2fa7af9afa08986a3fa95448014146e7dcdcf8b9 100644 (file)
@@ -18,7 +18,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_rename.c,v 1.16.2.2 2004/10/18 17:43:53 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_rename.c,v 1.16.2.3 2004/11/09 17:15:04 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -146,7 +146,7 @@ afsrename(struct vcache *aodp, char *aname1, struct vcache *andp,
     }
 
     if (code == 0)
-       code = afs_dir_Lookup(&tdc1->f, aname1, &fileFid.Fid);
+       code = afs_dir_Lookup(tdc1, aname1, &fileFid.Fid);
     if (code) {
        if (tdc1) {
            ReleaseWriteLock(&tdc1->lock);
@@ -205,38 +205,38 @@ afsrename(struct vcache *aodp, char *aname1, struct vcache *andp,
            if (!doLocally) {
                if (tdc1) {
                    ZapDCE(tdc1);
-                   DZap(&tdc1->f);
+                   DZap(tdc1);
                }
                if (tdc2) {
                    ZapDCE(tdc2);
-                   DZap(&tdc2->f);
+                   DZap(tdc2);
                }
            }
        }
        /* now really do the work */
        if (doLocally) {
            /* first lookup the fid of the dude we're moving */
-           code = afs_dir_Lookup(&tdc1->f, aname1, &fileFid.Fid);
+           code = afs_dir_Lookup(tdc1, aname1, &fileFid.Fid);
            if (code == 0) {
                /* delete the source */
-               code = afs_dir_Delete(&tdc1->f, aname1);
+               code = afs_dir_Delete(tdc1, aname1);
            }
            /* first see if target is there */
            if (code == 0
-               && afs_dir_Lookup(&tdc2->f, aname2,
+               && afs_dir_Lookup(tdc2, aname2,
                                  &unlinkFid.Fid) == 0) {
                /* target already exists, and will be unlinked by server */
-               code = afs_dir_Delete(&tdc2->f, aname2);
+               code = afs_dir_Delete(tdc2, aname2);
            }
            if (code == 0) {
-               code = afs_dir_Create(&tdc2->f, aname2, &fileFid.Fid);
+               code = afs_dir_Create(tdc2, aname2, &fileFid.Fid);
            }
            if (code != 0) {
                ZapDCE(tdc1);
-               DZap(&tdc1->f);
+               DZap(tdc1);
                if (!oneDir) {
                    ZapDCE(tdc2);
-                   DZap(&tdc2->f);
+                   DZap(tdc2);
                }
            }
        }
@@ -339,7 +339,7 @@ afsrename(struct vcache *aodp, char *aname1, struct vcache *andp,
            if (tdc1) {
                ObtainWriteLock(&tdc1->lock, 648);
                ZapDCE(tdc1);   /* mark as unknown */
-               DZap(&tdc1->f);
+               DZap(tdc1);
                ReleaseWriteLock(&tdc1->lock);
                afs_PutDCache(tdc1);    /* put it back */
            }
index 1710bc4e029f3f23e33eb40bc1a84e449336e4b6..d0adc8b57fbe9fc033c416eb52cbc4c8ba9ef42a 100644 (file)
@@ -22,7 +22,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_symlink.c,v 1.19.2.2 2004/10/18 17:43:53 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_symlink.c,v 1.19.2.3 2004/11/09 17:15:04 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -184,10 +184,10 @@ int afs_symlink
     /* otherwise, we should see if we can make the change to the dir locally */
     if (afs_LocalHero(adp, tdc, &OutDirStatus, 1)) {
        /* we can do it locally */
-       code = afs_dir_Create(&tdc->f, aname, &newFid.Fid);
+       code = afs_dir_Create(tdc, aname, &newFid.Fid);
        if (code) {
            ZapDCE(tdc);        /* surprise error -- use invalid value */
-           DZap(&tdc->f);
+           DZap(tdc);
        }
     }
     if (tdc) {
index 334277dd4aa96c8ca36a82cc225b8c196d27b99d..c5105aac85bab477a17b6415e6291043d9b58363 100644 (file)
@@ -1195,7 +1195,7 @@ struct afs_fakestat_state {
 extern int afs_fakestat_enable;
 
 struct buffer {
-    struct fcache *fid;
+    struct dcache *fid;
     afs_int32 page;
     afs_int32 accesstime;
     struct buffer *hashNext;
index fdf1e5cf386bf4056c544f335d26016728f76eff..c193fe2e1eacabebd80dc258175aa0208f74650c 100644 (file)
@@ -11,7 +11,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/afs_buffer.c,v 1.16.2.1 2004/10/18 07:11:45 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/afs_buffer.c,v 1.16.2.2 2004/11/09 17:14:57 shadow Exp $");
 
 #include "afs/sysincludes.h"
 #include "afsincludes.h"
@@ -63,7 +63,7 @@ RCSID
 /* page hash table size - this is pretty intertwined with pHash */
 #define PHSIZE (PHPAGEMASK + PHFIDMASK + 1)
 /* the pHash macro */
-#define pHash(fid,page) ((((afs_int32)((fid)->inode)) & PHFIDMASK) \
+#define pHash(fid,page) ((((afs_int32)((fid)->f.inode)) & PHFIDMASK) \
                         | (page & PHPAGEMASK))
 
 #ifdef dirty
@@ -88,7 +88,7 @@ static int nbuffers;
 static afs_int32 timecounter;
 
 /* Prototypes for static routines */
-static struct buffer *afs_newslot(struct fcache * afid, afs_int32 apage,
+static struct buffer *afs_newslot(struct dcache * afid, afs_int32 apage,
                                  register struct buffer *lp);
 
 static int dinit_flag = 0;
@@ -150,7 +150,7 @@ DInit(int abuffers)
 }
 
 void *
-DRead(register struct fcache * fid, register int page)
+DRead(register struct dcache * fid, register int page)
 {
     /* Read a page from the disk. */
     register struct buffer *tb, *tb2;
@@ -224,13 +224,13 @@ DRead(register struct fcache * fid, register int page)
     MObtainWriteLock(&tb->lock, 260);
     MReleaseWriteLock(&afs_bufferLock);
     tb->lockers++;
-    if (page * AFS_BUFFER_PAGESIZE >= fid->chunkBytes) {
+    if (page * AFS_BUFFER_PAGESIZE >= fid->f.chunkBytes) {
        dirp_Zap(tb->fid);
        tb->lockers--;
        MReleaseWriteLock(&tb->lock);
        return NULL;
     }
-    tfile = afs_CFileOpen(fid->inode);
+    tfile = afs_CFileOpen(fid->f.inode);
     code =
        afs_CFileRead(tfile, tb->page * AFS_BUFFER_PAGESIZE, tb->data,
                      AFS_BUFFER_PAGESIZE);
@@ -273,7 +273,7 @@ FixupBucket(register struct buffer *ap)
 
 /* lp is pointer to a fairly-old buffer */
 static struct buffer *
-afs_newslot(struct fcache * afid, afs_int32 apage, register struct buffer *lp)
+afs_newslot(struct dcache * afid, afs_int32 apage, register struct buffer *lp)
 {
     /* Find a usable buffer slot */
     register afs_int32 i;
@@ -340,7 +340,7 @@ afs_newslot(struct fcache * afid, afs_int32 apage, register struct buffer *lp)
     }
 
     if (lp->dirty) {
-       tfile = afs_CFileOpen(lp->fid->inode);
+       tfile = afs_CFileOpen(lp->fid->f.inode);
        afs_CFileWrite(tfile, lp->page * AFS_BUFFER_PAGESIZE, lp->data,
                       AFS_BUFFER_PAGESIZE);
        lp->dirty = 0;
@@ -432,7 +432,7 @@ DVOffset(register void *ap)
  * method of DRead...
  */
 void
-DZap(struct fcache * fid)
+DZap(struct dcache * fid)
 {
     register int i;
     /* Destroy all buffers pertaining to a particular fid. */
@@ -469,7 +469,7 @@ DFlush(void)
            tb->lockers++;
            MReleaseReadLock(&afs_bufferLock);
            if (tb->dirty) {
-               tfile = afs_CFileOpen(tb->fid->inode);
+               tfile = afs_CFileOpen(tb->fid->f.inode);
                afs_CFileWrite(tfile, tb->page * AFS_BUFFER_PAGESIZE,
                               tb->data, AFS_BUFFER_PAGESIZE);
                tb->dirty = 0;  /* Clear the dirty flag */
@@ -484,7 +484,7 @@ DFlush(void)
 }
 
 void *
-DNew(register struct fcache * fid, register int page)
+DNew(register struct dcache * fid, register int page)
 {
     /* Same as read, only do *not* even try to read the page, since it probably doesn't exist. */
     register struct buffer *tb;
@@ -494,6 +494,11 @@ DNew(register struct fcache * fid, register int page)
        MReleaseWriteLock(&afs_bufferLock);
        return 0;
     }
+    /* extend the chunk, if needed */
+    if ((page + 1) * AFS_BUFFER_PAGESIZE > fid->f.chunkBytes) {
+        afs_AdjustSize(fid, (page + 1) * AFS_BUFFER_PAGESIZE);
+        afs_WriteDCache(fid, 1);
+    }
     MObtainWriteLock(&tb->lock, 265);
     MReleaseWriteLock(&afs_bufferLock);
     tb->lockers++;
index 858bdea7ef7bdf8b5167a8f8ac26270efcaa413c..c6605e4cf42266e4795c5ed9cd0b12cb5aeda1c2 100644 (file)
@@ -14,7 +14,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/afs_dcache.c,v 1.42.2.2 2004/10/18 17:43:49 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/afs_dcache.c,v 1.42.2.3 2004/11/09 17:14:57 shadow Exp $");
 
 #include "afs/sysincludes.h"   /*Standard vendor system headers */
 #include "afsincludes.h"       /*AFS-based standard headers */
@@ -686,7 +686,7 @@ afs_HashOutDCache(struct dcache *adc)
     AFS_STATCNT(afs_glink);
 #endif
     /* we know this guy's in the LRUQ.  We'll move dude into DCQ below */
-    DZap(&adc->f);
+    DZap(adc);
     /* if this guy is in the hash table, pull him out */
     if (adc->f.fid.Fid.Volume != 0) {
        /* remove entry from first hash chains */
@@ -2038,7 +2038,7 @@ afs_GetDCache(register struct vcache *avc, afs_size_t abyte,
         * Right now, we only have one tool, and it's a hammer.  So, we
         * fetch the whole file.
         */
-       DZap(&tdc->f);  /* pages in cache may be old */
+       DZap(tdc);      /* pages in cache may be old */
 #ifdef  IHINT
        if (file = tdc->ihint) {
            if (tdc->f.inode == file->inum)
@@ -2415,7 +2415,7 @@ afs_GetDCache(register struct vcache *avc, afs_size_t abyte,
            afs_CFileClose(file);
            ZapDCE(tdc);        /* sets DFEntryMod */
            if (vType(avc) == VDIR) {
-               DZap(&tdc->f);
+               DZap(tdc);
            }
            ReleaseWriteLock(&tdc->lock);
            afs_PutDCache(tdc);
index b4e93b47b307b7a0bc7c9b285dcdc5281e513efd..a90a41ab29ce33d0f2655cd211bad3f2bd93289b 100644 (file)
@@ -11,7 +11,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/afs_nfsdisp.c,v 1.18 2003/07/15 23:14:12 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/afs_nfsdisp.c,v 1.18.2.1 2004/11/09 17:18:18 shadow Exp $");
 
 /* Ugly Ugly Ugly  but precludes conflicting XDR macros; We want kernel xdr */
 #define __XDR_INCLUDE__
@@ -747,6 +747,13 @@ afs_nfs3_noaccess(struct afs_nfs3_resp *resp)
     resp->flags = FALSE;
 }
 
+void
+afs_nfs3_notsupp(struct afs_nfs3_resp *resp)
+{
+    resp->status = NFS3ERR_NOTSUPP;
+    resp->flags = FALSE;
+}
+
 afs_int32
 nfs3_to_afs_call(int which, caddr_t * args, nfs_fh3 ** fhpp, nfs_fh3 ** fh2pp)
 {
@@ -1370,6 +1377,8 @@ afs_nfs3_readdirplus(char *args, char *xp, char *exp, char *rp, char *crp)
                            crp);
     if (call > 1)
        afs_nfs3_noaccess((struct afs_nfs3_resp *)xp);
+    else if (call == 1)
+       afs_nfs3_notsupp((struct afs_nfs3_resp *)xp);
     else
        (*afs_rfs3_disp_tbl[NFSPROC3_READDIRPLUS].orig_proc) (args, xp, exp,
                                                              rp, crp);
index 6760c824d3dbaaa197197cb1116f2da7ee8696ab..b978da154c80fe9f11dcaa475fc3d811cfb07350 100644 (file)
@@ -23,7 +23,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/afs_osi_pag.c,v 1.21.2.1 2004/10/18 07:11:45 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/afs_osi_pag.c,v 1.21.2.2 2004/11/09 17:09:39 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #include "afsincludes.h"       /* Afs-based standard headers */
@@ -160,7 +160,7 @@ afs_pag_wait(struct AFS_UCRED **acred)
   if(afs_pag_sleep(acred)) {
     if(!afs_pag_sleepcnt) {
       printf("%s() PAG throttling triggered, pid %d... sleeping.  sleepcnt %d\n",
-            __func__, getpid(), afs_pag_sleepcnt);
+            "afs_pag_wait", getpid(), afs_pag_sleepcnt);
     }
     
     afs_pag_sleepcnt++;
index ab8fb38ca0f39559154884064a23703ac4b48c11..6b98bca28938fa745928e2af1d289acf1d73ac6c 100644 (file)
@@ -11,7 +11,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/afs_pioctl.c,v 1.81.2.2 2004/10/18 17:43:49 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/afs_pioctl.c,v 1.81.2.3 2004/11/09 17:14:57 shadow Exp $");
 
 #include "afs/sysincludes.h"   /* Standard vendor system headers */
 #ifdef AFS_OBSD_ENV
@@ -1717,7 +1717,7 @@ DECL_PIOCTL(PNewStatMount)
     Check_AtSys(avc, ain, &sysState, areq);
     ObtainReadLock(&tdc->lock);
     do {
-       code = afs_dir_Lookup(&tdc->f, sysState.name, &tfid.Fid);
+       code = afs_dir_Lookup(tdc, sysState.name, &tfid.Fid);
     } while (code == ENOENT && Next_AtSys(avc, areq, &sysState));
     ReleaseReadLock(&tdc->lock);
     afs_PutDCache(tdc);                /* we're done with the data */
@@ -2397,7 +2397,7 @@ DECL_PIOCTL(PRemoveMount)
     Check_AtSys(avc, ain, &sysState, areq);
     ObtainReadLock(&tdc->lock);
     do {
-       code = afs_dir_Lookup(&tdc->f, sysState.name, &tfid.Fid);
+       code = afs_dir_Lookup(tdc, sysState.name, &tfid.Fid);
     } while (code == ENOENT && Next_AtSys(avc, areq, &sysState));
     ReleaseReadLock(&tdc->lock);
     bufp = sysState.name;
@@ -2468,10 +2468,10 @@ DECL_PIOCTL(PRemoveMount)
        ObtainWriteLock(&tdc->lock, 661);
        if (afs_LocalHero(avc, tdc, &OutDirStatus, 1)) {
            /* we can do it locally */
-           code = afs_dir_Delete(&tdc->f, bufp);
+           code = afs_dir_Delete(tdc, bufp);
            if (code) {
                ZapDCE(tdc);    /* surprise error -- invalid value */
-               DZap(&tdc->f);
+               DZap(tdc);
            }
        }
        ReleaseWriteLock(&tdc->lock);
@@ -3503,7 +3503,7 @@ DECL_PIOCTL(PFlushMount)
     Check_AtSys(avc, ain, &sysState, areq);
     ObtainReadLock(&tdc->lock);
     do {
-       code = afs_dir_Lookup(&tdc->f, sysState.name, &tfid.Fid);
+       code = afs_dir_Lookup(tdc, sysState.name, &tfid.Fid);
     } while (code == ENOENT && Next_AtSys(avc, areq, &sysState));
     ReleaseReadLock(&tdc->lock);
     afs_PutDCache(tdc);                /* we're done with the data */
index a185eaf4e16aeb45da911a017f420540763e88c9..33464593c51b176edc56a8f7baf84fb47ca92332 100644 (file)
@@ -31,12 +31,12 @@ extern void afs_FreeAllAxs(struct axscache **headp);
 
 /* afs_buffer.c */
 extern void DInit(int abuffers);
-extern void *DRead(register struct fcache * fid, register int page);
+extern void *DRead(register struct dcache * fid, register int page);
 extern void DRelease(register struct buffer *bp, int flag);
 extern int DVOffset(register void *ap);
-extern void DZap(struct fcache * fid);
+extern void DZap(struct dcache * fid);
 extern void DFlush(void);
-extern void *DNew(register struct fcache * fid, register int page);
+extern void *DNew(register struct dcache * fid, register int page);
 extern void shutdown_bufferpackage(void);
 
 /* afs_call.c */
index b759abbc09529943f5119b41838d83d837206bba..a76b229a0706f03eb5087f2a315ecbb60cbbdf6c 100644 (file)
@@ -14,7 +14,7 @@
 #include "afs/param.h"
 
 RCSID
-    ("$Header: /cvs/openafs/src/afs/afs_segments.c,v 1.16.2.2 2004/10/18 17:43:50 shadow Exp $");
+    ("$Header: /cvs/openafs/src/afs/afs_segments.c,v 1.16.2.3 2004/11/09 17:14:57 shadow Exp $");
 
 #include "afs/sysincludes.h"   /*Standard vendor system headers */
 #include "afsincludes.h"       /*AFS-based standard headers */
@@ -898,7 +898,7 @@ afs_InvalidateAllSegments(struct vcache *avc)
        ObtainWriteLock(&tdc->lock, 679);
        ZapDCE(tdc);
        if (vType(avc) == VDIR)
-           DZap(&tdc->f);
+           DZap(tdc);
        ReleaseWriteLock(&tdc->lock);
        afs_PutDCache(tdc);
     }
index 5712e488cebda7ea317619aed0331974070d832c..24fcf675f976ed86f1db4e8aad7bf3f43f0dc7e8 100644 (file)
@@ -255,6 +255,19 @@ case $AFS_SYSNAME in
                SHLIB_LINKER="${MT_CC} -shared"
                ;;
 
+       ppc64_linux26)
+               KERN_OPTMZ=-O2
+               LEX="flex -l"
+               MT_CFLAGS='-DAFS_PTHREAD_ENV -pthread -D_REENTRANT ${XCFLAGS}'
+               MT_LIBS="-lpthread"
+               PAM_CFLAGS="-g -O2 -Dlinux -DLINUX_PAM -fPIC"
+               SHLIB_LDFLAGS="-shared -Xlinker -x"
+               TXLIBS="-lncurses"
+               XCFLAGS="-g -O2 -D_LARGEFILE64_SOURCE"
+               YACC="bison -y"
+               SHLIB_LINKER="${MT_CC} -shared"
+               ;;
+
        i386_umlinux22)
                CC="gcc -pipe"
                CCOBJ="gcc -pipe"
index feae260956f141f3580ade3f7e14405934c45372..59897addcfa7e901018428abc2c1e3d9838262ae 100644 (file)
@@ -80,7 +80,7 @@ LIB = $(AFSDEV_LIB)
 #define used in WinNT/2000 installation and program version display
 AFSPRODUCT_VER_MAJOR=1
 AFSPRODUCT_VER_MINOR=3
-AFSPRODUCT_VER_PATCH=7200
+AFSPRODUCT_VER_PATCH=7400
 AFSPRODUCT_VER_BUILD=0
 
 # For MSI installer, each major release should have a different GUID
index c50b1987d57e12ec9d0d1a1a34fbc3e929ab3e77..2c1fab3f7f707b3df1179cbf09162d5683e0d5fd 100644 (file)
@@ -3,17 +3,17 @@
 <plist version="1.0">
 <dict>
        <key>CFBundleGetInfoString</key>
-       <string>OpenAFS 1.2.10</string>
+       <string>OpenAFS 1.3.74</string>
        <key>CFBundleIdentifier</key>
        <string>org.openafs.OpenAFS.pkg</string>
        <key>CFBundleName</key>
        <string>OpenAFS</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.2.10</string>
+       <string>1.3.74</string>
        <key>IFMajorVersion</key>
        <integer>1</integer>
        <key>IFMinorVersion</key>
-       <integer>2</integer>
+       <integer>3</integer>
        <key>IFPkgFlagAllowBackRev</key>
        <false/>
        <key>IFPkgFlagAuthorizationAction</key>
index f587cac92330b12050410bb18b8afde2e96b0a95..805366ae0bfd035a504cce81f8599809ffe04922 100644 (file)
@@ -1,5 +1,5 @@
 Title OpenAFS
-Version 1.2.6
+Version 1.3.74
 Description The OpenAFS distributed filesystem. This package installs an almost-ready-to-run client for OpenAFS. see http://www.openafs.org for more information.
 DefaultLocation /
 Diskname (null)
index 08a7ac7eb17b008dcad2220e551498b63835ee04..82b4c6c3992ced9968360c1580e633da3c8646f4 100644 (file)
@@ -11,7 +11,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/rx/rx_getaddr.c,v 1.15.2.1 2004/10/18 07:12:06 shadow Exp $");
+    ("$Header: /cvs/openafs/src/rx/rx_getaddr.c,v 1.15.2.2 2004/11/09 17:16:12 shadow Exp $");
 
 #ifndef AFS_DJGPP_ENV
 #ifndef KERNEL
@@ -342,18 +342,22 @@ rx_getAllAddr_internal(afs_int32 buffer[], int maxSize, int loopbacks)
     for (cp = (char *)ifc.ifc_buf, cplim = ifc.ifc_buf + ifc.ifc_len;
         cp < cplim;
 #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
-        cp += _SIZEOF_ADDR_IFREQ(*ifr))
+        cp += _SIZEOF_ADDR_IFREQ(*ifr)
 #else
 #ifdef AFS_AIX51_ENV
-        cp = cpnext)
+        cp = cpnext
 #else
-        cp += sizeof(ifr->ifr_name) + MAX(a->sin_len, sizeof(*a)))
+        cp += sizeof(ifr->ifr_name) + MAX(a->sin_len, sizeof(*a))
 #endif
+#endif
+       ) 
+#else
+    for (i = 0; i < len; ++i) 
 #endif
     {
+#if    defined(AFS_AIX41_ENV) || defined (AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
        ifr = (struct ifreq *)cp;
 #else
-    for (i = 0; i < len; ++i) {
        ifr = &ifs[i];
 #endif
        a = (struct sockaddr_in *)&ifr->ifr_addr;
@@ -367,8 +371,12 @@ rx_getAllAddr_internal(afs_int32 buffer[], int maxSize, int loopbacks)
            continue;           /* ignore this address */
        }
        if (a->sin_addr.s_addr != 0) {
-           if (!loopbacks && (ifr->ifr_flags & IFF_LOOPBACK)) {
-               continue;       /* skip aliased loopbacks as well. */
+            if (!loopbacks) {
+                if (a->sin_addr.s_addr == htonl(0x7f000001)) 
+                   continue;   /* skip loopback address as well. */
+            } else {
+                if (ifr->ifr_flags & IFF_LOOPBACK) 
+                   continue;   /* skip aliased loopbacks as well. */
            }
            if (count >= maxSize)       /* no more space */
                printf("Too many interfaces..ignoring 0x%x\n",
index 7fcceb32067aa960c9b34b03962a380e8d4a4888..f4bbbc03a88da3b6ee06863acdf3798a44340ca0 100644 (file)
@@ -11,7 +11,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/sys/pioctl_nt.c,v 1.18.2.2 2004/10/18 17:44:02 shadow Exp $");
+    ("$Header: /cvs/openafs/src/sys/pioctl_nt.c,v 1.18.2.3 2004/11/05 19:21:58 jaltman Exp $");
 
 #include <afs/stds.h>
 #include <windows.h>
@@ -530,7 +530,7 @@ pioctl(char *pathp, long opcode, struct ViceIoctl *blobp, int follow)
        CloseHandle(reqHandle);
        errno = CMtoUNIXerror(temp);
         if ( IoctlDebug() )
-            fprintf(stderr, "pioctl temp != 0: %d\r\n",temp);
+            fprintf(stderr, "pioctl temp != 0: 0x%X\r\n",temp);
        return -1;
     }
 
index b69a66fe405154bf99b4c5c4a5eee1b850f5a397..3999b7014f940b1f0b0738cc57ea82878ea16c21 100644 (file)
@@ -366,7 +366,7 @@ extern afs_int32 ugen_ClientInit(int noAuthFlag, char *confDir, char *cellName,
                                 struct ubik_client **uclientp,
                                 int (*secproc) (), char *funcName, 
                                 afs_int32 gen_rxkad_level, 
-                                afs_int32 maxservers, afs_int32 serviceid, 
+                                afs_int32 maxservers, char *serviceid, 
                                 afs_int32 deadtime, afs_uint32 server, 
                                 afs_uint32 port, afs_int32 usrvid);
 
index dd53bc95e4764ccbd9dfe205a2a57a2bb149a724..7e91bbb4964b6258ceb8f15d217a1116c4abfc76 100644 (file)
@@ -11,7 +11,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/ubik/uinit.c,v 1.6.2.1 2004/10/18 07:12:16 shadow Exp $");
+    ("$Header: /cvs/openafs/src/ubik/uinit.c,v 1.6.2.2 2004/11/09 17:09:41 shadow Exp $");
 
 #include <afs/stds.h>
 #ifdef AFS_NT40_ENV
@@ -57,7 +57,7 @@ afs_int32
 ugen_ClientInit(int noAuthFlag, char *confDir, char *cellName, afs_int32 sauth,
               struct ubik_client **uclientp, int (*secproc) (),
               char *funcName, afs_int32 gen_rxkad_level, 
-              afs_int32 maxservers, afs_int32 serviceid, afs_int32 deadtime,
+              afs_int32 maxservers, char *serviceid, afs_int32 deadtime,
               afs_uint32 server, afs_uint32 port, afs_int32 usrvid)
 {
     afs_int32 code, scIndex, i;
index 523f46fb444bde05de8b894096b107386318b3f9..f4975c33da7d4432157aa0f0b87e301e675cb11b 100644 (file)
@@ -76,46 +76,46 @@ casestrcpy.o: ${srcdir}/casestrcpy.c ${includes}
        ${CCOBJ} ${CFLAGS} -c ${srcdir}/casestrcpy.c
 
 hputil.o: ${srcdir}/hputil.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/hputil.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/hputil.c
 
 flipbase64.o: ${srcdir}/flipbase64.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/flipbase64.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/flipbase64.c
 
 volparse.o: ${srcdir}/volparse.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/volparse.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/volparse.c
 
 snprintf.o: ${srcdir}/snprintf.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/snprintf.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/snprintf.c
 
 base64.o: ${srcdir}/base64.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/base64.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/base64.c
 
 hostparse.o: ${srcdir}/hostparse.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/hostparse.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/hostparse.c
 
 ktime.o: ${srcdir}/ktime.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/ktime.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/ktime.c
 
 kreltime.o: ${srcdir}/kreltime.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/kreltime.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/kreltime.c
 
 get_krbrlm.o: ${srcdir}/get_krbrlm.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/get_krbrlm.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/get_krbrlm.c
 
 uuid.o: ${srcdir}/uuid.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/uuid.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/uuid.c
 
 sys.o: ${srcdir}/sys.c AFS_component_version_number.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/sys.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/sys.c
 
 sys: sys.o 
        ${CC} ${LDFLAGS} -o sys sys.o
 
 isathing.o: ${srcdir}/isathing.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/isathing.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/isathing.c
 
 serverLog.o: ${srcdir}/serverLog.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/serverLog.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/serverLog.c
 
 dirpath.o: ${srcdir}/dirpath.c ${includes}
        ${CCOBJ} ${CFLAGS} -c ${srcdir}/dirpath.c
@@ -124,19 +124,19 @@ fileutil.o: ${srcdir}/fileutil.c ${includes}
        ${CCOBJ} ${CFLAGS} -c ${srcdir}/fileutil.c
 
 netutils.o: ${srcdir}/netutils.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/netutils.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/netutils.c
 
 afs_atomlist.o: ${srcdir}/afs_atomlist.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/afs_atomlist.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/afs_atomlist.c
 
 afs_lhash.o: ${srcdir}/afs_lhash.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/afs_lhash.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/afs_lhash.c
 
 strlcat.o: ${srcdir}/strlcat.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/strlcat.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/strlcat.c
 
 strlcpy.o: ${srcdir}/strlcpy.c ${includes}
-       ${CC} ${CFLAGS} -c ${srcdir}/strlcpy.c
+       ${CCOBJ} ${CFLAGS} -c ${srcdir}/strlcpy.c
 
 #
 # Install targets
index b6427a3883aa4c4374288ec29bc68c056d023205..52479c24a846ddf48dfd6589f082c04e68698130 100644 (file)
@@ -325,3 +325,9 @@ daddr_t n_cont;                     /* number of continuation inodes seen */
 #define fs_link         fs_unused[0]
 #define fs_rlink        fs_unused[1]
 #endif /* AFS_HPUX110_ENV */
+
+#ifdef AFS_SUN59_ENV
+/* diskaddr_t is longlong */
+int bread(int fd, char *buf, diskaddr_t blk, long size);
+int bwrite(int fd, char *buf,  diskaddr_t blk, long size);
+#endif
index 19a73a248aae40d37d12e1eb9b77fe61badf33f4..7770910d2392bfe5d9681683c47bd5038ec61ab2 100644 (file)
@@ -19,7 +19,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/vfsck/utilities.c,v 1.5 2003/07/15 23:17:27 shadow Exp $");
+    ("$Header: /cvs/openafs/src/vfsck/utilities.c,v 1.5.2.1 2004/11/09 17:18:48 shadow Exp $");
 
 #include <sys/param.h>
 #define VICE                   /* allow us to put our changes in at will */
@@ -388,7 +388,11 @@ ckfini()
 bread(fd, buf, blk, size)
      int fd;
      char *buf;
+#ifdef AFS_SUN59_ENV
+     diskaddr_t blk;
+#else
      daddr_t blk;
+#endif
      long size;
 {
     char *cp;
@@ -451,7 +455,11 @@ bread(fd, buf, blk, size)
 bwrite(fd, buf, blk, size)
      int fd;
      char *buf;
+#ifdef AFS_SUN59_ENV
+     diskaddr_t blk;
+#else
      daddr_t blk;
+#endif
      long size;
 {
     int i, n;
index 9b9dec5751e96747e5d5451d996202359e75e624..ee5b2a4500e0db57b8c5bcf14706d655f0fb5f04 100644 (file)
@@ -29,7 +29,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/viced/afsfileprocs.c,v 1.81 2004/06/02 08:23:39 shadow Exp $");
+    ("$Header: /cvs/openafs/src/viced/afsfileprocs.c,v 1.81.2.1 2004/10/28 20:47:23 shadow Exp $");
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -2732,6 +2732,7 @@ SRXAFS_InlineBulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
                              &rights, &anyrights))) {
            tstatus = &OutStats->AFSBulkStats_val[i];
            tstatus->errorCode = errorCode;
+           PutVolumePackage(parentwhentargetnotdir, targetptr, (Vnode *) 0, volptr);
            parentwhentargetnotdir = (Vnode *) 0;
            targetptr = (Vnode *) 0;
            volptr = (Volume *) 0;
index e28fca63d50b5fa059bb4bcfdb8b7eaac123cc01..585f8aa04f388d31576a9ca4b3823efab5120805 100644 (file)
@@ -83,7 +83,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/viced/callback.c,v 1.55.2.1 2004/10/18 07:12:22 shadow Exp $");
+    ("$Header: /cvs/openafs/src/viced/callback.c,v 1.55.2.4 2004/11/09 17:17:49 shadow Exp $");
 
 #include <stdio.h>
 #include <stdlib.h>            /* for malloc() */
@@ -572,6 +572,7 @@ XCallBackBulk_r(struct host * ahost, struct AFSFid * fids, afs_int32 nfids)
     struct AFSCBs tc;
     int code;
     int j;
+    struct rx_connection *cb_conn = NULL;
 
 #ifdef ADAPT_MTU
     rx_SetConnDeadTime(ahost->callback_rxcon, 4);
@@ -594,8 +595,12 @@ XCallBackBulk_r(struct host * ahost, struct AFSFid * fids, afs_int32 nfids)
        tc.AFSCBs_len = i;
        tc.AFSCBs_val = tcbs;
 
+       cb_conn = ahost->callback_rxcon;
+       rx_GetConnection(cb_conn);
        H_UNLOCK;
-       code |= RXAFSCB_CallBack(ahost->callback_rxcon, &tf, &tc);
+       code |= RXAFSCB_CallBack(cb_conn, &tf, &tc);
+       rx_PutConnection(cb_conn);
+       cb_conn = NULL;
        H_LOCK;
     }
 
@@ -855,11 +860,20 @@ MultiBreakCallBack_r(struct cbstruct cba[], int ncbas,
        struct host *hp;
        hp = cba[i].hp;
        if (hp && xhost != hp) {
-           rx_PutConnection(hp->callback_rxcon);
            h_Release_r(hp);
        }
     }
 
+    /* H_UNLOCK around this so h_FreeConnection does not deadlock.
+       h_FreeConnection should *never* be called on a callback connection,
+       but on 10/27/04 a deadlock occurred where it was, when we know why,
+       this should be reverted. -- shadow */
+    H_UNLOCK;
+    for (i = 0; i < j; i++) {
+       rx_PutConnection(conns[i]);
+    }
+    H_LOCK;
+
     return;
 }
 
@@ -1076,21 +1090,24 @@ BreakDelayedCallBacks_r(struct host *host)
     struct CallBack *cb;
     int code;
     char hoststr[16];
+    struct rx_connection *cb_conn;
 
     cbstuff.nbreakers++;
     if (!(host->hostFlags & RESETDONE) && !(host->hostFlags & HOSTDELETED)) {
        host->hostFlags &= ~ALTADDR;    /* alterrnate addresses are invalid */
+       cb_conn = host->callback_rxcon;
+       rx_GetConnection(cb_conn);
        if (host->interface) {
            H_UNLOCK;
            code =
-               RXAFSCB_InitCallBackState3(host->callback_rxcon,
-                                          &FS_HostUUID);
-           H_LOCK;
+               RXAFSCB_InitCallBackState3(cb_conn, &FS_HostUUID);
        } else {
            H_UNLOCK;
-           code = RXAFSCB_InitCallBackState(host->callback_rxcon);
-           H_LOCK;
+           code = RXAFSCB_InitCallBackState(cb_conn);
        }
+       rx_PutConnection(cb_conn);
+       cb_conn = NULL;
+       H_LOCK;
        host->hostFlags |= ALTADDR;     /* alternate addresses are valid */
        if (code) {
            if (ShowProblems) {
@@ -1626,6 +1643,7 @@ ClearHostCallbacks_r(struct host *hp, int locked)
     int code;
     int held = 0;
     char hoststr[16];
+    struct rx_connection *cb_conn = NULL;
 
     ViceLog(5,
            ("GSS: Delete longest inactive host %s\n",
@@ -1661,16 +1679,19 @@ ClearHostCallbacks_r(struct host *hp, int locked)
     } else {
        /* host is up, try a call */
        hp->hostFlags &= ~ALTADDR;      /* alternate addresses are invalid */
+       cb_conn = hp->callback_rxcon;
+       rx_GetConnection(hp->callback_rxcon);
        if (hp->interface) {
            H_UNLOCK;
            code =
-               RXAFSCB_InitCallBackState3(hp->callback_rxcon, &FS_HostUUID);
-           H_LOCK;
+               RXAFSCB_InitCallBackState3(cb_conn, &FS_HostUUID);
        } else {
            H_UNLOCK;
-           code = RXAFSCB_InitCallBackState(hp->callback_rxcon);
-           H_LOCK;
+           code = RXAFSCB_InitCallBackState(cb_conn);
        }
+       rx_PutConnection(cb_conn);
+       cb_conn = NULL;
+       H_LOCK;
        hp->hostFlags |= ALTADDR;       /* alternate addresses are valid */
        if (code) {
            /* failed, mark host down and need reset */
index 8e4fc822097d17f3bd6b2fcaa0a9eb87ce72c6df..ed15b32c6eefafa6db4f9c8195ab8b9c2dcb1b3a 100644 (file)
@@ -11,7 +11,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/viced/host.c,v 1.57.2.1 2004/10/18 07:12:22 shadow Exp $");
+    ("$Header: /cvs/openafs/src/viced/host.c,v 1.57.2.2 2004/11/09 17:17:49 shadow Exp $");
 
 #include <stdio.h>
 #include <errno.h>
@@ -947,6 +947,7 @@ h_GetHost_r(struct rx_connection *tcon)
     afs_int32 hport;
     char hoststr[16], hoststr2[16];
     Capabilities caps;
+    struct rx_connection *cb_conn = NULL;
 
     caps.Capabilities_val = NULL;
 
@@ -979,11 +980,15 @@ h_GetHost_r(struct rx_connection *tcon)
            goto retry;
        }
        host->hostFlags &= ~ALTADDR;
+       cb_conn = host->callback_rxcon;
+       rx_GetConnection(cb_conn);
        H_UNLOCK;
        code =
-           RXAFSCB_TellMeAboutYourself(host->callback_rxcon, &interf, &caps);
+           RXAFSCB_TellMeAboutYourself(cb_conn, &interf, &caps);
        if (code == RXGEN_OPCODE)
-           code = RXAFSCB_WhoAreYou(host->callback_rxcon, &interf);
+           code = RXAFSCB_WhoAreYou(cb_conn, &interf);
+       rx_PutConnection(cb_conn);
+       cb_conn=NULL;
        H_LOCK;
        if (code == RXGEN_OPCODE) {
            identP = (struct Identity *)malloc(sizeof(struct Identity));
@@ -1098,12 +1103,15 @@ h_GetHost_r(struct rx_connection *tcon)
        h_gethostcps_r(host, FT_ApproxTime());
        if (!(host->Console & 1)) {
            int pident = 0;
+           cb_conn = host->callback_rxcon;
+           rx_GetConnection(cb_conn);
            H_UNLOCK;
            code =
-               RXAFSCB_TellMeAboutYourself(host->callback_rxcon, &interf,
-                                           &caps);
+               RXAFSCB_TellMeAboutYourself(cb_conn, &interf, &caps);
            if (code == RXGEN_OPCODE)
-               code = RXAFSCB_WhoAreYou(host->callback_rxcon, &interf);
+               code = RXAFSCB_WhoAreYou(cb_conn, &interf);
+           rx_PutConnection(cb_conn);
+           cb_conn=NULL;
            H_LOCK;
            if (code == RXGEN_OPCODE) {
                if (!identP)
@@ -1146,8 +1154,12 @@ h_GetHost_r(struct rx_connection *tcon)
                         ntohs(host->port)));
            }
            if (code == 0 && !identP->valid) {
+               cb_conn = host->callback_rxcon;
+               rx_GetConnection(cb_conn);
                H_UNLOCK;
-               code = RXAFSCB_InitCallBackState(host->callback_rxcon);
+               code = RXAFSCB_InitCallBackState(cb_conn);
+               rx_PutConnection(cb_conn);
+               cb_conn=NULL;
                H_LOCK;
            } else if (code == 0) {
                oldHost = h_LookupUuid_r(&identP->uuid);
@@ -1172,10 +1184,14 @@ h_GetHost_r(struct rx_connection *tcon)
                } else {
                    /* This really is a new host */
                    hashInsertUuid_r(&identP->uuid, host);
+                   cb_conn = host->callback_rxcon;
+                   rx_GetConnection(cb_conn);          
                    H_UNLOCK;
                    code =
-                       RXAFSCB_InitCallBackState3(host->callback_rxcon,
+                       RXAFSCB_InitCallBackState3(cb_conn,
                                                   &FS_HostUUID);
+                   rx_PutConnection(cb_conn);
+                   cb_conn=NULL;
                    H_LOCK;
                    if (code == 0) {
                        ViceLog(25,
@@ -2043,6 +2059,7 @@ int
 CheckHost(register struct host *host, int held)
 {
     register struct client *client;
+    struct rx_connection *cb_conn = NULL;
     int code;
 
     /* Host is held by h_Enumerate */
@@ -2055,6 +2072,8 @@ CheckHost(register struct host *host, int held)
     }
     if (host->LastCall < checktime) {
        h_Lock_r(host);
+       cb_conn = host->callback_rxcon;
+       rx_GetConnection(cb_conn);
        if (!(host->hostFlags & HOSTDELETED)) {
            if (host->LastCall < clientdeletetime) {
                host->hostFlags |= HOSTDELETED;
@@ -2063,13 +2082,13 @@ CheckHost(register struct host *host, int held)
                    if (host->interface) {
                        H_UNLOCK;
                        code =
-                           RXAFSCB_InitCallBackState3(host->callback_rxcon,
+                           RXAFSCB_InitCallBackState3(cb_conn,
                                                       &FS_HostUUID);
                        H_LOCK;
                    } else {
                        H_UNLOCK;
                        code =
-                           RXAFSCB_InitCallBackState(host->callback_rxcon);
+                           RXAFSCB_InitCallBackState(cb_conn);
                        H_LOCK;
                    }
                    host->hostFlags |= ALTADDR; /* alternate addresses valid */
@@ -2093,7 +2112,7 @@ CheckHost(register struct host *host, int held)
                    if (host->interface) {
                        afsUUID uuid = host->interface->uuid;
                        H_UNLOCK;
-                       code = RXAFSCB_ProbeUuid(host->callback_rxcon, &uuid);
+                       code = RXAFSCB_ProbeUuid(cb_conn, &uuid);
                        H_LOCK;
                        if (code) {
                            if (MultiProbeAlternateAddress_r(host)) {
@@ -2107,7 +2126,7 @@ CheckHost(register struct host *host, int held)
                        }
                    } else {
                        H_UNLOCK;
-                       code = RXAFSCB_Probe(host->callback_rxcon);
+                       code = RXAFSCB_Probe(cb_conn);
                        H_LOCK;
                        if (code) {
                            char hoststr[16];
@@ -2121,6 +2140,10 @@ CheckHost(register struct host *host, int held)
                }
            }
        }
+       H_UNLOCK;
+       rx_PutConnection(cb_conn);
+       cb_conn=NULL;
+       H_LOCK;
        h_Unlock_r(host);
     }
     H_UNLOCK;
index 7b7a9c19172ae355081b67357a51b63a7c3438ed..418eba7790c1ae053efcf44ec543d3cd08a6ca17 100644 (file)
@@ -13,7 +13,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/vol/namei_ops.c,v 1.21.2.2 2004/10/18 17:44:06 shadow Exp $");
+    ("$Header: /cvs/openafs/src/vol/namei_ops.c,v 1.21.2.3 2004/11/09 17:16:40 shadow Exp $");
 
 #ifdef AFS_NAMEI_ENV
 #include <stdio.h>
@@ -229,7 +229,8 @@ namei_HandleToName(namei_t * name, IHandle_t * ih)
  * name space.
  */
 #define VICE_README "These files and directories are a part of the AFS \
-namespace. Modifying them\nin any way will result in loss of AFS data.\n"
+namespace. Modifying them\nin any way will result in loss of AFS data,\n\
+ownership and permissions included.\n"
 int
 namei_ViceREADME(char *partition)
 {
index f5f65926ebc4219a9734676afe226427380e4718..3066720c647447a08629f3d9adde7b968460a38b 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.41.2.2 2004/10/18 17:44:06 shadow Exp $");
+    ("$Header: /cvs/openafs/src/vol/vol-salvage.c,v 1.41.2.3 2004/11/09 17:20:26 shadow Exp $");
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -1589,7 +1589,8 @@ GetInodeSummary(char *path, VolumeId singleVolumeNumber)
     }
     if (!canfork || debug || Fork() == 0) {
        int nInodes;
-       nInodes = status.st_size / sizeof(struct ViceInodeInfo);
+       unsigned long st_size=(unsigned long) status.st_size;
+       nInodes = st_size / sizeof(struct ViceInodeInfo);
        if (nInodes == 0) {
            fclose(summaryFile);
            close(inodeFd);
@@ -1598,7 +1599,7 @@ GetInodeSummary(char *path, VolumeId singleVolumeNumber)
                RemoveTheForce(fileSysPath);
            else {
                struct VolumeSummary *vsp;
-               int i, j;
+               int i;
 
                GetVolumeSummary(singleVolumeNumber);
 
@@ -1611,7 +1612,7 @@ GetInodeSummary(char *path, VolumeId singleVolumeNumber)
                singleVolumeNumber ? "No applicable" : "No", dev);
            return -1;
        }
-       ip = (struct ViceInodeInfo *)malloc(status.st_size);
+       ip = (struct ViceInodeInfo *)malloc(nInodes*sizeof(struct ViceInodeInfo));
        if (ip == NULL) {
            fclose(summaryFile);
            close(inodeFd);
@@ -1621,7 +1622,7 @@ GetInodeSummary(char *path, VolumeId singleVolumeNumber)
                ("Unable to allocate enough space to read inode table; %s not salvaged\n",
                 dev);
        }
-       if (read(inodeFd, ip, status.st_size) != status.st_size) {
+       if (read(inodeFd, ip, st_size) != st_size) {
            fclose(summaryFile);
            close(inodeFd);
            unlink(path);
@@ -1630,7 +1631,7 @@ GetInodeSummary(char *path, VolumeId singleVolumeNumber)
        }
        qsort(ip, nInodes, sizeof(struct ViceInodeInfo), CompareInodes);
        if (afs_lseek(inodeFd, 0, SEEK_SET) == -1
-           || write(inodeFd, ip, status.st_size) != status.st_size) {
+           || write(inodeFd, ip, st_size) != st_size) {
            fclose(summaryFile);
            close(inodeFd);
            unlink(path);
@@ -1673,14 +1674,16 @@ GetInodeSummary(char *path, VolumeId singleVolumeNumber)
     assert(afs_fstat(fileno(summaryFile), &status) != -1);
     if (status.st_size != 0) {
        int ret;
-       inodeSummary = (struct InodeSummary *)malloc(status.st_size);
+       unsigned long st_status=(unsigned long)status.st_size;
+       inodeSummary = (struct InodeSummary *)malloc(st_status);
        assert(inodeSummary != NULL);
        /* For GNU we need to do lseek to get the file pointer moved. */
        assert(afs_lseek(fileno(summaryFile), 0, SEEK_SET) == 0);
-       ret = read(fileno(summaryFile), inodeSummary, status.st_size);
-       assert(ret == status.st_size);
+       ret = read(fileno(summaryFile), inodeSummary, st_status);
+       assert(ret == st_status);
     }
-    nVolumesInInodeFile = status.st_size / sizeof(struct InodeSummary);
+    nVolumesInInodeFile =(unsigned long)(status.st_size) / sizeof(struct InodeSummary);
+    Log("%d nVolumesInInodeFile %d \n",nVolumesInInodeFile,(unsigned long)(status.st_size));
     fclose(summaryFile);
     close(inodeFd);
     unlink(summaryFileName);
@@ -2026,6 +2029,7 @@ DoSalvageVolumeGroup(register struct InodeSummary *isp, int nVols)
 
     /* Fix actual inode counts */
     if (!Showmode) {
+       Log("totalInodes %d\n",totalInodes);
        for (ip = inodes; totalInodes; ip++, totalInodes--) {
            static int TraceBadLinkCounts = 0;
 #ifdef AFS_NAMEI_ENV
@@ -2061,6 +2065,8 @@ DoSalvageVolumeGroup(register struct InodeSummary *isp, int nVols)
                }
                ip->linkCount++;
            }
+
+          Log("%d inodes to process\n",totalInodes); 
        }
 #ifdef AFS_NAMEI_ENV
        while (dec_VGLinkH > 0) {
index 796d31cf401bcf04f10551536ea119a20f6c79e5..ad7b52a877f1aacd60145612489a56f483cbffca 100644 (file)
@@ -11,7 +11,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/volser/volprocs.c,v 1.34.2.1 2004/10/18 07:12:29 shadow Exp $");
+    ("$Header: /cvs/openafs/src/volser/volprocs.c,v 1.34.2.2 2004/11/09 17:13:45 shadow Exp $");
 
 #include <stdio.h>
 #include <sys/types.h>
@@ -1540,6 +1540,10 @@ VolSetInfo(struct rx_call *acid, afs_int32 atrans,
        td->maxquota = astatus->maxquota;
     if (astatus->dayUse != -1)
        td->dayUse = astatus->dayUse;
+    if (astatus->creationDate != -1)
+       td->creationDate = astatus->creationDate;
+    if (astatus->updateDate != -1)
+       td->updateDate = astatus->updateDate;
     VUpdateVolume(&error, tv);
     tt->rxCallPtr = (struct rx_call *)0;
     if (TRELE(tt))
index 6d2de884398a01a16337ee4064de6a5c63dc2815..07c49c8a99d118d54f87e260026e3a22af8318ab 100644 (file)
@@ -17,6 +17,7 @@ struct nvldbentry;
 extern void MapPartIdIntoName(afs_int32 partId, char *partName);
 extern int yesprompt(char *str);
 extern int PrintError(char *msg, afs_int32 errcode);
+extern void init_volintInfo(struct volintInfo *vinfo);
 extern int UV_SetSecurity(register struct rx_securityClass *as,
                          afs_int32 aindex);
 extern struct rx_connection *UV_Bind(afs_int32 aserver, afs_int32 port);
index 1213db1b26e74a2a1b953da4a5a6182b9180ebac..02f367e93a75afa9188bd2802dd8c43a79ff7eab 100644 (file)
@@ -11,7 +11,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/volser/vos.c,v 1.40.2.1 2004/08/17 04:28:45 jaltman Exp $");
+    ("$Header: /cvs/openafs/src/volser/vos.c,v 1.40.2.2 2004/11/09 17:13:45 shadow Exp $");
 
 #include <sys/types.h>
 #ifdef AFS_NT40_ENV
@@ -499,11 +499,15 @@ DisplayFormat(pntr, server, part, totalOK, totalNotOK, totalBusy, fast,
                fprintf(STDOUT, "    Last Access %s",
                        ctime((time_t *) & pntr->accessDate));
 #endif
-           fprintf(STDOUT, "    Last Update %s",
-                   ctime((time_t *) & pntr->updateDate));
-           fprintf(STDOUT,
-                   "    %d accesses in the past day (i.e., vnode references)\n",
-                   pntr->dayUse);
+           if (!pntr->updateDate)
+               fprintf(STDOUT, "    Last Update Never\n");
+           else {
+               fprintf(STDOUT, "    Last Update %s",
+                       ctime((time_t *) & pntr->updateDate));
+               fprintf(STDOUT,
+                       "    %d accesses in the past day (i.e., vnode references)\n",
+                       pntr->dayUse);
+           }
        } else if (pntr->status == VBUSY) {
            *totalBusy += 1;
            qPut(&busyHead, pntr->volid);
@@ -652,11 +656,15 @@ XDisplayFormat(a_xInfoP, a_servID, a_partID, a_totalOKP, a_totalNotOKP,
                fprintf(STDOUT, "    Last Access %s",
                        ctime((time_t *) & a_xInfoP->accessDate));
 #endif
-           fprintf(STDOUT, "    Last Update %s",
-                   ctime((time_t *) & a_xInfoP->updateDate));
-           fprintf(STDOUT,
-                   "    %d accesses in the past day (i.e., vnode references)\n",
-                   a_xInfoP->dayUse);
+           if (!a_xInfoP->updateDate)
+               fprintf(STDOUT, "    Last Update Never\n");
+           else {
+               fprintf(STDOUT, "    Last Update %s",
+                       ctime((time_t *) & a_xInfoP->updateDate));
+               fprintf(STDOUT,
+                       "    %d accesses in the past day (i.e., vnode references)\n",
+                       a_xInfoP->dayUse);
+           }
 
            /*
             * Print all the read/write and authorship stats.
@@ -1388,16 +1396,9 @@ SetFields(as)
        return (ENOENT);
     }
 
-    memset(&info, 0, sizeof(info));
+    init_volintInfo(&info);
     info.volid = volid;
     info.type = RWVOL;
-    info.dayUse = -1;
-    info.maxquota = -1;
-    info.flags = -1;
-    info.spare0 = -1;
-    info.spare1 = -1;
-    info.spare2 = -1;
-    info.spare3 = -1;
 
     if (as->parms[1].items) {
        /* -max <quota> */
index 5ae87bc158e96ea80768bc4356f5257a4ad21941..907458333041561142a9257892d65ca6168564e2 100644 (file)
@@ -11,7 +11,7 @@
 #include <afs/param.h>
 
 RCSID
-    ("$Header: /cvs/openafs/src/volser/vsprocs.c,v 1.33 2004/07/29 03:44:08 shadow Exp $");
+    ("$Header: /cvs/openafs/src/volser/vsprocs.c,v 1.33.2.1 2004/11/09 17:13:45 shadow Exp $");
 
 #include <stdio.h>
 #include <sys/types.h>
@@ -406,6 +406,19 @@ PrintError(char *msg, afs_int32 errcode)
     return 0;
 }
 
+void init_volintInfo(struct volintInfo *vinfo) {
+    memset(vinfo, 0, sizeof(struct volintInfo));
+
+    vinfo->maxquota = -1;
+    vinfo->dayUse = -1;
+    vinfo->creationDate = -1;
+    vinfo->updateDate = -1;
+    vinfo->flags = -1;
+    vinfo->spare0 = -1;
+    vinfo->spare1 = -1;
+    vinfo->spare2 = -1;
+    vinfo->spare3 = -1;
+}
 
 static struct rx_securityClass *uvclass = 0;
 static int uvindex = -1;
@@ -624,8 +637,8 @@ UV_CreateVolume2(afs_int32 aserver, afs_int32 apart, char *aname,
     tid = 0;
     aconn = (struct rx_connection *)0;
     error = 0;
-    memset(&tstatus, 0, sizeof(struct volintInfo));
-    tstatus.dayUse = -1;
+
+    init_volintInfo(&tstatus);
     tstatus.maxquota = aquota;
 
     aconn = UV_Bind(aserver, AFSCONF_VOLUMEPORT);
@@ -1338,6 +1351,8 @@ UV_MoveVolume2(afs_int32 afromvol, afs_int32 afromserver, afs_int32 afrompart,
 
     infop = (volintInfo *) volumeInfo.volEntries_val;
     infop->maxquota = -1;      /* Else it will replace the default quota */
+    infop->creationDate = -1;  /* Else it will use the source creation date */
+    infop->updateDate = -1;    /* Else it will use the source update date */
 #endif
 
     /* create a volume on the target machine */
@@ -4237,9 +4252,7 @@ UV_RestoreVolume(afs_int32 toserver, afs_int32 topart, afs_int32 tovolid,
        goto refail;
     }
 
-    memset(&vinfo, 0, sizeof(struct volintInfo));
-    vinfo.dayUse = -1;
-    vinfo.maxquota = -1;
+    init_volintInfo(&vinfo);
     vinfo.creationDate = newCreateDate;
     vinfo.updateDate = newUpdateDate;
     code = AFSVolSetInfo(toconn, totid, &vinfo);