Index: openafs/src/NTMakefile
diff -c openafs/src/NTMakefile:1.27.2.8 openafs/src/NTMakefile:1.27.2.9
*** openafs/src/NTMakefile:1.27.2.8	Tue Mar 11 13:02:04 2008
--- openafs/src/NTMakefile	Sat Jun 28 19:42:54 2008
***************
*** 18,23 ****
--- 18,24 ----
  
  # These three macros define the source, object, and destination folders
  SRC=$(AFSROOT)\src
+ DOC=$(AFSROOT)\doc
  
  #If AFS_OBJDIR is not defined then use obj as relative obj folder
  !IFNDEF AFS_OBJDIR
***************
*** 46,52 ****
  	$(NTMAKE)
  	$(CD) ..\..
  
! procmgmt_headers:config
       echo ***** $@
  	$(DOCD) $(SRC)\procmgmt
  	$(CD) $(SRC)\procmgmt
--- 47,60 ----
  	$(NTMAKE)
  	$(CD) ..\..
  
! man-pages: config
!      echo ***** $@
!         $(DOCD) $(DOC)\man-pages
!         $(CD) $(DOC)\man-pages
!         $(NTMAKE)
!         $(CD) ..\..
! 
! procmgmt_headers: man-pages
       echo ***** $@
  	$(DOCD) $(SRC)\procmgmt
  	$(CD) $(SRC)\procmgmt
***************
*** 65,71 ****
  	$(DOCD) $(SRC)\lwp
  	$(CD) $(SRC)\lwp
  	$(NTMAKE_HEADERS)
! 	$(CD) ..\..\..
  
  util: procmgmt_headers afsreg_headers lwp_headers
       echo ***** $@
--- 73,79 ----
  	$(DOCD) $(SRC)\lwp
  	$(CD) $(SRC)\lwp
  	$(NTMAKE_HEADERS)
! 	$(CD) ..\..
  
  util: procmgmt_headers afsreg_headers lwp_headers
       echo ***** $@
Index: openafs/src/ntbuild.bat
diff -c openafs/src/ntbuild.bat:1.18.4.1 openafs/src/ntbuild.bat:1.18.4.2
*** openafs/src/ntbuild.bat:1.18.4.1	Mon Apr 21 12:03:56 2008
--- openafs/src/ntbuild.bat	Fri May  9 11:10:10 2008
***************
*** 50,55 ****
--- 50,58 ----
  REM Location of WDK/DDK (8.3 short name)
  set NTDDKDIR=c:\progra~1\micros~5
  
+ REM Location of Microsoft IDN Normalization SDK
+ set MSIDNNLS=C:\progra~1\MI5913~1
+ 
  REM ########################################################################
  REM NTMakefile optional definitions:
  REM
***************
*** 110,116 ****
  
  set AFSDEV_BUILDTYPE=%AFSBLD_TYPE%
  
! set AFSDEV_INCLUDE=%MSSDKDIR%\include;%MSVCDIR%\include
  IF "%AFSVER_CL%" == "1400" set AFSDEV_INCLUDE=%AFSDEV_INCLUDE%;%MSVCDIR%\atlmfc\include
  IF "%AFSVER_CL%" == "1310" set AFSDEV_INCLUDE=%AFSDEV_INCLUDE%;%MSVCDIR%\atlmfc\include
  IF "%AFSVER_CL%" == "1300" set AFSDEV_INCLUDE=%AFSDEV_INCLUDE%;%MSVCDIR%\atlmfc\include
--- 113,119 ----
  
  set AFSDEV_BUILDTYPE=%AFSBLD_TYPE%
  
! set AFSDEV_INCLUDE=%MSSDKDIR%\include;%MSVCDIR%\include;%MSIDNNLS%\include
  IF "%AFSVER_CL%" == "1400" set AFSDEV_INCLUDE=%AFSDEV_INCLUDE%;%MSVCDIR%\atlmfc\include
  IF "%AFSVER_CL%" == "1310" set AFSDEV_INCLUDE=%AFSDEV_INCLUDE%;%MSVCDIR%\atlmfc\include
  IF "%AFSVER_CL%" == "1300" set AFSDEV_INCLUDE=%AFSDEV_INCLUDE%;%MSVCDIR%\atlmfc\include
Index: openafs/src/WINNT/afs_setup_utils/NTMakefile
diff -c openafs/src/WINNT/afs_setup_utils/NTMakefile:1.10 openafs/src/WINNT/afs_setup_utils/NTMakefile:1.10.4.1
*** openafs/src/WINNT/afs_setup_utils/NTMakefile:1.10	Sun Nov 20 20:55:59 2005
--- openafs/src/WINNT/afs_setup_utils/NTMakefile	Wed Jul  2 08:48:01 2008
***************
*** 81,88 ****
      $(DESTDIR)\lib\afs\afsutil.lib
  
  $(AFSRM_EXEFILE): $(AFSRM_EXEOBJS) $(AFSRM_EXELIBS)
!     $(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  
  ############################################################################
  
--- 81,89 ----
      $(DESTDIR)\lib\afs\afsutil.lib
  
  $(AFSRM_EXEFILE): $(AFSRM_EXEOBJS) $(AFSRM_EXELIBS)
!         $(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  
***************
*** 132,137 ****
--- 133,139 ----
      $(DLLGUILINK) -entry:DllEntryPoint /DEF:install_utils.def $(VCLIBS)
          $(_VC_MANIFEST_EMBED_DLL)
      $(DLLPREP)
+         $(CODESIGN_USERLAND)
      $(COPY) $*.lib $(ILIBDIR)
      $(DEL) $*.lib $*.exp
  
***************
*** 139,144 ****
--- 141,147 ----
      $(DLLGUILINK) -entry:DllEntryPoint /DEF:server_uninst.def $(VCLIBS)
          $(_VC_MANIFEST_EMBED_DLL)
      $(DLLPREP)
+         $(CODESIGN_USERLAND)
      $(COPY) $*.lib $(ILIBDIR)
      $(DEL) $*.lib $*.exp
  
***************
*** 146,151 ****
--- 149,155 ----
      $(DLLGUILINK) -entry:DllEntryPoint /DEF:client_uninst.def $(VCLIBS)
          $(_VC_MANIFEST_EMBED_DLL)
      $(DLLPREP)
+         $(CODESIGN_USERLAND)
      $(COPY) $*.lib $(ILIBDIR)
      $(DEL) $*.lib $*.exp
  
***************
*** 153,158 ****
--- 157,163 ----
      $(DLLGUILINK) -entry:DllEntryPoint /DEF:cc_uninst.def $(VCLIBS)
          $(_VC_MANIFEST_EMBED_DLL)
      $(DLLPREP)
+         $(CODESIGN_USERLAND)
      $(COPY) $*.lib $(ILIBDIR)
      $(DEL) $*.lib $*.exp
  
***************
*** 160,165 ****
--- 165,171 ----
      $(DLLGUILINK) -entry:DllEntryPoint /DEF:light_client_uninst.def $(VCLIBS)
          $(_VC_MANIFEST_EMBED_DLL)
      $(DLLPREP)
+         $(CODESIGN_USERLAND)
      $(COPY) $*.lib $(ILIBDIR)
      $(DEL) $*.lib $*.exp
  
***************
*** 167,172 ****
--- 173,179 ----
      $(DLLGUILINK) -entry:DllEntryPoint /DEF:docs_uninst.def $(VCLIBS)
          $(_VC_MANIFEST_EMBED_DLL)
      $(DLLPREP)
+         $(CODESIGN_USERLAND)
      $(COPY) $*.lib $(ILIBDIR)
      $(DEL) $*.lib $*.exp
  
Index: openafs/src/WINNT/afs_setup_utils/lang/NTMakefile
diff -c openafs/src/WINNT/afs_setup_utils/lang/NTMakefile:1.4 openafs/src/WINNT/afs_setup_utils/lang/NTMakefile:1.4.14.1
*** openafs/src/WINNT/afs_setup_utils/lang/NTMakefile:1.4	Fri Nov 21 02:59:38 2003
--- openafs/src/WINNT/afs_setup_utils/lang/NTMakefile	Wed Jul  2 08:48:03 2008
***************
*** 44,49 ****
--- 44,50 ----
  $(DLLFILE) : $(DLLOBJS)
  	$(DLLRESLINK)
  	$(DLLPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(DLLFILE)
  
Index: openafs/src/WINNT/afsadmsvr/NTMakefile
diff -c openafs/src/WINNT/afsadmsvr/NTMakefile:1.8.4.2 openafs/src/WINNT/afsadmsvr/NTMakefile:1.8.4.3
*** openafs/src/WINNT/afsadmsvr/NTMakefile:1.8.4.2	Tue Feb 12 08:32:48 2008
--- openafs/src/WINNT/afsadmsvr/NTMakefile	Wed Jul  2 08:48:05 2008
***************
*** 146,151 ****
--- 146,152 ----
  	$(EXECONLINK)  $(VCLIBS)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  install : \
  	$(IDLFILES) \
Index: openafs/src/WINNT/afsapplib/NTMakefile
diff -c openafs/src/WINNT/afsapplib/NTMakefile:1.12.4.1 openafs/src/WINNT/afsapplib/NTMakefile:1.12.4.2
*** openafs/src/WINNT/afsapplib/NTMakefile:1.12.4.1	Tue Feb 12 08:32:50 2008
--- openafs/src/WINNT/afsapplib/NTMakefile	Wed Jul  2 08:48:07 2008
***************
*** 129,134 ****
--- 129,135 ----
  	$(DLLGUILINK) $(LOCALLINKFLAGS) $(VCLIBS)
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  	$(COPY) $*.lib $(ILIBDIR)
  	$(DEL) $*.lib $*.exp
  
Index: openafs/src/WINNT/afsapplib/lang/NTMakefile
diff -c openafs/src/WINNT/afsapplib/lang/NTMakefile:1.6 openafs/src/WINNT/afsapplib/lang/NTMakefile:1.6.4.1
*** openafs/src/WINNT/afsapplib/lang/NTMakefile:1.6	Sun Nov 20 20:56:04 2005
--- openafs/src/WINNT/afsapplib/lang/NTMakefile	Wed Jul  2 08:48:11 2008
***************
*** 46,51 ****
--- 46,52 ----
  	$(DLLRESLINK)
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(DLLFILE)
  
Index: openafs/src/WINNT/afsapplib/test/NTMakefile
diff -c openafs/src/WINNT/afsapplib/test/NTMakefile:1.5 openafs/src/WINNT/afsapplib/test/NTMakefile:1.5.4.1
*** openafs/src/WINNT/afsapplib/test/NTMakefile:1.5	Sun Nov 20 20:56:05 2005
--- openafs/src/WINNT/afsapplib/test/NTMakefile	Wed Jul  2 08:48:12 2008
***************
*** 40,45 ****
--- 40,46 ----
  	$(EXEGUILINK) comctl32.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  test : $(EXEFILE)
  
Index: openafs/src/WINNT/afsd/NTMakefile
diff -c openafs/src/WINNT/afsd/NTMakefile:1.46.2.11 openafs/src/WINNT/afsd/NTMakefile:1.46.2.14
*** openafs/src/WINNT/afsd/NTMakefile:1.46.2.11	Wed Mar 19 09:59:29 2008
--- openafs/src/WINNT/afsd/NTMakefile	Wed Jul  2 08:48:12 2008
***************
*** 5,11 ****
  # License.  For details, see the LICENSE file in the top-level source
  # directory or online at http://www.openafs.org/dl/license10.html
  
! AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES) /D"_AFXDLL"  -I..\kfw\inc\loadfuncs -I..\kfw\inc\krb5 -I..\kfw\inc\leash
  AFSDEV_NETGUI = 1
  RELDIR=WINNT\afsd
  !INCLUDE ..\..\config\NTMakefile.$(SYS_NAME)
--- 5,11 ----
  # License.  For details, see the LICENSE file in the top-level source
  # directory or online at http://www.openafs.org/dl/license10.html
  
! AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES) /D"_AFXDLL"  -I..\kfw\inc\loadfuncs -I..\kfw\inc\krb5 -I..\kfw\inc\leash -DSMB_UNICODE
  AFSDEV_NETGUI = 1
  RELDIR=WINNT\afsd
  !INCLUDE ..\..\config\NTMakefile.$(SYS_NAME)
***************
*** 65,70 ****
--- 65,71 ----
  	$(INCFILEDIR)\cm_freelance.h \
          $(INCFILEDIR)\cm_memmap.h \
  	$(INCFILEDIR)\cm_performance.h \
+         $(INCFILEDIR)\cm_nls.h \
          $(INCFILEDIR)\afsd_eventlog.h \
          $(INCFILEDIR)\afsd_eventmessages.h \
          $(INCFILEDIR)\afskfw.h \
***************
*** 74,80 ****
  	afsrpc.h $(OUT)\afsrpc_c.obj
  
  CONFOBJS=$(OUT)\cm_config.obj \
!          $(OUT)\cm_dns.obj
  
  $(CONFOBJS):
  
--- 75,82 ----
  	afsrpc.h $(OUT)\afsrpc_c.obj
  
  CONFOBJS=$(OUT)\cm_config.obj \
!          $(OUT)\cm_dns.obj \
!          $(OUT)\cm_nls.obj
  
  $(CONFOBJS):
  
***************
*** 120,125 ****
--- 122,128 ----
  	$(OUT)\cm_rpc.obj \
          $(OUT)\cm_memmap.obj \
          $(OUT)\cm_performance.obj \
+         $(OUT)\cm_nls.obj \
  	$(OUT)\afsrpc_s.obj \
  !IFDEF OSICRASH
  	$(OUT)\afsdcrash.obj \
***************
*** 134,140 ****
  $(OUT)\cm_conn.obj: cm_conn.c
  	$(C2OBJ) -DAFS_PTHREAD_ENV /Fo$@ $**
  
! FSOBJS=$(OUT)\fs.obj $(OUT)\fs_utils.obj
  
  CMDBGOBJS=$(OUT)\cmdebug.obj
  
--- 137,144 ----
  $(OUT)\cm_conn.obj: cm_conn.c
  	$(C2OBJ) -DAFS_PTHREAD_ENV /Fo$@ $**
  
! FSOBJS=$(OUT)\fs.obj \
!        $(OUT)\fs_utils.obj
  
  CMDBGOBJS=$(OUT)\cmdebug.obj
  
***************
*** 188,193 ****
--- 192,198 ----
  	$(DLLGUILINK) -def:libafsconf.def dnsapi.lib mpr.lib shell32.lib
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  	$(COPY) $*.lib $(ILIBDIR)
  	$(DEL) $*.lib $*.exp
  
***************
*** 225,231 ****
  LOGON_DLLOBJS =\
      $(OUT)\afslogon.obj \
      $(OUT)\logon_ad.obj \
!     $(OUT)\afslogon.res
  
  LOGON_DLLLIBS =\
      $(DESTDIR)\lib\afsauthent.lib \
--- 230,237 ----
  LOGON_DLLOBJS =\
      $(OUT)\afslogon.obj \
      $(OUT)\logon_ad.obj \
!     $(OUT)\afslogon.res \
!     $(OUT)\cm_nls.obj
  
  LOGON_DLLLIBS =\
      $(DESTDIR)\lib\afsauthent.lib \
***************
*** 252,257 ****
--- 258,264 ----
  	$(DLLGUILINK) $(LOGONLINKFLAGS) -def:afslogon.def $(LOGON_DLLSDKLIBS)
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  	$(COPY) $*.lib $(DESTDIR)\lib
  	$(DEL) $*.lib $*.exp
  
***************
*** 277,284 ****
  ############################################################################
  # Install target; primary makefile target
  
! install_objs: $(OUT)\cm_dns.obj $(OUT)\cm_config.obj $(LANAHELPERLIB) $(OUT)\afsicf.obj
       $(COPY) $(OUT)\cm_dns.obj $(DESTDIR)\lib
       $(COPY) $(OUT)\cm_config.obj $(DESTDIR)\lib
       $(COPY) $(OUT)\afsicf.obj $(DESTDIR)\lib
  
--- 284,292 ----
  ############################################################################
  # Install target; primary makefile target
  
! install_objs: $(OUT)\cm_dns.obj $(OUT)\cm_config.obj $(OUT)\cm_nls.obj $(LANAHELPERLIB) $(OUT)\afsicf.obj
       $(COPY) $(OUT)\cm_dns.obj $(DESTDIR)\lib
+      $(COPY) $(OUT)\cm_nls.obj $(DESTDIR)\lib
       $(COPY) $(OUT)\cm_config.obj $(DESTDIR)\lib
       $(COPY) $(OUT)\afsicf.obj $(DESTDIR)\lib
  
***************
*** 336,342 ****
  	$(DESTDIR)\lib\afsrx.lib \
  	$(DESTDIR)\lib\afslwp.lib \
  	$(DESTDIR)\lib\libosi.lib \
! 	$(DESTDIR)\lib\libafsconf.lib
  
  EXELIBS2 = \
          $(DESTDIR)\lib\afsrpc.lib \
--- 344,351 ----
  	$(DESTDIR)\lib\afsrx.lib \
  	$(DESTDIR)\lib\afslwp.lib \
  	$(DESTDIR)\lib\libosi.lib \
! 	$(DESTDIR)\lib\libafsconf.lib \
!         $(DESTDIR)\lib\cm_nls.obj
  
  EXELIBS2 = \
          $(DESTDIR)\lib\afsrpc.lib \
***************
*** 357,380 ****
--- 366,393 ----
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  # tokens.exe
  $(EXEDIR)\tokens.exe: $(OUT)\ctokens.obj $(OUT)\tokens.res $(EXELIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  # unlog.exe
  $(EXEDIR)\unlog.exe: $(OUT)\cunlog.obj $(OUT)\unlog.res $(EXELIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  # afscpcc.exe
  $(EXEDIR)\afscpcc.exe: $(OUT)\afscpcc.obj $(OUT)\afscpcc.res $(LOGON_DLLLIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib userenv.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  
  # afsd.exe
***************
*** 410,451 ****
--- 423,471 ----
  	$(EXEGUILINK) $(AFSD_SDKLIBS)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  # afsd_service.exe
  $(EXEDIR)\afsd_service.exe: $(OUT)\afsd_service.obj $(AFSDOBJS) $(OUT)\afsd_service.res  $(RXOBJS) $(AFSD_EXELIBS)
  	$(EXECONLINK) $(AFSD_SDKLIBS) /MAP /LARGEADDRESSAWARE
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  # fs.exe
  $(EXEDIR)\fs.exe: $(FSOBJS) $(OUT)\fs.res $(EXELIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  # cmdebug.exe
  $(EXEDIR)\cmdebug.exe: $(CMDBGOBJS) $(OUT)\cmdebug.res $(EXELIBS2)
  	$(EXECONLINK) $(EXELIBS2) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib rpcrt4.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  # symlink.exe
  $(EXEDIR)\symlink.exe: $(SLOBJS) $(OUT)\symlink.res  $(EXELIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  # afsshare.exe
  $(EXEDIR)\afsshare.exe: $(OUT)\afsshare.obj $(OUT)\afsshare.res $(EXELIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  # afsdacl.exe
  $(EXEDIR)\afsdacl.exe: $(OUT)\afsdacl.obj $(OUT)\afsdacl.res
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  # kpasswd.exe - built in kauth, but rebuild here to make pthread-based,
  #    which is required for Windows 95.  At some point it would be nice
***************
*** 487,492 ****
--- 507,513 ----
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  
  ############################################################################
Index: openafs/src/WINNT/afsd/afsd.h
diff -c openafs/src/WINNT/afsd/afsd.h:1.18.2.8 openafs/src/WINNT/afsd/afsd.h:1.18.2.13
*** openafs/src/WINNT/afsd/afsd.h:1.18.2.8	Fri Mar  7 17:24:04 2008
--- openafs/src/WINNT/afsd/afsd.h	Thu Jun 26 12:38:29 2008
***************
*** 14,37 ****
  
  #include <afs/param.h>
  
- #ifndef DJGPP
  BOOL InitClass(HANDLE);
  BOOL InitInstance(HANDLE, int);
  
  LONG APIENTRY MainWndProc(HWND, unsigned int, unsigned int, long);
  BOOL APIENTRY About(HWND, unsigned int, unsigned int, long);
- #endif /* !DJGPP */
  
- #ifndef DJGPP
  #include <nb30.h>
- #else /* DJGPP */
- #include <sys/farptr.h>
- #include <go32.h>
- #include "dosdefs95.h"
- #include "largeint95.h"
- #endif /* !DJGPP */
  
  #include "cm.h"
  
  #include <osi.h>
  #include <afs/vldbint.h>
--- 14,29 ----
  
  #include <afs/param.h>
  
  BOOL InitClass(HANDLE);
  BOOL InitInstance(HANDLE, int);
  
  LONG APIENTRY MainWndProc(HWND, unsigned int, unsigned int, long);
  BOOL APIENTRY About(HWND, unsigned int, unsigned int, long);
  
  #include <nb30.h>
  
  #include "cm.h"
+ #include "cm_nls.h"
  
  #include <osi.h>
  #include <afs/vldbint.h>
***************
*** 53,61 ****
  #include "cm_volume.h"
  #include "cm_dcache.h"
  #include "cm_access.h"
  #include "cm_utils.h"
  #include "cm_vnodeops.h"
! #include "cm_dir.h"
  #include "cm_daemon.h"
  #include "cm_ioctl.h"
  #include "cm_dnlc.h"
--- 45,54 ----
  #include "cm_volume.h"
  #include "cm_dcache.h"
  #include "cm_access.h"
+ #include "cm_dir.h"
  #include "cm_utils.h"
  #include "cm_vnodeops.h"
! #include "cm_btree.h"
  #include "cm_daemon.h"
  #include "cm_ioctl.h"
  #include "cm_dnlc.h"
***************
*** 64,75 ****
  #include "cm_freelance.h"
  #include "cm_performance.h"
  #include "smb_ioctl.h"
  #include "afsd_init.h"
- #ifdef DJGPP
- #include "afs/afsmsg95.h"
- #else
  #include "afsd_eventlog.h"
- #endif
  
  
  #define AFS_DAEMON_SERVICE_NAME AFSREG_CLT_SVC_NAME
--- 57,65 ----
  #include "cm_freelance.h"
  #include "cm_performance.h"
  #include "smb_ioctl.h"
+ #include "smb_iocons.h"
  #include "afsd_init.h"
  #include "afsd_eventlog.h"
  
  
  #define AFS_DAEMON_SERVICE_NAME AFSREG_CLT_SVC_NAME
***************
*** 94,102 ****
  
  extern osi_log_t *afsd_logp;
  
! extern char cm_mountRoot[];
  extern DWORD cm_mountRootLen;
  
  extern char cm_CachePath[];
  
  extern BOOL isGateway;
--- 84,95 ----
  
  extern osi_log_t *afsd_logp;
  
! extern fschar_t cm_mountRoot[];
  extern DWORD cm_mountRootLen;
  
+ extern clientchar_t cm_mountRootC[];
+ extern DWORD cm_mountRootCLen;
+ 
  extern char cm_CachePath[];
  
  extern BOOL isGateway;
Index: openafs/src/WINNT/afsd/afsd95.c
diff -c openafs/src/WINNT/afsd/afsd95.c:1.3 openafs/src/WINNT/afsd/afsd95.c:1.3.8.1
*** openafs/src/WINNT/afsd/afsd95.c:1.3	Tue Nov  2 01:10:29 2004
--- openafs/src/WINNT/afsd/afsd95.c	Thu Jun 26 10:38:23 2008
***************
*** 113,125 ****
          long code;
  	char *reason;
  
- #ifdef DJGPP
- 	osi_Init();
- #endif
-  
- #ifndef DJGPP
  	osi_InitPanic(afsd_notifier);
- #endif
  
          /*sleep(10);*/
          
--- 113,119 ----
***************
*** 149,168 ****
          afs_current_status = AFS_STATUS_RUNNING;
          afsMsg_StatusChange(afs_current_status, 0, NULL);
  
- #ifdef DJGPP
- 	/* Keep the process from just terminating */
- 	while(afs_shutdown == 0)
-         {
-         /*IOMGR_Sleep(180);*/
-           IOMGR_Sleep(8);
- 		/* workaround: WaitForKeystroke(nonzero num) calls 
- 		   IOMGR_Select, though Win95 select works only on sockets */
- 		/* so, we poll instead */
- 		/*if (LWP_WaitForKeystroke(0))
-                   break;*/
-         }
-         afsd_shutdown(0);
- #endif
          afs_exit(0);
          
  	return (TRUE);
--- 143,148 ----
Index: openafs/src/WINNT/afsd/afsd_flushvol.c
diff -c openafs/src/WINNT/afsd/afsd_flushvol.c:1.8 openafs/src/WINNT/afsd/afsd_flushvol.c:1.8.4.2
*** openafs/src/WINNT/afsd/afsd_flushvol.c:1.8	Sat Nov  5 01:47:45 2005
--- openafs/src/WINNT/afsd/afsd_flushvol.c	Thu Jun 26 12:38:29 2008
***************
*** 64,81 ****
      CONST CHAR	COLON = ':';
      CONST CHAR	SLASH = '\\';
      CONST DWORD	NETRESBUFSIZE = 16384;
!     CHAR		bufMessage[1024];
!     UINT		i;
!     DWORD		dwServerSize;
!     DWORD		dwRet;
!     DWORD		dwCount;
!     DWORD		dwNetResBufSize;
!     DWORD		dwTotalVols = 0;
!     DWORD		dwVolBegin, dwVolEnd;
!     DWORD		dwFlushBegin, dwFlushEnd;
!     HANDLE		hEnum;
      LPNETRESOURCE	lpNetResBuf, lpnr;
!     PCHAR		pszShareName, pc;
      afs_int32	afsRet = 0;
  
      if ( lana_OnlyLoopback() ) {
--- 64,81 ----
      CONST CHAR	COLON = ':';
      CONST CHAR	SLASH = '\\';
      CONST DWORD	NETRESBUFSIZE = 16384;
!     CHAR	bufMessage[1024];
!     UINT	i;
!     DWORD	dwServerSize;
!     DWORD	dwRet;
!     DWORD	dwCount;
!     DWORD	dwNetResBufSize;
!     DWORD	dwTotalVols = 0;
!     DWORD	dwVolBegin, dwVolEnd;
!     DWORD	dwFlushBegin, dwFlushEnd;
!     HANDLE	hEnum;
      LPNETRESOURCE	lpNetResBuf, lpnr;
!     char        *pszShareName, *pc;
      afs_int32	afsRet = 0;
  
      if ( lana_OnlyLoopback() ) {
***************
*** 152,158 ****
              {
                  // got one!
                  // but we don't want to flush '\\[...]afs\all'
!                 if (_stricmp(lpnr->lpRemoteName, pszShareName) == 0)
                      continue;
                  ++dwTotalVols;
  
--- 152,158 ----
              {
                  // got one!
                  // but we don't want to flush '\\[...]afs\all'
!                 if (cm_stricmp_utf8(lpnr->lpRemoteName, pszShareName) == 0)
                      continue;
                  ++dwTotalVols;
  
Index: openafs/src/WINNT/afsd/afsd_init.c
diff -c openafs/src/WINNT/afsd/afsd_init.c:1.79.2.38.2.1 openafs/src/WINNT/afsd/afsd_init.c:1.79.2.43
*** openafs/src/WINNT/afsd/afsd_init.c:1.79.2.38.2.1	Sun Jun 22 22:50:08 2008
--- openafs/src/WINNT/afsd/afsd_init.c	Thu Jun 26 12:38:29 2008
***************
*** 36,41 ****
--- 36,44 ----
  #include "lanahelper.h"
  #include <strsafe.h>
  #include "cm_memmap.h"
+ #ifdef DEBUG
+ #include <crtdbg.h>
+ #endif
  
  extern int RXAFSCB_ExecuteRequest(struct rx_call *z_call);
  extern int RXSTATS_ExecuteRequest(struct rx_call *z_call);
***************
*** 50,65 ****
  #endif
  extern afs_int32 cm_OfflineROIsValid;
  extern afs_int32 cm_giveUpAllCBs;
! extern const char **smb_ExecutableExtensions;
  
  osi_log_t *afsd_logp;
  
  cm_config_data_t        cm_data;
  
! char cm_rootVolumeName[VL_MAXNAMELEN];
  DWORD cm_rootVolumeNameLen;
! char cm_mountRoot[1024];
  DWORD cm_mountRootLen;
  int cm_logChunkSize;
  int cm_chunkSize;
  
--- 53,73 ----
  #endif
  extern afs_int32 cm_OfflineROIsValid;
  extern afs_int32 cm_giveUpAllCBs;
! extern const clientchar_t **smb_ExecutableExtensions;
  
  osi_log_t *afsd_logp;
  
  cm_config_data_t        cm_data;
  
! fschar_t cm_rootVolumeName[VL_MAXNAMELEN];
  DWORD cm_rootVolumeNameLen;
! 
! fschar_t cm_mountRoot[1024];
  DWORD cm_mountRootLen;
+ 
+ clientchar_t cm_mountRootC[1024];
+ DWORD cm_mountRootCLen;
+ 
  int cm_logChunkSize;
  int cm_chunkSize;
  
***************
*** 79,84 ****
--- 87,93 ----
  unsigned short cm_callbackport = CM_DEFAULT_CALLBACKPORT;
  
  char cm_NetbiosName[MAX_NB_NAME_LENGTH] = "";
+ clientchar_t cm_NetbiosNameC[MAX_NB_NAME_LENGTH] = _C("");
  
  char cm_CachePath[MAX_PATH];
  DWORD cm_ValidateCache = 1;
***************
*** 87,95 ****
  
  cm_initparams_v1 cm_initParams;
  
! char *cm_sysName = 0;
! unsigned int   cm_sysNameCount = 0;
! char *cm_sysNameList[MAXNUMSYSNAMES];
  
  DWORD TraceOption = 0;
  
--- 96,104 ----
  
  cm_initparams_v1 cm_initParams;
  
! clientchar_t *cm_sysName = 0;
! unsigned int  cm_sysNameCount = 0;
! clientchar_t *cm_sysNameList[MAXNUMSYSNAMES];
  
  DWORD TraceOption = 0;
  
***************
*** 134,145 ****
      }
  }
  
- extern initUpperCaseTable();
- void afsd_initUpperCaseTable() 
- {
-     initUpperCaseTable();
- }
- 
  void
  afsi_start()
  {
--- 143,148 ----
***************
*** 296,302 ****
  				 pHostNames, &dwSize) == ERROR_SUCCESS) 
              {
  		for (pName = pHostNames; 
! 		     (pName - pHostNames < dwSize) && *pName ; 
  		     pName += strlen(pName) + 1)
  		{
  		    if ( !stricmp(pName, cm_NetbiosName) ) {
--- 299,305 ----
  				 pHostNames, &dwSize) == ERROR_SUCCESS) 
              {
  		for (pName = pHostNames; 
! 		     (pName - pHostNames < (int) dwSize) && *pName ; 
  		     pName += strlen(pName) + 1)
  		{
  		    if ( !stricmp(pName, cm_NetbiosName) ) {
***************
*** 390,396 ****
  }
  
  
- #if !defined(DJGPP)
  static void afsd_InitServerPreferences(void)
  {
      HKEY hkPrefs = 0;
--- 393,398 ----
***************
*** 540,546 ****
          RegCloseKey(hkPrefs);
      }
  }
- #endif /* DJGPP */
  
  /*
   * AFSD Initialization
--- 542,547 ----
***************
*** 564,570 ****
      long ltt, ltto;
      long rx_nojumbo;
      long virtualCache = 0;
!     char rootCellName[256];
      struct rx_service *serverp;
      static struct rx_securityClass *nullServerSecurityClassp;
      struct hostent *thp;
--- 565,571 ----
      long ltt, ltto;
      long rx_nojumbo;
      long virtualCache = 0;
!     fschar_t rootCellName[256];
      struct rx_service *serverp;
      static struct rx_securityClass *nullServerSecurityClassp;
      struct hostent *thp;
***************
*** 577,583 ****
      /*int freelanceEnabled;*/
      WSADATA WSAjunk;
      int i;
-     char *p, *q; 
      int cm_noIPAddr;         /* number of client network interfaces */
      int cm_IPAddr[CM_MAXINTERFACE_ADDR];    /* client's IP address in host order */
      int cm_SubnetMask[CM_MAXINTERFACE_ADDR];/* client's subnet mask in host order*/
--- 578,583 ----
***************
*** 586,592 ****
  
      WSAStartup(0x0101, &WSAjunk);
  
-     afsd_initUpperCaseTable();
      init_et_to_sys_error();
  
      /* setup osidebug server at RPC slot 1000 */
--- 586,591 ----
***************
*** 614,620 ****
  
      /* Look up configuration parameters in Registry */
      code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY,
!                          0, KEY_QUERY_VALUE, &parmKey);
      if (code != ERROR_SUCCESS) {
          FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
                         | FORMAT_MESSAGE_ALLOCATE_BUFFER,
--- 613,619 ----
  
      /* Look up configuration parameters in Registry */
      code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY,
!                         0, KEY_QUERY_VALUE, &parmKey);
      if (code != ERROR_SUCCESS) {
          FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
                         | FORMAT_MESSAGE_ALLOCATE_BUFFER,
***************
*** 822,850 ****
  
      dummyLen = sizeof(cm_rootVolumeName);
      code = RegQueryValueEx(parmKey, "RootVolume", NULL, NULL,
!                             cm_rootVolumeName, &dummyLen);
      if (code == ERROR_SUCCESS)
          afsi_log("Root volume %s", cm_rootVolumeName);
      else {
!         StringCbCopyA(cm_rootVolumeName, sizeof(cm_rootVolumeName), "root.afs");
          afsi_log("Default root volume name root.afs");
      }
  
!     cm_mountRootLen = sizeof(cm_mountRoot);
!     code = RegQueryValueEx(parmKey, "MountRoot", NULL, NULL,
!                             cm_mountRoot, &cm_mountRootLen);
      if (code == ERROR_SUCCESS) {
!         afsi_log("Mount root %s", cm_mountRoot);
!         cm_mountRootLen = (DWORD)strlen(cm_mountRoot);
      } else {
!         StringCbCopyA(cm_mountRoot, sizeof(cm_mountRoot), "/afs");
!         cm_mountRootLen = 4;
          /* Don't log */
      }
  
      dummyLen = sizeof(buf);
      code = RegQueryValueEx(parmKey, "CachePath", NULL, &regType,
!                             buf, &dummyLen);
      if (code == ERROR_SUCCESS && buf[0]) {
          if (regType == REG_EXPAND_SZ) {
              dummyLen = ExpandEnvironmentStrings(buf, cm_CachePath, sizeof(cm_CachePath));
--- 821,852 ----
  
      dummyLen = sizeof(cm_rootVolumeName);
      code = RegQueryValueEx(parmKey, "RootVolume", NULL, NULL,
!                             (LPBYTE) cm_rootVolumeName, &dummyLen);
      if (code == ERROR_SUCCESS)
          afsi_log("Root volume %s", cm_rootVolumeName);
      else {
!         cm_FsStrCpy(cm_rootVolumeName, lengthof(cm_rootVolumeName), "root.afs");
          afsi_log("Default root volume name root.afs");
      }
  
!     cm_mountRootCLen = sizeof(cm_mountRootC);
!     code = RegQueryValueExW(parmKey, L"MountRoot", NULL, NULL,
!                             (LPBYTE) cm_mountRootC, &cm_mountRootCLen);
      if (code == ERROR_SUCCESS) {
!         afsi_log("Mount root %S", cm_mountRootC);
!         cm_mountRootCLen = cm_ClientStrLen(cm_mountRootC);
      } else {
!         cm_ClientStrCpy(cm_mountRootC, lengthof(cm_mountRootC), _C("/afs"));
!         cm_mountRootCLen = cm_ClientStrLen(cm_mountRootC);
          /* Don't log */
      }
  
+     cm_ClientStringToFsString(cm_mountRootC, -1, cm_mountRoot, lengthof(cm_mountRoot));
+     cm_mountRootLen = cm_FsStrLen(cm_mountRoot);
+ 
      dummyLen = sizeof(buf);
      code = RegQueryValueEx(parmKey, "CachePath", NULL, &regType,
!                            buf, &dummyLen);
      if (code == ERROR_SUCCESS && buf[0]) {
          if (regType == REG_EXPAND_SZ) {
              dummyLen = ExpandEnvironmentStrings(buf, cm_CachePath, sizeof(cm_CachePath));
***************
*** 909,955 ****
      }
  
      for ( i=0; i < MAXNUMSYSNAMES; i++ ) {
!         cm_sysNameList[i] = osi_Alloc(MAXSYSNAME);
          cm_sysNameList[i][0] = '\0';
      }
      cm_sysName = cm_sysNameList[0];
  
!     dummyLen = sizeof(buf);
!     code = RegQueryValueEx(parmKey, "SysName", NULL, NULL, buf, &dummyLen);
!     if (code != ERROR_SUCCESS || !buf[0]) {
  #if defined(_IA64_)
!         StringCbCopyA(buf, sizeof(buf), "ia64_win64");
  #elif defined(_AMD64_)
!         StringCbCopyA(buf, sizeof(buf), "amd64_win64 x86_win32 i386_w2k");
  #else /* assume x86 32-bit */
!         StringCbCopyA(buf, sizeof(buf), "x86_win32 i386_w2k i386_nt40");
  #endif
!     }
!     afsi_log("Sys name %s", buf); 
  
!     /* breakup buf into individual search string entries */
!     for (p = q = buf; p < buf + dummyLen; p++)
!     {
!         if (*p == '\0' || isspace(*p)) {
!             memcpy(cm_sysNameList[cm_sysNameCount],q,p-q);
!             cm_sysNameList[cm_sysNameCount][p-q] = '\0';
!             cm_sysNameCount++;
! 
!             do {
!                 if (*p == '\0')
!                     goto done_sysname;
!                 p++;
!             } while (*p == '\0' || isspace(*p));
!             q = p;
!             p--;
          }
      }
    done_sysname:
!     StringCbCopyA(cm_sysName, MAXSYSNAME, cm_sysNameList[0]);
  
      dummyLen = sizeof(cryptall);
      code = RegQueryValueEx(parmKey, "SecurityLevel", NULL, NULL,
!                             (BYTE *) &cryptall, &dummyLen);
      if (code == ERROR_SUCCESS) {
          afsi_log("SecurityLevel is %s", cryptall?"crypt":"clear");
      } else {
--- 911,959 ----
      }
  
      for ( i=0; i < MAXNUMSYSNAMES; i++ ) {
!         cm_sysNameList[i] = osi_Alloc(MAXSYSNAME * sizeof(clientchar_t));
          cm_sysNameList[i][0] = '\0';
      }
      cm_sysName = cm_sysNameList[0];
  
!     {
!         clientchar_t *p, *q;
!         clientchar_t * cbuf = (clientchar_t *) buf;
!         dummyLen = sizeof(buf);
!         code = RegQueryValueExW(parmKey, L"SysName", NULL, NULL, (LPBYTE) cbuf, &dummyLen);
!         if (code != ERROR_SUCCESS || !cbuf[0]) {
  #if defined(_IA64_)
!             cm_ClientStrCpy(cbuf, lengthof(buf), _C("ia64_win64"));
  #elif defined(_AMD64_)
!             cm_ClientStrCpy(cbuf, lengthof(buf), _C("amd64_win64 x86_win32 i386_w2k"));
  #else /* assume x86 32-bit */
!             cm_ClientStrCpy(cbuf, lengthof(buf), _C("x86_win32 i386_w2k i386_nt40"));
  #endif
!         }
!         afsi_log("Sys name %S", cbuf); 
  
!         /* breakup buf into individual search string entries */
!         for (p = q = cbuf; p < cbuf + dummyLen; p++) {
!             if (*p == '\0' || iswspace(*p)) {
!                 memcpy(cm_sysNameList[cm_sysNameCount],q,(p-q) * sizeof(clientchar_t));
!                 cm_sysNameList[cm_sysNameCount][p-q] = '\0';
!                 cm_sysNameCount++;
!                 do {
!                     if (*p == '\0')
!                         goto done_sysname;
!                     p++;
!                 } while (*p == '\0' || isspace(*p));
!                 q = p;
!                 p--;
!             }
          }
      }
    done_sysname:
!     cm_ClientStrCpy(cm_sysName, MAXSYSNAME, cm_sysNameList[0]);
  
      dummyLen = sizeof(cryptall);
      code = RegQueryValueEx(parmKey, "SecurityLevel", NULL, NULL,
!                            (BYTE *) &cryptall, &dummyLen);
      if (code == ERROR_SUCCESS) {
          afsi_log("SecurityLevel is %s", cryptall?"crypt":"clear");
      } else {
***************
*** 996,1001 ****
--- 1000,1014 ----
      }
  #endif /* AFS_FREELANCE_CLIENT */
  
+     dummyLen = sizeof(smb_UseUnicode);
+     code = RegQueryValueEx(parmKey, "NegotiateUnicode", NULL, NULL,
+                            (BYTE *) &smb_UseUnicode, &dummyLen);
+     if (code != ERROR_SUCCESS) {
+         smb_UseUnicode = 1; /* default on */
+     }
+     afsi_log("SMB Server Unicode Support is %s",
+               smb_UseUnicode ? "enabled" : "disabled");
+ 
      dummyLen = sizeof(smb_hideDotFiles);
      code = RegQueryValueEx(parmKey, "HideDotFiles", NULL, NULL,
                             (BYTE *) &smb_hideDotFiles, &dummyLen);
***************
*** 1143,1170 ****
      afsi_log("CM BPlusTrees is not supported");
  #endif
  
!     if ((RegQueryValueEx( parmKey, "PrefetchExecutableExtensions", 0, 
!                           &regType, NULL, &dummyLen) == ERROR_SUCCESS) &&
           (regType == REG_MULTI_SZ)) 
      {
!         char * pSz;
          dummyLen += 3; /* in case the source string is not nul terminated */
          pSz = malloc(dummyLen);
!         if ((RegQueryValueEx( parmKey, "PrefetchExecutableExtensions", 0, &regType, 
!                              pSz, &dummyLen) == ERROR_SUCCESS) &&
               (regType == REG_MULTI_SZ))
          {
              int cnt;
!             char * p;
  
!             for (cnt = 0, p = pSz; (p - pSz < dummyLen) && *p; cnt++, p += strlen(p) + 1);
  
!             smb_ExecutableExtensions = malloc(sizeof(char *) * (cnt+1));
  
!             for (cnt = 0, p = pSz; (p - pSz < dummyLen) && *p; cnt++, p += strlen(p) + 1)
!             {
                  smb_ExecutableExtensions[cnt] = p;
!                 afsi_log("PrefetchExecutableExtension: \"%s\"", p);
              }
              smb_ExecutableExtensions[cnt] = NULL;
          }
--- 1156,1182 ----
      afsi_log("CM BPlusTrees is not supported");
  #endif
  
!     if ((RegQueryValueExW( parmKey, L"PrefetchExecutableExtensions", 0, 
!                            &regType, NULL, &dummyLen) == ERROR_SUCCESS) &&
           (regType == REG_MULTI_SZ)) 
      {
!         clientchar_t * pSz;
          dummyLen += 3; /* in case the source string is not nul terminated */
          pSz = malloc(dummyLen);
!         if ((RegQueryValueExW( parmKey, L"PrefetchExecutableExtensions", 0, &regType, 
!                                (LPBYTE) pSz, &dummyLen) == ERROR_SUCCESS) &&
               (regType == REG_MULTI_SZ))
          {
              int cnt;
!             clientchar_t * p;
  
!             for (cnt = 0, p = pSz; (p - pSz < dummyLen) && *p; cnt++, p += cm_ClientStrLen(p) + 1);
  
!             smb_ExecutableExtensions = malloc(sizeof(clientchar_t *) * (cnt+1));
  
!             for (cnt = 0, p = pSz; (p - pSz < dummyLen) && *p; cnt++, p += cm_ClientStrLen(p) + 1) {
                  smb_ExecutableExtensions[cnt] = p;
!                 afsi_log("PrefetchExecutableExtension: \"%S\"", p);
              }
              smb_ExecutableExtensions[cnt] = NULL;
          }
***************
*** 1244,1249 ****
--- 1256,1263 ----
          
      cm_InitCallback();
  
+     cm_InitNormalization();
+ 
      code = cm_InitMappedMemory(virtualCache, cm_CachePath, stats, volumes, cells, cm_chunkSize, cacheBlocks, blockSize);
      afsi_log("cm_InitMappedMemory code %x", code);
      if (code != 0) {
***************
*** 1266,1271 ****
--- 1280,1287 ----
      }
  
      if ( rx_mtu != -1 ) {
+         extern void rx_SetMaxMTU(int);
+ 
          rx_SetMaxMTU(rx_mtu);
          afsi_log("rx_SetMaxMTU %d successful", rx_mtu);
      }
***************
*** 1315,1321 ****
  
      code = cm_GetRootCellName(rootCellName);
      afsi_log("cm_GetRootCellName code %d, cm_freelanceEnabled= %d, rcn= %s", 
!               code, cm_freelanceEnabled, (code ? "<none>" : rootCellName));
      if (code != 0 && !cm_freelanceEnabled) 
      {
          *reasonP = "can't find root cell name in " AFS_CELLSERVDB;
--- 1331,1337 ----
  
      code = cm_GetRootCellName(rootCellName);
      afsi_log("cm_GetRootCellName code %d, cm_freelanceEnabled= %d, rcn= %s", 
!              code, cm_freelanceEnabled, (code ? "<none>" : rootCellName));
      if (code != 0 && !cm_freelanceEnabled) 
      {
          *reasonP = "can't find root cell name in " AFS_CELLSERVDB;
***************
*** 1343,1351 ****
      /* Initialize the RPC server for session keys */
      RpcInit();
  
- #if !defined(DJGPP)
      afsd_InitServerPreferences();
- #endif
      return 0;
  }
  
--- 1359,1365 ----
***************
*** 1779,1787 ****
    
  void afsd_SetUnhandledExceptionFilter()
  {
      SetUnhandledExceptionFilter(afsd_ExceptionFilter);
  }
!   
  #ifdef _DEBUG
  void afsd_DbgBreakAllocInit()
  {
--- 1793,1803 ----
    
  void afsd_SetUnhandledExceptionFilter()
  {
+ #ifndef NOTRACE
      SetUnhandledExceptionFilter(afsd_ExceptionFilter);
+ #endif
  }
! 
  #ifdef _DEBUG
  void afsd_DbgBreakAllocInit()
  {
Index: openafs/src/WINNT/afsd/afsd_init.h
diff -c openafs/src/WINNT/afsd/afsd_init.h:1.6.6.1 openafs/src/WINNT/afsd/afsd_init.h:1.6.6.3
*** openafs/src/WINNT/afsd/afsd_init.h:1.6.6.1	Sun Oct  8 16:31:36 2006
--- openafs/src/WINNT/afsd/afsd_init.h	Thu Jun 26 12:38:29 2008
***************
*** 9,23 ****
  
  void afsi_start();
  
- #ifndef DJGPP
  int afsd_InitCM(char **reasonP);
  int afsd_InitSMB(char **reasonP, void *aMBfunc);
  
  void GenerateMiniDump(PEXCEPTION_POINTERS ep);
- #else /* DJGPP */
- int afsd_InitCM(char **reasonP, struct cmd_syndesc *as, char *arock);
- int afsd_InitSMB(char **reasonP);
- #endif /* !DJGPP */
  int afsd_InitDaemons(char **reasonP);
  int afsd_ShutdownCM(void);
  void afsd_ForceTrace(BOOL flush);
--- 9,18 ----
***************
*** 25,29 ****
  
  extern char cm_HostName[];
  extern char cm_NetbiosName[];
! 
  
--- 20,24 ----
  
  extern char cm_HostName[];
  extern char cm_NetbiosName[];
! extern clientchar_t cm_NetbiosNameC[];
  
Index: openafs/src/WINNT/afsd/afsd_init95.c
diff -c openafs/src/WINNT/afsd/afsd_init95.c:1.4 openafs/src/WINNT/afsd/afsd_init95.c:1.4.6.1
*** openafs/src/WINNT/afsd/afsd_init95.c:1.4	Fri Mar 11 00:33:21 2005
--- openafs/src/WINNT/afsd/afsd_init95.c	Thu Jun 26 10:38:23 2008
***************
*** 324,330 ****
  
            WSAStartup(0x0101, &WSAjunk);*/
  
- #ifndef DJGPP
  	/* setup osidebug server at RPC slot 1000 */
  	osi_LongToUID(1000, &debugID);
  	code = osi_InitDebug(&debugID);
--- 324,329 ----
***************
*** 334,351 ****
  		*reasonP = "unknown error";
  		return -1;
  	}
- #endif 
  
  	/* who are we ? */
  	gethostname(cm_HostName, sizeof(cm_HostName));
- #ifdef DJGPP
- 	/* For some reason, we may be getting space-padded hostnames.
- 	   If so, we take out the padding so that we can append -AFS later. */
- 	{
- 	  char *space = strchr(cm_HostName,' ');
- 	  if (space) *space = '\0';
- 	}
- #endif
  	afsi_log("gethostname %s", cm_HostName);
  	thp = gethostbyname(cm_HostName);
  	memcpy(&cm_HostAddr, thp->h_addr_list[0], 4);
--- 333,341 ----
Index: openafs/src/WINNT/afsd/afsd_service.c
diff -c openafs/src/WINNT/afsd/afsd_service.c:1.52.4.25 openafs/src/WINNT/afsd/afsd_service.c:1.52.4.26
*** openafs/src/WINNT/afsd/afsd_service.c:1.52.4.25	Wed Mar 19 11:36:25 2008
--- openafs/src/WINNT/afsd/afsd_service.c	Thu Jun 26 12:38:29 2008
***************
*** 14,19 ****
--- 14,22 ----
  #include <stdlib.h>
  #include <winsock2.h>
  #include <WINNT\afsreg.h>
+ #include "cm_btree.h"
+ #include "cm_rpc.h"
+ #include "smb.h"
  
  #include <osi.h>
  
***************
*** 1094,1099 ****
--- 1097,1104 ----
      HMODULE hAdvApi32;
  
  #ifdef _DEBUG
+     void afsd_DbgBreakAllocInit();
+ 
      afsd_DbgBreakAllocInit();
      _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF /*| _CRTDBG_CHECK_ALWAYS_DF*/ | 
                     _CRTDBG_CHECK_CRT_DF /* | _CRTDBG_DELAY_FREE_MEM_DF */ );
Index: openafs/src/WINNT/afsd/afskfw.c
diff -c openafs/src/WINNT/afsd/afskfw.c:1.28.4.18 openafs/src/WINNT/afsd/afskfw.c:1.28.4.19
*** openafs/src/WINNT/afsd/afskfw.c:1.28.4.18	Sun Mar 30 10:13:17 2008
--- openafs/src/WINNT/afsd/afskfw.c	Sat Jul  5 02:27:46 2008
***************
*** 3122,3128 ****
                  retry++;
                  goto retry_gettoken5;
              }
!             goto try_krb524d;
          }
  
          if (atoken.kvno == btoken.kvno &&
--- 3122,3128 ----
                  retry++;
                  goto retry_gettoken5;
              }
!             goto cleanup;
          }
  
          if (atoken.kvno == btoken.kvno &&
Index: openafs/src/WINNT/afsd/afslogon.c
diff -c openafs/src/WINNT/afsd/afslogon.c:1.45.2.13 openafs/src/WINNT/afsd/afslogon.c:1.45.2.14
*** openafs/src/WINNT/afsd/afslogon.c:1.45.2.13	Mon Jan 28 14:51:20 2008
--- openafs/src/WINNT/afsd/afslogon.c	Thu Jun 26 08:45:10 2008
***************
*** 370,376 ****
      if(domain) {
          dwSize = MAX_COMPUTERNAME_LENGTH;
          if(GetComputerName(computerName, &dwSize)) {
!             if(!stricmp(computerName, domain)) {
                  effDomain = "LOCALHOST";
                  opt->flags = LOGON_FLAG_LOCAL;
              }
--- 370,376 ----
      if(domain) {
          dwSize = MAX_COMPUTERNAME_LENGTH;
          if(GetComputerName(computerName, &dwSize)) {
!             if(!cm_stricmp_utf8(computerName, domain)) {
                  effDomain = "LOCALHOST";
                  opt->flags = LOGON_FLAG_LOCAL;
              }
***************
*** 977,983 ****
                              }
  			    p = opt.theseCells;
  			    while ( *p ) {
!                                 if ( stricmp(p, cell) ) {
                                      SetEnvironmentVariable(DO_NOT_REGISTER_VARNAME, "");
                                      code2 = KFW_AFS_get_cred(principal, p, 0, 0, opt.smbName, &reason);
                                      SetEnvironmentVariable(DO_NOT_REGISTER_VARNAME, NULL);
--- 977,983 ----
                              }
  			    p = opt.theseCells;
  			    while ( *p ) {
!                                 if ( cm_stricmp_utf8(p, cell) ) {
                                      SetEnvironmentVariable(DO_NOT_REGISTER_VARNAME, "");
                                      code2 = KFW_AFS_get_cred(principal, p, 0, 0, opt.smbName, &reason);
                                      SetEnvironmentVariable(DO_NOT_REGISTER_VARNAME, NULL);
Index: openafs/src/WINNT/afsd/cm_access.c
diff -c openafs/src/WINNT/afsd/cm_access.c:1.7.2.18 openafs/src/WINNT/afsd/cm_access.c:1.7.2.19
*** openafs/src/WINNT/afsd/cm_access.c:1.7.2.18	Sun Mar  2 23:25:40 2008
--- openafs/src/WINNT/afsd/cm_access.c	Thu Jun 26 10:38:23 2008
***************
*** 10,25 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #include <winsock2.h>
- #endif
  #include <malloc.h>
  #include <string.h>
  #include <stdlib.h>
- #ifndef DJGPP
  #include <nb30.h>
- #endif
  #include <osi.h>
  
  #include "afsd.h"
--- 10,21 ----
Index: openafs/src/WINNT/afsd/cm_aclent.c
diff -c openafs/src/WINNT/afsd/cm_aclent.c:1.14.2.4 openafs/src/WINNT/afsd/cm_aclent.c:1.14.2.5
*** openafs/src/WINNT/afsd/cm_aclent.c:1.14.2.4	Sun Mar  2 23:25:40 2008
--- openafs/src/WINNT/afsd/cm_aclent.c	Thu Jun 26 10:38:23 2008
***************
*** 10,18 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
- #endif
  #include <stdlib.h>
  #include <string.h>
  #include <malloc.h>
--- 10,16 ----
Index: openafs/src/WINNT/afsd/cm_btree.c
diff -c openafs/src/WINNT/afsd/cm_btree.c:1.1.2.14.2.1 openafs/src/WINNT/afsd/cm_btree.c:1.1.2.20
*** openafs/src/WINNT/afsd/cm_btree.c:1.1.2.14.2.1	Sun Jun 22 22:52:04 2008
--- openafs/src/WINNT/afsd/cm_btree.c	Mon Jul 14 09:01:31 2008
***************
*** 1,5 ****
  /*
!  * Copyright 2007 Secure Endpoints Inc.  
   * 
   * All Rights Reserved.
   *
--- 1,5 ----
  /*
!  * Copyright 2007-2008 Secure Endpoints Inc.  
   * 
   * All Rights Reserved.
   *
***************
*** 15,20 ****
--- 15,21 ----
  #include <stdlib.h>
  #include <assert.h>
  #include "afsd.h"
+ #include <strsafe.h>
  
  #ifdef USE_BPLUS
  #include "cm_btree.h"
***************
*** 43,49 ****
  static void cleanupNodePool(Tree *B);
  
  static Nptr descendToLeaf(Tree *B, Nptr curr);
! static int getSlot(Tree *B, Nptr curr);
  static int findKey(Tree *B, Nptr curr, int lo, int hi);
  static int bestMatch(Tree *B, Nptr curr, int slot);
  
--- 44,50 ----
  static void cleanupNodePool(Tree *B);
  
  static Nptr descendToLeaf(Tree *B, Nptr curr);
! int getSlot(Tree *B, Nptr curr);
  static int findKey(Tree *B, Nptr curr, int lo, int hi);
  static int bestMatch(Tree *B, Nptr curr, int slot);
  
***************
*** 141,147 ****
  {
      Tree *B;
      keyT empty = {NULL};
!     dataT data = {0,0,0,0};
  
      if (fanout > MAX_FANOUT)
          fanout = MAX_FANOUT;
--- 142,148 ----
  {
      Tree *B;
      keyT empty = {NULL};
!     dataT data = {0,0,0,0,0,0,0};
  
      if (fanout > MAX_FANOUT)
          fanout = MAX_FANOUT;
***************
*** 164,170 ****
      setcomparekeys(B, keyCmp);
  
  #ifdef DEBUG_BTREE
!     sprintf(B->message, "INIT:  B+tree of fanout %d at %10p.\n", fanout, (void *)B);
      OutputDebugString(B->message);
  #endif
  
--- 165,171 ----
      setcomparekeys(B, keyCmp);
  
  #ifdef DEBUG_BTREE
!     StringCbPrintfA(B->message, sizeof(B->message), "INIT:  B+tree of fanout %d at %10p.\n", fanout, (void *)B);
      OutputDebugString(B->message);
  #endif
  
***************
*** 178,184 ****
  void freeBtree(Tree *B)
  {
  #ifdef DEBUG_BTREE
!     sprintf(B->message, "FREE:  B+tree at %10p.\n", (void *) B);
      OutputDebugString(B->message);
  #endif
  
--- 179,185 ----
  void freeBtree(Tree *B)
  {
  #ifdef DEBUG_BTREE
!     StringCbPrintfA(B->message, sizeof(B->message), "FREE:  B+tree at %10p.\n", (void *) B);
      OutputDebugString(B->message);
  #endif
  
***************
*** 266,272 ****
      Nptr	leafNode;
  
  #ifdef DEBUG_BTREE
!     sprintf(B->message, "LOOKUP:  key %s.\n", key.name);
      OutputDebugString(B->message);
  #endif
  
--- 267,273 ----
      Nptr	leafNode;
  
  #ifdef DEBUG_BTREE
!     StringCbPrintfA(B->message, sizeof(B->message), "LOOKUP:  key %s.\n", key.name);
      OutputDebugString(B->message);
  #endif
  
***************
*** 286,299 ****
          dataNode = getnode(leafNode, slot);
          data = getdatavalue(dataNode);
  
!         sprintf(B->message, "LOOKUP: %s found on page %d value (%d.%d.%d).\n",
                   key.name,
                   getnodenumber(B, leafNode), 
                   data.fid.volume, 
                   data.fid.vnode,
                   data.fid.unique);
      } else 
!         sprintf(B->message, "LOOKUP: not found!\n");
      OutputDebugString(B->message);
  #endif
  
--- 287,300 ----
          dataNode = getnode(leafNode, slot);
          data = getdatavalue(dataNode);
  
!         StringCbPrintfA(B->message, sizeof(B->message), "LOOKUP: %s found on page %d value (%d.%d.%d).\n",
                   key.name,
                   getnodenumber(B, leafNode), 
                   data.fid.volume, 
                   data.fid.vnode,
                   data.fid.unique);
      } else 
!         StringCbPrintfA(B->message, sizeof(B->message), "LOOKUP: not found!\n");
      OutputDebugString(B->message);
  #endif
  
***************
*** 334,340 ****
  }
  
  /********************   find slot for search key   *********************/
! static int getSlot(Tree *B, Nptr curr)
  {
      int slot, entries;
  
--- 335,341 ----
  }
  
  /********************   find slot for search key   *********************/
! int getSlot(Tree *B, Nptr curr)
  {
      int slot, entries;
  
***************
*** 355,361 ****
  
  #ifdef DEBUG_BTREE
          if (findslot == BTERROR) {
!             sprintf(B->message, "FINDKEY: (lo %d hi %d) Bad key ordering on node %d (0x%p)\n", 
                      lo, hi, getnodenumber(B, curr), curr);
              osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
          }
--- 356,362 ----
  
  #ifdef DEBUG_BTREE
          if (findslot == BTERROR) {
!             StringCbPrintfA(B->message, sizeof(B->message), "FINDKEY: (lo %d hi %d) Bad key ordering on node %d (0x%p)\n", 
                      lo, hi, getnodenumber(B, curr), curr);
              osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
          }
***************
*** 372,378 ****
                  findslot = findKey(B, curr, mid + 1, hi);
              break;
          case BTERROR:
!             sprintf(B->message, "FINDKEY: (lo %d hi %d) Bad key ordering on node %d (0x%p)\n", 
                      lo, hi, getnodenumber(B, curr), curr);
              osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
          }
--- 373,379 ----
                  findslot = findKey(B, curr, mid + 1, hi);
              break;
          case BTERROR:
!             StringCbPrintfA(B->message, sizeof(B->message), "FINDKEY: (lo %d hi %d) Bad key ordering on node %d (0x%p)\n", 
                      lo, hi, getnodenumber(B, curr), curr);
              osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
          }
***************
*** 380,386 ****
  
      if (isleaf(curr) && findslot == 0)
      {
!         sprintf(B->message, "FINDKEY: (lo %d hi %d) findslot %d is invalid for leaf nodes, bad key ordering on node %d (0x%p)\n", 
                  lo, hi, findslot, getnodenumber(B, curr), curr);
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      }
--- 381,387 ----
  
      if (isleaf(curr) && findslot == 0)
      {
!         StringCbPrintfA(B->message, sizeof(B->message), "FINDKEY: (lo %d hi %d) findslot %d is invalid for leaf nodes, bad key ordering on node %d (0x%p)\n", 
                  lo, hi, findslot, getnodenumber(B, curr), curr);
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      }
***************
*** 435,441 ****
  
      if (findslot == BTERROR || isleaf(curr) && findslot == 0)
      {
!         sprintf(B->message, "BESTMATCH: node %d (0x%p) slot %d diff %d comp %d findslot %d\n", 
                  getnodenumber(B, curr), curr, slot, diff, comp, findslot);
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      }
--- 436,442 ----
  
      if (findslot == BTERROR || isleaf(curr) && findslot == 0)
      {
!         StringCbPrintfA(B->message, sizeof(B->message), "BESTMATCH: node %d (0x%p) slot %d diff %d comp %d findslot %d\n", 
                  getnodenumber(B, curr), curr, slot, diff, comp, findslot);
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      }
***************
*** 454,460 ****
      Nptr newNode;
  
  #ifdef DEBUG_BTREE
!     sprintf(B->message, "INSERT:  key %s.\n", key.name);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #endif
  
--- 455,461 ----
      Nptr newNode;
  
  #ifdef DEBUG_BTREE
!     StringCbPrintfA(B->message, sizeof(B->message), "INSERT:  key %s.\n", key.name);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #endif
  
***************
*** 528,534 ****
      keyT key;
  
  #ifdef DEBUG_BTREE
!     sprintf(B->message, "INSERT:  slot %d, down node %d.\n", slot, getnodenumber(B, downPtr));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #endif
  
--- 529,535 ----
      keyT key;
  
  #ifdef DEBUG_BTREE
!     StringCbPrintfA(B->message, sizeof(B->message), "INSERT:  slot %d, down node %d.\n", slot, getnodenumber(B, downPtr));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #endif
  
***************
*** 732,738 ****
      Nptr newNode;
  
  #ifdef DEBUG_BTREE
!     sprintf(B->message, "DELETE:  key %s.\n", key.name);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #endif
  
--- 733,739 ----
      Nptr newNode;
  
  #ifdef DEBUG_BTREE
!     StringCbPrintfA(B->message, sizeof(B->message), "DELETE:  key %s.\n", key.name);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #endif
  
***************
*** 741,747 ****
      newNode = descendBalance(B, getroot(B), NONODE, NONODE, NONODE, NONODE, NONODE);
      if (isnode(newNode)) {
  #ifdef DEBUG_BTREE
!         sprintf(B->message, "DELETE: collapsing node %d", getnodenumber(B, newNode));
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #endif
          collapseRoot(B, getroot(B), newNode);	/* remove root when superfluous */
--- 742,748 ----
      newNode = descendBalance(B, getroot(B), NONODE, NONODE, NONODE, NONODE, NONODE);
      if (isnode(newNode)) {
  #ifdef DEBUG_BTREE
!         StringCbPrintfA(B->message, sizeof(B->message), "DELETE: collapsing node %d", getnodenumber(B, newNode));
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #endif
          collapseRoot(B, getroot(B), newNode);	/* remove root when superfluous */
***************
*** 755,761 ****
  {
  
  #ifdef DEBUG_BTREE
!     sprintf(B->message, "COLLAPSE:  old %d, new %d.\n", getnodenumber(B, oldRoot), getnodenumber(B, newRoot));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      showNode(B, "collapseRoot oldRoot", oldRoot);
      showNode(B, "collapseRoot newRoot", newRoot);
--- 756,762 ----
  {
  
  #ifdef DEBUG_BTREE
!     StringCbPrintfA(B->message, sizeof(B->message), "COLLAPSE:  old %d, new %d.\n", getnodenumber(B, oldRoot), getnodenumber(B, newRoot));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      showNode(B, "collapseRoot oldRoot", oldRoot);
      showNode(B, "collapseRoot newRoot", newRoot);
***************
*** 777,783 ****
      int	slot = 0, notleft = 0, notright = 0, fewleft = 0, fewright = 0, test = 0;
  
  #ifdef DEBUG_BTREE
!     sprintf(B->message, "descendBalance curr %d, left %d, right %d, lAnc %d, rAnc %d, parent %d\n",
               curr ? getnodenumber(B, curr) : -1,
               left ? getnodenumber(B, left) : -1,
               right ? getnodenumber(B, right) : -1,
--- 778,784 ----
      int	slot = 0, notleft = 0, notright = 0, fewleft = 0, fewright = 0, test = 0;
  
  #ifdef DEBUG_BTREE
!     StringCbPrintfA(B->message, sizeof(B->message), "descendBalance curr %d, left %d, right %d, lAnc %d, rAnc %d, parent %d\n",
               curr ? getnodenumber(B, curr) : -1,
               left ? getnodenumber(B, left) : -1,
               right ? getnodenumber(B, right) : -1,
***************
*** 918,924 ****
  
      if (newMe != NONODE) {	/* this node removal doesn't consider duplicates */
  #ifdef DEBUG_BTREE
!         sprintf(B->message, "descendBalance DELETE:  slot %d, node %d.\n", slot, getnodenumber(B, curr));
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #endif
  
--- 919,925 ----
  
      if (newMe != NONODE) {	/* this node removal doesn't consider duplicates */
  #ifdef DEBUG_BTREE
!         StringCbPrintfA(B->message, sizeof(B->message), "descendBalance DELETE:  slot %d, node %d.\n", slot, getnodenumber(B, curr));
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #endif
  
***************
*** 972,978 ****
      }
  
  #ifdef DEBUG_BTREE
!     sprintf(B->message, "descendBalance returns %d\n", getnodenumber(B, newNode));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #endif
      return newNode;
--- 973,979 ----
      }
  
  #ifdef DEBUG_BTREE
!     StringCbPrintfA(B->message, sizeof(B->message), "descendBalance returns %d\n", getnodenumber(B, newNode));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #endif
      return newNode;
***************
*** 1004,1010 ****
      int	x, y, z;
  
  #ifdef DEBUG_BTREE
!     sprintf(B->message, "MERGE:  left %d, right %d.\n", getnodenumber(B, left), getnodenumber(B, right));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      showNode(B, "pre-merge anchor", anchor);
      showNode(B, "pre-merge left", left);
--- 1005,1011 ----
      int	x, y, z;
  
  #ifdef DEBUG_BTREE
!     StringCbPrintfA(B->message, sizeof(B->message), "MERGE:  left %d, right %d.\n", getnodenumber(B, left), getnodenumber(B, right));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      showNode(B, "pre-merge anchor", anchor);
      showNode(B, "pre-merge left", left);
***************
*** 1061,1067 ****
      int	i, x, y, z;
  
  #ifdef DEBUG_BTREE
!     sprintf(B->message, "SHIFT:  left %d, right %d, anchor %d.\n", 
               getnodenumber(B, left), 
               getnodenumber(B, right), 
               getnodenumber(B, anchor));
--- 1062,1068 ----
      int	i, x, y, z;
  
  #ifdef DEBUG_BTREE
!     StringCbPrintfA(B->message, sizeof(B->message), "SHIFT:  left %d, right %d, anchor %d.\n", 
               getnodenumber(B, left), 
               getnodenumber(B, right), 
               getnodenumber(B, anchor));
***************
*** 1162,1168 ****
      setmergepath(B, NONODE);
  
  #ifdef DEBUG_BTREE
!     sprintf(B->message, "SHIFT:  left %d, right %d.\n", getnodenumber(B, left), getnodenumber(B, right));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      showNode(B, "post-shift anchor", anchor);
      showNode(B, "post-shift left", left);
--- 1163,1169 ----
      setmergepath(B, NONODE);
  
  #ifdef DEBUG_BTREE
!     StringCbPrintfA(B->message, sizeof(B->message), "SHIFT:  left %d, right %d.\n", getnodenumber(B, left), getnodenumber(B, right));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      showNode(B, "post-shift anchor", anchor);
      showNode(B, "post-shift left", left);
***************
*** 1192,1198 ****
      if (entry == 0)
          DebugBreak();
  #endif
!     getkey(node,entry + offset).name = strdup(getkey(node,entry).name);
  #ifdef DEBUG_BTREE
      if ( getnode(node, entry) == NONODE )
          DebugBreak();
--- 1193,1199 ----
      if (entry == 0)
          DebugBreak();
  #endif
!     getkey(node,entry + offset).name = cm_NormStrDup(getkey(node,entry).name);
  #ifdef DEBUG_BTREE
      if ( getnode(node, entry) == NONODE )
          DebugBreak();
***************
*** 1205,1211 ****
  {
      if (getkey(node,entry).name != NULL)
          free(getkey(node,entry).name);
!     getkey(node,entry).name = strdup(getkey(node,entry + offset).name);
  #ifdef DEBUG_BTREE
      if ( getnode(node, entry + offset) == NONODE )
          DebugBreak();
--- 1206,1212 ----
  {
      if (getkey(node,entry).name != NULL)
          free(getkey(node,entry).name);
!     getkey(node,entry).name = cm_NormStrDup(getkey(node,entry + offset).name);
  #ifdef DEBUG_BTREE
      if ( getnode(node, entry + offset) == NONODE )
          DebugBreak();
***************
*** 1218,1224 ****
  {
      if (getkey(destNode,destEntry).name != NULL)
          free(getkey(destNode,destEntry).name);
!     getkey(destNode,destEntry).name = strdup(getkey(srcNode,srcEntry).name);
  #ifdef DEBUG_BTREE
      if ( getnode(srcNode, srcEntry) == NONODE )
          DebugBreak();
--- 1219,1225 ----
  {
      if (getkey(destNode,destEntry).name != NULL)
          free(getkey(destNode,destEntry).name);
!     getkey(destNode,destEntry).name = cm_NormStrDup(getkey(srcNode,srcEntry).name);
  #ifdef DEBUG_BTREE
      if ( getnode(srcNode, srcEntry) == NONODE )
          DebugBreak();
***************
*** 1231,1237 ****
  {
      if (getkey(node,entry).name != NULL)
          free(getkey(node,entry).name);
!     getkey(node,entry).name = strdup(key.name);
  #ifdef DEBUG_BTREE
      if ( downNode == NONODE )
          DebugBreak();
--- 1232,1238 ----
  {
      if (getkey(node,entry).name != NULL)
          free(getkey(node,entry).name);
!     getkey(node,entry).name = cm_NormStrDup(key.name);
  #ifdef DEBUG_BTREE
      if ( downNode == NONODE )
          DebugBreak();
***************
*** 1289,1297 ****
                  free(getdatakey(node).name);
                  getdatakey(node).name = NULL;
              }
!             if ( getdatavalue(node).longname ) {
!                 free(getdatavalue(node).longname);
!                 getdatavalue(node).longname = NULL;
              }
          } else { /* data node */
              for ( j=1; j<=getfanout(B); j++ ) {
--- 1290,1302 ----
                  free(getdatakey(node).name);
                  getdatakey(node).name = NULL;
              }
!             if ( getdatavalue(node).cname ) {
!                 free(getdatavalue(node).cname);
!                 getdatavalue(node).cname = NULL;
!             }
!             if ( getdatavalue(node).fsname ) {
!                 free(getdatavalue(node).fsname);
!                 getdatavalue(node).fsname = NULL;
              }
          } else { /* data node */
              for ( j=1; j<=getfanout(B); j++ ) {
***************
*** 1341,1348 ****
      if (isdata(node)) {
          if ( getdatakey(node).name )
              free(getdatakey(node).name);
! 	if ( getdatavalue(node).longname )
! 	    free(getdatavalue(node).longname);
      } else {    /* data node */
          for ( i=1; i<=getfanout(B); i++ ) {
              if (getkey(node, i).name)
--- 1346,1355 ----
      if (isdata(node)) {
          if ( getdatakey(node).name )
              free(getdatakey(node).name);
! 	if ( getdatavalue(node).cname )
! 	    free(getdatavalue(node).cname);
!         if ( getdatavalue(node).fsname )
!             free(getdatavalue(node).fsname);
      } else {    /* data node */
          for ( i=1; i<=getfanout(B); i++ ) {
              if (getkey(node, i).name)
***************
*** 1364,1370 ****
      Nptr	newNode = getFreeNode(B);
  
      setflag(newNode, isDATA);
!     getdatakey(newNode).name = strdup(key.name);
      getdatavalue(newNode) = data;
      getdatanext(newNode) = NONODE;
  
--- 1371,1377 ----
      Nptr	newNode = getFreeNode(B);
  
      setflag(newNode, isDATA);
!     getdatakey(newNode).name = cm_NormStrDup(key.name);
      getdatavalue(newNode) = data;
      getdatanext(newNode) = NONODE;
  
***************
*** 1382,1442 ****
  {
      int x;
  
!     sprintf(B->message, "-  --  --  --  --  --  --  --  --  --  --  --  -\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "| %-20s                        |\n", where);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "| node %6d                 ", getnodenumber(B, n));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "  magic    %4x  |\n", getmagic(n));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "-  --  --  --  --  --  --  --  --  --  --  --  -\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "| flags   %1d%1d%1d%1d ", isfew(n), isfull(n), isroot(n), isleaf(n));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "| keys = %5d ", numentries(n));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "| node = %6d  |\n", getnodenumber(B, getfirstnode(n)));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      for (x = 1; x <= numentries(n); x++) {
!         sprintf(B->message, "| entry %6d ", x);
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!         sprintf(B->message, "| key = %6s ", getkey(n, x).name);
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!         sprintf(B->message, "| node = %6d  |\n", getnodenumber(B, getnode(n, x)));
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      }
!     sprintf(B->message, "-  --  --  --  --  --  --  --  --  --  --  --  -\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  }
  
  /******************   B+tree class variable printer   ******************/
  void showBtree(Tree *B)
  {
!     sprintf(B->message, "-  --  --  --  --  --  -\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "|  B+tree  %10p  |\n", (void *) B);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "-  --  --  --  --  --  -\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "|  root        %6d  |\n", getnodenumber(B, getroot(B)));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "|  leaf        %6d  |\n", getnodenumber(B, getleaf(B)));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "|  fanout         %3d  |\n", getfanout(B) + 1);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "|  minfanout      %3d  |\n", getminfanout(B, getroot(B)) + 1);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "|  height         %3d  |\n", gettreeheight(B));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "|  freenode    %6d  |\n", getnodenumber(B, getfirstfreenode(B)));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "|  theKey      %6s  |\n", getfunkey(B).name);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "|  theData     %d.%d.%d |\n", getfundata(B).volume,
               getfundata(B).vnode, getfundata(B).unique);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     sprintf(B->message, "-  --  --  --  --  --  -\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  }
  
--- 1389,1449 ----
  {
      int x;
  
!     StringCbPrintfA(B->message, sizeof(B->message), "-  --  --  --  --  --  --  --  --  --  --  --  -\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "| %-20s                        |\n", where);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "| node %6d                 ", getnodenumber(B, n));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "  magic    %4x  |\n", getmagic(n));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "-  --  --  --  --  --  --  --  --  --  --  --  -\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "| flags   %1d%1d%1d%1d ", isfew(n), isfull(n), isroot(n), isleaf(n));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "| keys = %5d ", numentries(n));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "| node = %6d  |\n", getnodenumber(B, getfirstnode(n)));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      for (x = 1; x <= numentries(n); x++) {
!         StringCbPrintfA(B->message, sizeof(B->message), "| entry %6d ", x);
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!         StringCbPrintfA(B->message, sizeof(B->message), "| key = %6s ", getkey(n, x).name);
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!         StringCbPrintfA(B->message, sizeof(B->message), "| node = %6d  |\n", getnodenumber(B, getnode(n, x)));
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
      }
!     StringCbPrintfA(B->message, sizeof(B->message), "-  --  --  --  --  --  --  --  --  --  --  --  -\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  }
  
  /******************   B+tree class variable printer   ******************/
  void showBtree(Tree *B)
  {
!     StringCbPrintfA(B->message, sizeof(B->message), "-  --  --  --  --  --  -\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "|  B+tree  %10p  |\n", (void *) B);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "-  --  --  --  --  --  -\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "|  root        %6d  |\n", getnodenumber(B, getroot(B)));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "|  leaf        %6d  |\n", getnodenumber(B, getleaf(B)));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "|  fanout         %3d  |\n", getfanout(B) + 1);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "|  minfanout      %3d  |\n", getminfanout(B, getroot(B)) + 1);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "|  height         %3d  |\n", gettreeheight(B));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "|  freenode    %6d  |\n", getnodenumber(B, getfirstfreenode(B)));
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "|  theKey      %6s  |\n", getfunkey(B).name);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "|  theData     %d.%d.%d |\n", getfundata(B).volume,
               getfundata(B).vnode, getfundata(B).unique);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
!     StringCbPrintfA(B->message, sizeof(B->message), "-  --  --  --  --  --  -\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  }
  
***************
*** 1448,1454 ****
      dataT data;
  
      if (isntnode(node)) {
!         sprintf(B->message, "%s - NoNode!!!\n");
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
          return;
      } 
--- 1455,1461 ----
      dataT data;
  
      if (isntnode(node)) {
!         StringCbPrintfA(B->message, sizeof(B->message), "%s - NoNode!!!\n");
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
          return;
      } 
***************
*** 1456,1462 ****
      if (!isnode(node))
      {
          data = getdatavalue(node);
!         sprintf(B->message, "%s - data node %d (%d.%d.%d)\n", 
                   parent_desc, getnodenumber(B, node),
                   data.fid.volume, data.fid.vnode, data.fid.unique);
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
--- 1463,1469 ----
      if (!isnode(node))
      {
          data = getdatavalue(node);
!         StringCbPrintfA(B->message, sizeof(B->message), "%s - data node %d (%d.%d.%d)\n", 
                   parent_desc, getnodenumber(B, node),
                   data.fid.volume, data.fid.vnode, data.fid.unique);
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
***************
*** 1465,1471 ****
          showNode(B, parent_desc, node);
  
      if ( isinternal(node) || isroot(node) ) {
!         sprintf(thisnode, "parent %6d", getnodenumber(B , node));
  
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
          for ( i= isinternal(node) ? 0 : 1; i <= numentries(node); i++ ) {
--- 1472,1478 ----
          showNode(B, parent_desc, node);
  
      if ( isinternal(node) || isroot(node) ) {
!         StringCbPrintfA(thisnode, sizeof(thisnode), "parent %6d", getnodenumber(B , node));
  
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
          for ( i= isinternal(node) ? 0 : 1; i <= numentries(node); i++ ) {
***************
*** 1479,1502 ****
  listBtreeValues(Tree *B, Nptr n, int num)
  {
      int slot;
!     keyT prev = {""};
      dataT data;
  
      for (slot = 1; (n != NONODE) && num && numentries(n); num--) {
          if (comparekeys(B)(getkey(n, slot),prev, 0) < 0) {
!             sprintf(B->message, "BOMB %8s\n", getkey(n, slot).name);
              osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
              DebugBreak();
          }
          prev = getkey(n, slot);
          data = getdatavalue(getnode(n, slot));
!         sprintf(B->message, "%8s (%d.%d.%d)\n", 
                  prev.name, data.fid.volume, data.fid.vnode, data.fid.unique);
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
          if (++slot > numentries(n))
              n = getnextnode(n), slot = 1;
!     }   
!     sprintf(B->message, "\n\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  }
  
--- 1486,1509 ----
  listBtreeValues(Tree *B, Nptr n, int num)
  {
      int slot;
!     keyT prev = {L""};
      dataT data;
  
      for (slot = 1; (n != NONODE) && num && numentries(n); num--) {
          if (comparekeys(B)(getkey(n, slot),prev, 0) < 0) {
!             StringCbPrintfA(B->message, sizeof(B->message), "BOMB %8s\n", getkey(n, slot).name);
              osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
              DebugBreak();
          }
          prev = getkey(n, slot);
          data = getdatavalue(getnode(n, slot));
!         StringCbPrintfA(B->message, sizeof(B->message), "%8S (%d.%d.%d)\n", 
                  prev.name, data.fid.volume, data.fid.vnode, data.fid.unique);
          osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
          if (++slot > numentries(n))
              n = getnextnode(n), slot = 1;
!     }
!     StringCbPrintfA(B->message, sizeof(B->message), "\n\n");
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  }
  
***************
*** 1514,1524 ****
      int num = -1;
      Nptr n = getleaf(B), l;
      int slot;
!     keyT prev = {""};
  
      for (slot = 1; (n != NONODE) && num && numentries(n); num--) {
          if (comparekeys(B)(getkey(n, slot),prev, 0) < 0) {
!             sprintf(B->message,"BOMB %8s\n", getkey(n, slot).name);
              osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #ifdef DEBUG_BTREE
              DebugBreak();
--- 1521,1531 ----
      int num = -1;
      Nptr n = getleaf(B), l;
      int slot;
!     keyT prev = {L""};
  
      for (slot = 1; (n != NONODE) && num && numentries(n); num--) {
          if (comparekeys(B)(getkey(n, slot),prev, 0) < 0) {
!             StringCbPrintfA(B->message, sizeof(B->message),"BOMB %8s\n", getkey(n, slot).name);
              osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #ifdef DEBUG_BTREE
              DebugBreak();
***************
*** 1528,1536 ****
          l = bplus_Lookup(B, prev);
          if ( l != n ){
              if (l == NONODE)
!                 sprintf(B->message,"BOMB %8s cannot be found\n", prev.name);
              else 
!                 sprintf(B->message,"BOMB lookup(%8s) finds wrong node\n", prev.name);
              osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #ifdef DEBUG_BTREE
              DebugBreak();
--- 1535,1543 ----
          l = bplus_Lookup(B, prev);
          if ( l != n ){
              if (l == NONODE)
!                 StringCbPrintfA(B->message, sizeof(B->message),"BOMB %8S cannot be found\n", prev.name);
              else 
!                 StringCbPrintfA(B->message, sizeof(B->message),"BOMB lookup(%8S) finds wrong node\n", prev.name);
              osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, B->message));
  #ifdef DEBUG_BTREE
              DebugBreak();
***************
*** 1552,1568 ****
   * match.  Otherwise, the search order might be considered 
   * to be inconsistent when the EXACT_MATCH flag is set.
   */
! static int
! compareKeys(keyT key1, keyT key2, int flags)
  {
      int comp;
  
!     comp = stricmp(key1.name, key2.name);
      if (comp == 0 && (flags & EXACT_MATCH))
!         comp = strcmp(key1.name, key2.name);
      return (comp < 0 ? -1 : (comp > 0 ? 1 : 0));
  }
  
  /* Look up a file name in directory.
  
     On entry:
--- 1559,1661 ----
   * match.  Otherwise, the search order might be considered 
   * to be inconsistent when the EXACT_MATCH flag is set.
   */
! int
! cm_BPlusCompareNormalizedKeys(keyT key1, keyT key2, int flags)
  {
      int comp;
  
!     comp = cm_NormStrCmpI(key1.name, key2.name);
      if (comp == 0 && (flags & EXACT_MATCH))
!         comp = cm_NormStrCmp(key1.name, key2.name);
      return (comp < 0 ? -1 : (comp > 0 ? 1 : 0));
  }
  
+ int
+ cm_BPlusDirLookupOriginalName(cm_dirOp_t * op, clientchar_t *centry,
+                               fschar_t **fsnameRetp)
+ {
+     int rc = EINVAL;
+     keyT key = {NULL};
+     Nptr leafNode = NONODE;
+     LARGE_INTEGER start, end;
+     fschar_t * fsname = NULL;
+     normchar_t * entry = NULL;
+ 
+     if (op->scp->dirBplus == NULL || 
+         op->dataVersion != op->scp->dirDataVersion) {
+         rc = EINVAL;
+         goto done;
+     }
+ 
+     entry = cm_ClientStringToNormStringAlloc(centry, -1, NULL);
+     key.name = entry;
+ 
+     lock_AssertAny(&op->scp->dirlock);
+ 
+     QueryPerformanceCounter(&start);
+ 
+     leafNode = bplus_Lookup(op->scp->dirBplus, key);
+     if (leafNode != NONODE) {
+         int         slot;
+         Nptr        firstDataNode, dataNode, nextDataNode;
+         int         exact = 0;
+         int         count = 0;
+ 
+         /* Found a leaf that matches the key via a case-insensitive
+          * match.  There may be one or more data nodes that match.
+          * If we have an exact match, return that.
+          * If we have an ambiguous match, return an error.
+          * If we have only one inexact match, return that.
+          */
+         slot = getSlot(op->scp->dirBplus, leafNode);
+         if (slot <= BTERROR) {
+             op->scp->dirDataVersion = 0;
+             rc = (slot == BTERROR ? EINVAL : ENOENT);
+             goto done;
+         }
+         firstDataNode = getnode(leafNode, slot);
+ 
+         for ( dataNode = firstDataNode; dataNode; dataNode = nextDataNode) {
+             count++;
+             if (!comparekeys(op->scp->dirBplus)(key, getdatakey(dataNode), EXACT_MATCH) ) {
+                 exact = 1;
+                 break;
+             }
+             nextDataNode = getdatanext(dataNode);
+         }
+ 
+         if (exact) {
+             fsname = getdatavalue(dataNode).fsname;
+             rc = 0;
+             bplus_lookup_hits++;
+         } else if (count == 1) {
+             fsname = getdatavalue(firstDataNode).fsname;
+             rc = CM_ERROR_INEXACT_MATCH;
+             bplus_lookup_hits_inexact++;
+         } else {
+             rc = CM_ERROR_AMBIGUOUS_FILENAME;
+             bplus_lookup_ambiguous++;
+         } 
+     } else {
+         rc = ENOENT;
+         bplus_lookup_misses++;
+     }
+ 
+     if (fsname)
+         *fsnameRetp = cm_FsStrDup(fsname);
+ 
+     QueryPerformanceCounter(&end);
+ 
+     bplus_lookup_time += (end.QuadPart - start.QuadPart);
+ 
+   done:
+     if (entry)
+         free(entry);
+ 
+     return rc;
+ 
+ }
+ 
  /* Look up a file name in directory.
  
     On entry:
***************
*** 1572,1581 ****
         op->scp->dirlock is read locked
  */
  int
! cm_BPlusDirLookup(cm_dirOp_t * op, char *entry, cm_fid_t * cfid)
  {
      int rc = EINVAL;
!     keyT key = {entry};
      Nptr leafNode = NONODE;
      LARGE_INTEGER start, end;
  
--- 1665,1675 ----
         op->scp->dirlock is read locked
  */
  int
! cm_BPlusDirLookup(cm_dirOp_t * op, clientchar_t * centry, cm_fid_t * cfid)
  {
      int rc = EINVAL;
!     normchar_t * entry = NULL;
!     keyT key = {NULL};
      Nptr leafNode = NONODE;
      LARGE_INTEGER start, end;
  
***************
*** 1585,1590 ****
--- 1679,1687 ----
          goto done;
      }
  
+     entry = cm_ClientStringToNormStringAlloc(centry, -1, NULL);
+     key.name = entry;
+ 
      lock_AssertAny(&op->scp->dirlock);
  
      QueryPerformanceCounter(&start);
***************
*** 1641,1646 ****
--- 1738,1746 ----
      bplus_lookup_time += (end.QuadPart - start.QuadPart);
  
    done:
+     if (entry)
+         free(entry);
+ 
      return rc;
  }
  
***************
*** 1652,1664 ****
     On exit:
         op->scp->dirlock is write locked
  */
! long cm_BPlusDirCreateEntry(cm_dirOp_t * op, char *entry, cm_fid_t * cfid)
  {
      long rc = 0;
!     keyT key = {entry};
      dataT  data;
      LARGE_INTEGER start, end;
!     char shortName[13];
  
      if (op->scp->dirBplus == NULL || 
          op->dataVersion != op->scp->dirDataVersion) {
--- 1752,1764 ----
     On exit:
         op->scp->dirlock is write locked
  */
! long cm_BPlusDirCreateEntry(cm_dirOp_t * op, clientchar_t * entry, cm_fid_t * cfid)
  {
      long rc = 0;
!     keyT key = {NULL};
      dataT  data;
      LARGE_INTEGER start, end;
!     normchar_t * normalizedName = NULL;
  
      if (op->scp->dirBplus == NULL || 
          op->dataVersion != op->scp->dirDataVersion) {
***************
*** 1666,1690 ****
          goto done;
      }
  
  
      lock_AssertWrite(&op->scp->dirlock);
  
      cm_SetFid(&data.fid, cfid->cell, cfid->volume, cfid->vnode, cfid->unique);
!     data.longname = NULL;
  
      QueryPerformanceCounter(&start);
      bplus_create_entry++;
  
      insert(op->scp->dirBplus, key, data);
      if (!cm_Is8Dot3(entry)) {
          cm_dirFid_t dfid;
          dfid.vnode = htonl(data.fid.vnode);
          dfid.unique = htonl(data.fid.unique);
  
!         cm_Gen8Dot3NameInt(entry, &dfid, shortName, NULL);
  
-         key.name = shortName;
-         data.longname = strdup(entry);
          insert(op->scp->dirBplus, key, data);
      }
  
--- 1766,1801 ----
          goto done;
      }
  
+     normalizedName = cm_ClientStringToNormStringAlloc(entry, -1, NULL);
+     key.name = normalizedName;
  
      lock_AssertWrite(&op->scp->dirlock);
  
      cm_SetFid(&data.fid, cfid->cell, cfid->volume, cfid->vnode, cfid->unique);
!     data.cname = cm_ClientStrDup(entry);
!     data.fsname = cm_ClientStringToFsStringAlloc(entry, -1, NULL);
!     data.shortform = FALSE;
  
      QueryPerformanceCounter(&start);
      bplus_create_entry++;
  
      insert(op->scp->dirBplus, key, data);
+     
      if (!cm_Is8Dot3(entry)) {
          cm_dirFid_t dfid;
+         clientchar_t wshortName[13];
+ 
          dfid.vnode = htonl(data.fid.vnode);
          dfid.unique = htonl(data.fid.unique);
  
!         cm_Gen8Dot3NameIntW(entry, &dfid, wshortName, NULL);
! 
!         key.name = wshortName;
! 
!         data.cname = cm_ClientStrDup(entry);
!         data.fsname = cm_ClientStringToFsStringAlloc(entry, -1, NULL);
!         data.shortform = TRUE;
  
          insert(op->scp->dirBplus, key, data);
      }
  
***************
*** 1694,1699 ****
--- 1805,1813 ----
  
    done:
  
+     if (normalizedName != NULL)
+         free(normalizedName);
+ 
      return rc;
  }
  
***************
*** 1704,1715 ****
     On exit:
         op->scp->dirlock is write locked
  */
! int  cm_BPlusDirDeleteEntry(cm_dirOp_t * op, char *entry)
  {
      long rc = 0;
!     keyT key = {entry};
      Nptr leafNode = NONODE;
      LARGE_INTEGER start, end;
  
      if (op->scp->dirBplus == NULL || 
          op->dataVersion != op->scp->dirDataVersion) {
--- 1818,1830 ----
     On exit:
         op->scp->dirlock is write locked
  */
! int  cm_BPlusDirDeleteEntry(cm_dirOp_t * op, clientchar_t *centry)
  {
      long rc = 0;
!     keyT key = {NULL};
      Nptr leafNode = NONODE;
      LARGE_INTEGER start, end;
+     normchar_t * normalizedEntry = NULL;
  
      if (op->scp->dirBplus == NULL || 
          op->dataVersion != op->scp->dirDataVersion) {
***************
*** 1717,1722 ****
--- 1832,1840 ----
          goto done;
      }
  
+     normalizedEntry = cm_ClientStringToNormStringAlloc(centry, -1, NULL);
+     key.name = normalizedEntry;
+ 
      lock_AssertWrite(&op->scp->dirlock);
  
      QueryPerformanceCounter(&start);
***************
*** 1724,1733 ****
      bplus_remove_entry++;
  
      if (op->scp->dirBplus) {
!         if (!cm_Is8Dot3(entry)) {
              cm_dirFid_t dfid;
              cm_fid_t fid;
!             char shortName[13];
  
              leafNode = bplus_Lookup(op->scp->dirBplus, key);
              if (leafNode != NONODE) {
--- 1842,1851 ----
      bplus_remove_entry++;
  
      if (op->scp->dirBplus) {
!         if (!cm_Is8Dot3(centry)) {
              cm_dirFid_t dfid;
              cm_fid_t fid;
!             clientchar_t shortName[13];
  
              leafNode = bplus_Lookup(op->scp->dirBplus, key);
              if (leafNode != NONODE) {
***************
*** 1774,1780 ****
              if (rc != CM_ERROR_AMBIGUOUS_FILENAME) {
                  dfid.vnode = htonl(fid.vnode);
                  dfid.unique = htonl(fid.unique);
!                 cm_Gen8Dot3NameInt(entry, &dfid, shortName, NULL);
  
                  /* delete first the long name and then the short name */
                  delete(op->scp->dirBplus, key);
--- 1892,1898 ----
              if (rc != CM_ERROR_AMBIGUOUS_FILENAME) {
                  dfid.vnode = htonl(fid.vnode);
                  dfid.unique = htonl(fid.unique);
!                 cm_Gen8Dot3NameIntW(centry, &dfid, shortName, NULL);
  
                  /* delete first the long name and then the short name */
                  delete(op->scp->dirBplus, key);
***************
*** 1782,1788 ****
                  delete(op->scp->dirBplus, key);
              }
          } else {
!             char * longname = NULL;
              /* We need to lookup the 8dot3 name to determine what the 
               * matching long name is
               */
--- 1900,1907 ----
                  delete(op->scp->dirBplus, key);
              }
          } else {
!             clientchar_t * cname = NULL;
! 
              /* We need to lookup the 8dot3 name to determine what the 
               * matching long name is
               */
***************
*** 1818,1827 ****
                  }
  
                  if (exact) {
!                     longname = getdatavalue(dataNode).longname;
                      rc = 0;
                  } else if (count == 1) {
!                     longname = getdatavalue(firstDataNode).longname;
                      rc = CM_ERROR_INEXACT_MATCH;
                  } else {
                      rc = CM_ERROR_AMBIGUOUS_FILENAME;
--- 1937,1946 ----
                  }
  
                  if (exact) {
!                     cname = getdatavalue(dataNode).cname;
                      rc = 0;
                  } else if (count == 1) {
!                     cname = getdatavalue(firstDataNode).cname;
                      rc = CM_ERROR_INEXACT_MATCH;
                  } else {
                      rc = CM_ERROR_AMBIGUOUS_FILENAME;
***************
*** 1829,1839 ****
              }
  
              if (rc != CM_ERROR_AMBIGUOUS_FILENAME) {
!                 if (longname) {
!                     key.name = longname;
                      delete(op->scp->dirBplus, key);
!                     key.name = entry;
                  }
                  delete(op->scp->dirBplus, key);
              }
          }
--- 1948,1963 ----
              }
  
              if (rc != CM_ERROR_AMBIGUOUS_FILENAME) {
!                 if (cname) {
!                     normchar_t * longNName = cm_NormalizeStringAlloc(cname, -1, NULL);
! 
!                     key.name = longNName;
                      delete(op->scp->dirBplus, key);
!                     key.name = normalizedEntry;
! 
!                     free(longNName);
                  }
+ 
                  delete(op->scp->dirBplus, key);
              }
          }
***************
*** 1844,1849 ****
--- 1968,1976 ----
      bplus_remove_time += (end.QuadPart - start.QuadPart);
  
    done:
+     if (normalizedEntry)
+         free(normalizedEntry);
+ 
      return rc;
        
  }
***************
*** 1852,1878 ****
  int cm_BPlusDirFoo(struct cm_scache *scp, struct cm_dirEntry *dep,
                     void *dummy, osi_hyper_t *entryOffsetp)
  {
!     keyT   key = {dep->name};
      dataT  data;
!     char   shortName[13];
  
!     cm_SetFid(&data.fid, scp->fid.cell, scp->fid.volume, ntohl(dep->fid.vnode), ntohl(dep->fid.unique));
!     data.longname = NULL;
  
      /* the Write lock is held in cm_BPlusDirBuildTree() */
      insert(scp->dirBplus, key, data);
!     if (!cm_Is8Dot3(dep->name)) {
          cm_dirFid_t dfid;
          dfid.vnode = dep->fid.vnode;
          dfid.unique = dep->fid.unique;
  
!         cm_Gen8Dot3NameInt(dep->name, &dfid, shortName, NULL);
  
!         key.name = shortName;
!         data.longname = strdup(dep->name);
          insert(scp->dirBplus, key, data);
      }
  
  #ifdef BTREE_DEBUG
      findAllBtreeValues(scp->dirBplus);
  #endif
--- 1979,2031 ----
  int cm_BPlusDirFoo(struct cm_scache *scp, struct cm_dirEntry *dep,
                     void *dummy, osi_hyper_t *entryOffsetp)
  {
!     keyT   key = {NULL};
      dataT  data;
!     normchar_t *normalized_name=NULL;
  
!     cm_SetFid(&data.fid, scp->fid.cell, scp->fid.volume, 
!               ntohl(dep->fid.vnode), ntohl(dep->fid.unique));
!     data.cname = NULL;
!     data.fsname = NULL;
  
+     normalized_name = cm_FsStringToNormStringAlloc(dep->name, -1, NULL);
+ 
+     if (normalized_name) {
+         key.name = normalized_name;
+     } else {
+ #ifdef DEBUG
+         DebugBreak();
+ #endif
+         return 0;
+     }
+   
+     data.cname = cm_FsStringToClientStringAlloc(dep->name, -1, NULL);
+     data.fsname = cm_FsStrDup(dep->name);
+     data.shortform = FALSE;
+      
      /* the Write lock is held in cm_BPlusDirBuildTree() */
      insert(scp->dirBplus, key, data);
! 
!     if (!cm_Is8Dot3(data.cname)) {
          cm_dirFid_t dfid;
+         wchar_t wshortName[13];
+ 
          dfid.vnode = dep->fid.vnode;
          dfid.unique = dep->fid.unique;
  
!         cm_Gen8Dot3NameIntW(data.cname, &dfid, wshortName, NULL);
  
!         key.name = wshortName;
!         data.cname = cm_FsStringToClientStringAlloc(dep->name, -1, NULL);
!         data.fsname = cm_FsStrDup(dep->name);
!         data.shortform = TRUE;
!   
          insert(scp->dirBplus, key, data);
      }
  
+     if (normalized_name)
+         free(normalized_name);
+ 
  #ifdef BTREE_DEBUG
      findAllBtreeValues(scp->dirBplus);
  #endif
***************
*** 1899,1905 ****
      bplus_build_tree++;
  
      if (scp->dirBplus == NULL) {
!         scp->dirBplus = initBtree(64, MAX_FANOUT, compareKeys);
      }
      if (scp->dirBplus == NULL) {
          rc = ENOMEM;
--- 2052,2058 ----
      bplus_build_tree++;
  
      if (scp->dirBplus == NULL) {
!         scp->dirBplus = initBtree(64, MAX_FANOUT, cm_BPlusCompareNormalizedKeys);
      }
      if (scp->dirBplus == NULL) {
          rc = ENOMEM;
***************
*** 1924,1957 ****
      int zilch;
      char output[128];
  
!     sprintf(output, "%s - B+ Lookup    Hits: %-8d\r\n", cookie, bplus_lookup_hits);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     sprintf(output, "%s -      Inexact Hits: %-8d\r\n", cookie, bplus_lookup_hits_inexact);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     sprintf(output, "%s -    Ambiguous Hits: %-8d\r\n", cookie, bplus_lookup_ambiguous);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     sprintf(output, "%s -            Misses: %-8d\r\n", cookie, bplus_lookup_misses);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     sprintf(output, "%s -            Create: %-8d\r\n", cookie, bplus_create_entry);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     sprintf(output, "%s -            Remove: %-8d\r\n", cookie, bplus_remove_entry);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     sprintf(output, "%s -        Build Tree: %-8d\r\n", cookie, bplus_build_tree);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     sprintf(output, "%s -         Free Tree: %-8d\r\n", cookie, bplus_free_tree);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     sprintf(output, "%s -          DV Error: %-8d\r\n", cookie, bplus_dv_error);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
  
!     sprintf(output, "%s - B+ Time    Lookup: %-16I64d\r\n", cookie, bplus_lookup_time);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     sprintf(output, "%s -            Create: %-16I64d\r\n", cookie, bplus_create_time);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     sprintf(output, "%s -            Remove: %-16I64d\r\n", cookie, bplus_remove_time);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     sprintf(output, "%s -             Build: %-16I64d\r\n", cookie, bplus_build_time);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     sprintf(output, "%s -              Free: %-16I64d\r\n", cookie, bplus_free_time);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
  
      return(0);
--- 2077,2110 ----
      int zilch;
      char output[128];
  
!     StringCbPrintfA(output, sizeof(output), "%s - B+ Lookup    Hits: %-8d\r\n", cookie, bplus_lookup_hits);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     StringCbPrintfA(output, sizeof(output), "%s -      Inexact Hits: %-8d\r\n", cookie, bplus_lookup_hits_inexact);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     StringCbPrintfA(output, sizeof(output), "%s -    Ambiguous Hits: %-8d\r\n", cookie, bplus_lookup_ambiguous);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     StringCbPrintfA(output, sizeof(output), "%s -            Misses: %-8d\r\n", cookie, bplus_lookup_misses);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     StringCbPrintfA(output, sizeof(output), "%s -            Create: %-8d\r\n", cookie, bplus_create_entry);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     StringCbPrintfA(output, sizeof(output), "%s -            Remove: %-8d\r\n", cookie, bplus_remove_entry);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     StringCbPrintfA(output, sizeof(output), "%s -        Build Tree: %-8d\r\n", cookie, bplus_build_tree);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     StringCbPrintfA(output, sizeof(output), "%s -         Free Tree: %-8d\r\n", cookie, bplus_free_tree);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     StringCbPrintfA(output, sizeof(output), "%s -          DV Error: %-8d\r\n", cookie, bplus_dv_error);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
  
!     StringCbPrintfA(output, sizeof(output), "%s - B+ Time    Lookup: %-16I64d\r\n", cookie, bplus_lookup_time);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     StringCbPrintfA(output, sizeof(output), "%s -            Create: %-16I64d\r\n", cookie, bplus_create_time);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     StringCbPrintfA(output, sizeof(output), "%s -            Remove: %-16I64d\r\n", cookie, bplus_remove_time);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     StringCbPrintfA(output, sizeof(output), "%s -             Build: %-16I64d\r\n", cookie, bplus_build_time);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
!     StringCbPrintfA(output, sizeof(output), "%s -              Free: %-16I64d\r\n", cookie, bplus_free_time);
      WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
  
      return(0);
***************
*** 1994,2000 ****
  
  long 
  cm_BPlusDirEnumerate(cm_scache_t *scp, afs_uint32 locked, 
!                      char * maskp, cm_direnum_t **enumpp)
  {
      afs_uint32 count = 0, slot, numentries;
      Nptr leafNode = NONODE, nextLeafNode;
--- 2147,2153 ----
  
  long 
  cm_BPlusDirEnumerate(cm_scache_t *scp, afs_uint32 locked, 
!                      clientchar_t * maskp, cm_direnum_t **enumpp)
  {
      afs_uint32 count = 0, slot, numentries;
      Nptr leafNode = NONODE, nextLeafNode;
***************
*** 2021,2036 ****
  	    firstDataNode = getnode(leafNode, slot);
  
  	    for ( dataNode = firstDataNode; dataNode; dataNode = nextDataNode) {
                  if (maskp == NULL) {
!                     /* name is in getdatakey(dataNode) */
!                     if (getdatavalue(dataNode).longname != NULL ||
!                         cm_Is8Dot3(getdatakey(dataNode).name))
                          count++;
                  } else {
! 		    if (cm_Is8Dot3(getdatakey(dataNode).name) && 
!                         smb_V3MatchMask(getdatakey(dataNode).name, maskp, CM_FLAG_CASEFOLD) ||
!                         getdatavalue(dataNode).longname == NULL &&
!                         smb_V3MatchMask(getdatavalue(dataNode).longname, maskp, CM_FLAG_CASEFOLD))
                          count++;
                  }
  		nextDataNode = getdatanext(dataNode);
--- 2174,2190 ----
  	    firstDataNode = getnode(leafNode, slot);
  
  	    for ( dataNode = firstDataNode; dataNode; dataNode = nextDataNode) {
+ 
+                 /* There can be two data nodes for one file.  One for
+                    the long name and one for the short name.  We only
+                    include one of these for the enumeration */
+ 
                  if (maskp == NULL) {
!                     if (!getdatavalue(dataNode).shortform)
                          count++;
                  } else {
! 		    if (!getdatavalue(dataNode).shortform &&
!                         cm_MatchMask(getdatavalue(dataNode).cname, maskp, CM_FLAG_CASEFOLD))
                          count++;
                  }
  		nextDataNode = getdatanext(dataNode);
***************
*** 2038,2046 ****
  	}
  
  	nextLeafNode = getnextnode(leafNode);
!     }   
  
!     sprintf(buffer, "BPlusTreeEnumerate count = %d", count);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, buffer));
  
      /* Allocate the enumeration object */
--- 2192,2200 ----
  	}
  
  	nextLeafNode = getnextnode(leafNode);
!     }
  
!     StringCbPrintfA(buffer, sizeof(buffer), "BPlusTreeEnumerate count = %d", count);
      osi_Log1(afsd_logp, "BPlus: %s", osi_LogSaveString(afsd_logp, buffer));
  
      /* Allocate the enumeration object */
***************
*** 2050,2104 ****
  	rc = ENOMEM;
  	goto done;
      }
! 	
!     /* Copy the name and fid for each longname entry into the enumeration */
      for (count = 0, leafNode = getleaf(scp->dirBplus); leafNode; leafNode = nextLeafNode) {
  
  	for ( slot = 1, numentries = numentries(leafNode); slot <= numentries; slot++) {
  	    firstDataNode = getnode(leafNode, slot);
  
  	    for ( dataNode = firstDataNode; dataNode; dataNode = nextDataNode) {
!                 char * name;
!                 int hasShortName;
                  int includeIt = 0;
  
                  if (maskp == NULL) {
!                     if (getdatavalue(dataNode).longname != NULL ||
!                          cm_Is8Dot3(getdatakey(dataNode).name)) 
!                     {
                          includeIt = 1;
                      }
                  } else {
! 		    if (cm_Is8Dot3(getdatakey(dataNode).name) && 
!                         smb_V3MatchMask(getdatakey(dataNode).name, maskp, CM_FLAG_CASEFOLD) ||
!                         getdatavalue(dataNode).longname == NULL &&
!                          smb_V3MatchMask(getdatavalue(dataNode).longname, maskp, CM_FLAG_CASEFOLD)) 
!                     {
                          includeIt = 1;
                      }
                  }
  
                  if (includeIt) {
!                     if (getdatavalue(dataNode).longname) {
!                         name = strdup(getdatavalue(dataNode).longname);
!                         hasShortName = 1;
!                     } else {
!                         name = strdup(getdatakey(dataNode).name);
!                         hasShortName = 0;
!                     }
  
                      if (name == NULL) {
                          osi_Log0(afsd_logp, "cm_BPlusDirEnumerate strdup failed");
                          rc = ENOMEM;
                          goto done;
                      }
                      enump->entry[count].name = name;
                      enump->entry[count].fid  = getdatavalue(dataNode).fid;
!                     if (hasShortName)
!                         strncpy(enump->entry[count].shortName, getdatakey(dataNode).name, 
!                                 sizeof(enump->entry[count].shortName));
!                     else
!                         enump->entry[count].shortName[0] = '\0';
                      count++;
                  }
  		nextDataNode = getdatanext(dataNode);
--- 2204,2256 ----
  	rc = ENOMEM;
  	goto done;
      }
! 
!     /* Copy the name and fid for each cname entry into the enumeration */
      for (count = 0, leafNode = getleaf(scp->dirBplus); leafNode; leafNode = nextLeafNode) {
  
  	for ( slot = 1, numentries = numentries(leafNode); slot <= numentries; slot++) {
  	    firstDataNode = getnode(leafNode, slot);
  
  	    for ( dataNode = firstDataNode; dataNode; dataNode = nextDataNode) {
!                 clientchar_t * name;
                  int includeIt = 0;
  
                  if (maskp == NULL) {
!                     if (!getdatavalue(dataNode).shortform) {
                          includeIt = 1;
                      }
                  } else {
! 		    if (!getdatavalue(dataNode).shortform &&
!                         cm_MatchMask(getdatavalue(dataNode).cname, maskp, CM_FLAG_CASEFOLD)) {
                          includeIt = 1;
                      }
                  }
  
                  if (includeIt) {
!                     name = cm_ClientStrDup(getdatavalue(dataNode).cname);
  
                      if (name == NULL) {
                          osi_Log0(afsd_logp, "cm_BPlusDirEnumerate strdup failed");
                          rc = ENOMEM;
                          goto done;
                      }
+ 
                      enump->entry[count].name = name;
                      enump->entry[count].fid  = getdatavalue(dataNode).fid;
! 
!                     if (!cm_Is8Dot3(name)) {
!                         cm_dirFid_t dfid;
! 
!                         dfid.vnode = htonl(getdatavalue(dataNode).fid.vnode);
!                         dfid.unique = htonl(getdatavalue(dataNode).fid.unique);
! 
!                         cm_Gen8Dot3NameIntW(name, &dfid, enump->entry[count].shortName, NULL);
!                     } else {
!                         StringCbCopyW(enump->entry[count].shortName,
!                                       sizeof(enump->entry[count].shortName),
!                                       name);
!                     }
! 
                      count++;
                  }
  		nextDataNode = getdatanext(dataNode);
***************
*** 2130,2135 ****
--- 2282,2339 ----
  }
  
  long 
+ cm_BPlusDirEnumBulkStat(cm_scache_t *dscp, cm_direnum_t *enump, cm_user_t *userp, cm_req_t *reqp)
+ {
+     cm_bulkStat_t *bsp;
+     afs_uint32 count;
+     afs_uint32 code;
+ 
+     if ( dscp->fid.cell == AFS_FAKE_ROOT_CELL_ID )
+         return 0;
+ 
+     bsp = malloc(sizeof(cm_bulkStat_t));
+     memset(bsp, 0, sizeof(cm_bulkStat_t));
+ 
+     for ( count = 0; count < enump->count; count++ ) {
+         cm_scache_t   *tscp = cm_FindSCache(&enump->entry[count].fid);
+         int i;
+ 
+         if (tscp) {
+             if (lock_TryWrite(&tscp->rw)) {
+                 /* we have an entry that we can look at */
+                 if (!(tscp->flags & CM_SCACHEFLAG_EACCESS) && cm_HaveCallback(tscp)) {
+                     /* we have a callback on it.  Don't bother
+                      * fetching this stat entry, since we're happy
+                      * with the info we have.
+                      */
+                     lock_ReleaseWrite(&tscp->rw);
+                     cm_ReleaseSCache(tscp);
+                     continue;
+                 }
+                 lock_ReleaseWrite(&tscp->rw);
+             }	/* got lock */
+             cm_ReleaseSCache(tscp);
+         }	/* found entry */
+ 
+         i = bsp->counter++;
+         bsp->fids[i].Volume = enump->entry[count].fid.volume;
+         bsp->fids[i].Vnode = enump->entry[count].fid.vnode;
+         bsp->fids[i].Unique = enump->entry[count].fid.unique;
+ 
+         if (bsp->counter == AFSCBMAX) {
+             code = cm_TryBulkStatRPC(dscp, bsp, userp, reqp);
+             memset(bsp, 0, sizeof(cm_bulkStat_t));
+         }
+     }
+ 
+     if (bsp->counter > 0)
+         code = cm_TryBulkStatRPC(dscp, bsp, userp, reqp);
+ 
+     free(bsp);
+     return 0;
+ }
+ 
+ long 
  cm_BPlusDirNextEnumEntry(cm_direnum_t *enump, cm_direnum_entry_t **entrypp)
  {	
      if (enump == NULL || entrypp == NULL || enump->next > enump->count) {
***************
*** 2213,2219 ****
                  cm_ReleaseSCache(scp);
  	    }
  
! 	    sprintf(buffer, "'%s' Fid = (%d,%d,%d,%d) Short = '%s' Type %s DV %I64d",
  		    entryp->name,
  		    entryp->fid.cell, entryp->fid.volume, entryp->fid.vnode, entryp->fid.unique,
  		    entryp->shortName,
--- 2417,2423 ----
                  cm_ReleaseSCache(scp);
  	    }
  
! 	    StringCbPrintfA(buffer, sizeof(buffer), "'%S' Fid = (%d,%d,%d,%d) Short = '%S' Type %s DV %I64d",
  		    entryp->name,
  		    entryp->fid.cell, entryp->fid.volume, entryp->fid.vnode, entryp->fid.unique,
  		    entryp->shortName,
Index: openafs/src/WINNT/afsd/cm_btree.h
diff -c openafs/src/WINNT/afsd/cm_btree.h:1.1.2.7 openafs/src/WINNT/afsd/cm_btree.h:1.1.2.10
*** openafs/src/WINNT/afsd/cm_btree.h:1.1.2.7	Mon Nov  5 13:26:49 2007
--- openafs/src/WINNT/afsd/cm_btree.h	Mon Jul 14 09:01:31 2008
***************
*** 48,60 ****
  typedef struct node	*Nptr;
  
  typedef struct key {
!     char *name;
  } keyT;
  
- 
  typedef struct dirdata {
      cm_fid_t    fid;
!     char * longname;
  } dataT;
  
  typedef struct entry {
--- 48,65 ----
  typedef struct node	*Nptr;
  
  typedef struct key {
!     normchar_t  *name;           /* Normalized name */
  } keyT;
  
  typedef struct dirdata {
      cm_fid_t    fid;
!     int         shortform;      /* This is the short form entry.  If
!                                    this value is non-zero, then there
!                                    is another entry in the B-Plus tree
!                                    corresponding to the long name of
!                                    this fid. */
!     clientchar_t  *cname;          /* Client name (long) */
!     fschar_t * fsname;         /* FileServer name */
  } dataT;
  
  typedef struct entry {
***************
*** 136,154 ****
  Nptr	lookup(Tree *B, keyT key);
  
  /******************* cache manager directory operations ***************/
! int  cm_BPlusDirLookup(cm_dirOp_t * op, char *entry, cm_fid_t * cfid);
! long cm_BPlusDirCreateEntry(cm_dirOp_t * op, char *entry, cm_fid_t * cfid);
! int  cm_BPlusDirDeleteEntry(cm_dirOp_t * op, char *entry);
  long cm_BPlusDirBuildTree(cm_scache_t *scp, cm_user_t *userp, cm_req_t* reqp);
  void cm_BPlusDumpStats(void);
! int cm_MemDumpBPlusStats(FILE *outputFile, char *cookie, int lock);
! 
  
  /******************* directory enumeration operations ****************/
  typedef struct cm_direnum_entry {
!     char * 	name;
!     cm_fid_t 	fid;
!     char        shortName[13];
  } cm_direnum_entry_t;
  
  typedef struct cm_direnum {
--- 141,161 ----
  Nptr	lookup(Tree *B, keyT key);
  
  /******************* cache manager directory operations ***************/
! 
! int  cm_BPlusCompareNormalizedKeys(keyT key1, keyT key2, int flags);
! int  cm_BPlusDirLookup(cm_dirOp_t * op, clientchar_t *entry, cm_fid_t * cfid);
! int  cm_BPlusDirLookupOriginalName(cm_dirOp_t * op, clientchar_t *entry, fschar_t **originalNameRetp);
! long cm_BPlusDirCreateEntry(cm_dirOp_t * op, clientchar_t *entry, cm_fid_t * cfid);
! int  cm_BPlusDirDeleteEntry(cm_dirOp_t * op, clientchar_t *entry);
  long cm_BPlusDirBuildTree(cm_scache_t *scp, cm_user_t *userp, cm_req_t* reqp);
  void cm_BPlusDumpStats(void);
! int  cm_MemDumpBPlusStats(FILE *outputFile, char *cookie, int lock);
  
  /******************* directory enumeration operations ****************/
  typedef struct cm_direnum_entry {
!     clientchar_t *name;
!     cm_fid_t 	 fid;
!     normchar_t   shortName[13];
  } cm_direnum_entry_t;
  
  typedef struct cm_direnum {
***************
*** 157,166 ****
      cm_direnum_entry_t 	entry[1];
  } cm_direnum_t;
  
! long cm_BPlusDirEnumerate(cm_scache_t *scp, afs_uint32 locked, char *maskp, cm_direnum_t **enumpp);
  long cm_BPlusDirNextEnumEntry(cm_direnum_t *enump, cm_direnum_entry_t **entrypp);
  long cm_BPlusDirFreeEnumeration(cm_direnum_t *enump);
  long cm_BPlusDirEnumTest(cm_scache_t * dscp, afs_uint32 locked);
  
  long cm_InitBPlusDir(void);
  
--- 164,174 ----
      cm_direnum_entry_t 	entry[1];
  } cm_direnum_t;
  
! long cm_BPlusDirEnumerate(cm_scache_t *scp, afs_uint32 locked, clientchar_t *maskp, cm_direnum_t **enumpp);
  long cm_BPlusDirNextEnumEntry(cm_direnum_t *enump, cm_direnum_entry_t **entrypp);
  long cm_BPlusDirFreeEnumeration(cm_direnum_t *enump);
  long cm_BPlusDirEnumTest(cm_scache_t * dscp, afs_uint32 locked);
+ long cm_BPlusDirEnumBulkStat(cm_scache_t *dscp, cm_direnum_t *enump, cm_user_t *userp, cm_req_t *reqp);
  
  long cm_InitBPlusDir(void);
  
***************
*** 179,185 ****
  /* access keys and pointers in a node */
  #define getkey(j, q) (nAdr(j).e[(q)].key)
  #define getnode(j, q) (nAdr(j).e[(q)].downNode)
! #define setkey(j, q, v) ((q > 0) ? nAdr(j).e[(q)].key.name = strdup((v).name) : NULL)
  #define setnode(j, q, v) (nAdr(j).e[(q)].downNode = (v))
  
  /* access tree flag values */
--- 187,193 ----
  /* access keys and pointers in a node */
  #define getkey(j, q) (nAdr(j).e[(q)].key)
  #define getnode(j, q) (nAdr(j).e[(q)].downNode)
! #define setkey(j, q, v) ((q > 0) ? nAdr(j).e[(q)].key.name = cm_NormStrDup((v).name) : NULL)
  #define setnode(j, q, v) (nAdr(j).e[(q)].downNode = (v))
  
  /* access tree flag values */
Index: openafs/src/WINNT/afsd/cm_buf.c
diff -c openafs/src/WINNT/afsd/cm_buf.c:1.31.2.38.2.1 openafs/src/WINNT/afsd/cm_buf.c:1.31.2.41
*** openafs/src/WINNT/afsd/cm_buf.c:1.31.2.38.2.1	Sun Jun 22 23:02:06 2008
--- openafs/src/WINNT/afsd/cm_buf.c	Thu Jun 26 10:38:23 2008
***************
*** 12,20 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
- #endif
  #include <osi.h>
  #include <stdio.h>
  #include <assert.h>
--- 12,18 ----
***************
*** 225,236 ****
  
      while (buf_ShutdownFlag == 0) {
  	if (!wasDirty) {
- #ifndef DJGPP
  	    i = SleepEx(5000, 1);
  	    if (i != 0) continue;
- #else
- 	    thrd_Sleep(5000);
- #endif /* DJGPP */
  	}
  
  	wasDirty = 0;
--- 223,230 ----
***************
*** 481,489 ****
                                 "buf_IncrSyncer");
  
          osi_assertx(phandle != NULL, "buf: can't create incremental sync proc");
- #ifndef DJGPP
          CloseHandle(phandle);
- #endif /* !DJGPP */
      }
  
  #ifdef TESTING
--- 475,481 ----
***************
*** 910,915 ****
--- 902,911 ----
               * we hold the global lock.
               */
  
+             /* Don't recycle a buffer held by the redirector. */
+             if (bp->flags & CM_BUF_REDIR)
+                 continue;
+ 
              /* don't recycle someone in our own chunk */
              if (!cm_FidCmp(&bp->fid, &scp->fid)
                   && (bp->offset.LowPart & (-cm_chunkSize))
Index: openafs/src/WINNT/afsd/cm_buf.h
diff -c openafs/src/WINNT/afsd/cm_buf.h:1.12.4.14 openafs/src/WINNT/afsd/cm_buf.h:1.12.4.16
*** openafs/src/WINNT/afsd/cm_buf.h:1.12.4.14	Thu Apr 24 12:22:44 2008
--- openafs/src/WINNT/afsd/cm_buf.h	Thu Jun 26 12:38:29 2008
***************
*** 106,111 ****
--- 106,112 ----
  #define CM_BUF_WAITING	0x40	/* someone's waiting for a flag to change */
  #define CM_BUF_INDL     0x80    /* in the dirty list */
  #define CM_BUF_EOF	0x100	/* read 0 bytes; used for detecting EOF */
+ #define CM_BUF_REDIR    0x200   /* buffer held by the redirector */
  
  typedef struct cm_buf_ops {
      long (*Writep)(void *, osi_hyper_t *, long, long, struct cm_user *,
***************
*** 202,207 ****
--- 203,210 ----
  
  extern long buf_ForceDataVersion(cm_scache_t * scp, afs_uint64 fromVersion, afs_uint64 toVersion);
  
+ extern int cm_DumpBufHashTable(FILE *outputFile, char *cookie, int lock);
+ 
  /* error codes */
  #define CM_BUF_EXISTS	1	/* buffer exists, and shouldn't */
  #endif /*  _BUF_H__ENV_ */
Index: openafs/src/WINNT/afsd/cm_callback.c
diff -c openafs/src/WINNT/afsd/cm_callback.c:1.41.4.43 openafs/src/WINNT/afsd/cm_callback.c:1.41.4.45
*** openafs/src/WINNT/afsd/cm_callback.c:1.41.4.43	Mon Apr 14 18:44:03 2008
--- openafs/src/WINNT/afsd/cm_callback.c	Thu Jun 26 12:38:29 2008
***************
*** 11,27 ****
  #include <afs/afs_args.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #include <winsock2.h>
- #else
- #include <sys/socket.h>
- #endif /* !DJGPP */
  #include <malloc.h>
  #include <string.h>
  #include <stdlib.h>
  
  #include "afsd.h"
  #include <osi.h>
  #include <rx_pthread.h>
  
--- 11,24 ----
  #include <afs/afs_args.h>
  #include <afs/stds.h>
  
  #include <windows.h>
  #include <winsock2.h>
  #include <malloc.h>
  #include <string.h>
  #include <stdlib.h>
  
  #include "afsd.h"
+ #include "smb.h"
  #include <osi.h>
  #include <rx_pthread.h>
  
***************
*** 748,755 ****
              cep->cbExpires = volp->cbExpiresRO;
              cm_PutVolume(volp);
          }
!     } else
!         cep->cbExpires = scp->cbExpires;
      cep->refCount = scp->refCount;
      cep->opens = scp->openReads;
      cep->writers = scp->openWrites;
--- 745,754 ----
              cep->cbExpires = volp->cbExpiresRO;
              cm_PutVolume(volp);
          }
!     } else {
!         /* TODO: deal with time_t below */
!         cep->cbExpires = (afs_int32) scp->cbExpires;
!     }
      cep->refCount = scp->refCount;
      cep->opens = scp->openReads;
      cep->writers = scp->openWrites;
***************
*** 863,870 ****
              cep->cbExpires = volp->cbExpiresRO;
              cm_PutVolume(volp);
          }
!     } else
!         cep->cbExpires = scp->cbExpires;
      cep->refCount = scp->refCount;
      cep->opens = scp->openReads;
      cep->writers = scp->openWrites;
--- 862,871 ----
              cep->cbExpires = volp->cbExpiresRO;
              cm_PutVolume(volp);
          }
!     } else {
!         /* TODO: handle time_t */
!         cep->cbExpires = (afs_int32) scp->cbExpires;
!     }
      cep->refCount = scp->refCount;
      cep->opens = scp->openReads;
      cep->writers = scp->openWrites;
***************
*** 1317,1324 ****
               ntohl(host), ntohs(port));
  
      if (cm_data.rootCellp) {
! 	t_name = (char *)malloc(strlen(cm_data.rootCellp->name)+1);
!         strcpy(t_name, cm_data.rootCellp->name);
      } else {
  	t_name = (char *)malloc(1);
  	t_name[0] = '\0';
--- 1318,1324 ----
               ntohl(host), ntohs(port));
  
      if (cm_data.rootCellp) {
!         t_name = strdup(cm_data.rootCellp->name);
      } else {
  	t_name = (char *)malloc(1);
  	t_name[0] = '\0';
Index: openafs/src/WINNT/afsd/cm_cell.c
diff -c openafs/src/WINNT/afsd/cm_cell.c:1.23.2.13 openafs/src/WINNT/afsd/cm_cell.c:1.23.2.15
*** openafs/src/WINNT/afsd/cm_cell.c:1.23.2.13	Thu Feb 14 22:31:36 2008
--- openafs/src/WINNT/afsd/cm_cell.c	Thu Jun 26 10:38:23 2008
***************
*** 10,20 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #include <nb30.h>
  #include <winsock2.h>
- #endif /* !DJGPP */
  #include <stdlib.h>
  #include <stdio.h>
  #include <malloc.h>
--- 10,18 ----
***************
*** 151,157 ****
  
      lock_ObtainRead(&cm_cellLock);
      for (cp = cm_data.cellNameHashTablep[hash]; cp; cp=cp->nameNextp) {
!         if (stricmp(namep, cp->name) == 0) {
              strcpy(fullname, cp->name);
              break;
          }
--- 149,155 ----
  
      lock_ObtainRead(&cm_cellLock);
      for (cp = cm_data.cellNameHashTablep[hash]; cp; cp=cp->nameNextp) {
!         if (cm_stricmp_utf8(namep, cp->name) == 0) {
              strcpy(fullname, cp->name);
              break;
          }
***************
*** 178,184 ****
           * to the list so check again while holding the write lock 
           */
          for (cp = cm_data.cellNameHashTablep[hash]; cp; cp=cp->nameNextp) {
!             if (stricmp(namep, cp->name) == 0) {
                  strcpy(fullname, cp->name);
                  break;
              }
--- 176,182 ----
           * to the list so check again while holding the write lock 
           */
          for (cp = cm_data.cellNameHashTablep[hash]; cp; cp=cp->nameNextp) {
!             if (cm_stricmp_utf8(namep, cp->name) == 0) {
                  strcpy(fullname, cp->name);
                  break;
              }
***************
*** 247,253 ****
           */
          hash = CM_CELL_NAME_HASH(fullname);
          for (cp2 = cm_data.cellNameHashTablep[hash]; cp2; cp2=cp2->nameNextp) {
!             if (stricmp(fullname, cp2->name) == 0) {
                  break;
              }
          }   
--- 245,251 ----
           */
          hash = CM_CELL_NAME_HASH(fullname);
          for (cp2 = cm_data.cellNameHashTablep[hash]; cp2; cp2=cp2->nameNextp) {
!             if (cm_stricmp_utf8(fullname, cp2->name) == 0) {
                  break;
              }
          }   
Index: openafs/src/WINNT/afsd/cm_config.c
diff -c openafs/src/WINNT/afsd/cm_config.c:1.26.4.4 openafs/src/WINNT/afsd/cm_config.c:1.26.4.5
*** openafs/src/WINNT/afsd/cm_config.c:1.26.4.4	Mon Apr  7 10:20:19 2008
--- openafs/src/WINNT/afsd/cm_config.c	Thu Jun 26 08:45:11 2008
***************
*** 93,103 ****
      p = strrchr(name, '.');
      if (p) {
  	if (i == 1 && 
! 	    (!stricmp(p,".dll") ||
! 	     !stricmp(p,".exe") ||
! 	     !stricmp(p,".ini") ||
! 	     !stricmp(p,".db") ||
! 	     !stricmp(p,".drv")))
  	    return 1;
      }
      return 0;
--- 93,103 ----
      p = strrchr(name, '.');
      if (p) {
  	if (i == 1 && 
! 	    (!cm_stricmp_utf8N(p,".dll") ||
! 	     !cm_stricmp_utf8N(p,".exe") ||
! 	     !cm_stricmp_utf8N(p,".ini") ||
! 	     !cm_stricmp_utf8N(p,".db") ||
! 	     !cm_stricmp_utf8N(p,".drv")))
  	    return 1;
      }
      return 0;
***************
*** 203,210 ****
  			 inRightCell, osi_LogSaveString(afsd_logp,lineBuffer));
  #endif
  	    }
! 	    else if (strnicmp(lineBuffer+1, cellNamep,
! 			       strlen(cellNamep)) == 0) {
  		/* partial match */
  		if (partial) {	/* ambiguous */
  		    fclose(tfilep);
--- 203,209 ----
  			 inRightCell, osi_LogSaveString(afsd_logp,lineBuffer));
  #endif
  	    }
! 	    else if (cm_stricmp_utf8(lineBuffer+1, cellNamep) == 0) {
  		/* partial match */
  		if (partial) {	/* ambiguous */
  		    fclose(tfilep);
Index: openafs/src/WINNT/afsd/cm_conn.c
diff -c openafs/src/WINNT/afsd/cm_conn.c:1.49.2.43 openafs/src/WINNT/afsd/cm_conn.c:1.49.2.45
*** openafs/src/WINNT/afsd/cm_conn.c:1.49.2.43	Fri May  2 15:28:18 2008
--- openafs/src/WINNT/afsd/cm_conn.c	Wed Jul 16 00:44:27 2008
***************
*** 10,18 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
- #endif /* !DJGPP */
  #include <string.h>
  #include <malloc.h>
  #include <osi.h>
--- 10,16 ----
***************
*** 78,111 ****
  	    dummyLen = sizeof(DWORD);
  	    code = RegQueryValueEx(parmKey, "ConnDeadTimeout", NULL, NULL,
  				    (BYTE *) &dwValue, &dummyLen);
! 	    if (code == ERROR_SUCCESS)
                  ConnDeadtimeout = (unsigned short)dwValue;
! 
  	    dummyLen = sizeof(DWORD);
  	    code = RegQueryValueEx(parmKey, "HardDeadTimeout", NULL, NULL,
  				    (BYTE *) &dwValue, &dummyLen);
! 	    if (code == ERROR_SUCCESS)
                  HardDeadtimeout = (unsigned short)dwValue;
! 	    afsi_log("HardDeadTimeout is %d", HardDeadtimeout);
! 
  	    dummyLen = sizeof(DWORD);
  	    code = RegQueryValueEx(parmKey, "IdleDeadTimeout", NULL, NULL,
  				    (BYTE *) &dwValue, &dummyLen);
! 	    if (code == ERROR_SUCCESS)
                  IdleDeadtimeout = (unsigned short)dwValue;
! 	    afsi_log("IdleDeadTimeout is %d", IdleDeadtimeout);
! 
              RegCloseKey(parmKey);
  	}
  
  	afsi_log("lanmanworkstation : SessTimeout %u", RDRtimeout);
! 	if (ConnDeadtimeout == 0)
  	    ConnDeadtimeout = (unsigned short) (RDRtimeout / 2);
! 	afsi_log("ConnDeadTimeout is %d", ConnDeadtimeout);
! 	if (HardDeadtimeout == 0)
  	    HardDeadtimeout = (unsigned short) RDRtimeout;
! 	afsi_log("HardDeadTimeout is %d", HardDeadtimeout);
! 
  	osi_EndOnce(&once);
      }
  }
--- 76,115 ----
  	    dummyLen = sizeof(DWORD);
  	    code = RegQueryValueEx(parmKey, "ConnDeadTimeout", NULL, NULL,
  				    (BYTE *) &dwValue, &dummyLen);
! 	    if (code == ERROR_SUCCESS) {
                  ConnDeadtimeout = (unsigned short)dwValue;
!                 afsi_log("ConnDeadTimeout is %d", ConnDeadtimeout);
!             }
  	    dummyLen = sizeof(DWORD);
  	    code = RegQueryValueEx(parmKey, "HardDeadTimeout", NULL, NULL,
  				    (BYTE *) &dwValue, &dummyLen);
! 	    if (code == ERROR_SUCCESS) {
                  HardDeadtimeout = (unsigned short)dwValue;
!                 afsi_log("HardDeadTimeout is %d", HardDeadtimeout);
!             }
  	    dummyLen = sizeof(DWORD);
  	    code = RegQueryValueEx(parmKey, "IdleDeadTimeout", NULL, NULL,
  				    (BYTE *) &dwValue, &dummyLen);
! 	    if (code == ERROR_SUCCESS) {
                  IdleDeadtimeout = (unsigned short)dwValue;
!                 afsi_log("IdleDeadTimeout is %d", IdleDeadtimeout);
!             }
              RegCloseKey(parmKey);
  	}
  
  	afsi_log("lanmanworkstation : SessTimeout %u", RDRtimeout);
! 	if (ConnDeadtimeout == 0) {
  	    ConnDeadtimeout = (unsigned short) (RDRtimeout / 2);
!             afsi_log("ConnDeadTimeout is %d", ConnDeadtimeout);
!         }
! 	if (HardDeadtimeout == 0) {
  	    HardDeadtimeout = (unsigned short) RDRtimeout;
!             afsi_log("HardDeadTimeout is %d", HardDeadtimeout);
!         }
! 	if (ConnDeadtimeout == 0) {
! 	    IdleDeadtimeout = (unsigned short) RDRtimeout;
!             afsi_log("IdleDeadTimeout is %d", IdleDeadtimeout);
!         }
  	osi_EndOnce(&once);
      }
  }
***************
*** 113,123 ****
  void cm_InitReq(cm_req_t *reqp)
  {
  	memset((char *)reqp, 0, sizeof(cm_req_t));
- #ifndef DJGPP
  	reqp->startTime = GetTickCount();
- #else
-         gettimeofday(&reqp->startTime, NULL);
- #endif
  }
  
  static long cm_GetServerList(struct cm_fid *fidp, struct cm_user *userp,
--- 117,123 ----
***************
*** 216,227 ****
       * and retry */
      
      /* timeleft - get if from reqp the same way as cmXonnByMServers does */
- #ifndef DJGPP
      timeUsed = (GetTickCount() - reqp->startTime) / 1000;
- #else
-     gettimeofday(&now, NULL);
-     timeUsed = sub_time(now, reqp->startTime) / 1000;
- #endif
  	    
      /* leave 5 seconds margin for sleep */
      if (reqp->flags & CM_REQ_NORETRY)
--- 216,222 ----
***************
*** 429,472 ****
      {       
          char addr[16];
          char *format;
- #ifndef DJGPP
  	DWORD msgID;
- #endif
          switch ( errorCode ) {
          case VNOVOL:
- #ifndef DJGPP
  	    msgID = MSG_SERVER_REPORTS_VNOVOL;
- #endif
              format = "Server %s reported volume %d as not attached.";
              break;
          case VMOVED:
- #ifndef DJGPP
  	    msgID = MSG_SERVER_REPORTS_VMOVED;
- #endif
              format = "Server %s reported volume %d as moved.";
              break;
          case VOFFLINE:
- #ifndef DJGPP
  	    msgID = MSG_SERVER_REPORTS_VOFFLINE;
- #endif
              format = "Server %s reported volume %d as offline.";
              break;
          case VSALVAGE:
- #ifndef DJGPP
  	    msgID = MSG_SERVER_REPORTS_VSALVAGE;
- #endif
              format = "Server %s reported volume %d as needs salvage.";
              break;
          case VNOSERVICE:
- #ifndef DJGPP
  	    msgID = MSG_SERVER_REPORTS_VNOSERVICE;
- #endif
              format = "Server %s reported volume %d as not in service.";
              break;
          case VIO:
- #ifndef DJGPP
  	    msgID = MSG_SERVER_REPORTS_VIO;
- #endif
              format = "Server %s reported volume %d as temporarily unaccessible.";
              break;
          }
--- 424,453 ----
***************
*** 480,488 ****
                      ((serverp->addr.sin_addr.s_addr & 0xff000000)>> 24)); 
  
              osi_Log2(afsd_logp, format, osi_LogSaveString(afsd_logp,addr), fidp->volume);
- #ifndef DJGPP
              LogEvent(EVENTLOG_WARNING_TYPE, msgID, addr, fidp->volume);
- #endif
          }
  
          /* Mark server offline for this volume */
--- 461,467 ----
***************
*** 584,592 ****
                       ((serverp->addr.sin_addr.s_addr & 0xff0000)>> 16),
                       ((serverp->addr.sin_addr.s_addr & 0xff000000)>> 24)); 
  
- #ifndef DJGPP
              LogEvent(EVENTLOG_WARNING_TYPE, MSG_RX_HARD_DEAD_TIME_EXCEEDED, addr);
- #endif /* !DJGPP */
  	  
              osi_Log1(afsd_logp, "cm_Analyze: hardDeadTime exceeded addr[%s]",
                       osi_LogSaveString(afsd_logp,addr));
--- 563,569 ----
***************
*** 793,803 ****
      cm_server_t *tsp;
      long firstError = 0;
      int someBusy = 0, someOffline = 0, allOffline = 1, allBusy = 1, allDown = 1;
      long timeUsed, timeLeft, hardTimeLeft;
! #ifdef DJGPP
!     struct timeval now;
! #endif /* DJGPP */        
! 
      *connpp = NULL;
  
      if (serversp == NULL) {
--- 770,778 ----
      cm_server_t *tsp;
      long firstError = 0;
      int someBusy = 0, someOffline = 0, allOffline = 1, allBusy = 1, allDown = 1;
+ #ifdef SET_RX_TIMEOUTS_TO_TIMELEFT
      long timeUsed, timeLeft, hardTimeLeft;
! #endif
      *connpp = NULL;
  
      if (serversp == NULL) {
***************
*** 805,820 ****
  	return CM_ERROR_ALLDOWN;
      }
  
! #ifndef DJGPP
      timeUsed = (GetTickCount() - 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;
  
      lock_ObtainRead(&cm_serverLock);
      for (tsrp = serversp; tsrp; tsrp=tsrp->next) {
--- 780,792 ----
  	return CM_ERROR_ALLDOWN;
      }
  
! #ifdef SET_RX_TIMEOUTS_TO_TIMELEFT
      timeUsed = (GetTickCount() - reqp->startTime) / 1000;
          
      /* leave 5 seconds margin of safety */
      timeLeft =  ConnDeadtimeout - timeUsed - 5;
      hardTimeLeft = HardDeadtimeout - timeUsed - 5;
+ #endif
  
      lock_ObtainRead(&cm_serverLock);
      for (tsrp = serversp; tsrp; tsrp=tsrp->next) {
***************
*** 848,853 ****
--- 820,826 ----
                  code = cm_ConnByServer(tsp, usersp, connpp);
                  if (code == 0) {        /* cm_CBS only returns 0 */
                      cm_PutServer(tsp);
+ #ifdef SET_RX_TIMEOUTS_TO_TIMELEFT
                      /* Set RPC timeout */
                      if (timeLeft > ConnDeadtimeout)
                          timeLeft = ConnDeadtimeout;
***************
*** 859,864 ****
--- 832,838 ----
                      rx_SetConnDeadTime((*connpp)->callp, timeLeft);
                      rx_SetConnHardDeadTime((*connpp)->callp, (u_short) hardTimeLeft);
                      lock_ReleaseMutex(&(*connpp)->mx);
+ #endif
                      return 0;
                  }
                  
Index: openafs/src/WINNT/afsd/cm_conn.h
diff -c openafs/src/WINNT/afsd/cm_conn.h:1.13.4.11 openafs/src/WINNT/afsd/cm_conn.h:1.13.4.13
*** openafs/src/WINNT/afsd/cm_conn.h:1.13.4.11	Mon Apr 28 11:06:14 2008
--- openafs/src/WINNT/afsd/cm_conn.h	Wed Jul 16 00:44:27 2008
***************
*** 13,19 ****
  #define	CM_CONN_DEFAULTRDRTIMEOUT	45
  #define CM_CONN_CONNDEADTIME		 0
  #define CM_CONN_HARDDEADTIME             0
! #define CM_CONN_IDLEDEADTIME            30
  
  extern unsigned short ConnDeadtimeout;
  extern unsigned short HardDeadtimeout;
--- 13,19 ----
  #define	CM_CONN_DEFAULTRDRTIMEOUT	45
  #define CM_CONN_CONNDEADTIME		 0
  #define CM_CONN_HARDDEADTIME             0
! #define CM_CONN_IDLEDEADTIME             0
  
  extern unsigned short ConnDeadtimeout;
  extern unsigned short HardDeadtimeout;
***************
*** 39,54 ****
   * to the cache manager functions.
   */
  typedef struct cm_req {
! 	DWORD startTime;		/* Quit before RDR times us out */
! 	int rpcError;			/* RPC error code */
! 	int volumeError;		/* volume error code */
! 	int accessError;		/* access error code */
!         struct cm_server * tokenIdleErrorServp;  /* server that reported a token/idle error other than expired */
!         int tokenError;
!         int idleError;
! 	afs_uint32 flags;
!         char * tidPathp;
!         char * relPathp;
  } cm_req_t;
  
  /* flags in cm_req structure */
--- 39,54 ----
   * to the cache manager functions.
   */
  typedef struct cm_req {
!     DWORD startTime;		/* Quit before RDR times us out */
!     int rpcError;			/* RPC error code */
!     int volumeError;		/* volume error code */
!     int accessError;		/* access error code */
!     struct cm_server * tokenIdleErrorServp;  /* server that reported a token/idle error other than expired */
!     int tokenError;
!     int idleError;
!     afs_uint32 flags;
!     clientchar_t * tidPathp;
!     clientchar_t * relPathp;
  } cm_req_t;
  
  /* flags in cm_req structure */
Index: openafs/src/WINNT/afsd/cm_daemon.c
diff -c openafs/src/WINNT/afsd/cm_daemon.c:1.16.4.28 openafs/src/WINNT/afsd/cm_daemon.c:1.16.4.29
*** openafs/src/WINNT/afsd/cm_daemon.c:1.16.4.28	Sat Mar  8 18:25:08 2008
--- openafs/src/WINNT/afsd/cm_daemon.c	Thu Jun 26 10:38:23 2008
***************
*** 10,22 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #include <winsock2.h>
  #include <iphlpapi.h>
- #else
- #include <netdb.h>
- #endif /* !DJGPP */
  #include <stdlib.h>
  #include <malloc.h>
  #include <string.h>
--- 10,18 ----
***************
*** 58,64 ****
  static EVENT_HANDLE cm_BkgDaemon_ShutdownEvent[CM_MAX_DAEMONS] = 
         {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
  
- #ifndef DJGPP
  void cm_IpAddrDaemon(long parm)
  {
      extern void smb_CheckVCs(void);
--- 54,59 ----
***************
*** 85,91 ****
  
      thrd_SetEvent(cm_IPAddrDaemon_ShutdownEvent);
  }
- #endif
  
  void cm_BkgDaemon(void * parm)
  {
--- 80,85 ----
***************
*** 610,622 ****
          lock_InitializeRWLock(&cm_daemonLock, "cm_daemonLock");
          osi_EndOnce(&once);
  
- #ifndef DJGPP
  	/* creating IP Address Change monitor daemon */
          phandle = thrd_Create((SecurityAttrib) 0, 0,
                                 (ThreadFunc) cm_IpAddrDaemon, 0, 0, &pid, "cm_IpAddrDaemon");
          osi_assertx(phandle != NULL, "cm_IpAddrDaemon thread creation failure");
          thrd_CloseHandle(phandle);
- #endif /* DJGPP */
  
          /* creating pinging daemon */
          phandle = thrd_Create((SecurityAttrib) 0, 0,
--- 604,614 ----
Index: openafs/src/WINNT/afsd/cm_dcache.c
diff -c openafs/src/WINNT/afsd/cm_dcache.c:1.30.2.30 openafs/src/WINNT/afsd/cm_dcache.c:1.30.2.31
*** openafs/src/WINNT/afsd/cm_dcache.c:1.30.2.30	Thu Mar  6 09:34:29 2008
--- openafs/src/WINNT/afsd/cm_dcache.c	Thu Jun 26 10:38:23 2008
***************
*** 10,20 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #include <winsock2.h>
  #include <nb30.h>
- #endif /* !DJGPP */
  #ifdef COMMENT
  #include <malloc.h>
  #endif
--- 10,18 ----
Index: openafs/src/WINNT/afsd/cm_dir.c
diff -c openafs/src/WINNT/afsd/cm_dir.c:1.4.4.14 openafs/src/WINNT/afsd/cm_dir.c:1.4.4.18
*** openafs/src/WINNT/afsd/cm_dir.c:1.4.4.14	Sun Mar  2 23:25:40 2008
--- openafs/src/WINNT/afsd/cm_dir.c	Fri Jul 11 18:27:01 2008
***************
*** 10,18 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
- #endif /* !DJGPP */
  #include <string.h>
  #include <malloc.h>
  #include <osi.h>
--- 10,16 ----
***************
*** 123,129 ****
   * the specified name.
   */
  long 
! cm_NameEntries(char *namep, long *lenp)
  {
      long i;
          
--- 121,127 ----
   * the specified name.
   */
  long 
! cm_NameEntries(char *namep, size_t *lenp)
  {
      long i;
          
***************
*** 574,579 ****
--- 572,578 ----
      return rc;
  }
  
+ 
  /* Look up a file name in directory.
  
     On entry:
***************
*** 977,983 ****
      op->scp = scp;
      cm_HoldUser(userp);
      op->userp = userp;
!     cm_InitReq(&op->req);
  
      op->dirtyBufCount = 0;
      op->nBuffers = 0;
--- 976,982 ----
      op->scp = scp;
      cm_HoldUser(userp);
      op->userp = userp;
!     op->req = *reqp;            /* copy the values from the input */
  
      op->dirtyBufCount = 0;
      op->nBuffers = 0;
Index: openafs/src/WINNT/afsd/cm_dir.h
diff -c openafs/src/WINNT/afsd/cm_dir.h:1.4.4.7 openafs/src/WINNT/afsd/cm_dir.h:1.4.4.8
*** openafs/src/WINNT/afsd/cm_dir.h:1.4.4.7	Wed Nov 14 01:23:33 2007
--- openafs/src/WINNT/afsd/cm_dir.h	Sun May 11 09:17:17 2008
***************
*** 139,145 ****
  cm_EndDirOp(cm_dirOp_t * op);
  
  extern long
! cm_NameEntries(char *namep, long *lenp);
  
  extern long
  cm_DirCreateEntry(cm_dirOp_t * op, char *entry, cm_fid_t * cfid);
--- 139,145 ----
  cm_EndDirOp(cm_dirOp_t * op);
  
  extern long
! cm_NameEntries(char *namep, size_t *lenp);
  
  extern long
  cm_DirCreateEntry(cm_dirOp_t * op, char *entry, cm_fid_t * cfid);
Index: openafs/src/WINNT/afsd/cm_dnlc.c
diff -c openafs/src/WINNT/afsd/cm_dnlc.c:1.10.4.6 openafs/src/WINNT/afsd/cm_dnlc.c:1.10.4.9
*** openafs/src/WINNT/afsd/cm_dnlc.c:1.10.4.6	Fri Feb 29 10:58:53 2008
--- openafs/src/WINNT/afsd/cm_dnlc.c	Thu Jun 26 12:38:29 2008
***************
*** 18,27 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #include <winsock2.h>
- #endif /* !DJGPP */
  #include <string.h>
  #include <stdlib.h>
  #include <osi.h>
--- 18,25 ----
***************
*** 107,133 ****
  
  void 
  cm_dnlcEnter ( cm_scache_t *adp,
!                char        *aname,
                 cm_scache_t *avc )
  {
      cm_nc_t *tnc;
      unsigned int key, skey, new=0;
!     char *ts = aname;
      int safety;
      int writeLocked = 0;
  
      if (!cm_useDnlc)
  	return ;
  
!     if (!strcmp(aname,".") || !strcmp(aname,".."))
  	return ;
  
      if ( cm_debugDnlc ) 
! 	osi_Log3(afsd_logp,"cm_dnlcEnter dir %x name %s scache %x", 
! 	    adp, osi_LogSaveString(afsd_logp,aname), avc);
  
      dnlcHash( ts, key );  /* leaves ts pointing at the NULL */
!     if (ts - aname >= CM_AFSNCNAMESIZE) 
  	return ;
      skey = key & (NHSIZE -1);
  
--- 105,131 ----
  
  void 
  cm_dnlcEnter ( cm_scache_t *adp,
!                normchar_t  *nname,
                 cm_scache_t *avc )
  {
      cm_nc_t *tnc;
      unsigned int key, skey, new=0;
!     normchar_t *ts = nname;
      int safety;
      int writeLocked = 0;
  
      if (!cm_useDnlc)
  	return ;
  
!     if (!cm_NormStrCmp(nname,_C(".")) || !cm_NormStrCmp(nname,_C("..")))
  	return ;
  
      if ( cm_debugDnlc ) 
! 	osi_Log3(afsd_logp,"cm_dnlcEnter dir %x name %S scache %x", 
! 	    adp, osi_LogSaveStringW(afsd_logp,nname), avc);
  
      dnlcHash( ts, key );  /* leaves ts pointing at the NULL */
!     if (ts - nname >= CM_AFSNCNAMESIZE) 
  	return ;
      skey = key & (NHSIZE -1);
  
***************
*** 135,141 ****
      lock_ObtainRead(&cm_dnlcLock);
    retry:
      for (tnc = cm_data.nameHash[skey], safety=0; tnc; tnc = tnc->next, safety++ )
! 	if ((tnc->dirp == adp) && (!strcmp(tnc->name, aname)))
  	    break;				/* preexisting entry */
  	else if ( tnc->next == cm_data.nameHash[skey])	/* end of list */
  	{
--- 133,139 ----
      lock_ObtainRead(&cm_dnlcLock);
    retry:
      for (tnc = cm_data.nameHash[skey], safety=0; tnc; tnc = tnc->next, safety++ )
! 	if ((tnc->dirp == adp) && (!cm_NormStrCmp(tnc->name, nname)))
  	    break;				/* preexisting entry */
  	else if ( tnc->next == cm_data.nameHash[skey])	/* end of list */
  	{
***************
*** 171,180 ****
  	tnc->dirp = adp;
  	tnc->vp = avc;
  	tnc->key = key;
! 	memcpy (tnc->name, aname, ts-aname+1); /* include the NULL */
  
      	if ( new )	/* insert entry only if it is newly created */ 
! 		InsertEntry(tnc);
  
      }
      if (writeLocked)
--- 169,178 ----
  	tnc->dirp = adp;
  	tnc->vp = avc;
  	tnc->key = key;
! 	memcpy (tnc->name, nname, (ts-nname+1)*sizeof(normchar_t)); /* include the NULL */
  
      	if ( new )	/* insert entry only if it is newly created */ 
!             InsertEntry(tnc);
  
      }
      if (writeLocked)
***************
*** 194,201 ****
  {
      cm_scache_t * tvc;
      unsigned int key, skey;
!     char* aname = sp->searchNamep;
!     char *ts = aname;
      cm_nc_t * tnc, * tnc_begin;
      int safety, match;
    
--- 192,199 ----
  {
      cm_scache_t * tvc;
      unsigned int key, skey;
!     normchar_t* nname = sp->nsearchNamep;
!     normchar_t *ts = nname;
      cm_nc_t * tnc, * tnc_begin;
      int safety, match;
    
***************
*** 203,214 ****
  	return NULL;
  
      if ( cm_debugDnlc ) 
! 	osi_Log2(afsd_logp, "cm_dnlcLookup dir %x name %s", 
! 		adp, osi_LogSaveString(afsd_logp,aname));
  
      dnlcHash( ts, key );  /* leaves ts pointing at the NULL */
  
!     if (ts - aname >= CM_AFSNCNAMESIZE) {
          InterlockedIncrement(&dnlcstats.lookups);
          InterlockedIncrement(&dnlcstats.misses);
  	return NULL;
--- 201,212 ----
  	return NULL;
  
      if ( cm_debugDnlc ) 
! 	osi_Log2(afsd_logp, "cm_dnlcLookup dir %x name %S", 
! 		adp, osi_LogSaveStringW(afsd_logp,nname));
  
      dnlcHash( ts, key );  /* leaves ts pointing at the NULL */
  
!     if (ts - nname >= CM_AFSNCNAMESIZE) {
          InterlockedIncrement(&dnlcstats.lookups);
          InterlockedIncrement(&dnlcstats.misses);
  	return NULL;
***************
*** 227,252 ****
  	if (tnc->dirp == adp) 
  	{
          if( cm_debugDnlc ) 
!             osi_Log1(afsd_logp,"Looking at [%s]",
!                      osi_LogSaveString(afsd_logp,tnc->name));
  
  	    if ( sp->caseFold ) 	/* case insensitive */
  	    {
!             match = cm_stricmp(tnc->name, aname);
              if ( !match )	/* something matches */
              {
                  tvc = tnc->vp;
                  ts = tnc->name;
  
                  /* determine what type of match it is */
!                 if ( !strcmp(tnc->name, aname))
                  {	
                      /* exact match. */
                      sp->ExactFound = 1;
  
                      if( cm_debugDnlc )
!                         osi_Log1(afsd_logp,"DNLC found exact match [%s]",
!                                  osi_LogSaveString(afsd_logp,tnc->name));
                      break;
                  }
                  else if ( cm_NoneUpper(tnc->name))
--- 225,250 ----
  	if (tnc->dirp == adp) 
  	{
          if( cm_debugDnlc ) 
!             osi_Log1(afsd_logp,"Looking at [%S]",
!                      osi_LogSaveStringW(afsd_logp,tnc->name));
  
  	    if ( sp->caseFold ) 	/* case insensitive */
  	    {
!             match = cm_NormStrCmpI(tnc->name, nname);
              if ( !match )	/* something matches */
              {
                  tvc = tnc->vp;
                  ts = tnc->name;
  
                  /* determine what type of match it is */
!                 if ( !cm_NormStrCmp(tnc->name, nname))
                  {	
                      /* exact match. */
                      sp->ExactFound = 1;
  
                      if( cm_debugDnlc )
!                         osi_Log1(afsd_logp,"DNLC found exact match [%S]",
!                                  osi_LogSaveStringW(afsd_logp,tnc->name));
                      break;
                  }
                  else if ( cm_NoneUpper(tnc->name))
***************
*** 260,266 ****
  	    }
  	    else			/* case sensitive */
  	    {
!             match = strcmp(tnc->name, aname);
              if ( !match ) /* found a match */
              {
                  sp->ExactFound = 1;
--- 258,264 ----
  	    }
  	    else			/* case sensitive */
  	    {
!             match = cm_NormStrCmp(tnc->name, nname);
              if ( !match ) /* found a match */
              {
                  sp->ExactFound = 1;
***************
*** 287,295 ****
      }
  
      if(cm_debugDnlc && ts) {
!         osi_Log3(afsd_logp, "DNLC matched [%s] for [%s] with vnode[%ld]",
!                  osi_LogSaveString(afsd_logp,ts),
!                  osi_LogSaveString(afsd_logp,aname),
                   (long) tvc->fid.vnode);
      }
  
--- 285,293 ----
      }
  
      if(cm_debugDnlc && ts) {
!         osi_Log3(afsd_logp, "DNLC matched [%S] for [%W] with vnode[%ld]",
!                  osi_LogSaveStringW(afsd_logp,ts),
!                  osi_LogSaveStringW(afsd_logp,nname),
                   (long) tvc->fid.vnode);
      }
  
***************
*** 339,360 ****
  
  
  void 
! cm_dnlcRemove (cm_scache_t *adp, char *aname)
  {
      unsigned int key, skey, error=0;
      int found= 0, safety;
!     char *ts = aname;
      cm_nc_t *tnc, *tmp;
    
      if (!cm_useDnlc)
  	return ;
  
      if ( cm_debugDnlc )
! 	osi_Log2(afsd_logp, "cm_dnlcRemove dir %x name %s", 
! 		adp, osi_LogSaveString(afsd_logp,aname));
  
      dnlcHash( ts, key );  /* leaves ts pointing at the NULL */
!     if (ts - aname >= CM_AFSNCNAMESIZE) 
  	return ;
  
      skey = key & (NHSIZE -1);
--- 337,358 ----
  
  
  void 
! cm_dnlcRemove (cm_scache_t *adp, normchar_t *nname)
  {
      unsigned int key, skey, error=0;
      int found= 0, safety;
!     normchar_t *ts = nname;
      cm_nc_t *tnc, *tmp;
    
      if (!cm_useDnlc)
  	return ;
  
      if ( cm_debugDnlc )
! 	osi_Log2(afsd_logp, "cm_dnlcRemove dir %x name %S", 
! 		adp, osi_LogSaveStringW(afsd_logp,nname));
  
      dnlcHash( ts, key );  /* leaves ts pointing at the NULL */
!     if (ts - nname >= CM_AFSNCNAMESIZE) 
  	return ;
  
      skey = key & (NHSIZE -1);
***************
*** 364,370 ****
      for (tnc = cm_data.nameHash[skey], safety=0; tnc; safety++) 
      {
  	if ( (tnc->dirp == adp) && (tnc->key == key) 
! 			&& !strcmp(tnc->name,aname) )
  	{
  	    tmp = tnc->next;
      	    error = RemoveEntry(tnc, skey);
--- 362,368 ----
      for (tnc = cm_data.nameHash[skey], safety=0; tnc; safety++) 
      {
  	if ( (tnc->dirp == adp) && (tnc->key == key) 
!              && !cm_NormStrCmp(tnc->name,nname) )
  	{
  	    tmp = tnc->next;
      	    error = RemoveEntry(tnc, skey);
Index: openafs/src/WINNT/afsd/cm_dnlc.h
diff -c openafs/src/WINNT/afsd/cm_dnlc.h:1.4.6.2 openafs/src/WINNT/afsd/cm_dnlc.h:1.4.6.3
*** openafs/src/WINNT/afsd/cm_dnlc.h:1.4.6.2	Tue Feb 26 23:55:16 2008
--- openafs/src/WINNT/afsd/cm_dnlc.h	Thu Jun 26 12:38:29 2008
***************
*** 20,26 ****
      unsigned int key;
      struct nc *next, *prev;
      cm_scache_t *dirp, *vp;
!     unsigned char name[CM_AFSNCNAMESIZE];   
  } cm_nc_t;
  
  typedef struct {
--- 20,26 ----
      unsigned int key;
      struct nc *next, *prev;
      cm_scache_t *dirp, *vp;
!     normchar_t name[CM_AFSNCNAMESIZE];   
  } cm_nc_t;
  
  typedef struct {
***************
*** 29,40 ****
      afs_int32 cycles, lookuprace;
  } cm_dnlcstats_t;
  
! #define dnlcHash(ts, hval) for (hval=0; *ts; ts++) {    \
!                                 hval *= 173;            \
!                                 hval += cm_foldUpper[(unsigned char)(*ts)]; \
!                            }
! extern void cm_dnlcEnter(cm_scache_t *adp, char *name, cm_scache_t *avc);
! extern void cm_dnlcRemove(cm_scache_t *adp, char *name);
  extern void cm_dnlcPurgedp(cm_scache_t *adp);
  extern void cm_dnlcPurgevp(cm_scache_t *avc);
  extern void cm_dnlcPurge(void);
--- 29,40 ----
      afs_int32 cycles, lookuprace;
  } cm_dnlcstats_t;
  
! #define dnlcHash(ts, hval) for (hval=0; *ts; ts++) {                    \
!         hval *= 173;                                                    \
!         hval += cm_NormCharUpr(*ts);                                   \
!     }
! extern void cm_dnlcEnter(cm_scache_t *adp, normchar_t *name, cm_scache_t *avc);
! extern void cm_dnlcRemove(cm_scache_t *adp, normchar_t *name);
  extern void cm_dnlcPurgedp(cm_scache_t *adp);
  extern void cm_dnlcPurgevp(cm_scache_t *avc);
  extern void cm_dnlcPurge(void);
Index: openafs/src/WINNT/afsd/cm_dns.c
diff -c openafs/src/WINNT/afsd/cm_dns.c:1.12.4.1 openafs/src/WINNT/afsd/cm_dns.c:1.12.4.4
*** openafs/src/WINNT/afsd/cm_dns.c:1.12.4.1	Mon Jul  2 20:35:13 2007
--- openafs/src/WINNT/afsd/cm_dns.c	Thu Jun 26 12:38:29 2008
***************
*** 11,21 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  #include <afs/cellconfig.h>
- #ifndef DJGPP
  #include <windows.h>
  #include <winsock2.h>
- #endif
  #include "cm_dns_private.h"
  #include "cm_dns.h"
  #include <lwp.h>
  #include <afs/afsint.h>
--- 11,20 ----
  #include <afs/param.h>
  #include <afs/stds.h>
  #include <afs/cellconfig.h>
  #include <windows.h>
  #include <winsock2.h>
  #include "cm_dns_private.h"
+ #include "cm_nls.h"
  #include "cm_dns.h"
  #include <lwp.h>
  #include <afs/afsint.h>
***************
*** 24,93 ****
  #define DNSAPI_ENV
  #endif
  #include <errno.h>
  
  /*extern void afsi_log(char *pattern, ...);*/
  
  static char dns_addr[30];
- #ifdef DJGPP
- extern char cm_confDir[];
- #endif
  static int cm_dnsEnabled = -1;
  
  void DNSlowerCase(char *str)
  {
!   int i;
  
!   for (i=0; i<strlen(str); i++)
!     /*str[i] = tolower(str[i]);*/
!     if (str[i] >= 'A' && str[i] <= 'Z')
!       str[i] += 'a' - 'A';
  }
  
  int cm_InitDNS(int enabled)
  {
  #ifndef DNSAPI_ENV
!   char configpath[100];
!   int len;
!   int code;
!   char *addr;
!   
!   if (!enabled) { fprintf(stderr, "DNS support disabled\n"); cm_dnsEnabled = 0; return 0; }
! 
!   /* First try AFS_NS environment var. */
!   addr = getenv("AFS_NS");
!   if (addr && inet_addr(addr) != -1) {
!     strcpy(dns_addr, addr);
!   } else {
!     /* Now check for the AFSDNS.INI file */
! #ifdef DJGPP
!     strcpy(configpath, cm_confDir);
! #elif defined(AFS_WIN95_ENV)
!     char *path = getenv("AFSCONF");
!     if (path) strcpy(configpath, path);
!     else strcpy(configpath, "c:\\afscli");
! #else  /* nt */
!     code = GetWindowsDirectory(configpath, sizeof(configpath));
!     if (code == 0 || code > sizeof(configpath)) return -1;
! #endif
!     strcat(configpath, "\\afsdns.ini");
  
!     /* Currently we only get (and query) the first nameserver.  Getting
!        list of mult. nameservers should be easy to do. */
!     len = GetPrivateProfileString("AFS Domain Name Servers", "ns1", NULL,
! 			    dns_addr, sizeof(dns_addr),
! 			    configpath);
!   
!     if (len == 0 || inet_addr(dns_addr) == -1) {
!       fprintf(stderr, "No valid name server addresses found, DNS lookup is "
!                       "disabled\n");
!       cm_dnsEnabled = 0;  /* failed */
!       return -1;     /* No name servers defined */
      }
-     else fprintf(stderr, "Found DNS server %s\n", dns_addr);
-   }
  #endif /* DNSAPI_ENV */
!   cm_dnsEnabled = 1;
!   return 0;
  }
  
  #ifndef DNSAPI_ENV
--- 23,87 ----
  #define DNSAPI_ENV
  #endif
  #include <errno.h>
+ #include <strsafe.h>
  
  /*extern void afsi_log(char *pattern, ...);*/
  
  static char dns_addr[30];
  static int cm_dnsEnabled = -1;
  
  void DNSlowerCase(char *str)
  {
!     unsigned int i;
  
!     for (i=0; i<strlen(str); i++)
!         /*str[i] = tolower(str[i]);*/
!         if (str[i] >= 'A' && str[i] <= 'Z')
!             str[i] += 'a' - 'A';
  }
  
  int cm_InitDNS(int enabled)
  {
  #ifndef DNSAPI_ENV
!     char configpath[100];
!     int len;
!     int code;
!     char *addr;
!   
!     if (!enabled) { 
!         fprintf(stderr, "DNS support disabled\n"); 
!         cm_dnsEnabled = 0; 
!         return 0; 
!     }
  
!     /* First try AFS_NS environment var. */
!     addr = getenv("AFS_NS");
!     if (addr && inet_addr(addr) != -1) {
!         strcpy(dns_addr, addr);
!     } else {
!         /* Now check for the AFSDNS.INI file */
!         code = GetWindowsDirectory(configpath, sizeof(configpath));
!         if (code == 0 || code > sizeof(configpath)) return -1;
!         strcat(configpath, "\\afsdns.ini");
! 
!         /* Currently we only get (and query) the first nameserver.  Getting
!         list of mult. nameservers should be easy to do. */
!         len = GetPrivateProfileString("AFS Domain Name Servers", "ns1", NULL,
!                                        dns_addr, sizeof(dns_addr),
!                                        configpath);
!   
!         if (len == 0 || inet_addr(dns_addr) == -1) {
!             fprintf(stderr, "No valid name server addresses found, DNS lookup is "
!                      "disabled\n");
!             cm_dnsEnabled = 0;  /* failed */
!             return -1;     /* No name servers defined */
!         }
!         else 
!             fprintf(stderr, "Found DNS server %s\n", dns_addr);
      }
  #endif /* DNSAPI_ENV */
!     cm_dnsEnabled = 1;
!     return 0;
  }
  
  #ifndef DNSAPI_ENV
***************
*** 630,714 ****
                   int *numServers, int *ttl)
  {
  #ifndef DNSAPI_ENV
!    /*static AFS_SRV_LIST srvList;
!     static int ans = 0;*/
!   SOCKET commSock;
!   SOCKADDR_IN sockAddr;
!   PDNS_HDR  pDNShdr;
!   char buffer[BUFSIZE];
!   char query[1024];
!   int rc;
  
  #ifdef DEBUG
!   fprintf(stderr, "getAFSServer: cell %s, cm_dnsEnabled=%d\n", cellName, cm_dnsEnabled);
  #endif
  
  #if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
!   if (cm_dnsEnabled == -1) { /* not yet initialized, eg when called by klog */
!     cm_InitDNS(1);    /* assume enabled */
!   }
  #endif
!   if (cm_dnsEnabled == 0) {  /* possibly we failed in cm_InitDNS above */
!     fprintf(stderr, "DNS initialization failed, disabled\n");
!     *numServers = 0;
!     return -1;
!   }
    
!   sockAddr = setSockAddr(dns_addr, DNS_PORT);
    
!   commSock = socket( AF_INET, SOCK_DGRAM, 0 );
!   if ( commSock < 0 )
      {
!       /*afsi_log("socket() failed\n");*/
!       fprintf(stderr, "getAFSServer: socket() failed, errno=%d\n", errno);
!       *numServers = 0;
!       return (-1);
      } 
-   
- #ifdef DJGPP
-   /* the win95 sock.vxd will not allow sendto for unbound sockets, 
-    *   so just bind to nothing and it works */
-   
-   __djgpp_set_socket_blocking_mode(commSock, 0);
-   bind(commSock,0,sizeof( SOCKADDR_IN ) );
- #endif /* DJGPP */
- 
-   strncpy(query, cellName, 1024);
-   query[1023] = 0;
-   if (query[strlen(query)-1] != '.') {
-     strncat(query,".",1024);
-     query[1023] = 0;
-   }
  
!   rc = send_DNS_AFSDB_Query(cellName,commSock,sockAddr, buffer);
!   if (rc < 0) {
!     fprintf(stderr,"getAFSServer: send_DNS_AFSDB_Query failed\n");
!     *numServers = 0;
!     return -1;
!   }
      
!   pDNShdr = get_DNS_Response(commSock,sockAddr, buffer);
!   
!   /*printReplyBuffer_AFSDB(pDNShdr);*/
!   if (pDNShdr)
!     processReplyBuffer_AFSDB(commSock, pDNShdr, cellHostAddrs, cellHostNames, numServers, ttl);
!   else
!     *numServers = 0;
    
!   closesocket(commSock);
!   if (*numServers == 0)
!     return(-1);
  
!   else
!     return 0;
  #else /* DNSAPI_ENV */
      PDNS_RECORD pDnsCell, pDnsIter, pDnsVol,pDnsVolIter, pDnsCIter;
!     DWORD i;
      struct sockaddr_in vlSockAddr;
      char query[1024];
  
  #ifdef AFS_FREELANCE_CLIENT
!     if ( stricmp(cellName, "Freelance.Local.Root") == 0 )
          return -1;
  #endif /* AFS_FREELANCE_CLIENT */
  
--- 624,695 ----
                   int *numServers, int *ttl)
  {
  #ifndef DNSAPI_ENV
!     SOCKET commSock;
!     SOCKADDR_IN sockAddr;
!     PDNS_HDR  pDNShdr;
!     char buffer[BUFSIZE];
!     char query[1024];
!     int rc;
  
  #ifdef DEBUG
!     fprintf(stderr, "getAFSServer: cell %s, cm_dnsEnabled=%d\n", cellName, cm_dnsEnabled);
  #endif
  
  #if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
!     if (cm_dnsEnabled == -1) { /* not yet initialized, eg when called by klog */
!         cm_InitDNS(1);         /* assume enabled */
!     }
  #endif
!     if (cm_dnsEnabled == 0) {  /* possibly we failed in cm_InitDNS above */
!         fprintf(stderr, "DNS initialization failed, disabled\n");
!         *numServers = 0;
!         return -1;
!     }
    
!     sockAddr = setSockAddr(dns_addr, DNS_PORT);
    
!     commSock = socket( AF_INET, SOCK_DGRAM, 0 );
!     if ( commSock < 0 )
      {
!         /*afsi_log("socket() failed\n");*/
!         fprintf(stderr, "getAFSServer: socket() failed, errno=%d\n", errno);
!         *numServers = 0;
!         return (-1);
      } 
  
!     StringCbCopyA(query, sizeof(query), cellName);
!     if (query[strlen(query)-1] != '.') {
!         StringCbCatA(query, sizeof(query), ".");
!     }
! 
!     rc = send_DNS_AFSDB_Query(cellName,commSock,sockAddr, buffer);
!     if (rc < 0) {
!         fprintf(stderr,"getAFSServer: send_DNS_AFSDB_Query failed\n");
!         *numServers = 0;
!         return -1;
!     }
      
!     pDNShdr = get_DNS_Response(commSock,sockAddr, buffer);
    
!     /*printReplyBuffer_AFSDB(pDNShdr);*/
!     if (pDNShdr)
!         processReplyBuffer_AFSDB(commSock, pDNShdr, cellHostAddrs, cellHostNames, numServers, ttl);
!     else
!         *numServers = 0;
  
!     closesocket(commSock);
!     if (*numServers == 0)
!         return(-1);
!     else
!         return 0;
  #else /* DNSAPI_ENV */
      PDNS_RECORD pDnsCell, pDnsIter, pDnsVol,pDnsVolIter, pDnsCIter;
!     int i;
      struct sockaddr_in vlSockAddr;
      char query[1024];
  
  #ifdef AFS_FREELANCE_CLIENT
!     if ( cm_stricmp_utf8N(cellName, "Freelance.Local.Root") == 0 )
          return -1;
  #endif /* AFS_FREELANCE_CLIENT */
  
***************
*** 716,737 ****
      *ttl = 0;
  
      /* query the AFSDB records of cell */
!     strncpy(query, cellName, 1024);
!     query[1023] = 0;
      if (query[strlen(query)-1] != '.') {
!         strncat(query,".",1024);
!         query[1023] = 0;
      }
  
      if (DnsQuery_A(query, DNS_TYPE_AFSDB, DNS_QUERY_STANDARD, NULL, &pDnsCell, NULL) == ERROR_SUCCESS) {
          memset((void*) &vlSockAddr, 0, sizeof(vlSockAddr));
! 		
          /* go through the returned records */
          for (pDnsIter = pDnsCell;pDnsIter; pDnsIter = pDnsIter->pNext) {
              /* if we find an AFSDB record with Preference set to 1, we found a volserver */
              if (pDnsIter->wType == DNS_TYPE_AFSDB && pDnsIter->Data.Afsdb.wPreference == 1) {
!                 strncpy(cellHostNames[*numServers], pDnsIter->Data.Afsdb.pNameExchange, MAXHOSTCHARS);
!                 cellHostNames[*numServers][MAXHOSTCHARS-1]='\0';
                  (*numServers)++;
                  
                  if (!*ttl) 
--- 697,716 ----
      *ttl = 0;
  
      /* query the AFSDB records of cell */
!     StringCbCopyA(query, sizeof(query), cellName);
      if (query[strlen(query)-1] != '.') {
!         StringCbCatA(query, sizeof(query), ".");
      }
  
      if (DnsQuery_A(query, DNS_TYPE_AFSDB, DNS_QUERY_STANDARD, NULL, &pDnsCell, NULL) == ERROR_SUCCESS) {
          memset((void*) &vlSockAddr, 0, sizeof(vlSockAddr));
! 
          /* go through the returned records */
          for (pDnsIter = pDnsCell;pDnsIter; pDnsIter = pDnsIter->pNext) {
              /* if we find an AFSDB record with Preference set to 1, we found a volserver */
              if (pDnsIter->wType == DNS_TYPE_AFSDB && pDnsIter->Data.Afsdb.wPreference == 1) {
!                 StringCbCopyA(cellHostNames[*numServers], sizeof(cellHostNames[*numServers]),
!                               pDnsIter->Data.Afsdb.pNameExchange);
                  (*numServers)++;
                  
                  if (!*ttl) 
***************
*** 749,757 ****
              if(pDnsIter->wType == DNS_TYPE_A)
                  /* check if its for one of the volservers */
                  for (i=0;i<*numServers;i++)
!                     if(stricmp(pDnsIter->pName, cellHostNames[i]) == 0)
                          cellHostAddrs[i] = pDnsIter->Data.A.IpAddress;
!         }       
  
          for (i=0;i<*numServers;i++) {
              /* if we don't have an IP yet, then we should try resolving the volserver hostname
--- 728,736 ----
              if(pDnsIter->wType == DNS_TYPE_A)
                  /* check if its for one of the volservers */
                  for (i=0;i<*numServers;i++)
!                     if(cm_stricmp_utf8(pDnsIter->pName, cellHostNames[i]) == 0)
                          cellHostAddrs[i] = pDnsIter->Data.A.IpAddress;
!         }
  
          for (i=0;i<*numServers;i++) {
              /* if we don't have an IP yet, then we should try resolving the volserver hostname
***************
*** 760,773 ****
                  if (DnsQuery_A(cellHostNames[i], DNS_TYPE_A, DNS_QUERY_STANDARD, NULL, &pDnsVol, NULL) == ERROR_SUCCESS) {
                      for (pDnsVolIter = pDnsVol; pDnsVolIter; pDnsVolIter=pDnsVolIter->pNext) {
                          /* if we get an A record, keep it */
!                         if (pDnsVolIter->wType == DNS_TYPE_A && stricmp(cellHostNames[i], pDnsVolIter->pName)==0) {
                              cellHostAddrs[i] = pDnsVolIter->Data.A.IpAddress;
                              break;
                          }
                          /* if we get a CNAME, look for a corresponding A record */
!                         if (pDnsVolIter->wType == DNS_TYPE_CNAME && stricmp(cellHostNames[i], pDnsVolIter->pName)==0) {
                              for (pDnsCIter=pDnsVolIter; pDnsCIter; pDnsCIter=pDnsCIter->pNext) {
!                                 if (pDnsCIter->wType == DNS_TYPE_A && stricmp(pDnsVolIter->Data.CNAME.pNameHost, pDnsCIter->pName)==0) {
                                      cellHostAddrs[i] = pDnsCIter->Data.A.IpAddress;
                                      break;
                                  }
--- 739,752 ----
                  if (DnsQuery_A(cellHostNames[i], DNS_TYPE_A, DNS_QUERY_STANDARD, NULL, &pDnsVol, NULL) == ERROR_SUCCESS) {
                      for (pDnsVolIter = pDnsVol; pDnsVolIter; pDnsVolIter=pDnsVolIter->pNext) {
                          /* if we get an A record, keep it */
!                         if (pDnsVolIter->wType == DNS_TYPE_A && cm_stricmp_utf8(cellHostNames[i], pDnsVolIter->pName)==0) {
                              cellHostAddrs[i] = pDnsVolIter->Data.A.IpAddress;
                              break;
                          }
                          /* if we get a CNAME, look for a corresponding A record */
!                         if (pDnsVolIter->wType == DNS_TYPE_CNAME && cm_stricmp_utf8(cellHostNames[i], pDnsVolIter->pName)==0) {
                              for (pDnsCIter=pDnsVolIter; pDnsCIter; pDnsCIter=pDnsCIter->pNext) {
!                                 if (pDnsCIter->wType == DNS_TYPE_A && cm_stricmp_utf8(pDnsVolIter->Data.CNAME.pNameHost, pDnsCIter->pName)==0) {
                                      cellHostAddrs[i] = pDnsCIter->Data.A.IpAddress;
                                      break;
                                  }
***************
*** 791,794 ****
--- 770,869 ----
          return -1;
  #endif /* DNSAPI_ENV */
  }
+ 
+ int getAFSServerW(cm_unichar_t *cellName, int *cellHostAddrs,
+                   cm_unichar_t cellHostNames[][MAXHOSTCHARS], 
+                   int *numServers, int *ttl)
+ {
+ #ifdef DNSAPI_ENV
+     PDNS_RECORDW pDnsCell, pDnsIter, pDnsVol,pDnsVolIter, pDnsCIter;
+     int i;
+     struct sockaddr_in vlSockAddr;
+     cm_unichar_t query[1024];
+ 
+ #ifdef AFS_FREELANCE_CLIENT
+     if ( cm_stricmp_utf16(cellName, L"Freelance.Local.Root") == 0 )
+         return -1;
+ #endif /* AFS_FREELANCE_CLIENT */
+ 
+     *numServers = 0; 
+     *ttl = 0;
+ 
+     /* query the AFSDB records of cell */
+     StringCbCopyW(query, sizeof(query), cellName);
+     if (query[wcslen(query)-1] != L'.') {
+         StringCbCatW(query, sizeof(query), L".");
+     }
+ 
+     if (DnsQuery_W(query, DNS_TYPE_AFSDB, DNS_QUERY_STANDARD, NULL, (PDNS_RECORD *) &pDnsCell,
+                    NULL) == ERROR_SUCCESS) {
+         memset((void*) &vlSockAddr, 0, sizeof(vlSockAddr));
+ 
+         /* go through the returned records */
+         for (pDnsIter = pDnsCell;pDnsIter; pDnsIter = pDnsIter->pNext) {
+             /* if we find an AFSDB record with Preference set to 1, we found a volserver */
+             if (pDnsIter->wType == DNS_TYPE_AFSDB && pDnsIter->Data.Afsdb.wPreference == 1) {
+                 StringCbCopyW(cellHostNames[*numServers], sizeof(cellHostNames[*numServers]),
+                               pDnsIter->Data.Afsdb.pNameExchange);
+                 (*numServers)++;
+                 
+                 if (!*ttl) 
+                     *ttl = pDnsIter->dwTtl;
+                 if (*numServers == AFSMAXCELLHOSTS) 
+                     break;
+             }
+         }
+ 
+         for (i=0;i<*numServers;i++) 
+             cellHostAddrs[i] = 0;
+ 
+         /* now check if there are any A records in the results */
+         for (pDnsIter = pDnsCell; pDnsIter; pDnsIter = pDnsIter->pNext) {
+             if(pDnsIter->wType == DNS_TYPE_A)
+                 /* check if its for one of the volservers */
+                 for (i=0;i<*numServers;i++)
+                     if(cm_stricmp_utf16(pDnsIter->pName, cellHostNames[i]) == 0)
+                         cellHostAddrs[i] = pDnsIter->Data.A.IpAddress;
+         }
+ 
+         for (i=0;i<*numServers;i++) {
+             /* if we don't have an IP yet, then we should try resolving the volserver hostname
+                in a separate query. */
+             if (!cellHostAddrs[i]) {
+                 if (DnsQuery_W(cellHostNames[i], DNS_TYPE_A, DNS_QUERY_STANDARD, NULL,
+                                (PDNS_RECORD *) &pDnsVol, NULL) == ERROR_SUCCESS) {
+                     for (pDnsVolIter = pDnsVol; pDnsVolIter; pDnsVolIter=pDnsVolIter->pNext) {
+                         /* if we get an A record, keep it */
+                         if (pDnsVolIter->wType == DNS_TYPE_A && cm_stricmp_utf16(cellHostNames[i], pDnsVolIter->pName)==0) {
+                             cellHostAddrs[i] = pDnsVolIter->Data.A.IpAddress;
+                             break;
+                         }
+                         /* if we get a CNAME, look for a corresponding A record */
+                         if (pDnsVolIter->wType == DNS_TYPE_CNAME && cm_stricmp_utf16(cellHostNames[i], pDnsVolIter->pName)==0) {
+                             for (pDnsCIter=pDnsVolIter; pDnsCIter; pDnsCIter=pDnsCIter->pNext) {
+                                 if (pDnsCIter->wType == DNS_TYPE_A && cm_stricmp_utf16(pDnsVolIter->Data.CNAME.pNameHost, pDnsCIter->pName)==0) {
+                                     cellHostAddrs[i] = pDnsCIter->Data.A.IpAddress;
+                                     break;
+                                 }
+                             }
+                             if (cellHostAddrs[i]) 
+                                 break;
+                             /* TODO: if the additional section is missing, then do another lookup for the CNAME */
+                         }
+                     }
+                     /* we are done with the volserver lookup */
+                     DnsRecordListFree((PDNS_RECORD) pDnsVol, DnsFreeRecordListDeep);
+                 }
+             }
+         }
+         DnsRecordListFree((PDNS_RECORD) pDnsCell, DnsFreeRecordListDeep);
+     }
+ 
+     if ( *numServers > 0 )
+         return 0;
+     else        
+ #endif  /* DNSAPI_ENV */
+         return -1;
+ }
  #endif /* AFS_AFSDB_ENV */
+ 
Index: openafs/src/WINNT/afsd/cm_dns.h
diff -c openafs/src/WINNT/afsd/cm_dns.h:1.2 openafs/src/WINNT/afsd/cm_dns.h:1.2.14.1
*** openafs/src/WINNT/afsd/cm_dns.h:1.2	Sat May 29 19:48:00 2004
--- openafs/src/WINNT/afsd/cm_dns.h	Thu Jun 26 12:38:29 2008
***************
*** 15,20 ****
--- 15,26 ----
     names for the given cell, ending in null */
  int getAFSServer(char *cellname, int *cellHostAddrs, char cellHostNames[][MAXHOSTCHARS], int *numServers, int *ttl);
  
+ /* Same as above, but using cm_unichar_t.  Note that this functon will
+    only be defined for DNSAPI_ENV. */
+ int getAFSServerW(cm_unichar_t *cellName, int *cellHostAddrs,
+                   cm_unichar_t cellHostNames[][MAXHOSTCHARS], 
+                   int *numServers, int *ttl);
+ 
  /* a supplement for the DJGPP gethostbyname ... which 
     never bothers calling a DNS server ... so this function
     takes care of that. This should be called when you
Index: openafs/src/WINNT/afsd/cm_dns_private.h
diff -c openafs/src/WINNT/afsd/cm_dns_private.h:1.1 openafs/src/WINNT/afsd/cm_dns_private.h:1.1.22.1
*** openafs/src/WINNT/afsd/cm_dns_private.h:1.1	Tue Oct  9 00:56:00 2001
--- openafs/src/WINNT/afsd/cm_dns_private.h	Thu Jun 26 10:38:24 2008
***************
*** 9,23 ****
  #ifndef __DNS_AFS_private_h_env_
  #define __DNS_AFS_private_h_env_
  
- #ifdef DJGPP
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- /*#else
-   #include <windows.h>*/
- #endif
- 
  #ifdef KERNEL
  #define SOCKET struct osi_socket *
  #else
--- 9,14 ----
***************
*** 29,108 ****
  #include <stdio.h>
  #include <string.h>
  
- 
- #ifdef DJGPP
- 
- char *inet_ntoa(struct in_addr in)
- {
-   static char   out[256];
-   char temp[20];
-   unsigned long sVal,pVal;
- 
-   out[0] = '\0';
- 
- 
-   pVal = ntohl(in.s_addr);
- 
-   sVal = pVal;
-   sVal >>= 24;
-   sprintf(out,"%ld",sVal);
- 
-   sVal = pVal;
-   sVal <<= 8;
-   sVal >>= 24;
-   sprintf(out,"%s.%ld",out,sVal);
- 
-   sVal = pVal;
-   sVal <<= 16;
-   sVal >>= 24;
-   sprintf(out,"%s.%ld",out,sVal);
- 
-   sVal = pVal;
-   sVal <<= 24;
-   sVal >>= 24;
-   sprintf(out,"%s.%ld",out,sVal);
- 
-   return(&out[0]);
- }
- 
- unsigned long inet_addr(const char *cp)
- {
-   
-   unsigned long val=0;
-   unsigned char sVal;
-   
-   char   cp2[256];
- 
-   char*  ptr = cp2;
-   int    i;
-   int    len;
- 
-   strcpy(cp2,cp);
- 
-   for (i=0; i<=strlen(cp); i++)
-     {
-       if (cp2[i] == '.')
- 	{
- 	  cp2[i] = '\0';
- 	  sVal = atoi(ptr);
- 	  ptr = &cp2[i+1];
- 	  val = val << 8;
- 	  val &= 0xffffff00;
- 	  val |= sVal;
- 	  //printf("%x\t%lx\n",sVal,val);
- 	};
-     };
-   sVal = atoi(ptr);
-   val = val << 8;
-   val &= 0xffffff00;
-   val |= sVal;
-   //printf("%x\t%lx\n",sVal,val);
-   
-   return htonl(val);
- }
- 
- #endif /* DJGPP */
- 
  #define BUFSIZE                 2048
  
  /*
--- 20,25 ----
Index: openafs/src/WINNT/afsd/cm_freelance.c
diff -c openafs/src/WINNT/afsd/cm_freelance.c:1.33.2.11.2.1 openafs/src/WINNT/afsd/cm_freelance.c:1.33.2.14
*** openafs/src/WINNT/afsd/cm_freelance.c:1.33.2.11.2.1	Sun Jun 22 23:00:43 2008
--- openafs/src/WINNT/afsd/cm_freelance.c	Thu Jun 26 10:38:24 2008
***************
*** 1,13 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #include <winreg.h>
  #include <winsock2.h>
- #else
- #include <netdb.h>
- #endif /* !DJGPP */
  #include <stdlib.h>
  #include <malloc.h>
  #include <string.h>
--- 1,9 ----
***************
*** 34,47 ****
  time_t FakeFreelanceModTime = 0x3b49f6e2;
  
  static int freelance_ShutdownFlag = 0;
- #if !defined(DJGPP)
  static HANDLE hFreelanceChangeEvent = 0;
  static HANDLE hFreelanceSymlinkChangeEvent = 0;
- #endif
  
  void cm_InitFakeRootDir();
  
- #if !defined(DJGPP)
  void cm_FreelanceChangeNotifier(void * parmp) {
      HKEY   hkFreelance = 0;
  
--- 30,40 ----
***************
*** 131,155 ****
          }
      }
  }
- #endif
  
  void                                          
  cm_FreelanceShutdown(void)                    
  {                                             
      freelance_ShutdownFlag = 1;               
- #if !defined(DJGPP)                           
      if (hFreelanceChangeEvent != 0)           
          thrd_SetEvent(hFreelanceChangeEvent); 
      if (hFreelanceSymlinkChangeEvent != 0)           
          thrd_SetEvent(hFreelanceSymlinkChangeEvent); 
- #endif                                        
  }                                             
  
  void cm_InitFreelance() {
- #if !defined(DJGPP)
      thread_t phandle;
      int lpid;
- #endif
  
      lock_InitializeMutex(&cm_Freelance_Lock, "Freelance Lock");
  
--- 124,143 ----
***************
*** 162,168 ****
      cm_InitFakeRootDir();
      // --- end of yj code
  
- #if !defined(DJGPP)
      /* Start the registry monitor */
      phandle = thrd_Create(NULL, 65536, (ThreadFunc) cm_FreelanceChangeNotifier,
                            NULL, 0, &lpid, "cm_FreelanceChangeNotifier");
--- 150,155 ----
***************
*** 173,179 ****
                            NULL, 0, &lpid, "cm_FreelanceSymlinkChangeNotifier");
      osi_assertx(phandle != NULL, "cm_FreelanceSymlinkChangeNotifier thread create failure");
      thrd_CloseHandle(phandle);
- #endif
  }
  
  /* yj: Initialization of the fake root directory */
--- 160,165 ----
***************
*** 469,484 ****
      char hdir[260];
      long code;
      char rootCellName[256];
- #if !defined(DJGPP)
      HKEY hkFreelance = 0, hkFreelanceSymlinks = 0;
      DWORD dwType, dwSize;
      DWORD dwMountPoints = 0;
      DWORD dwIndex;
      DWORD dwSymlinks = 0;
      FILETIME ftLastWriteTime;
- #endif
  
- #if !defined(DJGPP)
      if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, 
                        AFSREG_CLT_OPENAFS_SUBKEY "\\Freelance",
                        0,
--- 455,467 ----
***************
*** 670,676 ****
          RegCloseKey(hkFreelance);
          return 0;
      }
- #endif
  
      /* What follows is the old code to read freelance mount points 
       * out of a text file modified to copy the data into the registry
--- 653,658 ----
***************
*** 687,693 ****
          fp = fopen(hdir, "r");
      }
  
- #if !defined(DJGPP)
      RegCreateKeyEx( HKEY_LOCAL_MACHINE, 
                      AFSREG_CLT_OPENAFS_SUBKEY "\\Freelance",
                      0,
--- 669,674 ----
***************
*** 698,709 ****
                      &hkFreelance,
                      NULL);
      dwIndex = 0;
- #endif
  
      if (!fp) {
- #if !defined(DJGPP)
          RegCloseKey(hkFreelance);
- #endif
          rootCellName[0] = '.';
        	code = cm_GetRootCellName(&rootCellName[1]);
          if (code == 0) {
--- 679,687 ----
***************
*** 760,766 ****
          if (t2)
              *(t2+1) = '\0';
  
- #if !defined(DJGPP)
          if ( hkFreelance ) {
              char szIndex[16];
              /* we are migrating to the registry */
--- 738,743 ----
***************
*** 769,775 ****
              dwSize = (DWORD)strlen(line) + 1;
              RegSetValueEx( hkFreelance, szIndex, 0, dwType, line, dwSize);
          }
- #endif 
  
          // line is not empty, so let's parse it
          t = strchr(line, '#');
--- 746,751 ----
***************
*** 796,807 ****
          aLocalMountPoint++;
      }
      fclose(fp);
- #if !defined(DJGPP)
      if ( hkFreelance ) {
          RegCloseKey(hkFreelance);
          DeleteFile(hdir);
      }
- #endif
      return 0;
  }
  
--- 772,781 ----
***************
*** 809,815 ****
      return cm_noLocalMountPoints;
  }
  
- #if !defined(DJGPP)
  long cm_FreelanceMountPointExists(char * filename, int prefix_ok)
  {
      char* cp;
--- 783,788 ----
***************
*** 874,880 ****
              memcpy(shortname, line, cp-line);
              shortname[cp-line]=0;
  
!             if (!stricmp(shortname, filename)) {
                  found = 1;
                  break;
              }
--- 847,853 ----
              memcpy(shortname, line, cp-line);
              shortname[cp-line]=0;
  
!             if (!cm_stricmp_utf8(shortname, filename)) {
                  found = 1;
                  break;
              }
***************
*** 957,963 ****
              memcpy(shortname, line, cp-line);
              shortname[cp-line]=0;
  
!             if (!stricmp(shortname, filename)) {
                  found = 1;
                  break;
              }
--- 930,936 ----
              memcpy(shortname, line, cp-line);
              shortname[cp-line]=0;
  
!             if (!cm_stricmp_utf8(shortname, filename)) {
                  found = 1;
                  break;
              }
***************
*** 969,975 ****
  
      return found;
  }
- #endif
  
  long cm_FreelanceAddMount(char *filename, char *cellname, char *volume, int rw, cm_fid_t *fidp)
  {
--- 942,947 ----
***************
*** 979,990 ****
      char fullname[200];
      int n;
      int alias = 0;
- #if !defined(DJGPP)
      HKEY hkFreelance = 0;
      DWORD dwType, dwSize;
      DWORD dwMountPoints;
      DWORD dwIndex;
- #endif
  
      /* before adding, verify the cell name; if it is not a valid cell,
         don't add the mount point.
--- 951,960 ----
***************
*** 1007,1024 ****
              return -1;
      }
  
- #if !defined(DJGPP)
      if ( cm_FreelanceMountPointExists(filename, 0) ||
           cm_FreelanceSymlinkExists(filename, 0) )
          return -1;
- #endif
      
      osi_Log1(afsd_logp,"Freelance Adding Mount for Cell: %s", 
                osi_LogSaveString(afsd_logp,cellname));
  
      lock_ObtainMutex(&cm_Freelance_Lock);
  
- #if !defined(DJGPP)
      if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, 
                        AFSREG_CLT_OPENAFS_SUBKEY "\\Freelance",
                        0,
--- 977,991 ----
***************
*** 1073,1079 ****
          }
          RegCloseKey(hkFreelance);
      } else 
- #endif
      {
          cm_GetConfigDir(hfile, sizeof(hfile));
          strcat(hfile, AFS_FREELANCE_INI);
--- 1040,1045 ----
***************
*** 1110,1125 ****
      char hfile[260], hfile2[260];
      FILE *fp1, *fp2;
      int found=0;
- #if !defined(DJGPP)
      HKEY hkFreelance = 0;
      DWORD dwType, dwSize;
      DWORD dwMountPoints;
      DWORD dwIndex;
- #endif
  
      lock_ObtainMutex(&cm_Freelance_Lock);
  
- #if !defined(DJGPP)
      if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, 
                        AFSREG_CLT_OPENAFS_SUBKEY "\\Freelance",
                        0,
--- 1076,1088 ----
***************
*** 1161,1167 ****
          }
          RegCloseKey(hkFreelance);
      } else 
- #endif
      {
          cm_GetConfigDir(hfile, sizeof(hfile));
          strcat(hfile, AFS_FREELANCE_INI);
--- 1124,1129 ----
***************
*** 1217,1228 ****
      char line[512];
      char fullname[200];
      int alias = 0;
- #if !defined(DJGPP)
      HKEY hkFreelanceSymlinks = 0;
      DWORD dwType, dwSize;
      DWORD dwSymlinks;
      DWORD dwIndex;
- #endif
  
      /* before adding, verify the filename.  If it is already in use, either as 
       * as mount point or a cellname, do not permit the creation of the symlink.
--- 1179,1188 ----
***************
*** 1237,1259 ****
      fullname[0] = '\0';
      if (filename[0] == '.') {
          cm_GetCell_Gen(&filename[1], fullname, CM_FLAG_CREATE);
!         if (stricmp(&filename[1],fullname) == 0)
              return CM_ERROR_EXISTS;
      } else {
          cm_GetCell_Gen(filename, fullname, CM_FLAG_CREATE);
!         if (stricmp(filename,fullname) == 0)
              return CM_ERROR_EXISTS;
      }
  
- #if !defined(DJGPP)
      if ( cm_FreelanceMountPointExists(filename, 0) ||
           cm_FreelanceSymlinkExists(filename, 0) )
          return CM_ERROR_EXISTS;
- #endif
  
      lock_ObtainMutex(&cm_Freelance_Lock);
  
- #if !defined(DJGPP)
      if (RegCreateKeyEx( HKEY_LOCAL_MACHINE, 
                          AFSREG_CLT_OPENAFS_SUBKEY "\\Freelance\\Symlinks",
                          0,
--- 1197,1216 ----
      fullname[0] = '\0';
      if (filename[0] == '.') {
          cm_GetCell_Gen(&filename[1], fullname, CM_FLAG_CREATE);
!         if (cm_stricmp_utf8(&filename[1],fullname) == 0)
              return CM_ERROR_EXISTS;
      } else {
          cm_GetCell_Gen(filename, fullname, CM_FLAG_CREATE);
!         if (cm_stricmp_utf8(filename,fullname) == 0)
              return CM_ERROR_EXISTS;
      }
  
      if ( cm_FreelanceMountPointExists(filename, 0) ||
           cm_FreelanceSymlinkExists(filename, 0) )
          return CM_ERROR_EXISTS;
  
      lock_ObtainMutex(&cm_Freelance_Lock);
  
      if (RegCreateKeyEx( HKEY_LOCAL_MACHINE, 
                          AFSREG_CLT_OPENAFS_SUBKEY "\\Freelance\\Symlinks",
                          0,
***************
*** 1308,1314 ****
          }
          RegCloseKey(hkFreelanceSymlinks);
      } 
- #endif
      lock_ReleaseMutex(&cm_Freelance_Lock);
  
      /* cm_reInitLocalMountPoints(); */
--- 1265,1270 ----
***************
*** 1324,1339 ****
      char line[512];
      char shortname[200];
      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, 
                        AFSREG_CLT_OPENAFS_SUBKEY "\\Freelance\\Symlinks",
                        0,
--- 1280,1292 ----
***************
*** 1373,1379 ****
          }
          RegCloseKey(hkFreelanceSymlinks);
      }
- #endif
      
      lock_ReleaseMutex(&cm_Freelance_Lock);
      if (found) {
--- 1326,1331 ----
Index: openafs/src/WINNT/afsd/cm_ioctl.c
diff -c openafs/src/WINNT/afsd/cm_ioctl.c:1.73.2.44 openafs/src/WINNT/afsd/cm_ioctl.c:1.73.2.50
*** openafs/src/WINNT/afsd/cm_ioctl.c:1.73.2.44	Mon Apr 14 18:44:03 2008
--- openafs/src/WINNT/afsd/cm_ioctl.c	Fri Jul 11 18:27:01 2008
***************
*** 13,23 ****
  #include <afs/ptserver.h>
  #include <ubik.h>
  
- #ifndef DJGPP
  #include <windows.h>
- #else
- #include <sys/socket.h>
- #endif /* !DJGPP */
  #include <errno.h>
  #include <stdlib.h>
  #include <malloc.h>
--- 13,19 ----
***************
*** 33,51 ****
  
  #include "smb.h"
  
- #ifndef DJGPP
  #include <rx/rxkad.h>
  #include "afsrpc.h"
- #else
- #include <rx/rxkad.h>
- #include "afsrpc95.h"
- #endif
  
  #include "cm_rpc.h"
  #include <strsafe.h>
  #include <winioctl.h>
  #include <rx\rx.h>
  
  #ifdef _DEBUG
  #include <crtdbg.h>
  #endif
--- 29,44 ----
  
  #include "smb.h"
  
  #include <rx/rxkad.h>
  #include "afsrpc.h"
  
  #include "cm_rpc.h"
  #include <strsafe.h>
  #include <winioctl.h>
  #include <rx\rx.h>
  
+ #include "cm_btree.h"
+ 
  #ifdef _DEBUG
  #include <crtdbg.h>
  #endif
***************
*** 54,63 ****
--- 47,60 ----
  #define PIOCTL_LOGON	0x1
  #define MAX_PATH 260
  
+ const char utf8_prefix[] = UTF8_PREFIX;
+ const int  utf8_prefix_size = sizeof(utf8_prefix) -  sizeof(char);
+ 
  osi_mutex_t cm_Afsdsbmt_Lock;
  
  extern afs_int32 cryptall;
  extern char cm_NetbiosName[];
+ extern clientchar_t cm_NetbiosNameC[];
  
  extern void afsi_log(char *pattern, ...);
  
***************
*** 66,88 ****
      lock_InitializeMutex(&cm_Afsdsbmt_Lock, "AFSDSBMT.INI Access Lock");
  }
  
! long cm_CleanFile(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
  {
      long code;
  
      code = buf_CleanVnode(scp, userp, reqp);
!         
!     lock_ObtainWrite(&scp->rw);
!     cm_DiscardSCache(scp);
!     lock_ReleaseWrite(&scp->rw);
! 
      osi_Log2(afsd_logp,"cm_CleanFile scp 0x%x returns error: [%x]",scp, code);
      return code;
  }
  
! long cm_FlushFile(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
  {
!     long code;
  
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
--- 63,96 ----
      lock_InitializeMutex(&cm_Afsdsbmt_Lock, "AFSDSBMT.INI Access Lock");
  }
  
! /* 
!  * Utility function.  (Not currently in use.)
!  * This function forces all dirty buffers to the file server and 
!  * then discards the status info.
!  */
! afs_int32
! cm_CleanFile(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
  {
      long code;
  
      code = buf_CleanVnode(scp, userp, reqp);
!     if (!code) {
!         lock_ObtainWrite(&scp->rw);
!         cm_DiscardSCache(scp);
!         lock_ReleaseWrite(&scp->rw);
!     }
      osi_Log2(afsd_logp,"cm_CleanFile scp 0x%x returns error: [%x]",scp, code);
      return code;
  }
  
! /* 
!  * Utility function.  Used within this file.
!  * scp must be held but not locked.
!  */
! afs_int32
! cm_FlushFile(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
  {
!     afs_int32 code;
  
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
***************
*** 95,110 ****
          
      lock_ObtainWrite(&scp->rw);
      cm_DiscardSCache(scp);
- 
      lock_ReleaseWrite(&scp->rw);
  
      osi_Log2(afsd_logp,"cm_FlushFile scp 0x%x returns error: [%x]",scp, code);
      return code;
  }
  
! long cm_FlushParent(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
  {
!     long code = 0;
      cm_scache_t * pscp;
    
      pscp = cm_FindSCacheParent(scp);
--- 103,123 ----
          
      lock_ObtainWrite(&scp->rw);
      cm_DiscardSCache(scp);
      lock_ReleaseWrite(&scp->rw);
  
      osi_Log2(afsd_logp,"cm_FlushFile scp 0x%x returns error: [%x]",scp, code);
      return code;
  }
  
! /* 
!  * Utility function.  (Not currently in use)
!  * IoctlPath must be parsed or skipped prior to calling.
!  * scp must be held but not locked.
!  */
! afs_int32
! cm_FlushParent(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
  {
!     afs_int32 code = 0;
      cm_scache_t * pscp;
    
      pscp = cm_FindSCacheParent(scp);
***************
*** 116,125 ****
      return code;
  }
  
! 
! long cm_FlushVolume(cm_user_t *userp, cm_req_t *reqp, afs_uint32 cell, afs_uint32 volume)
  {
!     long code = 0;
      cm_scache_t *scp;
      int i;
  
--- 129,141 ----
      return code;
  }
  
! /* 
!  * Utility function.  Used within this function.
!  */
! afs_int32
! cm_FlushVolume(cm_user_t *userp, cm_req_t *reqp, afs_uint32 cell, afs_uint32 volume)
  {
!     afs_int32 code = 0;
      cm_scache_t *scp;
      int i;
  
***************
*** 150,159 ****
  }
  
  /*
!  * cm_ResetACLCache -- invalidate ACL info for a user that has just
!  *			obtained or lost tokens
   */
! void cm_ResetACLCache(cm_user_t *userp)
  {
      cm_scache_t *scp;
      int hash;
--- 166,176 ----
  }
  
  /*
!  * Utility function.  Used within this file.
!  * Invalidate ACL info for a user that has just	obtained or lost tokens.
   */
! void 
! cm_ResetACLCache(cm_user_t *userp)
  {
      cm_scache_t *scp;
      int hash;
***************
*** 178,406 ****
   *
   *  If an extended character (80 - FF) is entered into a file
   *  or directory name in Windows, the character is translated
!  *  into the OEM character map before being passed to us.  Why
!  *  this occurs is unknown.  Our pioctl functions must match
   *  this translation for paths given via our own commands (like
   *  fs).  If we do not do this, then we will try to perform an
   *  operation on a non-translated path, which we will fail to 
   *  find, since the path was created with the translated chars.
   *  This function performs the required translation.
   */
! void TranslateExtendedChars(char *str)
  {
- #ifdef DJGPP
-     char *p;
- #endif
- 
      if (!str || !*str)
          return;
  
! #ifndef DJGPP
!     CharToOem(str, str);
! #else
!     p = str;
!     while (*p) *p++ &= 0x7f;  /* turn off high bit; probably not right */
! #endif
  }
-         
- /* parse the passed-in file name and do a namei on it.  If we fail,
-  * return an error code, otherwise return the vnode located in *scpp.
-  */
- #define CM_PARSE_FLAG_LITERAL 1
  
! long cm_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
! 	cm_scache_t **scpp, afs_uint32 flags)
  {
!     long code;
!     cm_scache_t *substRootp = NULL;
!     cm_scache_t *iscp = NULL;
!     char * relativePath;
!     char * lastComponent = NULL;
!     afs_uint32 follow = (flags & CM_PARSE_FLAG_LITERAL ? CM_FLAG_NOMOUNTCHASE : CM_FLAG_FOLLOW);
! 
!     relativePath = ioctlp->inDatap;
!     /* setup the next data value for the caller to use */
!     ioctlp->inDatap += (long)strlen(ioctlp->inDatap) + 1;;
! 
!     osi_Log1(afsd_logp, "cm_ParseIoctlPath %s", osi_LogSaveString(afsd_logp,relativePath));
! 
!     /* This is usually the file name, but for StatMountPoint it is the path. */
!     /* ioctlp->inDatap can be either of the form:
!      *    \path\.
!      *    \path\file
!      *    \\netbios-name\submount\path\.
!      *    \\netbios-name\submount\path\file
!      */
  
! 	/* We do not perform path name translation on the ioctl path data 
! 	 * because these paths were not translated by Windows through the
! 	 * file system API.  Therefore, they are not OEM characters but 
! 	 * whatever the display character set is.
! 	 */
!     // TranslateExtendedChars(relativePath);
! 
!     /* This is usually nothing, but for StatMountPoint it is the file name. */
!     // TranslateExtendedChars(ioctlp->inDatap);
! 
!     if (relativePath[0] == relativePath[1] &&
!          relativePath[1] == '\\' && 
!          !_strnicmp(cm_NetbiosName,relativePath+2,strlen(cm_NetbiosName))) 
!     {
!         char shareName[256];
!         char *sharePath;
!         int shareFound, i;
! 
!         /* We may have found a UNC path. 
!          * If the first component is the NetbiosName,
!          * then throw out the second component (the submount)
!          * since it had better expand into the value of ioctl->tidPathp
!          */
!         char * p;
!         p = relativePath + 2 + strlen(cm_NetbiosName) + 1;			/* buffer overflow vuln.? */
!         if ( !_strnicmp("all", p, 3) )
!             p += 4;
! 
!         for (i = 0; *p && *p != '\\'; i++,p++ ) {
!             shareName[i] = *p;
!         }
!         p++;                    /* skip past trailing slash */
!         shareName[i] = 0;       /* terminate string */
! 
!         shareFound = smb_FindShare(ioctlp->fidp->vcp, ioctlp->uidp, shareName, &sharePath);
!         if ( shareFound ) {
!             /* we found a sharename, therefore use the resulting path */
!             code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data,
!                              CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
!                              userp, sharePath, reqp, &substRootp);
!             free(sharePath);
!             if (code) {
! 		osi_Log1(afsd_logp,"cm_ParseIoctlPath [1] code 0x%x", code);
!                 return code;
! 	    }
! 
! 	    lastComponent = strrchr(p, '\\');
! 	    if (lastComponent && (lastComponent - p) > 1 &&strlen(lastComponent) > 1) {
! 		*lastComponent = '\0';
! 		lastComponent++;
! 
! 		code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
! 				 userp, NULL, reqp, &iscp);
! 		if (code == 0)
! 		    code = cm_NameI(iscp, lastComponent, CM_FLAG_CASEFOLD | follow,
! 				    userp, NULL, reqp, scpp);
! 		if (iscp)
! 		    cm_ReleaseSCache(iscp);
! 	    } else {
! 		code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD,
! 				userp, NULL, reqp, scpp);
! 	    }
! 	    cm_ReleaseSCache(substRootp);
!             if (code) {
! 		osi_Log1(afsd_logp,"cm_ParseIoctlPath [2] code 0x%x", code);
!                 return code;
! 	    }
!         } else {
!             /* otherwise, treat the name as a cellname mounted off the afs root.
!              * This requires that we reconstruct the shareName string with 
!              * leading and trailing slashes.
!              */
!             p = relativePath + 2 + strlen(cm_NetbiosName) + 1;
!             if ( !_strnicmp("all", p, 3) )
!                 p += 4;
  
!             shareName[0] = '/';
!             for (i = 1; *p && *p != '\\'; i++,p++ ) {
!                 shareName[i] = *p;
!             }
!             p++;                    /* skip past trailing slash */
!             shareName[i++] = '/';	/* add trailing slash */
!             shareName[i] = 0;       /* terminate string */
! 
! 
!             code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data,
!                              CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
!                              userp, shareName, reqp, &substRootp);
!             if (code) {
! 		osi_Log1(afsd_logp,"cm_ParseIoctlPath [3] code 0x%x", code);
!                 return code;
! 	    }
! 
! 	    lastComponent = strrchr(p, '\\');
! 	    if (lastComponent && (lastComponent - p) > 1 &&strlen(lastComponent) > 1) {
! 		*lastComponent = '\0';
! 		lastComponent++;
! 
! 		code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
! 				 userp, NULL, reqp, &iscp);
! 		if (code == 0)
! 		    code = cm_NameI(iscp, lastComponent, CM_FLAG_CASEFOLD | follow,
! 				    userp, NULL, reqp, scpp);
! 		if (iscp)
! 		    cm_ReleaseSCache(iscp);
! 	    } else {
! 		code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD,
! 				userp, NULL, reqp, scpp);
! 	    }
! 
! 	    if (code) {
! 		cm_ReleaseSCache(substRootp);
! 		osi_Log1(afsd_logp,"cm_ParseIoctlPath code [4] 0x%x", code);
!                 return code;
! 	    }
!         }
      } else {
!         code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data,
!                          CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
!                          userp, ioctlp->tidPathp, reqp, &substRootp);
!         if (code) {
! 	    osi_Log1(afsd_logp,"cm_ParseIoctlPath [6] code 0x%x", code);
!             return code;
! 	}
!         
! 	lastComponent = strrchr(relativePath, '\\');
! 	if (lastComponent && (lastComponent - relativePath) > 1 && strlen(lastComponent) > 1) {
! 	    *lastComponent = '\0';
! 	    lastComponent++;
! 
! 	    code = cm_NameI(substRootp, relativePath, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
! 			     userp, NULL, reqp, &iscp);
! 	    if (code == 0)
! 		code = cm_NameI(iscp, lastComponent, CM_FLAG_CASEFOLD | follow,
! 				 userp, NULL, reqp, scpp);
! 	    if (iscp)
! 		cm_ReleaseSCache(iscp);
! 	} else {
! 	    code = cm_NameI(substRootp, relativePath, CM_FLAG_CASEFOLD | follow,
! 			     userp, NULL, reqp, scpp);
! 	}
!         if (code) {
! 	    cm_ReleaseSCache(substRootp);
! 	    osi_Log1(afsd_logp,"cm_ParseIoctlPath [7] code 0x%x", code);
!             return code;
! 	}
!     }
  
!     if (substRootp)
! 	cm_ReleaseSCache(substRootp);
  
!     /* and return success */
!     osi_Log1(afsd_logp,"cm_ParseIoctlPath [8] code 0x%x", code);
!     return 0;
  }
  
! void cm_SkipIoctlPath(smb_ioctl_t *ioctlp)
  {
!     size_t temp;
!         
!     temp = strlen(ioctlp->inDatap) + 1;
!     ioctlp->inDatap += temp;
! }       
  
  /* 
!  * Must be called before cm_ParseIoctlPath or cm_SkipIoctlPath 
   */
! static cm_ioctlQueryOptions_t * 
! cm_IoctlGetQueryOptions(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      afs_uint32 pathlen = strlen(ioctlp->inDatap) + 1;
      char *p = ioctlp->inDatap + pathlen;
--- 195,303 ----
   *
   *  If an extended character (80 - FF) is entered into a file
   *  or directory name in Windows, the character is translated
!  *  into the OEM character map before being passed to us.
!  *  The pioctl functions must match
   *  this translation for paths given via our own commands (like
   *  fs).  If we do not do this, then we will try to perform an
   *  operation on a non-translated path, which we will fail to 
   *  find, since the path was created with the translated chars.
   *  This function performs the required translation.
+  *
+  *  OEM character code pages are used by the non-Unicode SMB
+  *  mode.  Do not use if the CM_IOCTLFLAG_USEUTF8 is set.
   */
! void 
! TranslateExtendedChars(char *str)
  {
      if (!str || !*str)
          return;
  
!     CharToOemA(str, str);
  }
  
! void cm_SkipIoctlPath(cm_ioctl_t *ioctlp)
  {
!     size_t temp;
  
!     temp = strlen(ioctlp->inDatap) + 1;
!     ioctlp->inDatap += temp;
! }
  
! 
! clientchar_t * cm_ParseIoctlStringAlloc(cm_ioctl_t *ioctlp, const char * ext_instrp)
! {
!     clientchar_t * rs = NULL;
!     const char * instrp;
! 
!     instrp = (ext_instrp)?ext_instrp:ioctlp->inDatap;
! 
!     if ((ioctlp->flags & CM_IOCTLFLAG_USEUTF8) == CM_IOCTLFLAG_USEUTF8) {
!         rs = cm_Utf8ToClientStringAlloc(instrp, -1, NULL);
      } else {
!         int cch;
  
!         /* Not a UTF-8 string */
!         if (smb_StoreAnsiFilenames) {
!             cch = cm_AnsiToClientString(instrp, -1, NULL, 0);
! #ifdef DEBUG
!             osi_assert(cch > 0);
! #endif
!             rs = malloc(cch * sizeof(clientchar_t));
!             cm_AnsiToClientString(instrp, -1, rs, cch);
!         } else {
!             cch = cm_OemToClientString(instrp, -1, NULL, 0);
! #ifdef DEBUG
!             osi_assert(cch > 0);
! #endif
!             rs = malloc(cch * sizeof(clientchar_t));
!             cm_OemToClientString(instrp, -1, rs, cch);
!         }
!     }
  
!     if (ext_instrp == NULL) {
!         ioctlp->inDatap += strlen(ioctlp->inDatap) + 1;
!     }
!     return rs;
  }
  
! int cm_UnparseIoctlString(cm_ioctl_t *ioctlp,
!                           char * ext_outp,
!                           const clientchar_t * cstr, int cchlen)
  {
!     char *outp;
!     int cchout;
! 
!     outp = ((ext_outp == NULL)? ioctlp->outDatap : ext_outp);
! 
!     if ((ioctlp->flags & CM_IOCTLFLAG_USEUTF8) == CM_IOCTLFLAG_USEUTF8) {
!         cchout = cm_ClientStringToUtf8(cstr, cchlen, outp,
!                                        SMB_IOCTL_MAXDATA - (outp - ioctlp->outAllocp));
!     } else {
!         if (smb_StoreAnsiFilenames) {
!             cchout = WideCharToMultiByte(CP_ACP, 0, cstr, cchlen,
!                                          outp,
!                                          SMB_IOCTL_MAXDATA - (outp - ioctlp->outAllocp),
!                                          NULL, NULL);
!         } else {
!             cchout = WideCharToMultiByte(CP_OEMCP, 0, cstr, cchlen,
!                                          outp,
!                                          SMB_IOCTL_MAXDATA - (outp - ioctlp->outAllocp),
!                                          NULL, NULL);
!         }
!     }
! 
!     if (cchout > 0 && ext_outp == NULL) {
!         ioctlp->outDatap += cchout;
!     }
! 
!     return cchout;
! }
  
  /* 
!  * Must be called before XXX_ParseIoctlPath or cm_SkipIoctlPath 
   */
! cm_ioctlQueryOptions_t * 
! cm_IoctlGetQueryOptions(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      afs_uint32 pathlen = strlen(ioctlp->inDatap) + 1;
      char *p = ioctlp->inDatap + pathlen;
***************
*** 416,427 ****
  }
  
  /* 
!  * Must be called after cm_ParseIoctlPath or cm_SkipIoctlPath
   * or any other time that ioctlp->inDatap points at the 
   * cm_ioctlQueryOptions_t object.
   */
! static void
! cm_IoctlSkipQueryOptions(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      cm_ioctlQueryOptions_t * optionsp = (cm_ioctlQueryOptions_t *)ioctlp->inDatap;
      ioctlp->inDatap += optionsp->size;
--- 313,324 ----
  }
  
  /* 
!  * Must be called after smb_ParseIoctlPath or cm_SkipIoctlPath
   * or any other time that ioctlp->inDatap points at the 
   * cm_ioctlQueryOptions_t object.
   */
! void
! cm_IoctlSkipQueryOptions(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      cm_ioctlQueryOptions_t * optionsp = (cm_ioctlQueryOptions_t *)ioctlp->inDatap;
      ioctlp->inDatap += optionsp->size;
***************
*** 434,616 ****
   * easier (because we can always jump past the initial "/afs" to find
   * the AFS path that should be written into afsdsbmt.ini).
   */
! void cm_NormalizeAfsPath(char *outpathp, long outlen, char *inpathp)
  {
!     char *cp;
!     char bslash_mountRoot[256];
         
!     strncpy(bslash_mountRoot, cm_mountRoot, sizeof(bslash_mountRoot) - 1);
      bslash_mountRoot[0] = '\\';
!        
!     if (!strnicmp (inpathp, cm_mountRoot, strlen(cm_mountRoot)))
!         StringCbCopy(outpathp, outlen, inpathp);
!     else if (!strnicmp (inpathp, bslash_mountRoot, strlen(bslash_mountRoot)))
!         StringCbCopy(outpathp, outlen, inpathp);
      else if ((inpathp[0] == '/') || (inpathp[0] == '\\'))
!         StringCbPrintfA(outpathp, outlen, "%s%s", cm_mountRoot, inpathp);
      else // inpathp looks like "<cell>/usr"
!         StringCbPrintfA(outpathp, outlen, "%s/%s", cm_mountRoot, inpathp);
  
      for (cp = outpathp; *cp != 0; ++cp) {
          if (*cp == '\\')
              *cp = '/';
-     }       
- 
-     if (strlen(outpathp) && (outpathp[strlen(outpathp)-1] == '/')) {
-         outpathp[strlen(outpathp)-1] = 0;
      }
  
!     if (!strcmpi (outpathp, cm_mountRoot)) {
!         StringCbCopy(outpathp, outlen, cm_mountRoot);
      }
- }
  
! #define LEAF_SIZE 256
! /* parse the passed-in file name and do a namei on its parent.  If we fail,
!  * return an error code, otherwise return the vnode located in *scpp.
!  */
! long cm_ParseIoctlParent(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
! 			 cm_scache_t **scpp, char *leafp)
! {
!     long code;
!     char tbuffer[1024];
!     char *tp, *jp;
!     cm_scache_t *substRootp = NULL;
! 
!     StringCbCopyA(tbuffer, sizeof(tbuffer), ioctlp->inDatap);
!     tp = strrchr(tbuffer, '\\');
!     jp = strrchr(tbuffer, '/');
!     if (!tp)
!         tp = jp;
!     else if (jp && (tp - tbuffer) < (jp - tbuffer))
!         tp = jp;
!     if (!tp) {
!         StringCbCopyA(tbuffer, sizeof(tbuffer), "\\");
!         if (leafp) 
!             StringCbCopyA(leafp, LEAF_SIZE, ioctlp->inDatap);
      }
-     else {
-         *tp = 0;
-         if (leafp) 
-             StringCbCopyA(leafp, LEAF_SIZE, tp+1);
-     }   
- 
-     if (tbuffer[0] == tbuffer[1] &&
-         tbuffer[1] == '\\' && 
-         !_strnicmp(cm_NetbiosName,tbuffer+2,strlen(cm_NetbiosName))) 
-     {
-         char shareName[256];
-         char *sharePath;
-         int shareFound, i;
- 
-         /* We may have found a UNC path. 
-          * If the first component is the NetbiosName,
-          * then throw out the second component (the submount)
-          * since it had better expand into the value of ioctl->tidPathp
-          */
-         char * p;
-         p = tbuffer + 2 + strlen(cm_NetbiosName) + 1;
-         if ( !_strnicmp("all", p, 3) )
-             p += 4;
- 
-         for (i = 0; *p && *p != '\\'; i++,p++ ) {
-             shareName[i] = *p;
-         }
-         p++;                    /* skip past trailing slash */
-         shareName[i] = 0;       /* terminate string */
- 
-         shareFound = smb_FindShare(ioctlp->fidp->vcp, ioctlp->uidp, shareName, &sharePath);
-         if ( shareFound ) {
-             /* we found a sharename, therefore use the resulting path */
-             code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data,
-                              CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
-                              userp, sharePath, reqp, &substRootp);
-             free(sharePath);
-             if (code) return code;
- 
-             code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
-                              userp, NULL, reqp, scpp);
- 	    cm_ReleaseSCache(substRootp);
-             if (code) return code;
-         } else {
-             /* otherwise, treat the name as a cellname mounted off the afs root.
-              * This requires that we reconstruct the shareName string with 
-              * leading and trailing slashes.
-              */
-             p = tbuffer + 2 + strlen(cm_NetbiosName) + 1;
-             if ( !_strnicmp("all", p, 3) )
-                 p += 4;
- 
-             shareName[0] = '/';
-             for (i = 1; *p && *p != '\\'; i++,p++ ) {
-                 shareName[i] = *p;
-             }
-             p++;                    /* skip past trailing slash */
-             shareName[i++] = '/';	/* add trailing slash */
-             shareName[i] = 0;       /* terminate string */
- 
-             code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data,
-                              CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
-                              userp, shareName, reqp, &substRootp);
-             if (code) return code;
- 
-             code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
-                             userp, NULL, reqp, scpp);
- 	    cm_ReleaseSCache(substRootp);
-             if (code) return code;
-         }
-     } else {
-         code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->data,
-                         CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
-                         userp, ioctlp->tidPathp, reqp, &substRootp);
-         if (code) return code;
- 
-         code = cm_NameI(substRootp, tbuffer, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
-                         userp, NULL, reqp, scpp);
- 	cm_ReleaseSCache(substRootp);
-         if (code) return code;
-     }
- 
-     /* # of bytes of path */
-     code = (long)strlen(ioctlp->inDatap) + 1;
-     ioctlp->inDatap += code;
- 
-     /* and return success */
-     return 0;
  }
  
! long cm_IoctlGetACL(smb_ioctl_t *ioctlp, cm_user_t *userp)
  {
      cm_conn_t *connp;
-     cm_scache_t *scp;
      AFSOpaque acl;
      AFSFetchStatus fileStatus;
      AFSVolSync volSync;
-     long code;
      AFSFid afid;
      int tlen;
-     cm_req_t req;
      struct rx_connection * callp;
-     cm_ioctlQueryOptions_t *optionsp;
-     afs_uint32 flags = 0;
- 
-     cm_InitReq(&req);
- 
-     optionsp = cm_IoctlGetQueryOptions(ioctlp, userp);
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
-         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
- 
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
-         cm_fid_t fid;
-         cm_SkipIoctlPath(ioctlp);
-         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
-                   optionsp->fid.vnode, optionsp->fid.unique);
-         code = cm_GetSCache(&fid, &scp, userp, &req);
-     } else {
-         code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
-     }
-     if (code) 
-         return code;
  
      /* now make the get acl call */
  #ifdef AFS_FREELANCE_CLIENT
--- 331,387 ----
   * easier (because we can always jump past the initial "/afs" to find
   * the AFS path that should be written into afsdsbmt.ini).
   */
! void 
! cm_NormalizeAfsPath(clientchar_t *outpathp, long cchlen, clientchar_t *inpathp)
  {
!     clientchar_t *cp;
!     clientchar_t bslash_mountRoot[256];
         
!     cm_ClientStrCpy(bslash_mountRoot, lengthof(bslash_mountRoot), cm_mountRootC);
      bslash_mountRoot[0] = '\\';
! 
!     if (!cm_ClientStrCmpNI(inpathp, cm_mountRootC, cm_mountRootCLen))
!         cm_ClientStrCpy(outpathp, cchlen, inpathp);
!     else if (!cm_ClientStrCmpNI(inpathp, bslash_mountRoot,
!                                 cm_ClientStrLen(bslash_mountRoot)))
!         cm_ClientStrCpy(outpathp, cchlen, inpathp);
      else if ((inpathp[0] == '/') || (inpathp[0] == '\\'))
!         cm_ClientStrPrintfN(outpathp, cchlen, _C("%s%s"), cm_mountRootC, inpathp);
      else // inpathp looks like "<cell>/usr"
!         cm_ClientStrPrintfN(outpathp, cchlen, _C("%s/%s"), cm_mountRootC, inpathp);
  
      for (cp = outpathp; *cp != 0; ++cp) {
          if (*cp == '\\')
              *cp = '/';
      }
  
!     if (cm_ClientStrLen(outpathp) && (outpathp[cm_ClientStrLen(outpathp)-1] == '/')) {
!         outpathp[cm_ClientStrLen(outpathp)-1] = 0;
      }
  
!     if (!cm_ClientStrCmpI(outpathp, cm_mountRootC)) {
!         cm_ClientStrCpy(outpathp, cchlen, cm_mountRootC);
      }
  }
  
! 
! /* 
!  * VIOCGETAL internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlGetACL(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp)
  {
+     afs_int32 code;
      cm_conn_t *connp;
      AFSOpaque acl;
      AFSFetchStatus fileStatus;
      AFSVolSync volSync;
      AFSFid afid;
      int tlen;
      struct rx_connection * callp;
  
      /* now make the get acl call */
  #ifdef AFS_FREELANCE_CLIENT
***************
*** 626,643 ****
          do {
              acl.AFSOpaque_val = ioctlp->outDatap;
              acl.AFSOpaque_len = 0;
!             code = cm_ConnFromFID(&scp->fid, userp, &req, &connp);
!             if (code) continue;
  
              callp = cm_GetRxConn(connp);
              code = RXAFS_FetchACL(callp, &afid, &acl, &fileStatus, &volSync);
              rx_PutConnection(callp);
  
!         } while (cm_Analyze(connp, userp, &req, &scp->fid, &volSync, NULL, NULL, code));
!         code = cm_MapRPCError(code, &req);
!         cm_ReleaseSCache(scp);
  
!         if (code) return code;
      }
      /* skip over return data */
      tlen = (int)strlen(ioctlp->outDatap) + 1;
--- 397,415 ----
          do {
              acl.AFSOpaque_val = ioctlp->outDatap;
              acl.AFSOpaque_len = 0;
!             code = cm_ConnFromFID(&scp->fid, userp, reqp, &connp);
!             if (code) 
!                 continue;
  
              callp = cm_GetRxConn(connp);
              code = RXAFS_FetchACL(callp, &afid, &acl, &fileStatus, &volSync);
              rx_PutConnection(callp);
  
!         } while (cm_Analyze(connp, userp, reqp, &scp->fid, &volSync, NULL, NULL, code));
!         code = cm_MapRPCError(code, reqp);
  
!         if (code) 
!             return code;
      }
      /* skip over return data */
      tlen = (int)strlen(ioctlp->outDatap) + 1;
***************
*** 647,678 ****
      return 0;
  }
  
! long cm_IoctlGetFileCellName(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long code;
!     cm_scache_t *scp;
      cm_cell_t *cellp;
-     cm_req_t req;
-     cm_ioctlQueryOptions_t *optionsp;
-     afs_uint32 flags = 0;
- 
-     cm_InitReq(&req);
- 
-     optionsp = cm_IoctlGetQueryOptions(ioctlp, userp);
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
-         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
- 
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
-         cm_fid_t fid;
-         cm_SkipIoctlPath(ioctlp);
-         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
-                   optionsp->fid.vnode, optionsp->fid.unique);
-         code = cm_GetSCache(&fid, &scp, userp, &req);
-     } else {
-         code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
-     }
-     if (code) 
-         return code;
  
  #ifdef AFS_FREELANCE_CLIENT
      if ( cm_freelanceEnabled && 
--- 419,436 ----
      return 0;
  }
  
! 
! /* 
!  * VIOC_FILE_CELL_NAME internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlGetFileCellName(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp, cm_req_t *reqp)
  {
!     afs_int32 code;
      cm_cell_t *cellp;
  
  #ifdef AFS_FREELANCE_CLIENT
      if ( cm_freelanceEnabled && 
***************
*** 687,721 ****
      {
          cellp = cm_FindCellByID(scp->fid.cell, CM_FLAG_NOPROBE);
          if (cellp) {
!             StringCbCopyA(ioctlp->outDatap, SMB_IOCTL_MAXDATA - (ioctlp->outDatap - ioctlp->outAllocp), cellp->name);
!             ioctlp->outDatap += strlen(ioctlp->outDatap) + 1;
              code = 0;
!         }
!         else 
              code = CM_ERROR_NOSUCHCELL;
      }
  
-     cm_ReleaseSCache(scp);
      return code;
  }
  
! long cm_IoctlSetACL(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      cm_conn_t *connp;
-     cm_scache_t *scp;
      AFSOpaque acl;
      AFSFetchStatus fileStatus;
      AFSVolSync volSync;
-     long code;
      AFSFid fid;
-     cm_req_t req;
      struct rx_connection * callp;
  
-     cm_InitReq(&req);
- 
-     code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp, 0);
-     if (code) return code;
- 	
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
  	code = CM_ERROR_NOACCESS;
--- 445,481 ----
      {
          cellp = cm_FindCellByID(scp->fid.cell, CM_FLAG_NOPROBE);
          if (cellp) {
!             clientchar_t * cellname;
! 
!             cellname = cm_FsStringToClientStringAlloc(cellp->name, -1, NULL); 
!             cm_UnparseIoctlString(ioctlp, NULL, cellname, -1);
!             free(cellname);
              code = 0;
!         } else
              code = CM_ERROR_NOSUCHCELL;
      }
  
      return code;
  }
  
! 	
! /* 
!  * VIOCSETAL internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlSetACL(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp, cm_req_t *reqp)
  {
+     afs_int32 code;
      cm_conn_t *connp;
      AFSOpaque acl;
      AFSFetchStatus fileStatus;
      AFSVolSync volSync;
      AFSFid fid;
      struct rx_connection * callp;
  
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
  	code = CM_ERROR_NOACCESS;
***************
*** 729,766 ****
          do {
              acl.AFSOpaque_val = ioctlp->inDatap;
              acl.AFSOpaque_len = (u_int)strlen(ioctlp->inDatap)+1;
!             code = cm_ConnFromFID(&scp->fid, userp, &req, &connp);
!             if (code) continue;
  
              callp = cm_GetRxConn(connp);
              code = RXAFS_StoreACL(callp, &fid, &acl, &fileStatus, &volSync);
              rx_PutConnection(callp);
  
!         } while (cm_Analyze(connp, userp, &req, &scp->fid, &volSync, NULL, NULL, code));
!         code = cm_MapRPCError(code, &req);
  
          /* invalidate cache info, since we just trashed the ACL cache */
          lock_ObtainWrite(&scp->rw);
          cm_DiscardSCache(scp);
          lock_ReleaseWrite(&scp->rw);
      }
-     cm_ReleaseSCache(scp);
  
      return code;
  }
  
! 
! 
! long cm_IoctlFlushAllVolumes(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long code;
      cm_scache_t *scp;
      int i;
-     cm_req_t req;
- 
-     cm_InitReq(&req);
- 
-     cm_SkipIoctlPath(ioctlp);	/* we don't care about the path */
  
      lock_ObtainWrite(&cm_scacheLock);
      for (i=0; i<cm_data.scacheHashTableSize; i++) {
--- 489,525 ----
          do {
              acl.AFSOpaque_val = ioctlp->inDatap;
              acl.AFSOpaque_len = (u_int)strlen(ioctlp->inDatap)+1;
!             code = cm_ConnFromFID(&scp->fid, userp, reqp, &connp);
!             if (code) 
!                 continue;
  
              callp = cm_GetRxConn(connp);
              code = RXAFS_StoreACL(callp, &fid, &acl, &fileStatus, &volSync);
              rx_PutConnection(callp);
  
!         } while (cm_Analyze(connp, userp, reqp, &scp->fid, &volSync, NULL, NULL, code));
!         code = cm_MapRPCError(code, reqp);
  
          /* invalidate cache info, since we just trashed the ACL cache */
          lock_ObtainWrite(&scp->rw);
          cm_DiscardSCache(scp);
          lock_ReleaseWrite(&scp->rw);
      }
  
      return code;
  }
  
! /* 
!  * VIOC_FLUSHALL internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32 
! cm_IoctlFlushAllVolumes(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_req_t *reqp)
  {
!     afs_int32 code;
      cm_scache_t *scp;
      int i;
  
      lock_ObtainWrite(&cm_scacheLock);
      for (i=0; i<cm_data.scacheHashTableSize; i++) {
***************
*** 769,775 ****
  	    lock_ReleaseWrite(&cm_scacheLock);
  
  	    /* now flush the file */
! 	    code = cm_FlushFile(scp, userp, &req);
  	    lock_ObtainWrite(&cm_scacheLock);
  	    cm_ReleaseSCacheNoLock(scp);
          }
--- 528,534 ----
  	    lock_ReleaseWrite(&cm_scacheLock);
  
  	    /* now flush the file */
! 	    code = cm_FlushFile(scp, userp, reqp);
  	    lock_ObtainWrite(&cm_scacheLock);
  	    cm_ReleaseSCacheNoLock(scp);
          }
***************
*** 779,811 ****
      return code;
  }
  
! long cm_IoctlFlushVolume(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long code;
!     cm_scache_t *scp;
!     unsigned long volume;
!     unsigned long cell;
!     cm_req_t req;
!     cm_ioctlQueryOptions_t *optionsp;
!     afs_uint32 flags = 0;
! 
!     cm_InitReq(&req);
! 
!     optionsp = cm_IoctlGetQueryOptions(ioctlp, userp);
!     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
!         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
! 
!     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
!         cm_fid_t fid;
!         cm_SkipIoctlPath(ioctlp);
!         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
!                   optionsp->fid.vnode, optionsp->fid.unique);
!         code = cm_GetSCache(&fid, &scp, userp, &req);
!     } else {
!         code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
!     }
!     if (code) 
!         return code;
  
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
--- 538,555 ----
      return code;
  }
  
! /* 
!  * VIOC_FLUSHVOLUME internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlFlushVolume(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp, cm_req_t *reqp)
  {
!     afs_int32 code;
!     afs_uint32 volume;
!     afs_uint32 cell;
  
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
***************
*** 815,852 ****
      {
          volume = scp->fid.volume;
          cell = scp->fid.cell;
!         cm_ReleaseSCache(scp);
! 
!         code = cm_FlushVolume(userp, &req, cell, volume);
      }
      return code;
  }
  
! long cm_IoctlFlushFile(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long code;
!     cm_scache_t *scp;
!     cm_req_t req;
!     cm_ioctlQueryOptions_t *optionsp;
!     afs_uint32 flags = 0;
! 
!     cm_InitReq(&req);
! 
!     optionsp = cm_IoctlGetQueryOptions(ioctlp, userp);
!     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
!         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
! 
!     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
!         cm_fid_t fid;
!         cm_SkipIoctlPath(ioctlp);
!         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
!                   optionsp->fid.vnode, optionsp->fid.unique);
!         code = cm_GetSCache(&fid, &scp, userp, &req);
!     } else {
!         code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
!     }
!     if (code) 
!         return code;
  
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
--- 559,579 ----
      {
          volume = scp->fid.volume;
          cell = scp->fid.cell;
!         code = cm_FlushVolume(userp, reqp, cell, volume);
      }
      return code;
  }
  
! /* 
!  * VIOCFLUSH internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlFlushFile(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp, cm_req_t *reqp)
  {
!     afs_int32 code;
  
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
***************
*** 854,887 ****
      } else
  #endif
      {
!         cm_FlushFile(scp, userp, &req);
      }
-     cm_ReleaseSCache(scp);
- 
      return 0;
  }
  
! long cm_IoctlSetVolumeStatus(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     cm_scache_t *scp;
      char volName[32];
      char offLineMsg[256];
      char motd[256];
      cm_conn_t *tcp;
-     long code;
      AFSFetchVolumeStatus volStat;
      AFSStoreVolumeStatus storeStat;
      cm_volume_t *tvp;
-     char *cp;
      cm_cell_t *cellp;
!     cm_req_t req;
      struct rx_connection * callp;
  
-     cm_InitReq(&req);
- 
-     code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp, 0);
-     if (code) return code;
- 
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
  	code = CM_ERROR_NOACCESS;
--- 581,614 ----
      } else
  #endif
      {
!         cm_FlushFile(scp, userp, reqp);
      }
      return 0;
  }
  
! 
! /* 
!  * VIOCSETVOLSTAT internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlSetVolumeStatus(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp, cm_req_t *reqp)
  {
!     afs_int32 code;
      char volName[32];
      char offLineMsg[256];
      char motd[256];
      cm_conn_t *tcp;
      AFSFetchVolumeStatus volStat;
      AFSStoreVolumeStatus storeStat;
      cm_volume_t *tvp;
      cm_cell_t *cellp;
!     char *cp;
!     clientchar_t *strp;
      struct rx_connection * callp;
  
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
  	code = CM_ERROR_NOACCESS;
***************
*** 891,918 ****
          cellp = cm_FindCellByID(scp->fid.cell, 0);
          osi_assertx(cellp, "null cm_cell_t");
  
!         if (scp->flags & CM_SCACHEFLAG_RO) {
!             cm_ReleaseSCache(scp);
              return CM_ERROR_READONLY;
-         }
  
!         code = cm_FindVolumeByID(cellp, scp->fid.volume, userp, &req, 
                                   CM_GETVOL_FLAG_CREATE, &tvp);
!         if (code) {
!             cm_ReleaseSCache(scp);
              return code;
!         }
          cm_PutVolume(tvp);
  
          /* Copy the junk out, using cp as a roving pointer. */
!         cp = ioctlp->inDatap;
!         memcpy((char *)&volStat, cp, sizeof(AFSFetchVolumeStatus));
!         cp += sizeof(AFSFetchVolumeStatus);
!         StringCbCopyA(volName, sizeof(volName), cp);
!         cp += strlen(volName)+1;
!         StringCbCopyA(offLineMsg, sizeof(offLineMsg), cp);
!         cp +=  strlen(offLineMsg)+1;
!         StringCbCopyA(motd, sizeof(motd), cp);
          storeStat.Mask = 0;
          if (volStat.MinQuota != -1) {
              storeStat.MinQuota = volStat.MinQuota;
--- 618,651 ----
          cellp = cm_FindCellByID(scp->fid.cell, 0);
          osi_assertx(cellp, "null cm_cell_t");
  
!         if (scp->flags & CM_SCACHEFLAG_RO)
              return CM_ERROR_READONLY;
  
!         code = cm_FindVolumeByID(cellp, scp->fid.volume, userp, reqp, 
                                   CM_GETVOL_FLAG_CREATE, &tvp);
!         if (code) 
              return code;
! 
          cm_PutVolume(tvp);
  
          /* Copy the junk out, using cp as a roving pointer. */
!         memcpy((char *)&volStat, ioctlp->inDatap, sizeof(AFSFetchVolumeStatus));
!         ioctlp->inDatap += sizeof(AFSFetchVolumeStatus);
! 
!         strp = cm_ParseIoctlStringAlloc(ioctlp, NULL);
!         cm_ClientStringToFsString(strp, -1, volName, lengthof(volName));
!         free(strp);
! 
!         strp = cm_ParseIoctlStringAlloc(ioctlp, NULL);
!         cm_ClientStringToFsString(strp, -1, offLineMsg, lengthof(offLineMsg));
!         free(strp);
! 
!         strp = cm_ParseIoctlStringAlloc(ioctlp, NULL);
!         cm_ClientStringToFsString(strp, -1, motd, lengthof(motd));
!         free(strp);
! 
!         strp = NULL;
! 
          storeStat.Mask = 0;
          if (volStat.MinQuota != -1) {
              storeStat.MinQuota = volStat.MinQuota;
***************
*** 924,946 ****
          }
  
          do {
!             code = cm_ConnFromFID(&scp->fid, userp, &req, &tcp);
!             if (code) continue;
  
              callp = cm_GetRxConn(tcp);
              code = RXAFS_SetVolumeStatus(callp, scp->fid.volume,
!                                           &storeStat, volName, offLineMsg, motd);
              rx_PutConnection(callp);
  
!         } while (cm_Analyze(tcp, userp, &req, &scp->fid, NULL, NULL, NULL, code));
!         code = cm_MapRPCError(code, &req);
      }
      
      /* return on failure */
!     cm_ReleaseSCache(scp);
!     if (code) {
          return code;
-     }
  
      /* we are sending parms back to make compat. with prev system.  should
       * change interface later to not ask for current status, just set
--- 657,678 ----
          }
  
          do {
!             code = cm_ConnFromFID(&scp->fid, userp, reqp, &tcp);
!             if (code)
!                 continue;
  
              callp = cm_GetRxConn(tcp);
              code = RXAFS_SetVolumeStatus(callp, scp->fid.volume,
!                                          &storeStat, volName, offLineMsg, motd);
              rx_PutConnection(callp);
  
!         } while (cm_Analyze(tcp, userp, reqp, &scp->fid, NULL, NULL, NULL, code));
!         code = cm_MapRPCError(code, reqp);
      }
      
      /* return on failure */
!     if (code)
          return code;
  
      /* we are sending parms back to make compat. with prev system.  should
       * change interface later to not ask for current status, just set
***************
*** 962,1002 ****
      return 0;
  }       
  
! long cm_IoctlGetVolumeStatus(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     char volName[32];
!     cm_scache_t *scp;
!     char offLineMsg[256];
!     char motd[256];
      cm_conn_t *connp;
-     register long code;
      AFSFetchVolumeStatus volStat;
!     register char *cp;
      char *Name;
      char *OfflineMsg;
      char *MOTD;
-     cm_req_t req;
      struct rx_connection * callp;
-     cm_ioctlQueryOptions_t *optionsp;
-     afs_uint32 flags = 0;
- 
-     cm_InitReq(&req);
- 
-     optionsp = cm_IoctlGetQueryOptions(ioctlp, userp);
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
-         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
- 
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
-         cm_fid_t fid;
-         cm_SkipIoctlPath(ioctlp);
-         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
-                   optionsp->fid.vnode, optionsp->fid.unique);
-         code = cm_GetSCache(&fid, &scp, userp, &req);
-     } else {
-         code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
-     }
-     if (code) 
-         return code;
  
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
--- 694,720 ----
      return 0;
  }       
  
! 
! /* 
!  * VIOCGETVOLSTAT internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlGetVolumeStatus(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp, cm_req_t *reqp)
  {
!     afs_int32 code;
!     char volName[32]="(unknown)";
!     char offLineMsg[256]="server temporarily inaccessible";
!     char motd[256]="server temporarily inaccessible";
      cm_conn_t *connp;
      AFSFetchVolumeStatus volStat;
!     char *cp;
      char *Name;
      char *OfflineMsg;
      char *MOTD;
      struct rx_connection * callp;
  
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
***************
*** 1016,1022 ****
  	OfflineMsg = offLineMsg;
  	MOTD = motd;
  	do {
! 	    code = cm_ConnFromFID(&scp->fid, userp, &req, &connp);
  	    if (code) continue;
  
  	    callp = cm_GetRxConn(connp);
--- 734,740 ----
  	OfflineMsg = offLineMsg;
  	MOTD = motd;
  	do {
! 	    code = cm_ConnFromFID(&scp->fid, userp, reqp, &connp);
  	    if (code) continue;
  
  	    callp = cm_GetRxConn(connp);
***************
*** 1024,1035 ****
  					 &volStat, &Name, &OfflineMsg, &MOTD);
  	    rx_PutConnection(callp);
  
! 	} while (cm_Analyze(connp, userp, &req, &scp->fid, NULL, NULL, NULL, code));
! 	code = cm_MapRPCError(code, &req);
      }
  
!     cm_ReleaseSCache(scp);
!     if (code) return code;
  
      /* Copy all this junk into msg->im_data, keeping track of the lengths. */
      cp = ioctlp->outDatap;
--- 742,753 ----
  					 &volStat, &Name, &OfflineMsg, &MOTD);
  	    rx_PutConnection(callp);
  
! 	} while (cm_Analyze(connp, userp, reqp, &scp->fid, NULL, NULL, NULL, code));
! 	code = cm_MapRPCError(code, reqp);
      }
  
!     if (code) 
!         return code;
  
      /* Copy all this junk into msg->im_data, keeping track of the lengths. */
      cp = ioctlp->outDatap;
***************
*** 1048,1071 ****
      return 0;
  }
  
! long cm_IoctlGetFid(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     cm_scache_t *scp;
!     register long code;
!     register char *cp;
      cm_fid_t fid;
-     cm_req_t req;
-     cm_ioctlQueryOptions_t * optionsp;
-     afs_uint32 flags = 0;
- 
-     cm_InitReq(&req);
- 
-     optionsp = cm_IoctlGetQueryOptions(ioctlp, userp);
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
-         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
- 
-     code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
-     if (code) return code;
  
      memset(&fid, 0, sizeof(cm_fid_t));
      fid.cell   = scp->fid.cell;
--- 766,782 ----
      return 0;
  }
  
! /* 
!  * VIOCGETFID internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlGetFid(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp, cm_req_t *reqp)
  {
!     char *cp;
      cm_fid_t fid;
  
      memset(&fid, 0, sizeof(cm_fid_t));
      fid.cell   = scp->fid.cell;
***************
*** 1073,1080 ****
      fid.vnode  = scp->fid.vnode;
      fid.unique = scp->fid.unique;
  
-     cm_ReleaseSCache(scp);
- 
      /* Copy all this junk into msg->im_data, keeping track of the lengths. */
      cp = ioctlp->outDatap;
      memcpy(cp, (char *)&fid, sizeof(cm_fid_t));
--- 784,789 ----
***************
*** 1086,1213 ****
      return 0;
  }
  
! long cm_IoctlGetFileType(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     cm_scache_t *scp;
!     register long code;
!     register char *cp;
      afs_uint32 fileType = 0;
-     cm_req_t req;
-     cm_ioctlQueryOptions_t * optionsp;
-     afs_uint32 flags = 0;
- 
-     cm_InitReq(&req);
- 
-     optionsp = cm_IoctlGetQueryOptions(ioctlp, userp);
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
-         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
- 
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
-         cm_fid_t fid;
-         cm_SkipIoctlPath(ioctlp);
-         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
-                   optionsp->fid.vnode, optionsp->fid.unique);
-         code = cm_GetSCache(&fid, &scp, userp, &req);
-     } else {
-         code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
-     }
-     if (code) 
-         return code;
  
!     fileType = scp->fileType;
!     cm_ReleaseSCache(scp);
  
!     /* Copy all this junk into msg->im_data, keeping track of the lengths. */
!     cp = ioctlp->outDatap;
!     memcpy(cp, (char *)&fileType, sizeof(fileType));
!     cp += sizeof(fileType);
  
!     /* return new size */
!     ioctlp->outDatap = cp;
  
!     return 0;
  }
  
! long cm_IoctlGetOwner(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     cm_scache_t *scp;
!     register long code;
!     register char *cp;
!     cm_req_t req;
!     cm_ioctlQueryOptions_t *optionsp;
!     afs_uint32 flags = 0;
! 
!     cm_InitReq(&req);
! 
!     optionsp = cm_IoctlGetQueryOptions(ioctlp, userp);
!     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
!         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
! 
!     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
!         cm_fid_t fid;
!         cm_SkipIoctlPath(ioctlp);
!         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
!                   optionsp->fid.vnode, optionsp->fid.unique);
!         code = cm_GetSCache(&fid, &scp, userp, &req);
!     } else {
!         code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
!     }
!     if (code) 
!         return code;
! 
!     /* Copy all this junk into msg->im_data, keeping track of the lengths. */
!     cp = ioctlp->outDatap;
!     memcpy(cp, (char *)&scp->owner, sizeof(afs_uint32));
!     cp += sizeof(afs_uint32);
!     memcpy(cp, (char *)&scp->group, sizeof(afs_uint32));
!     cp += sizeof(afs_uint32);
  
!     /* return new size */
!     ioctlp->outDatap = cp;
  
!     cm_ReleaseSCache(scp);
  
!     return 0;
  }
  
! long cm_IoctlWhereIs(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long code;
!     cm_scache_t *scp;
      cm_cell_t *cellp;
      cm_volume_t *tvp;
      cm_serverRef_t **tsrpp, *current;
      cm_server_t *tsp;
!     unsigned long volume;
      char *cp;
-     cm_req_t req;
-     cm_ioctlQueryOptions_t *optionsp;
-     afs_uint32 flags = 0;
- 
-     cm_InitReq(&req);
- 
-     optionsp = cm_IoctlGetQueryOptions(ioctlp, userp);
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
-         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
- 
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
-         cm_fid_t fid;
-         cm_SkipIoctlPath(ioctlp);
-         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
-                   optionsp->fid.vnode, optionsp->fid.unique);
-         code = cm_GetSCache(&fid, &scp, userp, &req);
-     } else {
-         code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
-     }
-     if (code) 
-         return code;
  
      volume = scp->fid.volume;
  
      cellp = cm_FindCellByID(scp->fid.cell, 0);
  
-     cm_ReleaseSCache(scp);
- 
      if (!cellp)
  	return CM_ERROR_NOSUCHCELL;
  
--- 795,891 ----
      return 0;
  }
  
! /* 
!  * VIOC_GETFILETYPE internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlGetFileType(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp, cm_req_t *reqp)
  {
!     afs_int32 code = 0;
!     char *cp;
      afs_uint32 fileType = 0;
  
!     if (scp->fileType == 0) {
!         lock_ObtainWrite(&scp->rw);
!         code = cm_SyncOp(scp, NULL, userp, reqp, 0,
!                          CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
!         if (code == 0)
!             cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
!         lock_ReleaseWrite(&scp->rw);
!     }
  
!     if (code == 0) {
!         fileType = scp->fileType;
  
!         /* Copy all this junk into msg->im_data, keeping track of the lengths. */
!         cp = ioctlp->outDatap;
!         memcpy(cp, (char *)&fileType, sizeof(fileType));
!         cp += sizeof(fileType);
  
!         /* return new size */
!         ioctlp->outDatap = cp;
!     }
!     return code;
  }
  
! /* 
!  * VIOCGETOWNER internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlGetOwner(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp, cm_req_t *reqp)
  {
!     afs_int32 code = 0;
!     char *cp;
  
!     lock_ObtainWrite(&scp->rw);
!     code = cm_SyncOp(scp, NULL, userp, reqp, 0,
!                       CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
!     if (code == 0)
!         cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
!     lock_ReleaseWrite(&scp->rw);
  
!     if (code == 0) {
!         /* Copy all this junk into msg->im_data, keeping track of the lengths. */
!         cp = ioctlp->outDatap;
!         memcpy(cp, (char *)&scp->owner, sizeof(afs_uint32));
!         cp += sizeof(afs_uint32);
!         memcpy(cp, (char *)&scp->group, sizeof(afs_uint32));
!         cp += sizeof(afs_uint32);
  
!         /* return new size */
!         ioctlp->outDatap = cp;
!     }
!     return code;
  }
  
! 
! /* 
!  * VIOCWHEREIS internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlWhereIs(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp, cm_req_t *reqp)
  {
!     afs_int32 code;
      cm_cell_t *cellp;
      cm_volume_t *tvp;
      cm_serverRef_t **tsrpp, *current;
      cm_server_t *tsp;
!     afs_uint32 volume;
      char *cp;
  
      volume = scp->fid.volume;
  
      cellp = cm_FindCellByID(scp->fid.cell, 0);
  
      if (!cellp)
  	return CM_ERROR_NOSUCHCELL;
  
***************
*** 1234,1240 ****
      } else 
  #endif
      {
!         code = cm_FindVolumeByID(cellp, volume, userp, &req, CM_GETVOL_FLAG_CREATE, &tvp);
          if (code) 
              return code;
  	
--- 912,918 ----
      } else 
  #endif
      {
!         code = cm_FindVolumeByID(cellp, volume, userp, reqp, CM_GETVOL_FLAG_CREATE, &tvp);
          if (code) 
              return code;
  	
***************
*** 1261,1331 ****
      return 0;
  }       
  
! long cm_IoctlStatMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long code;
!     cm_scache_t *dscp;
      cm_scache_t *scp;
!     char *cp;
!     cm_req_t req;
! 
!     cm_InitReq(&req);
! 
!     code = cm_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
!     if (code) return code;
  
!     cp = ioctlp->inDatap;
  
-     code = cm_Lookup(dscp, cp, CM_FLAG_NOMOUNTCHASE, userp, &req, &scp);
-     cm_ReleaseSCache(dscp);
-     if (code) return code;
-         
      lock_ObtainWrite(&scp->rw);
  
      /* now check that this is a real mount point */
      if (scp->fileType != CM_SCACHETYPE_MOUNTPOINT) {
!         lock_ReleaseWrite(&scp->rw);
!         cm_ReleaseSCache(scp);
!         return CM_ERROR_INVAL;
      }
  
!     code = cm_ReadMountPoint(scp, userp, &req);
      if (code == 0) {
!         cp = ioctlp->outDatap;
!         StringCbCopyA(cp, SMB_IOCTL_MAXDATA - (cp - ioctlp->outAllocp), scp->mountPointStringp);
!         cp += strlen(cp) + 1;
!         ioctlp->outDatap = cp;
      }
      lock_ReleaseWrite(&scp->rw);
      cm_ReleaseSCache(scp);
  
      return code;
  }       
  
! long cm_IoctlDeleteMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long code;
!     cm_scache_t *dscp;
      cm_scache_t *scp;
!     char *cp;
!     cm_req_t req;
! 
!     cm_InitReq(&req);
  
!     code = cm_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
!     if (code) return code;
  
!     cp = ioctlp->inDatap;
! 
!     code = cm_Lookup(dscp, cp, CM_FLAG_NOMOUNTCHASE, userp, &req, &scp);
          
      /* if something went wrong, bail out now */
      if (code)
          goto done3;
          
      lock_ObtainWrite(&scp->rw);
!     code = cm_SyncOp(scp, NULL, userp, &req, 0,
!                       CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
      if (code)  
          goto done2;
  
--- 939,1022 ----
      return 0;
  }       
  
! /* 
!  * VIOC_AFS_STAT_MT_PT internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlStatMountPoint(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *dscp, cm_req_t *reqp)
  {
!     afs_int32 code;
      cm_scache_t *scp;
!     clientchar_t *cp;
  
!     cp = cm_ParseIoctlStringAlloc(ioctlp, NULL);
!     code = cm_Lookup(dscp, cp, CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
!     if (code) 
!         goto done_2;
  
      lock_ObtainWrite(&scp->rw);
+     code = cm_SyncOp(scp, NULL, userp, reqp, 0,
+                       CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
+     if (code == 0)
+         cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
+     else
+         goto done;
  
      /* now check that this is a real mount point */
      if (scp->fileType != CM_SCACHETYPE_MOUNTPOINT) {
!         code = CM_ERROR_INVAL;
!         goto done;
      }
  
!     code = cm_ReadMountPoint(scp, userp, reqp);
      if (code == 0) {
!         char * strp;
!         strp = ioctlp->outDatap;
!         StringCbCopyA(strp, SMB_IOCTL_MAXDATA - (strp - ioctlp->outAllocp), scp->mountPointStringp);
!         strp += strlen(strp) + 1;
!         ioctlp->outDatap = strp;
      }
+ 
+   done:
      lock_ReleaseWrite(&scp->rw);
      cm_ReleaseSCache(scp);
  
+  done_2:
+     if (cp)
+         free(cp);
+ 
      return code;
  }       
  
! /* 
!  * VIOC_AFS_DELETE_MT_PT internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32 
! cm_IoctlDeleteMountPoint(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *dscp, cm_req_t *reqp)
  {
!     afs_int32 code;
      cm_scache_t *scp;
!     clientchar_t *cp = NULL;
!     fschar_t *originalName = NULL;
!     cm_dirOp_t dirop;
  
!     cp = cm_ParseIoctlStringAlloc(ioctlp, NULL);
  
!     code = cm_Lookup(dscp, cp, CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
          
      /* if something went wrong, bail out now */
      if (code)
          goto done3;
          
      lock_ObtainWrite(&scp->rw);
!     code = cm_SyncOp(scp, NULL, userp, reqp, 0,
!                      CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
      if (code)  
          goto done2;
  
***************
*** 1338,1359 ****
      /* time to make the RPC, so drop the lock */
      lock_ReleaseWrite(&scp->rw);
  
  #ifdef AFS_FREELANCE_CLIENT
      if (cm_freelanceEnabled && dscp == cm_data.rootSCachep) {
!         /* we are adding the mount point to the root dir., so call
!          * the freelance code to do the add. */
          osi_Log0(afsd_logp,"IoctlDeleteMountPoint from Freelance root dir");
!         code = cm_FreelanceRemoveMount(cp);
      } else 
  #endif
      {
          /* easier to do it this way */
!         code = cm_Unlink(dscp, cp, userp, &req);
      }
      if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
          smb_NotifyChange(FILE_ACTION_REMOVED,
!                           FILE_NOTIFY_CHANGE_DIR_NAME,
!                           dscp, cp, NULL, TRUE);
  
      lock_ObtainWrite(&scp->rw);
    done1:
--- 1029,1071 ----
      /* time to make the RPC, so drop the lock */
      lock_ReleaseWrite(&scp->rw);
  
+ #ifdef USE_BPLUS
+     code = cm_BeginDirOp(dscp, userp, reqp, CM_DIRLOCK_READ, &dirop);
+     if (code == 0) {
+         code = cm_BPlusDirLookupOriginalName(&dirop, cp, &originalName);
+         /* The cm_Dir* functions can't be used to lookup the
+            originalName.  Those functions only know of the original
+            name. */
+         cm_EndDirOp(&dirop);
+     }
+ #endif
+ 
+     /* If this name doesn't have a non-normalized name associated with
+        it, we assume that what we had is what is actually present on
+        the file server. */
+ 
+     if (originalName == NULL) {
+         originalName = cm_ClientStringToFsStringAlloc(cp, -1, NULL);
+     }
+ 
+     /* cp is a normalized name.  originalName is the actual name we
+        saw on the fileserver. */
  #ifdef AFS_FREELANCE_CLIENT
      if (cm_freelanceEnabled && dscp == cm_data.rootSCachep) {
!         /* we are removing the mount point to the root dir., so call
!          * the freelance code to do the deletion. */
          osi_Log0(afsd_logp,"IoctlDeleteMountPoint from Freelance root dir");
!         code = cm_FreelanceRemoveMount(originalName);
      } else 
  #endif
      {
          /* easier to do it this way */
!         code = cm_Unlink(dscp, originalName, cp, userp, reqp);
      }
      if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
          smb_NotifyChange(FILE_ACTION_REMOVED,
!                          FILE_NOTIFY_CHANGE_DIR_NAME,
!                          dscp, cp, NULL, TRUE);
  
      lock_ObtainWrite(&scp->rw);
    done1:
***************
*** 1365,1375 ****
      cm_ReleaseSCache(scp);
  
    done3:
!     cm_ReleaseSCache(dscp);
      return code;
  }
  
! long cm_IoctlCheckServers(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      cm_cell_t *cellp;
      chservinfo_t csi;
--- 1077,1098 ----
      cm_ReleaseSCache(scp);
  
    done3:
!     if (originalName != NULL)
!         free(originalName);
! 
!     if (cp != NULL)
!         free(cp);
! 
      return code;
  }
  
! /* 
!  * VIOCCKSERV internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32 
! cm_IoctlCheckServers(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      cm_cell_t *cellp;
      chservinfo_t csi;
***************
*** 1379,1385 ****
      cm_server_t *tsp;
      int haveCell;
          
-     cm_SkipIoctlPath(ioctlp);	/* we don't care about the path */
      tp = ioctlp->inDatap;
      haveCell = 0;
  
--- 1102,1107 ----
***************
*** 1406,1412 ****
          ioctlp->inDatap = cp = ioctlp->inDatap + sizeof(long);
          if (cp - ioctlp->inAllocp < ioctlp->inCopied)	/* still more data available */
              haveCell = 1;
!     }       
  
      /* 
       * 1: fast check, don't contact servers.
--- 1128,1134 ----
          ioctlp->inDatap = cp = ioctlp->inDatap + sizeof(long);
          if (cp - ioctlp->inAllocp < ioctlp->inCopied)	/* still more data available */
              haveCell = 1;
!     }
  
      /* 
       * 1: fast check, don't contact servers.
***************
*** 1418,1441 ****
          if (!cellp) 
              return CM_ERROR_NOSUCHCELL;
      }
!     else cellp = (cm_cell_t *) 0;
      if (!cellp && (temp & 2)) {
          /* use local cell */
!         cellp = cm_FindCellByID(1, 0);
      }
      if (!(temp & 1)) {	/* if not fast, call server checker routine */
          /* check down servers */
!         cm_CheckServers(CM_FLAG_CHECKDOWNSERVERS | CM_FLAG_CHECKUPSERVERS,
!                          cellp);
!     }       
  
      /* now return the current down server list */
      cp = ioctlp->outDatap;
      lock_ObtainRead(&cm_serverLock);
      for (tsp = cm_allServersp; tsp; tsp=tsp->allNextp) {
!         if (cellp && tsp->cellp != cellp) continue;	/* cell spec'd and wrong */
          if ((tsp->flags & CM_SERVERFLAG_DOWN)
!              && tsp->type == CM_SERVER_FILE) {
              memcpy(cp, (char *)&tsp->addr.sin_addr.s_addr, sizeof(long));
              cp += sizeof(long);
          }
--- 1140,1166 ----
          if (!cellp) 
              return CM_ERROR_NOSUCHCELL;
      }
!     else 
!         cellp = (cm_cell_t *) 0;
      if (!cellp && (temp & 2)) {
          /* use local cell */
!         fschar_t wscell[CELL_MAXNAMELEN+1];
!         cm_GetRootCellName(wscell);
!         cellp = cm_GetCell(wscell, 0);
      }
      if (!(temp & 1)) {	/* if not fast, call server checker routine */
          /* check down servers */
!         cm_CheckServers(CM_FLAG_CHECKDOWNSERVERS | CM_FLAG_CHECKUPSERVERS, cellp);
!     }
  
      /* now return the current down server list */
      cp = ioctlp->outDatap;
      lock_ObtainRead(&cm_serverLock);
      for (tsp = cm_allServersp; tsp; tsp=tsp->allNextp) {
!         if (cellp && tsp->cellp != cellp) 
!             continue;	/* cell spec'd and wrong */
          if ((tsp->flags & CM_SERVERFLAG_DOWN)
!             && tsp->type == CM_SERVER_FILE) {
              memcpy(cp, (char *)&tsp->addr.sin_addr.s_addr, sizeof(long));
              cp += sizeof(long);
          }
***************
*** 1446,1469 ****
      return 0;
  }
  
! long cm_IoctlGag(struct smb_ioctl *ioctlp, struct cm_user *userp)
! {
!     /* we don't print anything superfluous, so we don't support the gag call */
!     return CM_ERROR_INVAL;
! }
! 
! long cm_IoctlCheckVolumes(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      cm_RefreshVolumes();
      return 0;
  }       
  
! long cm_IoctlSetCacheSize(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      afs_uint64 temp;
-     long code;
- 
-     cm_SkipIoctlPath(ioctlp);
  
      memcpy(&temp, ioctlp->inDatap, sizeof(temp));
      if (temp == 0) 
--- 1171,1202 ----
      return 0;
  }
  
! /* 
!  * VIOCCKBACK internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32 
! cm_IoctlCheckVolumes(cm_ioctl_t *ioctlp, cm_user_t *userp)
  {
      cm_RefreshVolumes();
      return 0;
  }       
  
! /* 
!  * VIOCSETCACHESIZE internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  *
!  * This function is no longer meaningful in the current day world
!  * of persistent caches.  The buf_SetNBuffers() function will
!  * inevitably fail.
!  */
! afs_int32 
! cm_IoctlSetCacheSize(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
+     afs_int32 code;
      afs_uint64 temp;
  
      memcpy(&temp, ioctlp->inDatap, sizeof(temp));
      if (temp == 0) 
***************
*** 1479,1491 ****
      return code;
  }
  
! long cm_IoctlTraceControl(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long inValue;
!         
!     cm_SkipIoctlPath(ioctlp);
!         
!     memcpy(&inValue, ioctlp->inDatap, sizeof(long));
  
      /* print trace */
      if (inValue & 8) {
--- 1212,1228 ----
      return code;
  }
  
! /* 
!  * VIOC_TRACECTL internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32 
! cm_IoctlTraceControl(cm_ioctl_t *ioctlp, cm_user_t *userp)
  {
!     afs_uint32 inValue;
! 
!     memcpy(&inValue, ioctlp->inDatap, sizeof(afs_uint32));
  
      /* print trace */
      if (inValue & 8) {
***************
*** 1514,1525 ****
  
      /* and copy out tracing flag */
      inValue = afsd_logp->enabled;	/* use as a temp vbl */
!     memcpy(ioctlp->outDatap, &inValue, sizeof(long));
!     ioctlp->outDatap += sizeof(long);
      return 0;
  }       
  
! long cm_IoctlGetCacheParms(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      cm_cacheParms_t parms;
  
--- 1251,1268 ----
  
      /* and copy out tracing flag */
      inValue = afsd_logp->enabled;	/* use as a temp vbl */
!     memcpy(ioctlp->outDatap, &inValue, sizeof(afs_uint32));
!     ioctlp->outDatap += sizeof(afs_uint32);
      return 0;
  }       
  
! /* 
!  * VIOCGETCACHEPARMS internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32 
! cm_IoctlGetCacheParms(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      cm_cacheParms_t parms;
  
***************
*** 1539,1545 ****
      return 0;
  }
  
! long cm_IoctlGetCell(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      long whichCell;
      long magic = 0;
--- 1282,1294 ----
      return 0;
  }
  
! /* 
!  * VIOCGETCELL internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32 
! cm_IoctlGetCell(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      long whichCell;
      long magic = 0;
***************
*** 1551,1576 ****
      char *tp;
      char *basep;
  
-     cm_SkipIoctlPath(ioctlp);
- 
      tp = ioctlp->inDatap;
  
      memcpy((char *)&whichCell, tp, sizeof(long));
      tp += sizeof(long);
  
      /* see if more than one long passed in, ignoring the null pathname (the -1) */
!     if (ioctlp->inCopied-1 > sizeof(long)) {
!         memcpy((char *)&magic, tp, sizeof(long));
      }
  
      lock_ObtainRead(&cm_cellLock);
      for (tcellp = cm_data.allCellsp; tcellp; tcellp = tcellp->allNextp) {
!         if (whichCell == 0) break;
          whichCell--;
      }
      lock_ReleaseRead(&cm_cellLock);
      if (tcellp) {
          int max = 8;
  
          cp = ioctlp->outDatap;
  
--- 1300,1325 ----
      char *tp;
      char *basep;
  
      tp = ioctlp->inDatap;
  
      memcpy((char *)&whichCell, tp, sizeof(long));
      tp += sizeof(long);
  
      /* see if more than one long passed in, ignoring the null pathname (the -1) */
!     if (ioctlp->inCopied-1 > sizeof(afs_uint32)) {
!         memcpy((char *)&magic, tp, sizeof(afs_uint32));
      }
  
      lock_ObtainRead(&cm_cellLock);
      for (tcellp = cm_data.allCellsp; tcellp; tcellp = tcellp->allNextp) {
!         if (whichCell == 0)
!             break;
          whichCell--;
      }
      lock_ReleaseRead(&cm_cellLock);
      if (tcellp) {
          int max = 8;
+         clientchar_t * cellnamep;
  
          cp = ioctlp->outDatap;
  
***************
*** 1581,1600 ****
          memset(cp, 0, max * sizeof(long));
          basep = cp;
          lock_ObtainRead(&cm_serverLock);	/* for going down server list */
!         /* jaltman - do the reference counts to serverRefp contents need to be increased? */
!         serverRefp = tcellp->vlServersp;
!         for (i=0; i<max; i++) {
!             if (!serverRefp) break;
              serverp = serverRefp->server;
              memcpy(cp, &serverp->addr.sin_addr.s_addr, sizeof(long));
              cp += sizeof(long);
-             serverRefp = serverRefp->next;
          }
          lock_ReleaseRead(&cm_serverLock);
!         cp = basep + max * sizeof(afs_int32);
!         StringCbCopyA(cp, SMB_IOCTL_MAXDATA - (cp - ioctlp->outAllocp), tcellp->name);
!         cp += strlen(tcellp->name)+1;
!         ioctlp->outDatap = cp;
      }
  
      if (tcellp) 
--- 1330,1348 ----
          memset(cp, 0, max * sizeof(long));
          basep = cp;
          lock_ObtainRead(&cm_serverLock);	/* for going down server list */
!         for (i=0, serverRefp = tcellp->vlServersp; 
!              serverRefp && i<max; 
!              i++, serverRefp = serverRefp->next) {
              serverp = serverRefp->server;
              memcpy(cp, &serverp->addr.sin_addr.s_addr, sizeof(long));
              cp += sizeof(long);
          }
          lock_ReleaseRead(&cm_serverLock);
!         ioctlp->outDatap = basep + max * sizeof(afs_int32);
! 
!         cellnamep = cm_FsStringToClientStringAlloc(tcellp->name, -1, NULL);
!         cm_UnparseIoctlString(ioctlp, NULL, cellnamep, -1);
!         free(cellnamep);
      }
  
      if (tcellp) 
***************
*** 1603,1613 ****
          return CM_ERROR_NOMORETOKENS;	/* mapped to EDOM */
  }
  
! long cm_IoctlNewCell(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     /* NT cache manager will read cell information from CellServDB each time
!      * cell is accessed. So, this call is necessary only if list of server for a cell 
!      * changes (or IP addresses of cell servers changes).
       * All that needs to be done is to refresh server information for all cells that 
       * are already loaded.
    
--- 1351,1366 ----
          return CM_ERROR_NOMORETOKENS;	/* mapped to EDOM */
  }
  
! 
! /* 
!  * VIOCNEWCELL internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32 
! cm_IoctlNewCell(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
!     /* 
       * All that needs to be done is to refresh server information for all cells that 
       * are already loaded.
    
***************
*** 1617,1629 ****
      cm_cell_t *cp;
      cm_cell_rock_t rock;
  
-   
-     cm_SkipIoctlPath(ioctlp);
      lock_ObtainWrite(&cm_cellLock);
    
      for (cp = cm_data.allCellsp; cp; cp=cp->allNextp) 
      {
!         long code;
  	lock_ObtainMutex(&cp->mx);
          /* delete all previous server lists - cm_FreeServerList will ask for write on cm_ServerLock*/
          cm_FreeServerList(&cp->vlServersp, CM_FREESERVERLIST_DELETE);
--- 1370,1380 ----
      cm_cell_t *cp;
      cm_cell_rock_t rock;
  
      lock_ObtainWrite(&cm_cellLock);
    
      for (cp = cm_data.allCellsp; cp; cp=cp->allNextp) 
      {
!         afs_int32 code;
  	lock_ObtainMutex(&cp->mx);
          /* delete all previous server lists - cm_FreeServerList will ask for write on cm_ServerLock*/
          cm_FreeServerList(&cp->vlServersp, CM_FREESERVERLIST_DELETE);
***************
*** 1661,1705 ****
      return 0;       
  }
  
! long cm_IoctlGetWsCell(smb_ioctl_t *ioctlp, cm_user_t *userp)
  {
! 	long code = 0;
  
! 	if (cm_freelanceEnabled) {
!             if (cm_GetRootCellName(ioctlp->outDatap))
!                 StringCbCopyA(ioctlp->outDatap, SMB_IOCTL_MAXDATA - (ioctlp->outDatap - ioctlp->outAllocp), "Freelance.Local.Root");
!             ioctlp->outDatap += strlen(ioctlp->outDatap) +1;
! 	} else if (cm_data.rootCellp) {
! 	    /* return the default cellname to the caller */
! 	    StringCbCopyA(ioctlp->outDatap, SMB_IOCTL_MAXDATA - (ioctlp->outDatap - ioctlp->outAllocp), cm_data.rootCellp->name);
! 	    ioctlp->outDatap += strlen(ioctlp->outDatap) +1;
! 	} else {
! 	    /* if we don't know our default cell, return failure */
!             code = CM_ERROR_NOSUCHCELL;
!     }
  
      return code;
  }
  
! long cm_IoctlSysName(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long setSysName, foundname = 0;
!     char *cp, *cp2, inname[MAXSYSNAME], outname[MAXSYSNAME];
!     int t, count, num = 0;
!     char **sysnamelist[MAXSYSNAME];
!         
!     cm_SkipIoctlPath(ioctlp);
  
-     memcpy(&setSysName, ioctlp->inDatap, sizeof(long));
-     ioctlp->inDatap += sizeof(long);
-         
      if (setSysName) {
          /* check my args */
          if ( setSysName < 0 || setSysName > MAXNUMSYSNAMES )
              return EINVAL;
          cp2 = ioctlp->inDatap;
          for ( cp=ioctlp->inDatap, count = 0; count < setSysName; count++ ) {
!             /* won't go past end of ioctlp->inDatap since maxsysname*num < ioctlp->inDatap length */
              t = (int)strlen(cp);
              if (t >= MAXSYSNAME || t <= 0)
                  return EINVAL;
--- 1412,1468 ----
      return 0;       
  }
  
! /* 
!  * VIOC_GET_WS_CELL internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32 
! cm_IoctlGetWsCell(cm_ioctl_t *ioctlp, cm_user_t *userp)
  {
!     afs_int32 code = 0;
  
!     if (cm_freelanceEnabled) {
!         if (cm_GetRootCellName(ioctlp->outDatap))
!             StringCbCopyA(ioctlp->outDatap, SMB_IOCTL_MAXDATA - (ioctlp->outDatap - ioctlp->outAllocp), "Freelance.Local.Root");
!         ioctlp->outDatap += strlen(ioctlp->outDatap) +1;
!     } else if (cm_data.rootCellp) {
!         clientchar_t * cellnamep = cm_FsStringToClientStringAlloc(cm_data.rootCellp->name, -1, NULL);
!         /* return the default cellname to the caller */
!         cm_UnparseIoctlString(ioctlp, NULL, cellnamep, -1);
!         free(cellnamep);
!     } else {
!         /* if we don't know our default cell, return failure */
!         code = CM_ERROR_NOSUCHCELL;
!     }   
  
      return code;
  }
  
! /* 
!  * VIOC_AFS_SYSNAME internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32 
! cm_IoctlSysName(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
!     afs_uint32 setSysName;
!     char *cp, *cp2;
!     clientchar_t *inname = NULL;
!     int t, count;
! 
!     memcpy(&setSysName, ioctlp->inDatap, sizeof(afs_uint32));
!     ioctlp->inDatap += sizeof(afs_uint32);
  
      if (setSysName) {
          /* check my args */
          if ( setSysName < 0 || setSysName > MAXNUMSYSNAMES )
              return EINVAL;
          cp2 = ioctlp->inDatap;
          for ( cp=ioctlp->inDatap, count = 0; count < setSysName; count++ ) {
!             /* won't go past end of ioctlp->inDatap since
!                maxsysname*num < ioctlp->inDatap length */
              t = (int)strlen(cp);
              if (t >= MAXSYSNAME || t <= 0)
                  return EINVAL;
***************
*** 1712,1787 ****
  
          /* inname gets first entry in case we're being a translator */
          /* (we are never a translator) */
!         t = (int)strlen(ioctlp->inDatap);
!         memcpy(inname, ioctlp->inDatap, t + 1);
!         ioctlp->inDatap += t + 1;
!         num = count;
      }
  
      /* Not xlating, so local case */
      if (!cm_sysName)
          osi_panic("cm_IoctlSysName: !cm_sysName\n", __FILE__, __LINE__);
  
!     if (!setSysName) {      /* user just wants the info */
!         StringCbCopyA(outname, sizeof(outname), cm_sysName);
!         foundname = cm_sysNameCount;
!         *sysnamelist = cm_sysNameList;
!     } else {        
          /* Local guy; only root can change sysname */
          /* clear @sys entries from the dnlc, once afs_lookup can
           * do lookups of @sys entries and thinks it can trust them */
          /* privs ok, store the entry, ... */
!         StringCbCopyA(cm_sysName, sizeof(cm_sysName), inname);
!         StringCbCopyA(cm_sysNameList[0], MAXSYSNAME, inname);
          if (setSysName > 1) {       /* ... or list */
-             cp = ioctlp->inDatap;
              for (count = 1; count < setSysName; ++count) {
                  if (!cm_sysNameList[count])
                      osi_panic("cm_IoctlSysName: no cm_sysNameList entry to write\n",
!                                __FILE__, __LINE__);
!                 t = (int)strlen(cp);
!                 StringCbCopyA(cm_sysNameList[count], MAXSYSNAME, cp);
!                 cp += t + 1;
              }
          }
          cm_sysNameCount = setSysName;
!     }
  
-     if (!setSysName) {
          /* return the sysname to the caller */
!         cp = ioctlp->outDatap;
!         memcpy(cp, (char *)&foundname, sizeof(afs_int32));
!         cp += sizeof(afs_int32);	/* skip found flag */
!         if (foundname) {
!             StringCbCopyA(cp, SMB_IOCTL_MAXDATA - (cp - ioctlp->outAllocp), outname);
!             cp += strlen(outname) + 1;	/* skip name and terminating null char */
!             for ( count=1; count < foundname ; ++count) {   /* ... or list */
!                 if ( !(*sysnamelist)[count] )
                      osi_panic("cm_IoctlSysName: no cm_sysNameList entry to read\n", 
!                                __FILE__, __LINE__);
!                 t = (int)strlen((*sysnamelist)[count]);
!                 if (t >= MAXSYSNAME)
!                     osi_panic("cm_IoctlSysName: sysname entry garbled\n", 
!                                __FILE__, __LINE__);
!                 StringCbCopyA(cp, SMB_IOCTL_MAXDATA - (cp - ioctlp->outAllocp), (*sysnamelist)[count]);
!                 cp += t + 1;
              }
          }
-         ioctlp->outDatap = cp;
      }
!         
      /* done: success */
      return 0;
  }
  
! long cm_IoctlGetCellStatus(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long temp;
      cm_cell_t *cellp;
  
!     cm_SkipIoctlPath(ioctlp);
  
-     cellp = cm_GetCell(ioctlp->inDatap, 0);
      if (!cellp) 
          return CM_ERROR_NOSUCHCELL;
  
--- 1475,1556 ----
  
          /* inname gets first entry in case we're being a translator */
          /* (we are never a translator) */
!         inname = cm_ParseIoctlStringAlloc(ioctlp, NULL);
      }
  
      /* Not xlating, so local case */
      if (!cm_sysName)
          osi_panic("cm_IoctlSysName: !cm_sysName\n", __FILE__, __LINE__);
  
!     if (setSysName) {
          /* Local guy; only root can change sysname */
          /* clear @sys entries from the dnlc, once afs_lookup can
           * do lookups of @sys entries and thinks it can trust them */
          /* privs ok, store the entry, ... */
! 
!         cm_ClientStrCpy(cm_sysName, lengthof(cm_sysName), inname);
!         cm_ClientStrCpy(cm_sysNameList[0], MAXSYSNAME, inname);
! 
          if (setSysName > 1) {       /* ... or list */
              for (count = 1; count < setSysName; ++count) {
+                 clientchar_t * newsysname;
+ 
                  if (!cm_sysNameList[count])
                      osi_panic("cm_IoctlSysName: no cm_sysNameList entry to write\n",
!                               __FILE__, __LINE__);
! 
!                 newsysname = cm_ParseIoctlStringAlloc(ioctlp, NULL);
!                 cm_ClientStrCpy(cm_sysNameList[count], MAXSYSNAME, newsysname);
!                 free(newsysname);
              }
          }
          cm_sysNameCount = setSysName;
!     } else {
!         afs_int32 i32;
  
          /* return the sysname to the caller */
!         i32 = cm_sysNameCount;
!         memcpy(ioctlp->outDatap, &i32, sizeof(afs_int32));
!         ioctlp->outDatap += sizeof(afs_int32);	/* skip found flag */
! 
!         if (cm_sysNameCount) {
!             for ( count=0; count < cm_sysNameCount ; ++count) {   /* ... or list */
!                 if ( !cm_sysNameList[count] || *cm_sysNameList[count] == _C('\0'))
                      osi_panic("cm_IoctlSysName: no cm_sysNameList entry to read\n", 
!                               __FILE__, __LINE__);
!                 cm_UnparseIoctlString(ioctlp, NULL, cm_sysNameList[count], -1);
              }
          }
      }
! 
!     if (inname) {
!         free(inname);
!         inname = NULL;
!     }
! 
      /* done: success */
      return 0;
  }
  
! /* 
!  * VIOC_GETCELLSTATUS internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32 
! cm_IoctlGetCellStatus(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
!     afs_uint32 temp;
      cm_cell_t *cellp;
+     clientchar_t * cellnamep;
+     fschar_t     * fscellnamep;
  
!     cellnamep = cm_ParseIoctlStringAlloc(ioctlp, NULL);
!     fscellnamep = cm_ClientStringToFsStringAlloc(cellnamep, -1, NULL);
!     cellp = cm_GetCell(fscellnamep, 0);
!     free(fscellnamep);
!     free(cellnamep);
  
      if (!cellp) 
          return CM_ERROR_NOSUCHCELL;
  
***************
*** 1790,1818 ****
      if (cellp->flags & CM_CELLFLAG_SUID)
          temp |= CM_SETCELLFLAG_SUID;
      lock_ReleaseMutex(&cellp->mx);
!         
      /* now copy out parm */
!     memcpy(ioctlp->outDatap, &temp, sizeof(long));
!     ioctlp->outDatap += sizeof(long);
  
      return 0;
  }
  
! long cm_IoctlSetCellStatus(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long temp;
      cm_cell_t *cellp;
  
!     cm_SkipIoctlPath(ioctlp);
  
-     cellp = cm_GetCell(ioctlp->inDatap + 2*sizeof(long), 0);
      if (!cellp) 
          return CM_ERROR_NOSUCHCELL;
  
!     memcpy((char *)&temp, ioctlp->inDatap, sizeof(long));
  
      lock_ObtainMutex(&cellp->mx);
!     if (temp & CM_SETCELLFLAG_SUID)
          cellp->flags |= CM_CELLFLAG_SUID;
      else
          cellp->flags &= ~CM_CELLFLAG_SUID;
--- 1559,1598 ----
      if (cellp->flags & CM_CELLFLAG_SUID)
          temp |= CM_SETCELLFLAG_SUID;
      lock_ReleaseMutex(&cellp->mx);
! 
      /* now copy out parm */
!     memcpy(ioctlp->outDatap, &temp, sizeof(afs_uint32));
!     ioctlp->outDatap += sizeof(afs_uint32);
  
      return 0;
  }
  
! /* 
!  * VIOC_SETCELLSTATUS internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32 
! cm_IoctlSetCellStatus(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
!     afs_uint32 flags;
      cm_cell_t *cellp;
+     clientchar_t *temp;
+     fschar_t * cellnamep;
  
!     temp = cm_ParseIoctlStringAlloc(ioctlp, ioctlp->inDatap + 2*sizeof(afs_uint32));
!     cellnamep = cm_ClientStringToFsStringAlloc(temp, -1, NULL);
!     cellp = cm_GetCell(cellnamep, 0);
!     free(temp);
!     free(cellnamep);
  
      if (!cellp) 
          return CM_ERROR_NOSUCHCELL;
  
!     memcpy((char *)&flags, ioctlp->inDatap, sizeof(afs_uint32));
  
      lock_ObtainMutex(&cellp->mx);
!     if (flags & CM_SETCELLFLAG_SUID)
          cellp->flags |= CM_CELLFLAG_SUID;
      else
          cellp->flags &= ~CM_CELLFLAG_SUID;
***************
*** 1821,1836 ****
      return 0;
  }
  
! long cm_IoctlSetSPrefs(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     cm_SSetPref_t 	  *spin; /* input */
      cm_SPref_t        *srvin;   /* one input component */
      cm_server_t       *tsp;
!     int 		  i, vlonly, noServers, type;
!     struct sockaddr_in	tmp;
!     unsigned short	  rank;
! 
!     cm_SkipIoctlPath(ioctlp);       /* we don't care about the path */
  
      spin	   = (cm_SSetPref_t *)ioctlp->inDatap;
      noServers  = spin->num_servers;
--- 1601,1620 ----
      return 0;
  }
  
! /* 
!  * VIOC_SETSPREFS internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32 
! cm_IoctlSetSPrefs(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
!     cm_SSetPref_t     *spin;    /* input */
      cm_SPref_t        *srvin;   /* one input component */
      cm_server_t       *tsp;
!     int 	       i, vlonly, noServers, type;
!     struct sockaddr_in tmp;
!     unsigned short     rank;
  
      spin	   = (cm_SSetPref_t *)ioctlp->inDatap;
      noServers  = spin->num_servers;
***************
*** 1879,1885 ****
      return 0;
  }
  
! long cm_IoctlGetSPrefs(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      cm_SPrefRequest_t *spin; /* input */
      cm_SPrefInfo_t    *spout;   /* output */
--- 1663,1675 ----
      return 0;
  }
  
! /* 
!  * VIOC_GETSPREFS internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlGetSPrefs(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      cm_SPrefRequest_t *spin; /* input */
      cm_SPrefInfo_t    *spout;   /* output */
***************
*** 1887,1894 ****
      cm_server_t       *tsp;
      int 		  i, vlonly, noServers;
  
-     cm_SkipIoctlPath(ioctlp);       /* we don't care about the path */
- 
      spin      = (cm_SPrefRequest_t *)ioctlp->inDatap;
      spout     = (cm_SPrefInfo_t *) ioctlp->outDatap;
      srvout    = spout->servers;
--- 1677,1682 ----
***************
*** 1925,2000 ****
      return 0;
  }
  
- long cm_IoctlStoreBehind(struct smb_ioctl *ioctlp, struct cm_user *userp)
- {
-     /* we ignore default asynchrony since we only have one way
-      * of doing this today.
-      */
-     return 0;
- }       
  
! long cm_IoctlCreateMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     char leaf[LEAF_SIZE];
!     long code;
!     cm_scache_t *dscp;
      cm_attr_t tattr;
!     char *cp;
!     cm_req_t req;
!     char mpInfo[256];
!     char fullCell[256];
!     char volume[256];
!     char cell[256];
      int ttl;
  
!     cm_InitReq(&req);
!         
!     code = cm_ParseIoctlParent(ioctlp, userp, &req, &dscp, leaf);
!     if (code) 
!         return code;
! 
!     /* Translate chars for the mount point name */
!     TranslateExtendedChars(leaf);
! 
!     /* 
       * The fs command allows the user to specify partial cell names on NT.  These must
       * be expanded to the full cell name for mount points so that the mount points will
       * work on UNIX clients.
       */
  
      /* Extract the possibly partial cell name */
!     StringCbCopyA(cell, sizeof(cell), ioctlp->inDatap + 1);      /* Skip the mp type character */
!         
!     if (cp = strchr(cell, ':')) {
          /* Extract the volume name */
          *cp = 0;
!         StringCbCopyA(volume,  sizeof(volume), cp + 1);
! 	
          /* Get the full name for this cell */
!         code = cm_SearchCellFile(cell, fullCell, 0, 0);
  #ifdef AFS_AFSDB_ENV
          if (code && cm_dnsEnabled)
!             code = cm_SearchCellByDNS(cell, fullCell, &ttl, 0, 0);
  #endif
          if (code) {
!             cm_ReleaseSCache(dscp);
!             return CM_ERROR_NOSUCHCELL;
          }
! 	
!         StringCbPrintfA(mpInfo, sizeof(mpInfo), "%c%s:%s", *ioctlp->inDatap, fullCell, volume);
      } else {
!         /* No cell name specified */
!         StringCbCopyA(mpInfo, sizeof(mpInfo), ioctlp->inDatap);
      }
  
  #ifdef AFS_FREELANCE_CLIENT
      if (cm_freelanceEnabled && dscp == cm_data.rootSCachep) {
!         /* we are adding the mount point to the root dir., so call
           * the freelance code to do the add. */
          osi_Log0(afsd_logp,"IoctlCreateMountPoint within Freelance root dir");
!         code = cm_FreelanceAddMount(leaf, fullCell, volume, 
!                                     *ioctlp->inDatap == '%', NULL);
!     } else 
  #endif
      {
          /* create the symlink with mode 644.  The lack of X bits tells
--- 1713,1787 ----
      return 0;
  }
  
  
! /* 
!  * VIOC_AFS_CREATE_MT_PT internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * dscp is held but not locked.
!  */
! afs_int32
! cm_IoctlCreateMountPoint(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *dscp, cm_req_t *reqp, clientchar_t *leaf)
  {
!     afs_int32 code;
      cm_attr_t tattr;
!     clientchar_t *cp;
!     fschar_t mpInfo[512];           /* mount point string */
!     fschar_t fullCell[MAXCELLCHARS];
!     fschar_t *fscell = NULL;
!     fschar_t *fsvolume = NULL;
!     clientchar_t volume[VL_MAXNAMELEN];
!     clientchar_t *mpp = NULL;
!     clientchar_t *cell = NULL;
      int ttl;
  
!    /* 
       * The fs command allows the user to specify partial cell names on NT.  These must
       * be expanded to the full cell name for mount points so that the mount points will
       * work on UNIX clients.
       */
  
      /* Extract the possibly partial cell name */
!     mpp = cm_ParseIoctlStringAlloc(ioctlp, NULL);
!     cell = cm_ClientCharNext(mpp);
!     if (cp = cm_ClientStrChr(cell, ':')) {
! 
          /* Extract the volume name */
          *cp = 0;
!         cm_ClientStrCpy(volume, lengthof(volume), cm_ClientCharNext(cp));
! 
!         fscell = cm_ClientStringToFsStringAlloc(cell, -1, NULL);
!         fsvolume = cm_ClientStringToFsStringAlloc(volume, -1, NULL);
! 
          /* Get the full name for this cell */
!         code = cm_SearchCellFile(fscell, fullCell, 0, 0);
  #ifdef AFS_AFSDB_ENV
          if (code && cm_dnsEnabled)
!             code = cm_SearchCellByDNS(fscell, fullCell, &ttl, 0, 0);
  #endif
          if (code) {
!             code = CM_ERROR_NOSUCHCELL;
!             goto done;
          }
! 
!         StringCbPrintfA(mpInfo, sizeof(mpInfo), "%c%s:%s", (char) *mpp,
!                         fullCell, fsvolume);
! 
      } else {
!         /* No cell name specified, so cell points at the volume instead. */
!         fsvolume = cm_ClientStringToFsStringAlloc(cell, -1, NULL);
!         cm_ClientStringToFsString(mpp, -1, mpInfo, lengthof(mpInfo));
      }
  
  #ifdef AFS_FREELANCE_CLIENT
      if (cm_freelanceEnabled && dscp == cm_data.rootSCachep) {
!         /* we are adding the mount point to the root dir, so call
           * the freelance code to do the add. */
+         fschar_t * fsleaf = cm_ClientStringToFsStringAlloc(leaf, -1, NULL);
          osi_Log0(afsd_logp,"IoctlCreateMountPoint within Freelance root dir");
!         code = cm_FreelanceAddMount(fsleaf, fullCell, fsvolume, *mpInfo == '%', NULL);
!         free(fsleaf);
!     } else
  #endif
      {
          /* create the symlink with mode 644.  The lack of X bits tells
***************
*** 2004,2010 ****
          tattr.unixModeBits = 0644;
          tattr.clientModTime = time(NULL);
  
!         code = cm_SymLink(dscp, leaf, mpInfo, 0, &tattr, userp, &req);
      }
      
      if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
--- 1791,1797 ----
          tattr.unixModeBits = 0644;
          tattr.clientModTime = time(NULL);
  
!         code = cm_SymLink(dscp, leaf, mpInfo, 0, &tattr, userp, reqp);
      }
      
      if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
***************
*** 2012,2047 ****
                           FILE_NOTIFY_CHANGE_DIR_NAME,
                           dscp, leaf, NULL, TRUE);
  
!     cm_ReleaseSCache(dscp);
      return code;
  }
  
! long cm_IoctlSymlink(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     char leaf[LEAF_SIZE];
!     long code;
!     cm_scache_t *dscp;
      cm_attr_t tattr;
      char *cp;
!     cm_req_t req;
! 
!     cm_InitReq(&req);
! 
!     code = cm_ParseIoctlParent(ioctlp, userp, &req, &dscp, leaf);
!     if (code) return code;
  
!     /* Translate chars for the link name */
!     TranslateExtendedChars(leaf);
! 
!     /* Translate chars for the linked to name */
!     TranslateExtendedChars(ioctlp->inDatap);
  
!     cp = ioctlp->inDatap;		/* contents of link */
  
  #ifdef AFS_FREELANCE_CLIENT
      if (cm_freelanceEnabled && dscp == cm_data.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))) 
          {
--- 1799,1843 ----
                           FILE_NOTIFY_CHANGE_DIR_NAME,
                           dscp, leaf, NULL, TRUE);
  
!   done:
!     if (mpp)
!         free(mpp);
!     if (fscell)
!         free(fscell);
!     if (fsvolume)
!         free(fsvolume);
! 
      return code;
  }
  
! /* 
!  * VIOC_SYMLINK internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * dscp is held but not locked.
!  */
! afs_int32 
! cm_IoctlSymlink(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *dscp, cm_req_t *reqp, clientchar_t *leaf)
  {
!     afs_int32 code;
      cm_attr_t tattr;
      char *cp;
!     char *symlp;
!     int free_syml = FALSE;
  
!     if (!(ioctlp->flags & CM_IOCTLFLAG_USEUTF8)) {
!         /* Translate chars for the linked to name */
!         TranslateExtendedChars(ioctlp->inDatap);
!     }
  
!     cp = symlp = ioctlp->inDatap;		/* contents of link */
  
  #ifdef AFS_FREELANCE_CLIENT
      if (cm_freelanceEnabled && dscp == cm_data.rootSCachep) {
          /* we are adding the symlink to the root dir., so call
           * the freelance code to do the add. */
+         fschar_t *fsleaf;
+ 
          if (cp[0] == cp[1] && cp[1] == '\\' && 
              !_strnicmp(cm_NetbiosName,cp+2,strlen(cm_NetbiosName))) 
          {
***************
*** 2052,2059 ****
                  p += 4;
              cp = p;
          }
          osi_Log0(afsd_logp,"IoctlCreateSymlink within Freelance root dir");
!         code = cm_FreelanceAddSymlink(leaf, cp, NULL);
      } else
  #endif
      {
--- 1848,1858 ----
                  p += 4;
              cp = p;
          }
+ 
          osi_Log0(afsd_logp,"IoctlCreateSymlink within Freelance root dir");
!         fsleaf = cm_ClientStringToFsStringAlloc(leaf, -1, NULL);
!         code = cm_FreelanceAddSymlink(fsleaf, cp, NULL);
!         free(fsleaf);
      } else
  #endif
      {
***************
*** 2061,2067 ****
          tattr.mask = CM_ATTRMASK_UNIXMODEBITS;
          tattr.unixModeBits = 0755;
  
!         code = cm_SymLink(dscp, leaf, cp, 0, &tattr, userp, &req);
      }
  
      if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
--- 1860,1866 ----
          tattr.mask = CM_ATTRMASK_UNIXMODEBITS;
          tattr.unixModeBits = 0755;
  
!         code = cm_SymLink(dscp, leaf, cp, 0, &tattr, userp, reqp);
      }
  
      if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
***************
*** 2069,2101 ****
                            FILE_NOTIFY_CHANGE_FILE_NAME
                            | FILE_NOTIFY_CHANGE_DIR_NAME,
                            dscp, leaf, NULL, TRUE);
- 
-     cm_ReleaseSCache(dscp);
- 
      return code;
  }
  
  
! long cm_IoctlListlink(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long code;
!     cm_scache_t *dscp;
      cm_scache_t *scp;
      char *cp;
      cm_space_t *spacep;
      cm_scache_t *newRootScp;
!     cm_req_t req;
! 
!     cm_InitReq(&req);
! 
!     code = cm_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
!     if (code) return code;
  
      cp = ioctlp->inDatap;
  
!     code = cm_Lookup(dscp, cp, CM_FLAG_NOMOUNTCHASE, userp, &req, &scp);
!     cm_ReleaseSCache(dscp);
!     if (code) return code;
  
      /* Check that it's a real symlink */
      if (scp->fileType != CM_SCACHETYPE_SYMLINK &&
--- 1868,1904 ----
                            FILE_NOTIFY_CHANGE_FILE_NAME
                            | FILE_NOTIFY_CHANGE_DIR_NAME,
                            dscp, leaf, NULL, TRUE);
      return code;
  }
  
  
! /* 
!  * VIOC_LISTSYMLINK internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * dscp is held but not locked.
!  */
! afs_int32 
! cm_IoctlListlink(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *dscp, cm_req_t *reqp)
  {
!     afs_int32 code;
      cm_scache_t *scp;
      char *cp;
      cm_space_t *spacep;
      cm_scache_t *newRootScp;
!     clientchar_t *clientp;
  
+     if (!(ioctlp->flags & CM_IOCTLFLAG_USEUTF8)) {
+         /* Translate chars for the link name */
+         TranslateExtendedChars(ioctlp->inDatap);
+     }
      cp = ioctlp->inDatap;
  
!     clientp = cm_Utf8ToClientStringAlloc(cp, -1, NULL);
!     code = cm_Lookup(dscp, clientp, CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
!     free(clientp);
!     if (code) 
!         return code;
  
      /* Check that it's a real symlink */
      if (scp->fileType != CM_SCACHETYPE_SYMLINK &&
***************
*** 2105,2111 ****
          return CM_ERROR_INVAL;
      }
  
!     code = cm_AssembleLink(scp, "", &newRootScp, &spacep, userp, &req);
      cm_ReleaseSCache(scp);
      if (code == 0) {
          cp = ioctlp->outDatap;
--- 1908,1914 ----
          return CM_ERROR_INVAL;
      }
  
!     code = cm_AssembleLink(scp, "", &newRootScp, &spacep, userp, reqp);
      cm_ReleaseSCache(scp);
      if (code == 0) {
          cp = ioctlp->outDatap;
***************
*** 2136,2160 ****
      return code;
  }
  
! long cm_IoctlIslink(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {/*CHECK FOR VALID SYMLINK*/
!     long code;
!     cm_scache_t *dscp;
      cm_scache_t *scp;
      char *cp;
!     cm_req_t req;
! 
!     cm_InitReq(&req);
! 
!     code = cm_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
!     if (code) return code;
  
      cp = ioctlp->inDatap;
      osi_LogEvent("cm_IoctlListlink",NULL," name[%s]",cp);
  
!     code = cm_Lookup(dscp, cp, CM_FLAG_NOMOUNTCHASE, userp, &req, &scp);
!     cm_ReleaseSCache(dscp);
!     if (code) return code;
  
      /* Check that it's a real symlink */
      if (scp->fileType != CM_SCACHETYPE_SYMLINK &&
--- 1939,1970 ----
      return code;
  }
  
! /* 
!  * VIOC_ISSYMLINK internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * dscp is held but not locked.
!  */
! afs_int32 
! cm_IoctlIslink(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *dscp, cm_req_t *reqp)
  {/*CHECK FOR VALID SYMLINK*/
!     afs_int32 code;
      cm_scache_t *scp;
      char *cp;
!     clientchar_t *clientp;
  
+     if (!(ioctlp->flags & CM_IOCTLFLAG_USEUTF8)) {
+         /* Translate chars for the link name */
+         TranslateExtendedChars(ioctlp->inDatap);
+     }
      cp = ioctlp->inDatap;
      osi_LogEvent("cm_IoctlListlink",NULL," name[%s]",cp);
  
!     clientp = cm_Utf8ToClientStringAlloc(cp, -1, NULL);
!     code = cm_Lookup(dscp, clientp, CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
!     free(clientp);
!     if (code)
!         return code;
  
      /* Check that it's a real symlink */
      if (scp->fileType != CM_SCACHETYPE_SYMLINK &&
***************
*** 2165,2193 ****
      return code;
  }
  
! long cm_IoctlDeletelink(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long code;
!     cm_scache_t *dscp;
      cm_scache_t *scp;
      char *cp;
!     cm_req_t req;
! 
!     cm_InitReq(&req);
! 
!     code = cm_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
!     if (code) return code;
! 
      cp = ioctlp->inDatap;
  
!     code = cm_Lookup(dscp, cp, CM_FLAG_NOMOUNTCHASE, userp, &req, &scp);
!         
      /* if something went wrong, bail out now */
      if (code)
          goto done3;
          
      lock_ObtainWrite(&scp->rw);
!     code = cm_SyncOp(scp, NULL, userp, &req, 0,
                        CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
      if (code)
          goto done2;
--- 1975,2011 ----
      return code;
  }
  
! /* 
!  * VIOC_DELSYMLINK internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * dscp is held but not locked.
!  */
! afs_int32
! cm_IoctlDeletelink(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *dscp, cm_req_t *reqp)
  {
!     afs_int32 code;
      cm_scache_t *scp;
      char *cp;
!     char * originalName = NULL;
!     cm_dirOp_t dirop;
!     clientchar_t *clientp;
! 
!     if (!(ioctlp->flags & CM_IOCTLFLAG_USEUTF8)) {
!         /* Translate chars for the link name */
!         TranslateExtendedChars(ioctlp->inDatap);
!     }
      cp = ioctlp->inDatap;
  
!     clientp = cm_Utf8ToClientStringAlloc(cp, -1, NULL);
!     code = cm_Lookup(dscp, clientp, CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
! 
      /* if something went wrong, bail out now */
      if (code)
          goto done3;
          
      lock_ObtainWrite(&scp->rw);
!     code = cm_SyncOp(scp, NULL, userp, reqp, 0,
                        CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
      if (code)
          goto done2;
***************
*** 2203,2225 ****
      /* time to make the RPC, so drop the lock */
      lock_ReleaseWrite(&scp->rw);
          
  #ifdef AFS_FREELANCE_CLIENT
      if (cm_freelanceEnabled && dscp == cm_data.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);
      } else 
  #endif
      {
          /* easier to do it this way */
!         code = cm_Unlink(dscp, cp, userp, &req);
      }
      if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
          smb_NotifyChange(FILE_ACTION_REMOVED,
                            FILE_NOTIFY_CHANGE_FILE_NAME
                            | FILE_NOTIFY_CHANGE_DIR_NAME,
!                           dscp, cp, NULL, TRUE);
  
      lock_ObtainWrite(&scp->rw);
    done1:
--- 2021,2070 ----
      /* time to make the RPC, so drop the lock */
      lock_ReleaseWrite(&scp->rw);
          
+ #ifdef USE_BPLUS
+     code = cm_BeginDirOp(dscp, userp, reqp, CM_DIRLOCK_READ, &dirop);
+     if (code == 0) {
+         code = cm_BPlusDirLookupOriginalName(&dirop, clientp, &originalName);
+         /* cm_Dir*() functions can't be used to lookup the original
+            name since those functions only know of the original
+            name. */
+         cm_EndDirOp(&dirop);
+     }
+ #endif
+ 
+     /* If this name doesn't have a non-normalized name associated with
+        it, we assume that what we had is what is actually present on
+        the file server. */
+ 
+     if (originalName == NULL)
+         originalName = cp;
+ 
+     /* cp is a normalized name.  originalName is the actual name we
+        saw on the fileserver. */
+ 
+ 
  #ifdef AFS_FREELANCE_CLIENT
      if (cm_freelanceEnabled && dscp == cm_data.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(originalName);
      } else 
  #endif
      {
          /* easier to do it this way */
!         code = cm_Unlink(dscp, originalName, clientp, userp, reqp);
      }
      if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
          smb_NotifyChange(FILE_ACTION_REMOVED,
                            FILE_NOTIFY_CHANGE_FILE_NAME
                            | FILE_NOTIFY_CHANGE_DIR_NAME,
!                           dscp, clientp, NULL, TRUE);
! 
!     if (originalName != NULL && originalName != cp) {
!         free(originalName);
!         originalName = NULL;
!     }
  
      lock_ObtainWrite(&scp->rw);
    done1:
***************
*** 2231,2242 ****
      cm_ReleaseSCache(scp);
  
    done3:
!     cm_ReleaseSCache(dscp);
      return code;
  }
  
  #ifdef QUERY_AFSID
! long cm_UsernameToId(char *uname, cm_ucell_t * ucellp, afs_uint32* uid)
  {
      afs_int32 code;
      namelist lnames;
--- 2076,2093 ----
      cm_ReleaseSCache(scp);
  
    done3:
!     free(clientp);
! 
      return code;
  }
  
  #ifdef QUERY_AFSID
! /* Utility function.  Not currently used.  
!  * This function performs a PTS lookup which has traditionally
!  * not been performed by the cache manager.
!  */
! afs_int32 
! cm_UsernameToId(char *uname, cm_ucell_t * ucellp, afs_uint32* uid)
  {
      afs_int32 code;
      namelist lnames;
***************
*** 2292,2298 ****
  	if (*p == '@')
  	    r = p;
      }
!     if (r && !stricmp(r+1,ucellp->cellp->name))
  	*r = '\0';
  
      code = ubik_PR_NameToID(pruclient, 0, &lnames, &lids);
--- 2143,2149 ----
  	if (*p == '@')
  	    r = p;
      }
!     if (r && !cm_stricmp_utf8(r+1,ucellp->cellp->name))
  	*r = '\0';
  
      code = ubik_PR_NameToID(pruclient, 0, &lnames, &lids);
***************
*** 2312,2318 ****
  }
  #endif /* QUERY_AFSID */
  
! long cm_IoctlSetToken(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      char *saveDataPtr;
      char *tp;
--- 2163,2175 ----
  }
  #endif /* QUERY_AFSID */
  
! #if 0
! /* This has been copied to smb_IoctlSetToken in its entirety.
!  * An equivalent version will need to be produced for the 
!  * redirector and some extensive refactoring might be required.
!  */
! afs_int32
! cm_IoctlSetToken(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      char *saveDataPtr;
      char *tp;
***************
*** 2386,2397 ****
                       osi_LogSaveString(smb_logp, uname));
          }
  
! #ifndef DJGPP   /* for win95, session key is back in pioctl */
! 		/* uuid */
          memcpy(&uuid, tp, sizeof(uuid));
          if (!cm_FindTokenEvent(uuid, sessionKey))
              return CM_ERROR_INVAL;
- #endif /* !DJGPP */
      } else {
          cellp = cm_data.rootCellp;
          osi_Log0(smb_logp,"cm_IoctlSetToken - no name specified");
--- 2243,2253 ----
                       osi_LogSaveString(smb_logp, uname));
          }
  
!         /* for win95, session key is back in pioctl */
!         /* uuid */
          memcpy(&uuid, tp, sizeof(uuid));
          if (!cm_FindTokenEvent(uuid, sessionKey))
              return CM_ERROR_INVAL;
      } else {
          cellp = cm_data.rootCellp;
          osi_Log0(smb_logp,"cm_IoctlSetToken - no name specified");
***************
*** 2412,2418 ****
          free(ucellp->ticketp);	/* Discard old token if any */
      ucellp->ticketp = malloc(ticketLen);
      memcpy(ucellp->ticketp, ticket, ticketLen);
- #ifndef DJGPP
      /*
       * Get the session key from the RPC, rather than from the pioctl.
       */
--- 2268,2273 ----
***************
*** 2420,2429 ****
      memcpy(&ucellp->sessionKey, ct.HandShakeKey, sizeof(ct.HandShakeKey));
      */
      memcpy(ucellp->sessionKey.data, sessionKey, sizeof(sessionKey));
- #else
-     /* for win95, we are getting the session key from the pioctl */
-     memcpy(&ucellp->sessionKey, ct.HandShakeKey, sizeof(ct.HandShakeKey));
- #endif /* !DJGPP */
      ucellp->kvno = ct.AuthHandle;
      ucellp->expirationTime = ct.EndTimestamp;
      ucellp->gen++;
--- 2275,2280 ----
***************
*** 2440,2446 ****
      lock_ReleaseMutex(&userp->mx);
  
      if (flags & PIOCTL_LOGON) {
!         ioctlp->flags |= SMB_IOCTLFLAG_LOGON;
      }
  
      cm_ResetACLCache(userp);
--- 2291,2297 ----
      lock_ReleaseMutex(&userp->mx);
  
      if (flags & PIOCTL_LOGON) {
!         ioctlp->flags |= CM_IOCTLFLAG_LOGON;
      }
  
      cm_ResetACLCache(userp);
***************
*** 2450,2457 ****
  
      return 0;
  }
  
! long cm_IoctlGetTokenIter(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      char *tp, *cp;
      int iterator;
--- 2301,2315 ----
  
      return 0;
  }
+ #endif
  
! /* 
!  * VIOC_GETTOK internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlGetTokenIter(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      char *tp, *cp;
      int iterator;
***************
*** 2459,2466 ****
      cm_ucell_t *ucellp;
      struct ClearToken ct;
  
-     cm_SkipIoctlPath(ioctlp);
- 
      tp = ioctlp->inDatap;
      cp = ioctlp->outDatap;
  
--- 2317,2322 ----
***************
*** 2501,2517 ****
  
      /* clear token */
      ct.AuthHandle = ucellp->kvno;
! #ifndef DJGPP
      /*
!      * Don't give out a real session key here
       */
-     /*
-     memcpy(ct.HandShakeKey, &ucellp->sessionKey, sizeof(ct.HandShakeKey));
-     */
      memset(ct.HandShakeKey, 0, sizeof(ct.HandShakeKey));
- #else
-     memcpy(ct.HandShakeKey, &ucellp->sessionKey, sizeof(ct.HandShakeKey));
- #endif /* !DJGPP */
      ct.ViceId = 37;			/* XXX */
      ct.BeginTimestamp = 0;		/* XXX */
      ct.EndTimestamp = ucellp->expirationTime;
--- 2357,2370 ----
  
      /* clear token */
      ct.AuthHandle = ucellp->kvno;
! 
      /*
!      * This field is supposed to hold the session key
!      * but we don't want to make it easier for someone 
!      * to attack the cache.  The user gave us the session
!      * key in the first place.
       */
      memset(ct.HandShakeKey, 0, sizeof(ct.HandShakeKey));
      ct.ViceId = 37;			/* XXX */
      ct.BeginTimestamp = 0;		/* XXX */
      ct.EndTimestamp = ucellp->expirationTime;
***************
*** 2538,2544 ****
      return 0;
  }
  
! long cm_IoctlGetToken(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      char *cp;
      int temp;
--- 2391,2403 ----
      return 0;
  }
  
! /* 
!  * VIOC_NEWGETTOK internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlGetToken(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      char *cp;
      int temp;
***************
*** 2546,2556 ****
      cm_ucell_t *ucellp;
      struct ClearToken ct;
      char *tp;
- #ifndef DJGPP
      afs_uuid_t uuid;
- #endif /* !DJGPP */
- 
-     cm_SkipIoctlPath(ioctlp);
  
      tp = ioctlp->inDatap;
  
--- 2405,2411 ----
***************
*** 2562,2571 ****
          return CM_ERROR_NOSUCHCELL;
      tp += strlen(tp) + 1;
  
- #ifndef DJGPP
      /* uuid */
      memcpy(&uuid, tp, sizeof(uuid));
- #endif /* !DJGPP */
  
      lock_ObtainMutex(&userp->mx);
  
--- 2417,2424 ----
***************
*** 2590,2606 ****
  
      /* clear token */
      ct.AuthHandle = ucellp->kvno;
! #ifndef DJGPP
!     /*
!      * Don't give out a real session key here
!      */
!     /*
!     memcpy(ct.HandShakeKey, &ucellp->sessionKey, sizeof(ct.HandShakeKey));
!     */
      memset(ct.HandShakeKey, 0, sizeof(ct.HandShakeKey));
- #else
-     memcpy(ct.HandShakeKey, &ucellp->sessionKey, sizeof(ct.HandShakeKey));
- #endif /* !DJGPP */
      ct.ViceId = 37;			/* XXX */
      ct.BeginTimestamp = 0;		/* XXX */
      ct.EndTimestamp = ucellp->expirationTime;
--- 2443,2451 ----
  
      /* clear token */
      ct.AuthHandle = ucellp->kvno;
! 
!     /* do not give out the session key */
      memset(ct.HandShakeKey, 0, sizeof(ct.HandShakeKey));
      ct.ViceId = 37;			/* XXX */
      ct.BeginTimestamp = 0;		/* XXX */
      ct.EndTimestamp = ucellp->expirationTime;
***************
*** 2624,2644 ****
  
      lock_ReleaseMutex(&userp->mx);
  
- #ifndef DJGPP
      cm_RegisterNewTokenEvent(uuid, ucellp->sessionKey.data);
- #endif /* !DJGPP */
  
      return 0;
  }
  
! long cm_IoctlDelToken(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      char *cp;
      cm_cell_t *cellp;
      cm_ucell_t *ucellp;
  
-     cm_SkipIoctlPath(ioctlp);
- 
      cp = ioctlp->outDatap;
  
      /* cell name is right here */
--- 2469,2491 ----
  
      lock_ReleaseMutex(&userp->mx);
  
      cm_RegisterNewTokenEvent(uuid, ucellp->sessionKey.data);
  
      return 0;
  }
  
! /* 
!  * VIOCDELTOK internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlDelToken(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      char *cp;
      cm_cell_t *cellp;
      cm_ucell_t *ucellp;
  
      cp = ioctlp->outDatap;
  
      /* cell name is right here */
***************
*** 2675,2681 ****
      return 0;
  }
  
! long cm_IoctlDelAllToken(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      cm_ucell_t *ucellp;
  
--- 2522,2534 ----
      return 0;
  }
  
! /* 
!  * VIOCDELALLTOK internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlDelAllToken(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      cm_ucell_t *ucellp;
  
***************
*** 2704,2710 ****
      return 0;
  }
  
! long cm_IoctlMakeSubmount(smb_ioctl_t *ioctlp, cm_user_t *userp)
  {
      char afspath[MAX_PATH];
      char *submountreqp;
--- 2557,2569 ----
      return 0;
  }
  
! /* 
!  * VIOC_MAKESUBMOUNT internals.  (This function should be deprecated)
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlMakeSubmount(cm_ioctl_t *ioctlp, cm_user_t *userp)
  {
      char afspath[MAX_PATH];
      char *submountreqp;
***************
*** 2715,2722 ****
      DWORD dwIndex;
      DWORD dwSubmounts;
  
-     cm_SkipIoctlPath(ioctlp);
- 
      /* Serialize this one, to prevent simultaneous mods
       * to afsdsbmt.ini
       */
--- 2574,2579 ----
***************
*** 2725,2731 ****
      /* Parse the input parameters--first the required afs path,
       * then the requested submount name (which may be "").
       */
-     cm_NormalizeAfsPath (afspath, sizeof(afspath), ioctlp->inDatap);
      submountreqp = ioctlp->inDatap + (strlen(ioctlp->inDatap)+1);
  
      /* If the caller supplied a suggested submount name, see if
--- 2582,2587 ----
***************
*** 2744,2750 ****
                      NULL );
  
      if (submountreqp && *submountreqp) {
-         char submountPathNormalized[MAX_PATH];
          char submountPath[MAX_PATH];
  
          dwSize = sizeof(submountPath);
--- 2600,2605 ----
***************
*** 2776,2783 ****
           * supplied path matches the submount's path, we can still
           * use the suggested submount name.
           */
!         cm_NormalizeAfsPath (submountPathNormalized, sizeof(submountPathNormalized), submountPath);
!         if (!strcmp (submountPathNormalized, afspath)) {
              StringCbCopyA(ioctlp->outDatap, SMB_IOCTL_MAXDATA - (ioctlp->outDatap - ioctlp->outAllocp), submountreqp);
              ioctlp->outDatap += strlen(ioctlp->outDatap) +1;
              RegCloseKey( hkSubmounts );
--- 2631,2637 ----
           * supplied path matches the submount's path, we can still
           * use the suggested submount name.
           */
!         if (!strcmp (submountPath, afspath)) {
              StringCbCopyA(ioctlp->outDatap, SMB_IOCTL_MAXDATA - (ioctlp->outDatap - ioctlp->outAllocp), submountreqp);
              ioctlp->outDatap += strlen(ioctlp->outDatap) +1;
              RegCloseKey( hkSubmounts );
***************
*** 2810,2816 ****
      nextAutoSubmount = 1;
  
      for ( dwIndex = 0; dwIndex < dwSubmounts; dwIndex ++ ) {
-         char submountPathNormalized[MAX_PATH];
          char submountPath[MAX_PATH] = "";
          DWORD submountPathLen = sizeof(submountPath);
          char submountName[MAX_PATH];
--- 2664,2669 ----
***************
*** 2845,2852 ****
           * that our caller specified. If so, we can return
           * this submount.
           */
!         cm_NormalizeAfsPath (submountPathNormalized, sizeof(submountPathNormalized), submountPath);
!         if (!strcmp (submountPathNormalized, afspath)) {
              StringCbCopyA(ioctlp->outDatap, SMB_IOCTL_MAXDATA - (ioctlp->outDatap - ioctlp->outAllocp), submountName);
              ioctlp->outDatap += strlen(ioctlp->outDatap) +1;
              RegCloseKey(hkSubmounts);
--- 2698,2704 ----
           * that our caller specified. If so, we can return
           * this submount.
           */
!         if (!strcmp (submountPath, afspath)) {
              StringCbCopyA(ioctlp->outDatap, SMB_IOCTL_MAXDATA - (ioctlp->outDatap - ioctlp->outAllocp), submountName);
              ioctlp->outDatap += strlen(ioctlp->outDatap) +1;
              RegCloseKey(hkSubmounts);
***************
*** 2879,2885 ****
      return 0;
  }
  
! long cm_IoctlGetRxkcrypt(smb_ioctl_t *ioctlp, cm_user_t *userp)
  {
      memcpy(ioctlp->outDatap, &cryptall, sizeof(cryptall));
      ioctlp->outDatap += sizeof(cryptall);
--- 2731,2743 ----
      return 0;
  }
  
! /* 
!  * VIOC_GETRXKCRYPT internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlGetRxkcrypt(cm_ioctl_t *ioctlp, cm_user_t *userp)
  {
      memcpy(ioctlp->outDatap, &cryptall, sizeof(cryptall));
      ioctlp->outDatap += sizeof(cryptall);
***************
*** 2887,2898 ****
      return 0;
  }
  
! long cm_IoctlSetRxkcrypt(smb_ioctl_t *ioctlp, cm_user_t *userp)
  {
      afs_int32 c = cryptall;
  
-     cm_SkipIoctlPath(ioctlp);
- 
      memcpy(&cryptall, ioctlp->inDatap, sizeof(cryptall));
  
      if (c != cryptall) {
--- 2745,2760 ----
      return 0;
  }
  
! /* 
!  * VIOC_SETRXKCRYPT internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlSetRxkcrypt(cm_ioctl_t *ioctlp, cm_user_t *userp)
  {
      afs_int32 c = cryptall;
  
      memcpy(&cryptall, ioctlp->inDatap, sizeof(cryptall));
  
      if (c != cryptall) {
***************
*** 2904,2916 ****
      return 0;
  }
  
! long cm_IoctlRxStatProcess(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      afs_int32 flags;
      int code = 0;
  
-     cm_SkipIoctlPath(ioctlp);
- 
      memcpy((char *)&flags, ioctlp->inDatap, sizeof(afs_int32));
      if (!(flags & AFSCALL_RXSTATS_MASK) || (flags & ~AFSCALL_RXSTATS_MASK)) {
          return -1;
--- 2766,2782 ----
      return 0;
  }
  
! /* 
!  * VIOC_RXSTAT_PROC internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlRxStatProcess(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      afs_int32 flags;
      int code = 0;
  
      memcpy((char *)&flags, ioctlp->inDatap, sizeof(afs_int32));
      if (!(flags & AFSCALL_RXSTATS_MASK) || (flags & ~AFSCALL_RXSTATS_MASK)) {
          return -1;
***************
*** 2927,2939 ****
      return 0;
  }
  
! long cm_IoctlRxStatPeer(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
      afs_int32 flags;
      int code = 0;
  
-     cm_SkipIoctlPath(ioctlp);
- 
      memcpy((char *)&flags, ioctlp->inDatap, sizeof(afs_int32));
      if (!(flags & AFSCALL_RXSTATS_MASK) || (flags & ~AFSCALL_RXSTATS_MASK)) {
  	return -1;
--- 2793,2809 ----
      return 0;
  }
  
! /* 
!  * VIOC_RXSTAT_PEER internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlRxStatPeer(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
      afs_int32 flags;
      int code = 0;
  
      memcpy((char *)&flags, ioctlp->inDatap, sizeof(afs_int32));
      if (!(flags & AFSCALL_RXSTATS_MASK) || (flags & ~AFSCALL_RXSTATS_MASK)) {
  	return -1;
***************
*** 2950,2983 ****
      return 0;
  }
  
! #ifdef DJGPP
! extern int afsd_shutdown(int);
! extern int afs_shutdown;
  
! long cm_IoctlShutdown(smb_ioctl_t *ioctlp, cm_user_t *userp) {
!   afs_shutdown = 1;   /* flag to shut down */
!   return 0;
! }
! #endif /* DJGPP */
  
! long cm_IoctlGetSMBName(smb_ioctl_t *ioctlp, cm_user_t *userp)
! {
!   smb_user_t *uidp = ioctlp->uidp;
  
!   if (uidp && uidp->unp) {
!     memcpy(ioctlp->outDatap, uidp->unp->name, strlen(uidp->unp->name));
!     ioctlp->outDatap += strlen(uidp->unp->name);
!   }
  
!   return 0;
  }
  
! long cm_IoctlUUIDControl(struct smb_ioctl * ioctlp, struct cm_user *userp)
  {
!     long cmd;
      afsUUID uuid;
  
!     memcpy(&cmd, ioctlp->inDatap, sizeof(long));
  
      if (cmd) {             /* generate a new UUID */
          UuidCreate((UUID *) &uuid);
--- 2820,2871 ----
      return 0;
  }
  
! /* 
!  * VIOC_UNICODECTL internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlUnicodeControl(struct cm_ioctl *ioctlp, struct cm_user * userp)
! {
!     afs_int32 result = 0;
! #ifdef SMB_UNICODE
!     afs_uint32 cmd;
  
!     memcpy(&cmd, ioctlp->inDatap, sizeof(afs_uint32));
  
!     if (cmd & 2) {
!         /* Setting the Unicode flag */
!         LONG newflag;
! 
!         newflag = ((cmd & 1) == 1);
! 
!         InterlockedExchange(&smb_UseUnicode, newflag);
!     }
  
!     result = smb_UseUnicode;
! #else
!     result = 2;
! #endif
  
!     memcpy(ioctlp->outDatap, &result, sizeof(result));
!     ioctlp->outDatap += sizeof(result);
! 
!     return 0;
  }
  
! /* 
!  * VIOC_UUIDCTL internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlUUIDControl(struct cm_ioctl * ioctlp, struct cm_user *userp)
  {
!     afs_uint32 cmd;
      afsUUID uuid;
  
!     memcpy(&cmd, ioctlp->inDatap, sizeof(afs_uint32));
  
      if (cmd) {             /* generate a new UUID */
          UuidCreate((UUID *) &uuid);
***************
*** 2991,3007 ****
      return 0;
  }
  
  /* 
   * functions to dump contents of various structures. 
   * In debug build (linked with crt debug library) will dump allocated but not freed memory
   */
  extern int cm_DumpSCache(FILE *outputFile, char *cookie, int lock);
  extern int cm_DumpBufHashTable(FILE *outputFile, char *cookie, int lock);
- extern int smb_DumpVCP(FILE *outputFile, char *cookie, int lock);
  
! long cm_IoctlMemoryDump(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long inValue = 0;
      HANDLE hLogFile;
      char logfileName[MAX_PATH+1];
      char *cookie;
--- 2879,2903 ----
      return 0;
  }
  
+ 
+ 
  /* 
   * functions to dump contents of various structures. 
   * In debug build (linked with crt debug library) will dump allocated but not freed memory
   */
  extern int cm_DumpSCache(FILE *outputFile, char *cookie, int lock);
  extern int cm_DumpBufHashTable(FILE *outputFile, char *cookie, int lock);
  
! /* 
!  * VIOC_TRACEMEMDUMP internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * dscp is held but not locked.
!  */
! afs_int32
! cm_IoctlMemoryDump(struct cm_ioctl *ioctlp, struct cm_user *userp)
  {
!     afs_int32 inValue = 0;
      HANDLE hLogFile;
      char logfileName[MAX_PATH+1];
      char *cookie;
***************
*** 3011,3018 ****
      static _CrtMemState memstate;
  #endif
    
!     cm_SkipIoctlPath(ioctlp);
!     memcpy(&inValue, ioctlp->inDatap, sizeof(long));
    
      dwSize = GetEnvironmentVariable("TEMP", logfileName, sizeof(logfileName));
      if ( dwSize == 0 || dwSize > sizeof(logfileName) )
--- 2907,2913 ----
      static _CrtMemState memstate;
  #endif
    
!     memcpy(&inValue, ioctlp->inDatap, sizeof(afs_int32));
    
      dwSize = GetEnvironmentVariable("TEMP", logfileName, sizeof(logfileName));
      if ( dwSize == 0 || dwSize > sizeof(logfileName) )
***************
*** 3027,3034 ****
      {
        /* error */
        inValue = -1;
!       memcpy(ioctlp->outDatap, &inValue, sizeof(long));
!       ioctlp->outDatap += sizeof(long);
        
        return 0;               
      }
--- 2922,2929 ----
      {
        /* error */
        inValue = -1;
!       memcpy(ioctlp->outDatap, &inValue, sizeof(afs_int32));
!       ioctlp->outDatap += sizeof(afs_int32);
        
        return 0;               
      }
***************
*** 3069,3079 ****
      return 0;
  }
  
! 
! static long 
  cm_CheckServersStatus(cm_serverRef_t *serversp)
  {
!     long code = 0;
      cm_serverRef_t *tsrp;
      cm_server_t *tsp;
      int someBusy = 0, someOffline = 0, allOffline = 1, allBusy = 1, allDown = 1;
--- 2964,2974 ----
      return 0;
  }
  
! /* Utility functon.  Not currently used. */
! static afs_int32
  cm_CheckServersStatus(cm_serverRef_t *serversp)
  {
!     afs_int32 code = 0;
      cm_serverRef_t *tsrp;
      cm_server_t *tsp;
      int someBusy = 0, someOffline = 0, allOffline = 1, allBusy = 1, allDown = 1;
***************
*** 3121,3161 ****
      return code;
  }
  
! 
! long cm_IoctlPathAvailability(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long code;
!     cm_scache_t *scp;
      cm_cell_t *cellp;
      cm_volume_t *tvp;
      cm_vol_state_t *statep;
      afs_uint32 volume;
-     cm_req_t req;
-     cm_ioctlQueryOptions_t *optionsp;
-     afs_uint32 flags = 0;
- 
-     cm_InitReq(&req);
- 
-     optionsp = cm_IoctlGetQueryOptions(ioctlp, userp);
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
-         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
- 
-     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
-         cm_fid_t fid;
-         cm_SkipIoctlPath(ioctlp);
-         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
-                   optionsp->fid.vnode, optionsp->fid.unique);
-         code = cm_GetSCache(&fid, &scp, userp, &req);
-     } else {
-         code = cm_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
-     }
-     if (code) 
-         return code;
          
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
  	code = 0;
- 	cm_ReleaseSCache(scp);
      } else
  #endif
      {
--- 3016,3039 ----
      return code;
  }
  
! /* 
!  * VIOC_PATH_AVAILABILITY internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  * scp is held but not locked.
!  */
! afs_int32
! cm_IoctlPathAvailability(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp, cm_req_t *reqp)
  {
!     afs_int32 code;
      cm_cell_t *cellp;
      cm_volume_t *tvp;
      cm_vol_state_t *statep;
      afs_uint32 volume;
          
  #ifdef AFS_FREELANCE_CLIENT
      if ( scp->fid.cell == AFS_FAKE_ROOT_CELL_ID && scp->fid.volume == AFS_FAKE_ROOT_VOL_ID ) {
  	code = 0;
      } else
  #endif
      {
***************
*** 3163,3174 ****
  
          cellp = cm_FindCellByID(scp->fid.cell, 0);
  
-         cm_ReleaseSCache(scp);
- 
          if (!cellp)
              return CM_ERROR_NOSUCHCELL;
  
!         code = cm_FindVolumeByID(cellp, volume, userp, &req, CM_GETVOL_FLAG_CREATE, &tvp);
          if (code) 
              return code;
  	
--- 3041,3050 ----
  
          cellp = cm_FindCellByID(scp->fid.cell, 0);
  
          if (!cellp)
              return CM_ERROR_NOSUCHCELL;
  
!         code = cm_FindVolumeByID(cellp, volume, userp, reqp, CM_GETVOL_FLAG_CREATE, &tvp);
          if (code) 
              return code;
  	
***************
*** 3193,3213 ****
      return code;
  }       
  
! 
! long cm_IoctlVolStatTest(struct smb_ioctl *ioctlp, struct cm_user *userp)
  {
!     long code;
      cm_cell_t *cellp = NULL;
      cm_volume_t *volp;
      cm_vol_state_t *statep;
      struct VolStatTest * testp;
-     cm_req_t req;
      afs_uint32 n;
-     size_t len;
- 
-     cm_InitReq(&req);
  
-     cm_SkipIoctlPath(ioctlp);	/* we don't care about the path */
      testp = (struct VolStatTest *)ioctlp->inDatap;
  
  #ifdef AFS_FREELANCE_CLIENT
--- 3069,3089 ----
      return code;
  }       
  
! /* 
!  * VIOC_VOLSTAT_TEST internals.
!  * 
!  * Assumes that pioctl path has been parsed or skipped.
!  */
! afs_int32
! cm_IoctlVolStatTest(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_req_t *reqp)
  {
!     afs_int32 code;
      cm_cell_t *cellp = NULL;
      cm_volume_t *volp;
      cm_vol_state_t *statep;
      struct VolStatTest * testp;
      afs_uint32 n;
  
      testp = (struct VolStatTest *)ioctlp->inDatap;
  
  #ifdef AFS_FREELANCE_CLIENT
***************
*** 3258,3268 ****
          if (n)
              testp->fid.volume = n;
          else
!             code = cm_FindVolumeByName(cellp, testp->volname, userp, &req, CM_GETVOL_FLAG_NO_LRU_UPDATE, &volp);
      }
  
      if (testp->fid.volume > 0)
!         code = cm_FindVolumeByID(cellp, testp->fid.volume, userp, &req, CM_GETVOL_FLAG_NO_LRU_UPDATE, &volp);
  
      if (code)
          return code;
--- 3134,3144 ----
          if (n)
              testp->fid.volume = n;
          else
!             code = cm_FindVolumeByName(cellp, testp->volname, userp, reqp, CM_GETVOL_FLAG_NO_LRU_UPDATE, &volp);
      }
  
      if (testp->fid.volume > 0)
!         code = cm_FindVolumeByID(cellp, testp->fid.volume, userp, reqp, CM_GETVOL_FLAG_NO_LRU_UPDATE, &volp);
  
      if (code)
          return code;
***************
*** 3281,3285 ****
  
      return code;
  }       
- 
- 
--- 3157,3159 ----
Index: openafs/src/WINNT/afsd/cm_ioctl.h
diff -c openafs/src/WINNT/afsd/cm_ioctl.h:1.14.2.5 openafs/src/WINNT/afsd/cm_ioctl.h:1.14.2.9
*** openafs/src/WINNT/afsd/cm_ioctl.h:1.14.2.5	Tue Jan 15 22:19:52 2008
--- openafs/src/WINNT/afsd/cm_ioctl.h	Fri Jul 11 18:27:01 2008
***************
*** 11,17 ****
  #define __CM_IOCTL_H_ENV__ 1
  
  #ifndef __CM_IOCTL_INTERFACES_ONLY__
- #include "smb.h"
  #include "cm_user.h"
  #else
  typedef struct cm_fid {
--- 11,16 ----
***************
*** 52,57 ****
--- 51,78 ----
          afs_uint64 parms[CM_IOCTLCACHEPARMS];
  } cm_cacheParms_t;
  
+ typedef struct cm_ioctl {
+     /* input side */
+     char *inDatap;			/* ioctl func's current position
+ 					 * in input parameter block */
+     char *inAllocp;			/* allocated input parameter block */
+     afs_uint32 inCopied;		/* # of input bytes copied in so far
+ 					 * by write calls */
+     /* output side */
+     char *outDatap;			/* output results assembled so far */
+     char *outAllocp;		        /* output results assembled so far */
+     afs_uint32 outCopied;		/* # of output bytes copied back so far
+ 	
+     /* flags */
+     afs_uint32 flags;
+ } cm_ioctl_t;
+ 
+ /* flags for smb_ioctl_t */
+ #define CM_IOCTLFLAG_DATAIN	1	/* reading data from client to server */
+ #define CM_IOCTLFLAG_LOGON	2	/* got tokens from integrated logon */
+ #define CM_IOCTLFLAG_USEUTF8    4       /* this request is using UTF-8 strings */
+ 
+ 
  /* 
   * The cm_IoctlQueryOptions structure is designed to be extendible.
   * None of the fields are required but when specified 
***************
*** 96,104 ****
  
  #define MAXNUMSYSNAMES    16      /* max that current constants allow */
  #define   MAXSYSNAME      128     /* max sysname (i.e. @sys) size */
! extern char *         cm_sysName;
  extern unsigned int   cm_sysNameCount;
! extern char *         cm_sysNameList[MAXNUMSYSNAMES];
  
  /* flags for rxstats pioctl */
  
--- 117,134 ----
  
  #define MAXNUMSYSNAMES    16      /* max that current constants allow */
  #define   MAXSYSNAME      128     /* max sysname (i.e. @sys) size */
! extern clientchar_t  *cm_sysName;
  extern unsigned int   cm_sysNameCount;
! extern clientchar_t  *cm_sysNameList[MAXNUMSYSNAMES];
! 
! /* Paths that are passed into pioctl calls can be specified using
!    UTF-8.  These strings are prefixed with UTF8_PREFIX defined below.
!    The sequence ESC '%' 'G' is used by ISO-2022 to designate UTF-8
!    strings. */
! #define UTF8_PREFIX "\33%G"
! 
! extern const char utf8_prefix[];
! extern const int  utf8_prefix_size;
  
  /* flags for rxstats pioctl */
  
***************
*** 109,227 ****
  
  #ifndef __CM_IOCTL_INTERFACES_ONLY__
  
! void cm_InitIoctl(void);
  
! void cm_ResetACLCache(cm_user_t *userp);
  
! extern long cm_IoctlGetACL(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGetFileCellName(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlSetACL(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlFlushAllVolumes(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlFlushVolume(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlFlushFile(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlSetVolumeStatus(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGetVolumeStatus(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGetFid(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGetOwner(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlWhereIs(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlStatMountPoint(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlDeleteMountPoint(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlCheckServers(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGag(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlCheckVolumes(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlSetCacheSize(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGetCacheParms(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGetCell(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlNewCell(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGetWsCell(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlSysName(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGetCellStatus(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlSetCellStatus(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlSetSPrefs(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGetSPrefs(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlStoreBehind(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlCreateMountPoint(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_CleanFile(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
  
! extern long cm_FlushFile(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
  
! extern long cm_FlushVolume(cm_user_t *, cm_req_t *reqp, afs_uint32 cell, afs_uint32 volume);
  
! extern long cm_FlushParent(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
  
! extern long cm_IoctlTraceControl(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlSetToken(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGetTokenIter(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGetToken(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlDelToken(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlDelAllToken(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlSymlink(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlIslink(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlListlink(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlDeletelink(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlMakeSubmount(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlGetRxkcrypt(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlSetRxkcrypt(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlShutdown(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlFreemountAddCell(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlFreemountRemoveCell(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlMemoryDump(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlRxStatProcess(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlRxStatPeer(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlUUIDControl(struct smb_ioctl * ioctlp, struct cm_user *userp);
  
! extern long cm_IoctlPathAvailability(struct smb_ioctl * ioctlp, struct cm_user *userp);
  
! extern long cm_IoctlGetFileType(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern long cm_IoctlVolStatTest(struct smb_ioctl *ioctlp, struct cm_user *userp);
  
  #endif /* __CM_IOCTL_INTERFACES_ONLY__ */
  
--- 139,276 ----
  
  #ifndef __CM_IOCTL_INTERFACES_ONLY__
  
! extern void cm_InitIoctl(void);
! 
! extern void cm_ResetACLCache(cm_user_t *userp);
! 
! extern cm_ioctlQueryOptions_t *
! cm_IoctlGetQueryOptions(struct cm_ioctl *ioctlp, struct cm_user *userp);
! 
! extern void
! cm_IoctlSkipQueryOptions(struct cm_ioctl *ioctlp, struct cm_user *userp);
! 
! extern void
! cm_NormalizeAfsPath(clientchar_t *outpathp, long outlen, clientchar_t *inpathp);
! 
! extern void cm_SkipIoctlPath(cm_ioctl_t *ioctlp);
! 
! extern clientchar_t * cm_ParseIoctlStringAlloc(cm_ioctl_t *ioctlp, const char * ext_instrp);
! 
! extern int cm_UnparseIoctlString(cm_ioctl_t *ioctlp, char * ext_outp, const clientchar_t * cstr, int cchlen);
! 
! extern afs_int32 cm_IoctlGetACL(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlGetFileCellName(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlSetACL(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlFlushAllVolumes(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlFlushVolume(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlFlushFile(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlSetVolumeStatus(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlGetVolumeStatus(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlGetFid(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlGetOwner(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlWhereIs(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlStatMountPoint(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlDeleteMountPoint(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlCheckServers(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlGag(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlCheckVolumes(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlSetCacheSize(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlGetCacheParms(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlGetCell(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlNewCell(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlGetWsCell(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlSysName(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlGetCellStatus(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlSetCellStatus(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlSetSPrefs(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlGetSPrefs(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlStoreBehind(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlCreateMountPoint(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *dscp, cm_req_t *reqp, clientchar_t *leaf);
  
! extern afs_int32 cm_CleanFile(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
  
! extern afs_int32 cm_FlushFile(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
  
! extern afs_int32 cm_FlushVolume(cm_user_t *, cm_req_t *reqp, afs_uint32 cell, afs_uint32 volume);
  
! extern afs_int32 cm_FlushParent(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlTraceControl(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlSetToken(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlGetTokenIter(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlGetToken(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlDelToken(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlDelAllToken(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlSymlink(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *dscp, cm_req_t *reqp, clientchar_t *leaf);
  
! extern afs_int32 cm_IoctlIslink(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlListlink(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *scp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlDeletelink(cm_ioctl_t *ioctlp, cm_user_t *userp, cm_scache_t *dscp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlMakeSubmount(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlGetRxkcrypt(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlSetRxkcrypt(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlShutdown(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlFreemountAddCell(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlFreemountRemoveCell(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlMemoryDump(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlRxStatProcess(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlRxStatPeer(cm_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 cm_IoctlUUIDControl(struct cm_ioctl * ioctlp, struct cm_user *userp);
  
! extern afs_int32 cm_IoctlPathAvailability(struct cm_ioctl * ioctlp, struct cm_user *userp, struct cm_scache *scp, struct cm_req *reqp);
  
! extern afs_int32 cm_IoctlGetFileType(cm_ioctl_t *ioctlp, cm_user_t *userp, struct cm_scache *scp, struct cm_req *reqp);
  
! extern afs_int32 cm_IoctlVolStatTest(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_req_t *reqp);
  
! extern afs_int32 cm_IoctlUnicodeControl(struct cm_ioctl *ioctlp, struct cm_user * userp);
  
! extern void TranslateExtendedChars(char *str);
  
  #endif /* __CM_IOCTL_INTERFACES_ONLY__ */
  
Index: openafs/src/WINNT/afsd/cm_nls.c
diff -c /dev/null openafs/src/WINNT/afsd/cm_nls.c:1.3.2.4
*** /dev/null	Fri Jul 18 12:42:42 2008
--- openafs/src/WINNT/afsd/cm_nls.c	Wed Jul 16 11:23:46 2008
***************
*** 0 ****
--- 1,1168 ----
+ /*
+  * Copyright (c) 2008 Secure Endpoints Inc.
+  *
+  * Permission is hereby granted, free of charge, to any person
+  * obtaining a copy of this software and associated documentation
+  * files (the "Software"), to deal in the Software without
+  * restriction, including without limitation the rights to use, copy,
+  * modify, merge, publish, distribute, sublicense, and/or sell copies
+  * of the Software, and to permit persons to whom the Software is
+  * furnished to do so, subject to the following conditions:
+  *
+  * The above copyright notice and this permission notice shall be
+  * included in all copies or substantial portions of the Software.
+  *
+  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+  * SOFTWARE.
+  */
+ 
+ #include <windows.h>
+ #include <stdlib.h>
+ #include <wchar.h>
+ #include <strsafe.h>
+ #include <errno.h>
+ 
+ #include "cm_nls.h"
+ 
+ #ifdef DEBUG_UNICODE
+ #include <assert.h>
+ #endif
+ 
+ /* This is part of the Microsoft Internationalized Domain Name
+    Mitigation APIs. */
+ #include <normalization.h>
+ 
+ /* TODO: All the normalization and conversion code should NUL
+    terminate destination strings. */
+ 
+ int
+ (WINAPI *pNormalizeString)( __in NORM_FORM NormForm,
+                             __in_ecount(cwSrcLength) LPCWSTR lpSrcString,
+                             __in int cwSrcLength,
+                             __out_ecount(cwDstLength) LPWSTR lpDstString,
+                             __in int cwDstLength ) = NULL;
+ 
+ BOOL
+ (WINAPI *pIsNormalizedString)( __in NORM_FORM NormForm,
+                                __in_ecount(cwLength) LPCWSTR lpString,
+                                __in int cwLength ) = NULL;
+ 
+ 
+ #define NLSDLLNAME "Normaliz.dll"
+ #define NLSMAXCCH  1024
+ #define NLSERRCCH  8
+ 
+ #define AFS_NORM_FORM NormalizationC
+ 
+ long cm_InitNormalization(void)
+ {
+     HMODULE h_Nls;
+ 
+     if (pNormalizeString != NULL)
+         return 0;
+ 
+     h_Nls = LoadLibrary(NLSDLLNAME);
+     if (h_Nls == INVALID_HANDLE_VALUE) {
+         return 1;
+     }
+ 
+     pNormalizeString =
+         (int (WINAPI *)( NORM_FORM, LPCWSTR,
+                          int, LPWSTR, int))
+         GetProcAddress(h_Nls, "NormalizeString");
+ 
+     pIsNormalizedString =
+         (BOOL
+          (WINAPI *)( NORM_FORM, LPCWSTR, int ))
+         GetProcAddress(h_Nls, "IsNormalizedString");
+ 
+     return (pNormalizeString && pIsNormalizedString);
+ }
+ 
+ /* \brief Normalize a UTF-16 string.
+ 
+    If the supplied destination buffer is insufficient or NULL, then a
+    new buffer will be allocated to hold the normalized string.
+ 
+    \param[in] src : Source UTF-16 string.  Length is specified in
+        cch_src.
+ 
+    \param[in] cch_src : The character count in cch_src is assumed to
+        be tight and include the terminating NULL character if there is
+        one.  If the NULL is absent, the resulting string will not be
+        NULL terminated.
+ 
+    \param[out] ext_dest : The destination buffer.  Can be NULL, in
+        which case *pcch_dest MUST be 0.
+ 
+    \param[in,out] pcch_dest : On entry *pcch_dest contains a count of
+        characters in the destination buffer.  On exit, it will contain
+        a count of characters that were copied to the destination
+        buffer.
+ 
+    Returns a pointer to the buffer containing the normalized string or
+    NULL if the call was unsuccessful.  If the returned destination
+    buffer is different from the supplied buffer and non-NULL, it
+    should be freed using free().
+ */
+ static wchar_t * 
+ NormalizeUtf16String(const wchar_t * src, int cch_src, wchar_t * ext_dest, int *pcch_dest)
+ {
+ #ifdef DEBUG_UNICODE
+     assert (pNormalizeString != NULL && pIsNormalizedString != NULL);
+ #endif
+ 
+     if (cch_src == -1)
+         cch_src = wcslen(src) + 1;
+ 
+     if ((pIsNormalizedString && (*pIsNormalizedString)(AFS_NORM_FORM, src, cch_src)) ||
+         (!pNormalizeString)) {
+ 
+         if (ext_dest == NULL || *pcch_dest < cch_src) {
+             ext_dest = malloc(cch_src * sizeof(wchar_t));
+             *pcch_dest = cch_src;
+         }
+ 
+         /* No need to or unable to normalize.  Just copy the string.
+            Note that the string is not NUL terminated if the source
+            string is not NUL terminated. */
+ 
+         if (ext_dest) {
+             memcpy(ext_dest, src, cch_src * sizeof(wchar_t));
+             *pcch_dest = cch_src;
+         } else {
+             *pcch_dest = 0;
+         }
+         return ext_dest;
+ 
+     } else {
+ 
+         int rv;
+         DWORD gle;
+         int tries = 10;
+         wchar_t * dest;
+         int cch_dest = *pcch_dest;
+ 
+         dest = ext_dest;
+ 
+         while (tries-- > 0) {
+ 
+             rv = (*pNormalizeString)(AFS_NORM_FORM, src, cch_src, dest, cch_dest);
+ 
+             if (rv <= 0 && (gle = GetLastError()) != ERROR_SUCCESS) {
+                 if (gle == ERROR_INSUFFICIENT_BUFFER) {
+ 
+                     /* The buffer wasn't big enough.  We are going to
+                        try allocating one. */
+ 
+                     cch_dest = (-rv) + NLSERRCCH;
+                     goto cont;
+ 
+                 } else {
+                     /* Something else is wrong */
+                     break;
+                 }
+ 
+             } else if (rv < 0) { /* rv < 0 && gle == ERROR_SUCCESS */
+ 
+                 /* Technically not one of the expected outcomes */
+                 break;
+ 
+             } else {            /* rv > 0 || (rv == 0 && gle == ERROR_SUCCESS) */
+ 
+                 /* Possibly succeeded */
+ 
+                 if (rv == 0) { /* Succeeded and the return string is empty */
+                     *pcch_dest = 0;
+                     return dest;
+                 }
+ 
+                 if (cch_dest == 0) {
+                     /* Nope.  We only calculated the required size of the buffer */
+ 
+                     cch_dest = rv + NLSERRCCH;
+                     goto cont;
+                 }
+ 
+                 *pcch_dest = rv;
+                 if (cch_dest > rv)
+                     dest[rv] = 0;
+                 else {
+                     /* Can't NUL terminate */
+                     cch_dest = max(rv,cch_dest) + NLSERRCCH;
+                     goto cont;
+                 }
+ 
+                 /* Success! */
+                 return dest;
+             }
+ 
+         cont:
+             if (dest != ext_dest && dest)
+                 free(dest);
+             dest = malloc(cch_dest * sizeof(wchar_t));
+         }
+ 
+         /* Failed */
+ 
+         if (dest != ext_dest && dest)
+             free(dest);
+ 
+         *pcch_dest = 0;
+         return NULL;
+     }
+ }
+ 
+ /*! \brief Normalize a Unicode string into a newly allocated buffer
+ 
+   The input string will be normalized using NFC.
+ 
+   \param[in] s UTF-16 string to be normalized.
+ 
+   \param[in] cch_src The number of characters in the input string.  If
+       this is -1, then the input string is assumed to be NUL
+       terminated.
+ 
+   \param[out] pcch_dest Receives the number of characters copied to
+       the output buffer.  Note that the character count is the number
+       of wchar_t characters copied, and not the count of Unicode code
+       points.  This includes the terminating NUL if cch_src was -1 or
+       included the terminating NUL.
+ 
+   \return A newly allocated buffer holding the normalized string or
+       NULL if the call failed.
+  */
+ cm_normchar_t * cm_NormalizeStringAlloc(const cm_unichar_t * s, int cch_src, int *pcch_dest)
+ {
+     int cch_dest = 0;
+     cm_normchar_t * r;
+ 
+     if (s == NULL || cch_src == 0 || *s == L'\0') {
+         if (pcch_dest)
+             *pcch_dest = ((cch_src != 0)? 1: 0);
+         return wcsdup(L"");
+     }
+ 
+     r = NormalizeUtf16String(s, cch_src, NULL, &cch_dest);
+ 
+     if (pcch_dest)
+         *pcch_dest = cch_dest;
+ 
+     return r;
+ }
+ 
+ int cm_NormalizeString(const cm_unichar_t * s, int cch_src,
+                        cm_normchar_t * dest, int cch_dest)
+ {
+     int tcch = cch_dest;
+     cm_normchar_t * r;
+ 
+     r = NormalizeUtf16String(s, cch_src, dest, &tcch);
+ 
+     if (r != dest) {
+         /* The supplied buffer was insufficient */
+         free(r);
+         return 0;
+     } else {
+         return tcch;
+     }
+ }
+ 
+ /*! \brief Convert a UTF-16 string to a UTF-8 string using a newly allocated buffer
+ 
+   \param[in] s UTF-16 source string
+ 
+   \param[in] cch_src Number of characters in \a s. This can be set to
+       -1 if \a s is NUL terminated.
+ 
+   \param[out] pcch_dest Receives a count of characters that were
+       copied to the target buffer.
+ 
+   \return A newly allocated buffer holding the UTF-8 string.
+ 
+  */
+ cm_utf8char_t * cm_Utf16ToUtf8Alloc(const cm_unichar_t * s, int cch_src, int *pcch_dest)
+ {
+     int cch_dest;
+     cm_utf8char_t * dest;
+ 
+     if (s == NULL || cch_src == 0 || *s == L'\0') {
+         if (pcch_dest)
+             *pcch_dest = ((cch_src != 0)?1:0);
+         return strdup("");
+     }
+ 
+     cch_dest = WideCharToMultiByte(CP_UTF8, 0, s, cch_src, NULL, 0, NULL, FALSE);
+ 
+     if (cch_dest == 0) {
+         if (pcch_dest)
+             *pcch_dest = cch_dest;
+         return NULL;
+     }
+ 
+     dest = malloc((cch_dest + 1) * sizeof(cm_utf8char_t));
+ 
+     WideCharToMultiByte(CP_UTF8, 0, s, cch_src, dest, cch_dest, NULL, FALSE);
+     dest[cch_dest] = 0;
+ 
+     if (pcch_dest)
+         *pcch_dest = cch_dest;
+ 
+     return dest;
+ }
+ 
+ int cm_Utf16ToUtf8(const cm_unichar_t * src, int cch_src,
+                    cm_utf8char_t * dest, int cch_dest)
+ {
+     return WideCharToMultiByte(CP_UTF8, 0, src, cch_src, dest, cch_dest, NULL, FALSE);
+ }
+ 
+ int cm_Utf16ToUtf16(const cm_unichar_t * src, int cch_src,
+                     cm_unichar_t * dest, int cch_dest)
+ {
+     if (cch_src == -1) {
+         StringCchCopyW(dest, cch_dest, src);
+         return wcslen(dest) + 1;
+     } else {
+         int cch_conv = min(cch_src, cch_dest);
+         memcpy(dest, src, cch_conv * sizeof(cm_unichar_t));
+         return cch_conv;
+     }
+ }
+ 
+ /* \brief Normalize a UTF-16 string into a UTF-8 string.
+ 
+    \param[in] src : Source string.
+ 
+    \param[in] cch_src : Count of characters in src. If the count includes the
+        NULL terminator, then the resulting string will be NULL
+        terminated.  If it is -1, then src is assumed to be NULL
+        terminated.
+ 
+    \param[out] adest : Destination buffer.
+ 
+    \param[in] cch_adest : Number of characters in the destination buffer.
+ 
+    Returns the number of characters stored into cch_adest. This will
+    include the terminating NULL if cch_src included the terminating
+    NULL or was -1.  If this is 0, then the operation was unsuccessful.
+  */
+ long cm_NormalizeUtf16StringToUtf8(const wchar_t * src, int cch_src,
+                                    char * adest, int cch_adest)
+ {
+     if (cch_src < 0) {
+         size_t cch;
+ 
+         if (FAILED(StringCchLengthW(src, NLSMAXCCH, &cch)))
+             return E2BIG;
+ 
+         cch_src = cch+1;
+     }
+ 
+     {
+         wchar_t nbuf[NLSMAXCCH];
+         wchar_t * normalized;
+         int cch_norm = NLSMAXCCH;
+ 
+         normalized = NormalizeUtf16String(src, cch_src, nbuf, &cch_norm);
+         if (normalized) {
+             cch_adest = WideCharToMultiByte(CP_UTF8, 0, normalized, cch_norm,
+                                             adest, cch_adest, NULL, 0);
+ 
+             if (normalized != nbuf && normalized)
+                 free(normalized);
+ 
+             return cch_adest;
+ 
+         } else {
+ 
+             return 0;
+ 
+         }
+     }
+ }
+ 
+ #define ESCVAL 0x1000
+ #define Esc(c) (ESCVAL + (short)(c))
+ #define IS_ESCAPED(c) (((c) & ESCVAL) == ESCVAL)
+ 
+ /* \brief Character sanitization map for CP-1252
+ 
+    The following map indicates which characters should be escaped in
+    the CP-1252 character map.  Characters that are documented as
+    illegal characters in a file name are marked as escaped.  Escaped
+    characters are marked using the ::Esc macro defined above.  The
+    following exceptions apply:
+ 
+    - Path delimeters '\\' and '/' are NOT escaped because the
+      sanitization map applies to paths.  While those characters are
+      illegal in filenames, they are legal in paths.
+ 
+    - Wildcard characters '*' and '?' ARE escaped.  The document
+      referred below does not specify these characters as invalid.
+      Since no other escape mechanism exists, names containing
+      wildcards are indistinguishable from actual wildcards used in SMB
+      requests.
+ 
+    - Reserved names are not and cannot be represented in this map.
+      Reserved names are :
+ 
+      CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7,
+      COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9,
+      CLOCK$
+ 
+    - Characters 0x80, 0x81, 0x8d, 0x8e, 0x8f, 0x90, 0x9d, 0x9e, 0x9f
+      are also escaped because they are unused in CP-1252 and hence
+      cannot be convered to a Unicode string.
+ 
+      Reserved names with extensions are also invalid. (i.e. NUL.txt)
+ 
+    \note The only bit we are actually interested in from the following
+      table is the ESCVAL bit.  However, the characters themselves are
+      included for ease of maintenance.
+ 
+    \see "Naming a File" topic in the Windows SDK.
+  */
+ static const short sanitized_escapes_1252[] = {
+     Esc(0x00),Esc(0x01),Esc(0x02),Esc(0x03),Esc(0x04),Esc(0x05),Esc(0x06),Esc(0x07),
+     Esc(0x08),Esc(0x09),Esc(0x0a),Esc(0x0b),Esc(0x0c),Esc(0x0d),Esc(0x0e),Esc(0x0f),
+     Esc(0x10),Esc(0x11),Esc(0x12),Esc(0x13),Esc(0x14),Esc(0x15),Esc(0x16),Esc(0x17),
+     Esc(0x18),Esc(0x19),Esc(0x1a),Esc(0x1b),Esc(0x1c),Esc(0x1d),Esc(0x1e),Esc(0x1f),
+     ' ','!',Esc('"'),'#','$','%','&','\'','(',')',Esc('*'),'+',',','-','.','/',
+     '0','1','2','3','4','5','6','7','8','9',Esc(':'),';',Esc('<'),'=',Esc('>'),Esc('?'),
+     '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
+     'P','Q','R','S','T','U','V','W','X','Y','Z','[','\\',']','^','_',
+     '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o',
+     'p','q','r','s','t','u','v','w','x','y','z','{',Esc('|'),'}','~',Esc(0x7f),
+     Esc(0x80),Esc(0x81),0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,Esc(0x8d),Esc(0x8e),Esc(0x8f),
+     Esc(0x90),0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,Esc(0x9d),Esc(0x9e),0x9f,
+     0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
+     0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
+     0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
+     0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,
+     0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
+     0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
+ };
+ 
+ static int sanitize_bytestring(const char * src, int cch_src,
+                                char * odest, int cch_dest)
+ {
+     char * dest = odest;
+     while (cch_src > 0 && *src && cch_dest > 0) {
+ 
+         unsigned short rc;
+ 
+         rc = sanitized_escapes_1252[*src];
+         if (IS_ESCAPED(rc)) {
+             static const char hex[] = 
+                 {'0','1','2','3','4','5','6','7',
+                  '8','9','a','b','c','d','e','f'};
+ 
+             if (cch_dest < 3) {
+                 *dest++ = '\0';
+                 return 0;
+             }
+ 
+             *dest++ = '%';
+             *dest++ = hex[(((int)*src) >> 4) & 0x0f];
+             *dest++ = hex[(((int)*src) & 0x0f)];
+             cch_dest -= 3;
+ 
+         } else {
+             *dest++ = *src;
+             cch_dest--;
+         }
+ 
+         cch_src--;
+         src++;
+     }
+ 
+     if (cch_src > 0 && cch_dest > 0) {
+         *dest++ = '\0';
+     }
+ 
+     return (int)(dest - odest);
+ }
+ 
+ #undef Esc
+ #undef IS_ESCAPED
+ #undef ESCVAL
+ 
+ long cm_NormalizeUtf8StringToUtf16(const char * src, int cch_src,
+                                    wchar_t * dest, int cch_dest)
+ {
+     wchar_t wsrcbuf[NLSMAXCCH];
+     wchar_t *wnorm;
+     int cch;
+     int cch_norm;
+ 
+     /* Get some edge cases out first, so we don't have to worry about
+        cch_src being 0 etc. */
+     if (cch_src == 0) {
+         return 0;
+     } else if (*src == '\0') {
+         if (cch_dest >= 1)
+             *dest = L'\0';
+         return 1;
+     }
+ 
+     if (cch_src == -1) {
+         cch_src = strlen(src) + 1;
+     }
+ 
+     cch = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, src,
+                               cch_src * sizeof(char), wsrcbuf, NLSMAXCCH);
+ 
+     if (cch == 0) {
+         if (GetLastError() == ERROR_NO_UNICODE_TRANSLATION) {
+             char sanitized[NLSMAXCCH];
+             int cch_sanitized;
+ 
+             /* If src doesn't have a unicode translation, then it
+                wasn't valid UTF-8.  In this case, we assume that src
+                is CP-1252 and then try to convert again.  But before
+                that, we use a translation table to "sanitize" the
+                input. */
+ 
+             cch_sanitized = sanitize_bytestring(src, cch_src, sanitized,
+                                                 sizeof(sanitized)/sizeof(char));
+ 
+             if (cch_sanitized == 0) {
+ #ifdef DEBUG_UNICODE
+                 DebugBreak();
+ #endif
+                 return 0;
+             }
+ 
+             cch = MultiByteToWideChar(1252, 0, sanitized,
+                                       cch_sanitized * sizeof(char), wsrcbuf, NLSMAXCCH);
+             if (cch == 0) {
+                 /* Well, that didn't work either.  Something is very wrong. */
+ #ifdef DEBUG_UNICODE
+                 DebugBreak();
+ #endif
+                 return 0;
+             }
+         } else {
+             return 0;
+         }
+     }
+ 
+     cch_norm = cch_dest;
+     wnorm = NormalizeUtf16String(wsrcbuf, cch, dest, &cch_norm);
+     if (wnorm == NULL) {
+ #ifdef DEBUG_UNICODE
+         DebugBreak();
+ #endif
+         return 0;
+     }
+ 
+     if (wnorm != dest) {
+         /* The buffer was insufficient */
+         if (dest != NULL && cch_dest > 1) {
+             *dest = L'\0';
+             cch_norm = 0;
+         }
+ 
+         free(wnorm);
+     }
+ 
+     return cch_norm;
+ }
+ 
+ cm_normchar_t *cm_NormalizeUtf8StringToUtf16Alloc(const cm_utf8char_t * src, int cch_src,
+                                                   int *pcch_dest)
+ {
+     wchar_t wsrcbuf[NLSMAXCCH];
+     wchar_t *wnorm;
+     int cch;
+     int cch_norm;
+ 
+     /* Get some edge cases out first, so we don't have to worry about
+        cch_src being 0 etc. */
+     if (cch_src == 0 || src == NULL || *src == '\0') {
+         if (pcch_dest)
+             *pcch_dest = ((cch_src != 0)? 1 : 0);
+         return wcsdup(L"");
+     }
+ 
+     if (cch_src == -1) {
+         cch_src = strlen(src) + 1;
+     }
+ 
+     cch = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, src,
+                               cch_src * sizeof(char), wsrcbuf, NLSMAXCCH);
+ 
+     if (cch == 0) {
+         if (GetLastError() == ERROR_NO_UNICODE_TRANSLATION) {
+             char sanitized[NLSMAXCCH];
+             int cch_sanitized;
+ 
+             /* If src doesn't have a unicode translation, then it
+                wasn't valid UTF-8.  In this case, we assume that src
+                is CP-1252 and then try to convert again.  But before
+                that, we use a translation table to "sanitize" the
+                input. */
+ 
+             cch_sanitized = sanitize_bytestring(src, cch_src, sanitized,
+                                                 sizeof(sanitized)/sizeof(char));
+ 
+             if (cch_sanitized == 0) {
+ #ifdef DEBUG_UNICODE
+                 DebugBreak();
+ #endif
+                 return NULL;
+             }
+ 
+             cch = MultiByteToWideChar(1252, 0, sanitized,
+                                       cch_sanitized * sizeof(char), wsrcbuf, NLSMAXCCH);
+             if (cch == 0) {
+                 /* Well, that didn't work either.  Something is very wrong. */
+ #ifdef DEBUG_UNICODE
+                 DebugBreak();
+ #endif
+                 return NULL;
+             }
+         } else {
+             return NULL;
+         }
+     }
+ 
+     cch_norm = 0;
+     wnorm = NormalizeUtf16String(wsrcbuf, cch, NULL, &cch_norm);
+     if (wnorm == NULL) {
+ #ifdef DEBUG_UNICODE
+         DebugBreak();
+ #endif
+         return NULL;
+     }
+ 
+     if (pcch_dest)
+         *pcch_dest = cch_norm;
+ 
+     return wnorm;
+ }
+ 
+ int cm_Utf8ToUtf16(const cm_utf8char_t * src, int cch_src,
+                    cm_unichar_t * dest, int cch_dest)
+ {
+     int cch;
+ 
+     if (cch_src == -1) {
+         cch_src = strlen(src) + 1;
+     }
+ 
+     cch = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, src,
+                               cch_src * sizeof(char), dest, cch_dest);
+ 
+     if (cch == 0) {
+         if (GetLastError() == ERROR_NO_UNICODE_TRANSLATION) {
+             char sanitized[NLSMAXCCH];
+             int cch_sanitized;
+ 
+             /* If src doesn't have a unicode translation, then it
+                wasn't valid UTF-8.  In this case, we assume that src
+                is CP-1252 and then try to convert again.  But before
+                that, we use a translation table to "sanitize" the
+                input. */
+ 
+             cch_sanitized = sanitize_bytestring(src, cch_src, sanitized,
+                                                 sizeof(sanitized)/sizeof(char));
+ 
+             if (cch_sanitized == 0) {
+ #ifdef DEBUG_UNICODE
+                 DebugBreak();
+ #endif
+                 return 0;
+             }
+ 
+             cch = MultiByteToWideChar(1252, 0, sanitized,
+                                       cch_sanitized * sizeof(char), dest, cch_dest);
+             if (cch == 0) {
+                 /* Well, that didn't work either.  Something is very wrong. */
+ #ifdef DEBUG_UNICODE
+                 DebugBreak();
+ #endif
+                 return 0;
+             } else {
+                 return cch;
+             }
+ 
+         } else {
+             return 0;
+         }
+     } else {
+         return cch;
+     }
+ }
+ 
+ cm_unichar_t  * cm_Utf8ToUtf16Alloc(const cm_utf8char_t * src, int cch_src, int *pcch_dest)
+ {
+     cm_unichar_t * ustr = NULL;
+     int cch;
+ 
+     if (cch_src == 0 || src == NULL || *src == '\0') {
+         if (pcch_dest)
+             *pcch_dest = ((cch_src != 0)? 1 : 0);
+         return wcsdup(L"");
+     }
+ 
+     if (cch_src == -1) {
+         cch_src = strlen(src) + 1;
+     }
+ 
+     cch = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, src,
+                               cch_src * sizeof(char), NULL, 0);
+ 
+     if (cch == 0) {
+         if (GetLastError() == ERROR_NO_UNICODE_TRANSLATION) {
+             char sanitized[NLSMAXCCH];
+             int cch_sanitized;
+ 
+             /* If src doesn't have a unicode translation, then it
+                wasn't valid UTF-8.  In this case, we assume that src
+                is CP-1252 and then try to convert again.  But before
+                that, we use a translation table to "sanitize" the
+                input. */
+ 
+             cch_sanitized = sanitize_bytestring(src, cch_src, sanitized,
+                                                 sizeof(sanitized)/sizeof(char));
+ 
+             if (cch_sanitized == 0) {
+ #ifdef DEBUG_UNICODE
+                 DebugBreak();
+ #endif
+                 return NULL;
+             }
+ 
+             cch = MultiByteToWideChar(1252, 0, sanitized,
+                                       cch_sanitized * sizeof(char), NULL, 0);
+             if (cch == 0) {
+                 /* Well, that didn't work either.  Something is very wrong. */
+ #ifdef DEBUG_UNICODE
+                 DebugBreak();
+ #endif
+                 return NULL;
+             }
+ 
+             ustr = malloc((cch + 1) * sizeof(wchar_t));
+ 
+             cch = MultiByteToWideChar(1252, 0, sanitized,
+                                       cch_sanitized * sizeof(char), ustr, cch);
+             ustr[cch] = 0;
+         } else {
+             return NULL;
+         }
+     } else {
+ 
+         ustr = malloc((cch + 1) * sizeof(wchar_t));
+ 
+         cch = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, src,
+                                   cch_src * sizeof(char), ustr, cch);
+         ustr[cch] = 0;
+     }
+ 
+     if (pcch_dest)
+         *pcch_dest = cch;
+ 
+     return ustr;
+ }
+ 
+ 
+ 
+ /* \brief Normalize a UTF-8 string.
+ 
+    \param[in] src String to normalize.
+ 
+    \param[in] cch_src : Count of characters in src.  If this value is
+        -1, then src is assumed to be NULL terminated.  The translated
+        string will be NULL terminated only if this is -1 or the count
+        includes the terminating NULL.
+ 
+    \param[out] adest : Destination string.  Only considered valid if
+        \a cch_adest is non-zero.
+ 
+    \param[in] cch_adest : Number of characters in the destination
+        string.  If this is zero, then the return value is the number
+        of bytes required.
+ 
+    \return If \a cch_adest is non-zero, then the return value is the
+        number of bytes stored into adest.  If \a cch_adest is zero,
+        then the return value is the number of bytes required.  In both
+        cases, the return value is 0 if the call was unsuccessful.
+  */
+ long cm_NormalizeUtf8String(const char * src, int cch_src,
+                             char * adest, int cch_adest)
+ {
+     wchar_t wsrcbuf[NLSMAXCCH];
+     wchar_t *wnorm;
+     int cch;
+     int cch_norm;
+ 
+     /* Get some edge cases out first, so we don't have to worry about
+        cch_src being 0 etc. */
+     if (cch_src == 0) {
+         return 0;
+     } else if (*src == '\0') {
+         if (cch_adest >= 1)
+             *adest = '\0';
+         return 1;
+     }
+ 
+     if (cch_src == -1) {
+         cch_src = strlen(src) + 1;
+     }
+ 
+     cch = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, src,
+                               cch_src * sizeof(char), wsrcbuf, NLSMAXCCH);
+ 
+     if (cch == 0) {
+         if (GetLastError() == ERROR_NO_UNICODE_TRANSLATION) {
+             char sanitized[NLSMAXCCH];
+             int cch_sanitized;
+ 
+             /* If src doesn't have a unicode translation, then it
+                wasn't valid UTF-8.  In this case, we assume that src
+                is CP-1252 and then try to convert again.  But before
+                that, we use a translation table to "sanitize" the
+                input. */
+ 
+             cch_sanitized = sanitize_bytestring(src, cch_src, sanitized,
+                                                 sizeof(sanitized)/sizeof(char));
+ 
+             if (cch_sanitized == 0) {
+ #ifdef DEBUG_UNICODE
+                 DebugBreak();
+ #endif
+                 return 0;
+             }
+ 
+             cch = MultiByteToWideChar(1252, 0, sanitized,
+                                       cch_sanitized * sizeof(char), wsrcbuf, NLSMAXCCH);
+             if (cch == 0) {
+                 /* Well, that didn't work either.  Something is very wrong. */
+ #ifdef DEBUG_UNICODE
+                 DebugBreak();
+ #endif
+                 return 0;
+             }
+         } else {
+             return 0;
+         }
+     }
+ 
+     cch_norm = 0;
+     wnorm = NormalizeUtf16String(wsrcbuf, cch, NULL, &cch_norm);
+     if (wnorm == NULL) {
+ #ifdef DEBUG_UNICODE
+         DebugBreak();
+ #endif
+         return 0;
+     }
+ 
+     cch = WideCharToMultiByte(CP_UTF8, 0, wnorm,
+                               cch_norm, adest, cch_adest * sizeof(char),
+                               NULL, FALSE);
+ 
+     if (wnorm)
+         free(wnorm);
+ 
+     return cch;
+ }
+ 
+ /*! \brief Case insensitive comparison with specific length
+ 
+   \param[in] str1 First string to compare.  Assumed to be encoded in UTF-8.
+ 
+   \param[in] str2 Second string to compare.  Assumed to be encoded in UTF-8.
+ 
+   \param[in] n Max byte count.
+ 
+  */
+ int cm_strnicmp_utf8(const char * str1, const char * str2, int n)
+ {
+     wchar_t wstr1[NLSMAXCCH];
+     int len1;
+     int len2;
+     wchar_t wstr2[NLSMAXCCH];
+     int rv;
+ 
+     /* first check for NULL pointers (assume NULL < "") */
+     if (str1 == NULL) {
+         if (str2 == NULL)
+             return 0;
+         else
+             return -1;
+     } else if (str2 == NULL) {
+         return 1;
+     }
+ 
+     len1 = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str1, n, wstr1, NLSMAXCCH);
+     if (len1 == 0) {
+ #ifdef DEBUG
+         DebugBreak();
+ #endif
+         wstr1[0] = L'\0';
+     }
+ 
+     len2 = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str2, n, wstr2, NLSMAXCCH);
+     if (len2 == 0) {
+ #ifdef DEBUG
+         DebugBreak();
+ #endif
+         wstr2[0] = L'\0';
+     }
+ 
+     rv = CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, wstr1, len1, wstr2, len2);
+     if (rv > 0)
+         return (rv - 2);
+     else {
+ #ifdef DEBUG
+         DebugBreak();
+ #endif
+         return 0;
+     }
+ }
+ 
+ int cm_strnicmp_utf16(const cm_unichar_t * str1, const cm_unichar_t * str2, int len)
+ {
+     int rv;
+     size_t cch1;
+     size_t cch2;
+ 
+     /* first check for NULL pointers */
+     if (str1 == NULL) {
+         if (str2 == NULL)
+             return 0;
+         else
+             return -1;
+     } else if (str2 == NULL) {
+         return 1;
+     }
+ 
+     if (FAILED(StringCchLengthW(str1, len, &cch1)))
+         cch1 = len;
+ 
+     if (FAILED(StringCchLengthW(str2, len, &cch2)))
+         cch2 = len;
+ 
+     rv = CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, str1, cch1, str2, cch2);
+     if (rv > 0)
+         return (rv - 2);
+     else {
+ #ifdef DEBUG
+         DebugBreak();
+ #endif
+         return 0;
+     }
+ }
+ 
+ int cm_stricmp_utf16(const cm_unichar_t * str1, const cm_unichar_t * str2)
+ {
+     int rv;
+ 
+     /* first check for NULL pointers */
+     if (str1 == NULL) {
+         if (str2 == NULL)
+             return 0;
+         else
+             return -1;
+     } else if (str2 == NULL) {
+         return 1;
+     }
+ 
+     rv = CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, str1, -1, str2, -1);
+     if (rv > 0)
+         return (rv - 2);
+     else {
+ #ifdef DEBUG
+         DebugBreak();
+ #endif
+         return 0;
+     }
+ }
+ 
+ cm_unichar_t *cm_strlwr_utf16(cm_unichar_t * str)
+ {
+     int rv;
+     int len;
+ 
+     len = wcslen(str) + 1;
+     rv = LCMapStringW(LOCALE_INVARIANT, LCMAP_LOWERCASE, str, len, str, len);
+ #ifdef DEBUG
+     if (rv == 0) {
+         DebugBreak();
+     }
+ #endif
+ 
+     return str;
+ }
+ 
+ cm_unichar_t *cm_strupr_utf16(cm_unichar_t * str)
+ {
+     int rv;
+     int len;
+ 
+     len = wcslen(str) + 1;
+     rv = LCMapStringW(LOCALE_INVARIANT, LCMAP_UPPERCASE, str, len, str, len);
+ #ifdef DEBUG
+     if (rv == 0) {
+         DebugBreak();
+     }
+ #endif
+ 
+     return str;
+ }
+ 
+ 
+ int cm_stricmp_utf8(const char * str1, const char * str2)
+ {
+     wchar_t wstr1[NLSMAXCCH];
+     int len1;
+     int len2;
+     wchar_t wstr2[NLSMAXCCH];
+     int rv;
+ 
+     /* first check for NULL pointers */
+     if (str1 == NULL) {
+         if (str2 == NULL)
+             return 0;
+         else
+             return -1;
+     } else if (str2 == NULL) {
+         return 1;
+     }
+ 
+     len1 = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str1, -1, wstr1, NLSMAXCCH);
+     if (len1 == 0) {
+ #ifdef DEBUG
+         DebugBreak();
+ #endif
+         wstr1[0] = L'\0';
+     }
+ 
+     len2 = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str2, -1, wstr2, NLSMAXCCH);
+     if (len2 == 0) {
+ #ifdef DEBUG
+         DebugBreak();
+ #endif
+         wstr2[0] = L'\0';
+     }
+ 
+     rv = CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, wstr1, len1, wstr2, len2);
+     if (rv > 0)
+         return (rv - 2);
+     else {
+ #ifdef DEBUG
+         DebugBreak();
+ #endif
+         return 0;
+     }
+ }
+ 
+ #if 0
+ wchar_t * strupr_utf16(wchar_t * wstr, size_t cbstr)
+ {
+     wchar_t wstrd[NLSMAXCCH];
+     int len;
+ 
+     len = cbstr / sizeof(wchar_t);
+     len = LCMapStringW(LOCALE_INVARIANT, LCMAP_UPPERCASE, wstr, len, wstrd, NLSMAXCCH);
+     StringCbCopyW(wstr, cbstr, wstrd);
+ 
+     return wstr;
+ }
+ #endif
+ 
+ char * strupr_utf8(char * str, size_t cbstr)
+ {
+     wchar_t wstr[NLSMAXCCH];
+     wchar_t wstrd[NLSMAXCCH];
+     int len;
+ 
+     len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, str, -1, wstr, NLSMAXCCH);
+     if (len == 0)
+         return str;
+ 
+     len = LCMapStringW(LOCALE_INVARIANT, LCMAP_UPPERCASE, wstr, len, wstrd, NLSMAXCCH);
+ 
+     len = WideCharToMultiByte(CP_UTF8, 0, wstrd, -1, str, cbstr, NULL, FALSE);
+ 
+     return str;
+ }
+ 
+ char * char_next_utf8(const char * c)
+ {
+ #define CH (*((const unsigned char *)c))
+ 
+     if ((CH & 0x80) == 0)
+         return (char *) c+1;
+     else {
+         switch (CH & 0xf0) {
+         case 0xc0:
+         case 0xd0:
+             return (char *) c+2;
+ 
+         case 0xe0:
+             return (char *) c+3;
+ 
+         case 0xf0:
+             return (char *) c+4;
+ 
+         default:
+             return (char *) c+1;
+         }
+     }
+ #undef CH
+ }
+ 
+ 
+ char * char_prev_utf8(const char * c)
+ {
+ #define CH (*((const unsigned char *)c))
+ 
+     c--;
+ 
+     if ((CH & 0x80) == 0)
+         return (char *) c;
+     else
+         while ((CH & 0xc0) == 0x80)
+             (char *) c--;
+     return (char *) c;
+ 
+ #undef CH
+ }
+ 
+ wchar_t * char_next_utf16(const wchar_t * c)
+ {
+     unsigned short sc = (unsigned short) *c;
+ 
+     if (sc >= 0xd800 && sc <= 0xdbff)
+         return (wchar_t *) c+2;
+     return (wchar_t *) c+1;
+ }
+ 
+ wchar_t * char_prev_utf16(const wchar_t * c)
+ {
+     unsigned short sc = (unsigned short) *(--c);
+ 
+     if (sc >= 0xdc00 && sc <= 0xdfff)
+         return (wchar_t *) --c;
+     return (wchar_t *) c;
+ }
+ 
+ wchar_t * char_this_utf16(const wchar_t * c)
+ {
+     unsigned short sc = (unsigned short) *c;
+ 
+     if (sc >= 0xdc00 && sc <= 0xdfff)
+         return (wchar_t *) --c;
+     return (wchar_t *) c;
+ }
+ 
Index: openafs/src/WINNT/afsd/cm_nls.h
diff -c /dev/null openafs/src/WINNT/afsd/cm_nls.h:1.3.2.3
*** /dev/null	Fri Jul 18 12:42:42 2008
--- openafs/src/WINNT/afsd/cm_nls.h	Thu Jun 26 12:38:30 2008
***************
*** 0 ****
--- 1,271 ----
+ /*
+  * Copyright (c) 2008 Secure Endpoints Inc.
+  *
+  * Permission is hereby granted, free of charge, to any person
+  * obtaining a copy of this software and associated documentation
+  * files (the "Software"), to deal in the Software without
+  * restriction, including without limitation the rights to use, copy,
+  * modify, merge, publish, distribute, sublicense, and/or sell copies
+  * of the Software, and to permit persons to whom the Software is
+  * furnished to do so, subject to the following conditions:
+  *
+  * The above copyright notice and this permission notice shall be
+  * included in all copies or substantial portions of the Software.
+  *
+  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+  * SOFTWARE.
+  */
+ 
+ #ifndef __CM_NLS_H_ENV__
+ #define __CM_NLS_H_ENV__
+ 
+ /* Character types
+ 
+    There are three character types that we use as implementation
+    types.  These should generally only be referenced by the
+    nationalization code.
+ 
+    - ::cm_unichar_t
+ 
+    - ::cm_normchar_t
+ 
+    - ::cm_utf8char_t
+ 
+    The character types that are used by code are :
+ 
+    - ::clientchar_t
+ 
+    - ::normchar_t
+ 
+    - ::fschar_t
+ 
+  */
+ 
+ /*! \brief Unicode UTF-16 Character */
+ typedef wchar_t cm_unichar_t;
+ 
+ /*! \brief Unicode UTF-16 Normalized Character (NF-C) */
+ typedef wchar_t cm_normchar_t;
+ 
+ /*! \brief Unicode UTF-8 Character */
+ typedef unsigned char cm_utf8char_t;
+ 
+ /*! \brief Client name */
+ typedef cm_unichar_t  clientchar_t;
+ 
+ /*! \brief File Server name */
+ typedef cm_utf8char_t fschar_t;
+ 
+ /*! \brief Normalized name */
+ typedef cm_normchar_t normchar_t;
+ 
+ #define __paste(a,b) a ## b
+ #define _C(s) __paste(L,s)
+ #define _FS(s) s
+ #define _N(s) __paste(L,s)
+ 
+ #define cm_ClientStringToNormStringAlloc cm_NormalizeStringAlloc
+ #define cm_ClientStringToFsStringAlloc cm_Utf16ToUtf8Alloc
+ #define cm_ClientStringToUtf8Alloc cm_Utf16ToUtf8Alloc
+ #define cm_FsStringToClientStringAlloc cm_Utf8ToUtf16Alloc
+ #define cm_FsStringToNormStringAlloc cm_NormalizeUtf8StringToUtf16Alloc
+ #define cm_Utf8ToNormStringAlloc cm_NormalizeUtf8StringToUtf16Alloc
+ #define cm_Utf8ToClientStringAlloc cm_Utf8ToUtf16Alloc
+ 
+ #define cm_ClientStringToUtf16 cm_Utf16ToUtf16
+ #define cm_ClientStringToUtf8  cm_Utf16ToUtf8
+ #define cm_ClientStringToFsString cm_Utf16ToUtf8
+ #define cm_ClientStringToNormString cm_NormalizeString
+ #define cm_FsStringToClientString cm_Utf8ToUtf16
+ #define cm_FsStringToNormString cm_NormalizeUtf8StringToUtf16
+ #define cm_Utf8ToClientString cm_Utf8ToUtf16
+ #define cm_OemToClientString(s,cchs,d,cchd) MultiByteToWideChar(CP_OEMCP, 0, s, cchs, d, cchd)
+ #define cm_AnsiToClientString(s,cchs,d,cchd) MultiByteToWideChar(CP_ACP, 0, s, cchs, d, cchd)
+ 
+ #define cm_ClientStrCmp wcscmp
+ #define cm_ClientStrCmpI cm_stricmp_utf16
+ #define cm_ClientStrCmpIA cm_stricmp_utf16
+ #define cm_ClientStrCmpNI cm_strnicmp_utf16
+ #define cm_ClientStrCmpN wcsncmp
+ #define cm_ClientStrChr wcschr
+ #define cm_ClientStrRChr wcsrchr
+ #define cm_ClientStrCpy(d,cch,s) StringCchCopyW(d,cch,s)
+ #define cm_ClientStrCpyN(d,cch,s,n) StringCchCopyNW(d,cch,s,n)
+ #define cm_ClientStrDup wcsdup
+ #define cm_ClientStrCat(d,cch,s) StringCchCatW(d,cch,s)
+ #define cm_ClientStrCatN(d,cch,s,n) StringCchCatNW(d,cch,s,n)
+ #define cm_ClientStrPrintfN StringCchPrintfW
+ #define cm_ClientStrPrintfV StringCchVPrintfW
+ //#define cm_ClientStrPrintf  swprintf
+ #define cm_ClientStrLen wcslen
+ #define cm_ClientStrLwr cm_strlwr_utf16
+ #define cm_ClientStrUpr cm_strupr_utf16
+ #define cm_ClientStrSpn wcsspn
+ #define cm_ClientStrCSpn wcscspn
+ #define osi_LogSaveClientString osi_LogSaveStringW
+ #define cm_ClientCharThis char_this_utf16
+ #define cm_ClientCharNext char_next_utf16
+ #define cm_ClientCharPrev char_prev_utf16
+ 
+ #define cm_FsStrDup strdup
+ #define cm_FsStrLen strlen
+ #define cm_FsStrCat StringCchCatA
+ #define cm_FsStrPrintf StringCchPrintfA
+ #define cm_FsStrRChr strrchr
+ #define cm_FsStrChr  strchr
+ #define cm_FsStrCmpIA cm_stricmp_utf8
+ #define cm_FsStrCmpI cm_stricmp_utf8
+ #define cm_FsStrCmpA  strcmp
+ #define cm_FsStrCmp  strcmp
+ #define cm_FsStrCpy(d,cch,s) StringCchCopyA(d,cch,s)
+ #define osi_LogSaveFsString osi_LogSaveString
+ #define cm_FsStrCpyN(d,cch,s,n) StringCchCopyN(d,cch,s,n)
+ 
+ #define cm_NormStrDup wcsdup
+ #define cm_NormStrCmpI cm_stricmp_utf16
+ #define cm_NormStrCmp wcscmp
+ #define cm_NormCharUpr towupper
+ 
+ #define cm_Utf16ToClientString cm_Utf16ToUtf16
+ 
+ extern long cm_InitNormalization(void);
+ 
+ /* Functions annotated in accordance with sal.h */
+ 
+ extern __out_ecount_full_z(*pcch_dest) __checkReturn __success(return != NULL) cm_normchar_t *
+     cm_NormalizeStringAlloc
+     (__in_ecount(cch_src) const cm_unichar_t * s,
+      int cch_src,
+      __out_ecount_full_opt(1) int *pcch_dest);
+ 
+ extern __success(return != 0) int
+     cm_NormalizeString
+     (__in_ecount(cch_src) const cm_unichar_t * s,
+      int cch_src,
+      __out_ecount_full_z_opt(cch_dest) cm_normchar_t * dest,
+      int cch_dest);
+ 
+ extern __out_ecount_full_z(*pcch_dest) __checkReturn __success(return != NULL) cm_utf8char_t *
+     cm_Utf16ToUtf8Alloc
+     (__in_ecount(cch_src) const cm_unichar_t * s,
+      int cch_src, 
+      __out_ecount_full_opt(1) int *pcch_dest);
+ 
+ extern __out_ecount_full_z(*pcch_dest) __checkReturn __success(return != NULL) cm_unichar_t *
+     cm_Utf8ToUtf16Alloc
+     (__in_ecount(cch_src) const cm_utf8char_t * src,
+      int cch_src,
+      __out_ecount_full_opt(1) int *pcch_dest);
+ 
+ extern __success(return != 0) long
+     cm_NormalizeUtf8StringToUtf16
+     (__in_ecount(cch_src) const char * src,
+      int cch_src,
+      __out_ecount_full_z_opt(cch_dest) cm_normchar_t * dest,
+      int cch_dest);
+ 
+ extern __out_ecount_full_z(*pcch_dest) __checkReturn __success(return != NULL) cm_normchar_t *
+     cm_NormalizeUtf8StringToUtf16Alloc
+     (__in_ecount(cch_src) const cm_utf8char_t * src,
+      int cch_src,
+      __out_ecount_full_opt(1) int *pcch_dest);
+ 
+ extern __success(return != 0) int
+     cm_Utf8ToUtf16
+     (__in_ecount(cch_src) const cm_utf8char_t * src,
+      int cch_src,
+      __out_ecount_full_z_opt(cch_dest) cm_unichar_t * dest,
+      int cch_dest);
+ 
+ extern __success(return != 0) int
+     cm_Utf16ToUtf8
+     (__in_ecount(cch_src) const cm_unichar_t * src,
+      int cch_src,
+      __out_ecount_full_z_opt(cch_dest) cm_utf8char_t * dest,
+      int cch_dest);
+ 
+ extern __success(return != 0) int
+     cm_Utf16ToUtf16
+     (__in_ecount(cch_src) const cm_unichar_t * src,
+      int cch_src,
+      __out_ecount_full_z_opt(cch_dest) cm_unichar_t * dest,
+      int cch_dest);
+ 
+ extern int
+     cm_strnicmp_utf16
+     (__in_z const cm_unichar_t * str1,
+      __in_z const cm_unichar_t * str2,
+      int len);
+ 
+ extern int
+     cm_stricmp_utf16
+     (__in_z const cm_unichar_t * str1,
+      __in_z const cm_unichar_t * str2);
+ 
+ /* The cm_stricmp_utf8N function is identical to cm_stricmp_utf8
+    except it is used in instances where one of the strings is always
+    known to be ASCII. */
+ extern int
+     cm_stricmp_utf8N
+     (__in_z const char * str1,
+      __in_z const char * str2);
+ #define cm_stricmp_utf8N cm_stricmp_utf8
+ 
+ extern int
+     cm_stricmp_utf8
+     (__in_z const char * str1,
+      __in_z const char * str2);
+ 
+ /* The cm_strnicmp_utf8N function is identical to cm_strnicmp_utf8
+    except it is used in instances where one of the strings is always
+    known to be ASCII. */
+ extern int
+     cm_strnicmp_utf8N
+     (__in_z const char * str1,
+      __in_z const char * str2, int n);
+ #define cm_strnicmp_utf8N cm_strnicmp_utf8
+ 
+ extern int
+     cm_strnicmp_utf8
+     (__in_z const char * str1,
+      __in_z const char * str2, int n);
+ 
+ extern __out_z wchar_t *
+ char_next_utf16
+ (__in_z const wchar_t * c);
+ 
+ extern __out_z wchar_t *
+ char_prev_utf16
+ (__in_z const wchar_t * c);
+ 
+ extern __out_z wchar_t *
+ char_this_utf16
+ (__in_z const wchar_t * c);
+ 
+ extern __out_z cm_unichar_t *
+ cm_strlwr_utf16(__inout_z cm_unichar_t * str);
+ 
+ extern __out_z cm_unichar_t *
+ cm_strupr_utf16(__inout_z cm_unichar_t * str);
+ 
+ #if 0
+ 
+ extern long cm_NormalizeUtf16StringToUtf8(const wchar_t * src, int cch_src,
+                                           char * adest, int cch_adest);
+ 
+ extern char * char_next_utf8(const char * c);
+ 
+ extern char * char_prev_utf8(const char * c);
+ 
+ extern char * strupr_utf8(char * str, size_t cbstr);
+ 
+ #endif
+ 
+ #define lengthof(a) (sizeof(a)/sizeof(a[0]))
+ #endif
Index: openafs/src/WINNT/afsd/cm_rpc.c
diff -c openafs/src/WINNT/afsd/cm_rpc.c:1.7 openafs/src/WINNT/afsd/cm_rpc.c:1.7.8.1
*** openafs/src/WINNT/afsd/cm_rpc.c:1.7	Sun Jan  2 20:05:07 2005
--- openafs/src/WINNT/afsd/cm_rpc.c	Thu Jun 26 10:38:24 2008
***************
*** 15,25 ****
  #include <malloc.h>
  
  #include <osi.h>
- #ifndef DJGPP
  #include "afsrpc.h"
- #else
- #include "afsrpc95.h"
- #endif
  
  #include "afsd.h"
  #include "afsd_init.h"
--- 15,21 ----
Index: openafs/src/WINNT/afsd/cm_rpc.h
diff -c openafs/src/WINNT/afsd/cm_rpc.h:1.4 openafs/src/WINNT/afsd/cm_rpc.h:1.4.8.1
*** openafs/src/WINNT/afsd/cm_rpc.h:1.4	Sun Jan  2 20:05:07 2005
--- openafs/src/WINNT/afsd/cm_rpc.h	Thu Jun 26 10:38:24 2008
***************
*** 10,20 ****
  #ifndef	__CM_RPC_H__
  #define __CM_RPC_H__
  
- #ifndef DJGPP
  #include "afsrpc.h"
- #else
- #include "afsrpc95.h"
- #endif
  
  void cm_RegisterNewTokenEvent(afs_uuid_t uuid, char sessionKey[8]);
  BOOL cm_FindTokenEvent(afs_uuid_t uuid, char sessionKey[8]);
--- 10,16 ----
Index: openafs/src/WINNT/afsd/cm_scache.c
diff -c openafs/src/WINNT/afsd/cm_scache.c:1.35.2.74.2.2 openafs/src/WINNT/afsd/cm_scache.c:1.35.2.77
*** openafs/src/WINNT/afsd/cm_scache.c:1.35.2.74.2.2	Sun Jun 22 23:05:03 2008
--- openafs/src/WINNT/afsd/cm_scache.c	Thu Jun 26 10:38:24 2008
***************
*** 10,20 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #include <winsock2.h>
  #include <nb30.h>
- #endif /* !DJGPP */
  #include <malloc.h>
  #include <string.h>
  #include <stdlib.h>
--- 10,18 ----
Index: openafs/src/WINNT/afsd/cm_scache.h
diff -c openafs/src/WINNT/afsd/cm_scache.h:1.21.2.24.2.1 openafs/src/WINNT/afsd/cm_scache.h:1.21.2.27
*** openafs/src/WINNT/afsd/cm_scache.h:1.21.2.24.2.1	Sun Jun 22 23:05:03 2008
--- openafs/src/WINNT/afsd/cm_scache.h	Thu Jun 26 12:38:30 2008
***************
*** 10,19 ****
  #ifndef __CM_SCACHE_H_ENV__
  #define __CM_SCACHE_H_ENV__ 1
  
- #ifdef DJGPP
- #include "largeint95.h"
- #endif /* DJGPP */
- 
  #define MOUNTPOINTLEN   1024    /* max path length for symlink; same as AFSPATHMAX */
  
  typedef struct cm_fid {
--- 10,15 ----
***************
*** 411,414 ****
--- 407,412 ----
  extern void cm_RemoveSCacheFromHashTable(cm_scache_t *scp);
  
  extern void cm_AdjustScacheLRU(cm_scache_t *scp);
+ 
+ extern int cm_DumpSCache(FILE *outputFile, char *cookie, int lock);
  #endif /*  __CM_SCACHE_H_ENV__ */
Index: openafs/src/WINNT/afsd/cm_server.c
diff -c openafs/src/WINNT/afsd/cm_server.c:1.25.2.28.2.1 openafs/src/WINNT/afsd/cm_server.c:1.25.2.30
*** openafs/src/WINNT/afsd/cm_server.c:1.25.2.28.2.1	Sun Jun 22 22:54:28 2008
--- openafs/src/WINNT/afsd/cm_server.c	Thu Jun 26 10:38:24 2008
***************
*** 10,22 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #include <winsock2.h>
  #include <nb30.h>
- #else
- #include <sys/socket.h>
- #endif /* !DJGPP */
  #include <stdlib.h>
  #include <malloc.h>
  #include <string.h>
--- 10,18 ----
Index: openafs/src/WINNT/afsd/cm_server.h
diff -c openafs/src/WINNT/afsd/cm_server.h:1.13.2.13 openafs/src/WINNT/afsd/cm_server.h:1.13.2.14
*** openafs/src/WINNT/afsd/cm_server.h:1.13.2.13	Sat Mar  8 18:25:08 2008
--- openafs/src/WINNT/afsd/cm_server.h	Thu Jun 26 10:38:24 2008
***************
*** 10,20 ****
  #ifndef __CM_SERVER_H_ENV__
  #define __CM_SERVER_H_ENV__ 1
  
- #ifndef DJGPP
  #include <winsock2.h>
- #else /* DJGPP */
- #include <netinet/in.h>
- #endif /* !DJGPP */
  #include <osi.h>
  
  /* this value is set to 1022 in order to  */
--- 10,16 ----
Index: openafs/src/WINNT/afsd/cm_user.c
diff -c openafs/src/WINNT/afsd/cm_user.c:1.8.4.4 openafs/src/WINNT/afsd/cm_user.c:1.8.4.6
*** openafs/src/WINNT/afsd/cm_user.c:1.8.4.4	Wed Feb 20 12:37:09 2008
--- openafs/src/WINNT/afsd/cm_user.c	Thu Jun 26 10:58:05 2008
***************
*** 10,22 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
- #endif /* !DJGPP */
  #include <malloc.h>
  #include <string.h>
  
  #include "afsd.h"
  #include <osi.h>
  #include <rx/rx.h>
  
--- 10,21 ----
  #include <afs/param.h>
  #include <afs/stds.h>
  
  #include <windows.h>
  #include <malloc.h>
  #include <string.h>
  
  #include "afsd.h"
+ #include "smb.h"
  #include <osi.h>
  #include <rx/rx.h>
  
Index: openafs/src/WINNT/afsd/cm_user.h
diff -c openafs/src/WINNT/afsd/cm_user.h:1.8 openafs/src/WINNT/afsd/cm_user.h:1.8.2.1
*** openafs/src/WINNT/afsd/cm_user.h:1.8	Sat Apr 22 15:44:28 2006
--- openafs/src/WINNT/afsd/cm_user.h	Thu Jun 26 12:38:30 2008
***************
*** 31,37 ****
      int gen;			        /* generation number */
      int iterator;			/* for use as ListTokens cookie */
      long flags;			        /* flags */
!     char userName[MAXKTCNAMELEN];	/* user name */
  #ifdef QUERY_AFSID
      afs_uint32 uid;			/* User's AFS ID in this cell */
  #endif
--- 31,37 ----
      int gen;			        /* generation number */
      int iterator;			/* for use as ListTokens cookie */
      long flags;			        /* flags */
!     fschar_t userName[MAXKTCNAMELEN];   /* user name */
  #ifdef QUERY_AFSID
      afs_uint32 uid;			/* User's AFS ID in this cell */
  #endif
Index: openafs/src/WINNT/afsd/cm_utils.c
diff -c openafs/src/WINNT/afsd/cm_utils.c:1.11.4.7 openafs/src/WINNT/afsd/cm_utils.c:1.11.4.12
*** openafs/src/WINNT/afsd/cm_utils.c:1.11.4.7	Thu Jan 31 02:31:56 2008
--- openafs/src/WINNT/afsd/cm_utils.c	Thu Jun 26 12:38:30 2008
***************
*** 11,17 ****
  #include <afs/stds.h>
  
  #include <errno.h>
- #ifndef DJGPP
  #include <windows.h>
  #include <winsock2.h>
  #ifndef EWOULDBLOCK
--- 11,16 ----
***************
*** 62,68 ****
  #define ESTALE                  WSAESTALE
  #define EREMOTE                 WSAEREMOTE
  #endif /* EWOULDBLOCK */
- #endif /* !DJGPP */
  #include <afs/unified_afs.h>
  
  #include <string.h>
--- 61,66 ----
***************
*** 71,76 ****
--- 69,77 ----
  #include <osi.h>
  #include <rx/rx.h>
  
+ #define STRSAFE_NO_DEPRECATE
+ #include <strsafe.h>
+ 
  
  static osi_once_t cm_utilsOnce;
  
***************
*** 361,363 ****
--- 362,734 ----
  	cm_spaceListp = tsp;
          lock_ReleaseWrite(&cm_utilsLock);
  }
+ 
+ /* characters that are legal in an 8.3 name */
+ /*
+  * We used to have 1's for all characters from 128 to 254.  But
+  * the NT client behaves better if we create an 8.3 name for any
+  * name that has a character with the high bit on, and if we
+  * delete those characters from 8.3 names.  In particular, see
+  * Sybase defect 10859.
+  */
+ char cm_LegalChars[256] = {
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ };
+ 
+ #define ISLEGALCHAR(c) ((c) < 256 && (c) > 0 && cm_LegalChars[(c)] != 0)
+ 
+ /* return true iff component is a valid 8.3 name */
+ int cm_Is8Dot3(clientchar_t *namep)
+ {
+     int sawDot = 0;
+     clientchar_t tc;
+     int charCount = 0;
+         
+     /*
+      * can't have a leading dot;
+      * special case for . and ..
+      */
+     if (namep[0] == '.') {
+         if (namep[1] == 0)
+             return 1;
+         if (namep[1] == '.' && namep[2] == 0)
+             return 1;
+         return 0;
+     }
+     while (tc = *namep++) {
+         if (tc == '.') {
+             /* saw another dot */
+             if (sawDot) return 0;	/* second dot */
+             sawDot = 1;
+             charCount = 0;
+             continue;
+         }
+         if (!ISLEGALCHAR(tc))
+             return 0;
+         charCount++;
+         if (!sawDot && charCount > 8)
+             /* more than 8 chars in name */
+             return 0;
+         if (sawDot && charCount > 3)
+             /* more than 3 chars in extension */
+             return 0;
+     }
+     return 1;
+ }
+ 
+ /*
+  * Number unparsing map for generating 8.3 names;
+  * The version taken from DFS was on drugs.  
+  * You can't include '&' and '@' in a file name.
+  */
+ char cm_8Dot3Mapping[42] =
+ {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 
+  'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 
+  'V', 'W', 'X', 'Y', 'Z', '_', '-', '$', '#', '!', '+', '='
+ };
+ int cm_8Dot3MapSize = sizeof(cm_8Dot3Mapping);
+ 
+ void cm_Gen8Dot3NameInt(const fschar_t * longname, cm_dirFid_t * pfid,
+                         clientchar_t *shortName, clientchar_t **shortNameEndp)
+ {
+     char number[12];
+     int i, nsize = 0;
+     int vnode = ntohl(pfid->vnode);
+     char *lastDot;
+     int validExtension = 0;
+     char tc, *temp;
+     const char *name;
+ 
+     /* Unparse the file's vnode number to get a "uniquifier" */
+     do {
+         number[nsize] = cm_8Dot3Mapping[vnode % cm_8Dot3MapSize];
+         nsize++;
+         vnode /= cm_8Dot3MapSize;
+     } while (vnode);
+ 
+     /*
+      * Look for valid extension.  There has to be a dot, and
+      * at least one of the characters following has to be legal.
+      */
+     lastDot = strrchr(longname, '.');
+     if (lastDot) {
+         temp = lastDot; temp++;
+         while (tc = *temp++)
+             if (ISLEGALCHAR(tc))
+                 break;
+         if (tc)
+             validExtension = 1;
+     }
+ 
+     /* Copy name characters */
+     for (i = 0, name = longname;
+           i < (7 - nsize) && name != lastDot; ) {
+         tc = *name++;
+ 
+         if (tc == 0)
+             break;
+         if (!ISLEGALCHAR(tc))
+             continue;
+         i++;
+         *shortName++ = toupper(tc);
+     }
+ 
+     /* tilde */
+     *shortName++ = '~';
+ 
+     /* Copy uniquifier characters */
+     for (i=0; i < nsize; i++) {
+         *shortName++ = number[i];
+     }
+ 
+     if (validExtension) {
+         /* Copy extension characters */
+         *shortName++ = *lastDot++;	/* copy dot */
+         for (i = 0, tc = *lastDot++;
+              i < 3 && tc;
+              tc = *lastDot++) {
+             if (ISLEGALCHAR(tc)) {
+                 i++;
+                 *shortName++ = toupper(tc);
+             }
+         }
+     }
+ 
+     /* Trailing null */
+     *shortName = 0;
+ 
+     if (shortNameEndp)
+         *shortNameEndp = shortName;
+ }
+ 
+ void cm_Gen8Dot3NameIntW(const clientchar_t * longname, cm_dirFid_t * pfid,
+                          clientchar_t *shortName, clientchar_t **shortNameEndp)
+ {
+     clientchar_t number[12];
+     int i, nsize = 0;
+     int vnode = ntohl(pfid->vnode);
+     clientchar_t *lastDot;
+     int validExtension = 0;
+     clientchar_t tc, *temp;
+     const clientchar_t *name;
+ 
+     /* Unparse the file's vnode number to get a "uniquifier" */
+     do {
+         number[nsize] = cm_8Dot3Mapping[vnode % cm_8Dot3MapSize];
+         nsize++;
+         vnode /= cm_8Dot3MapSize;
+     } while (vnode);
+ 
+     /*
+      * Look for valid extension.  There has to be a dot, and
+      * at least one of the characters following has to be legal.
+      */
+     lastDot = cm_ClientStrRChr(longname, '.');
+     if (lastDot) {
+         temp = lastDot; temp++;
+         while (tc = *temp++)
+             if (ISLEGALCHAR(tc))
+                 break;
+         if (tc)
+             validExtension = 1;
+     }
+ 
+     /* Copy name characters */
+     for (i = 0, name = longname;
+           i < (7 - nsize) && name != lastDot; ) {
+         tc = *name++;
+ 
+         if (tc == 0)
+             break;
+         if (!ISLEGALCHAR(tc))
+             continue;
+         i++;
+         *shortName++ = toupper((char) tc);
+     }
+ 
+     /* tilde */
+     *shortName++ = '~';
+ 
+     /* Copy uniquifier characters */
+     for (i=0; i < nsize; i++) {
+         *shortName++ = number[i];
+     }
+ 
+     if (validExtension) {
+         /* Copy extension characters */
+         *shortName++ = *lastDot++;	/* copy dot */
+         for (i = 0, tc = *lastDot++;
+              i < 3 && tc;
+              tc = *lastDot++) {
+             if (ISLEGALCHAR(tc)) {
+                 i++;
+                 *shortName++ = toupper(tc);
+             }
+         }
+     }
+ 
+     /* Trailing null */
+     *shortName = 0;
+ 
+     if (shortNameEndp)
+         *shortNameEndp = shortName;
+ }
+ 
+ /*! \brief Compare 'pattern' (containing metacharacters '*' and '?') with the file name 'name'.
+ 
+   \note This procedure works recursively calling itself.
+ 
+   \param[in] pattern string containing metacharacters.
+   \param[in] name File name to be compared with 'pattern'.
+ 
+   \return BOOL : TRUE/FALSE (match/mistmatch)
+ */
+ static BOOL 
+ szWildCardMatchFileName(clientchar_t * pattern, clientchar_t * name, int casefold) 
+ {
+     clientchar_t upattern[MAX_PATH];
+     clientchar_t uname[MAX_PATH];
+ 
+     clientchar_t * pename;         // points to the last 'name' character
+     clientchar_t * p;
+     clientchar_t * pattern_next;
+ 
+     if (casefold) {
+         cm_ClientStrCpy(upattern, lengthof(upattern), pattern);
+         cm_ClientStrUpr(upattern);
+         pattern = upattern;
+ 
+         cm_ClientStrCpy(uname, lengthof(uname), name);
+         cm_ClientStrUpr(uname);
+         name = uname;
+ 
+         /* The following translations all work on single byte
+            characters */
+         for (p=upattern; *p; p++) {
+             if (*p == '"') *p = '.'; continue;
+             if (*p == '<') *p = '*'; continue;
+             if (*p == '>') *p = '?'; continue;
+         }
+ 
+         for (p=uname; *p; p++) {
+             if (*p == '"') *p = '.'; continue;
+             if (*p == '<') *p = '*'; continue;
+             if (*p == '>') *p = '?'; continue;
+         }
+     }
+ 
+     pename = cm_ClientCharThis(name + cm_ClientStrLen(name));
+ 
+     while (*name) {
+         switch (*pattern) {
+         case '?':
+ 	    pattern = cm_ClientCharNext(pattern);
+             if (*name == '.')
+ 		continue;
+             name = cm_ClientCharNext(name);
+             break;
+ 
+          case '*':
+             pattern = cm_ClientCharNext(pattern);
+             if (*pattern == '\0')
+                 return TRUE;
+ 
+             pattern_next = cm_ClientCharNext(pattern);
+ 
+             for (p = pename; p >= name; p = cm_ClientCharPrev(p)) {
+                 if (*p == *pattern &&
+                     szWildCardMatchFileName(pattern_next,
+                                             cm_ClientCharNext(p), FALSE))
+                     return TRUE;
+             } /* endfor */
+             return FALSE;
+ 
+         default:
+             if (*name != *pattern)
+                 return FALSE;
+             pattern = cm_ClientCharNext(pattern);
+             name = cm_ClientCharNext(name);
+             break;
+         } /* endswitch */
+     } /* endwhile */
+ 
+     /* if all we have left are wildcards, then we match */
+     for (;*pattern; pattern = cm_ClientCharNext(pattern)) {
+ 	if (*pattern != '*' && *pattern != '?')
+ 	    return FALSE;
+     }
+     return TRUE;
+ }
+ 
+ /* do a case-folding search of the star name mask with the name in namep.
+  * Return 1 if we match, otherwise 0.
+  */
+ int cm_MatchMask(clientchar_t *namep, clientchar_t *maskp, int flags) 
+ {
+     clientchar_t * newmask;
+     int    i, j, star, qmark, casefold, retval;
+ 
+     /* make sure we only match 8.3 names, if requested */
+     if ((flags & CM_FLAG_8DOT3) && !cm_Is8Dot3(namep)) 
+         return 0;
+ 
+     casefold = (flags & CM_FLAG_CASEFOLD) ? 1 : 0;
+ 
+     /* optimize the pattern:
+      * if there is a mixture of '?' and '*',
+      * for example  the sequence "*?*?*?*"
+      * must be turned into the form "*"
+      */
+     newmask = (clientchar_t *)malloc((cm_ClientStrLen(maskp)+1)*sizeof(clientchar_t));
+     for ( i=0, j=0, star=0, qmark=0; maskp[i]; i++) {
+         switch ( maskp[i] ) {
+         case '?':
+         case '>':
+             qmark++;
+             break;
+         case '<':
+         case '*':
+             star++;
+             break;
+         default:
+             if ( star ) {
+                 newmask[j++] = '*';
+             } else if ( qmark ) {
+                 while ( qmark-- )
+                     newmask[j++] = '?';
+             }
+             newmask[j++] = maskp[i];
+             star = 0;
+             qmark = 0;
+         }
+     }
+     if ( star ) {
+         newmask[j++] = '*';
+     } else if ( qmark ) {
+         while ( qmark-- )
+             newmask[j++] = '?';
+     }
+     newmask[j++] = '\0';
+ 
+     retval = szWildCardMatchFileName(newmask, namep, casefold) ? 1:0;
+ 
+     free(newmask);
+     return retval;
+ }
+ 
Index: openafs/src/WINNT/afsd/cm_utils.h
diff -c openafs/src/WINNT/afsd/cm_utils.h:1.3 openafs/src/WINNT/afsd/cm_utils.h:1.3.20.3
*** openafs/src/WINNT/afsd/cm_utils.h:1.3	Tue Sep 18 00:26:54 2001
--- openafs/src/WINNT/afsd/cm_utils.h	Thu Jun 26 12:38:30 2008
***************
*** 12,19 ****
  
  #define CM_UTILS_SPACESIZE		8192	/* space to allocate */
  typedef struct cm_space {
! 	char data[CM_UTILS_SPACESIZE];
!         struct cm_space *nextp;
  } cm_space_t;
  
  /* error code hack */
--- 12,22 ----
  
  #define CM_UTILS_SPACESIZE		8192	/* space to allocate */
  typedef struct cm_space {
!     union {
!         clientchar_t wdata[CM_UTILS_SPACESIZE];
!         char data[CM_UTILS_SPACESIZE];
!     };
!     struct cm_space *nextp;
  } cm_space_t;
  
  /* error code hack */
***************
*** 25,31 ****
--- 28,54 ----
  extern void cm_FreeSpace(cm_space_t *);
  
  extern long cm_MapRPCError(long error, cm_req_t *reqp);
+ 
  extern long cm_MapRPCErrorRmdir(long error, cm_req_t *reqp);
+ 
  extern long cm_MapVLRPCError(long error, cm_req_t *reqp);
  
+ extern void init_et_to_sys_error(void);
+ 
+ extern int cm_Is8Dot3(clientchar_t *namep);
+ 
+ extern void cm_Gen8Dot3Name(struct cm_dirEntry *dep, clientchar_t *shortName,
+                             clientchar_t **shortNameEndp);
+ 
+ #define cm_Gen8Dot3Name(dep,shortName,shortNameEndp)                  \
+ cm_Gen8Dot3NameInt((dep)->name, &(dep)->fid, shortName, shortNameEndp)
+ 
+ extern void cm_Gen8Dot3NameInt(const fschar_t * longname, cm_dirFid_t * pfid,
+                                clientchar_t *shortName, clientchar_t **shortNameEndp);
+ 
+ extern void cm_Gen8Dot3NameIntW(const clientchar_t* longname, cm_dirFid_t * pfid,
+                                 clientchar_t *shortName, clientchar_t **shortNameEndp);
+ 
+ extern int cm_MatchMask(clientchar_t *namep, clientchar_t *maskp, int flags);
+ 
  #endif /*  __CM_UTILS_H_ENV__ */
Index: openafs/src/WINNT/afsd/cm_vnodeops.c
diff -c openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.74.2.2 openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.82
*** openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.74.2.2	Sun Jun 22 23:05:03 2008
--- openafs/src/WINNT/afsd/cm_vnodeops.c	Wed Jul 16 11:23:46 2008
***************
*** 10,19 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #include <winsock2.h>
- #endif /* !DJGPP */
  #include <stddef.h>
  #include <malloc.h>
  #include <string.h>
--- 10,17 ----
***************
*** 23,30 ****
--- 21,31 ----
  #include <osi.h>
  
  #include "afsd.h"
+ #include "smb.h"
  #include "cm_btree.h"
  
+ #include <strsafe.h>
+ 
  #ifdef DEBUG
  extern void afsi_log(char *pattern, ...);
  #endif
***************
*** 98,253 ****
      }
  }
  
- /* characters that are legal in an 8.3 name */
- /*
-  * We used to have 1's for all characters from 128 to 254.  But
-  * the NT client behaves better if we create an 8.3 name for any
-  * name that has a character with the high bit on, and if we
-  * delete those characters from 8.3 names.  In particular, see
-  * Sybase defect 10859.
-  */
- char cm_LegalChars[256] = {
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
- 
- /* return true iff component is a valid 8.3 name */
- int cm_Is8Dot3(char *namep)
- {
-     int sawDot = 0;
-     unsigned char tc;
-     int charCount = 0;
-         
-     /*
-      * can't have a leading dot;
-      * special case for . and ..
-      */
-     if (namep[0] == '.') {
-         if (namep[1] == 0)
-             return 1;
-         if (namep[1] == '.' && namep[2] == 0)
-             return 1;
-         return 0;
-     }
-     while (tc = *namep++) {
-         if (tc == '.') {
-             /* saw another dot */
-             if (sawDot) return 0;	/* second dot */
-             sawDot = 1;
-             charCount = 0;
-             continue;
-         }
-         if (cm_LegalChars[tc] == 0)
-             return 0;
-         charCount++;
-         if (!sawDot && charCount > 8)
-             /* more than 8 chars in name */
-             return 0;
-         if (sawDot && charCount > 3)
-             /* more than 3 chars in extension */
-             return 0;
-     }
-     return 1;
- }
- 
- /*
-  * Number unparsing map for generating 8.3 names;
-  * The version taken from DFS was on drugs.  
-  * You can't include '&' and '@' in a file name.
-  */
- char cm_8Dot3Mapping[42] =
- {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 
-  'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 
-  'V', 'W', 'X', 'Y', 'Z', '_', '-', '$', '#', '!', '+', '='
- };
- int cm_8Dot3MapSize = sizeof(cm_8Dot3Mapping);
- 
- void cm_Gen8Dot3NameInt(const char * longname, cm_dirFid_t * pfid,
-                         char *shortName, char **shortNameEndp)
- {
-     char number[12];
-     int i, nsize = 0;
-     int vnode = ntohl(pfid->vnode);
-     char *lastDot;
-     int validExtension = 0;
-     char tc, *temp;
-     const char *name;
- 
-     /* Unparse the file's vnode number to get a "uniquifier" */
-     do {
-         number[nsize] = cm_8Dot3Mapping[vnode % cm_8Dot3MapSize];
-         nsize++;
-         vnode /= cm_8Dot3MapSize;
-     } while (vnode);
- 
-     /*
-      * Look for valid extension.  There has to be a dot, and
-      * at least one of the characters following has to be legal.
-      */
-     lastDot = strrchr(longname, '.');
-     if (lastDot) {
-         temp = lastDot; temp++;
-         while (tc = *temp++)
-             if (cm_LegalChars[tc])
-                 break;
-         if (tc)
-             validExtension = 1;
-     }
- 
-     /* Copy name characters */
-     for (i = 0, name = longname;
-           i < (7 - nsize) && name != lastDot; ) {
-         tc = *name++;
- 
-         if (tc == 0)
-             break;
-         if (!cm_LegalChars[tc])
-             continue;
-         i++;
-         *shortName++ = toupper(tc);
-     }
- 
-     /* tilde */
-     *shortName++ = '~';
  
-     /* Copy uniquifier characters */
-     memcpy(shortName, number, nsize);
-     shortName += nsize;
- 
-     if (validExtension) {
-         /* Copy extension characters */
-         *shortName++ = *lastDot++;	/* copy dot */
-         for (i = 0, tc = *lastDot++;
-               i < 3 && tc;
-               tc = *lastDot++) {
-             if (cm_LegalChars[tc]) {
-                 i++;
-                 *shortName++ = toupper(tc);
-             }
-         }
-     }
- 
-     /* Trailing null */
-     *shortName = 0;
- 
-     if (shortNameEndp)
-         *shortNameEndp = shortName;
- }       
  
  /* return success if we can open this file in this mode */
  long cm_CheckOpen(cm_scache_t *scp, int openMode, int trunc, cm_user_t *userp,
--- 99,105 ----
***************
*** 577,584 ****
   * 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,
!                   cm_scache_t **retscp)
  {
      char *tp;
      long code;
--- 429,436 ----
   * 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,
!                  cm_scache_t **retscp)
  {
      char *tp;
      long code;
***************
*** 648,654 ****
                  if (code == 0) {
  
  #ifdef USE_BPLUS
!                     code = cm_BPlusDirLookup(&dirop, sp->searchNamep, &sp->fid);
                      if (code != EINVAL)
                          usedBplus = 1;
                      else 
--- 500,506 ----
                  if (code == 0) {
  
  #ifdef USE_BPLUS
!                     code = cm_BPlusDirLookup(&dirop, sp->nsearchNamep, &sp->fid);
                      if (code != EINVAL)
                          usedBplus = 1;
                      else 
***************
*** 848,865 ****
      return code;
  }
  
! int cm_NoneUpper(char *s)
  {
!     char c;
      while (c = *s++)
          if (c >= 'A' && c <= 'Z')
              return 0;
      return 1;
  }
  
! int cm_NoneLower(char *s)
  {
!     char c;
      while (c = *s++)
          if (c >= 'a' && c <= 'z')
              return 0;
--- 700,717 ----
      return code;
  }
  
! int cm_NoneUpper(normchar_t *s)
  {
!     normchar_t c;
      while (c = *s++)
          if (c >= 'A' && c <= 'Z')
              return 0;
      return 1;
  }
  
! int cm_NoneLower(normchar_t *s)
  {
!     normchar_t c;
      while (c = *s++)
          if (c >= 'a' && c <= 'z')
              return 0;
***************
*** 867,896 ****
  }
  
  long cm_LookupSearchProc(cm_scache_t *scp, cm_dirEntry_t *dep, void *rockp,
!                           osi_hyper_t *offp)
  {
      cm_lookupSearch_t *sp;
      int match;
!     char shortName[13];
!     char *matchName;
  
      sp = (cm_lookupSearch_t *) rockp;
  
!     matchName = dep->name;
      if (sp->caseFold)
!         match = cm_stricmp(matchName, sp->searchNamep);
      else
!         match = strcmp(matchName, sp->searchNamep);
  
      if (match != 0
!          && sp->hasTilde
!          && !cm_Is8Dot3(dep->name)) {
!         matchName = shortName;
!         cm_Gen8Dot3Name(dep, shortName, NULL);
          if (sp->caseFold)
!             match = cm_stricmp(matchName, sp->searchNamep);
          else
!             match = strcmp(matchName, sp->searchNamep);
      }
  
      if (match != 0)
--- 719,749 ----
  }
  
  long cm_LookupSearchProc(cm_scache_t *scp, cm_dirEntry_t *dep, void *rockp,
!                          osi_hyper_t *offp)
  {
      cm_lookupSearch_t *sp;
      int match;
!     normchar_t matchName[MAX_PATH];
!     int looking_for_short_name = FALSE;
  
      sp = (cm_lookupSearch_t *) rockp;
  
!     cm_FsStringToNormString(dep->name, -1, matchName, lengthof(matchName));
      if (sp->caseFold)
!         match = cm_NormStrCmpI(matchName, sp->nsearchNamep);
      else
!         match = cm_NormStrCmp(matchName, sp->nsearchNamep);
  
      if (match != 0
!         && sp->hasTilde
!         && !cm_Is8Dot3(matchName)) {
! 
!         cm_Gen8Dot3NameInt(dep->name, &dep->fid, matchName, NULL);
          if (sp->caseFold)
!             match = cm_NormStrCmpI(matchName, sp->nsearchNamep);
          else
!             match = cm_NormStrCmp(matchName, sp->nsearchNamep);
!         looking_for_short_name = TRUE;
      }
  
      if (match != 0)
***************
*** 900,906 ****
      if (!sp->caseFold) 
          sp->ExactFound = 1;
  
!     if (!sp->caseFold || matchName == shortName) {
          cm_SetFid(&sp->fid, sp->fid.cell, sp->fid.volume, ntohl(dep->fid.vnode), ntohl(dep->fid.unique));
          return CM_ERROR_STOPNOW;
      }
--- 753,759 ----
      if (!sp->caseFold) 
          sp->ExactFound = 1;
  
!     if (!sp->caseFold || looking_for_short_name) {
          cm_SetFid(&sp->fid, sp->fid.cell, sp->fid.volume, ntohl(dep->fid.vnode), ntohl(dep->fid.unique));
          return CM_ERROR_STOPNOW;
      }
***************
*** 913,919 ****
       */
  
      /* Exact matches are the best. */
!     match = strcmp(matchName, sp->searchNamep);
      if (match == 0) {
          sp->ExactFound = 1;
          cm_SetFid(&sp->fid, sp->fid.cell, sp->fid.volume, ntohl(dep->fid.vnode), ntohl(dep->fid.unique));
--- 766,772 ----
       */
  
      /* Exact matches are the best. */
!     match = cm_NormStrCmp(matchName, sp->nsearchNamep);
      if (match == 0) {
          sp->ExactFound = 1;
          cm_SetFid(&sp->fid, sp->fid.cell, sp->fid.volume, ntohl(dep->fid.vnode), ntohl(dep->fid.unique));
***************
*** 1024,1038 ****
  long cm_FollowMountPoint(cm_scache_t *scp, cm_scache_t *dscp, cm_user_t *userp,
                           cm_req_t *reqp, cm_scache_t **outScpp)
  {
!     char *cellNamep;
!     char *volNamep;
      int tlen;
!     long code;
!     char *cp;
!     char *mpNamep;
      cm_volume_t *volp = NULL;
      cm_cell_t *cellp;
!     char mtType;
      cm_fid_t tfid;
      size_t vnLength;
      int targetType;
--- 877,891 ----
  long cm_FollowMountPoint(cm_scache_t *scp, cm_scache_t *dscp, cm_user_t *userp,
                           cm_req_t *reqp, cm_scache_t **outScpp)
  {
!     fschar_t *cellNamep = NULL;
!     fschar_t *volNamep = NULL;
      int tlen;
!     afs_uint32 code;
!     fschar_t *cp;
!     fschar_t *mpNamep;
      cm_volume_t *volp = NULL;
      cm_cell_t *cellp;
!     fschar_t mtType;
      cm_fid_t tfid;
      size_t vnLength;
      int targetType;
***************
*** 1049,1073 ****
      mpNamep = scp->mountPointStringp;
      if (!mpNamep[0])
  	return CM_ERROR_NOSUCHPATH;
!     tlen = (int)strlen(scp->mountPointStringp);
      mtType = *scp->mountPointStringp;
-     cellNamep = malloc(tlen);
-     volNamep = malloc(tlen);
  
!     cp = strrchr(mpNamep, ':');
      if (cp) {
          /* cellular mount point */
!         memset(cellNamep, 0, tlen);
!         strncpy(cellNamep, mpNamep+1, cp - mpNamep - 1);
!         strcpy(volNamep, cp+1);
          /* now look up the cell */
          lock_ReleaseWrite(&scp->rw);
          cellp = cm_GetCell(cellNamep, CM_FLAG_CREATE);
          lock_ObtainWrite(&scp->rw);
!     }
!     else {
          /* normal mt pt */
!         strcpy(volNamep, mpNamep+1);
  
          cellp = cm_FindCellByID(scp->fid.cell, 0);
      }
--- 902,924 ----
      mpNamep = scp->mountPointStringp;
      if (!mpNamep[0])
  	return CM_ERROR_NOSUCHPATH;
!     tlen = cm_FsStrLen(scp->mountPointStringp);
      mtType = *scp->mountPointStringp;
  
!     cp = cm_FsStrChr(mpNamep, _FS(':'));
      if (cp) {
          /* cellular mount point */
!         cellNamep = (fschar_t *)malloc((cp - mpNamep) * sizeof(fschar_t));
!         cm_FsStrCpyN(cellNamep, cp - mpNamep, mpNamep + 1, cp - mpNamep - 1);
!         volNamep = cm_FsStrDup(cp+1);
! 
          /* now look up the cell */
          lock_ReleaseWrite(&scp->rw);
          cellp = cm_GetCell(cellNamep, CM_FLAG_CREATE);
          lock_ObtainWrite(&scp->rw);
!     } else {
          /* normal mt pt */
!         volNamep = cm_FsStrDup(mpNamep + 1);
  
          cellp = cm_FindCellByID(scp->fid.cell, 0);
      }
***************
*** 1077,1087 ****
          goto done;
      }
  
!     vnLength = strlen(volNamep);
!     if (vnLength >= 8 && strcmp(volNamep + vnLength - 7, ".backup") == 0)
          targetType = BACKVOL;
      else if (vnLength >= 10
!               && strcmp(volNamep + vnLength - 9, ".readonly") == 0)
          targetType = ROVOL;
      else
          targetType = RWVOL;
--- 928,938 ----
          goto done;
      }
  
!     vnLength = cm_FsStrLen(volNamep);
!     if (vnLength >= 8 && cm_FsStrCmp(volNamep + vnLength - 7, ".backup") == 0)
          targetType = BACKVOL;
      else if (vnLength >= 10
!              && cm_FsStrCmp(volNamep + vnLength - 9, ".readonly") == 0)
          targetType = ROVOL;
      else
          targetType = RWVOL;
***************
*** 1153,1164 ****
    done:
      if (volp)
  	cm_PutVolume(volp);
!     free(cellNamep);
!     free(volNamep);
      return code;
  }       
  
! long cm_LookupInternal(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
                         cm_req_t *reqp, cm_scache_t **outpScpp)
  {
      long code;
--- 1004,1017 ----
    done:
      if (volp)
  	cm_PutVolume(volp);
!     if (cellNamep)
!         free(cellNamep);
!     if (volNamep)
!         free(volNamep);
      return code;
  }       
  
! long cm_LookupInternal(cm_scache_t *dscp, clientchar_t *cnamep, long flags, cm_user_t *userp,
                         cm_req_t *reqp, cm_scache_t **outpScpp)
  {
      long code;
***************
*** 1167,1186 ****
      cm_scache_t *mountedScp;
      cm_lookupSearch_t rock;
      int getroot;
  
      memset(&rock, 0, sizeof(rock));
  
      if (dscp->fid.vnode == 1 && dscp->fid.unique == 1
!          && strcmp(namep, "..") == 0) {
          if (dscp->dotdotFid.volume == 0)
              return CM_ERROR_NOSUCHVOLUME;
          rock.fid = dscp->dotdotFid;
          goto haveFid;
!     } else if (strcmp(namep, ".") == 0) {
  	rock.fid = dscp->fid;
  	goto haveFid;
      }
  
      if (flags & CM_FLAG_NOMOUNTCHASE) {
          /* In this case, we should go and call cm_Dir* functions
             directly since the following cm_ApplyDir() function will
--- 1020,1044 ----
      cm_scache_t *mountedScp;
      cm_lookupSearch_t rock;
      int getroot;
+     normchar_t *nnamep = NULL;
+     fschar_t *fnamep = NULL;
  
      memset(&rock, 0, sizeof(rock));
  
      if (dscp->fid.vnode == 1 && dscp->fid.unique == 1
!         && cm_ClientStrCmp(cnamep, _C("..")) == 0) {
          if (dscp->dotdotFid.volume == 0)
              return CM_ERROR_NOSUCHVOLUME;
          rock.fid = dscp->dotdotFid;
          goto haveFid;
!     } else if (cm_ClientStrCmp(cnamep, _C(".")) == 0) {
  	rock.fid = dscp->fid;
  	goto haveFid;
      }
  
+     nnamep = cm_ClientStringToNormStringAlloc(cnamep, -1, NULL);
+     fnamep = cm_ClientStringToFsStringAlloc(cnamep, -1, NULL);
+ 
      if (flags & CM_FLAG_NOMOUNTCHASE) {
          /* In this case, we should go and call cm_Dir* functions
             directly since the following cm_ApplyDir() function will
***************
*** 1194,1205 ****
          code = cm_BeginDirOp(dscp, userp, reqp, CM_DIRLOCK_READ, &dirop);
          if (code == 0) {
  #ifdef USE_BPLUS
!             code = cm_BPlusDirLookup(&dirop, namep, &rock.fid);
              if (code != EINVAL)
                  usedBplus = 1;
              else
  #endif
!                 code = cm_DirLookup(&dirop, namep, &rock.fid);
  
              cm_EndDirOp(&dirop);
          }
--- 1052,1063 ----
          code = cm_BeginDirOp(dscp, userp, reqp, CM_DIRLOCK_READ, &dirop);
          if (code == 0) {
  #ifdef USE_BPLUS
!             code = cm_BPlusDirLookup(&dirop, nnamep, &rock.fid);
              if (code != EINVAL)
                  usedBplus = 1;
              else
  #endif
!                 code = cm_DirLookup(&dirop, fnamep, &rock.fid);
  
              cm_EndDirOp(&dirop);
          }
***************
*** 1225,1237 ****
  
      rock.fid.cell = dscp->fid.cell;
      rock.fid.volume = dscp->fid.volume;
!     rock.searchNamep = namep;
      rock.caseFold = (flags & CM_FLAG_CASEFOLD);
!     rock.hasTilde = ((strchr(namep, '~') != NULL) ? 1 : 0);
  
      /* If NOMOUNTCHASE, bypass DNLC by passing NULL scp pointer */
      code = cm_ApplyDir(dscp, cm_LookupSearchProc, &rock, NULL, userp, reqp,
!                         (flags & CM_FLAG_NOMOUNTCHASE) ? NULL : &tscp);
  
      /* code == 0 means we fell off the end of the dir, while stopnow means
       * that we stopped early, probably because we found the entry we're
--- 1083,1096 ----
  
      rock.fid.cell = dscp->fid.cell;
      rock.fid.volume = dscp->fid.volume;
!     rock.searchNamep = fnamep;
!     rock.nsearchNamep = nnamep;
      rock.caseFold = (flags & CM_FLAG_CASEFOLD);
!     rock.hasTilde = ((cm_ClientStrChr(cnamep, '~') != NULL) ? 1 : 0);
  
      /* If NOMOUNTCHASE, bypass DNLC by passing NULL scp pointer */
      code = cm_ApplyDir(dscp, cm_LookupSearchProc, &rock, NULL, userp, reqp,
!                        (flags & CM_FLAG_NOMOUNTCHASE) ? NULL : &tscp);
  
      /* code == 0 means we fell off the end of the dir, while stopnow means
       * that we stopped early, probably because we found the entry we're
***************
*** 1244,1274 ****
           */
          if (code == CM_ERROR_NOTDIR) {
              if (flags & CM_FLAG_CHECKPATH)
!                 return CM_ERROR_NOSUCHPATH;
              else
!                 return CM_ERROR_NOSUCHFILE;
          }
!         return code;
      }
  
      getroot = (dscp==cm_data.rootSCachep) ;
      if (!rock.found) {
          if (!cm_freelanceEnabled || !getroot) {
              if (flags & CM_FLAG_CHECKPATH)
!                 return CM_ERROR_NOSUCHPATH;
              else
!                 return CM_ERROR_NOSUCHFILE;
          }
!         else if (!strchr(namep, '#') && !strchr(namep, '%') &&
!                  strcmp(namep, "srvsvc") && strcmp(namep, "wkssvc") &&
!                  strcmp(namep, "ipc$")) 
          {
              /* nonexistent dir on freelance root, so add it */
!             char fullname[200] = ".";
              int  found = 0;
  
!             osi_Log1(afsd_logp,"cm_Lookup adding mount for non-existent directory: %s", 
!                       osi_LogSaveString(afsd_logp,namep));
  
              /* 
               * There is an ugly behavior where a share name "foo" will be searched
--- 1103,1136 ----
           */
          if (code == CM_ERROR_NOTDIR) {
              if (flags & CM_FLAG_CHECKPATH)
!                 code = CM_ERROR_NOSUCHPATH;
              else
!                 code = CM_ERROR_NOSUCHFILE;
          }
!         goto done;
      }
  
      getroot = (dscp==cm_data.rootSCachep) ;
      if (!rock.found) {
          if (!cm_freelanceEnabled || !getroot) {
              if (flags & CM_FLAG_CHECKPATH)
!                 code = CM_ERROR_NOSUCHPATH;
              else
!                 code = CM_ERROR_NOSUCHFILE;
!             goto done;
          }
!         else if (!cm_ClientStrChr(cnamep, '#') &&
!                  !cm_ClientStrChr(cnamep, '%') &&
!                  cm_ClientStrCmpI(cnamep, _C("srvsvc")) &&
!                  cm_ClientStrCmpI(cnamep, _C("wkssvc")) &&
!                  cm_ClientStrCmpI(cnamep, _C("ipc$"))) 
          {
              /* nonexistent dir on freelance root, so add it */
!             fschar_t fullname[200] = ".";
              int  found = 0;
  
!             osi_Log1(afsd_logp,"cm_Lookup adding mount for non-existent directory: %S", 
!                      osi_LogSaveClientString(afsd_logp,cnamep));
  
              /* 
               * There is an ugly behavior where a share name "foo" will be searched
***************
*** 1278,1316 ****
               */
  
              code = -1;
!             if (namep[0] == '.') {
!                 if (cm_GetCell_Gen(&namep[1], &fullname[1], CM_FLAG_CREATE)) {
                      found = 1;
                      if (!cm_FreelanceMountPointExists(fullname, 0))
!                         code = cm_FreelanceAddMount(fullname, &fullname[1], "root.cell.", 1, &rock.fid);
!                     if ( stricmp(&namep[1], &fullname[1]) && 
! 						!cm_FreelanceMountPointExists(namep, flags & CM_FLAG_DFS_REFERRAL ? 1 : 0) &&
! 						!cm_FreelanceSymlinkExists(namep, flags & CM_FLAG_DFS_REFERRAL ? 1 : 0))
!                         code = cm_FreelanceAddSymlink(namep, fullname, &rock.fid);
                  }
              } else {
!                 if (cm_GetCell_Gen(namep, fullname, CM_FLAG_CREATE)) {
                      found = 1;
                      if (!cm_FreelanceMountPointExists(fullname, 0))
                          code = cm_FreelanceAddMount(fullname, fullname, "root.cell.", 0, &rock.fid);
!                     if ( stricmp(namep, fullname) && 
! 						!cm_FreelanceMountPointExists(namep, flags & CM_FLAG_DFS_REFERRAL ? 1 : 0) &&
! 						!cm_FreelanceSymlinkExists(namep, flags & CM_FLAG_DFS_REFERRAL ? 1 : 0))
!                         code = cm_FreelanceAddSymlink(namep, fullname, &rock.fid);
                  }
              }
              if (!found || code < 0) {   /* add mount point failed, so give up */
                  if (flags & CM_FLAG_CHECKPATH)
!                     return CM_ERROR_NOSUCHPATH;
                  else
!                     return CM_ERROR_NOSUCHFILE;
              }
              tscp = NULL;   /* to force call of cm_GetSCache */
          } else {
              if (flags & CM_FLAG_CHECKPATH)
!                 return CM_ERROR_NOSUCHPATH;
              else
!                 return CM_ERROR_NOSUCHFILE;
          }
      }
  
--- 1140,1181 ----
               */
  
              code = -1;
!             if (cnamep[0] == '.') {
!                 if (cm_GetCell_Gen(&fnamep[1], &fullname[1], CM_FLAG_CREATE)) {
                      found = 1;
                      if (!cm_FreelanceMountPointExists(fullname, 0))
!                         code = cm_FreelanceAddMount(fullname, &fullname[1], "root.cell.",
!                                                     1, &rock.fid);
!                     if ( cm_FsStrCmpI(&fnamep[1], &fullname[1]) && 
!                          !cm_FreelanceMountPointExists(fnamep, flags & CM_FLAG_DFS_REFERRAL ? 1 : 0) &&
!                          !cm_FreelanceSymlinkExists(fnamep, flags & CM_FLAG_DFS_REFERRAL ? 1 : 0))
!                         code = cm_FreelanceAddSymlink(fnamep, fullname, &rock.fid);
                  }
              } else {
!                 if (cm_GetCell_Gen(fnamep, fullname, CM_FLAG_CREATE)) {
                      found = 1;
                      if (!cm_FreelanceMountPointExists(fullname, 0))
                          code = cm_FreelanceAddMount(fullname, fullname, "root.cell.", 0, &rock.fid);
!                     if ( cm_FsStrCmpI(fnamep, fullname) && 
!                          !cm_FreelanceMountPointExists(fnamep, flags & CM_FLAG_DFS_REFERRAL ? 1 : 0) &&
!                          !cm_FreelanceSymlinkExists(fnamep, flags & CM_FLAG_DFS_REFERRAL ? 1 : 0))
!                         code = cm_FreelanceAddSymlink(fnamep, fullname, &rock.fid);
                  }
              }
              if (!found || code < 0) {   /* add mount point failed, so give up */
                  if (flags & CM_FLAG_CHECKPATH)
!                     code = CM_ERROR_NOSUCHPATH;
                  else
!                     code = CM_ERROR_NOSUCHFILE;
!                 goto done;
              }
              tscp = NULL;   /* to force call of cm_GetSCache */
          } else {
              if (flags & CM_FLAG_CHECKPATH)
!                 code = CM_ERROR_NOSUCHPATH;
              else
!                 code = CM_ERROR_NOSUCHFILE;
!             goto done;
          }
      }
  
***************
*** 1320,1327 ****
          dnlcHit = 0; 
          code = cm_GetSCache(&rock.fid, &tscp, userp, reqp);
          if (code) 
!             return code;
!     }       
      /* tscp is now held */
  
      lock_ObtainWrite(&tscp->rw);
--- 1185,1192 ----
          dnlcHit = 0; 
          code = cm_GetSCache(&rock.fid, &tscp, userp, reqp);
          if (code) 
!             goto done;
!     }
      /* tscp is now held */
  
      lock_ObtainWrite(&tscp->rw);
***************
*** 1330,1336 ****
      if (code) { 
          lock_ReleaseWrite(&tscp->rw);
          cm_ReleaseSCache(tscp);
!         return code;
      }
      cm_SyncOpDone(tscp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
      /* tscp is now locked */
--- 1195,1201 ----
      if (code) { 
          lock_ReleaseWrite(&tscp->rw);
          cm_ReleaseSCache(tscp);
!         goto done;
      }
      cm_SyncOpDone(tscp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
      /* tscp is now locked */
***************
*** 1343,1354 ****
          code = cm_ReadMountPoint(tscp, userp, reqp);
          if (code == 0)
              code = cm_FollowMountPoint(tscp, dscp, userp, reqp,
!                                         &mountedScp);
          lock_ReleaseWrite(&tscp->rw);
          cm_ReleaseSCache(tscp);
!         if (code) {
!             return code;
!         }
          tscp = mountedScp;
      }
      else {
--- 1208,1219 ----
          code = cm_ReadMountPoint(tscp, userp, reqp);
          if (code == 0)
              code = cm_FollowMountPoint(tscp, dscp, userp, reqp,
!                                        &mountedScp);
          lock_ReleaseWrite(&tscp->rw);
          cm_ReleaseSCache(tscp);
!         if (code)
!             goto done;
! 
          tscp = mountedScp;
      }
      else {
***************
*** 1362,1386 ****
      if ( !dnlcHit && !(flags & CM_FLAG_NOMOUNTCHASE) && rock.ExactFound ) {
          /* lock the directory entry to prevent racing callback revokes */
          lock_ObtainRead(&dscp->rw);
!         if ( dscp->cbServerp != NULL && dscp->cbExpires > 0 )
!             cm_dnlcEnter(dscp, namep, tscp);
          lock_ReleaseRead(&dscp->rw);
      }
  
      /* and return */
!     return 0;
  }
  
! int cm_ExpandSysName(char *inp, char *outp, long outSize, unsigned int index)
  {
!     char *tp;
      int prefixCount;
  
!     tp = strrchr(inp, '@');
      if (tp == NULL) 
          return 0;		/* no @sys */
  
!     if (strcmp(tp, "@sys") != 0) 
          return 0;	/* no @sys */
  
      /* caller just wants to know if this is a valid @sys type of name */
--- 1227,1266 ----
      if ( !dnlcHit && !(flags & CM_FLAG_NOMOUNTCHASE) && rock.ExactFound ) {
          /* lock the directory entry to prevent racing callback revokes */
          lock_ObtainRead(&dscp->rw);
!         if ( dscp->cbServerp != NULL && dscp->cbExpires > 0 ) {
!             /* TODO: reuse nnamep from above */
!             if (nnamep) 
!                 free(nnamep);
!             nnamep = cm_ClientStringToNormStringAlloc(cnamep, -1, NULL);
!             cm_dnlcEnter(dscp, nnamep, tscp);
!         }
          lock_ReleaseRead(&dscp->rw);
      }
  
      /* and return */
!   done:
!     if (fnamep) {
!         free (fnamep);
!         fnamep = NULL;
!     }
!     if (nnamep) {
!         free (nnamep);
!         nnamep = NULL;
!     }
! 
!     return code;
  }
  
! int cm_ExpandSysName(clientchar_t *inp, clientchar_t *outp, long outSizeCch, unsigned int index)
  {
!     clientchar_t *tp;
      int prefixCount;
  
!     tp = cm_ClientStrRChr(inp, '@');
      if (tp == NULL) 
          return 0;		/* no @sys */
  
!     if (cm_ClientStrCmp(tp, _C("@sys")) != 0) 
          return 0;	/* no @sys */
  
      /* caller just wants to know if this is a valid @sys type of name */
***************
*** 1393,1413 ****
      /* otherwise generate the properly expanded @sys name */
      prefixCount = (int)(tp - inp);
  
!     strncpy(outp, inp, prefixCount);	/* copy out "a." from "a.@sys" */
      outp[prefixCount] = 0;		/* null terminate the "a." */
!     strcat(outp, cm_sysNameList[index]);/* append i386_nt40 */
      return 1;
  }   
  
! long cm_EvaluateVolumeReference(char * namep, long flags, cm_user_t * userp,
                                  cm_req_t *reqp, cm_scache_t ** outpScpp)
  {
!     long          code = 0;
!     char          cellName[CELL_MAXNAMELEN];
!     char          volumeName[VL_MAXNAMELEN];
      size_t        len;
!     char *        cp;
!     char *        tp;
  
      cm_cell_t *   cellp = NULL;
      cm_volume_t * volp = NULL;
--- 1273,1294 ----
      /* otherwise generate the properly expanded @sys name */
      prefixCount = (int)(tp - inp);
  
!     cm_ClientStrCpyN(outp, outSizeCch, inp, prefixCount);	/* copy out "a." from "a.@sys" */
      outp[prefixCount] = 0;		/* null terminate the "a." */
!     cm_ClientStrCat(outp, outSizeCch, cm_sysNameList[index]);/* append i386_nt40 */
      return 1;
  }   
  
! long cm_EvaluateVolumeReference(clientchar_t * namep, long flags, cm_user_t * userp,
                                  cm_req_t *reqp, cm_scache_t ** outpScpp)
  {
!     afs_uint32    code = 0;
!     fschar_t      cellName[CELL_MAXNAMELEN];
!     fschar_t      volumeName[VL_MAXNAMELEN];
      size_t        len;
!     fschar_t *        cp;
!     fschar_t *        tp;
!     fschar_t *        fnamep = NULL;
  
      cm_cell_t *   cellp = NULL;
      cm_volume_t * volp = NULL;
***************
*** 1416,1425 ****
      int           volType;
      int           mountType = RWVOL;
  
!     osi_Log1(afsd_logp, "cm_EvaluateVolumeReference for string [%s]",
!              osi_LogSaveString(afsd_logp, namep));
  
!     if (strnicmp(namep, CM_PREFIX_VOL, CM_PREFIX_VOL_CCH) != 0) {
          goto _exit_invalid_path;
      }
  
--- 1297,1306 ----
      int           volType;
      int           mountType = RWVOL;
  
!     osi_Log1(afsd_logp, "cm_EvaluateVolumeReference for string [%S]",
!              osi_LogSaveClientString(afsd_logp, namep));
  
!     if (cm_ClientStrCmpNI(namep, _C(CM_PREFIX_VOL), CM_PREFIX_VOL_CCH) != 0) {
          goto _exit_invalid_path;
      }
  
***************
*** 1431,1469 ****
  
       */
  
!     cp = namep + CM_PREFIX_VOL_CCH; /* cp points to cell name, hopefully */
!     tp = strchr(cp, '%');
      if (tp == NULL)
!         tp = strchr(cp, '#');
      if (tp == NULL ||
          (len = tp - cp) == 0 ||
          len > CELL_MAXNAMELEN)
          goto _exit_invalid_path;
!     strncpy(cellName, cp, len);
!     cellName[len] = '\0';
  
      if (*tp == '#')
          mountType = ROVOL;
  
      cp = tp+1;                  /* cp now points to volume, supposedly */
!     strncpy(volumeName, cp, VL_MAXNAMELEN-1);
!     volumeName[VL_MAXNAMELEN - 1] = 0;
  
      /* OK, now we have the cell and the volume */
      osi_Log2(afsd_logp, "   Found cell [%s] and volume [%s]",
!              osi_LogSaveString(afsd_logp, cellName),
!              osi_LogSaveString(afsd_logp, volumeName));
  
      cellp = cm_GetCell(cellName, CM_FLAG_CREATE);
      if (cellp == NULL) {
          goto _exit_invalid_path;
      }
  
!     len = strlen(volumeName);
!     if (len >= 8 && strcmp(volumeName + len - 7, ".backup") == 0)
          volType = BACKVOL;
      else if (len >= 10 &&
!              strcmp(volumeName + len - 9, ".readonly") == 0)
          volType = ROVOL;
      else
          volType = RWVOL;
--- 1312,1349 ----
  
       */
  
!     fnamep = cm_ClientStringToFsStringAlloc(namep, -1, NULL);
!     cp = fnamep + CM_PREFIX_VOL_CCH; /* cp points to cell name, hopefully */
!     tp = cm_FsStrChr(cp, '%');
      if (tp == NULL)
!         tp = cm_FsStrChr(cp, '#');
      if (tp == NULL ||
          (len = tp - cp) == 0 ||
          len > CELL_MAXNAMELEN)
          goto _exit_invalid_path;
!     cm_FsStrCpyN(cellName, lengthof(cellName), cp, len);
  
      if (*tp == '#')
          mountType = ROVOL;
  
      cp = tp+1;                  /* cp now points to volume, supposedly */
!     cm_FsStrCpy(volumeName, lengthof(volumeName), cp);
  
      /* OK, now we have the cell and the volume */
      osi_Log2(afsd_logp, "   Found cell [%s] and volume [%s]",
!              osi_LogSaveFsString(afsd_logp, cellName),
!              osi_LogSaveFsString(afsd_logp, volumeName));
  
      cellp = cm_GetCell(cellName, CM_FLAG_CREATE);
      if (cellp == NULL) {
          goto _exit_invalid_path;
      }
  
!     len = cm_FsStrLen(volumeName);
!     if (len >= 8 && cm_FsStrCmp(volumeName + len - 7, ".backup") == 0)
          volType = BACKVOL;
      else if (len >= 10 &&
!              cm_FsStrCmp(volumeName + len - 9, ".readonly") == 0)
          volType = ROVOL;
      else
          volType = RWVOL;
***************
*** 1491,1497 ****
  
      code = cm_GetSCache(&fid, outpScpp, userp, reqp);
  
!  _exit_cleanup:
      if (volp)
          cm_PutVolume(volp);
  
--- 1371,1380 ----
  
      code = cm_GetSCache(&fid, outpScpp, userp, reqp);
  
!   _exit_cleanup:
!     if (fnamep)
!         free(fnamep);
! 
      if (volp)
          cm_PutVolume(volp);
  
***************
*** 1506,1520 ****
  }
  
  #ifdef DEBUG_REFCOUNT
! long cm_LookupDbg(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
                 cm_req_t *reqp, cm_scache_t **outpScpp, char * file, long line)
  #else
! long cm_Lookup(cm_scache_t *dscp, char *namep, long flags, cm_user_t *userp,
                 cm_req_t *reqp, cm_scache_t **outpScpp)
  #endif
  {
      long code;
!     char tname[AFSPATHMAX];
      int sysNameIndex = 0;
      cm_scache_t *scp = NULL;
  
--- 1389,1403 ----
  }
  
  #ifdef DEBUG_REFCOUNT
! long cm_LookupDbg(cm_scache_t *dscp, clientchar_t *namep, long flags, cm_user_t *userp,
                 cm_req_t *reqp, cm_scache_t **outpScpp, char * file, long line)
  #else
! long cm_Lookup(cm_scache_t *dscp, clientchar_t *namep, long flags, cm_user_t *userp,
                 cm_req_t *reqp, cm_scache_t **outpScpp)
  #endif
  {
      long code;
!     clientchar_t tname[AFSPATHMAX];
      int sysNameIndex = 0;
      cm_scache_t *scp = NULL;
  
***************
*** 1523,1529 ****
      osi_Log2(afsd_logp, "cm_Lookup dscp 0x%p ref %d", dscp, dscp->refCount);
  #endif
  
!     if ( stricmp(namep,SMB_IOCTL_FILENAME_NOSLASH) == 0 ) {
          if (flags & CM_FLAG_CHECKPATH)
              return CM_ERROR_NOSUCHPATH;
          else
--- 1406,1412 ----
      osi_Log2(afsd_logp, "cm_Lookup dscp 0x%p ref %d", dscp, dscp->refCount);
  #endif
  
!     if ( cm_ClientStrCmpI(namep,_C(SMB_IOCTL_FILENAME_NOSLASH)) == 0 ) {
          if (flags & CM_FLAG_CHECKPATH)
              return CM_ERROR_NOSUCHPATH;
          else
***************
*** 1531,1543 ****
      }
  
      if (dscp == cm_data.rootSCachep &&
!         strnicmp(namep, CM_PREFIX_VOL, CM_PREFIX_VOL_CCH) == 0) {
          return cm_EvaluateVolumeReference(namep, flags, userp, reqp, outpScpp);
      }
  
      if (cm_ExpandSysName(namep, NULL, 0, 0) > 0) {
          for ( sysNameIndex = 0; sysNameIndex < MAXNUMSYSNAMES; sysNameIndex++) {
!             code = cm_ExpandSysName(namep, tname, sizeof(tname), sysNameIndex);
              if (code > 0) {
                  code = cm_LookupInternal(dscp, tname, flags, userp, reqp, &scp);
  #ifdef DEBUG_REFCOUNT
--- 1414,1426 ----
      }
  
      if (dscp == cm_data.rootSCachep &&
!         cm_ClientStrCmpNI(namep, _C(CM_PREFIX_VOL), CM_PREFIX_VOL_CCH) == 0) {
          return cm_EvaluateVolumeReference(namep, flags, userp, reqp, outpScpp);
      }
  
      if (cm_ExpandSysName(namep, NULL, 0, 0) > 0) {
          for ( sysNameIndex = 0; sysNameIndex < MAXNUMSYSNAMES; sysNameIndex++) {
!             code = cm_ExpandSysName(namep, tname, lengthof(tname), sysNameIndex);
              if (code > 0) {
                  code = cm_LookupInternal(dscp, tname, flags, userp, reqp, &scp);
  #ifdef DEBUG_REFCOUNT
***************
*** 1580,1586 ****
          return CM_ERROR_NOSUCHFILE;
  }
  
! long cm_Unlink(cm_scache_t *dscp, char *namep, cm_user_t *userp, cm_req_t *reqp)
  {
      long code;
      cm_conn_t *connp;
--- 1463,1490 ----
          return CM_ERROR_NOSUCHFILE;
  }
  
! /*! \brief Unlink a file name
! 
!   Encapsulates a call to RXAFS_RemoveFile().
! 
!   \param[in] dscp cm_scache_t pointing at the directory containing the
!       name to be unlinked.
! 
!   \param[in] fnamep Original name to be unlinked.  This is the
!       name that will be passed into the RXAFS_RemoveFile() call.
!       This parameter is optional.  If not provided, the value will
!       be looked up.
! 
!   \param[in] came Client name to be unlinked.  This name will be used
!       to update the local directory caches.
! 
!   \param[in] userp cm_user_t for the request.
! 
!   \param[in] reqp Request tracker.
!  
!  */
! long cm_Unlink(cm_scache_t *dscp, fschar_t *fnamep, clientchar_t * cnamep,
!                cm_user_t *userp, cm_req_t *reqp)
  {
      long code;
      cm_conn_t *connp;
***************
*** 1591,1606 ****
      struct rx_connection * callp;
      cm_dirOp_t dirop;
      cm_scache_t *scp = NULL;
  
  #ifdef AFS_FREELANCE_CLIENT
      if (cm_freelanceEnabled && dscp == cm_data.rootSCachep) {
          /* deleting a mount point from the root dir. */
!         code = cm_FreelanceRemoveMount(namep);
!         return code;
      }
  #endif  
  
!     code = cm_Lookup(dscp, namep, CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
  
      /* make sure we don't screw up the dir status during the merge */
      code = cm_BeginDirOp(dscp, userp, reqp, CM_DIRLOCK_NONE, &dirop);
--- 1495,1526 ----
      struct rx_connection * callp;
      cm_dirOp_t dirop;
      cm_scache_t *scp = NULL;
+     int free_fnamep = FALSE;
+ 
+     if (fnamep == NULL) {
+         code = -1;
+ #ifdef USE_BPLUS
+         code = cm_BeginDirOp(dscp, userp, reqp, CM_DIRLOCK_READ, &dirop);
+         if (code == 0) {
+             code = cm_BPlusDirLookupOriginalName(&dirop, cnamep, &fnamep);
+             if (code == 0)
+                 free_fnamep = TRUE;
+             cm_EndDirOp(&dirop);
+         }
+ #endif
+         if (code)
+             goto done;
+     }
  
  #ifdef AFS_FREELANCE_CLIENT
      if (cm_freelanceEnabled && dscp == cm_data.rootSCachep) {
          /* deleting a mount point from the root dir. */
!         code = cm_FreelanceRemoveMount(fnamep);
!         goto done;
      }
  #endif  
  
!     code = cm_Lookup(dscp, cnamep, CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
  
      /* make sure we don't screw up the dir status during the merge */
      code = cm_BeginDirOp(dscp, userp, reqp, CM_DIRLOCK_NONE, &dirop);
***************
*** 1611,1617 ****
      lock_ReleaseWrite(&dscp->rw);
      if (code) {
          cm_EndDirOp(&dirop);
!         return code;
      }
  
      /* make the RPC */
--- 1531,1537 ----
      lock_ReleaseWrite(&dscp->rw);
      if (code) {
          cm_EndDirOp(&dirop);
!         goto done;
      }
  
      /* make the RPC */
***************
*** 1622,1633 ****
      osi_Log1(afsd_logp, "CALL RemoveFile scp 0x%p", dscp);
      do {
          code = cm_ConnFromFID(&dscp->fid, userp, reqp, &connp);
!         if (code) 
              continue;
  
          callp = cm_GetRxConn(connp);
!         code = RXAFS_RemoveFile(callp, &afsFid, namep,
!                                  &newDirStatus, &volSync);
          rx_PutConnection(callp);
  
      } while (cm_Analyze(connp, userp, reqp, &dscp->fid, &volSync, NULL, NULL, code));
--- 1542,1553 ----
      osi_Log1(afsd_logp, "CALL RemoveFile scp 0x%p", dscp);
      do {
          code = cm_ConnFromFID(&dscp->fid, userp, reqp, &connp);
!         if (code)
              continue;
  
          callp = cm_GetRxConn(connp);
!         code = RXAFS_RemoveFile(callp, &afsFid, fnamep,
!                                 &newDirStatus, &volSync);
          rx_PutConnection(callp);
  
      } while (cm_Analyze(connp, userp, reqp, &dscp->fid, &volSync, NULL, NULL, code));
***************
*** 1643,1649 ****
          dirop.lockType = CM_DIRLOCK_WRITE;
      }
      lock_ObtainWrite(&dscp->rw);
!     cm_dnlcRemove(dscp, namep);
      cm_SyncOpDone(dscp, NULL, sflags);
      if (code == 0) {
          cm_MergeStatus(NULL, dscp, &newDirStatus, &volSync, userp, CM_MERGEFLAG_DIROP);
--- 1563,1569 ----
          dirop.lockType = CM_DIRLOCK_WRITE;
      }
      lock_ObtainWrite(&dscp->rw);
!     cm_dnlcRemove(dscp, cnamep);
      cm_SyncOpDone(dscp, NULL, sflags);
      if (code == 0) {
          cm_MergeStatus(NULL, dscp, &newDirStatus, &volSync, userp, CM_MERGEFLAG_DIROP);
***************
*** 1656,1665 ****
      }
      lock_ReleaseWrite(&dscp->rw);
  
!     if (code == 0 && cm_CheckDirOpForSingleChange(&dirop)) {
!         cm_DirDeleteEntry(&dirop, namep);
  #ifdef USE_BPLUS
!         cm_BPlusDirDeleteEntry(&dirop, namep);
  #endif
      }
      cm_EndDirOp(&dirop);
--- 1576,1585 ----
      }
      lock_ReleaseWrite(&dscp->rw);
  
!     if (code == 0 && cm_CheckDirOpForSingleChange(&dirop) && cnamep) {
!         cm_DirDeleteEntry(&dirop, fnamep);
  #ifdef USE_BPLUS
!         cm_BPlusDirDeleteEntry(&dirop, cnamep);
  #endif
      }
      cm_EndDirOp(&dirop);
***************
*** 1673,1678 ****
--- 1593,1602 ----
          }
      }
  
+   done:
+     if (free_fnamep)
+         free(fnamep);
+ 
      return code;
  }
  
***************
*** 1744,1756 ****
   * other than the directory containing the symbolic link, then the new root is
   * returned in *newRootScpp, otherwise a null is returned there.
   */
! long cm_AssembleLink(cm_scache_t *linkScp, char *pathSuffixp,
!                       cm_scache_t **newRootScpp, cm_space_t **newSpaceBufferp,
!                       cm_user_t *userp, cm_req_t *reqp)
  {
      long code = 0;
      long len;
!     char *linkp;
      cm_space_t *tsp;
  
      *newRootScpp = NULL;
--- 1668,1680 ----
   * other than the directory containing the symbolic link, then the new root is
   * returned in *newRootScpp, otherwise a null is returned there.
   */
! long cm_AssembleLink(cm_scache_t *linkScp, fschar_t *pathSuffixp,
!                      cm_scache_t **newRootScpp, cm_space_t **newSpaceBufferp,
!                      cm_user_t *userp, cm_req_t *reqp)
  {
      long code = 0;
      long len;
!     fschar_t *linkp;
      cm_space_t *tsp;
  
      *newRootScpp = NULL;
***************
*** 1765,1781 ****
       * bigger than max path length, so we don't really have to worry about
       * being a little conservative here.
       */
!     if (strlen(linkScp->mountPointStringp) + strlen(pathSuffixp) + 2
! 		>= CM_UTILS_SPACESIZE) {
          code = CM_ERROR_TOOBIG;
! 		goto done;
! 	}
  
      tsp = cm_GetSpace();
      linkp = linkScp->mountPointStringp;
      if (strncmp(linkp, cm_mountRoot, cm_mountRootLen) == 0) {
          if (strlen(linkp) > cm_mountRootLen)
!             strcpy(tsp->data, linkp+cm_mountRootLen+1);
          else
              tsp->data[0] = 0;
          *newRootScpp = cm_data.rootSCachep;
--- 1689,1705 ----
       * bigger than max path length, so we don't really have to worry about
       * being a little conservative here.
       */
!     if (cm_FsStrLen(linkScp->mountPointStringp) + cm_FsStrLen(pathSuffixp) + 2
!         >= CM_UTILS_SPACESIZE) {
          code = CM_ERROR_TOOBIG;
!         goto done;
!     }
  
      tsp = cm_GetSpace();
      linkp = linkScp->mountPointStringp;
      if (strncmp(linkp, cm_mountRoot, cm_mountRootLen) == 0) {
          if (strlen(linkp) > cm_mountRootLen)
!             StringCbCopyA((char *) tsp->data, sizeof(tsp->data), linkp+cm_mountRootLen+1);
          else
              tsp->data[0] = 0;
          *newRootScpp = cm_data.rootSCachep;
***************
*** 1787,1793 ****
              if (strnicmp(p, "all", 3) == 0)
                  p += 4;
  
!             strcpy(tsp->data, p);
              for (p = tsp->data; *p; p++) {
                  if (*p == '\\')
                      *p = '/';
--- 1711,1717 ----
              if (strnicmp(p, "all", 3) == 0)
                  p += 4;
  
!             StringCbCopyA(tsp->data, sizeof(tsp->data), p);
              for (p = tsp->data; *p; p++) {
                  if (*p == '\\')
                      *p = '/';
***************
*** 1796,1815 ****
              cm_HoldSCache(cm_data.rootSCachep);
          } else {
              linkScp->fileType = CM_SCACHETYPE_DFSLINK;
!             strcpy(tsp->data, linkp);
              code = CM_ERROR_PATH_NOT_COVERED;
          }
      } else if ( linkScp->fileType == CM_SCACHETYPE_DFSLINK ||
                  !strnicmp(linkp, "msdfs:", (len = (long)strlen("msdfs:"))) ) {
          linkScp->fileType = CM_SCACHETYPE_DFSLINK;
!         strcpy(tsp->data, linkp);
          code = CM_ERROR_PATH_NOT_COVERED;
      } else if (*linkp == '\\' || *linkp == '/') {
  #if 0   
          /* formerly, this was considered to be from the AFS root,
           * but this seems to create problems.  instead, we will just
           * reject the link */
!         strcpy(tsp->data, linkp+1);
          *newRootScpp = cm_data.rootSCachep;
          cm_HoldSCache(cm_data.rootSCachep);
  #else
--- 1720,1739 ----
              cm_HoldSCache(cm_data.rootSCachep);
          } else {
              linkScp->fileType = CM_SCACHETYPE_DFSLINK;
!             StringCchCopyA(tsp->data,lengthof(tsp->data), linkp);
              code = CM_ERROR_PATH_NOT_COVERED;
          }
      } else if ( linkScp->fileType == CM_SCACHETYPE_DFSLINK ||
                  !strnicmp(linkp, "msdfs:", (len = (long)strlen("msdfs:"))) ) {
          linkScp->fileType = CM_SCACHETYPE_DFSLINK;
!         StringCchCopyA(tsp->data,lengthof(tsp->data), linkp);
          code = CM_ERROR_PATH_NOT_COVERED;
      } else if (*linkp == '\\' || *linkp == '/') {
  #if 0   
          /* formerly, this was considered to be from the AFS root,
           * but this seems to create problems.  instead, we will just
           * reject the link */
!         StringCchCopyA(tsp->data,lengthof(tsp->data), linkp+1);
          *newRootScpp = cm_data.rootSCachep;
          cm_HoldSCache(cm_data.rootSCachep);
  #else
***************
*** 1817,1861 ****
           * the user can see what the link points to
           */
          linkScp->fileType = CM_SCACHETYPE_INVALID;
!         strcpy(tsp->data, linkp);
          code = CM_ERROR_NOSUCHPATH;
  #endif  
      } else {
          /* a relative link */
!         strcpy(tsp->data, linkp);
      }
      if (pathSuffixp[0] != 0) {	/* if suffix string is non-null */
!         strcat(tsp->data, "\\");
!         strcat(tsp->data, pathSuffixp);
      }
!     if (code == 0)
          *newSpaceBufferp = tsp;
!     else {
          cm_FreeSpace(tsp);
  
!         if (code == CM_ERROR_PATH_NOT_COVERED && reqp->tidPathp && reqp->relPathp)
              cm_VolStatus_Notify_DFS_Mapping(linkScp, reqp->tidPathp, reqp->relPathp);
      }
  
!   done:
      lock_ReleaseWrite(&linkScp->rw);
      return code;
  }
  #ifdef DEBUG_REFCOUNT
! long cm_NameIDbg(cm_scache_t *rootSCachep, char *pathp, long flags,
!                cm_user_t *userp, char *tidPathp, cm_req_t *reqp, cm_scache_t **outScpp, 
! 	       char * file, long line)
  #else
! long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
!                cm_user_t *userp, char *tidPathp, cm_req_t *reqp, cm_scache_t **outScpp)
  #endif
  {
      long code;
!     char *tp;			/* ptr moving through input buffer */
!     char tc;			/* temp char */
      int haveComponent;		/* has new component started? */
!     char component[AFSPATHMAX];	/* this is the new component */
!     char *cp;			/* component name being assembled */
      cm_scache_t *tscp;		/* current location in the hierarchy */
      cm_scache_t *nscp;		/* next dude down */
      cm_scache_t *dirScp;	/* last dir we searched */
--- 1741,1791 ----
           * the user can see what the link points to
           */
          linkScp->fileType = CM_SCACHETYPE_INVALID;
!         StringCchCopyA(tsp->data,lengthof(tsp->data), linkp);
          code = CM_ERROR_NOSUCHPATH;
  #endif  
      } else {
          /* a relative link */
!         StringCchCopyA(tsp->data,lengthof(tsp->data), linkp);
      }
      if (pathSuffixp[0] != 0) {	/* if suffix string is non-null */
!         StringCchCatA(tsp->data,lengthof(tsp->data), "\\");
!         StringCchCatA(tsp->data,lengthof(tsp->data), pathSuffixp);
      }
!     if (code == 0) {
!         clientchar_t * cpath = cm_FsStringToClientStringAlloc(tsp->data, -1, NULL);
!         cm_ClientStrCpy(tsp->wdata, lengthof(tsp->wdata), cpath);
!         free(cpath);
          *newSpaceBufferp = tsp;
!     } else {
          cm_FreeSpace(tsp);
  
!         if (code == CM_ERROR_PATH_NOT_COVERED && reqp->tidPathp && reqp->relPathp) {
              cm_VolStatus_Notify_DFS_Mapping(linkScp, reqp->tidPathp, reqp->relPathp);
+         }
      }
  
!  done:
      lock_ReleaseWrite(&linkScp->rw);
      return code;
  }
  #ifdef DEBUG_REFCOUNT
! long cm_NameIDbg(cm_scache_t *rootSCachep, clientchar_t *pathp, long flags,
!                  cm_user_t *userp, clientchar_t *tidPathp, cm_req_t *reqp,
!                  cm_scache_t **outScpp, 
!                  char * file, long line)
  #else
! long cm_NameI(cm_scache_t *rootSCachep, clientchar_t *pathp, long flags,
!               cm_user_t *userp, clientchar_t *tidPathp,
!               cm_req_t *reqp, cm_scache_t **outScpp)
  #endif
  {
      long code;
!     clientchar_t *tp;			/* ptr moving through input buffer */
!     clientchar_t tc;			/* temp char */
      int haveComponent;		/* has new component started? */
!     clientchar_t component[AFSPATHMAX];	/* this is the new component */
!     clientchar_t *cp;			/* component name being assembled */
      cm_scache_t *tscp;		/* current location in the hierarchy */
      cm_scache_t *nscp;		/* next dude down */
      cm_scache_t *dirScp;	/* last dir we searched */
***************
*** 1864,1870 ****
      cm_space_t *psp;		/* space for current path, if we've hit
      * any symlinks */
      cm_space_t *tempsp;		/* temp vbl */
!     char *restp;		/* rest of the pathname to interpret */
      int symlinkCount;		/* count of # of symlinks traversed */
      int extraFlag;		/* avoid chasing mt pts for dir cmd */
      int phase = 1;		/* 1 = tidPathp, 2 = pathp */
--- 1794,1800 ----
      cm_space_t *psp;		/* space for current path, if we've hit
      * any symlinks */
      cm_space_t *tempsp;		/* temp vbl */
!     clientchar_t *restp;		/* rest of the pathname to interpret */
      int symlinkCount;		/* count of # of symlinks traversed */
      int extraFlag;		/* avoid chasing mt pts for dir cmd */
      int phase = 1;		/* 1 = tidPathp, 2 = pathp */
***************
*** 1875,1883 ****
  
  #ifdef DEBUG_REFCOUNT
      afsi_log("%s:%d cm_NameI rootscp 0x%p ref %d", file, line, rootSCachep, rootSCachep->refCount);
!     osi_Log4(afsd_logp,"cm_NameI rootscp 0x%p path %s tidpath %s flags 0x%x",
! 	      rootSCachep, pathp ? pathp : "<NULL>", tidPathp ? tidPathp : "<NULL>", 
! 	      flags);
  #endif
  
      tp = tidPathp;
--- 1805,1813 ----
  
  #ifdef DEBUG_REFCOUNT
      afsi_log("%s:%d cm_NameI rootscp 0x%p ref %d", file, line, rootSCachep, rootSCachep->refCount);
!     osi_Log4(afsd_logp,"cm_NameI rootscp 0x%p path %S tidpath %S flags 0x%x",
!              rootSCachep, pathp ? pathp : "<NULL>", tidPathp ? tidPathp : "<NULL>", 
!              flags);
  #endif
  
      tp = tidPathp;
***************
*** 1886,1892 ****
          phase = 2;
      }
      if (tp == NULL) {
!         tp = "";
      }
      haveComponent = 0;
      psp = NULL;
--- 1816,1822 ----
          phase = 2;
      }
      if (tp == NULL) {
!         tp = _C("");
      }
      haveComponent = 0;
      psp = NULL;
***************
*** 1933,1948 ****
  		if ((flags & CM_FLAG_DIRSEARCH) && tc == 0)
  		    extraFlag = CM_FLAG_NOMOUNTCHASE;
  		code = cm_Lookup(tscp, component,
! 				  flags | extraFlag,
! 				  userp, reqp, &nscp);
  
                  if (code == 0) {
!                     if (!strcmp(component,"..") || !strcmp(component,".")) {
                          /* 
!                          * roll back the fid list until we find the fid 
!                          * that matches where we are now.  Its not necessarily
!                          * one or two fids because they might have been 
!                          * symlinks or mount points or both that were crossed.  
                           */
                          for ( i=fid_count-1; i>=0; i--) {
                              if (!cm_FidCmp(&nscp->fid, &fids[i]))
--- 1863,1880 ----
  		if ((flags & CM_FLAG_DIRSEARCH) && tc == 0)
  		    extraFlag = CM_FLAG_NOMOUNTCHASE;
  		code = cm_Lookup(tscp, component,
!                                  flags | extraFlag,
!                                  userp, reqp, &nscp);
  
                  if (code == 0) {
!                     if (!cm_ClientStrCmp(component,_C("..")) ||
!                         !cm_ClientStrCmp(component,_C("."))) {
                          /* 
!                          * roll back the fid list until we find the
!                          * fid that matches where we are now.  Its not
!                          * necessarily one or two fids because they
!                          * might have been symlinks or mount points or
!                          * both that were crossed.
                           */
                          for ( i=fid_count-1; i>=0; i--) {
                              if (!cm_FidCmp(&nscp->fid, &fids[i]))
***************
*** 1972,1979 ****
  		    if (psp) 
  			cm_FreeSpace(psp);
  		    if ((code == CM_ERROR_NOSUCHFILE || code == CM_ERROR_BPLUS_NOMATCH) && 
!                          tscp->fileType == CM_SCACHETYPE_SYMLINK) 
!                     {
  			osi_Log0(afsd_logp,"cm_NameI code CM_ERROR_NOSUCHPATH");
  			return CM_ERROR_NOSUCHPATH;
  		    } else {
--- 1904,1910 ----
  		    if (psp) 
  			cm_FreeSpace(psp);
  		    if ((code == CM_ERROR_NOSUCHFILE || code == CM_ERROR_BPLUS_NOMATCH) && 
!                         tscp->fileType == CM_SCACHETYPE_SYMLINK) {
  			osi_Log0(afsd_logp,"cm_NameI code CM_ERROR_NOSUCHPATH");
  			return CM_ERROR_NOSUCHPATH;
  		    } else {
***************
*** 1997,2004 ****
                      break;
                  }
  
!                 /* now, if tscp is a symlink, we should follow
!                  * it and assemble the path again.
                   */
                  lock_ObtainWrite(&tscp->rw);
                  code = cm_SyncOp(tscp, NULL, userp, reqp, 0,
--- 1928,1935 ----
                      break;
                  }
  
!                 /* now, if tscp is a symlink, we should follow it and
!                  * assemble the path again.
                   */
                  lock_ObtainWrite(&tscp->rw);
                  code = cm_SyncOp(tscp, NULL, userp, reqp, 0,
***************
*** 2032,2041 ****
                          return CM_ERROR_TOO_MANY_SYMLINKS;
                      }
                      if (tc == 0) 
!                         restp = "";
                      else 
                          restp = tp;
!                     code = cm_AssembleLink(tscp, restp, &linkScp, &tempsp, userp, reqp);
  
                      if (code == 0 && linkScp != NULL) {
                          if (linkScp == cm_data.rootSCachep) 
--- 1963,1980 ----
                          return CM_ERROR_TOO_MANY_SYMLINKS;
                      }
                      if (tc == 0) 
!                         restp = _C("");
                      else 
                          restp = tp;
! 
!                     {
!                         fschar_t * frestp;
! 
!                         /* TODO: make this better */
!                         frestp = cm_ClientStringToFsStringAlloc(restp, -1, NULL);
!                         code = cm_AssembleLink(tscp, frestp, &linkScp, &tempsp, userp, reqp);
!                         free(frestp);
!                     }
  
                      if (code == 0 && linkScp != NULL) {
                          if (linkScp == cm_data.rootSCachep) 
***************
*** 2077,2083 ****
                      if (psp) 
                          cm_FreeSpace(psp);
                      psp = tempsp;
!                     tp = psp->data;
                      cm_ReleaseSCache(tscp);
                      tscp = linkScp;
                      linkScp = NULL;
--- 2016,2022 ----
                      if (psp) 
                          cm_FreeSpace(psp);
                      psp = tempsp;
!                     tp = psp->wdata;
                      cm_ReleaseSCache(tscp);
                      tscp = linkScp;
                      linkScp = NULL;
***************
*** 2175,2183 ****
          cm_HoldSCache(dscp);
      }
  
!     code = cm_NameI(newRootScp, spacep->data,
!                      CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW | CM_FLAG_DIRSEARCH,
!                      userp, NULL, reqp, outScpp);
  
      if (code == CM_ERROR_NOSUCHFILE || code == CM_ERROR_BPLUS_NOMATCH)
          code = CM_ERROR_NOSUCHPATH;
--- 2114,2122 ----
          cm_HoldSCache(dscp);
      }
  
!     code = cm_NameI(newRootScp, spacep->wdata,
!                     CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW | CM_FLAG_DIRSEARCH,
!                     userp, NULL, reqp, outScpp);
  
      if (code == CM_ERROR_NOSUCHFILE || code == CM_ERROR_BPLUS_NOMATCH)
          code = CM_ERROR_NOSUCHPATH;
***************
*** 2196,2218 ****
      return code;
  }
  
- /* make this big enough so that one buffer of dir pages won't overflow.  We'll
-  * check anyway, but we want to minimize the chance that we have to leave stuff
-  * unstat'd.
-  */
- #define CM_BULKMAX		(3 * AFSCBMAX)
- 
- /* rock for bulk stat calls */
- typedef struct cm_bulkStat {
-     osi_hyper_t bufOffset;	/* only do it for things in this buffer page */
- 
-     /* info for the actual call */
-     int counter;			/* next free slot */
-     AFSFid fids[CM_BULKMAX];
-     AFSFetchStatus stats[CM_BULKMAX];
-     AFSCallBack callbacks[CM_BULKMAX];
- } cm_bulkStat_t;
- 
  /* for a given entry, make sure that it isn't in the stat cache, and then
   * add it to the list of file IDs to be obtained.
   *
--- 2135,2140 ----
***************
*** 2292,2307 ****
      return 0;
  }       
  
- /* called with a write locked scp and a pointer to a buffer.  Make bulk stat
-  * calls on all undeleted files in the page of the directory specified.
-  */
  afs_int32
! cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp, cm_user_t *userp,
! 	       cm_req_t *reqp)
  {
!     long code;
!     cm_bulkStat_t bb;	/* this is *BIG*, probably 16K or so;
!                          * watch for stack problems */
      AFSCBFids fidStruct;
      AFSBulkStats statStruct;
      cm_conn_t *connp;
--- 2214,2223 ----
      return 0;
  }       
  
  afs_int32
! cm_TryBulkStatRPC(cm_scache_t *dscp, cm_bulkStat_t *bbp, cm_user_t *userp, cm_req_t *reqp)
  {
!     afs_int32 code = 0;
      AFSCBFids fidStruct;
      AFSBulkStats statStruct;
      cm_conn_t *connp;
***************
*** 2316,2356 ****
      cm_fid_t tfid;
      struct rx_connection * callp;
      int inlinebulk = 0;		/* Did we use InlineBulkStatus RPC or not? */
! 
!     osi_Log1(afsd_logp, "cm_TryBulkStat dir 0x%p", dscp);
! 
!     /* should be on a buffer boundary */
!     osi_assertx((offsetp->LowPart & (cm_data.buf_blockSize - 1)) == 0, "invalid offset");
! 
!     memset(&bb, 0, sizeof(bb));
!     bb.bufOffset = *offsetp;
! 
!     lock_ReleaseWrite(&dscp->rw);
!     /* first, assemble the file IDs we need to stat */
!     code = cm_ApplyDir(dscp, cm_TryBulkProc, (void *) &bb, offsetp, userp, reqp, NULL);
! 
!     /* if we failed, bail out early */
!     if (code && code != CM_ERROR_STOPNOW) {
!         lock_ObtainWrite(&dscp->rw);
!         return code;
!     }
! 
      /* otherwise, we may have one or more bulk stat's worth of stuff in bb;
       * make the calls to create the entries.  Handle AFSCBMAX files at a
       * time.
       */
!     filex = 0;
!     while (filex < bb.counter) {
!         filesThisCall = bb.counter - filex;
          if (filesThisCall > AFSCBMAX) 
              filesThisCall = AFSCBMAX;
  
          fidStruct.AFSCBFids_len = filesThisCall;
!         fidStruct.AFSCBFids_val = &bb.fids[filex];
          statStruct.AFSBulkStats_len = filesThisCall;
!         statStruct.AFSBulkStats_val = &bb.stats[filex];
          callbackStruct.AFSCBs_len = filesThisCall;
!         callbackStruct.AFSCBs_val = &bb.callbacks[filex];
          cm_StartCallbackGrantingCall(NULL, &cbReq);
          osi_Log1(afsd_logp, "CALL BulkStatus, %d entries", filesThisCall);
          do {
--- 2232,2253 ----
      cm_fid_t tfid;
      struct rx_connection * callp;
      int inlinebulk = 0;		/* Did we use InlineBulkStatus RPC or not? */
!         
      /* otherwise, we may have one or more bulk stat's worth of stuff in bb;
       * make the calls to create the entries.  Handle AFSCBMAX files at a
       * time.
       */
!     for (filex = 0; filex < bbp->counter; filex += filesThisCall) {
!         filesThisCall = bbp->counter - filex;
          if (filesThisCall > AFSCBMAX) 
              filesThisCall = AFSCBMAX;
  
          fidStruct.AFSCBFids_len = filesThisCall;
!         fidStruct.AFSCBFids_val = &bbp->fids[filex];
          statStruct.AFSBulkStats_len = filesThisCall;
!         statStruct.AFSBulkStats_val = &bbp->stats[filex];
          callbackStruct.AFSCBs_len = filesThisCall;
!         callbackStruct.AFSCBs_val = &bbp->callbacks[filex];
          cm_StartCallbackGrantingCall(NULL, &cbReq);
          osi_Log1(afsd_logp, "CALL BulkStatus, %d entries", filesThisCall);
          do {
***************
*** 2394,2400 ****
          /* otherwise, we should do the merges */
          for (i = 0; i<filesThisCall; i++) {
              j = filex + i;
!             cm_SetFid(&tfid, dscp->fid.cell, bb.fids[j].Volume, bb.fids[j].Vnode, bb.fids[j].Unique);
              code = cm_GetSCache(&tfid, &scp, userp, reqp);
              if (code != 0) 
                  continue;
--- 2291,2297 ----
          /* otherwise, we should do the merges */
          for (i = 0; i<filesThisCall; i++) {
              j = filex + i;
!             cm_SetFid(&tfid, dscp->fid.cell, bbp->fids[j].Volume, bbp->fids[j].Vnode, bbp->fids[j].Unique);
              code = cm_GetSCache(&tfid, &scp, userp, reqp);
              if (code != 0) 
                  continue;
***************
*** 2419,2427 ****
                           | CM_SCACHEFLAG_STORING
                           | CM_SCACHEFLAG_SIZESTORING))) {
                  cm_EndCallbackGrantingCall(scp, &cbReq,
!                                             &bb.callbacks[j],
                                              CM_CALLBACK_MAINTAINCOUNT);
!                 cm_MergeStatus(dscp, scp, &bb.stats[j], &volSync, userp, 0);
              }       
              lock_ReleaseWrite(&scp->rw);
              cm_ReleaseSCache(scp);
--- 2316,2324 ----
                           | CM_SCACHEFLAG_STORING
                           | CM_SCACHEFLAG_SIZESTORING))) {
                  cm_EndCallbackGrantingCall(scp, &cbReq,
!                                             &bbp->callbacks[j],
                                              CM_CALLBACK_MAINTAINCOUNT);
!                 cm_MergeStatus(dscp, scp, &bbp->stats[j], &volSync, userp, 0);
              }       
              lock_ReleaseWrite(&scp->rw);
              cm_ReleaseSCache(scp);
***************
*** 2429,2448 ****
          /* now tell it to drop the count,
           * after doing the vnode processing above */
          cm_EndCallbackGrantingCall(NULL, &cbReq, NULL, 0);
- 
-         filex += filesThisCall;
      }	/* while there are still more files to process */
-     lock_ObtainWrite(&dscp->rw);
  
      /* If we did the InlineBulk RPC pull out the return code and log it */
      if (inlinebulk) {
! 	if ((&bb.stats[0])->errorCode) {
  	    osi_Log1(afsd_logp, "cm_TryBulkStat bulk stat error: %d", 
! 		     (&bb.stats[0])->errorCode);
  	}
      }
  
!     osi_Log0(afsd_logp, "END cm_TryBulkStat");
      return 0;
  }       
  
--- 2326,2380 ----
          /* now tell it to drop the count,
           * after doing the vnode processing above */
          cm_EndCallbackGrantingCall(NULL, &cbReq, NULL, 0);
      }	/* while there are still more files to process */
  
      /* If we did the InlineBulk RPC pull out the return code and log it */
      if (inlinebulk) {
! 	if ((&bbp->stats[0])->errorCode) {
  	    osi_Log1(afsd_logp, "cm_TryBulkStat bulk stat error: %d", 
! 		     (&bbp->stats[0])->errorCode);
!             code = (&bbp->stats[0])->errorCode;
  	}
      }
  
!     return code;
! }
! 
! /* called with a write locked scp and a pointer to a buffer.  Make bulk stat
!  * calls on all undeleted files in the page of the directory specified.
!  */
! afs_int32
! cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp, cm_user_t *userp,
! 	       cm_req_t *reqp)
! {
!     afs_int32 code;
!     cm_bulkStat_t *bbp;
! 
!     osi_Log1(afsd_logp, "cm_TryBulkStat dir 0x%p", dscp);
! 
!     /* should be on a buffer boundary */
!     osi_assertx((offsetp->LowPart & (cm_data.buf_blockSize - 1)) == 0, "invalid offset");
! 
!     bbp = malloc(sizeof(cm_bulkStat_t));
!     memset(bbp, 0, sizeof(cm_bulkStat_t));
!     bbp->bufOffset = *offsetp;
! 
!     lock_ReleaseWrite(&dscp->rw);
!     /* first, assemble the file IDs we need to stat */
!     code = cm_ApplyDir(dscp, cm_TryBulkProc, (void *) bbp, offsetp, userp, reqp, NULL);
! 
!     /* if we failed, bail out early */
!     if (code && code != CM_ERROR_STOPNOW) {
!         free(bbp);
!         lock_ObtainWrite(&dscp->rw);
!         return code;
!     }
! 
!     code = cm_TryBulkStatRPC(dscp, bbp, userp, reqp);
!     osi_Log1(afsd_logp, "END cm_TryBulkStat code 0x%x", code);
! 
!     lock_ObtainWrite(&dscp->rw);
!     free(bbp);
      return 0;
  }       
  
***************
*** 2653,2659 ****
      return code;
  }       
  
! long cm_Create(cm_scache_t *dscp, char *namep, long flags, cm_attr_t *attrp,
                 cm_scache_t **scpp, cm_user_t *userp, cm_req_t *reqp)
  {       
      cm_conn_t *connp;
--- 2585,2591 ----
      return code;
  }       
  
! long cm_Create(cm_scache_t *dscp, clientchar_t *cnamep, long flags, cm_attr_t *attrp,
                 cm_scache_t **scpp, cm_user_t *userp, cm_req_t *reqp)
  {       
      cm_conn_t *connp;
***************
*** 2671,2681 ****
      AFSVolSync volSync;
      struct rx_connection * callp;
      cm_dirOp_t dirop;
  
      /* can't create names with @sys in them; must expand it manually first.
       * return "invalid request" if they try.
       */
!     if (cm_ExpandSysName(namep, NULL, 0, 0)) {
          return CM_ERROR_ATSYS;
      }
  
--- 2603,2614 ----
      AFSVolSync volSync;
      struct rx_connection * callp;
      cm_dirOp_t dirop;
+     fschar_t * fnamep = NULL;
  
      /* can't create names with @sys in them; must expand it manually first.
       * return "invalid request" if they try.
       */
!     if (cm_ExpandSysName(cnamep, NULL, 0, 0)) {
          return CM_ERROR_ATSYS;
      }
  
***************
*** 2707,2712 ****
--- 2640,2647 ----
      }
      didEnd = 0;
  
+     fnamep = cm_ClientStringToFsStringAlloc(cnamep, -1, NULL);
+ 
      cm_StatusFromAttr(&inStatus, NULL, attrp);
  
      /* try the RPC now */
***************
*** 2721,2727 ****
          dirAFSFid.Unique = dscp->fid.unique;
  
          callp = cm_GetRxConn(connp);
!         code = RXAFS_CreateFile(connp->callp, &dirAFSFid, namep,
                                   &inStatus, &newAFSFid, &newFileStatus,
                                   &updatedDirStatus, &newFileCallback,
                                   &volSync);
--- 2656,2662 ----
          dirAFSFid.Unique = dscp->fid.unique;
  
          callp = cm_GetRxConn(connp);
!         code = RXAFS_CreateFile(connp->callp, &dirAFSFid, fnamep,
                                   &inStatus, &newAFSFid, &newFileStatus,
                                   &updatedDirStatus, &newFileCallback,
                                   &volSync);
***************
*** 2760,2768 ****
  	    scp->creator = userp;		/* remember who created it */
              if (!cm_HaveCallback(scp)) {
                  cm_MergeStatus(dscp, scp, &newFileStatus, &volSync,
!                                 userp, 0);
                  cm_EndCallbackGrantingCall(scp, &cbReq,
!                                             &newFileCallback, 0);
                  didEnd = 1;     
              }       
              lock_ReleaseWrite(&scp->rw);
--- 2695,2703 ----
  	    scp->creator = userp;		/* remember who created it */
              if (!cm_HaveCallback(scp)) {
                  cm_MergeStatus(dscp, scp, &newFileStatus, &volSync,
!                                userp, 0);
                  cm_EndCallbackGrantingCall(scp, &cbReq,
!                                            &newFileCallback, 0);
                  didEnd = 1;     
              }       
              lock_ReleaseWrite(&scp->rw);
***************
*** 2775,2787 ****
          cm_EndCallbackGrantingCall(NULL, &cbReq, NULL, 0);
  
      if (scp && cm_CheckDirOpForSingleChange(&dirop)) {
!         cm_DirCreateEntry(&dirop, namep, &newFid);
  #ifdef USE_BPLUS
!         cm_BPlusDirCreateEntry(&dirop, namep, &newFid);
  #endif
      }
      cm_EndDirOp(&dirop);
  
      return code;
  }       
  
--- 2710,2725 ----
          cm_EndCallbackGrantingCall(NULL, &cbReq, NULL, 0);
  
      if (scp && cm_CheckDirOpForSingleChange(&dirop)) {
!         cm_DirCreateEntry(&dirop, fnamep, &newFid);
  #ifdef USE_BPLUS
!         cm_BPlusDirCreateEntry(&dirop, cnamep, &newFid);
  #endif
      }
      cm_EndDirOp(&dirop);
  
+     if (fnamep)
+         free(fnamep);
+ 
      return code;
  }       
  
***************
*** 2808,2814 ****
      return code;
  }
  
! long cm_MakeDir(cm_scache_t *dscp, char *namep, long flags, cm_attr_t *attrp,
                   cm_user_t *userp, cm_req_t *reqp)
  {
      cm_conn_t *connp;
--- 2746,2752 ----
      return code;
  }
  
! long cm_MakeDir(cm_scache_t *dscp, clientchar_t *cnamep, long flags, cm_attr_t *attrp,
                   cm_user_t *userp, cm_req_t *reqp)
  {
      cm_conn_t *connp;
***************
*** 2826,2836 ****
      AFSVolSync volSync;
      struct rx_connection * callp;
      cm_dirOp_t dirop;
  
      /* can't create names with @sys in them; must expand it manually first.
       * return "invalid request" if they try.
       */
!     if (cm_ExpandSysName(namep, NULL, 0, 0)) {
          return CM_ERROR_ATSYS;
      }
  
--- 2764,2775 ----
      AFSVolSync volSync;
      struct rx_connection * callp;
      cm_dirOp_t dirop;
+     fschar_t * fnamep = NULL;
  
      /* can't create names with @sys in them; must expand it manually first.
       * return "invalid request" if they try.
       */
!     if (cm_ExpandSysName(cnamep, NULL, 0, 0)) {
          return CM_ERROR_ATSYS;
      }
  
***************
*** 2862,2867 ****
--- 2801,2807 ----
      }
      didEnd = 0;
  
+     fnamep = cm_ClientStringToFsStringAlloc(cnamep, -1, NULL);
      cm_StatusFromAttr(&inStatus, NULL, attrp);
  
      /* try the RPC now */
***************
*** 2876,2889 ****
          dirAFSFid.Unique = dscp->fid.unique;
  
          callp = cm_GetRxConn(connp);
!         code = RXAFS_MakeDir(connp->callp, &dirAFSFid, namep,
                                &inStatus, &newAFSFid, &newDirStatus,
                                &updatedDirStatus, &newDirCallback,
                                &volSync);
          rx_PutConnection(callp);
  
      } while (cm_Analyze(connp, userp, reqp,
!                          &dscp->fid, &volSync, NULL, &cbReq, code));
      code = cm_MapRPCError(code, reqp);
          
      if (code)
--- 2816,2829 ----
          dirAFSFid.Unique = dscp->fid.unique;
  
          callp = cm_GetRxConn(connp);
!         code = RXAFS_MakeDir(connp->callp, &dirAFSFid, fnamep,
                                &inStatus, &newAFSFid, &newDirStatus,
                                &updatedDirStatus, &newDirCallback,
                                &volSync);
          rx_PutConnection(callp);
  
      } while (cm_Analyze(connp, userp, reqp,
!                         &dscp->fid, &volSync, NULL, &cbReq, code));
      code = cm_MapRPCError(code, reqp);
          
      if (code)
***************
*** 2929,2946 ****
          cm_EndCallbackGrantingCall(NULL, &cbReq, NULL, 0);
  
      if (scp && cm_CheckDirOpForSingleChange(&dirop)) {
!         cm_DirCreateEntry(&dirop, namep, &newFid);
  #ifdef USE_BPLUS
!         cm_BPlusDirCreateEntry(&dirop, namep, &newFid);
  #endif
      }
      cm_EndDirOp(&dirop);
  
      /* and return error code */
      return code;
  }       
  
! long cm_Link(cm_scache_t *dscp, char *namep, cm_scache_t *sscp, long flags,
               cm_user_t *userp, cm_req_t *reqp)
  {
      cm_conn_t *connp;
--- 2869,2888 ----
          cm_EndCallbackGrantingCall(NULL, &cbReq, NULL, 0);
  
      if (scp && cm_CheckDirOpForSingleChange(&dirop)) {
!         cm_DirCreateEntry(&dirop, fnamep, &newFid);
  #ifdef USE_BPLUS
!         cm_BPlusDirCreateEntry(&dirop, cnamep, &newFid);
  #endif
      }
      cm_EndDirOp(&dirop);
  
+     free(fnamep);
+ 
      /* and return error code */
      return code;
  }       
  
! long cm_Link(cm_scache_t *dscp, clientchar_t *cnamep, cm_scache_t *sscp, long flags,
               cm_user_t *userp, cm_req_t *reqp)
  {
      cm_conn_t *connp;
***************
*** 2952,2957 ****
--- 2894,2900 ----
      AFSVolSync volSync;
      struct rx_connection * callp;
      cm_dirOp_t dirop;
+     fschar_t * fnamep = NULL;
  
      if (dscp->fid.cell != sscp->fid.cell ||
          dscp->fid.volume != sscp->fid.volume) {
***************
*** 2968,2973 ****
--- 2911,2918 ----
      if (code)
          return code;
  
+     fnamep = cm_ClientStringToFsStringAlloc(cnamep, -1, NULL);
+ 
      /* try the RPC now */
      osi_Log1(afsd_logp, "CALL Link scp 0x%p", dscp);
      do {
***************
*** 2983,2989 ****
          existingAFSFid.Unique = sscp->fid.unique;
  
          callp = cm_GetRxConn(connp);
!         code = RXAFS_Link(callp, &dirAFSFid, namep, &existingAFSFid,
              &newLinkStatus, &updatedDirStatus, &volSync);
          rx_PutConnection(callp);
          osi_Log1(afsd_logp,"  RXAFS_Link returns 0x%x", code);
--- 2928,2934 ----
          existingAFSFid.Unique = sscp->fid.unique;
  
          callp = cm_GetRxConn(connp);
!         code = RXAFS_Link(callp, &dirAFSFid, fnamep, &existingAFSFid,
              &newLinkStatus, &updatedDirStatus, &volSync);
          rx_PutConnection(callp);
          osi_Log1(afsd_logp,"  RXAFS_Link returns 0x%x", code);
***************
*** 3011,3028 ****
  
      if (code == 0) {
          if (cm_CheckDirOpForSingleChange(&dirop)) {
!             cm_DirCreateEntry(&dirop, namep, &sscp->fid);
  #ifdef USE_BPLUS
!             cm_BPlusDirCreateEntry(&dirop, namep, &sscp->fid);
  #endif
          }
      }
      cm_EndDirOp(&dirop);
  
      return code;
  }
  
! long cm_SymLink(cm_scache_t *dscp, char *namep, char *contentsp, long flags,
                  cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp)
  {
      cm_conn_t *connp;
--- 2956,2975 ----
  
      if (code == 0) {
          if (cm_CheckDirOpForSingleChange(&dirop)) {
!             cm_DirCreateEntry(&dirop, fnamep, &sscp->fid);
  #ifdef USE_BPLUS
!             cm_BPlusDirCreateEntry(&dirop, cnamep, &sscp->fid);
  #endif
          }
      }
      cm_EndDirOp(&dirop);
  
+     free(fnamep);
+ 
      return code;
  }
  
! long cm_SymLink(cm_scache_t *dscp, clientchar_t *cnamep, fschar_t *contentsp, long flags,
                  cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp)
  {
      cm_conn_t *connp;
***************
*** 3037,3042 ****
--- 2984,2990 ----
      AFSVolSync volSync;
      struct rx_connection * callp;
      cm_dirOp_t dirop;
+     fschar_t *fnamep = NULL;
  
      /* before starting the RPC, mark that we're changing the directory data,
       * so that someone who does a chmod on the dir will wait until our
***************
*** 3052,3057 ****
--- 3000,3007 ----
          return code;
      }
  
+     fnamep = cm_ClientStringToFsStringAlloc(cnamep, -1, NULL);
+ 
      cm_StatusFromAttr(&inStatus, NULL, attrp);
  
      /* try the RPC now */
***************
*** 3066,3072 ****
          dirAFSFid.Unique = dscp->fid.unique;
  
          callp = cm_GetRxConn(connp);
!         code = RXAFS_Symlink(callp, &dirAFSFid, namep, contentsp,
                                &inStatus, &newAFSFid, &newLinkStatus,
                                &updatedDirStatus, &volSync);
          rx_PutConnection(callp);
--- 3016,3022 ----
          dirAFSFid.Unique = dscp->fid.unique;
  
          callp = cm_GetRxConn(connp);
!         code = RXAFS_Symlink(callp, &dirAFSFid, fnamep, contentsp,
                                &inStatus, &newAFSFid, &newLinkStatus,
                                &updatedDirStatus, &volSync);
          rx_PutConnection(callp);
***************
*** 3095,3103 ****
          if (cm_CheckDirOpForSingleChange(&dirop)) {
              cm_SetFid(&newFid, dscp->fid.cell, dscp->fid.volume, newAFSFid.Vnode, newAFSFid.Unique);
  
!             cm_DirCreateEntry(&dirop, namep, &newFid);
  #ifdef USE_BPLUS
!             cm_BPlusDirCreateEntry(&dirop, namep, &newFid);
  #endif
          }
      }
--- 3045,3053 ----
          if (cm_CheckDirOpForSingleChange(&dirop)) {
              cm_SetFid(&newFid, dscp->fid.cell, dscp->fid.volume, newAFSFid.Vnode, newAFSFid.Unique);
  
!             cm_DirCreateEntry(&dirop, fnamep, &newFid);
  #ifdef USE_BPLUS
!             cm_BPlusDirCreateEntry(&dirop, cnamep, &newFid);
  #endif
          }
      }
***************
*** 3121,3133 ****
              cm_ReleaseSCache(scp);
          }
      }
  	
      /* and return error code */
      return code;
  }
  
! long cm_RemoveDir(cm_scache_t *dscp, char *namep, cm_user_t *userp,
!                    cm_req_t *reqp)
  {
      cm_conn_t *connp;
      long code;
--- 3071,3103 ----
              cm_ReleaseSCache(scp);
          }
      }
+ 
+     free(fnamep);
  	
      /* and return error code */
      return code;
  }
  
! /*! \brief Remove a directory
! 
!   Encapsulates a call to RXAFS_RemoveDir().
! 
!   \param[in] dscp cm_scache_t for the directory containing the
!       directory to be removed.
! 
!   \param[in] fnamep This will be the original name of the directory
!       as known to the file server.   It will be passed in to RXAFS_RemoveDir().
!       This parameter is optional.  If it is not provided the value
!       will be looked up.
! 
!   \param[in] cnamep Normalized name used to update the local
!       directory caches.
! 
!   \param[in] userp cm_user_t for the request.
! 
!   \param[in] reqp Request tracker.
! */
! long cm_RemoveDir(cm_scache_t *dscp, fschar_t *fnamep, clientchar_t *cnamep, cm_user_t *userp, cm_req_t *reqp)
  {
      cm_conn_t *connp;
      long code;
***************
*** 3138,3145 ****
      struct rx_connection * callp;
      cm_dirOp_t dirop;
      cm_scache_t *scp = NULL;
  
!     code = cm_Lookup(dscp, namep, CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
  
      /* before starting the RPC, mark that we're changing the directory data,
       * so that someone who does a chmod on the dir will wait until our
--- 3108,3133 ----
      struct rx_connection * callp;
      cm_dirOp_t dirop;
      cm_scache_t *scp = NULL;
+     int free_fnamep = FALSE;
+ 
+     if (fnamep == NULL) {
+         code = -1;
+ #ifdef USE_BPLUS
+         code = cm_BeginDirOp(dscp, userp, reqp, CM_DIRLOCK_READ, &dirop);
+         if (code == 0) {
+             code = cm_BPlusDirLookupOriginalName(&dirop, cnamep, &fnamep);
+             if (code == 0)
+                 free_fnamep = TRUE;
+             cm_EndDirOp(&dirop);
+         }
+ #endif
+         if (code)
+             goto done;
+     }
  
!     code = cm_Lookup(dscp, cnamep, CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
!     if (code)
!         goto done;
  
      /* before starting the RPC, mark that we're changing the directory data,
       * so that someone who does a chmod on the dir will wait until our
***************
*** 3151,3157 ****
      lock_ReleaseWrite(&dscp->rw);
      if (code) {
          cm_EndDirOp(&dirop);
!         return code;
      }
      didEnd = 0;
  
--- 3139,3145 ----
      lock_ReleaseWrite(&dscp->rw);
      if (code) {
          cm_EndDirOp(&dirop);
!         goto done;
      }
      didEnd = 0;
  
***************
*** 3167,3178 ****
          dirAFSFid.Unique = dscp->fid.unique;
  
          callp = cm_GetRxConn(connp);
!         code = RXAFS_RemoveDir(callp, &dirAFSFid, namep,
!                                 &updatedDirStatus, &volSync);
          rx_PutConnection(callp);
  
      } while (cm_Analyze(connp, userp, reqp,
!                          &dscp->fid, &volSync, NULL, NULL, code));
      code = cm_MapRPCErrorRmdir(code, reqp);
  
      if (code)
--- 3155,3166 ----
          dirAFSFid.Unique = dscp->fid.unique;
  
          callp = cm_GetRxConn(connp);
!         code = RXAFS_RemoveDir(callp, &dirAFSFid, fnamep,
!                                &updatedDirStatus, &volSync);
          rx_PutConnection(callp);
  
      } while (cm_Analyze(connp, userp, reqp,
!                         &dscp->fid, &volSync, NULL, NULL, code));
      code = cm_MapRPCErrorRmdir(code, reqp);
  
      if (code)
***************
*** 3187,3202 ****
      lock_ObtainWrite(&dscp->rw);
      cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA);
      if (code == 0) {
!         cm_dnlcRemove(dscp, namep); 
          cm_MergeStatus(NULL, dscp, &updatedDirStatus, &volSync, userp, CM_MERGEFLAG_DIROP);
      }
      lock_ReleaseWrite(&dscp->rw);
  
      if (code == 0) {
!         if (cm_CheckDirOpForSingleChange(&dirop)) {
!             cm_DirDeleteEntry(&dirop, namep);
  #ifdef USE_BPLUS
!             cm_BPlusDirDeleteEntry(&dirop, namep);
  #endif
          }
      }
--- 3175,3190 ----
      lock_ObtainWrite(&dscp->rw);
      cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA);
      if (code == 0) {
!         cm_dnlcRemove(dscp, cnamep); 
          cm_MergeStatus(NULL, dscp, &updatedDirStatus, &volSync, userp, CM_MERGEFLAG_DIROP);
      }
      lock_ReleaseWrite(&dscp->rw);
  
      if (code == 0) {
!         if (cm_CheckDirOpForSingleChange(&dirop) && cnamep != NULL) {
!             cm_DirDeleteEntry(&dirop, fnamep);
  #ifdef USE_BPLUS
!             cm_BPlusDirDeleteEntry(&dirop, cnamep);
  #endif
          }
      }
***************
*** 3211,3216 ****
--- 3199,3208 ----
          }
      }
  
+   done:
+     if (free_fnamep)
+         free(fnamep);
+ 
      /* and return error code */
      return code;
  }
***************
*** 3233,3240 ****
      return 0;
  }       
  
! long cm_Rename(cm_scache_t *oldDscp, char *oldNamep, cm_scache_t *newDscp,
!                 char *newNamep, cm_user_t *userp, cm_req_t *reqp)
  {
      cm_conn_t *connp;
      long code;
--- 3225,3257 ----
      return 0;
  }       
  
! /*! \brief Rename a file or directory
! 
!   Encapsulates a RXAFS_Rename() call.
! 
!   \param[in] oldDscp cm_scache_t for the directory containing the old
!       name.
! 
!   \param[in] oldNamep The original old name known to the file server.
!       This is the name that will be passed into the RXAFS_Rename().
!       If it is not provided, it will be looked up.
! 
!   \param[in] normalizedOldNamep Normalized old name.  This is used for
!   updating local directory caches.
! 
!   \param[in] newDscp cm_scache_t for the directory containing the new
!   name.
! 
!   \param[in] newNamep New name. Normalized.
! 
!   \param[in] userp cm_user_t for the request.
! 
!   \param[in,out] reqp Request tracker.
! 
! */
! long cm_Rename(cm_scache_t *oldDscp, fschar_t *oldNamep, clientchar_t *cOldNamep,
!                cm_scache_t *newDscp, clientchar_t *cNewNamep, cm_user_t *userp,
!                cm_req_t *reqp)
  {
      cm_conn_t *connp;
      long code;
***************
*** 3250,3255 ****
--- 3267,3290 ----
      cm_fid_t   fileFid;
      int        diropCode = -1;
      cm_dirOp_t newDirOp;
+     fschar_t * newNamep = NULL;
+     int free_oldNamep = FALSE;
+ 
+     if (oldNamep == NULL) {
+         code = -1;
+ #ifdef USE_BPLUS
+         code = cm_BeginDirOp(oldDscp, userp, reqp, CM_DIRLOCK_READ, &oldDirOp);
+         if (code == 0) {
+             code = cm_BPlusDirLookupOriginalName(&oldDirOp, cOldNamep, &oldNamep);
+             if (code == 0)
+                 free_oldNamep = TRUE;
+             cm_EndDirOp(&oldDirOp);
+         }
+ #endif
+         if (code)
+             goto done;
+     }
+ 
  
      /* before starting the RPC, mark that we're changing the directory data,
       * so that someone who does a chmod on the dir will wait until our call
***************
*** 3258,3271 ****
       */
      if (oldDscp == newDscp) {
          /* check for identical names */
!         if (strcmp(oldNamep, newNamep) == 0)
!             return CM_ERROR_RENAME_IDENTICAL;
  
          oneDir = 1;
          cm_BeginDirOp(oldDscp, userp, reqp, CM_DIRLOCK_NONE, &oldDirOp);
          lock_ObtainWrite(&oldDscp->rw);
!         cm_dnlcRemove(oldDscp, oldNamep);
!         cm_dnlcRemove(oldDscp, newNamep);
          code = cm_SyncOp(oldDscp, NULL, userp, reqp, 0,
                            CM_SCACHESYNC_STOREDATA);
          lock_ReleaseWrite(&oldDscp->rw);
--- 3293,3308 ----
       */
      if (oldDscp == newDscp) {
          /* check for identical names */
!         if (cm_ClientStrCmp(cOldNamep, cNewNamep) == 0) {
!             code = CM_ERROR_RENAME_IDENTICAL;
!             goto done;
!         }
  
          oneDir = 1;
          cm_BeginDirOp(oldDscp, userp, reqp, CM_DIRLOCK_NONE, &oldDirOp);
          lock_ObtainWrite(&oldDscp->rw);
!         cm_dnlcRemove(oldDscp, cOldNamep);
!         cm_dnlcRemove(oldDscp, cNewNamep);
          code = cm_SyncOp(oldDscp, NULL, userp, reqp, 0,
                            CM_SCACHESYNC_STOREDATA);
          lock_ReleaseWrite(&oldDscp->rw);
***************
*** 3277,3307 ****
          /* two distinct dir vnodes */
          oneDir = 0;
          if (oldDscp->fid.cell != newDscp->fid.cell ||
!              oldDscp->fid.volume != newDscp->fid.volume)
!             return CM_ERROR_CROSSDEVLINK;
  
          /* shouldn't happen that we have distinct vnodes for two
           * different files, but could due to deliberate attack, or
           * stale info.  Avoid deadlocks and quit now.
           */
!         if (oldDscp->fid.vnode == newDscp->fid.vnode)
!             return CM_ERROR_CROSSDEVLINK;
  
          if (oldDscp->fid.vnode < newDscp->fid.vnode) {
              cm_BeginDirOp(oldDscp, userp, reqp, CM_DIRLOCK_NONE, &oldDirOp);
              lock_ObtainWrite(&oldDscp->rw);
!             cm_dnlcRemove(oldDscp, oldNamep);
              code = cm_SyncOp(oldDscp, NULL, userp, reqp, 0,
!                               CM_SCACHESYNC_STOREDATA);
              lock_ReleaseWrite(&oldDscp->rw);
              if (code != 0)
                  cm_EndDirOp(&oldDirOp);
              if (code == 0) {
                  cm_BeginDirOp(newDscp, userp, reqp, CM_DIRLOCK_NONE, &newDirOp);
                  lock_ObtainWrite(&newDscp->rw);
!                 cm_dnlcRemove(newDscp, newNamep);
                  code = cm_SyncOp(newDscp, NULL, userp, reqp, 0,
!                                   CM_SCACHESYNC_STOREDATA);
                  lock_ReleaseWrite(&newDscp->rw);
                  if (code) {
                      cm_EndDirOp(&newDirOp);
--- 3314,3348 ----
          /* two distinct dir vnodes */
          oneDir = 0;
          if (oldDscp->fid.cell != newDscp->fid.cell ||
!              oldDscp->fid.volume != newDscp->fid.volume) {
!             code = CM_ERROR_CROSSDEVLINK;
!             goto done;
!         }
  
          /* shouldn't happen that we have distinct vnodes for two
           * different files, but could due to deliberate attack, or
           * stale info.  Avoid deadlocks and quit now.
           */
!         if (oldDscp->fid.vnode == newDscp->fid.vnode) {
!             code = CM_ERROR_CROSSDEVLINK;
!             goto done;
!         }
  
          if (oldDscp->fid.vnode < newDscp->fid.vnode) {
              cm_BeginDirOp(oldDscp, userp, reqp, CM_DIRLOCK_NONE, &oldDirOp);
              lock_ObtainWrite(&oldDscp->rw);
!             cm_dnlcRemove(oldDscp, cOldNamep);
              code = cm_SyncOp(oldDscp, NULL, userp, reqp, 0,
!                              CM_SCACHESYNC_STOREDATA);
              lock_ReleaseWrite(&oldDscp->rw);
              if (code != 0)
                  cm_EndDirOp(&oldDirOp);
              if (code == 0) {
                  cm_BeginDirOp(newDscp, userp, reqp, CM_DIRLOCK_NONE, &newDirOp);
                  lock_ObtainWrite(&newDscp->rw);
!                 cm_dnlcRemove(newDscp, cNewNamep);
                  code = cm_SyncOp(newDscp, NULL, userp, reqp, 0,
!                                  CM_SCACHESYNC_STOREDATA);
                  lock_ReleaseWrite(&newDscp->rw);
                  if (code) {
                      cm_EndDirOp(&newDirOp);
***************
*** 3319,3325 ****
              /* lock the new vnode entry first */
              cm_BeginDirOp(newDscp, userp, reqp, CM_DIRLOCK_NONE, &newDirOp);
              lock_ObtainWrite(&newDscp->rw);
!             cm_dnlcRemove(newDscp, newNamep);
              code = cm_SyncOp(newDscp, NULL, userp, reqp, 0,
                                CM_SCACHESYNC_STOREDATA);
              lock_ReleaseWrite(&newDscp->rw);
--- 3360,3366 ----
              /* lock the new vnode entry first */
              cm_BeginDirOp(newDscp, userp, reqp, CM_DIRLOCK_NONE, &newDirOp);
              lock_ObtainWrite(&newDscp->rw);
!             cm_dnlcRemove(newDscp, cNewNamep);
              code = cm_SyncOp(newDscp, NULL, userp, reqp, 0,
                                CM_SCACHESYNC_STOREDATA);
              lock_ReleaseWrite(&newDscp->rw);
***************
*** 3328,3334 ****
              if (code == 0) {
                  cm_BeginDirOp(oldDscp, userp, reqp, CM_DIRLOCK_NONE, &oldDirOp);
                  lock_ObtainWrite(&oldDscp->rw);
!                 cm_dnlcRemove(oldDscp, oldNamep);
                  code = cm_SyncOp(oldDscp, NULL, userp, reqp, 0,
                                    CM_SCACHESYNC_STOREDATA);
                  lock_ReleaseWrite(&oldDscp->rw);
--- 3369,3375 ----
              if (code == 0) {
                  cm_BeginDirOp(oldDscp, userp, reqp, CM_DIRLOCK_NONE, &oldDirOp);
                  lock_ObtainWrite(&oldDscp->rw);
!                 cm_dnlcRemove(oldDscp, cOldNamep);
                  code = cm_SyncOp(oldDscp, NULL, userp, reqp, 0,
                                    CM_SCACHESYNC_STOREDATA);
                  lock_ReleaseWrite(&oldDscp->rw);
***************
*** 3346,3356 ****
          }
      }	/* two distinct vnodes */
  
!     if (code) {
!         return code;
!     }
      didEnd = 0;
  
      /* try the RPC now */
      osi_Log2(afsd_logp, "CALL Rename old scp 0x%p new scp 0x%p", 
                oldDscp, newDscp);
--- 3387,3399 ----
          }
      }	/* two distinct vnodes */
  
!     if (code) 
!         goto done;
! 
      didEnd = 0;
  
+     newNamep = cm_ClientStringToFsStringAlloc(cNewNamep, -1, NULL);
+ 
      /* try the RPC now */
      osi_Log2(afsd_logp, "CALL Rename old scp 0x%p new scp 0x%p", 
                oldDscp, newDscp);
***************
*** 3368,3376 ****
  
          callp = cm_GetRxConn(connp);
          code = RXAFS_Rename(callp, &oldDirAFSFid, oldNamep,
!                              &newDirAFSFid, newNamep,
!                              &updatedOldDirStatus, &updatedNewDirStatus,
!                              &volSync);
          rx_PutConnection(callp);
  
      } while (cm_Analyze(connp, userp, reqp, &oldDscp->fid,
--- 3411,3419 ----
  
          callp = cm_GetRxConn(connp);
          code = RXAFS_Rename(callp, &oldDirAFSFid, oldNamep,
!                             &newDirAFSFid, newNamep,
!                             &updatedOldDirStatus, &updatedNewDirStatus,
!                             &volSync);
          rx_PutConnection(callp);
  
      } while (cm_Analyze(connp, userp, reqp, &oldDscp->fid,
***************
*** 3392,3405 ****
  
      if (code == 0)
          cm_MergeStatus(NULL, oldDscp, &updatedOldDirStatus, &volSync,
!                         userp, CM_MERGEFLAG_DIROP);
      lock_ReleaseWrite(&oldDscp->rw);
  
      if (code == 0) {
          if (cm_CheckDirOpForSingleChange(&oldDirOp)) {
  
  #ifdef USE_BPLUS
!             diropCode = cm_BPlusDirLookup(&oldDirOp, oldNamep, &fileFid);
              if (diropCode == CM_ERROR_INEXACT_MATCH)
                  diropCode = 0;
              else if (diropCode == EINVAL)
--- 3435,3448 ----
  
      if (code == 0)
          cm_MergeStatus(NULL, oldDscp, &updatedOldDirStatus, &volSync,
!                        userp, CM_MERGEFLAG_DIROP);
      lock_ReleaseWrite(&oldDscp->rw);
  
      if (code == 0) {
          if (cm_CheckDirOpForSingleChange(&oldDirOp)) {
  
  #ifdef USE_BPLUS
!             diropCode = cm_BPlusDirLookup(&oldDirOp, cOldNamep, &fileFid);
              if (diropCode == CM_ERROR_INEXACT_MATCH)
                  diropCode = 0;
              else if (diropCode == EINVAL)
***************
*** 3410,3423 ****
                  if (oneDir) {
                      diropCode = cm_DirCreateEntry(&oldDirOp, newNamep, &fileFid);
  #ifdef USE_BPLUS
!                     cm_BPlusDirCreateEntry(&oldDirOp, newNamep, &fileFid);
  #endif
                  }
! 
                  if (diropCode == 0) { 
                      diropCode = cm_DirDeleteEntry(&oldDirOp, oldNamep);
  #ifdef USE_BPLUS
!                     cm_BPlusDirDeleteEntry(&oldDirOp, oldNamep);
  #endif
                  }
              }
--- 3453,3466 ----
                  if (oneDir) {
                      diropCode = cm_DirCreateEntry(&oldDirOp, newNamep, &fileFid);
  #ifdef USE_BPLUS
!                     cm_BPlusDirCreateEntry(&oldDirOp, cNewNamep, &fileFid);
  #endif
                  }
!                 
                  if (diropCode == 0) { 
                      diropCode = cm_DirDeleteEntry(&oldDirOp, oldNamep);
  #ifdef USE_BPLUS
!                     cm_BPlusDirDeleteEntry(&oldDirOp, cOldNamep);
  #endif
                  }
              }
***************
*** 3445,3457 ****
              if (diropCode == 0 && cm_CheckDirOpForSingleChange(&newDirOp)) {
                  cm_DirCreateEntry(&newDirOp, newNamep, &fileFid);
  #ifdef USE_BPLUS
!                 cm_BPlusDirCreateEntry(&newDirOp, newNamep, &fileFid);
  #endif
              }
          }
          cm_EndDirOp(&newDirOp);
      }
  
      /* and return error code */
      return code;
  }
--- 3488,3506 ----
              if (diropCode == 0 && cm_CheckDirOpForSingleChange(&newDirOp)) {
                  cm_DirCreateEntry(&newDirOp, newNamep, &fileFid);
  #ifdef USE_BPLUS
!                 cm_BPlusDirCreateEntry(&newDirOp, cNewNamep, &fileFid);
  #endif
              }
          }
          cm_EndDirOp(&newDirOp);
      }
  
+   done:
+     if (free_oldNamep)
+         free(oldNamep);
+ 
+     free(newNamep);
+ 
      /* and return error code */
      return code;
  }
Index: openafs/src/WINNT/afsd/cm_vnodeops.h
diff -c openafs/src/WINNT/afsd/cm_vnodeops.h:1.14.4.9 openafs/src/WINNT/afsd/cm_vnodeops.h:1.14.4.12
*** openafs/src/WINNT/afsd/cm_vnodeops.h:1.14.4.9	Sun Mar  9 11:25:01 2008
--- openafs/src/WINNT/afsd/cm_vnodeops.h	Mon Jul 14 09:01:31 2008
***************
*** 18,29 ****
  
  /* parms for attribute setting call */
  typedef struct cm_attr {
! 	int mask;
! 	time_t clientModTime;
!         osi_hyper_t length;
! 	int unixModeBits;
!         long owner;
!         long group;
  } cm_attr_t;
  
  #define CM_ATTRMASK_CLIENTMODTIME	1	/* set if field is valid */
--- 18,29 ----
  
  /* parms for attribute setting call */
  typedef struct cm_attr {
!     int         mask;
!     time_t      clientModTime;
!     osi_hyper_t length;
!     int         unixModeBits;
!     long        owner;
!     long        group;
  } cm_attr_t;
  
  #define CM_ATTRMASK_CLIENTMODTIME	1	/* set if field is valid */
***************
*** 34,51 ****
  
  /* type of rock for lookup's searches */
  typedef struct cm_lookupSearch {
!         cm_fid_t fid;
!         char *searchNamep;
!         int found;
!         int LCfound, UCfound, NCfound, ExactFound;
!         int caseFold;
!         int hasTilde;
  } cm_lookupSearch_t;
  
  #include "cm_dir.h"
  
  typedef int (*cm_DirFuncp_t)(struct cm_scache *, struct cm_dirEntry *, void *,
! 	osi_hyper_t *entryOffsetp);
  
  /* Special path syntax for direct references to volumes
  
--- 34,52 ----
  
  /* type of rock for lookup's searches */
  typedef struct cm_lookupSearch {
!     cm_fid_t      fid;
!     fschar_t     *searchNamep;
!     normchar_t   *nsearchNamep;
!     int           found;
!     int           LCfound, UCfound, NCfound, ExactFound;
!     int           caseFold;
!     int           hasTilde;
  } cm_lookupSearch_t;
  
  #include "cm_dir.h"
  
  typedef int (*cm_DirFuncp_t)(struct cm_scache *, struct cm_dirEntry *, void *,
!                              osi_hyper_t *entryOffsetp);
  
  /* Special path syntax for direct references to volumes
  
***************
*** 60,165 ****
  
  /* arrays */
  
! extern unsigned char cm_foldUpper[];
  
  /* functions */
  
! extern int cm_NoneLower(char *s);
  
! extern int cm_NoneUpper(char *s);
! 
! extern int cm_Is8Dot3(char *namep);
  
  extern int cm_stricmp(const char *, const char *);
  
- extern void cm_Gen8Dot3Name(struct cm_dirEntry *dep, char *shortName,
- 	char **shortNameEndp);
- 
- #define cm_Gen8Dot3Name(dep,shortName,shortNameEndp) \
- cm_Gen8Dot3NameInt((dep)->name, &(dep)->fid, shortName, shortNameEndp)
- 
- extern void cm_Gen8Dot3NameInt(const char * longname, cm_dirFid_t * pfid,
-                                char *shortName, char **shortNameEndp);
- 
  extern long cm_ReadMountPoint(cm_scache_t *scp, cm_user_t *userp,
                                cm_req_t *reqp);
  
! extern long cm_EvaluateVolumeReference(char * namep, long flags, cm_user_t * userp,
                                         cm_req_t *reqp, cm_scache_t ** outpScpp);
  
  #ifdef DEBUG_REFCOUNT
! extern long cm_NameIDbg(cm_scache_t *rootSCachep, char *pathp, long flags,
! 	cm_user_t *userp, char *tidPathp, cm_req_t *reqp,
! 	cm_scache_t **outScpp, char *, long);
! 
! extern long cm_LookupDbg(cm_scache_t *dscp, char *namep, long flags,
! 	cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp, char *, long);
  
  #define cm_Lookup(a,b,c,d,e,f)  cm_LookupDbg(a,b,c,d,e,f,__FILE__,__LINE__)
  #define cm_NameI(a,b,c,d,e,f,g) cm_NameIDbg(a,b,c,d,e,f,g,__FILE__,__LINE__)
  #else
! extern long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
! 	cm_user_t *userp, char *tidPathp, cm_req_t *reqp,
! 	cm_scache_t **outScpp);
! extern long cm_Lookup(cm_scache_t *dscp, char *namep, long flags,
! 	cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp);
  #endif
  
! extern long cm_LookupInternal(cm_scache_t *dscp, char *namep, long flags,
                                cm_user_t *userp, cm_req_t *reqp, 
                                cm_scache_t **outpScpp);
  
  extern afs_int32 cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp,
! 	cm_user_t *userp, cm_req_t *reqp);
  
  extern long cm_SetAttr(cm_scache_t *scp, cm_attr_t *attrp, cm_user_t *userp,
! 	cm_req_t *reqp);
  
! extern long cm_Create(cm_scache_t *scp, char *namep, long flags,
! 	cm_attr_t *attrp, cm_scache_t **scpp, cm_user_t *userp, cm_req_t *reqp);
  
  extern long cm_FSync(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
  
  extern void cm_StatusFromAttr(struct AFSStoreStatus *statusp,
! 	struct cm_scache *scp, struct cm_attr *attrp);
  
! extern long cm_Unlink(cm_scache_t *dscp, char *namep, cm_user_t *userp,
! 	cm_req_t *reqp);
  
  extern 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, 
! 	cm_scache_t **retscp);
  
! extern long cm_MakeDir(cm_scache_t *dscp, char *lastNamep, long flags,
! 	cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
  
! extern long cm_RemoveDir(cm_scache_t *dscp, char *lastNamep, cm_user_t *userp,
! 	cm_req_t *reqp);
  
! extern long cm_Rename(cm_scache_t *oldDscp, char *oldLastNamep,
! 	cm_scache_t *newDscp, char *newLastNamep, cm_user_t *userp,
! 	cm_req_t *reqp);
  
  extern long cm_HandleLink(cm_scache_t *linkScp, struct cm_user *userp,
! 	cm_req_t *reqp);
  
! extern long cm_Link(cm_scache_t *dscp, char *namep, cm_scache_t *sscp,
!     long flags, cm_user_t *userp, cm_req_t *reqp);
  
! extern long cm_SymLink(cm_scache_t *dscp, char *namep, char *contentsp,
! 	long flags, cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
  
! extern long cm_AssembleLink(cm_scache_t *linkScp, char *pathSuffixp,
                              cm_scache_t **newRootScpp, cm_space_t **newSpaceBufferp,
                              cm_user_t *userp, cm_req_t *reqp);
  
! extern int cm_ExpandSysName(char *inp, char *outp, long outSize,
                              unsigned int sysNameIndex);
  
  extern long cm_Open(cm_scache_t *scp, int type, cm_user_t *userp);
  
  extern long cm_CheckOpen(cm_scache_t *scp, int openMode, int trunc,
! 	cm_user_t *userp, cm_req_t *reqp);
  
  /*
   * Combinations of file opening access bits for AFS.
--- 61,159 ----
  
  /* arrays */
  
! extern fschar_t cm_foldUpper[];
  
  /* functions */
  
! extern int cm_NoneLower(normchar_t *s);
  
! extern int cm_NoneUpper(normchar_t *s);
  
  extern int cm_stricmp(const char *, const char *);
  
  extern long cm_ReadMountPoint(cm_scache_t *scp, cm_user_t *userp,
                                cm_req_t *reqp);
  
! extern long cm_EvaluateVolumeReference(clientchar_t * namep, long flags, cm_user_t * userp,
                                         cm_req_t *reqp, cm_scache_t ** outpScpp);
  
  #ifdef DEBUG_REFCOUNT
! extern long cm_NameIDbg(cm_scache_t *rootSCachep, clientchar_t *pathp, long flags,
!                         cm_user_t *userp, clientchar_t *tidPathp, cm_req_t *reqp,
!                         cm_scache_t **outScpp, char *, long);
! 
! extern long cm_LookupDbg(cm_scache_t *dscp, clientchar_t *namep, long flags,
!                          cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp,
!                          char *, long);
  
  #define cm_Lookup(a,b,c,d,e,f)  cm_LookupDbg(a,b,c,d,e,f,__FILE__,__LINE__)
  #define cm_NameI(a,b,c,d,e,f,g) cm_NameIDbg(a,b,c,d,e,f,g,__FILE__,__LINE__)
  #else
! extern long cm_NameI(cm_scache_t *rootSCachep, clientchar_t *pathp, long flags,
!                      cm_user_t *userp, clientchar_t *tidPathp, cm_req_t *reqp,
!                      cm_scache_t **outScpp);
! extern long cm_Lookup(cm_scache_t *dscp, clientchar_t *namep, long flags,
!                       cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp);
  #endif
  
! extern long cm_LookupInternal(cm_scache_t *dscp, clientchar_t *namep, long flags,
                                cm_user_t *userp, cm_req_t *reqp, 
                                cm_scache_t **outpScpp);
  
  extern afs_int32 cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp,
!                                 cm_user_t *userp, cm_req_t *reqp);
  
  extern long cm_SetAttr(cm_scache_t *scp, cm_attr_t *attrp, cm_user_t *userp,
!                        cm_req_t *reqp);
  
! extern long cm_Create(cm_scache_t *scp, clientchar_t *namep, long flags,
!                       cm_attr_t *attrp, cm_scache_t **scpp,
!                       cm_user_t *userp, cm_req_t *reqp);
  
  extern long cm_FSync(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
  
  extern void cm_StatusFromAttr(struct AFSStoreStatus *statusp,
!                               struct cm_scache *scp, struct cm_attr *attrp);
  
! extern long cm_Unlink(cm_scache_t *dscp, fschar_t *fnamep,
!                       clientchar_t *cnamep,
!                       cm_user_t *userp, cm_req_t *reqp);
  
  extern 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, 
!                         cm_scache_t **retscp);
  
! extern long cm_MakeDir(cm_scache_t *dscp, clientchar_t *lastNamep, long flags,
!                        cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
  
! extern long cm_RemoveDir(cm_scache_t *dscp, fschar_t *lastNamep, clientchar_t *originalNamep,
!                          cm_user_t *userp, cm_req_t *reqp);
  
! extern long cm_Rename(cm_scache_t *oldDscp,
!                       fschar_t *oldLastNamep, clientchar_t *normalizedOldNamep,
!                       cm_scache_t *newDscp, clientchar_t *newLastNamep,
!                       cm_user_t *userp, cm_req_t *reqp);
  
  extern long cm_HandleLink(cm_scache_t *linkScp, struct cm_user *userp,
!                           cm_req_t *reqp);
  
! extern long cm_Link(cm_scache_t *dscp, clientchar_t *namep, cm_scache_t *sscp,
!                     long flags, cm_user_t *userp, cm_req_t *reqp);
  
! extern long cm_SymLink(cm_scache_t *dscp, clientchar_t *namep, fschar_t *contentsp,
!                        long flags, cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
  
! extern long cm_AssembleLink(cm_scache_t *linkScp, fschar_t *pathSuffixp,
                              cm_scache_t **newRootScpp, cm_space_t **newSpaceBufferp,
                              cm_user_t *userp, cm_req_t *reqp);
  
! extern int cm_ExpandSysName(clientchar_t *inp, clientchar_t *outp, long outSizeCch,
                              unsigned int sysNameIndex);
  
  extern long cm_Open(cm_scache_t *scp, int type, cm_user_t *userp);
  
  extern long cm_CheckOpen(cm_scache_t *scp, int openMode, int trunc,
!                          cm_user_t *userp, cm_req_t *reqp);
  
  /*
   * Combinations of file opening access bits for AFS.
***************
*** 179,225 ****
  } cm_lock_data_t;
  
  extern long cm_CheckNTOpen(cm_scache_t *scp, unsigned int desiredAccess,
! 	unsigned int createDisp, cm_user_t *userp, cm_req_t *reqp, cm_lock_data_t ** ldpp);
  
  extern long cm_CheckNTOpenDone(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp, 
  			       cm_lock_data_t ** ldpp);
  
  extern long cm_CheckNTDelete(cm_scache_t *dscp, cm_scache_t *scp,
! 	cm_user_t *userp, cm_req_t *reqp);
  
  extern long cm_EvaluateSymLink(cm_scache_t *dscp, cm_scache_t *linkScp,
! 	cm_scache_t **outScpp, cm_user_t *userp, cm_req_t *reqp);
  
  extern long cm_FollowMountPoint(cm_scache_t *scp, cm_scache_t *dscp, cm_user_t *userp,
                                  cm_req_t *reqp, cm_scache_t **outScpp);
  
  
  extern long cm_Lock(cm_scache_t *scp, unsigned char sLockType,
!         LARGE_INTEGER LOffset, LARGE_INTEGER LLength, cm_key_t key,
! 	int allowWait, cm_user_t *userp, cm_req_t *reqp,
! 	cm_file_lock_t **lockpp);
  
  #define CM_UNLOCK_BY_FID 	0x0001
  
  extern long cm_UnlockByKey(cm_scache_t * scp,
!         cm_key_t key,
!         int flags,
!         cm_user_t * userp,
!         cm_req_t * reqp);
  
  extern long cm_Unlock(cm_scache_t *scp, unsigned char sLockType,
!         LARGE_INTEGER LOffset, LARGE_INTEGER LLength, cm_key_t key,
! 	cm_user_t *userp, cm_req_t *reqp);
  
  extern long cm_LockCheckRead(cm_scache_t *scp, 
!         LARGE_INTEGER LOffset, 
!         LARGE_INTEGER LLength, 
!         cm_key_t key);
  
  extern long cm_LockCheckWrite(cm_scache_t *scp,
!         LARGE_INTEGER LOffset,
!         LARGE_INTEGER LLength,
!         cm_key_t key);
  
  extern void cm_CheckLocks(void);
  
--- 173,221 ----
  } cm_lock_data_t;
  
  extern long cm_CheckNTOpen(cm_scache_t *scp, unsigned int desiredAccess,
!                            unsigned int createDisp, cm_user_t *userp,
!                            cm_req_t *reqp, cm_lock_data_t ** ldpp);
  
  extern long cm_CheckNTOpenDone(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp, 
  			       cm_lock_data_t ** ldpp);
  
  extern long cm_CheckNTDelete(cm_scache_t *dscp, cm_scache_t *scp,
!                              cm_user_t *userp, cm_req_t *reqp);
  
  extern long cm_EvaluateSymLink(cm_scache_t *dscp, cm_scache_t *linkScp,
!                                cm_scache_t **outScpp, cm_user_t *userp,
!                                cm_req_t *reqp);
  
  extern long cm_FollowMountPoint(cm_scache_t *scp, cm_scache_t *dscp, cm_user_t *userp,
                                  cm_req_t *reqp, cm_scache_t **outScpp);
  
  
  extern long cm_Lock(cm_scache_t *scp, unsigned char sLockType,
!                     LARGE_INTEGER LOffset, LARGE_INTEGER LLength, cm_key_t key,
!                     int allowWait, cm_user_t *userp, cm_req_t *reqp,
!                     cm_file_lock_t **lockpp);
  
  #define CM_UNLOCK_BY_FID 	0x0001
  
  extern long cm_UnlockByKey(cm_scache_t * scp,
!                            cm_key_t key,
!                            int flags,
!                            cm_user_t * userp,
!                            cm_req_t * reqp);
  
  extern long cm_Unlock(cm_scache_t *scp, unsigned char sLockType,
!                       LARGE_INTEGER LOffset, LARGE_INTEGER LLength, cm_key_t key,
!                       cm_user_t *userp, cm_req_t *reqp);
  
  extern long cm_LockCheckRead(cm_scache_t *scp, 
!                              LARGE_INTEGER LOffset, 
!                              LARGE_INTEGER LLength, 
!                              cm_key_t key);
  
  extern long cm_LockCheckWrite(cm_scache_t *scp,
!                               LARGE_INTEGER LOffset,
!                               LARGE_INTEGER LLength,
!                               cm_key_t key);
  
  extern void cm_CheckLocks(void);
  
***************
*** 237,240 ****
--- 233,257 ----
  extern cm_key_t cm_GenerateKey(unsigned int session, unsigned long process_id, unsigned int file_id);
  
  #define MAX_SYMLINK_COUNT 16
+ 
+ /* make this big enough so that one buffer of dir pages won't overflow.  We'll
+  * check anyway, but we want to minimize the chance that we have to leave stuff
+  * unstat'd.
+  */
+ #define CM_BULKMAX		(3 * AFSCBMAX)
+ 
+ /* rock for bulk stat calls */
+ typedef struct cm_bulkStat {
+     osi_hyper_t bufOffset;	/* only do it for things in this buffer page */
+ 
+     /* info for the actual call */
+     int counter;			/* next free slot */
+     AFSFid fids[CM_BULKMAX];
+     AFSFetchStatus stats[CM_BULKMAX];
+     AFSCallBack callbacks[CM_BULKMAX];
+ } cm_bulkStat_t;
+ 
+ extern afs_int32 cm_TryBulkStatRPC(cm_scache_t *dscp, cm_bulkStat_t *bbp, 
+                                    cm_user_t *userp, cm_req_t *reqp);
+ 
  #endif /*  __CM_VNODEOPS_H_ENV__ */
Index: openafs/src/WINNT/afsd/cm_volstat.c
diff -c openafs/src/WINNT/afsd/cm_volstat.c:1.1.2.6 openafs/src/WINNT/afsd/cm_volstat.c:1.1.2.7
*** openafs/src/WINNT/afsd/cm_volstat.c:1.1.2.6	Thu Mar 13 00:39:17 2008
--- openafs/src/WINNT/afsd/cm_volstat.c	Thu Jun 26 12:38:30 2008
***************
*** 40,45 ****
--- 40,46 ----
  #include <string.h>
  #include <malloc.h>
  #include "afsd.h"
+ #include "smb.h"
  #include <WINNT/afsreg.h>
  
  HMODULE hVolStatus = NULL;
***************
*** 171,177 ****
  #ifdef _WIN64
  cm_VolStatus_Network_Started(const char * netbios32, const char * netbios64)
  #else /* _WIN64 */
! cm_VolStatus_Network_Started(const char * netbios)
  #endif /* _WIN64 */
  {
      long code = 0;
--- 172,178 ----
  #ifdef _WIN64
  cm_VolStatus_Network_Started(const char * netbios32, const char * netbios64)
  #else /* _WIN64 */
! cm_VolStatus_Network_Started(const char * netbios32)
  #endif /* _WIN64 */
  {
      long code = 0;
***************
*** 182,188 ****
  #ifdef _WIN64
      code = dll_funcs.dll_VolStatus_Network_Started(netbios32, netbios64);
  #else
!     code = dll_funcs.dll_VolStatus_Network_Started(netbios, netbios);
  #endif
  
      return code;
--- 183,189 ----
  #ifdef _WIN64
      code = dll_funcs.dll_VolStatus_Network_Started(netbios32, netbios64);
  #else
!     code = dll_funcs.dll_VolStatus_Network_Started(netbios32, netbios32);
  #endif
  
      return code;
***************
*** 196,202 ****
  #ifdef _WIN64
  cm_VolStatus_Network_Stopped(const char * netbios32, const char * netbios64)
  #else /* _WIN64 */
! cm_VolStatus_Network_Stopped(const char * netbios)
  #endif /* _WIN64 */
  {
      long code = 0;
--- 197,203 ----
  #ifdef _WIN64
  cm_VolStatus_Network_Stopped(const char * netbios32, const char * netbios64)
  #else /* _WIN64 */
! cm_VolStatus_Network_Stopped(const char * netbios32)
  #endif /* _WIN64 */
  {
      long code = 0;
***************
*** 207,213 ****
  #ifdef _WIN64
      code = dll_funcs.dll_VolStatus_Network_Stopped(netbios32, netbios64);
  #else
!     code = dll_funcs.dll_VolStatus_Network_Stopped(netbios, netbios);
  #endif
  
      return code;
--- 208,214 ----
  #ifdef _WIN64
      code = dll_funcs.dll_VolStatus_Network_Stopped(netbios32, netbios64);
  #else
!     code = dll_funcs.dll_VolStatus_Network_Stopped(netbios32, netbios32);
  #endif
  
      return code;
***************
*** 250,264 ****
  
  
  long
! cm_VolStatus_Notify_DFS_Mapping(cm_scache_t *scp, char *tidPathp, char *pathp)
  {
      long code = 0;
      char src[1024], *p;
      size_t len;
  
      if (hVolStatus == NULL || dll_funcs.version < 2)
          return 0;
  
      snprintf(src,sizeof(src), "\\\\%s%s", volstat_NetbiosName, tidPathp);
      len = strlen(src);
      if ((src[len-1] == '\\' || src[len-1] == '/') &&
--- 251,271 ----
  
  
  long
! cm_VolStatus_Notify_DFS_Mapping(cm_scache_t *scp, const clientchar_t *ctidPathp,
!                                 const clientchar_t *cpathp)
  {
      long code = 0;
      char src[1024], *p;
      size_t len;
+     char * tidPathp = NULL;
+     char * pathp = NULL;
  
      if (hVolStatus == NULL || dll_funcs.version < 2)
          return 0;
  
+     tidPathp = cm_ClientStringToUtf8Alloc(ctidPathp, -1, NULL);
+     pathp = cm_ClientStringToUtf8Alloc(cpathp, -1, NULL);
+ 
      snprintf(src,sizeof(src), "\\\\%s%s", volstat_NetbiosName, tidPathp);
      len = strlen(src);
      if ((src[len-1] == '\\' || src[len-1] == '/') &&
***************
*** 275,280 ****
--- 282,292 ----
      code = dll_funcs.dll_VolStatus_Notify_DFS_Mapping(scp->fid.cell, scp->fid.volume, scp->fid.vnode, scp->fid.unique,
                                                        src, scp->mountPointStringp);
  
+     if (tidPathp)
+         free(tidPathp);
+     if (pathp)
+         free(pathp);
+ 
      return code;
  }
  
***************
*** 299,304 ****
--- 311,318 ----
      cm_req_t    req;
      cm_scache_t *scp;
      cm_volume_t *volp;
+     clientchar_t * cpath = NULL;
+     clientchar_t * cshare = NULL;
  
      if (cellID == NULL || volID == NULL)
          return CM_ERROR_INVAL;
***************
*** 308,314 ****
  
      cm_InitReq(&req);
  
!     code = cm_NameI(cm_data.rootSCachep, (char *)path, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, cm_rootUserp, (char *)share, &req, &scp);
      if (code)
          goto done;
  
--- 322,333 ----
  
      cm_InitReq(&req);
  
!     cpath = cm_FsStringToClientStringAlloc(path, -1, NULL);
!     cshare = cm_FsStringToClientStringAlloc(share, -1, NULL);
! 
!     code = cm_NameI(cm_data.rootSCachep, cpath,
!                     CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
!                     cm_rootUserp, cshare, &req, &scp);
      if (code)
          goto done;
  
***************
*** 336,341 ****
--- 355,365 ----
      cm_ReleaseSCache(scp);
  
    done:
+     if (cpath)
+         free(cpath);
+     if (cshare)
+         free(cshare);
+ 
      osi_Log1(afsd_logp,"cm_VolStatus_Path_To_ID code 0x%x",code); 
      return code;
  }
***************
*** 347,352 ****
--- 371,378 ----
      cm_req_t    req;
      cm_scache_t *scp;
      size_t      len;
+     clientchar_t *cpath = NULL;
+     clientchar_t *cshare = NULL;
  
      if (pBufSize == NULL || (pBuffer == NULL && *pBufSize != 0))
          return CM_ERROR_INVAL;
***************
*** 356,363 ****
  
      cm_InitReq(&req);
  
!     code = cm_NameI(cm_data.rootSCachep, (char *)path, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, 
!                     cm_rootUserp, (char *)share, &req, &scp);
      if (code)
          goto done;
  
--- 382,392 ----
  
      cm_InitReq(&req);
  
!     cpath = cm_FsStringToClientStringAlloc(path, -1, NULL);
!     cshare = cm_FsStringToClientStringAlloc(share, -1, NULL);
! 
!     code = cm_NameI(cm_data.rootSCachep, cpath, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW, 
!                     cm_rootUserp, cshare, &req, &scp);
      if (code)
          goto done;
  
***************
*** 392,397 ****
--- 421,431 ----
      cm_ReleaseSCache(scp);
  
    done:
+     if (cpath)
+         free(cpath);
+     if (cshare)
+         free(cshare);
+ 
      osi_Log1(afsd_logp,"cm_VolStatus_Path_To_DFSlink code 0x%x",code); 
      return code;
  }
Index: openafs/src/WINNT/afsd/cm_volstat.h
diff -c openafs/src/WINNT/afsd/cm_volstat.h:1.1.2.6 openafs/src/WINNT/afsd/cm_volstat.h:1.1.2.7
*** openafs/src/WINNT/afsd/cm_volstat.h:1.1.2.6	Fri Jan  4 02:58:40 2008
--- openafs/src/WINNT/afsd/cm_volstat.h	Thu Jun 26 12:38:30 2008
***************
*** 42,50 ****
  extern long cm_VolStatus_Service_Stopped(void);
  
  #ifdef _WIN64
! extern long cm_VolStatus_Network_Started(const char * netbios32, const char * netbios64);
  
! extern long cm_VolStatus_Network_Stopped(const char * netbios32, const char * netbios64);
  #else /* _WIN64 */
  extern long cm_VolStatus_Network_Started(const char * netbios);
  
--- 42,52 ----
  extern long cm_VolStatus_Service_Stopped(void);
  
  #ifdef _WIN64
! extern long cm_VolStatus_Network_Started(const char * netbios32,
!                                          const char * netbios64);
  
! extern long cm_VolStatus_Network_Stopped(const char * netbios32,
!                                          const char * netbios64);
  #else /* _WIN64 */
  extern long cm_VolStatus_Network_Started(const char * netbios);
  
***************
*** 55,65 ****
  
  extern long cm_VolStatus_Change_Notification(afs_uint32 cellID, afs_uint32 volID, enum volstatus status);
  
! extern long __fastcall cm_VolStatus_Path_To_ID(const char * share, const char * path, afs_uint32 * cellID, afs_uint32 * volID, enum volstatus *pstatus);
! 
! extern long __fastcall cm_VolStatus_Path_To_DFSlink(const char * share, const char * path, afs_uint32 *pBufSize, char *pBuffer);
! 
! extern long cm_VolStatus_Notify_DFS_Mapping(cm_scache_t *scp, char *tidPathp, char *pathp);
  
  extern long cm_VolStatus_Invalidate_DFS_Mapping(cm_scache_t *scp);
  
--- 57,75 ----
  
  extern long cm_VolStatus_Change_Notification(afs_uint32 cellID, afs_uint32 volID, enum volstatus status);
  
! extern long __fastcall cm_VolStatus_Path_To_ID(const char * share,
!                                                const char * path,
!                                                afs_uint32 * cellID, afs_uint32 * volID,
!                                                enum volstatus *pstatus);
! 
! extern long __fastcall cm_VolStatus_Path_To_DFSlink(const char * share,
!                                                     const char * path,
!                                                     afs_uint32 *pBufSize,
!                                                     char *pBuffer);
! 
! extern long cm_VolStatus_Notify_DFS_Mapping(cm_scache_t *scp,
!                                             const clientchar_t *tidPathp,
!                                             const clientchar_t *pathp);
  
  extern long cm_VolStatus_Invalidate_DFS_Mapping(cm_scache_t *scp);
  
Index: openafs/src/WINNT/afsd/cm_volume.c
diff -c openafs/src/WINNT/afsd/cm_volume.c:1.14.4.38 openafs/src/WINNT/afsd/cm_volume.c:1.14.4.40
*** openafs/src/WINNT/afsd/cm_volume.c:1.14.4.38	Fri Apr 18 12:46:07 2008
--- openafs/src/WINNT/afsd/cm_volume.c	Thu Jun 26 10:38:24 2008
***************
*** 10,22 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #include <winsock2.h>
  #include <nb30.h>
- #else
- #include <sys/socket.h>
- #endif /* !DJGPP */
  #include <string.h>
  #include <malloc.h>
  #include "afsd.h"
--- 10,18 ----
***************
*** 1660,1668 ****
      size_t len = strlen(volname);
      cm_vol_state_t *statep;
  
!     if (stricmp(".readonly", &volname[len-9]) == 0)
          statep = &volp->vol[ROVOL];
!     else if (stricmp(".backup", &volname[len-7]) == 0)
          statep = &volp->vol[BACKVOL];
      else 
          statep = &volp->vol[RWVOL];
--- 1656,1664 ----
      size_t len = strlen(volname);
      cm_vol_state_t *statep;
  
!     if (cm_stricmp_utf8N(".readonly", &volname[len-9]) == 0)
          statep = &volp->vol[ROVOL];
!     else if (cm_stricmp_utf8N(".backup", &volname[len-7]) == 0)
          statep = &volp->vol[BACKVOL];
      else 
          statep = &volp->vol[RWVOL];
Index: openafs/src/WINNT/afsd/cm_volume.h
diff -c openafs/src/WINNT/afsd/cm_volume.h:1.5.6.13 openafs/src/WINNT/afsd/cm_volume.h:1.5.6.14
*** openafs/src/WINNT/afsd/cm_volume.h:1.5.6.13	Mon Apr 14 18:44:04 2008
--- openafs/src/WINNT/afsd/cm_volume.h	Wed May 28 13:34:52 2008
***************
*** 126,132 ****
  
  extern void cm_UpdateVolumeStatus(cm_volume_t *volp, afs_uint32 volID);
  
! extern void cm_VolumeStatusNotification(cm_volume_t * volp, afs_uint32 volID, enum volstatus old, enum volstatus new);
  
  extern enum volstatus cm_GetVolumeStatus(cm_volume_t *volp, afs_uint32 volID);
  
--- 126,132 ----
  
  extern void cm_UpdateVolumeStatus(cm_volume_t *volp, afs_uint32 volID);
  
! extern void cm_VolumeStatusNotification(cm_volume_t * volp, afs_uint32 volID, enum volstatus oldState, enum volstatus newState);
  
  extern enum volstatus cm_GetVolumeStatus(cm_volume_t *volp, afs_uint32 volID);
  
Index: openafs/src/WINNT/afsd/fs.c
diff -c openafs/src/WINNT/afsd/fs.c:1.32.4.20 openafs/src/WINNT/afsd/fs.c:1.32.4.22
*** openafs/src/WINNT/afsd/fs.c:1.32.4.20	Wed Mar 19 09:24:00 2008
--- openafs/src/WINNT/afsd/fs.c	Thu Jun 26 08:45:11 2008
***************
*** 251,257 ****
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl(apath, VIOC_FILE_CELL_NAME, &blob, 1);
      if (code) {
  	if ((errno == EINVAL) || (errno == ENOENT)) 
              return 0;
--- 251,257 ----
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl_utf8(apath, VIOC_FILE_CELL_NAME, &blob, 1);
      if (code) {
  	if ((errno == EINVAL) || (errno == ENOENT)) 
              return 0;
***************
*** 269,277 ****
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl(apath, VIOC_FILE_CELL_NAME, &blob, 1);
      if (code == 0)
!         return !stricmp("Freelance.Local.Root",space);
      return 1;   /* assume it is because it is more restrictive that way */
  }
  
--- 269,277 ----
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl_utf8(apath, VIOC_FILE_CELL_NAME, &blob, 1);
      if (code == 0)
!         return !cm_stricmp_utf8N("Freelance.Local.Root",space);
      return 1;   /* assume it is because it is more restrictive that way */
  }
  
***************
*** 612,618 ****
      }
      ta->minuslist = first;
  
-   exit:
      return ta;
  
    nminus_err:
--- 612,617 ----
***************
*** 929,935 ****
  	blob.out_size = MAXSIZE;
  	blob.in_size = idf;
  	blob.in = blob.out = space;
! 	code = pioctl(ti->data, VIOCGETAL, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
  	    error = 1;
--- 928,934 ----
  	blob.out_size = MAXSIZE;
  	blob.in_size = idf;
  	blob.in = blob.out = space;
! 	code = pioctl_utf8(ti->data, VIOCGETAL, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
  	    error = 1;
***************
*** 992,998 ****
  	blob.in = AclToString(ta);
  	blob.out_size=0;
  	blob.in_size = 1+(long)strlen(blob.in);
! 	code = pioctl(ti->data, VIOCSETAL, &blob, 1);
  	if (code) {
  	    if (errno == EINVAL) {
  		if (ta->dfs) {
--- 991,997 ----
  	blob.in = AclToString(ta);
  	blob.out_size=0;
  	blob.in_size = 1+(long)strlen(blob.in);
! 	code = pioctl_utf8(ti->data, VIOCSETAL, &blob, 1);
  	if (code) {
  	    if (errno == EINVAL) {
  		if (ta->dfs) {
***************
*** 1069,1075 ****
      blob.out_size = MAXSIZE;
      blob.in_size = idf;
      blob.in = blob.out = space;
!     code = pioctl(as->parms[0].items->data, VIOCGETAL, &blob, 1);
      if (code) {
  	Die(errno, as->parms[0].items->data);
  	return 1;
--- 1068,1074 ----
      blob.out_size = MAXSIZE;
      blob.in_size = idf;
      blob.in = blob.out = space;
!     code = pioctl_utf8(as->parms[0].items->data, VIOCGETAL, &blob, 1);
      if (code) {
  	Die(errno, as->parms[0].items->data);
  	return 1;
***************
*** 1086,1092 ****
  	blob.out_size = MAXSIZE;
  	blob.in_size = idf;
  	blob.in = blob.out = space;
! 	code = pioctl(ti->data, VIOCGETAL, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
  	    error = 1;
--- 1085,1091 ----
  	blob.out_size = MAXSIZE;
  	blob.in_size = idf;
  	blob.in = blob.out = space;
! 	code = pioctl_utf8(ti->data, VIOCGETAL, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
  	    error = 1;
***************
*** 1130,1136 ****
  	blob.in = AclToString(ta);
  	blob.out_size=0;
  	blob.in_size = 1+(long)strlen(blob.in);
! 	code = pioctl(ti->data, VIOCSETAL, &blob, 1);
  	if (code) {
  	    if (errno == EINVAL) {
  		fprintf(stderr,
--- 1129,1135 ----
  	blob.in = AclToString(ta);
  	blob.out_size=0;
  	blob.in_size = 1+(long)strlen(blob.in);
! 	code = pioctl_utf8(ti->data, VIOCSETAL, &blob, 1);
  	if (code) {
  	    if (errno == EINVAL) {
  		fprintf(stderr,
***************
*** 1148,1154 ****
      return error;
  }
  
! /* pioctl() call to get the cellname of a pathname */
  static afs_int32
  GetCell(char *fname, char *cellname)
  {
--- 1147,1153 ----
      return error;
  }
  
! /* pioctl_utf8() call to get the cellname of a pathname */
  static afs_int32
  GetCell(char *fname, char *cellname)
  {
***************
*** 1159,1165 ****
      blob.out_size = MAXCELLCHARS;
      blob.out = cellname;
  
!     code = pioctl(fname, VIOC_FILE_CELL_NAME, &blob, 1);
      return code;
  }
  
--- 1158,1164 ----
      blob.out_size = MAXCELLCHARS;
      blob.out = cellname;
  
!     code = pioctl_utf8(fname, VIOC_FILE_CELL_NAME, &blob, 1);
      return code;
  }
  
***************
*** 1258,1264 ****
  	blob.out_size = MAXSIZE;
  	blob.in_size = 0;
  	blob.out = space;
! 	code = pioctl(ti->data, VIOCGETAL, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
--- 1257,1263 ----
  	blob.out_size = MAXSIZE;
  	blob.in_size = 0;
  	blob.out = space;
! 	code = pioctl_utf8(ti->data, VIOCGETAL, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
***************
*** 1289,1295 ****
  	    blob.in=AclToString(ta);
  	    blob.in_size = (long)strlen(blob.in)+1;
  	    blob.out_size = 0;
! 	    code = pioctl(ti->data, VIOCSETAL, &blob, 1);
  	    if (code) {
  		if (errno == EINVAL) {
  		    fprintf(stderr,
--- 1288,1294 ----
  	    blob.in=AclToString(ta);
  	    blob.in_size = (long)strlen(blob.in)+1;
  	    blob.out_size = 0;
! 	    code = pioctl_utf8(ti->data, VIOCSETAL, &blob, 1);
  	    if (code) {
  		if (errno == EINVAL) {
  		    fprintf(stderr,
***************
*** 1352,1358 ****
  	blob.out_size = MAXSIZE;
  	blob.in_size = idf;
  	blob.in = blob.out = space;
! 	code = pioctl(ti->data, VIOCGETAL, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
--- 1351,1357 ----
  	blob.out_size = MAXSIZE;
  	blob.in_size = idf;
  	blob.in = blob.out = space;
! 	code = pioctl_utf8(ti->data, VIOCGETAL, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
***************
*** 1415,1421 ****
      struct ViceIoctl blob;
  
      blob.in_size = blob.out_size = 0;
!     code = pioctl(NULL, VIOC_FLUSHALL, &blob, 0);
      if (code) {
  	fprintf(stderr, "Error flushing all ");
  	return 1;
--- 1414,1420 ----
      struct ViceIoctl blob;
  
      blob.in_size = blob.out_size = 0;
!     code = pioctl_utf8(NULL, VIOC_FLUSHALL, &blob, 0);
      if (code) {
  	fprintf(stderr, "Error flushing all ");
  	return 1;
***************
*** 1434,1440 ****
      SetDotDefault(&as->parms[0].items);
      for(ti=as->parms[0].items; ti; ti=ti->next) {
  	blob.in_size = blob.out_size = 0;
! 	code = pioctl(ti->data, VIOC_FLUSHVOLUME, &blob, 0);
  	if (code) {
  	    fprintf(stderr, "Error flushing volume ");
              perror(ti->data);
--- 1433,1439 ----
      SetDotDefault(&as->parms[0].items);
      for(ti=as->parms[0].items; ti; ti=ti->next) {
  	blob.in_size = blob.out_size = 0;
! 	code = pioctl_utf8(ti->data, VIOC_FLUSHVOLUME, &blob, 0);
  	if (code) {
  	    fprintf(stderr, "Error flushing volume ");
              perror(ti->data);
***************
*** 1468,1474 ****
          blob.in = &options;
  
  	blob.out_size = 0;
! 	code = pioctl(ti->data, VIOCFLUSH, &blob, 0);
  	if (code) {
  	    if (errno == EMFILE) {
  		fprintf(stderr, "%s: Can't flush active file %s\n", pn, 
--- 1467,1473 ----
          blob.in = &options;
  
  	blob.out_size = 0;
! 	code = pioctl_utf8(ti->data, VIOCFLUSH, &blob, 0);
  	if (code) {
  	    if (errno == EMFILE) {
  		fprintf(stderr, "%s: Can't flush active file %s\n", pn, 
***************
*** 1550,1556 ****
  	    input += strlen(motd) + 1;
  	} else 
              *(input++) = '\0';
! 	code = pioctl(ti->data,VIOCSETVOLSTAT, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
  	    error = 1;
--- 1549,1555 ----
  	    input += strlen(motd) + 1;
  	} else 
              *(input++) = '\0';
! 	code = pioctl_utf8(ti->data,VIOCSETVOLSTAT, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
  	    error = 1;
***************
*** 1619,1625 ****
  
          blob.out_size = sizeof(cm_fid_t);
          blob.out = (char *) &fid;
!         if (0 == pioctl(ti->data, VIOCGETFID, &blob, 1)) {
              options.field_flags |= CM_IOCTL_QOPTS_FIELD_FID;
              options.fid = fid;
          } else {
--- 1618,1624 ----
  
          blob.out_size = sizeof(cm_fid_t);
          blob.out = (char *) &fid;
!         if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1)) {
              options.field_flags |= CM_IOCTL_QOPTS_FIELD_FID;
              options.fid = fid;
          } else {
***************
*** 1631,1642 ****
          blob.out_size = sizeof(filetype);
          blob.out = &filetype;
  
!         code = pioctl(ti->data, VIOC_GETFILETYPE, &blob, 1);
  
          blob.out_size = MAXCELLCHARS;
          blob.out = cell;
  
!         code = pioctl(ti->data, VIOC_FILE_CELL_NAME, &blob, 1);
          printf("%s %s (%u.%u.%u) contained in cell %s\n",
                  filetypestr(filetype),
                  ti->data, fid.volume, fid.vnode, fid.unique,
--- 1630,1641 ----
          blob.out_size = sizeof(filetype);
          blob.out = &filetype;
  
!         code = pioctl_utf8(ti->data, VIOC_GETFILETYPE, &blob, 1);
  
          blob.out_size = MAXCELLCHARS;
          blob.out = cell;
  
!         code = pioctl_utf8(ti->data, VIOC_FILE_CELL_NAME, &blob, 1);
          printf("%s %s (%u.%u.%u) contained in cell %s\n",
                  filetypestr(filetype),
                  ti->data, fid.volume, fid.vnode, fid.unique,
***************
*** 1644,1650 ****
  
  	blob.out_size = 2 * sizeof(afs_uint32);
          blob.out = (char *) &owner;
! 	if (0 == pioctl(ti->data, VIOCGETOWNER, &blob, 1)) {
  	    char oname[PR_MAXNAMELEN] = "(unknown)";
              char confDir[257];
  
--- 1643,1649 ----
  
  	blob.out_size = 2 * sizeof(afs_uint32);
          blob.out = (char *) &owner;
! 	if (0 == pioctl_utf8(ti->data, VIOCGETOWNER, &blob, 1)) {
  	    char oname[PR_MAXNAMELEN] = "(unknown)";
              char confDir[257];
  
***************
*** 1658,1664 ****
  
  	blob.out = space;
  	blob.out_size = MAXSIZE;
! 	code = pioctl(ti->data, VIOCGETVOLSTAT, &blob, 1);
  	if (code == 0) {
              status = (VolumeStatus *)space;
              name = (char *)status + sizeof(*status);
--- 1657,1663 ----
  
  	blob.out = space;
  	blob.out_size = MAXSIZE;
! 	code = pioctl_utf8(ti->data, VIOCGETVOLSTAT, &blob, 1);
  	if (code == 0) {
              status = (VolumeStatus *)space;
              name = (char *)status + sizeof(*status);
***************
*** 1671,1677 ****
          }
  
          errno = 0;
!         code = pioctl(ti->data, VIOC_PATH_AVAILABILITY, &blob, 1);
          switch (errno) {
          case 0:
              printf("Volume is online\n");
--- 1670,1676 ----
          }
  
          errno = 0;
!         code = pioctl_utf8(ti->data, VIOC_PATH_AVAILABILITY, &blob, 1);
          switch (errno) {
          case 0:
              printf("Volume is online\n");
***************
*** 1713,1719 ****
  	blob.out_size = MAXSIZE;
  	blob.in_size = 0;
  	blob.out = space;
! 	code = pioctl(ti->data, VIOCGETVOLSTAT, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
--- 1712,1718 ----
  	blob.out_size = MAXSIZE;
  	blob.in_size = 0;
  	blob.out = space;
! 	code = pioctl_utf8(ti->data, VIOCGETVOLSTAT, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
***************
*** 1759,1765 ****
          
          blob.out_size = sizeof(cm_fid_t);
          blob.out = (char *) &fid;
!         if (0 == pioctl(ti->data, VIOCGETFID, &blob, 1)) {
              options.field_flags |= CM_IOCTL_QOPTS_FIELD_FID;
              options.fid = fid;
          } else {
--- 1758,1764 ----
          
          blob.out_size = sizeof(cm_fid_t);
          blob.out = (char *) &fid;
!         if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1)) {
              options.field_flags |= CM_IOCTL_QOPTS_FIELD_FID;
              options.fid = fid;
          } else {
***************
*** 1771,1782 ****
          blob.out_size = sizeof(filetype);
          blob.out = &filetype;
  
!         code = pioctl(ti->data, VIOC_GETFILETYPE, &blob, 1);
  
          blob.out_size = MAXSIZE;
  	blob.out = space;
  	memset(space, 0, sizeof(space));
! 	code = pioctl(ti->data, VIOCWHEREIS, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
--- 1770,1781 ----
          blob.out_size = sizeof(filetype);
          blob.out = &filetype;
  
!         code = pioctl_utf8(ti->data, VIOC_GETFILETYPE, &blob, 1);
  
          blob.out_size = MAXSIZE;
  	blob.out = space;
  	memset(space, 0, sizeof(space));
! 	code = pioctl_utf8(ti->data, VIOCWHEREIS, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
***************
*** 1817,1823 ****
  	blob.out_size = MAXSIZE;
  	blob.in_size = 0;
  	blob.out = space;
! 	code = pioctl(ti->data, VIOCGETVOLSTAT, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
--- 1816,1822 ----
  	blob.out_size = MAXSIZE;
  	blob.in_size = 0;
  	blob.out = space;
! 	code = pioctl_utf8(ti->data, VIOCGETVOLSTAT, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
***************
*** 1846,1852 ****
  	blob.out_size = MAXSIZE;
  	blob.in_size = 0;
  	blob.out = space;
! 	code = pioctl(ti->data, VIOCGETVOLSTAT, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
--- 1845,1851 ----
  	blob.out_size = MAXSIZE;
  	blob.in_size = 0;
  	blob.out = space;
! 	code = pioctl_utf8(ti->data, VIOCGETVOLSTAT, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
***************
*** 1994,2000 ****
  	blob.out = space;
  	memset(space, 0, MAXSIZE);
  
! 	code = pioctl(parent_dir, VIOC_AFS_STAT_MT_PT, &blob, 1);
  
  	if (code == 0) {
  	    printf("'%s' is a %smount point for volume '%s'\n",
--- 1993,1999 ----
  	blob.out = space;
  	memset(space, 0, MAXSIZE);
  
! 	code = pioctl_utf8(parent_dir, VIOC_AFS_STAT_MT_PT, &blob, 1);
  
  	if (code == 0) {
  	    printf("'%s' is a %smount point for volume '%s'\n",
***************
*** 2091,2097 ****
  	    blob.in_size = 0;
  	    blob.out_size = sizeof(localCellName);
  	    blob.out = localCellName;
! 	    code = pioctl(parent, VIOC_GET_WS_CELL, &blob, 1);
  	    if (!code)
  		cellName = localCellName;
  	}
--- 2090,2096 ----
  	    blob.in_size = 0;
  	    blob.out_size = sizeof(localCellName);
  	    blob.out = localCellName;
! 	    code = pioctl_utf8(parent, VIOC_GET_WS_CELL, &blob, 1);
  	    if (!code)
  		cellName = localCellName;
  	}
***************
*** 2142,2148 ****
      blob.in_size = 1 + (long)strlen(space);
      blob.in = space;
      blob.out = NULL;
!     code = pioctl(path, VIOC_AFS_CREATE_MT_PT, &blob, 0);
  #else /* not WIN32 */
      code = symlink(space, path);
  #endif /* not WIN32 */
--- 2141,2147 ----
      blob.in_size = 1 + (long)strlen(space);
      blob.in = space;
      blob.out = NULL;
!     code = pioctl_utf8(path, VIOC_AFS_CREATE_MT_PT, &blob, 0);
  #else /* not WIN32 */
      code = symlink(space, path);
  #endif /* not WIN32 */
***************
*** 2203,2209 ****
  	blob.in_size = (long)strlen(tp)+1;
  	blob.out = lsbuffer;
  	blob.out_size = sizeof(lsbuffer);
! 	code = pioctl(tbuffer, VIOC_AFS_STAT_MT_PT, &blob, 0);
  	if (code) {
  	    if (errno == EINVAL) {
  		fprintf(stderr,"%s: '%s' is not a mount point.\n", pn, ti->data);
--- 2202,2208 ----
  	blob.in_size = (long)strlen(tp)+1;
  	blob.out = lsbuffer;
  	blob.out_size = sizeof(lsbuffer);
! 	code = pioctl_utf8(tbuffer, VIOC_AFS_STAT_MT_PT, &blob, 0);
  	if (code) {
  	    if (errno == EINVAL) {
  		fprintf(stderr,"%s: '%s' is not a mount point.\n", pn, ti->data);
***************
*** 2223,2229 ****
          blob.out_size = 0;
  	blob.in = tp;
  	blob.in_size = (long)strlen(tp)+1;
! 	code = pioctl(tbuffer, VIOC_AFS_DELETE_MT_PT, &blob, 0);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
--- 2222,2228 ----
          blob.out_size = 0;
  	blob.in = tp;
  	blob.in_size = (long)strlen(tp)+1;
! 	code = pioctl_utf8(tbuffer, VIOC_AFS_DELETE_MT_PT, &blob, 0);
  	if (code) {
  	    Die(errno, ti->data);
              error = 1;
***************
*** 2306,2312 ****
  #endif /* WIN32 */
      }
  
!     code = pioctl(0, VIOCCKSERV, &blob, 1);
      if (code) {
  	if ((errno == EACCES) && (checkserv.tinterval > 0)) {
  	    printf("Must be root to change -interval\n");
--- 2305,2311 ----
  #endif /* WIN32 */
      }
  
!     code = pioctl_utf8(0, VIOCCKSERV, &blob, 1);
      if (code) {
  	if ((errno == EACCES) && (checkserv.tinterval > 0)) {
  	    printf("Must be root to change -interval\n");
***************
*** 2376,2382 ****
      if (code)
          return 1;
  
!     code = pioctl(0, VIOC_GAG, &blob, 1);
      if (code) {
  	Die(errno, 0);
          return 1;
--- 2375,2381 ----
      if (code)
          return 1;
  
!     code = pioctl_utf8(0, VIOC_GAG, &blob, 1);
      if (code) {
  	Die(errno, 0);
          return 1;
***************
*** 2392,2398 ****
      
      blob.in_size = 0;
      blob.out_size = 0;
!     code = pioctl(0, VIOCCKBACK, &blob, 1);
      if (code) {
  	Die(errno, 0);
  	return 1;
--- 2391,2397 ----
      
      blob.in_size = 0;
      blob.out_size = 0;
!     code = pioctl_utf8(0, VIOCCKBACK, &blob, 1);
      if (code) {
  	Die(errno, 0);
  	return 1;
***************
*** 2436,2442 ****
      blob.in = (char *) &temp;
      blob.in_size = sizeof(afs_int32);
      blob.out_size = 0;
!     code = pioctl(0, VIOCSETCACHESIZE, &blob, 1);
      if (code) {
  	Die(errno, (char *) 0);
          return 1;
--- 2435,2441 ----
      blob.in = (char *) &temp;
      blob.in_size = sizeof(afs_int32);
      blob.out_size = 0;
!     code = pioctl_utf8(0, VIOCSETCACHESIZE, &blob, 1);
      if (code) {
  	Die(errno, (char *) 0);
          return 1;
***************
*** 2458,2464 ****
      blob.in_size = 0;
      blob.out_size = sizeof(parms);
      blob.out = (char *) &parms;
!     code = pioctl(0, VIOCGETCACHEPARMS, &blob, 1);
      if (code) {
  	Die(errno, NULL);
          return 1;
--- 2457,2463 ----
      blob.in_size = 0;
      blob.out_size = sizeof(parms);
      blob.out = (char *) &parms;
!     code = pioctl_utf8(0, VIOCGETCACHEPARMS, &blob, 1);
      if (code) {
  	Die(errno, NULL);
          return 1;
***************
*** 2494,2500 ****
  	blob.in_size = sizeof(afs_int32);
  	blob.in = space;
  	blob.out = space;
! 	code = pioctl(0, VIOCGETCELL, &blob, 1);
  	if (code < 0) {
  	    if (errno == EDOM) 
                  break;	/* done with the list */
--- 2493,2499 ----
  	blob.in_size = sizeof(afs_int32);
  	blob.in = space;
  	blob.out = space;
! 	code = pioctl_utf8(0, VIOCGETCELL, &blob, 1);
  	if (code < 0) {
  	    if (errno == EDOM) 
                  break;	/* done with the list */
***************
*** 2545,2551 ****
  	blob.in_size = sizeof(afs_int32);
  	blob.in = space;
  	blob.out = space;
! 	code = pioctl(0, VIOC_GETALIAS, &blob, 1);
  	if (code < 0) {
  	    if (errno == EDOM)
  		break;		/* done with the list */
--- 2544,2550 ----
  	blob.in_size = sizeof(afs_int32);
  	blob.in = space;
  	blob.out = space;
! 	code = pioctl_utf8(0, VIOC_GETALIAS, &blob, 1);
  	if (code < 0) {
  	    if (errno == EDOM)
  		break;		/* done with the list */
***************
*** 2592,2598 ****
      blob.in = (char *) &hostAddr;
      blob.out = (char *) &hostAddr;
      
!     code = pioctl(0, VIOC_CBADDR, &blob, 1);
      if (code < 0) {
  	Die(errno, 0);
  	return 1;
--- 2591,2597 ----
      blob.in = (char *) &hostAddr;
      blob.out = (char *) &hostAddr;
      
!     code = pioctl_utf8(0, VIOC_CBADDR, &blob, 1);
      if (code < 0) {
  	Die(errno, 0);
  	return 1;
***************
*** 2667,2673 ****
      blob.in_size = size;
      blob.in = space;
      blob.out_size = 0;
!     code = pioctl(0, VIOCNEWCELL, &blob, 1);
      if (code < 0)
  	Die(errno, 0);
      return 0;
--- 2666,2672 ----
      blob.in_size = size;
      blob.in = space;
      blob.out_size = 0;
!     code = pioctl_utf8(0, VIOCNEWCELL, &blob, 1);
      if (code < 0)
  	Die(errno, 0);
      return 0;
***************
*** 2685,2691 ****
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl((char *) 0, VIOCNEWCELL, &blob, 1);
  
      if (code) {
          Die(errno, (char *) 0);
--- 2684,2690 ----
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl_utf8((char *) 0, VIOCNEWCELL, &blob, 1);
  
      if (code) {
          Die(errno, (char *) 0);
***************
*** 2719,2725 ****
      blob.in = space;
      blob.out_size = 0;
      blob.out = space;
!     code = pioctl(0, VIOC_NEWALIAS, &blob, 1);
      if (code < 0) {
  	if (errno == EEXIST) {
  	    fprintf(stderr,
--- 2718,2724 ----
      blob.in = space;
      blob.out_size = 0;
      blob.out = space;
!     code = pioctl_utf8(0, VIOC_NEWALIAS, &blob, 1);
      if (code < 0) {
  	if (errno == EEXIST) {
  	    fprintf(stderr,
***************
*** 2765,2771 ****
  
          blob.out_size = sizeof(cm_fid_t);
          blob.out = (char *) &fid;
!         if (0 == pioctl(ti->data, VIOCGETFID, &blob, 1)) {
              options.field_flags |= CM_IOCTL_QOPTS_FIELD_FID;
              options.fid = fid;
          } else {
--- 2764,2770 ----
  
          blob.out_size = sizeof(cm_fid_t);
          blob.out = (char *) &fid;
!         if (0 == pioctl_utf8(ti->data, VIOCGETFID, &blob, 1)) {
              options.field_flags |= CM_IOCTL_QOPTS_FIELD_FID;
              options.fid = fid;
          } else {
***************
*** 2777,2788 ****
          blob.out_size = sizeof(filetype);
          blob.out = &filetype;
  
!         code = pioctl(ti->data, VIOC_GETFILETYPE, &blob, 1);
  
          blob.out_size = MAXCELLCHARS;
          blob.out = cell;
  
!         code = pioctl(ti->data, VIOC_FILE_CELL_NAME, &blob, 1);
  	if (code) {
  	    if (errno == ENOENT)
  		fprintf(stderr,"%s: no such cell as '%s'\n", pn, ti->data);
--- 2776,2787 ----
          blob.out_size = sizeof(filetype);
          blob.out = &filetype;
  
!         code = pioctl_utf8(ti->data, VIOC_GETFILETYPE, &blob, 1);
  
          blob.out_size = MAXCELLCHARS;
          blob.out = cell;
  
!         code = pioctl_utf8(ti->data, VIOC_FILE_CELL_NAME, &blob, 1);
  	if (code) {
  	    if (errno == ENOENT)
  		fprintf(stderr,"%s: no such cell as '%s'\n", pn, ti->data);
***************
*** 2809,2815 ****
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl(NULL, VIOC_GET_WS_CELL, &blob, 1);
  
      if (code) {
  	Die(errno, NULL);
--- 2808,2814 ----
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl_utf8(NULL, VIOC_GET_WS_CELL, &blob, 1);
  
      if (code) {
  	Die(errno, NULL);
***************
*** 2871,2877 ****
      blob.out_size = sizeof(afs_int32);
      blob.in = (char *) &hostAddr;
      blob.out = (char *) &hostAddr;
!     code = pioctl(0, VIOC_AFS_MARINER_HOST, &blob, 1);
      if (code) {
  	Die(errno, 0);
  	return 1;
--- 2870,2876 ----
      blob.out_size = sizeof(afs_int32);
      blob.in = (char *) &hostAddr;
      blob.out = (char *) &hostAddr;
!     code = pioctl_utf8(0, VIOC_AFS_MARINER_HOST, &blob, 1);
      if (code) {
  	Die(errno, 0);
  	return 1;
***************
*** 2934,2940 ****
          *(input++) = '\0';
      }
      memcpy(space, &setp, sizeof(afs_int32));
!     code = pioctl(0, VIOC_AFS_SYSNAME, &blob, 1);
      if (code) {
          Die(errno, 0);
          return 1;
--- 2933,2939 ----
          *(input++) = '\0';
      }
      memcpy(space, &setp, sizeof(afs_int32));
!     code = pioctl_utf8(0, VIOC_AFS_SYSNAME, &blob, 1);
      if (code) {
          Die(errno, 0);
          return 1;
***************
*** 3040,3046 ****
      blob.in_size = sizeof(afs_int32);
      blob.out = (char *) &exportcall;
      blob.out_size = sizeof(afs_int32);
!     code = pioctl(0, VIOC_EXPORTAFS, &blob, 1);
      if (code) {
  	if (errno == ENODEV) {
  	    fprintf(stderr,
--- 3039,3045 ----
      blob.in_size = sizeof(afs_int32);
      blob.out = (char *) &exportcall;
      blob.out_size = sizeof(afs_int32);
!     code = pioctl_utf8(0, VIOC_EXPORTAFS, &blob, 1);
      if (code) {
  	if (errno == ENODEV) {
  	    fprintf(stderr,
***************
*** 3090,3096 ****
  	}
  	blob.in_size = 1+(long)strlen(info.name);
  	blob.in = info.name;
! 	code = pioctl(0, VIOC_GETCELLSTATUS, &blob, 1);
  	if (code) {
  	    if (errno == ENOENT)
  		fprintf(stderr,"%s: the cell named '%s' does not exist\n", pn, info.name);
--- 3089,3095 ----
  	}
  	blob.in_size = 1+(long)strlen(info.name);
  	blob.in = info.name;
! 	code = pioctl_utf8(0, VIOC_GETCELLSTATUS, &blob, 1);
  	if (code) {
  	    if (errno == ENOENT)
  		fprintf(stderr,"%s: the cell named '%s' does not exist\n", pn, info.name);
***************
*** 3166,3172 ****
  	blob.in = (caddr_t) &args;
  	blob.out_size = 0;
  	blob.out = (caddr_t) 0;
! 	code = pioctl(0, VIOC_SETCELLSTATUS, &blob, 1);
  	if (code) {
  	    Die(errno, info.name);      /* XXX added cell name to Die() call */
              error = 1;
--- 3165,3171 ----
  	blob.in = (caddr_t) &args;
  	blob.out_size = 0;
  	blob.out = (caddr_t) 0;
! 	code = pioctl_utf8(0, VIOC_SETCELLSTATUS, &blob, 1);
  	if (code) {
  	    Die(errno, info.name);      /* XXX added cell name to Die() call */
              error = 1;
***************
*** 3218,3224 ****
  {
      int code;
      cm_SSetPref_t *ssp;
!     code = pioctl(0, VIOC_SETSPREFS, &gblob, 1);
  
      ssp = (cm_SSetPref_t *)space;
      gblob.in_size = (long)(((char *)&(ssp->servers[0])) - (char *)ssp);
--- 3217,3223 ----
  {
      int code;
      cm_SSetPref_t *ssp;
!     code = pioctl_utf8(0, VIOC_SETSPREFS, &gblob, 1);
  
      ssp = (cm_SSetPref_t *)space;
      gblob.in_size = (long)(((char *)&(ssp->servers[0])) - (char *)ssp);
***************
*** 3236,3249 ****
  {
      int code;
  
!     code = pioctl(0, VIOC_SETSPREFS, &gblob, 1);
      if (code && (errno == EINVAL)) {
  	struct setspref *ssp;
  	ssp = (struct setspref *)gblob.in;
  	if (!(ssp->flags & DBservers)) {
  	    gblob.in = (void *)&(ssp->servers[0]);
  	    gblob.in_size -= ((char *)&(ssp->servers[0])) - (char *)ssp;
! 	    code = pioctl(0, VIOC_SETSPREFS33, &gblob, 1);
  	    return code ? errno : 0;
  	}
  	fprintf(stderr,
--- 3235,3248 ----
  {
      int code;
  
!     code = pioctl_utf8(0, VIOC_SETSPREFS, &gblob, 1);
      if (code && (errno == EINVAL)) {
  	struct setspref *ssp;
  	ssp = (struct setspref *)gblob.in;
  	if (!(ssp->flags & DBservers)) {
  	    gblob.in = (void *)&(ssp->servers[0]);
  	    gblob.in_size -= ((char *)&(ssp->servers[0])) - (char *)ssp;
! 	    code = pioctl_utf8(0, VIOC_SETSPREFS33, &gblob, 1);
  	    return code ? errno : 0;
  	}
  	fprintf(stderr,
***************
*** 3617,3623 ****
          in->num_servers = (MAXSIZE - 2*sizeof(short))/sizeof(struct cm_SPref);
          in->flags = vlservers; 
  
!         code = pioctl(0, VIOC_GETSPREFS, &blob, 1);
          if (code){
              perror("getserverprefs pioctl");
              Die (errno,0);
--- 3616,3622 ----
          in->num_servers = (MAXSIZE - 2*sizeof(short))/sizeof(struct cm_SPref);
          in->flags = vlservers; 
  
!         code = pioctl_utf8(0, VIOC_GETSPREFS, &blob, 1);
          if (code){
              perror("getserverprefs pioctl");
              Die (errno,0);
***************
*** 3689,3695 ****
  	    (MAXSIZE - 2 * sizeof(short)) / sizeof(struct spref);
  	in->flags = vlservers;
  
! 	code = pioctl(0, VIOC_GETSPREFS, &blob, 1);
  	if (code) {
  	    perror("getserverprefs pioctl");
  	    return 1;
--- 3688,3694 ----
  	    (MAXSIZE - 2 * sizeof(short)) / sizeof(struct spref);
  	in->flags = vlservers;
  
! 	code = pioctl_utf8(0, VIOC_GETSPREFS, &blob, 1);
  	if (code) {
  	    perror("getserverprefs pioctl");
  	    return 1;
***************
*** 3716,3721 ****
--- 3715,3766 ----
  }
  #endif /* WIN32 */
  
+ static afs_int32
+ SmbUnicodeCmd(struct cmd_syndesc * asp, void * arock)
+ {
+     long inValue = 0;
+     long outValue = 0;
+     long code;
+ 
+     struct ViceIoctl blob;
+ 
+     if (asp->parms[0].items) {
+         /* On */
+ 
+         inValue = 3;
+     } else if (asp->parms[1].items) {
+         /* Off */
+ 
+         inValue = 2;
+     }
+ 
+     if (inValue != 0 && !IsAdmin()) {
+         fprintf (stderr, "Permission denied: Requires AFS Client Administrator access.\n");
+         return EACCES;
+     }
+ 
+     blob.in_size = sizeof(inValue);
+     blob.in = (char *) &inValue;
+     blob.out_size = sizeof(outValue);
+     blob.out = (char *) &outValue;
+ 
+     code = pioctl_utf8(NULL, VIOC_UNICODECTL, &blob, 1);
+     if (code) {
+         Die(errno, NULL);
+         return code;
+     }
+ 
+     if (outValue != 2) {
+         printf("Unicode support is %s%s.\n",
+                ((outValue != 0)? "enabled":"disabled"),
+                ((inValue != 0)? " for new SMB connections":""));
+     } else {
+         printf("Unicode support is absent in this installation of OpenAFS.\n");
+     }
+ 
+     return 0;
+ }
+ 
  static int
  UuidCmd(struct cmd_syndesc *asp, void *arock)
  {
***************
*** 3747,3753 ****
      blob.out_size = sizeof(outValue);
      blob.out = (char *) &outValue;
  
!     code = pioctl(NULL, VIOC_UUIDCTL, &blob, 1);
      if (code) {
          Die(errno, NULL);
          return code;
--- 3792,3798 ----
      blob.out_size = sizeof(outValue);
      blob.out = (char *) &outValue;
  
!     code = pioctl_utf8(NULL, VIOC_UUIDCTL, &blob, 1);
      if (code) {
          Die(errno, NULL);
          return code;
***************
*** 3806,3812 ****
      blob.out_size = sizeof(long);
      blob.out = (char *) &outValue;
          
!     code = pioctl(NULL, VIOC_TRACECTL, &blob, 1);
      if (code) {
          Die(errno, NULL);
          return code;
--- 3851,3857 ----
      blob.out_size = sizeof(long);
      blob.out = (char *) &outValue;
          
!     code = pioctl_utf8(NULL, VIOC_TRACECTL, &blob, 1);
      if (code) {
          Die(errno, NULL);
          return code;
***************
*** 3887,3900 ****
      /* once per -file */
      for (ti = as->parms[1].items; ti; ti = ti->next) {
  	/* Do this solely to see if the file is there */
! 	code = pioctl(ti->data, VIOCWHEREIS, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
  	    error = 1;
  	    continue;
  	}
  
! 	code = pioctl(ti->data, VIOC_STOREBEHIND, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
  	    error = 1;
--- 3932,3945 ----
      /* once per -file */
      for (ti = as->parms[1].items; ti; ti = ti->next) {
  	/* Do this solely to see if the file is there */
! 	code = pioctl_utf8(ti->data, VIOCWHEREIS, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
  	    error = 1;
  	    continue;
  	}
  
! 	code = pioctl_utf8(ti->data, VIOC_STOREBEHIND, &blob, 1);
  	if (code) {
  	    Die(errno, ti->data);
  	    error = 1;
***************
*** 3918,3924 ****
       */
      if (!as->parms[1].items || (allfiles != -1)) {
  	tsb.sb_default = allfiles;
! 	code = pioctl(0, VIOC_STOREBEHIND, &blob, 1);
  	if (code) {
  	    Die(errno, ((allfiles == -1) ? 0 : "-allfiles"));
  	    error = 1;
--- 3963,3969 ----
       */
      if (!as->parms[1].items || (allfiles != -1)) {
  	tsb.sb_default = allfiles;
! 	code = pioctl_utf8(0, VIOC_STOREBEHIND, &blob, 1);
  	if (code) {
  	    Die(errno, ((allfiles == -1) ? 0 : "-allfiles"));
  	    error = 1;
***************
*** 3961,3967 ****
      blob.in = (char *) &flag;
      blob.in_size = sizeof(flag);
      blob.out_size = 0;
!     code = pioctl(0, VIOC_SETRXKCRYPT, &blob, 1);
      if (code)
          Die(code, NULL);
      return 0;
--- 4006,4012 ----
      blob.in = (char *) &flag;
      blob.in_size = sizeof(flag);
      blob.out_size = 0;
!     code = pioctl_utf8(0, VIOC_SETRXKCRYPT, &blob, 1);
      if (code)
          Die(code, NULL);
      return 0;
***************
*** 3979,3985 ****
      blob.out_size = sizeof(flag);
      blob.out = space;
  
!     code = pioctl(0, VIOC_GETRXKCRYPT, &blob, 1);
  
      if (code) 
          Die(code, NULL);
--- 4024,4030 ----
      blob.out_size = sizeof(flag);
      blob.out = space;
  
!     code = pioctl_utf8(0, VIOC_GETRXKCRYPT, &blob, 1);
  
      if (code) 
          Die(code, NULL);
***************
*** 4025,4031 ****
      blob.out_size = sizeof(long);
      blob.out = (char *) &outValue;
  
!     code = pioctl(NULL, VIOC_TRACEMEMDUMP, &blob, 1);
      if (code) {
          Die(errno, NULL);
          return code;
--- 4070,4076 ----
      blob.out_size = sizeof(long);
      blob.out = (char *) &outValue;
  
!     code = pioctl_utf8(NULL, VIOC_TRACEMEMDUMP, &blob, 1);
      if (code) {
          Die(errno, NULL);
          return code;
***************
*** 4217,4223 ****
  	in->num_servers =
  	    (MAXSIZE - 2 * sizeof(short)) / sizeof(struct spref);
  	/* returns addr in network byte order */
! 	code = pioctl(0, VIOC_GETCPREFS, &blob, 1);
  	if (code) {
  	    perror("getClientInterfaceAddr pioctl");
  	    return 1;
--- 4262,4268 ----
  	in->num_servers =
  	    (MAXSIZE - 2 * sizeof(short)) / sizeof(struct spref);
  	/* returns addr in network byte order */
! 	code = pioctl_utf8(0, VIOC_GETCPREFS, &blob, 1);
  	if (code) {
  	    perror("getClientInterfaceAddr pioctl");
  	    return 1;
***************
*** 4306,4312 ****
      }
      blob.in_size = sizeUsed - sizeof(struct spref);
  
!     code = pioctl(0, VIOC_SETCPREFS, &blob, 1);	/* network order */
      if (code) {
  	Die(errno, 0);
  	error = 1;
--- 4351,4357 ----
      }
      blob.in_size = sizeUsed - sizeof(struct spref);
  
!     code = pioctl_utf8(0, VIOC_SETCPREFS, &blob, 1);	/* network order */
      if (code) {
  	Die(errno, 0);
  	error = 1;
***************
*** 4417,4423 ****
  	blob.out_size = 0;
  	memset(space, 0, MAXSIZE);
  
! 	code = pioctl(parent_dir, VIOC_AFS_FLUSHMOUNT, &blob, 1);
  
  	if (code != 0) {
  	    if (errno == EINVAL) {
--- 4462,4468 ----
  	blob.out_size = 0;
  	memset(space, 0, MAXSIZE);
  
! 	code = pioctl_utf8(parent_dir, VIOC_AFS_FLUSHMOUNT, &blob, 1);
  
  	if (code != 0) {
  	    if (errno == EINVAL) {
***************
*** 4457,4463 ****
      blob.in_size = sizeof(afs_int32);
      blob.out_size = 0;
  
!     code = pioctl(NULL, VIOC_RXSTAT_PROC, &blob, 1);
      if (code != 0) {
  	Die(errno, NULL);
  	return 1;
--- 4502,4508 ----
      blob.in_size = sizeof(afs_int32);
      blob.out_size = 0;
  
!     code = pioctl_utf8(NULL, VIOC_RXSTAT_PROC, &blob, 1);
      if (code != 0) {
  	Die(errno, NULL);
  	return 1;
***************
*** 4491,4497 ****
      blob.in_size = sizeof(afs_int32);
      blob.out_size = 0;
  
!     code = pioctl(NULL, VIOC_RXSTAT_PEER, &blob, 1);
      if (code != 0) {
  	Die(errno, NULL);
  	return 1;
--- 4536,4542 ----
      blob.in_size = sizeof(afs_int32);
      blob.out_size = 0;
  
!     code = pioctl_utf8(NULL, VIOC_RXSTAT_PEER, &blob, 1);
      if (code != 0) {
  	Die(errno, NULL);
  	return 1;
***************
*** 4571,4577 ****
      blob.in_size = sizeof(test);
      blob.out_size = 0;
  
!     code = pioctl(NULL, VIOC_VOLSTAT_TEST, &blob, 1);
      if (code != 0) {
  	Die(errno, NULL);
  	return 1;
--- 4616,4622 ----
      blob.in_size = sizeof(test);
      blob.out_size = 0;
  
!     code = pioctl_utf8(NULL, VIOC_VOLSTAT_TEST, &blob, 1);
      if (code != 0) {
  	Die(errno, NULL);
  	return 1;
***************
*** 4584,4593 ****
  #include "AFS_component_version_number.c"
  #endif
  
! main(int argc, char **argv)
  {
      afs_int32 code;
      struct cmd_syndesc *ts;
  
  #ifdef	AFS_AIX32_ENV
      /*
--- 4629,4683 ----
  #include "AFS_component_version_number.c"
  #endif
  
! static void
! FreeUtf8CmdLine(int argc, char ** argv)
! {
!     int i;
!     for (i=0; i < argc; i++) {
!         if (argv[i])
!             free(argv[i]);
!     }
!     free(argv);
! }
! 
! static char **
! MakeUtf8Cmdline(int argc, const wchar_t **wargv)
! {
!     char ** argv;
!     int i;
! 
!     argv = calloc(argc, sizeof(argv[0]));
!     if (argv == NULL)
!         return NULL;
! 
!     for (i=0; i < argc; i++) {
!         int s;
! 
!         s = WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, NULL, 0, NULL, FALSE);
!         if (s == 0 ||
!             (argv[i] = calloc(s+1, sizeof(char))) == NULL) {
!             break;
!         }
! 
!         s = WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, argv[i], s+1, NULL, FALSE);
!         if (s == 0) {
!             break;
!         }
!     }
! 
!     if (i < argc) {
!         FreeUtf8CmdLine(argc, argv);
!         return NULL;
!     }
! 
!     return argv;
! }
! 
! int wmain(int argc, wchar_t **wargv)
  {
      afs_int32 code;
      struct cmd_syndesc *ts;
+     char ** argv;
  
  #ifdef	AFS_AIX32_ENV
      /*
***************
*** 4609,4614 ****
--- 4699,4706 ----
      WSAStartup(0x0101, &WSAjunk);
  #endif /* WIN32 */
  
+     argv = MakeUtf8Cmdline(argc, wargv);
+ 
      /* try to find volume location information */
      osi_Init();
  
***************
*** 4885,4895 ****
--- 4977,4993 ----
      cmd_AddParm(ts, "-volume",  CMD_SINGLE, CMD_OPTIONAL, "volume name or number");
      cmd_AddParm(ts, "-state",   CMD_SINGLE, CMD_OPTIONAL, "new volume state: online, busy, offline, down");
  
+     ts = cmd_CreateSyntax("smbunicode", SmbUnicodeCmd, NULL, "enable or disable Unicode on new SMB connections");
+     cmd_AddParm(ts, "-on", CMD_FLAG, CMD_OPTIONAL, "enable Unicode on new connections");
+     cmd_AddParm(ts, "-off", CMD_FLAG, CMD_OPTIONAL, "disable Unicode on new connections");
+ 
      code = cmd_Dispatch(argc, argv);
  
      if (rxInitDone) 
          rx_Finalize();
      
+     FreeUtf8CmdLine(argc, argv);
+     
      return code;
  }
  
Index: openafs/src/WINNT/afsd/fs_utils.c
diff -c openafs/src/WINNT/afsd/fs_utils.c:1.10.2.4 openafs/src/WINNT/afsd/fs_utils.c:1.10.2.5
*** openafs/src/WINNT/afsd/fs_utils.c:1.10.2.4	Fri Feb  8 21:32:19 2008
--- openafs/src/WINNT/afsd/fs_utils.c	Fri May  9 11:10:11 2008
***************
*** 74,81 ****
  		/* there's a drive letter there */
          firstp = pathp+2;
          pathHasDrive = 1;
!     }
!     else {
          firstp = pathp;
  		pathHasDrive = 0;
  	}   
--- 74,80 ----
  		/* there's a drive letter there */
          firstp = pathp+2;
          pathHasDrive = 1;
!     } else {
          firstp = pathp;
  		pathHasDrive = 0;
  	}   
***************
*** 86,92 ****
          return 0;
      }
          
!     GetCurrentDirectory(sizeof(origPath), origPath);
          
  	doSwitch = 0;
      if (pathHasDrive && (*pathp & ~0x20) != (origPath[0] & ~0x20)) {
--- 85,91 ----
          return 0;
      }
          
!     GetCurrentDirectoryA(sizeof(origPath), origPath);
          
  	doSwitch = 0;
      if (pathHasDrive && (*pathp & ~0x20) != (origPath[0] & ~0x20)) {
***************
*** 98,111 ****
          newPath[0] = *pathp;
          newPath[1] = ':';
          newPath[2] = 0;
!         if (!SetCurrentDirectory(newPath)) {
  			code = GetLastError();
              return code;
          }
      }
          
      /* now get the absolute path to the current wdir in this drive */
!     GetCurrentDirectory(sizeof(tpath), tpath);
      strcpy(outPathp, tpath+2);	/* skip drive letter */
  	/* if there is a non-null name after the drive, append it */
  	if (*firstp != 0) {
--- 97,110 ----
          newPath[0] = *pathp;
          newPath[1] = ':';
          newPath[2] = 0;
!         if (!SetCurrentDirectoryA(newPath)) {
  			code = GetLastError();
              return code;
          }
      }
          
      /* now get the absolute path to the current wdir in this drive */
!     GetCurrentDirectoryA(sizeof(tpath), tpath);
      strcpy(outPathp, tpath+2);	/* skip drive letter */
  	/* if there is a non-null name after the drive, append it */
  	if (*firstp != 0) {
***************
*** 115,121 ****
  
  	/* finally, if necessary, switch back to our home drive letter */
      if (doSwitch) {
! 		SetCurrentDirectory(origPath);
      }
          
      return 0;
--- 114,120 ----
  
  	/* finally, if necessary, switch back to our home drive letter */
      if (doSwitch) {
!         SetCurrentDirectoryA(origPath);
      }
          
      return 0;
***************
*** 197,205 ****
      char *pmount=mountRoot;
      DWORD len=sizeof(mountRoot)-1;
      printf("int mountroot \n");
!     if ((RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY, 0, 
                        (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &parmKey)!= ERROR_SUCCESS)
!          || (RegQueryValueEx(parmKey, "Mountroot", NULL, NULL,(LPBYTE)(mountRoot), &len)!= ERROR_SUCCESS)
           || (len==sizeof(mountRoot)-1)
           ) 
          strcpy(mountRoot, "\\afs"); 
--- 196,204 ----
      char *pmount=mountRoot;
      DWORD len=sizeof(mountRoot)-1;
      printf("int mountroot \n");
!     if ((RegOpenKeyExA(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY, 0, 
                        (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &parmKey)!= ERROR_SUCCESS)
!         || (RegQueryValueExA(parmKey, "Mountroot", NULL, NULL,(LPBYTE)(mountRoot), &len)!= ERROR_SUCCESS)
           || (len==sizeof(mountRoot)-1)
           ) 
          strcpy(mountRoot, "\\afs"); 
Index: openafs/src/WINNT/afsd/rawops.c
diff -c openafs/src/WINNT/afsd/rawops.c:1.2.4.6 openafs/src/WINNT/afsd/rawops.c:1.2.4.7
*** openafs/src/WINNT/afsd/rawops.c:1.2.4.6	Wed Mar 19 11:36:27 2008
--- openafs/src/WINNT/afsd/rawops.c	Thu Jun 26 10:38:24 2008
***************
*** 321,332 ****
              nbytes = count;	/* don't go past end of request */
  
          /* now copy the data */
! #ifdef DJGPP
!         if (dosflag)
!             dosmemget((dos_ptr)op, nbytes, bufferp->datap + bufIndex);
!         else
! #endif /* DJGPP */
!             memcpy(bufferp->datap + bufIndex, op, nbytes);
          buf_SetDirty(bufferp, bufIndex, nbytes);
  
          /* and record the last writer */
--- 321,327 ----
              nbytes = count;	/* don't go past end of request */
  
          /* now copy the data */
!         memcpy(bufferp->datap + bufIndex, op, nbytes);
          buf_SetDirty(bufferp, bufIndex, nbytes);
  
          /* and record the last writer */
Index: openafs/src/WINNT/afsd/smb.c
diff -c openafs/src/WINNT/afsd/smb.c:1.118.2.70.2.1 openafs/src/WINNT/afsd/smb.c:1.118.2.81
*** openafs/src/WINNT/afsd/smb.c:1.118.2.70.2.1	Sun Jun 22 23:05:04 2008
--- openafs/src/WINNT/afsd/smb.c	Wed Jul 16 11:23:46 2008
***************
*** 10,25 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #pragma warning(push)
  #pragma warning(disable: 4005)
  #include <ntstatus.h>
  #pragma warning(pop)
- #else
- #include <sys/timeb.h>
- #include <tzfile.h>
- #endif /* !DJGPP */
  #include <stddef.h>
  #include <stdlib.h>
  #include <malloc.h>
--- 10,20 ----
***************
*** 36,43 ****
  #include "smb.h"
  #include "lanahelper.h"
  
  /* These characters are illegal in Windows filenames */
! static char *illegalChars = "\\/:*?\"<>|";
  
  static int smbShutdownFlag = 0;
  static int smb_ListenerState = SMB_LISTENER_UNINITIALIZED;
--- 31,41 ----
  #include "smb.h"
  #include "lanahelper.h"
  
+ #define STRSAFE_NO_DEPRECATE
+ #include <strsafe.h>
+ 
  /* These characters are illegal in Windows filenames */
! static clientchar_t *illegalChars = _C("\\/:*?\"<>|");
  
  static int smbShutdownFlag = 0;
  static int smb_ListenerState = SMB_LISTENER_UNINITIALIZED;
***************
*** 65,71 ****
  osi_rwlock_t smb_rctLock;
  osi_mutex_t  smb_ListenerLock;
  osi_mutex_t  smb_StartedLock;
!  
  unsigned char smb_LANadapter = LANA_INVALID;
  unsigned char smb_sharename[NCBNAMSZ+1] = {0};
  int  smb_LanAdapterChangeDetected = 0;
--- 63,69 ----
  osi_rwlock_t smb_rctLock;
  osi_mutex_t  smb_ListenerLock;
  osi_mutex_t  smb_StartedLock;
! 
  unsigned char smb_LANadapter = LANA_INVALID;
  unsigned char smb_sharename[NCBNAMSZ+1] = {0};
  int  smb_LanAdapterChangeDetected = 0;
***************
*** 113,125 ****
  LANA_ENUM lana_list;
  /* for raw I/O */
  osi_mutex_t smb_RawBufLock;
- #ifdef DJGPP
- #define SMB_RAW_BUFS 4
- dos_ptr smb_RawBufs;
- int smb_RawBufSel[SMB_RAW_BUFS];
- #else
  char *smb_RawBufs;
- #endif /* DJGPP */
  
  #define SMB_MASKFLAG_TILDE 1
  #define SMB_MASKFLAG_CASEFOLD 2
--- 111,117 ----
***************
*** 128,143 ****
  
  /* for raw write */
  typedef struct raw_write_cont {
! 	long code;
! 	osi_hyper_t offset;
! 	long count;
! #ifndef DJGPP
! 	char *buf;
! #else
! 	dos_ptr buf;
! #endif /* DJGPP */
! 	int writeMode;
! 	long alreadyWritten;
  } raw_write_cont_t;
  
  /* dir search stuff */
--- 120,131 ----
  
  /* for raw write */
  typedef struct raw_write_cont {
!     long code;
!     osi_hyper_t offset;
!     long count;
!     char *buf;
!     int writeMode;
!     long alreadyWritten;
  } raw_write_cont_t;
  
  /* dir search stuff */
***************
*** 148,161 ****
  /* hide dot files? */
  int smb_hideDotFiles;
  
  /* global state about V3 protocols */
  int smb_useV3;		/* try to negotiate V3 */
  
! #ifndef DJGPP
! static showErrors = 0;
  /* MessageBox or something like it */
! int (_stdcall *smb_MBfunc)(HWND, LPCTSTR, LPCTSTR, UINT) = NULL;
! #endif /* DJGPP */
  
  /* GMT time info:
   * Time in Unix format of midnight, 1/1/1970 local time.
--- 136,151 ----
  /* hide dot files? */
  int smb_hideDotFiles;
  
+ /* Negotiate Unicode support? */
+ LONG smb_UseUnicode;
+ 
  /* global state about V3 protocols */
  int smb_useV3;		/* try to negotiate V3 */
  
! static int showErrors = 0;
  /* MessageBox or something like it */
! int (_stdcall *smb_MBfunc)(HWND, LPCTSTR, LPCTSTR, UINT)
! = NULL;
  
  /* GMT time info:
   * Time in Unix format of midnight, 1/1/1970 local time.
***************
*** 185,216 ****
  void smb_DispatchPacket(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp,
  			NCB *ncbp, raw_write_cont_t *rwcp);
  int smb_NetbiosInit(int);
- #ifdef DJGPP
- #ifndef AFS_WIN95_ENV
- DWORD smb_ServerExceptionFilter(void);
- #endif
- 
- extern char cm_HostName[];
- extern char cm_confDir[];
- #endif
- 
- #ifdef DJGPP
- #define LPTSTR char *
- #define GetComputerName(str, sizep) \
-        strcpy((str), cm_HostName); \
-        *(sizep) = strlen(cm_HostName)
- #endif /* DJGPP */
  
  #ifdef LOG_PACKET
  void smb_LogPacket(smb_packet_t *packet);
  #endif /* LOG_PACKET */
! 
! char smb_ServerDomainName[MAX_COMPUTERNAME_LENGTH + 1] = ""; /* domain name */
  int smb_ServerDomainNameLength = 0;
! char smb_ServerOS[] = "Windows 5.0"; /* Faux OS String */
! int smb_ServerOSLength = sizeof(smb_ServerOS);
! char smb_ServerLanManager[] = "Windows 2000 LAN Manager"; /* Faux LAN Manager string */
! int smb_ServerLanManagerLength = sizeof(smb_ServerLanManager);
  
  /* Faux server GUID. This is never checked. */
  GUID smb_ServerGUID = { 0x40015cb8, 0x058a, 0x44fc, { 0xae, 0x7e, 0xbb, 0x29, 0x52, 0xee, 0x7e, 0xff }};
--- 175,191 ----
  void smb_DispatchPacket(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp,
  			NCB *ncbp, raw_write_cont_t *rwcp);
  int smb_NetbiosInit(int);
  
  #ifdef LOG_PACKET
  void smb_LogPacket(smb_packet_t *packet);
  #endif /* LOG_PACKET */
!                                                          
! clientchar_t smb_ServerDomainName[MAX_COMPUTERNAME_LENGTH + 1] = _C(""); /* domain name */
  int smb_ServerDomainNameLength = 0;
! clientchar_t smb_ServerOS[] = _C("Windows 5.0"); /* Faux OS String */
! int smb_ServerOSLength = lengthof(smb_ServerOS);
! clientchar_t smb_ServerLanManager[] = _C("Windows 2000 LAN Manager"); /* Faux LAN Manager string */
! int smb_ServerLanManagerLength = lengthof(smb_ServerLanManager);
  
  /* Faux server GUID. This is never checked. */
  GUID smb_ServerGUID = { 0x40015cb8, 0x058a, 0x44fc, { 0xae, 0x7e, 0xbb, 0x29, 0x52, 0xee, 0x7e, 0xff }};
***************
*** 519,526 ****
  /* Check if the named file/dir is a dotfile/dotdir */
  /* String pointed to by lastComp can have leading slashes, but otherwise should have
     no other patch components */
! unsigned int smb_IsDotFile(char *lastComp) {
!     char *s;
      if(lastComp) {
          /* skip over slashes */
          for(s=lastComp;*s && (*s == '\\' || *s == '/'); s++);
--- 494,502 ----
  /* Check if the named file/dir is a dotfile/dotdir */
  /* String pointed to by lastComp can have leading slashes, but otherwise should have
     no other patch components */
! unsigned int smb_IsDotFile(clientchar_t *lastComp) {
!     clientchar_t *s;
! 
      if(lastComp) {
          /* skip over slashes */
          for(s=lastComp;*s && (*s == '\\' || *s == '/'); s++);
***************
*** 529,540 ****
          return 0;
  
      /* nulls, curdir and parent dir doesn't count */
!     if (!*s) 
          return 0;
!     if (*s == '.') {
          if (!*(s + 1)) 
              return 0;
!         if(*(s+1) == '.' && !*(s + 2)) 
              return 0;
          return 1;
      }
--- 505,516 ----
          return 0;
  
      /* nulls, curdir and parent dir doesn't count */
!     if (!*s)
          return 0;
!     if (*s == _C('.')) {
          if (!*(s + 1)) 
              return 0;
!         if(*(s+1) == _C('.') && !*(s + 2)) 
              return 0;
          return 1;
      }
***************
*** 554,560 ****
      return (int)num;
  }
  
- #ifndef DJGPP
  void ShowUnixTime(char *FuncName, time_t unixTime)
  {
      FILETIME ft;
--- 530,535 ----
***************
*** 580,588 ****
          osi_Log1(smb_logp, "%s", osi_LogSaveString(smb_logp, msg));
      }
  }       
- #endif /* DJGPP */
  
- #ifndef DJGPP
  /* Determine if we are observing daylight savings time */
  void GetTimeZoneInfo(BOOL *pDST, LONG *pDstBias, LONG *pBias)
  {
--- 555,561 ----
***************
*** 625,642 ****
       */
      *pDST = localDST.wHour != local.wHour;
  }       
- #else
- /* Determine if we are observing daylight savings time */
- void GetTimeZoneInfo(BOOL *pDST, LONG *pDstBias, LONG *pBias)
- {
-     struct timeb t;
- 
-     ftime(&t);
-     *pDST = t.dstflag;
-     *pDstBias = -60;    /* where can this be different? */
-     *pBias = t.timezone;
- }       
- #endif /* DJGPP */
   
  
  void CompensateForSmbClientLastWriteTimeBugs(afs_uint32 *pLastWriteTime)
--- 598,603 ----
***************
*** 700,706 ****
  }
  #endif /* USE_NUMERIC_TIME_CONV */
  
- #ifndef DJGPP
  #ifdef USE_NUMERIC_TIME_CONV
  void smb_LargeSearchTimeFromUnixTime(FILETIME *largeTimep, time_t unixTime)
  {
--- 661,666 ----
***************
*** 752,780 ****
      SystemTimeToFileTime(&stm, largeTimep);
  }
  #endif /* USE_NUMERIC_TIME_CONV */
- #else /* DJGPP */
- void smb_LargeSearchTimeFromUnixTime(FILETIME *largeTimep, time_t unixTime)
- {
-     /* unixTime: seconds since 1/1/1970 00:00:00 GMT */
-     /* FILETIME: 100ns intervals since 1/1/1601 00:00:00 ??? */
-     LARGE_INTEGER *ft = (LARGE_INTEGER *) largeTimep;
-     LARGE_INTEGER ut;
-     int leap_years = 89;   /* leap years betw 1/1/1601 and 1/1/1970 */
- 
-     /* set ft to number of 100ns intervals betw 1/1/1601 and 1/1/1970 GMT */
-     *ft = ConvertLongToLargeInteger(((EPOCH_YEAR-1601) * 365 + leap_years)
-                                      * 24 * 60);
-     *ft = LargeIntegerMultiplyByLong(*ft, 60);
-     *ft = LargeIntegerMultiplyByLong(*ft, 10000000);
- 
-     /* add unix time */
-     ut = ConvertLongToLargeInteger(unixTime);
-     ut = LargeIntegerMultiplyByLong(ut, 10000000);
-     *ft = LargeIntegerAdd(*ft, ut);
- }       
- #endif /* !DJGPP */
  
- #ifndef DJGPP
  #ifdef USE_NUMERIC_TIME_CONV
  void smb_UnixTimeFromLargeSearchTime(time_t *unixTimep, FILETIME *largeTimep)
  {
--- 712,718 ----
***************
*** 814,840 ****
      _timezone = save_timezone;
  }       
  #endif /* USE_NUMERIC_TIME_CONV */
- #else /* DJGPP */
- void smb_UnixTimeFromLargeSearchTime(time_t *unixTimep, FILETIME *largeTimep)
- {
-     /* unixTime: seconds since 1/1/1970 00:00:00 GMT */
-     /* FILETIME: 100ns intervals since 1/1/1601 00:00:00 GMT? */
-     LARGE_INTEGER *ft = (LARGE_INTEGER *) largeTimep;
-     LARGE_INTEGER a;
-     int leap_years = 89;
- 
-     /* set to number of 100ns intervals betw 1/1/1601 and 1/1/1970 */
-     a = ConvertLongToLargeInteger(((EPOCH_YEAR-1601) * 365 + leap_years) * 24 * 60);
-     a = LargeIntegerMultiplyByLong(a, 60);
-     a = LargeIntegerMultiplyByLong(a, 10000000);
- 
-     /* subtract it from ft */
-     a = LargeIntegerSubtract(*ft, a);
- 
-     /* divide down to seconds */
-     *unixTimep = LargeIntegerDivideByLong(a, 10000000);
- }       
- #endif /* !DJGPP */
  
  void smb_SearchTimeFromUnixTime(afs_uint32 *searchTimep, time_t unixTime)
  {
--- 752,757 ----
***************
*** 893,904 ****
  
  void smb_UnixTimeFromDosUTime(time_t *unixTimep, afs_uint32 dosTime)
  {
- #ifndef DJGPP
      *unixTimep = dosTime + smb_localZero;
- #else /* DJGPP */
-     /* dosTime seems to be already adjusted for GMT */
-     *unixTimep = dosTime;
- #endif /* !DJGPP */
  }
  
  smb_vc_t *smb_FindVC(unsigned short lsn, int flags, int lana)
--- 810,816 ----
***************
*** 985,1000 ****
      return vcp;
  }
  
! int smb_IsStarMask(char *maskp)
  {
      int i;
!     char tc;
          
      for(i=0; i<11; i++) {
          tc = *maskp++;
!         if (tc == '?' || tc == '*' || tc == '>')
  	    return 1;
!     }	
      return 0;
  }
  
--- 897,912 ----
      return vcp;
  }
  
! int smb_IsStarMask(clientchar_t *maskp)
  {
      int i;
!     clientchar_t tc;
          
      for(i=0; i<11; i++) {
          tc = *maskp++;
!         if (tc == _C('?') || tc == _C('*') || tc == _C('>'))
  	    return 1;
!     }
      return 0;
  }
  
***************
*** 1035,1040 ****
--- 947,964 ----
               */
              vcp->refCount++;
          }
+     } else if (vcp->flags & SMB_VCFLAG_ALREADYDEAD) {
+         /* The reference count is non-zero but the VC is dead.
+          * This implies that some FIDs, TIDs, etc on the VC have yet to 
+          * be cleaned up.  Add a reference that will be dropped by
+          * smb_CleanupDeadVC() and try to cleanup the VC again.
+          * Eventually the refCount will drop to zero when all of the
+          * active threads working with the VC end their task.
+          */
+         vcp->refCount++;        /* put the refCount back */
+         lock_ReleaseWrite(&smb_rctLock);
+         smb_CleanupDeadVC(vcp);
+         lock_ObtainWrite(&smb_rctLock);
      }
  }
  
***************
*** 1077,1083 ****
      smb_user_t *uidpIter;
      smb_user_t *uidpNext;
      smb_vc_t **vcpp;
! 
  
      lock_ObtainMutex(&vcp->mx);
      if (vcp->flags & SMB_VCFLAG_CLEAN_IN_PROGRESS) {
--- 1001,1007 ----
      smb_user_t *uidpIter;
      smb_user_t *uidpNext;
      smb_vc_t **vcpp;
!     afs_uint32 refCount = 0;
  
      lock_ObtainMutex(&vcp->mx);
      if (vcp->flags & SMB_VCFLAG_CLEAN_IN_PROGRESS) {
***************
*** 1107,1113 ****
      for (fidpIter = vcp->fidsp; fidpIter; fidpIter = fidpNext) {
          fidpNext = (smb_fid_t *) osi_QNext(&fidpIter->q);
  
!         if (fidpIter->delete)
              continue;
  
          fid = fidpIter->fid;
--- 1031,1037 ----
      for (fidpIter = vcp->fidsp; fidpIter; fidpIter = fidpNext) {
          fidpNext = (smb_fid_t *) osi_QNext(&fidpIter->q);
  
!         if (fidpIter->deleteOk)
              continue;
  
          fid = fidpIter->fid;
***************
*** 1125,1133 ****
  
      for (tidpIter = vcp->tidsp; tidpIter; tidpIter = tidpNext) {
  	tidpNext = tidpIter->nextp;
! 	if (tidpIter->delete)
  	    continue;
! 	tidpIter->delete = 1;
  
  	tid = tidpIter->tid;
  	osi_Log2(smb_logp, "  Cleanup TID %d (tidp=0x%x)", tid, tidpIter);
--- 1049,1057 ----
  
      for (tidpIter = vcp->tidsp; tidpIter; tidpIter = tidpNext) {
  	tidpNext = tidpIter->nextp;
! 	if (tidpIter->deleteOk)
  	    continue;
! 	tidpIter->deleteOk = 1;
  
  	tid = tidpIter->tid;
  	osi_Log2(smb_logp, "  Cleanup TID %d (tidp=0x%x)", tid, tidpIter);
***************
*** 1139,1147 ****
  
      for (uidpIter = vcp->usersp; uidpIter; uidpIter = uidpNext) {
  	uidpNext = uidpIter->nextp;
! 	if (uidpIter->delete)
  	    continue;
! 	uidpIter->delete = 1;
  
  	/* do not add an additional reference count for the smb_user_t
  	 * as the smb_vc_t already is holding a reference */
--- 1063,1071 ----
  
      for (uidpIter = vcp->usersp; uidpIter; uidpIter = uidpNext) {
  	uidpNext = uidpIter->nextp;
! 	if (uidpIter->deleteOk)
  	    continue;
! 	uidpIter->deleteOk = 1;
  
  	/* do not add an additional reference count for the smb_user_t
  	 * as the smb_vc_t already is holding a reference */
***************
*** 1155,1162 ****
  
      /* The vcp is now on the deadVCsp list.  We intentionally drop the
       * reference so that the refcount can reach 0 and we can delete it */
      smb_ReleaseVCNoLock(vcp);
!     
      lock_ReleaseWrite(&smb_rctLock);
      osi_Log1(smb_logp, "Finished cleaning up dead vcp 0x%x", vcp);
  }
--- 1079,1098 ----
  
      /* The vcp is now on the deadVCsp list.  We intentionally drop the
       * reference so that the refcount can reach 0 and we can delete it */
+     refCount = vcp->refCount;
      smb_ReleaseVCNoLock(vcp);
! 
!     /* 
!      * If the refCount == 1 going into the ReleaseVCNoLock call 
!      * the object will be freed and it won't be safe to clear 
!      * the flag.
!      */
!     if (refCount > 1) {
!         lock_ObtainMutex(&vcp->mx);
!         vcp->flags &= ~SMB_VCFLAG_CLEAN_IN_PROGRESS;
!         lock_ReleaseMutex(&vcp->mx);
!     }
! 
      lock_ReleaseWrite(&smb_rctLock);
      osi_Log1(smb_logp, "Finished cleaning up dead vcp 0x%x", vcp);
  }
***************
*** 1168,1174 ****
      lock_ObtainWrite(&smb_rctLock);
    retry:
      for (tidp = vcp->tidsp; tidp; tidp = tidp->nextp) {
! 	if (tidp->refCount == 0 && tidp->delete) {
  	    tidp->refCount++;
  	    smb_ReleaseTID(tidp, TRUE);
  	    goto retry;
--- 1104,1110 ----
      lock_ObtainWrite(&smb_rctLock);
    retry:
      for (tidp = vcp->tidsp; tidp; tidp = tidp->nextp) {
! 	if (tidp->refCount == 0 && tidp->deleteOk) {
  	    tidp->refCount++;
  	    smb_ReleaseTID(tidp, TRUE);
  	    goto retry;
***************
*** 1177,1183 ****
          if (tid == tidp->tid) {
              tidp->refCount++;
              break;
!         }	
      }
      if (!tidp && (flags & SMB_FLAG_CREATE)) {
          tidp = malloc(sizeof(*tidp));
--- 1113,1119 ----
          if (tid == tidp->tid) {
              tidp->refCount++;
              break;
!         }
      }
      if (!tidp && (flags & SMB_FLAG_CREATE)) {
          tidp = malloc(sizeof(*tidp));
***************
*** 1192,1198 ****
      }
      lock_ReleaseWrite(&smb_rctLock);
      return tidp;
! }       	
  
  void smb_HoldTIDNoLock(smb_tid_t *tidp)
  {
--- 1128,1134 ----
      }
      lock_ReleaseWrite(&smb_rctLock);
      return tidp;
! }
  
  void smb_HoldTIDNoLock(smb_tid_t *tidp)
  {
***************
*** 1209,1215 ****
      if (!locked)
          lock_ObtainWrite(&smb_rctLock);
      osi_assertx(tidp->refCount-- > 0, "smb_tid_t refCount 0");
!     if (tidp->refCount == 0 && (tidp->delete)) {
          ltpp = &tidp->vcp->tidsp;
          for(tp = *ltpp; tp; ltpp = &tp->nextp, tp = *ltpp) {
              if (tp == tidp) 
--- 1145,1151 ----
      if (!locked)
          lock_ObtainWrite(&smb_rctLock);
      osi_assertx(tidp->refCount-- > 0, "smb_tid_t refCount 0");
!     if (tidp->refCount == 0 && (tidp->deleteOk)) {
          ltpp = &tidp->vcp->tidsp;
          for(tp = *ltpp; tp; ltpp = &tp->nextp, tp = *ltpp) {
              if (tp == tidp) 
***************
*** 1237,1245 ****
      for(uidp = vcp->usersp; uidp; uidp = uidp->nextp) {
          if (uid == uidp->userID) {
              uidp->refCount++;
!             osi_Log3(smb_logp, "smb_FindUID vcp[0x%p] found-uid[%d] name[%s]",
  		     vcp, uidp->userID, 
! 		     osi_LogSaveString(smb_logp, (uidp->unp) ? uidp->unp->name : ""));
              break;
          }
      }
--- 1173,1181 ----
      for(uidp = vcp->usersp; uidp; uidp = uidp->nextp) {
          if (uid == uidp->userID) {
              uidp->refCount++;
!             osi_Log3(smb_logp, "smb_FindUID vcp[0x%p] found-uid[%d] name[%S]",
  		     vcp, uidp->userID, 
! 		     ((uidp->unp)? osi_LogSaveClientString(smb_logp, uidp->unp->name):_C("")));
              break;
          }
      }
***************
*** 1253,1274 ****
          vcp->usersp = uidp;
          lock_InitializeMutex(&uidp->mx, "user_t mutex");
          uidp->userID = uid;
!         osi_Log3(smb_logp, "smb_FindUID vcp[0x%p] new-uid[%d] name[%s]",
! 		 vcp, uidp->userID, 
! 		 osi_LogSaveString(smb_logp,uidp->unp ? uidp->unp->name : ""));
      }
      lock_ReleaseWrite(&smb_rctLock);
      return uidp;
  }       	
  
! smb_username_t *smb_FindUserByName(char *usern, char *machine, afs_uint32 flags)
  {
      smb_username_t *unp= NULL;
  
      lock_ObtainWrite(&smb_rctLock);
      for(unp = usernamesp; unp; unp = unp->nextp) {
!         if (stricmp(unp->name, usern) == 0 &&
!              stricmp(unp->machine, machine) == 0) {
              unp->refCount++;
              break;
          }
--- 1189,1211 ----
          vcp->usersp = uidp;
          lock_InitializeMutex(&uidp->mx, "user_t mutex");
          uidp->userID = uid;
!         osi_Log3(smb_logp, "smb_FindUID vcp[0x%p] new-uid[%d] name[%S]",
! 		 vcp, uidp->userID,
! 		 ((uidp->unp)?osi_LogSaveClientString(smb_logp,uidp->unp->name):_C("")));
      }
      lock_ReleaseWrite(&smb_rctLock);
      return uidp;
  }       	
  
! smb_username_t *smb_FindUserByName(clientchar_t *usern, clientchar_t *machine,
!                                    afs_uint32 flags)
  {
      smb_username_t *unp= NULL;
  
      lock_ObtainWrite(&smb_rctLock);
      for(unp = usernamesp; unp; unp = unp->nextp) {
!         if (cm_ClientStrCmpI(unp->name, usern) == 0 &&
!             cm_ClientStrCmpI(unp->machine, machine) == 0) {
              unp->refCount++;
              break;
          }
***************
*** 1278,1285 ****
          memset(unp, 0, sizeof(*unp));
          unp->refCount = 1;
          unp->nextp = usernamesp;
!         unp->name = strdup(usern);
!         unp->machine = strdup(machine);
          usernamesp = unp;
          lock_InitializeMutex(&unp->mx, "username_t mutex");
  	if (flags & SMB_FLAG_AFSLOGON)
--- 1215,1222 ----
          memset(unp, 0, sizeof(*unp));
          unp->refCount = 1;
          unp->nextp = usernamesp;
!         unp->name = cm_ClientStrDup(usern);
!         unp->machine = cm_ClientStrDup(machine);
          usernamesp = unp;
          lock_InitializeMutex(&unp->mx, "username_t mutex");
  	if (flags & SMB_FLAG_AFSLOGON)
***************
*** 1290,1296 ****
      return unp;
  }	
  
! smb_user_t *smb_FindUserByNameThisSession(smb_vc_t *vcp, char *usern)
  {
      smb_user_t *uidp= NULL;
  
--- 1227,1233 ----
      return unp;
  }	
  
! smb_user_t *smb_FindUserByNameThisSession(smb_vc_t *vcp, clientchar_t *usern)
  {
      smb_user_t *uidp= NULL;
  
***************
*** 1298,1307 ****
      for(uidp = vcp->usersp; uidp; uidp = uidp->nextp) {
          if (!uidp->unp) 
              continue;
!         if (stricmp(uidp->unp->name, usern) == 0) {
              uidp->refCount++;
!             osi_Log3(smb_logp,"smb_FindUserByNameThisSession vcp[0x%p] uid[%d] match-name[%s]",
! 		     vcp,uidp->userID,osi_LogSaveString(smb_logp,usern));
              break;
          } else
              continue;
--- 1235,1244 ----
      for(uidp = vcp->usersp; uidp; uidp = uidp->nextp) {
          if (!uidp->unp) 
              continue;
!         if (cm_stricmp_utf16(uidp->unp->name, usern) == 0) {
              uidp->refCount++;
!             osi_Log3(smb_logp,"smb_FindUserByNameThisSession vcp[0x%p] uid[%d] match-name[%S]",
! 		     vcp,uidp->userID,osi_LogSaveClientString(smb_logp,usern));
              break;
          } else
              continue;
***************
*** 1334,1340 ****
  	free(unp->name);
  	free(unp->machine);
  	free(unp);
!     }		
      lock_ReleaseWrite(&smb_rctLock);
      if (userp)
          cm_ReleaseUser(userp);
--- 1271,1277 ----
  	free(unp->name);
  	free(unp->machine);
  	free(unp);
!     }
      lock_ReleaseWrite(&smb_rctLock);
      if (userp)
          cm_ReleaseUser(userp);
***************
*** 1419,1425 ****
   * Return a pointer to a pathname extracted from a TID structure.  The
   * TID structure is not held; assume it won't go away.
   */
! long smb_LookupTIDPath(smb_vc_t *vcp, unsigned short tid, char ** treepath)
  {
      smb_tid_t *tidp;
      long code = 0;
--- 1356,1362 ----
   * Return a pointer to a pathname extracted from a TID structure.  The
   * TID structure is not held; assume it won't go away.
   */
! long smb_LookupTIDPath(smb_vc_t *vcp, unsigned short tid, clientchar_t ** treepath)
  {
      smb_tid_t *tidp;
      long code = 0;
***************
*** 1478,1484 ****
  
    retry:
      for(fidp = vcp->fidsp; fidp; fidp = (smb_fid_t *) osi_QNext(&fidp->q)) {
! 	if (fidp->refCount == 0 && fidp->delete) {
  	    fidp->refCount++;
  	    lock_ReleaseWrite(&smb_rctLock);
  	    smb_ReleaseFID(fidp);
--- 1415,1421 ----
  
    retry:
      for(fidp = vcp->fidsp; fidp; fidp = (smb_fid_t *) osi_QNext(&fidp->q)) {
! 	if (fidp->refCount == 0 && fidp->deleteOk) {
  	    fidp->refCount++;
  	    lock_ReleaseWrite(&smb_rctLock);
  	    smb_ReleaseFID(fidp);
***************
*** 1577,1583 ****
      lock_ObtainMutex(&fidp->mx);
      lock_ObtainWrite(&smb_rctLock);
      osi_assertx(fidp->refCount-- > 0, "smb_fid_t refCount 0");
!     if (fidp->refCount == 0 && (fidp->delete)) {
          vcp = fidp->vcp;
          fidp->vcp = NULL;
          scp = fidp->scp;    /* release after lock is released */
--- 1514,1520 ----
      lock_ObtainMutex(&fidp->mx);
      lock_ObtainWrite(&smb_rctLock);
      osi_assertx(fidp->refCount-- > 0, "smb_fid_t refCount 0");
!     if (fidp->refCount == 0 && (fidp->deleteOk)) {
          vcp = fidp->vcp;
          fidp->vcp = NULL;
          scp = fidp->scp;    /* release after lock is released */
***************
*** 1600,1609 ****
          if (ioctlp) {
              if (ioctlp->prefix)
                  cm_FreeSpace(ioctlp->prefix);
!             if (ioctlp->inAllocp)
!                 free(ioctlp->inAllocp);
!             if (ioctlp->outAllocp)
!                 free(ioctlp->outAllocp);
              free(ioctlp);
          }       
  	lock_ReleaseMutex(&fidp->mx);
--- 1537,1546 ----
          if (ioctlp) {
              if (ioctlp->prefix)
                  cm_FreeSpace(ioctlp->prefix);
!             if (ioctlp->ioctl.inAllocp)
!                 free(ioctlp->ioctl.inAllocp);
!             if (ioctlp->ioctl.outAllocp)
!                 free(ioctlp->ioctl.outAllocp);
              free(ioctlp);
          }       
  	lock_ReleaseMutex(&fidp->mx);
***************
*** 1629,1640 ****
   * Case-insensitive search for one string in another;
   * used to find variable names in submount pathnames.
   */
! static char *smb_stristr(char *str1, char *str2)
  {
!     char *cursor;
  
      for (cursor = str1; *cursor; cursor++)
!         if (stricmp(cursor, str2) == 0)
              return cursor;
  
      return NULL;
--- 1566,1577 ----
   * Case-insensitive search for one string in another;
   * used to find variable names in submount pathnames.
   */
! static clientchar_t *smb_stristr(clientchar_t *str1, clientchar_t *str2)
  {
!     clientchar_t *cursor;
  
      for (cursor = str1; *cursor; cursor++)
!         if (cm_ClientStrCmpI(cursor, str2) == 0)
              return cursor;
  
      return NULL;
***************
*** 1645,1734 ****
   * name has been identified by smb_stristr() and is in substr.  Variable name
   * length (plus one) is in substr_size.  Variable value is in newstr.
   */
! static void smb_subst(char *str1, char *substr, unsigned int substr_size,
!                       char *newstr)
  {
!     char temp[1024];
! 
!     strcpy(temp, substr + substr_size - 1);
!     strcpy(substr, newstr);
!     strcat(str1, temp);
! }       
! 
! char VNUserName[] = "%USERNAME%";
! char VNLCUserName[] = "%LCUSERNAME%";
! char VNComputerName[] = "%COMPUTERNAME%";
! char VNLCComputerName[] = "%LCCOMPUTERNAME%";
! 
! #ifdef DJGPP
! /* List available shares */
! int smb_ListShares()
! {
!     char sbmtpath[AFSPATHMAX];
!     char pathName[AFSPATHMAX];
!     char shareBuf[4096];
!     int num_shares=0;
!     char *this_share;
!     int len;
!     char *p;
!     int print_afs = 0;
!     int code;
! 
!     /*strcpy(shareNameList[num_shares], "all");
!       strcpy(pathNameList[num_shares++], "/afs");*/
!     fprintf(stderr, "The following shares are available:\n");
!     fprintf(stderr, "Share Name (AFS Path)\n");
!     fprintf(stderr, "---------------------\n");
!     fprintf(stderr, "\\\\%s\\%-16s (%s)\n", smb_localNamep, "ALL", cm_mountRoot);
! 
! #ifndef DJGPP
!     code = GetWindowsDirectory(sbmtpath, sizeof(sbmtpath));
!     if (code == 0 || code > sizeof(sbmtpath)) return -1;
! #else
!     strcpy(sbmtpath, cm_confDir);
! #endif /* !DJGPP */
!     strcat(sbmtpath, "/afsdsbmt.ini");
!     len = GetPrivateProfileString("AFS Submounts", NULL, NULL,
!                                    shareBuf, sizeof(shareBuf),
!                                    sbmtpath);
!     if (len == 0) {
!         return num_shares;
!     }
! 
!     this_share = shareBuf;
!     do
!     {
!         print_afs = 0;
!         /*strcpy(shareNameList[num_shares], this_share);*/
!         len = GetPrivateProfileString("AFS Submounts", this_share,
!                                        NULL,
!                                        pathName, AFSPATHMAX,
!                                        sbmtpath);
!         if (!len) 
!             return num_shares;
!         p = pathName;
!         if (strncmp(p, cm_mountRoot, strlen(cm_mountRoot)) != 0)
!             print_afs = 1;
!         while (*p) {
!             if (*p == '\\') *p = '/';    /* change to / */
!             p++;
!         }
  
!         fprintf(stderr, "\\\\%s\\%-16s (%s%s)\n",
!                  smb_localNamep, this_share, (print_afs ? cm_mountRoot : "\0"),
!                  pathName);
!         num_shares++;
!         while (*this_share != 0) this_share++;  /* find next NUL */
!         this_share++;   /* skip past the NUL */
!     } while (*this_share != 0);  /* stop at final NUL */
! 
!     return num_shares;
  }
! #endif /* DJGPP */
  
  typedef struct smb_findShare_rock {
!     char * shareName;
!     char * match;
      int matchType;
  } smb_findShare_rock_t;
  
--- 1582,1605 ----
   * name has been identified by smb_stristr() and is in substr.  Variable name
   * length (plus one) is in substr_size.  Variable value is in newstr.
   */
! static void smb_subst(clientchar_t *str1, int cchstr1, clientchar_t *substr, 
!                       unsigned int substr_size, clientchar_t *newstr)
  {
!     clientchar_t temp[1024];
  
!     cm_ClientStrCpy(temp, lengthof(temp), substr + substr_size - 1);
!     cm_ClientStrCpy(substr, cchstr1 - (substr - str1), newstr);
!     cm_ClientStrCat(str1, cchstr1, temp);
  }
! 
! clientchar_t VNUserName[] = _C("%USERNAME%");
! clientchar_t VNLCUserName[] = _C("%LCUSERNAME%");
! clientchar_t VNComputerName[] = _C("%COMPUTERNAME%");
! clientchar_t VNLCComputerName[] = _C("%LCCOMPUTERNAME%");
  
  typedef struct smb_findShare_rock {
!     clientchar_t * shareName;
!     clientchar_t * match;
      int matchType;
  } smb_findShare_rock_t;
  
***************
*** 1740,1752 ****
  {
      int matchType = 0;
      smb_findShare_rock_t * vrock = (smb_findShare_rock_t *) rockp;
!     if (!strnicmp(dep->name, vrock->shareName, 12)) {
!         if(!stricmp(dep->name, vrock->shareName))
              matchType = SMB_FINDSHARE_EXACT_MATCH;
          else
              matchType = SMB_FINDSHARE_PARTIAL_MATCH;
          if(vrock->match) free(vrock->match);
!         vrock->match = strdup(dep->name);
          vrock->matchType = matchType;
  
          if(matchType == SMB_FINDSHARE_EXACT_MATCH)
--- 1611,1627 ----
  {
      int matchType = 0;
      smb_findShare_rock_t * vrock = (smb_findShare_rock_t *) rockp;
!     normchar_t normName[MAX_PATH];
! 
!     cm_FsStringToNormString(dep->name, -1, normName, sizeof(normName)/sizeof(normName[0]));
! 
!     if (!cm_ClientStrCmpNI(normName, vrock->shareName, 12)) {
!         if(!cm_ClientStrCmpI(normName, vrock->shareName))
              matchType = SMB_FINDSHARE_EXACT_MATCH;
          else
              matchType = SMB_FINDSHARE_PARTIAL_MATCH;
          if(vrock->match) free(vrock->match);
!         vrock->match = cm_FsStringToClientStringAlloc(dep->name, -1, NULL);
          vrock->matchType = matchType;
  
          if(matchType == SMB_FINDSHARE_EXACT_MATCH)
***************
*** 1757,1774 ****
  
  
  /* find a shareName in the table of submounts */
! int smb_FindShare(smb_vc_t *vcp, smb_user_t *uidp, char *shareName,
! 	char **pathNamep)
! {
!     DWORD len;
!     char pathName[1024];
!     char *var;
!     char temp[1024];
      DWORD sizeTemp;
! #ifdef DJGPP
!     char sbmtpath[MAX_PATH];
! #endif
!     char *p, *q;
      HKEY parmKey;
      DWORD code;
      DWORD allSubmount = 1;
--- 1632,1648 ----
  
  
  /* find a shareName in the table of submounts */
! int smb_FindShare(smb_vc_t *vcp, smb_user_t *uidp,
!                   clientchar_t *shareName,
!                   clientchar_t **pathNamep)
! {
!     DWORD cblen;
!     DWORD cchlen;
!     clientchar_t pathName[1024];
!     clientchar_t *var;
      DWORD sizeTemp;
!     clientchar_t *p, *q;
!     fschar_t *cellname = NULL;
      HKEY parmKey;
      DWORD code;
      DWORD allSubmount = 1;
***************
*** 1779,1796 ****
       * world to do so.
       */
      code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY,
!                          0, KEY_QUERY_VALUE, &parmKey);
      if (code == ERROR_SUCCESS) {
!         len = sizeof(allSubmount);
          code = RegQueryValueEx(parmKey, "AllSubmount", NULL, NULL,
!                                 (BYTE *) &allSubmount, &len);
          if (code != ERROR_SUCCESS) {
              allSubmount = 1;
          }
          RegCloseKey (parmKey);
      }
  
!     if (allSubmount && _stricmp(shareName, "all") == 0) {
          *pathNamep = NULL;
          return 1;
      }
--- 1653,1670 ----
       * world to do so.
       */
      code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY,
!                         0, KEY_QUERY_VALUE, &parmKey);
      if (code == ERROR_SUCCESS) {
!         cblen = sizeof(allSubmount);
          code = RegQueryValueEx(parmKey, "AllSubmount", NULL, NULL,
!                                (BYTE *) &allSubmount, &cblen);
          if (code != ERROR_SUCCESS) {
              allSubmount = 1;
          }
          RegCloseKey (parmKey);
      }
  
!     if (allSubmount && cm_ClientStrCmpI(shareName, _C("all")) == 0) {
          *pathNamep = NULL;
          return 1;
      }
***************
*** 1798,1814 ****
      /* In case, the all share is disabled we need to still be able
       * to handle ioctl requests 
       */
!     if (_stricmp(shareName, "ioctl$") == 0) {
!         *pathNamep = strdup("/.__ioctl__");
          return 1;
      }
  
!     if (_stricmp(shareName, "IPC$") == 0 ||
!         _stricmp(shareName, "srvsvc") == 0 ||
!         _stricmp(shareName, "wkssvc") == 0 ||
!         _stricmp(shareName, SMB_IOCTL_FILENAME_NOSLASH) == 0 ||
!         _stricmp(shareName, "DESKTOP.INI") == 0
!          ) {
          *pathNamep = NULL;
          return 0;
      }
--- 1672,1688 ----
      /* In case, the all share is disabled we need to still be able
       * to handle ioctl requests 
       */
!     if (cm_ClientStrCmpI(shareName, _C("ioctl$")) == 0) {
!         *pathNamep = cm_ClientStrDup(_C("/.__ioctl__"));
          return 1;
      }
  
!     if (cm_ClientStrCmpIA(shareName, _C("IPC$")) == 0 ||
!         cm_ClientStrCmpIA(shareName, _C("srvsvc")) == 0 ||
!         cm_ClientStrCmpIA(shareName, _C("wkssvc")) == 0 ||
!         cm_ClientStrCmpIA(shareName, _C(SMB_IOCTL_FILENAME_NOSLASH)) == 0 ||
!         cm_ClientStrCmpIA(shareName, _C("DESKTOP.INI")) == 0
!         ) {
          *pathNamep = NULL;
          return 0;
      }
***************
*** 1817,1841 ****
  
         They look like <cell>{%,#}<volume>
      */
!     if (strchr(shareName, '%') != NULL ||
!         strchr(shareName, '#') != NULL) {
!         char pathstr[CELL_MAXNAMELEN + VL_MAXNAMELEN + 1 + CM_PREFIX_VOL_CCH];
!                                 /* make room for '/@vol:' + mountchar + NULL terminator*/
! 
!         osi_Log1(smb_logp, "smb_FindShare found volume reference [%s]",
!                  osi_LogSaveString(smb_logp, shareName));
! 
!         snprintf(pathstr, sizeof(pathstr)/sizeof(char),
!                  "/" CM_PREFIX_VOL "%s", shareName);
!         pathstr[sizeof(pathstr)/sizeof(char) - 1] = '\0';
!         len = (DWORD)(strlen(pathstr) + 1);
! 
!         *pathNamep = malloc(len);
          if (*pathNamep) {
!             strcpy(*pathNamep, pathstr);
!             strlwr(*pathNamep);
!             osi_Log1(smb_logp, "   returning pathname [%s]",
!                      osi_LogSaveString(smb_logp, *pathNamep));
  
              return 1;
          } else {
--- 1691,1714 ----
  
         They look like <cell>{%,#}<volume>
      */
!     if (cm_ClientStrChr(shareName, '%') != NULL ||
!          cm_ClientStrChr(shareName, '#') != NULL) {
!         clientchar_t pathstr[CELL_MAXNAMELEN + VL_MAXNAMELEN + 1 + CM_PREFIX_VOL_CCH];
!         /* make room for '/@vol:' + mountchar + NULL terminator*/
! 
!         osi_Log1(smb_logp, "smb_FindShare found volume reference [%S]",
!                  osi_LogSaveClientString(smb_logp, shareName));
! 
!         cm_ClientStrPrintfN(pathstr, lengthof(pathstr),
!                             _C("/") _C(CM_PREFIX_VOL) _C("%s"), shareName);
!         cchlen = (DWORD)(cm_ClientStrLen(pathstr) + 1);
!   
!         *pathNamep = malloc(cchlen * sizeof(clientchar_t));
          if (*pathNamep) {
!             cm_ClientStrCpy(*pathNamep, cchlen, pathstr);
!             cm_ClientStrLwr(*pathNamep);
!             osi_Log1(smb_logp, "   returning pathname [%S]",
!                      osi_LogSaveClientString(smb_logp, *pathNamep));
  
              return 1;
          } else {
***************
*** 1843,1914 ****
          }
      }
  
- #ifndef DJGPP
      code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_OPENAFS_SUBKEY "\\Submounts",
!                          0, KEY_QUERY_VALUE, &parmKey);
      if (code == ERROR_SUCCESS) {
!         len = sizeof(pathName);
!         code = RegQueryValueEx(parmKey, shareName, NULL, NULL,
!                                 (BYTE *) pathName, &len);
          if (code != ERROR_SUCCESS)
!             len = 0;
          RegCloseKey (parmKey);
      } else {
!         len = 0;
!     }   
! #else /* DJGPP */
!     strcpy(sbmtpath, cm_confDir);
!     strcat(sbmtpath, "/afsdsbmt.ini");
!     len = GetPrivateProfileString("AFS Submounts", shareName, "",
!                                    pathName, sizeof(pathName), sbmtpath);
! #endif /* !DJGPP */
!     if (len != 0 && len != sizeof(pathName) - 1) {
          /* We can accept either unix or PC style AFS pathnames.  Convert
           * Unix-style to PC style here for internal use. 
           */
          p = pathName;
!         if (strncmp(p, cm_mountRoot, strlen(cm_mountRoot)) == 0)
!             p += strlen(cm_mountRoot);  /* skip mount path */
          q = p;
          while (*q) {
!             if (*q == '/') *q = '\\';    /* change to \ */
              q++;
          }
  
          while (1)
          {
              if (var = smb_stristr(p, VNUserName)) {
                  if (uidp && uidp->unp)
!                     smb_subst(p, var, sizeof(VNUserName),uidp->unp->name);
                  else
!                     smb_subst(p, var, sizeof(VNUserName)," ");
              }
              else if (var = smb_stristr(p, VNLCUserName)) 
              {
                  if (uidp && uidp->unp)
!                     strcpy(temp, uidp->unp->name);
                  else 
!                     strcpy(temp, " ");
!                 _strlwr(temp);
!                 smb_subst(p, var, sizeof(VNLCUserName), temp);
              }
              else if (var = smb_stristr(p, VNComputerName)) 
              {
!                 sizeTemp = sizeof(temp);
!                 GetComputerName((LPTSTR)temp, &sizeTemp);
!                 smb_subst(p, var, sizeof(VNComputerName), temp);
              }
              else if (var = smb_stristr(p, VNLCComputerName)) 
              {
!                 sizeTemp = sizeof(temp);
                  GetComputerName((LPTSTR)temp, &sizeTemp);
!                 _strlwr(temp);
!                 smb_subst(p, var, sizeof(VNLCComputerName), temp);
              }
              else     
                  break;
          }
!         *pathNamep = strdup(p);
          return 1;
      } 
      else
--- 1716,1791 ----
          }
      }
  
      code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_OPENAFS_SUBKEY "\\Submounts",
!                         0, KEY_QUERY_VALUE, &parmKey);
      if (code == ERROR_SUCCESS) {
!         cblen = sizeof(pathName);
!         code = RegQueryValueExW(parmKey, shareName, NULL, NULL,
!                                 (BYTE *) pathName, &cblen);
          if (code != ERROR_SUCCESS)
!             cblen = 0;
          RegCloseKey (parmKey);
      } else {
!         cblen = 0;
!     }
!     cchlen = cblen / sizeof(clientchar_t);
!     if (cchlen != 0 && cchlen != lengthof(pathName) - 1) {
          /* We can accept either unix or PC style AFS pathnames.  Convert
           * Unix-style to PC style here for internal use. 
           */
          p = pathName;
!         cchlen = lengthof(pathName);
! 
!         /* within this code block, we maintain, cchlen = writeable
!            buffer length of p */
! 
!         if (cm_ClientStrCmpN(p, cm_mountRootC, cm_mountRootCLen) == 0) {
!             p += cm_mountRootCLen;  /* skip mount path */
!             cchlen -= (p - pathName);
!         }
! 
          q = p;
          while (*q) {
!             if (*q == _C('/')) *q = _C('\\');    /* change to \ */
              q++;
          }
  
          while (1)
          {
+             clientchar_t temp[1024];
+ 
              if (var = smb_stristr(p, VNUserName)) {
                  if (uidp && uidp->unp)
!                     smb_subst(p, cchlen, var, lengthof(VNUserName),uidp->unp->name);
                  else
!                     smb_subst(p, cchlen, var, lengthof(VNUserName), _C(" "));
              }
              else if (var = smb_stristr(p, VNLCUserName)) 
              {
                  if (uidp && uidp->unp)
!                     cm_ClientStrCpy(temp, lengthof(temp), uidp->unp->name);
                  else 
!                     cm_ClientStrCpy(temp, lengthof(temp), _C(" "));
!                 cm_ClientStrLwr(temp);
!                 smb_subst(p, cchlen, var, lengthof(VNLCUserName), temp);
              }
              else if (var = smb_stristr(p, VNComputerName)) 
              {
!                 sizeTemp = lengthof(temp);
!                 GetComputerNameW(temp, &sizeTemp);
!                 smb_subst(p, cchlen, var, lengthof(VNComputerName), temp);
              }
              else if (var = smb_stristr(p, VNLCComputerName)) 
              {
!                 sizeTemp = lengthof(temp);
                  GetComputerName((LPTSTR)temp, &sizeTemp);
!                 cm_ClientStrLwr(temp);
!                 smb_subst(p, cchlen, var, lengthof(VNLCComputerName), temp);
              }
              else     
                  break;
          }
!         *pathNamep = cm_ClientStrDup(p);
          return 1;
      } 
      else
***************
*** 1917,1923 ****
          cm_req_t req;
          smb_findShare_rock_t vrock;
          osi_hyper_t thyper;
!         char * p = shareName; 
          int rw = 0;
  
          /*  attempt to locate a partial match in root.afs.  This is because
--- 1794,1801 ----
          cm_req_t req;
          smb_findShare_rock_t vrock;
          osi_hyper_t thyper;
!         fschar_t ftemp[1024];
!         clientchar_t * p = shareName; 
          int rw = 0;
  
          /*  attempt to locate a partial match in root.afs.  This is because
***************
*** 1927,1944 ****
          thyper.HighPart = 0;
          thyper.LowPart = 0;
  
!         vrock.shareName = shareName;
          vrock.match = NULL;
          vrock.matchType = 0;
  
          cm_HoldSCache(cm_data.rootSCachep);
          code = cm_ApplyDir(cm_data.rootSCachep, smb_FindShareProc, &vrock, &thyper,
!             (uidp? (uidp->unp ? uidp->unp->userp : NULL) : NULL), &req, NULL);
          cm_ReleaseSCache(cm_data.rootSCachep);
  
          if (vrock.matchType) {
!             sprintf(pathName,"/%s/",vrock.match);
!             *pathNamep = strdup(strlwr(pathName));
              free(vrock.match);
              return 1;
          }
--- 1805,1825 ----
          thyper.HighPart = 0;
          thyper.LowPart = 0;
  
!         vrock.shareName = cm_ClientStringToNormStringAlloc(shareName, -1, NULL);
          vrock.match = NULL;
          vrock.matchType = 0;
  
          cm_HoldSCache(cm_data.rootSCachep);
          code = cm_ApplyDir(cm_data.rootSCachep, smb_FindShareProc, &vrock, &thyper,
!                            (uidp? (uidp->unp ? uidp->unp->userp : NULL) : NULL), &req, NULL);
          cm_ReleaseSCache(cm_data.rootSCachep);
  
+         free(vrock.shareName);
+         vrock.shareName = NULL;
+ 
          if (vrock.matchType) {
!             cm_ClientStrPrintfN(pathName, lengthof(pathName), _C("/%s/"), vrock.match);
!             *pathNamep = cm_ClientStrDup(cm_ClientStrLwr(pathName));
              free(vrock.match);
              return 1;
          }
***************
*** 1950,1966 ****
              rw = 1;
          }
          /* Get the full name for this cell */
!         code = cm_SearchCellFile(p, temp, 0, 0);
  #ifdef AFS_AFSDB_ENV
          if (code && cm_dnsEnabled) {
              int ttl;
!             code = cm_SearchCellByDNS(p, temp, &ttl, 0, 0);
          }
  #endif
          /* construct the path */
!         if (code == 0) {     
!             sprintf(pathName,rw ? "/.%s/" : "/%s/",temp);
!             *pathNamep = strdup(strlwr(pathName));
              return 1;
          }
      }
--- 1831,1855 ----
              rw = 1;
          }
          /* Get the full name for this cell */
!         cellname = cm_ClientStringToFsStringAlloc(p, -1, NULL);
!         code = cm_SearchCellFile(cellname, ftemp, 0, 0);
  #ifdef AFS_AFSDB_ENV
          if (code && cm_dnsEnabled) {
              int ttl;
!             code = cm_SearchCellByDNS(cellname, ftemp, &ttl, 0, 0);
          }
  #endif
+         if (cellname)
+             free(cellname);
+ 
          /* construct the path */
!         if (code == 0) {
!             clientchar_t temp[1024];
! 
!             cm_FsStringToClientString(ftemp, cm_FsStrLen(ftemp), temp, 1024);
!             cm_ClientStrPrintfN(pathName, lengthof(pathName),
!                                 rw ? _C("/.%S/") : _C("/%S/"), temp);
!             *pathNamep = cm_ClientStrDup(cm_ClientStrLwr(pathName));
              return 1;
          }
      }
***************
*** 1975,1984 ****
  #define CSC_POLICY_PROGRAMS 2
  #define CSC_POLICY_DISABLE 3
  
! int smb_FindShareCSCPolicy(char *shareName)
  {
      DWORD len;
!     char policy[1024];
      DWORD dwType;
      HKEY hkCSCPolicy;
      int  retval = CSC_POLICY_MANUAL;
--- 1864,1873 ----
  #define CSC_POLICY_PROGRAMS 2
  #define CSC_POLICY_DISABLE 3
  
! int smb_FindShareCSCPolicy(clientchar_t *shareName)
  {
      DWORD len;
!     clientchar_t policy[1024];
      DWORD dwType;
      HKEY hkCSCPolicy;
      int  retval = CSC_POLICY_MANUAL;
***************
*** 1994,2012 ****
                      NULL );
  
      len = sizeof(policy);
!     if ( RegQueryValueEx( hkCSCPolicy, shareName, 0, &dwType, policy, &len ) ||
           len == 0) {
!         retval = stricmp("all",shareName) ? CSC_POLICY_MANUAL : CSC_POLICY_DISABLE;
      }
!     else if (stricmp(policy, "documents") == 0)
      {
          retval = CSC_POLICY_DOCUMENTS;
      }
!     else if (stricmp(policy, "programs") == 0)
      {
          retval = CSC_POLICY_PROGRAMS;
      }
!     else if (stricmp(policy, "disable") == 0)
      {
          retval = CSC_POLICY_DISABLE;
      }
--- 1883,1901 ----
                      NULL );
  
      len = sizeof(policy);
!     if ( RegQueryValueExW( hkCSCPolicy, shareName, 0, &dwType, (LPBYTE) policy, &len ) ||
           len == 0) {
!         retval = cm_ClientStrCmpIA(_C("all"),shareName) ? CSC_POLICY_MANUAL : CSC_POLICY_DISABLE;
      }
!     else if (cm_ClientStrCmpIA(policy, _C("documents")) == 0)
      {
          retval = CSC_POLICY_DOCUMENTS;
      }
!     else if (cm_ClientStrCmpIA(policy, _C("programs")) == 0)
      {
          retval = CSC_POLICY_PROGRAMS;
      }
!     else if (cm_ClientStrCmpIA(policy, _C("disable")) == 0)
      {
          retval = CSC_POLICY_DISABLE;
      }
***************
*** 2229,2237 ****
  static smb_packet_t *GetPacket(void)
  {
      smb_packet_t *tbp;
- #ifdef DJGPP
-     unsigned int npar, seg, tb_sel;
- #endif
  
      lock_ObtainWrite(&smb_globalLock);
      tbp = smb_packetFreeListp;
--- 2118,2123 ----
***************
*** 2239,2249 ****
          smb_packetFreeListp = tbp->nextp;
      lock_ReleaseWrite(&smb_globalLock);
      if (!tbp) {
! #ifndef DJGPP
!         tbp = calloc(65540,1);
! #else /* DJGPP */
!         tbp = malloc(sizeof(smb_packet_t));
! #endif /* !DJGPP */
          tbp->magic = SMB_PACKETMAGIC;
          tbp->ncbp = NULL;
          tbp->vcp = NULL;
--- 2125,2131 ----
          smb_packetFreeListp = tbp->nextp;
      lock_ReleaseWrite(&smb_globalLock);
      if (!tbp) {
!         tbp = calloc(sizeof(*tbp),1);
          tbp->magic = SMB_PACKETMAGIC;
          tbp->ncbp = NULL;
          tbp->vcp = NULL;
***************
*** 2256,2281 ****
          tbp->ncb_length = 0;
          tbp->flags = 0;
          tbp->spacep = NULL;
!         
! #ifdef DJGPP
!         npar = SMB_PACKETSIZE >> 4;  /* number of paragraphs */
!         {
!             signed int retval =
!                 __dpmi_allocate_dos_memory(npar, &tb_sel); /* DOS segment */
!             if (retval == -1) {
!                 osi_Log1(smb_logp, "Cannot allocate %d paragraphs of DOS memory",
!                           npar);
!                 osi_panic("",__FILE__,__LINE__);
!             }
!             else {
!                 osi_Log2(smb_logp, "Allocated %d paragraphs of DOS mem at 0x%X",
!                           npar, retval);
!                 seg = retval;
!             }
!         }
!         tbp->dos_pkt = (seg * 16) + 0;  /* DOS physical address */
!         tbp->dos_pkt_sel = tb_sel;
! #endif /* DJGPP */
      }
      osi_assertx(tbp->magic == SMB_PACKETMAGIC, "invalid smb_packet_t magic");
  
--- 2138,2144 ----
          tbp->ncb_length = 0;
          tbp->flags = 0;
          tbp->spacep = NULL;
!         tbp->stringsp = NULL;
      }
      osi_assertx(tbp->magic == SMB_PACKETMAGIC, "invalid smb_packet_t magic");
  
***************
*** 2288,2293 ****
--- 2151,2157 ----
      tbp = GetPacket();
      memcpy(tbp, pkt, sizeof(smb_packet_t));
      tbp->wctp = tbp->data + (unsigned int)(pkt->wctp - pkt->data);
+     tbp->stringsp = NULL;
      if (tbp->vcp)
  	smb_HoldVC(tbp->vcp);
      return tbp;
***************
*** 2297,2305 ****
  {
      smb_ncb_t *tbp;
      NCB *ncbp;
- #ifdef DJGPP
-     unsigned int npar, seg, tb_sel;
- #endif /* DJGPP */
  
      lock_ObtainWrite(&smb_globalLock);
      tbp = smb_ncbFreeListp;
--- 2161,2166 ----
***************
*** 2307,2333 ****
          smb_ncbFreeListp = tbp->nextp;
      lock_ReleaseWrite(&smb_globalLock);
      if (!tbp) {
- #ifndef DJGPP
          tbp = calloc(sizeof(*tbp),1);
- #else /* DJGPP */
-         tbp = malloc(sizeof(*tbp));
-         npar = (sizeof(NCB)+15) >> 4;  /* number of paragraphs */
-         {
-             signed int retval =
-                 __dpmi_allocate_dos_memory(npar, &tb_sel); /* DOS segment */
-             if (retval == -1) {
-                 osi_Log1(smb_logp, "Cannot allocate %d paragraphs of DOS mem in GetNCB",
-                           npar);
-                 osi_panic("",__FILE__,__LINE__);
-             } else {
-                 osi_Log2(smb_logp, "Allocated %d paragraphs of DOS mem at 0x%X in GetNCB",
-                           npar, retval);
-                 seg = retval;
-             }
-         }
-         tbp->dos_ncb = (seg * 16) + 0;  /* DOS physical address */
-         tbp->dos_ncb_sel = tb_sel;
- #endif /* !DJGPP */
          tbp->magic = SMB_NCBMAGIC;
      }
          
--- 2168,2174 ----
***************
*** 2335,2346 ****
  
      memset(&tbp->ncb, 0, sizeof(NCB));
      ncbp = &tbp->ncb;
- #ifdef DJGPP
-     dos_memset(tbp->dos_ncb, 0, sizeof(NCB));
- #endif /* DJGPP */
      return ncbp;
  }
  
  void smb_FreePacket(smb_packet_t *tbp)
  {
      smb_vc_t * vcp = NULL;
--- 2176,2196 ----
  
      memset(&tbp->ncb, 0, sizeof(NCB));
      ncbp = &tbp->ncb;
      return ncbp;
  }
  
+ static void FreeSMBStrings(smb_packet_t * pkt)
+ {
+     cm_space_t * s;
+     cm_space_t * ns;
+ 
+     for (s = pkt->stringsp; s; s = ns) {
+         ns = s->nextp;
+         cm_FreeSpace(s);
+     }
+     pkt->stringsp = NULL;
+ }
+ 
  void smb_FreePacket(smb_packet_t *tbp)
  {
      smb_vc_t * vcp = NULL;
***************
*** 2361,2366 ****
--- 2211,2217 ----
      tbp->oddByte = 0;
      tbp->ncb_length = 0;
      tbp->flags = 0;
+     FreeSMBStrings(tbp);
      lock_ReleaseWrite(&smb_globalLock);
  
      if (vcp)
***************
*** 2428,2437 ****
                  parm, parmCount, smbp->ncb_length);
  	osi_Log3(smb_logp,"Bad SMB param %d out of %d, ncb len %d",
                   parm, parmCount, smbp->ncb_length);
- #ifndef DJGPP
  	LogEvent(EVENTLOG_ERROR_TYPE, MSG_BAD_SMB_PARAM, 
  		 __FILE__, __LINE__, parm, parmCount, smbp->ncb_length);
- #endif /* !DJGPP */
          osi_panic(s, __FILE__, __LINE__);
      }
      parmDatap = smbp->wctp + (2*parm) + 1;
--- 2279,2286 ----
***************
*** 2478,2487 ****
                  parm, parmCount, smbp->ncb_length);
  	osi_Log3(smb_logp,"Bad SMB param %d out of %d, ncb len %d",
                   parm, parmCount, smbp->ncb_length);
- #ifndef DJGPP
  	LogEvent(EVENTLOG_ERROR_TYPE, MSG_BAD_SMB_PARAM, 
  		 __FILE__, __LINE__, parm, parmCount, smbp->ncb_length);
- #endif /* !DJGPP */
          osi_panic(s, __FILE__, __LINE__);
      }
      parmDatap = smbp->wctp + (2*parm) + 1;
--- 2327,2334 ----
***************
*** 2502,2511 ****
  
          sprintf(s, "Bad SMB param %d offset %d out of %d, ncb len %d",
                  parm, offset, parmCount, smbp->ncb_length);
- #ifndef DJGPP
  	LogEvent(EVENTLOG_ERROR_TYPE, MSG_BAD_SMB_PARAM_WITH_OFFSET, 
  		 __FILE__, __LINE__, parm, offset, parmCount, smbp->ncb_length);
- #endif /* !DJGPP */
          osi_Log4(smb_logp, "Bad SMB param %d offset %d out of %d, ncb len %d",
                  parm, offset, parmCount, smbp->ncb_length);
          osi_panic(s, __FILE__, __LINE__);
--- 2349,2356 ----
***************
*** 2517,2523 ****
  
  void smb_SetSMBParm(smb_packet_t *smbp, int slot, unsigned int parmValue)
  {
!     char *parmDatap;
  
      /* make sure we have enough slots */
      if (*smbp->wctp <= slot) 
--- 2362,2368 ----
  
  void smb_SetSMBParm(smb_packet_t *smbp, int slot, unsigned int parmValue)
  {
!     unsigned char *parmDatap;
  
      /* make sure we have enough slots */
      if (*smbp->wctp <= slot) 
***************
*** 2530,2536 ****
  
  void smb_SetSMBParmLong(smb_packet_t *smbp, int slot, unsigned int parmValue)
  {
!     char *parmDatap;
  
      /* make sure we have enough slots */
      if (*smbp->wctp <= slot) 
--- 2375,2381 ----
  
  void smb_SetSMBParmLong(smb_packet_t *smbp, int slot, unsigned int parmValue)
  {
!     unsigned char *parmDatap;
  
      /* make sure we have enough slots */
      if (*smbp->wctp <= slot) 
***************
*** 2545,2551 ****
  
  void smb_SetSMBParmDouble(smb_packet_t *smbp, int slot, char *parmValuep)
  {
!     char *parmDatap;
      int i;
  
      /* make sure we have enough slots */
--- 2390,2396 ----
  
  void smb_SetSMBParmDouble(smb_packet_t *smbp, int slot, char *parmValuep)
  {
!     unsigned char *parmDatap;
      int i;
  
      /* make sure we have enough slots */
***************
*** 2559,2565 ****
  
  void smb_SetSMBParmByte(smb_packet_t *smbp, int slot, unsigned int parmValue)
  {
!     char *parmDatap;
  
      /* make sure we have enough slots */
      if (*smbp->wctp <= slot) {
--- 2404,2410 ----
  
  void smb_SetSMBParmByte(smb_packet_t *smbp, int slot, unsigned int parmValue)
  {
!     unsigned char *parmDatap;
  
      /* make sure we have enough slots */
      if (*smbp->wctp <= slot) {
***************
*** 2574,2584 ****
      *parmDatap++ = parmValue & 0xff;
  }
  
! void smb_StripLastComponent(char *outPathp, char **lastComponentp, char *inPathp)
  {
!     char *lastSlashp;
          
!     lastSlashp = strrchr(inPathp, '\\');
      if (lastComponentp)
          *lastComponentp = lastSlashp;
      if (lastSlashp) {
--- 2419,2432 ----
      *parmDatap++ = parmValue & 0xff;
  }
  
! 
! 
! void smb_StripLastComponent(clientchar_t *outPathp, clientchar_t **lastComponentp,
!                             clientchar_t *inPathp)
  {
!     clientchar_t *lastSlashp;
          
!     lastSlashp = cm_ClientStrRChr(inPathp, '\\');
      if (lastComponentp)
          *lastComponentp = lastSlashp;
      if (lastSlashp) {
***************
*** 2594,2607 ****
      }
  }
  
! unsigned char *smb_ParseASCIIBlock(unsigned char *inp, char **chainpp)
  {
      if (*inp++ != 0x4) 
          return NULL;
!     if (chainpp) {
!         *chainpp = inp + strlen(inp) + 1;	/* skip over null-terminated string */
      }
-     return inp;
  }
  
  unsigned char *smb_ParseVblBlock(unsigned char *inp, char **chainpp, int *lengthp)
--- 2442,2696 ----
      }
  }
  
! clientchar_t *smb_ParseASCIIBlock(smb_packet_t * pktp, unsigned char *inp,
!                                   char **chainpp, int flags)
  {
+     size_t cb;
+ 
      if (*inp++ != 0x4) 
          return NULL;
! 
! #ifdef SMB_UNICODE
!     if (!WANTS_UNICODE(pktp))
!         flags |= SMB_STRF_FORCEASCII;
! #endif
! 
!     cb = sizeof(pktp->data) - (inp - pktp->data);
!     if (inp < pktp->data || inp >= pktp->data + sizeof(pktp->data)) {
! #ifdef DEBUG_UNICODE
!         DebugBreak();
! #endif
!         cb = sizeof(pktp->data);
!     }
!     return smb_ParseStringBuf(pktp->data, &pktp->stringsp, inp, &cb, chainpp, flags);
! }
! 
! clientchar_t *smb_ParseString(smb_packet_t * pktp, unsigned char * inp,
!                               char ** chainpp, int flags)
! {
!     size_t cb;
! 
! #ifdef SMB_UNICODE
!     if (!WANTS_UNICODE(pktp))
!         flags |= SMB_STRF_FORCEASCII;
! #endif
! 
!     cb = sizeof(pktp->data) - (inp - pktp->data);
!     if (inp < pktp->data || inp >= pktp->data + sizeof(pktp->data)) {
! #ifdef DEBUG_UNICODE
!         DebugBreak();
! #endif
!         cb = sizeof(pktp->data);
!     }
!     return smb_ParseStringBuf(pktp->data, &pktp->stringsp, inp, &cb, chainpp, flags);
! }
! 
! clientchar_t *smb_ParseStringCb(smb_packet_t * pktp, unsigned char * inp,
!                                 size_t cb, char ** chainpp, int flags)
! {
! #ifdef SMB_UNICODE
!     if (!WANTS_UNICODE(pktp))
!         flags |= SMB_STRF_FORCEASCII;
! #endif
! 
!     return smb_ParseStringBuf(pktp->data, &pktp->stringsp, inp, &cb, chainpp, flags);
! }
! 
! clientchar_t *smb_ParseStringCch(smb_packet_t * pktp, unsigned char * inp,
!                                  size_t cch, char ** chainpp, int flags)
! {
!     size_t cb = cch;
! 
! #ifdef SMB_UNICODE
!     if (!WANTS_UNICODE(pktp))
!         flags |= SMB_STRF_FORCEASCII;
!     else
!         cb = cch * sizeof(wchar_t);
! #endif
! 
!     return smb_ParseStringBuf(pktp->data, &pktp->stringsp, inp, &cb, chainpp, flags);
! }
! 
! clientchar_t *
! smb_ParseStringBuf(const unsigned char * bufbase,
!                    cm_space_t ** stringspp,
!                    unsigned char *inp, size_t *pcb_max,
!                    char **chainpp, int flags)
! {
! #ifdef SMB_UNICODE
!     if (!(flags & SMB_STRF_FORCEASCII)) {
!         size_t cch_src;
!         cm_space_t * spacep;
!         int    null_terms = 0;
! 
!         if (bufbase && ((inp - bufbase) % 2) != 0) {
!             inp++;              /* unicode strings are always word aligned */
!         }
! 
!         if (*pcb_max > 0) {
!             if (FAILED(StringCchLengthW((const wchar_t *) inp, *pcb_max / sizeof(wchar_t),
!                                         &cch_src))) {
!                 cch_src = *pcb_max / sizeof(wchar_t);
!                 *pcb_max = 0;
!                 null_terms = 0;
!             } else {
!                 *pcb_max -= (cch_src + 1) * sizeof(wchar_t);
!                 null_terms = 1;
!             }
!         } else {
!             cch_src = 0;
!         }
! 
!         spacep = cm_GetSpace();
!         spacep->nextp = *stringspp;
!         *stringspp = spacep;
! 
!         if (cch_src == 0) {
!             if (chainpp) {
!                 *chainpp = inp + sizeof(wchar_t);
!             }
! 
!             *(spacep->wdata) = 0;
!             return spacep->wdata;
!         }
! 
!         StringCchCopyNW(spacep->wdata,
!                         lengthof(spacep->wdata),
!                         (const clientchar_t *) inp, cch_src);
! 
!         if (chainpp)
!             *chainpp = inp + (cch_src + null_terms)*sizeof(wchar_t);
! 
!         return spacep->wdata;
! 
!     } else {
! #endif
!         cm_space_t * spacep;
!         int cchdest;
! 
!         /* Not using Unicode */
!         if (chainpp) {
!             *chainpp = inp + strlen(inp) + 1;
!         }
! 
!         spacep = cm_GetSpace();
!         spacep->nextp = *stringspp;
!         *stringspp = spacep;
! 
!         cchdest = lengthof(spacep->wdata);
!         cm_Utf8ToUtf16(inp, *pcb_max, spacep->wdata, cchdest);
! 
!         return spacep->wdata;
! #ifdef SMB_UNICODE
!     }
! #endif
! }
! 
! unsigned char * smb_UnparseString(smb_packet_t * pktp, unsigned char * outp,
!                             clientchar_t * str,
!                             size_t * plen, int flags)
! {
!     size_t buffersize;
!     int align = 0;
! 
!     if (outp == NULL) {
!         /* we are only calculating the required size */
! 
!         if (plen == NULL)
!             return NULL;
! 
! #ifdef SMB_UNICODE
! 
!         if (WANTS_UNICODE(pktp) && !(flags & SMB_STRF_FORCEASCII)) {
! 
!             StringCbLengthW(str, SMB_STRINGBUFSIZE * sizeof(wchar_t), plen);
!             if (!(flags & SMB_STRF_IGNORENULL))
!                 *plen += sizeof(wchar_t);
! 
!             return (unsigned char *) 1; /* return TRUE if we are using unicode */
!         }
!         else
! #endif
!         {
!             /* Storing ANSI */
! 
!             int cch_str;
!             int cch_dest;
! 
!             cch_str = cm_ClientStrLen(str);
!             cch_dest = cm_ClientStringToUtf8(str, cch_str, NULL, 0);
! 
!             if (plen)
!                 *plen = ((flags & SMB_STRF_IGNORENULL)? cch_dest: cch_dest+1);
! 
!             return NULL;
!         }
! 
!         /* Not reached. */
!     }
! 
!     /* if outp != NULL ... */
! 
!     /* Number of bytes left in the buffer.
! 
!        If outp lies inside the packet data buffer, we assume that the
!        buffer is the packet data buffer.  Otherwise we assume that the
!        buffer is sizeof(packet->data).
! 
!     */
!     if (outp >= pktp->data && outp < pktp->data + sizeof(pktp->data)) {
!         align = ((outp - pktp->data) % 2);
!         buffersize = (pktp->data + sizeof(pktp->data)) - ((char *) outp);
!     } else {
!         align = (((size_t) outp) % 2);
!         buffersize = sizeof(pktp->data);
!     }
! 
! #ifdef SMB_UNICODE
! 
!     if (WANTS_UNICODE(pktp) && !(flags & SMB_STRF_FORCEASCII)) {
!         int nchars;
! 
!         if (align)
!             *outp++ = '\0';
! 
!         if (*str == _C('\0')) {
! 
!             if (buffersize < sizeof(wchar_t))
!                 return NULL;
! 
!             *((wchar_t *) outp) = L'\0';
!             if (plen && !(flags & SMB_STRF_IGNORENULL))
!                 *plen += sizeof(wchar_t);
!             return outp + sizeof(wchar_t);
!         }
! 
!         nchars = cm_ClientStringToUtf16(str, -1, (wchar_t *) outp, buffersize / sizeof(wchar_t));
!         if (nchars == 0) {
!             osi_Log2(smb_logp, "UnparseString: Can't convert string to Unicode [%S], GLE=%d",
!                      osi_LogSaveClientString(smb_logp, str),
!                      GetLastError());
!             return NULL;
!         }
! 
!         if (plen)
!             *plen += sizeof(wchar_t) * ((flags & SMB_STRF_IGNORENULL)? nchars - 1: nchars);
! 
!         return outp + sizeof(wchar_t) * nchars;
!     }
!     else
! #endif
!     {
!         /* Storing ANSI */
!         size_t cch_dest;
! 
!         cch_dest = cm_ClientStringToUtf8(str, -1, outp, buffersize);
! 
!         if (plen)
!             *plen += ((flags & SMB_STRF_IGNORENULL)? cch_dest - 1: cch_dest);
! 
!         return outp + cch_dest;
      }
  }
  
  unsigned char *smb_ParseVblBlock(unsigned char *inp, char **chainpp, int *lengthp)
***************
*** 2623,2628 ****
--- 2712,2734 ----
      return inp;
  }	
  
+ unsigned char *smb_ParseDataBlock(unsigned char *inp, char **chainpp, int *lengthp)
+ {
+     int tlen;
+ 
+     if (*inp++ != 0x1) return NULL;
+     tlen = inp[0] + (inp[1]<<8);
+     inp += 2;		/* skip length field */
+         
+     if (chainpp) {
+         *chainpp = inp + tlen;
+     }	
+ 
+     if (lengthp) *lengthp = tlen;
+         
+     return inp;
+ }
+ 
  /* format a packet as a response */
  void smb_FormatResponsePacket(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *op)
  {
***************
*** 2656,2661 ****
--- 2762,2771 ----
      outp->reb |= SMB_FLAGS_CANONICAL_PATHNAMES;
  #endif
      outp->flg2 = SMB_FLAGS2_KNOWS_LONG_NAMES;
+ #ifdef SMB_UNICODE
+     if ((vcp->flags & SMB_VCFLAG_USEUNICODE) == SMB_VCFLAG_USEUNICODE)
+         outp->flg2 |= SMB_FLAGS2_UNICODE;
+ #endif
  
      /* copy fields in generic packet area */
      op->wctp = &outp->wct;
***************
*** 2671,2688 ****
      long code = 0;
      unsigned char *tp;
      int localNCB = 0;
- #ifdef DJGPP
-     dos_ptr dos_ncb;
- #endif /* DJGPP */
          
      ncbp = inp->ncbp;
      if (ncbp == NULL) {
          ncbp = GetNCB();
          localNCB = 1;
      }
- #ifdef DJGPP
-     dos_ncb = ((smb_ncb_t *)ncbp)->dos_ncb;
- #endif /* DJGPP */
   
      memset((char *)ncbp, 0, sizeof(NCB));
  
--- 2781,2792 ----
***************
*** 2696,2719 ****
      ncbp->ncb_lsn = (unsigned char) vcp->lsn;	/* vc to use */
      ncbp->ncb_lana_num = vcp->lana;
      ncbp->ncb_command = NCBSEND;	/* op means send data */
- #ifndef DJGPP
      ncbp->ncb_buffer = (char *) inp;/* packet */
      code = Netbios(ncbp);
- #else /* DJGPP */
-     ncbp->ncb_buffer = inp->dos_pkt;/* packet */
-     ((smb_ncb_t*)ncbp)->orig_pkt = inp;
- 
-     /* copy header information from virtual to DOS address space */
-     dosmemput((char*)inp, SMB_PACKETSIZE, inp->dos_pkt);
-     code = Netbios(ncbp, dos_ncb);
- #endif /* !DJGPP */
          
      if (code != 0) {
  	const char * s = ncb_error_string(code);
          osi_Log2(smb_logp, "SendPacket failure code %d \"%s\"", code, s);
- #ifndef DJGPP
  	LogEvent(EVENTLOG_WARNING_TYPE, MSG_SMB_SEND_PACKET_FAILURE, s);
- #endif /* !DJGPP */
  
  	lock_ObtainMutex(&vcp->mx);
  	if (!(vcp->flags & SMB_VCFLAG_ALREADYDEAD)) {
--- 2800,2812 ----
***************
*** 3077,3082 ****
--- 3170,3176 ----
      return CM_ERROR_BADOP;
  }
  
+ /* SMB_COM_ECHO */
  long smb_ReceiveCoreEcho(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      unsigned short EchoCount, i;
***************
*** 3097,3102 ****
--- 3191,3197 ----
      return 0;
  }
  
+ /* SMB_COM_READ_RAW */
  long smb_ReceiveCoreReadRaw(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      osi_hyper_t offset;
***************
*** 3109,3120 ****
      cm_user_t *userp = NULL;
      NCB *ncbp;
      int rc;
- #ifndef DJGPP
      char *rawBuf = NULL;
- #else
-     dos_ptr rawBuf = NULL;
-     dos_ptr dos_ncb;
- #endif /* DJGPP */
  
      rawBuf = NULL;
      finalCount = 0;
--- 3204,3210 ----
***************
*** 3184,3194 ****
      if (smb_RawBufs) {
          /* Get a raw buf, from head of list */
          rawBuf = smb_RawBufs;
- #ifndef DJGPP
          smb_RawBufs = *(char **)smb_RawBufs;
- #else /* DJGPP */
-         smb_RawBufs = _farpeekl(_dos_ds, smb_RawBufs);
- #endif /* !DJGPP */
      }
      lock_ReleaseMutex(&smb_RawBufLock);
      if (!rawBuf)
--- 3274,3280 ----
***************
*** 3198,3216 ****
      if (fidp->flags & SMB_FID_IOCTL)
      {
  	lock_ReleaseMutex(&fidp->mx);
- #ifndef DJGPP
          rc = smb_IoctlReadRaw(fidp, vcp, inp, outp);
- #else
-         rc = smb_IoctlReadRaw(fidp, vcp, inp, outp, rawBuf);
- #endif
          if (rawBuf) {
              /* Give back raw buffer */
              lock_ObtainMutex(&smb_RawBufLock);
- #ifndef DJGPP
              *((char **) rawBuf) = smb_RawBufs;
- #else /* DJGPP */
-             _farpokel(_dos_ds, rawBuf, smb_RawBufs);
- #endif /* !DJGPP */
              
              smb_RawBufs = rawBuf;
              lock_ReleaseMutex(&smb_RawBufLock);
--- 3284,3294 ----
***************
*** 3224,3236 ****
  
      userp = smb_GetUserFromVCP(vcp, inp);
  
- #ifndef DJGPP
      code = smb_ReadData(fidp, &offset, count, rawBuf, userp, &finalCount);
- #else /* DJGPP */
-     /* have to give ReadData flag so it will treat buffer as DOS mem. */
-     code = smb_ReadData(fidp, &offset, count, (unsigned char *)rawBuf,
-                         userp, &finalCount, TRUE /* rawFlag */);
- #endif /* !DJGPP */
  
      if (code != 0)
          goto send;
--- 3302,3308 ----
***************
*** 3243,3251 ****
  
    send1:
      ncbp = outp->ncbp;
- #ifdef DJGPP
-     dos_ncb = ((smb_ncb_t *)ncbp)->dos_ncb;
- #endif /* DJGPP */
      memset((char *)ncbp, 0, sizeof(NCB));
  
      ncbp->ncb_length = (unsigned short) finalCount;
--- 3315,3320 ----
***************
*** 3254,3275 ****
      ncbp->ncb_command = NCBSEND;
      ncbp->ncb_buffer = rawBuf;
  
- #ifndef DJGPP
      code = Netbios(ncbp);
- #else /* DJGPP */
-     code = Netbios(ncbp, dos_ncb);
- #endif /* !DJGPP */
      if (code != 0)
          osi_Log1(smb_logp, "ReadRaw send failure code %d", code);
  
      if (rawBuf) {
          /* Give back raw buffer */
          lock_ObtainMutex(&smb_RawBufLock);
- #ifndef DJGPP
          *((char **) rawBuf) = smb_RawBufs;
- #else /* DJGPP */
-         _farpokel(_dos_ds, rawBuf, smb_RawBufs);
- #endif /* !DJGPP */
  
          smb_RawBufs = rawBuf;
          lock_ReleaseMutex(&smb_RawBufLock);
--- 3323,3336 ----
***************
*** 3292,3297 ****
--- 3353,3359 ----
      return 0;
  }
  
+ /* SMB_COM_NEGOTIATE */
  long smb_ReceiveNegotiate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      char *namep;
***************
*** 3411,3417 ****
           * and NT Find *
           * and NT SMB's *
           * and raw mode 
!          * and DFS */
          caps = NTNEGOTIATE_CAPABILITY_NTSTATUS |
  #ifdef DFS_SUPPORT
                 NTNEGOTIATE_CAPABILITY_DFS |
--- 3473,3480 ----
           * and NT Find *
           * and NT SMB's *
           * and raw mode 
!          * and DFS
!          * and Unicode */
          caps = NTNEGOTIATE_CAPABILITY_NTSTATUS |
  #ifdef DFS_SUPPORT
                 NTNEGOTIATE_CAPABILITY_DFS |
***************
*** 3426,3431 ****
--- 3489,3500 ----
          if ( smb_authType == SMB_AUTH_EXTENDED )
              caps |= NTNEGOTIATE_CAPABILITY_EXTENDED_SECURITY;
  
+ #ifdef SMB_UNICODE
+         if ( smb_UseUnicode ) {
+             caps |= NTNEGOTIATE_CAPABILITY_UNICODE;
+         }
+ #endif
+ 
          smb_SetSMBParmLong(outp, 9, caps);
          time(&unixTime);
          smb_SearchTimeFromUnixTime(&dosTime, unixTime);
***************
*** 3442,3448 ****
              datap = smb_GetSMBData(outp, NULL);
              memcpy(datap,vcp->encKey,MSV1_0_CHALLENGE_LENGTH);
              /* and the faux domain name */
!             strcpy(datap + MSV1_0_CHALLENGE_LENGTH,smb_ServerDomainName);
          } else if ( smb_authType == SMB_AUTH_EXTENDED ) {
              void * secBlob;
              int secBlobLength;
--- 3511,3519 ----
              datap = smb_GetSMBData(outp, NULL);
              memcpy(datap,vcp->encKey,MSV1_0_CHALLENGE_LENGTH);
              /* and the faux domain name */
!             cm_ClientStringToUtf8(smb_ServerDomainName, -1,
!                                   datap + MSV1_0_CHALLENGE_LENGTH,
!                                   sizeof(outp->data)/sizeof(char) - (datap - outp->data));
          } else if ( smb_authType == SMB_AUTH_EXTENDED ) {
              void * secBlob;
              int secBlobLength;
***************
*** 3504,3510 ****
              /* paste in a new encryption key */
              memcpy(datap, vcp->encKey, MSV1_0_CHALLENGE_LENGTH);
              /* and the faux domain name */
!             strcpy(datap + MSV1_0_CHALLENGE_LENGTH, smb_ServerDomainName);
          } else {
              smb_SetSMBParm(outp, 11, 0); /* encryption key length */
              smb_SetSMBParm(outp, 12, 0); /* resvd */
--- 3575,3583 ----
              /* paste in a new encryption key */
              memcpy(datap, vcp->encKey, MSV1_0_CHALLENGE_LENGTH);
              /* and the faux domain name */
!             cm_ClientStringToUtf8(smb_ServerDomainName, -1,
!                                   datap + MSV1_0_CHALLENGE_LENGTH,
!                                   sizeof(outp->data)/sizeof(char) - (datap - outp->data));
          } else {
              smb_SetSMBParm(outp, 11, 0); /* encryption key length */
              smb_SetSMBParm(outp, 12, 0); /* resvd */
***************
*** 3606,3612 ****
  	now = osi_Time();
  	lock_ObtainWrite(&smb_rctLock);
  	for ( unpp=&usernamesp; *unpp; ) {
! 	    int delete = 0;
  	    smb_username_t *unp;
  
  	    lock_ObtainMutex(&(*unpp)->mx);
--- 3679,3685 ----
  	now = osi_Time();
  	lock_ObtainWrite(&smb_rctLock);
  	for ( unpp=&usernamesp; *unpp; ) {
! 	    int deleteOk = 0;
  	    smb_username_t *unp;
  
  	    lock_ObtainMutex(&(*unpp)->mx);
***************
*** 3616,3625 ****
  		;
  	    else if (!smb_LogoffTokenTransfer ||
  		     ((*unpp)->last_logoff_t + smb_LogoffTransferTimeout < now))
! 		delete = 1;
  	    lock_ReleaseMutex(&(*unpp)->mx);
  
! 	    if (delete) {
  		cm_user_t * userp;
  
  		unp = *unpp;	
--- 3689,3698 ----
  		;
  	    else if (!smb_LogoffTokenTransfer ||
  		     ((*unpp)->last_logoff_t + smb_LogoffTransferTimeout < now))
! 		deleteOk = 1;
  	    lock_ReleaseMutex(&(*unpp)->mx);
  
! 	    if (deleteOk) {
  		cm_user_t * userp;
  
  		unp = *unpp;	
***************
*** 3801,3831 ****
      return 0;
  }
  
  long smb_ReceiveCoreTreeConnect(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *rsp)
  {
      smb_tid_t *tidp;
      smb_user_t *uidp;
      unsigned short newTid;
!     char shareName[AFSPATHMAX];
!     char *sharePath;
      int shareFound;
!     char *tp;
!     char *pathp;
!     char *passwordp;
      cm_user_t *userp;
  
      osi_Log0(smb_logp, "SMB receive tree connect");
  
      /* parse input parameters */
!     tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(tp, &tp);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(pathp,pathp);
!     passwordp = smb_ParseASCIIBlock(tp, &tp);
!     tp = strrchr(pathp, '\\');
      if (!tp)
          return CM_ERROR_BADSMB;
!     strcpy(shareName, tp+1);
  
      lock_ObtainMutex(&vcp->mx);
      newTid = vcp->tidCounter++;
--- 3874,3904 ----
      return 0;
  }
  
+ /* SMB_COM_TREE_CONNECT */
  long smb_ReceiveCoreTreeConnect(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *rsp)
  {
      smb_tid_t *tidp;
      smb_user_t *uidp;
      unsigned short newTid;
!     clientchar_t shareName[AFSPATHMAX];
!     clientchar_t *sharePath;
      int shareFound;
!     clientchar_t *tp;
!     clientchar_t *pathp;
      cm_user_t *userp;
  
      osi_Log0(smb_logp, "SMB receive tree connect");
  
      /* parse input parameters */
!     {
!         char *tbp;
!         tbp = smb_GetSMBData(inp, NULL);
!         pathp = smb_ParseASCIIBlock(inp, tbp, &tbp, SMB_STRF_ANSIPATH);
!     }
!     tp = cm_ClientStrRChr(pathp, '\\');
      if (!tp)
          return CM_ERROR_BADSMB;
!     cm_ClientStrCpy(shareName, lengthof(shareName), tp+1);
  
      lock_ObtainMutex(&vcp->mx);
      newTid = vcp->tidCounter++;
***************
*** 3855,3886 ****
      return 0;
  }
  
- unsigned char *smb_ParseDataBlock(unsigned char *inp, char **chainpp, int *lengthp)
- {
-     int tlen;
- 
-     if (*inp++ != 0x1) return NULL;
-     tlen = inp[0] + (inp[1]<<8);
-     inp += 2;		/* skip length field */
-         
-     if (chainpp) {
-         *chainpp = inp + tlen;
-     }	
- 
-     if (lengthp) *lengthp = tlen;
-         
-     return inp;
- }
- 
  /* set maskp to the mask part of the incoming path.
   * Mask is 11 bytes long (8.3 with the dot elided).
   * Returns true if succeeds with a valid name, otherwise it does
   * its best, but returns false.
   */
! int smb_Get8Dot3MaskFromPath(unsigned char *maskp, unsigned char *pathp)
  {
!     char *tp;
!     char *up;
      int i;
      int tc;
      int valid8Dot3;
--- 3928,3942 ----
      return 0;
  }
  
  /* set maskp to the mask part of the incoming path.
   * Mask is 11 bytes long (8.3 with the dot elided).
   * Returns true if succeeds with a valid name, otherwise it does
   * its best, but returns false.
   */
! int smb_Get8Dot3MaskFromPath(clientchar_t *maskp, clientchar_t *pathp)
  {
!     clientchar_t *tp;
!     clientchar_t *up;
      int i;
      int tc;
      int valid8Dot3;
***************
*** 3893,3899 ****
      maskp[11] = '\0';
  
      /* find last backslash, or use whole thing if there is none */
!     tp = strrchr(pathp, '\\');
      if (!tp) 
          tp = pathp;
      else 
--- 3949,3955 ----
      maskp[11] = '\0';
  
      /* find last backslash, or use whole thing if there is none */
!     tp = cm_ClientStrRChr(pathp, '\\');
      if (!tp) 
          tp = pathp;
      else 
***************
*** 3938,3954 ****
      /* unreachable */
  }
  
! int smb_Match8Dot3Mask(char *unixNamep, char *maskp)
  {
!     char umask[11];
      int valid;
      int i;
!     char tc1;
!     char tc2;
!     char *tp1;
!     char *tp2;
  
!     /* XXX redo this, calling smb_V3MatchMask with a converted mask */
  
      valid = smb_Get8Dot3MaskFromPath(umask, unixNamep);
      if (!valid) 
--- 3994,4010 ----
      /* unreachable */
  }
  
! int smb_Match8Dot3Mask(clientchar_t *unixNamep, clientchar_t *maskp)
  {
!     clientchar_t umask[11];
      int valid;
      int i;
!     clientchar_t tc1;
!     clientchar_t tc2;
!     clientchar_t *tp1;
!     clientchar_t *tp2;
  
!     /* XXX redo this, calling cm_MatchMask with a converted mask */
  
      valid = smb_Get8Dot3MaskFromPath(umask, unixNamep);
      if (!valid) 
***************
*** 3960,3969 ****
      tp1 = umask;	/* real name, in mask format */
      tp2 = maskp;	/* mask, in mask format */
      for(i=0; i<11; i++) {
!         tc1 = *tp1++;	/* char from real name */
!         tc2 = *tp2++;	/* char from mask */
!         tc1 = (char) cm_foldUpper[(unsigned char)tc1];
!         tc2 = (char) cm_foldUpper[(unsigned char)tc2];
          if (tc1 == tc2) 
              continue;
          if (tc2 == '?' && tc1 != ' ') 
--- 4016,4025 ----
      tp1 = umask;	/* real name, in mask format */
      tp2 = maskp;	/* mask, in mask format */
      for(i=0; i<11; i++) {
!         tc1 = *tp1++;	/* clientchar_t from real name */
!         tc2 = *tp2++;	/* clientchar_t from mask */
!         tc1 = (clientchar_t) cm_foldUpper[(clientchar_t)tc1];
!         tc2 = (clientchar_t) cm_foldUpper[(clientchar_t)tc2];
          if (tc1 == tc2) 
              continue;
          if (tc2 == '?' && tc1 != ' ') 
***************
*** 3977,3987 ****
      return 1;
  }
  
! char *smb_FindMask(char *pathp)
  {
!     char *tp;
          
!     tp = strrchr(pathp, '\\');	/* find last slash */
  
      if (tp) 
          return tp+1;	/* skip the slash */
--- 4033,4043 ----
      return 1;
  }
  
! clientchar_t *smb_FindMask(clientchar_t *pathp)
  {
!     clientchar_t *tp;
          
!     tp = cm_ClientStrRChr(pathp, '\\');	/* find last slash */
  
      if (tp) 
          return tp+1;	/* skip the slash */
***************
*** 3989,3999 ****
          return pathp;	/* no slash, return the entire path */
  }       
  
  long smb_ReceiveCoreSearchVolume(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     unsigned char *pathp;
      unsigned char *tp;
!     unsigned char mask[12];
      unsigned char *statBlockp;
      unsigned char initStatBlock[21];
      int statLen;
--- 4045,4059 ----
          return pathp;	/* no slash, return the entire path */
  }       
  
+ /* SMB_COM_SEARCH for a volume label
+ 
+    (This is called from smb_ReceiveCoreSearchDir() and not an actual
+    dispatch function.) */
  long smb_ReceiveCoreSearchVolume(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     clientchar_t *pathp;
      unsigned char *tp;
!     clientchar_t mask[12];
      unsigned char *statBlockp;
      unsigned char initStatBlock[21];
      int statLen;
***************
*** 4002,4012 ****
  
      /* pull pathname and stat block out of request */
      tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(tp, (char **) &tp);
      osi_assertx(pathp != NULL, "null path");
!     if (smb_StoreAnsiFilenames)
!         OemToChar(pathp,pathp);
!     statBlockp = smb_ParseVblBlock(tp, (char **) &tp, &statLen);
      osi_assertx(statBlockp != NULL, "null statBlock");
      if (statLen == 0) {
          statBlockp = initStatBlock;
--- 4062,4071 ----
  
      /* pull pathname and stat block out of request */
      tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(inp, tp, &tp,
!                                 SMB_STRF_ANSIPATH|SMB_STRF_FORCEASCII);
      osi_assertx(pathp != NULL, "null path");
!     statBlockp = smb_ParseVblBlock(tp, &tp, &statLen);
      osi_assertx(statBlockp != NULL, "null statBlock");
      if (statLen == 0) {
          statBlockp = initStatBlock;
***************
*** 4048,4053 ****
--- 4107,4115 ----
      *tp++ = 0;
      *tp++ = 0;
  
+     /* The filename is a UCHAR buffer that is ASCII even if Unicode
+        was negotiated. */
+ 
      /* finally, null-terminated 8.3 pathname, which we set to AFS */
      memset(tp, ' ', 13);
      strcpy(tp, "AFS");
***************
*** 4061,4067 ****
  
  static long 
  smb_ApplyDirListPatches(smb_dirListPatch_t **dirPatchespp,
!                         char * tidPathp, char * relPathp,
                          cm_user_t *userp, cm_req_t *reqp)
  {
      long code = 0;
--- 4123,4129 ----
  
  static long 
  smb_ApplyDirListPatches(smb_dirListPatch_t **dirPatchespp,
!                         clientchar_t * tidPathp, clientchar_t * relPathp,
                          cm_user_t *userp, cm_req_t *reqp)
  {
      long code = 0;
***************
*** 4072,4085 ****
      char attr;
      smb_dirListPatch_t *patchp;
      smb_dirListPatch_t *npatchp;
!     char path[AFSPATHMAX];
  
      for (patchp = *dirPatchespp; patchp; patchp =
           (smb_dirListPatch_t *) osi_QNext(&patchp->q)) {
  
          dptr = patchp->dptr;
  
!         snprintf(path, AFSPATHMAX, "%s\\%s", relPathp ? relPathp : "", patchp->dep->name);
          reqp->relPathp = path;
          reqp->tidPathp = tidPathp;
  
--- 4134,4148 ----
      char attr;
      smb_dirListPatch_t *patchp;
      smb_dirListPatch_t *npatchp;
!     clientchar_t path[AFSPATHMAX];
  
      for (patchp = *dirPatchespp; patchp; patchp =
           (smb_dirListPatch_t *) osi_QNext(&patchp->q)) {
  
          dptr = patchp->dptr;
  
!         cm_ClientStrPrintfN(path, AFSPATHMAX, _C("%s\\%s"),
!                             relPathp ? relPathp : _C(""), patchp->dep->name);
          reqp->relPathp = path;
          reqp->tidPathp = tidPathp;
  
***************
*** 4143,4155 ****
      return code;
  }
  
  long smb_ReceiveCoreSearchDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      int attribute;
      long nextCookie;
!     char *tp;
      long code = 0;
!     char *pathp;
      cm_dirEntry_t *dep = 0;
      int maxCount;
      smb_dirListPatch_t *dirListPatchesp;
--- 4206,4219 ----
      return code;
  }
  
+ /* SMB_COM_SEARCH */
  long smb_ReceiveCoreSearchDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      int attribute;
      long nextCookie;
!     unsigned char *tp;
      long code = 0;
!     clientchar_t *pathp;
      cm_dirEntry_t *dep = 0;
      int maxCount;
      smb_dirListPatch_t *dirListPatchesp;
***************
*** 4170,4179 ****
      cm_pageHeader_t *pageHeaderp;
      cm_user_t *userp = NULL;
      int slotInPage;
!     char shortName[13];
!     char *actualName;
!     char *shortNameEnd;
!     char mask[12];
      int returnedNames;
      long nextEntryCookie;
      int numDirChunks;		/* # of 32 byte dir chunks in this entry */
--- 4234,4240 ----
      cm_pageHeader_t *pageHeaderp;
      cm_user_t *userp = NULL;
      int slotInPage;
!     clientchar_t mask[12];
      int returnedNames;
      long nextEntryCookie;
      int numDirChunks;		/* # of 32 byte dir chunks in this entry */
***************
*** 4184,4190 ****
      int starPattern;
      int rootPath = 0;
      int caseFold;
!     char *tidPathp = 0;
      cm_req_t req;
      cm_fid_t fid;
      int fileType;
--- 4245,4251 ----
      int starPattern;
      int rootPath = 0;
      int caseFold;
!     clientchar_t *tidPathp = 0;
      cm_req_t req;
      cm_fid_t fid;
      int fileType;
***************
*** 4198,4206 ****
      caseFold = CM_FLAG_CASEFOLD;
  
      tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(tp, &tp);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(pathp,pathp);
      inCookiep = smb_ParseVblBlock(tp, &tp, &dataLength);
  
      /* bail out if request looks bad */
--- 4259,4266 ----
      caseFold = CM_FLAG_CASEFOLD;
  
      tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(inp, tp, &tp,
!                                 SMB_STRF_ANSIPATH|SMB_STRF_FORCEASCII);
      inCookiep = smb_ParseVblBlock(tp, &tp, &dataLength);
  
      /* bail out if request looks bad */
***************
*** 4223,4230 ****
          if (attribute & 0x8)
              return smb_ReceiveCoreSearchVolume(vcp, inp, outp);
  
!         osi_Log2(smb_logp, "SMB receive search dir count %d [%s]",
!                   maxCount, osi_LogSaveString(smb_logp, pathp));
  
          if (*pathp == 0) {	/* null pathp, treat as root dir */
              if (!(attribute & SMB_ATTR_DIRECTORY))	/* exclude dirs */
--- 4283,4290 ----
          if (attribute & 0x8)
              return smb_ReceiveCoreSearchVolume(vcp, inp, outp);
  
!         osi_Log2(smb_logp, "SMB receive search dir count %d [%S]",
!                  maxCount, osi_LogSaveClientString(smb_logp, pathp));
  
          if (*pathp == 0) {	/* null pathp, treat as root dir */
              if (!(attribute & SMB_ATTR_DIRECTORY))	/* exclude dirs */
***************
*** 4249,4256 ****
          dsp = smb_FindDirSearch(inCookiep[12]);
          if (!dsp) {
              /* can't find dir search status; fatal error */
!             osi_Log3(smb_logp, "SMB receive search dir bad cookie: cookie %d nextCookie %u [%s]",
!                      inCookiep[12], nextCookie, osi_LogSaveString(smb_logp, pathp));
              return CM_ERROR_BADFD;
          }
          attribute = dsp->attribute;
--- 4309,4316 ----
          dsp = smb_FindDirSearch(inCookiep[12]);
          if (!dsp) {
              /* can't find dir search status; fatal error */
!             osi_Log3(smb_logp, "SMB receive search dir bad cookie: cookie %d nextCookie %u [%S]",
!                      inCookiep[12], nextCookie, osi_LogSaveClientString(smb_logp, pathp));
              return CM_ERROR_BADFD;
          }
          attribute = dsp->attribute;
***************
*** 4283,4289 ****
          code = 0;
      } else {
          spacep = inp->spacep;
!         smb_StripLastComponent(spacep->data, NULL, pathp);
          code = smb_LookupTIDPath(vcp, ((smb_t *)inp)->tid, &tidPathp);
          if (code) {
              lock_ReleaseMutex(&dsp->mx);
--- 4343,4349 ----
          code = 0;
      } else {
          spacep = inp->spacep;
!         smb_StripLastComponent(spacep->wdata, NULL, pathp);
          code = smb_LookupTIDPath(vcp, ((smb_t *)inp)->tid, &tidPathp);
          if (code) {
              lock_ReleaseMutex(&dsp->mx);
***************
*** 4292,4306 ****
              smb_ReleaseDirSearch(dsp);
              return CM_ERROR_NOFILES;
          }
!         strcpy(dsp->tidPath, tidPathp ? tidPathp : "/");
!         strcpy(dsp->relPath, spacep->data);
  
!         code = cm_NameI(cm_data.rootSCachep, spacep->data,
                          caseFold | CM_FLAG_FOLLOW, userp, tidPathp, &req, &scp);
          if (code == 0) {
  #ifdef DFS_SUPPORT
              if (scp->fileType == CM_SCACHETYPE_DFSLINK) {
!                 int pnc = cm_VolStatus_Notify_DFS_Mapping(scp, tidPathp, spacep->data);
                  cm_ReleaseSCache(scp);
                  lock_ReleaseMutex(&dsp->mx);
                  cm_ReleaseUser(userp);
--- 4352,4368 ----
              smb_ReleaseDirSearch(dsp);
              return CM_ERROR_NOFILES;
          }
!         cm_ClientStrCpy(dsp->tidPath, lengthof(dsp->tidPath), tidPathp ? tidPathp : _C("/"));
!         cm_ClientStrCpy(dsp->relPath, lengthof(dsp->relPath), spacep->wdata);
  
!         code = cm_NameI(cm_data.rootSCachep, spacep->wdata,
                          caseFold | CM_FLAG_FOLLOW, userp, tidPathp, &req, &scp);
          if (code == 0) {
  #ifdef DFS_SUPPORT
              if (scp->fileType == CM_SCACHETYPE_DFSLINK) {
!                 int pnc;
! 
!                 pnc  = cm_VolStatus_Notify_DFS_Mapping(scp, tidPathp, spacep->wdata);
                  cm_ReleaseSCache(scp);
                  lock_ReleaseMutex(&dsp->mx);
                  cm_ReleaseUser(userp);
***************
*** 4373,4378 ****
--- 4435,4444 ----
      code = 0;
      returnedNames = 0;
      while (1) {
+         clientchar_t *actualName;
+         clientchar_t shortName[13];
+         clientchar_t *shortNameEnd;
+ 
          /* make sure that curOffset.LowPart doesn't point to the first
           * 32 bytes in the 2nd through last dir page, and that it doesn't
           * point at the first 13 32-byte chunks in the first dir page,
***************
*** 4527,4541 ****
          nextEntryCookie = curOffset.LowPart + (CM_DIR_CHUNKSIZE * numDirChunks);
  
          /* Compute 8.3 name if necessary */
!         actualName = dep->name;
          if (dep->fid.vnode != 0 && !cm_Is8Dot3(actualName)) {
!             cm_Gen8Dot3Name(dep, shortName, &shortNameEnd);
              actualName = shortName;
          }
  
!         osi_Log3(smb_logp, "SMB search dir vn %d name %s (%s)",
!                   dep->fid.vnode, osi_LogSaveString(smb_logp, dep->name),
!                   osi_LogSaveString(smb_logp, actualName));
  
          if (dep->fid.vnode != 0 && smb_Match8Dot3Mask(actualName, mask)) {
              /* this is one of the entries to use: it is not deleted
--- 4593,4608 ----
          nextEntryCookie = curOffset.LowPart + (CM_DIR_CHUNKSIZE * numDirChunks);
  
          /* Compute 8.3 name if necessary */
!         actualName = cm_FsStringToClientStringAlloc(dep->name, -1, NULL);
          if (dep->fid.vnode != 0 && !cm_Is8Dot3(actualName)) {
!             free(actualName);
!             cm_Gen8Dot3NameInt(dep->name, &dep->fid, shortName, &shortNameEnd);
              actualName = shortName;
          }
  
!         osi_Log3(smb_logp, "SMB search dir vn %d name %s (%S)",
!                  dep->fid.vnode, osi_LogSaveString(smb_logp, dep->name),
!                  osi_LogSaveClientString(smb_logp, actualName));
  
          if (dep->fid.vnode != 0 && smb_Match8Dot3Mask(actualName, mask)) {
              /* this is one of the entries to use: it is not deleted
***************
*** 4569,4579 ****
  
              *op++ = resByte;
              memcpy(op, mask, 11); op += 11;
!             *op++ = (char) dsp->cookie;	/* they say it must be non-zero */
!             *op++ = (char)(nextEntryCookie & 0xff);
!             *op++ = (char)((nextEntryCookie>>8) & 0xff);
!             *op++ = (char)((nextEntryCookie>>16) & 0xff);
!             *op++ = (char)((nextEntryCookie>>24) & 0xff);
              memcpy(op, &clientCookie, 4); op += 4;
  
              /* now we emit the attribute.  This is sort of tricky,
--- 4636,4646 ----
  
              *op++ = resByte;
              memcpy(op, mask, 11); op += 11;
!             *op++ = (unsigned char) dsp->cookie;	/* they say it must be non-zero */
!             *op++ = (unsigned char)(nextEntryCookie & 0xff);
!             *op++ = (unsigned char)((nextEntryCookie>>8) & 0xff);
!             *op++ = (unsigned char)((nextEntryCookie>>16) & 0xff);
!             *op++ = (unsigned char)((nextEntryCookie>>24) & 0xff);
              memcpy(op, &clientCookie, 4); op += 4;
  
              /* now we emit the attribute.  This is sort of tricky,
***************
*** 4614,4622 ****
               * it fits in 8.3 or the pattern wouldn't match, but it
               * never hurts to be sure.
               */
!             strncpy(op, actualName, 13);
              if (smb_StoreAnsiFilenames)
                  CharToOem(op, op);
  
              /* Uppercase if requested by client */
              if (!KNOWS_LONG_NAMES(inp))
--- 4681,4691 ----
               * it fits in 8.3 or the pattern wouldn't match, but it
               * never hurts to be sure.
               */
!             cm_ClientStringToUtf8(actualName, -1, op, 13);
              if (smb_StoreAnsiFilenames)
                  CharToOem(op, op);
+             /* This is a UCHAR field, which is ASCII even if Unicode
+                is negotiated. */
  
              /* Uppercase if requested by client */
              if (!KNOWS_LONG_NAMES(inp))
***************
*** 4674,4681 ****
       */
      temp -= 3;		/* deduct vbl block info */
      osi_assertx(temp == (43 * returnedNames), "unexpected data length");
!     origOp[1] = (char)(temp & 0xff);
!     origOp[2] = (char)((temp>>8) & 0xff);
      if (returnedNames == 0) 
          smb_DeleteDirSearch(dsp);
      smb_ReleaseDirSearch(dsp);
--- 4743,4750 ----
       */
      temp -= 3;		/* deduct vbl block info */
      osi_assertx(temp == (43 * returnedNames), "unexpected data length");
!     origOp[1] = (unsigned char)(temp & 0xff);
!     origOp[2] = (unsigned char)((temp>>8) & 0xff);
      if (returnedNames == 0) 
          smb_DeleteDirSearch(dsp);
      smb_ReleaseDirSearch(dsp);
***************
*** 4684,4714 ****
      return code;
  }	
  
  /* verify that this is a valid path to a directory.  I don't know why they
   * don't use the get file attributes call.
   */
  long smb_ReceiveCoreCheckPath(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     char *pathp;
      long code = 0;
      cm_scache_t *rootScp;
      cm_scache_t *newScp;
      cm_user_t *userp;
      unsigned int attrs;
      int caseFold;
!     char *tidPathp;
      cm_req_t req;
  
      cm_InitReq(&req);
  
!     pathp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(pathp, NULL);
      if (!pathp)
          return CM_ERROR_BADFD;
!     if (smb_StoreAnsiFilenames)
!         OemToChar(pathp,pathp);
!     osi_Log1(smb_logp, "SMB receive check path %s",
!              osi_LogSaveString(smb_logp, pathp));
          
      rootScp = cm_data.rootSCachep;
          
--- 4753,4785 ----
      return code;
  }	
  
+ 
  /* verify that this is a valid path to a directory.  I don't know why they
   * don't use the get file attributes call.
+  *
+  * SMB_COM_CHECK_DIRECTORY
   */
  long smb_ReceiveCoreCheckPath(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     clientchar_t *pathp;
      long code = 0;
      cm_scache_t *rootScp;
      cm_scache_t *newScp;
      cm_user_t *userp;
      unsigned int attrs;
      int caseFold;
!     clientchar_t *tidPathp;
      cm_req_t req;
+     char * pdata;
  
      cm_InitReq(&req);
  
!     pdata = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(inp, pdata, NULL, SMB_STRF_ANSIPATH);
      if (!pathp)
          return CM_ERROR_BADFD;
!     osi_Log1(smb_logp, "SMB receive check path %S",
!              osi_LogSaveClientString(smb_logp, pathp));
          
      rootScp = cm_data.rootSCachep;
          
***************
*** 4769,4777 ****
      return code;
  }	
  
  long smb_ReceiveCoreSetFileAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     char *pathp;
      long code = 0;
      cm_scache_t *rootScp;
      unsigned short attribute;
--- 4840,4849 ----
      return code;
  }	
  
+ /* SMB_COM_SET_INFORMATION */
  long smb_ReceiveCoreSetFileAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     clientchar_t *pathp;
      long code = 0;
      cm_scache_t *rootScp;
      unsigned short attribute;
***************
*** 4780,4786 ****
      afs_uint32 dosTime;
      cm_user_t *userp;
      int caseFold;
!     char *tidPathp;
      cm_req_t req;
  
      cm_InitReq(&req);
--- 4852,4859 ----
      afs_uint32 dosTime;
      cm_user_t *userp;
      int caseFold;
!     clientchar_t *tidPathp;
!     char * datap;
      cm_req_t req;
  
      cm_InitReq(&req);
***************
*** 4789,4800 ****
      attribute = smb_GetSMBParm(inp, 0);
      dosTime = smb_GetSMBParm(inp, 1) | (smb_GetSMBParm(inp, 2) << 16);
  
!     pathp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(pathp, NULL);
      if (!pathp)
          return CM_ERROR_BADSMB;
-     if (smb_StoreAnsiFilenames)
-         OemToChar(pathp,pathp);
                 
      osi_Log2(smb_logp, "SMB receive setfile attributes time %d, attr 0x%x",
               dosTime, attribute);
--- 4862,4871 ----
      attribute = smb_GetSMBParm(inp, 0);
      dosTime = smb_GetSMBParm(inp, 1) | (smb_GetSMBParm(inp, 2) << 16);
  
!     datap = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(inp, datap, NULL, SMB_STRF_ANSIPATH);
      if (!pathp)
          return CM_ERROR_BADSMB;
                 
      osi_Log2(smb_logp, "SMB receive setfile attributes time %d, attr 0x%x",
               dosTime, attribute);
***************
*** 4884,4892 ****
      return code;
  }
  
  long smb_ReceiveCoreGetFileAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     char *pathp;
      long code = 0;
      cm_scache_t *rootScp;
      cm_scache_t *newScp, *dscp;
--- 4955,4964 ----
      return code;
  }
  
+ 
  long smb_ReceiveCoreGetFileAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     clientchar_t *pathp;
      long code = 0;
      cm_scache_t *rootScp;
      cm_scache_t *newScp, *dscp;
***************
*** 4894,4919 ****
      int attrs;
      cm_user_t *userp;
      int caseFold;
!     char *tidPathp;
      cm_space_t *spacep;
!     char *lastComp;
      cm_req_t req;
  
      cm_InitReq(&req);
  
!     pathp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(pathp, NULL);
      if (!pathp)
          return CM_ERROR_BADSMB;
          
      if (*pathp == 0)		/* null path */
!         pathp = "\\";
!     else
!         if (smb_StoreAnsiFilenames)
!             OemToChar(pathp,pathp);
  
!     osi_Log1(smb_logp, "SMB receive getfile attributes path %s",
!              osi_LogSaveString(smb_logp, pathp));
  
      rootScp = cm_data.rootSCachep;
          
--- 4966,4989 ----
      int attrs;
      cm_user_t *userp;
      int caseFold;
!     clientchar_t *tidPathp;
      cm_space_t *spacep;
!     clientchar_t *lastComp;
!     char * datap;
      cm_req_t req;
  
      cm_InitReq(&req);
  
!     datap = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(inp, datap, NULL, SMB_STRF_ANSIPATH);
      if (!pathp)
          return CM_ERROR_BADSMB;
          
      if (*pathp == 0)		/* null path */
!         pathp = _C("\\");
  
!     osi_Log1(smb_logp, "SMB receive getfile attributes path %S",
!              osi_LogSaveClientString(smb_logp, pathp));
  
      rootScp = cm_data.rootSCachep;
          
***************
*** 4946,4961 ****
       * http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_extending/custom.asp
       */
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->data, &lastComp, pathp);
  #ifndef SPECIAL_FOLDERS
!     if (lastComp && stricmp(lastComp, "\\desktop.ini") == 0) {
!         code = cm_NameI(rootScp, spacep->data,
                          caseFold | CM_FLAG_DIRSEARCH | CM_FLAG_FOLLOW,
                          userp, tidPathp, &req, &dscp);
          if (code == 0) {
  #ifdef DFS_SUPPORT
              if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                 int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->data);
                  if ( WANTS_DFS_PATHNAMES(inp) || pnc )
                      return CM_ERROR_PATH_NOT_COVERED;
                  else
--- 5016,5032 ----
       * http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_extending/custom.asp
       */
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->wdata, &lastComp, pathp);
  #ifndef SPECIAL_FOLDERS
!     if (lastComp && cm_ClientStrCmpIA(lastComp, _C("\\desktop.ini")) == 0) {
!         code = cm_NameI(rootScp, spacep->wdata,
                          caseFold | CM_FLAG_DIRSEARCH | CM_FLAG_FOLLOW,
                          userp, tidPathp, &req, &dscp);
          if (code == 0) {
  #ifdef DFS_SUPPORT
              if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                 int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp,
!                                                           spacep->wdata);
                  if ( WANTS_DFS_PATHNAMES(inp) || pnc )
                      return CM_ERROR_PATH_NOT_COVERED;
                  else
***************
*** 5050,5055 ****
--- 5121,5127 ----
      return 0;
  }	
  
+ /* SMB_COM_TREE_DISCONNECT */
  long smb_ReceiveCoreTreeDisconnect(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      smb_tid_t *tidp;
***************
*** 5060,5066 ****
      tidp = smb_FindTID(vcp, ((smb_t *)inp)->tid, 0);
      if (tidp) {
  	lock_ObtainWrite(&smb_rctLock);
!         tidp->delete = 1;
          smb_ReleaseTID(tidp, TRUE);
          lock_ReleaseWrite(&smb_rctLock);
      }
--- 5132,5138 ----
      tidp = smb_FindTID(vcp, ((smb_t *)inp)->tid, 0);
      if (tidp) {
  	lock_ObtainWrite(&smb_rctLock);
!         tidp->deleteOk = 1;
          smb_ReleaseTID(tidp, TRUE);
          lock_ReleaseWrite(&smb_rctLock);
      }
***************
*** 5068,5078 ****
      return 0;
  }
  
  long smb_ReceiveCoreOpen(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      smb_fid_t *fidp;
!     char *pathp;
!     char *lastNamep;
      int share;
      int attribute;
      long code = 0;
--- 5140,5151 ----
      return 0;
  }
  
+ /* SMB_COM_0PEN */
  long smb_ReceiveCoreOpen(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      smb_fid_t *fidp;
!     clientchar_t *pathp;
!     clientchar_t *lastNamep;
      int share;
      int attribute;
      long code = 0;
***************
*** 5081,5097 ****
      afs_uint32 dosTime;
      int caseFold;
      cm_space_t *spacep;
!     char *tidPathp;
      cm_req_t req;
  
      cm_InitReq(&req);
  
!     pathp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(pathp, NULL);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(pathp,pathp);
! 	
!     osi_Log1(smb_logp, "SMB receive open file [%s]", osi_LogSaveString(smb_logp, pathp));
  
  #ifdef DEBUG_VERBOSE
      {
--- 5154,5169 ----
      afs_uint32 dosTime;
      int caseFold;
      cm_space_t *spacep;
!     clientchar_t *tidPathp;
!     char * datap;
      cm_req_t req;
  
      cm_InitReq(&req);
  
!     datap = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(inp, datap, NULL, SMB_STRF_ANSIPATH);
! 
!     osi_Log1(smb_logp, "SMB receive open file [%S]", osi_LogSaveClientString(smb_logp, pathp));
  
  #ifdef DEBUG_VERBOSE
      {
***************
*** 5107,5114 ****
      attribute = smb_GetSMBParm(inp, 1);
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->data, &lastNamep, pathp);
!     if (lastNamep && strcmp(lastNamep, SMB_IOCTL_FILENAME) == 0) {
          /* special case magic file name for receiving IOCTL requests
           * (since IOCTL calls themselves aren't getting through).
           */
--- 5179,5186 ----
      attribute = smb_GetSMBParm(inp, 1);
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->wdata, &lastNamep, pathp);
!     if (lastNamep && cm_ClientStrCmp(lastNamep, _C(SMB_IOCTL_FILENAME)) == 0) {
          /* special case magic file name for receiving IOCTL requests
           * (since IOCTL calls themselves aren't getting through).
           */
***************
*** 5224,5230 ****
      cm_user_t *userp;
      cm_req_t *reqp;
      smb_vc_t *vcp;
!     char *maskp;		/* pointer to the star pattern */
      int flags;
      int any;
      cm_dirEntryList_t * matches;
--- 5296,5302 ----
      cm_user_t *userp;
      cm_req_t *reqp;
      smb_vc_t *vcp;
!     clientchar_t *maskp;		/* pointer to the star pattern */
      int flags;
      int any;
      cm_dirEntryList_t * matches;
***************
*** 5236,5243 ****
      smb_unlinkRock_t *rockp;
      int caseFold;
      int match;
!     char shortName[13];
!     char *matchName;
          
      rockp = vrockp;
  
--- 5308,5314 ----
      smb_unlinkRock_t *rockp;
      int caseFold;
      int match;
!     normchar_t matchName[MAX_PATH];
          
      rockp = vrockp;
  
***************
*** 5245,5270 ****
      if (!(rockp->vcp->flags & SMB_VCFLAG_USEV3))
          caseFold |= CM_FLAG_8DOT3;
  
!     matchName = dep->name;
!     match = smb_V3MatchMask(matchName, rockp->maskp, caseFold);
      if (!match &&
!          (rockp->flags & SMB_MASKFLAG_TILDE) &&
!          !cm_Is8Dot3(dep->name)) {
!         cm_Gen8Dot3Name(dep, shortName, NULL);
!         matchName = shortName;
          /* 8.3 matches are always case insensitive */
!         match = smb_V3MatchMask(matchName, rockp->maskp, caseFold | CM_FLAG_CASEFOLD);
      }
      if (match) {
!         osi_Log1(smb_logp, "Found match %s",
!                  osi_LogSaveString(smb_logp, matchName));
  
          cm_DirEntryListAdd(dep->name, &rockp->matches);
  
          rockp->any = 1;
  
          /* If we made a case sensitive exact match, we might as well quit now. */
!         if (!(rockp->flags & SMB_MASKFLAG_CASEFOLD) && !strcmp(matchName, rockp->maskp))
              code = CM_ERROR_STOPNOW;
          else
              code = 0;
--- 5316,5340 ----
      if (!(rockp->vcp->flags & SMB_VCFLAG_USEV3))
          caseFold |= CM_FLAG_8DOT3;
  
!     cm_FsStringToNormString(dep->name, -1, matchName, lengthof(matchName));
!     match = cm_MatchMask(matchName, rockp->maskp, caseFold);
      if (!match &&
!         (rockp->flags & SMB_MASKFLAG_TILDE) &&
!         !cm_Is8Dot3(matchName)) {
!         cm_Gen8Dot3Name(dep, matchName, NULL);
          /* 8.3 matches are always case insensitive */
!         match = cm_MatchMask(matchName, rockp->maskp, caseFold | CM_FLAG_CASEFOLD);
      }
      if (match) {
!         osi_Log1(smb_logp, "Found match %S",
!                  osi_LogSaveClientString(smb_logp, matchName));
  
          cm_DirEntryListAdd(dep->name, &rockp->matches);
  
          rockp->any = 1;
  
          /* If we made a case sensitive exact match, we might as well quit now. */
!         if (!(rockp->flags & SMB_MASKFLAG_CASEFOLD) && !cm_ClientStrCmp(matchName, rockp->maskp))
              code = CM_ERROR_STOPNOW;
          else
              code = 0;
***************
*** 5274,5293 ****
      return code;
  }
  
  long smb_ReceiveCoreUnlink(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      int attribute;
      long code = 0;
!     char *pathp;
!     char *tp;
      cm_space_t *spacep;
      cm_scache_t *dscp;
!     char *lastNamep;
      smb_unlinkRock_t rock;
      cm_user_t *userp;
      osi_hyper_t thyper;
      int caseFold;
!     char *tidPathp;
      cm_req_t req;
  
      cm_InitReq(&req);
--- 5344,5364 ----
      return code;
  }
  
+ /* SMB_COM_DELETE */
  long smb_ReceiveCoreUnlink(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      int attribute;
      long code = 0;
!     clientchar_t *pathp;
!     unsigned char *tp;
      cm_space_t *spacep;
      cm_scache_t *dscp;
!     clientchar_t *lastNamep;
      smb_unlinkRock_t rock;
      cm_user_t *userp;
      osi_hyper_t thyper;
      int caseFold;
!     clientchar_t *tidPathp;
      cm_req_t req;
  
      cm_InitReq(&req);
***************
*** 5295,5309 ****
      attribute = smb_GetSMBParm(inp, 0);
          
      tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(tp, &tp);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(pathp,pathp);
  
!     osi_Log1(smb_logp, "SMB receive unlink %s",
!              osi_LogSaveString(smb_logp, pathp));
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->data, &lastNamep, pathp);
  
      userp = smb_GetUserFromVCP(vcp, inp);
  
--- 5366,5378 ----
      attribute = smb_GetSMBParm(inp, 0);
          
      tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(inp, tp, &tp, SMB_STRF_ANSIPATH);
  
!     osi_Log1(smb_logp, "SMB receive unlink %S",
!              osi_LogSaveClientString(smb_logp, pathp));
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->wdata, &lastNamep, pathp);
  
      userp = smb_GetUserFromVCP(vcp, inp);
  
***************
*** 5314,5320 ****
          cm_ReleaseUser(userp);
          return CM_ERROR_NOSUCHPATH;
      }
!     code = cm_NameI(cm_data.rootSCachep, spacep->data, caseFold, userp, tidPathp,
                      &req, &dscp);
      if (code) {
          cm_ReleaseUser(userp);
--- 5383,5389 ----
          cm_ReleaseUser(userp);
          return CM_ERROR_NOSUCHPATH;
      }
!     code = cm_NameI(cm_data.rootSCachep, spacep->wdata, caseFold, userp, tidPathp,
                      &req, &dscp);
      if (code) {
          cm_ReleaseUser(userp);
***************
*** 5323,5329 ****
          
  #ifdef DFS_SUPPORT
      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp,spacep->data);
          cm_ReleaseSCache(dscp);
          cm_ReleaseUser(userp);
          if ( WANTS_DFS_PATHNAMES(inp) || pnc )
--- 5392,5398 ----
          
  #ifdef DFS_SUPPORT
      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->wdata);
          cm_ReleaseSCache(dscp);
          cm_ReleaseUser(userp);
          if ( WANTS_DFS_PATHNAMES(inp) || pnc )
***************
*** 5340,5347 ****
          lastNamep++;
  
      rock.any = 0;
!     rock.maskp = smb_FindMask(pathp);
!     rock.flags = ((strchr(rock.maskp, '~') != NULL) ? SMB_MASKFLAG_TILDE : 0);
  
      thyper.LowPart = 0;
      thyper.HighPart = 0;
--- 5409,5416 ----
          lastNamep++;
  
      rock.any = 0;
!     rock.maskp = cm_ClientStringToNormStringAlloc(smb_FindMask(pathp), -1, NULL);
!     rock.flags = ((cm_ClientStrChr(rock.maskp, '~') != NULL) ? SMB_MASKFLAG_TILDE : 0);
  
      thyper.LowPart = 0;
      thyper.HighPart = 0;
***************
*** 5374,5388 ****
          cm_dirEntryList_t * entry;
  
          for (entry = rock.matches; code == 0 && entry; entry = entry->nextp) {
  
              osi_Log1(smb_logp, "Unlinking %s",
                       osi_LogSaveString(smb_logp, entry->name));
!             code = cm_Unlink(dscp, entry->name, userp, &req);
  
              if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
                  smb_NotifyChange(FILE_ACTION_REMOVED,
                                   FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_CREATION,
!                                  dscp, entry->name, NULL, TRUE);
          }
      }
  
--- 5443,5464 ----
          cm_dirEntryList_t * entry;
  
          for (entry = rock.matches; code == 0 && entry; entry = entry->nextp) {
+             normchar_t normalizedName[MAX_PATH];
+ 
+             /* Note: entry->name is a non-normalized name */
  
              osi_Log1(smb_logp, "Unlinking %s",
                       osi_LogSaveString(smb_logp, entry->name));
! 
!             cm_FsStringToNormString(entry->name, -1,
!                                     normalizedName, lengthof(normalizedName));
! 
!             code = cm_Unlink(dscp, entry->name, normalizedName, userp, &req);
  
              if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
                  smb_NotifyChange(FILE_ACTION_REMOVED,
                                   FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_CREATION,
!                                  dscp, normalizedName, NULL, TRUE);
          }
      }
  
***************
*** 5392,5412 ****
          
      cm_ReleaseSCache(dscp);
  
      if (code == 0 && !rock.any)
          code = CM_ERROR_NOSUCHFILE;
      return code;
  }       
  
  typedef struct smb_renameRock {
!     cm_scache_t *odscp;	/* old dir */
!     cm_scache_t *ndscp;	/* new dir */
!     cm_user_t *userp;	/* user */
!     cm_req_t *reqp;		/* request struct */
!     smb_vc_t *vcp;		/* virtual circuit */
!     char *maskp;		/* pointer to star pattern of old file name */
!     int flags;		    /* tilde, casefold, etc */
!     char *newNamep;		/* ptr to the new file's name */
!     char oldName[MAX_PATH];
      int any;
  } smb_renameRock_t;
  
--- 5468,5491 ----
          
      cm_ReleaseSCache(dscp);
  
+     free(rock.maskp);
+ 
      if (code == 0 && !rock.any)
          code = CM_ERROR_NOSUCHFILE;
      return code;
  }       
  
  typedef struct smb_renameRock {
!     cm_scache_t *odscp;  /* old dir */
!     cm_scache_t *ndscp;  /* new dir */
!     cm_user_t *userp;    /* user */
!     cm_req_t *reqp;      /* request struct */
!     smb_vc_t *vcp;       /* virtual circuit */
!     normchar_t *maskp;   /* pointer to star pattern of old file name */
!     int flags;           /* tilde, casefold, etc */
!     clientchar_t *newNamep;     /* ptr to the new file's name */
!     fschar_t fsOldName[MAX_PATH]; /* raw FS name */
!     clientchar_t clOldName[MAX_PATH]; /* client name */
      int any;
  } smb_renameRock_t;
  
***************
*** 5416,5442 ****
      smb_renameRock_t *rockp;
      int caseFold;
      int match;
!     char shortName[13]="";
  
      rockp = (smb_renameRock_t *) vrockp;
  
      caseFold = ((rockp->flags & SMB_MASKFLAG_CASEFOLD)? CM_FLAG_CASEFOLD : 0);
      if (!(rockp->vcp->flags & SMB_VCFLAG_USEV3))
          caseFold |= CM_FLAG_8DOT3;
  
!     match = smb_V3MatchMask(dep->name, rockp->maskp, caseFold);
      if (!match &&
          (rockp->flags & SMB_MASKFLAG_TILDE) &&
!          !cm_Is8Dot3(dep->name)) {
!         cm_Gen8Dot3Name(dep, shortName, NULL);
!         match = smb_V3MatchMask(shortName, rockp->maskp, caseFold);
      }
  
      if (match) {
  	rockp->any = 1;
!         strncpy(rockp->oldName, dep->name, sizeof(rockp->oldName)/sizeof(char) - 1);
!         rockp->oldName[sizeof(rockp->oldName)/sizeof(char) - 1] = '\0';
!             code = CM_ERROR_STOPNOW;
      } else {
  	code = 0;
      }
--- 5495,5523 ----
      smb_renameRock_t *rockp;
      int caseFold;
      int match;
!     normchar_t matchName[MAX_PATH];
  
      rockp = (smb_renameRock_t *) vrockp;
  
+     cm_FsStringToNormString(dep->name, -1, matchName, lengthof(matchName));
      caseFold = ((rockp->flags & SMB_MASKFLAG_CASEFOLD)? CM_FLAG_CASEFOLD : 0);
      if (!(rockp->vcp->flags & SMB_VCFLAG_USEV3))
          caseFold |= CM_FLAG_8DOT3;
  
!     match = cm_MatchMask(matchName, rockp->maskp, caseFold);
      if (!match &&
          (rockp->flags & SMB_MASKFLAG_TILDE) &&
!         !cm_Is8Dot3(matchName)) {
!         cm_Gen8Dot3Name(dep, matchName, NULL);
!         match = cm_MatchMask(matchName, rockp->maskp, caseFold);
      }
  
      if (match) {
  	rockp->any = 1;
!         StringCbCopyA(rockp->fsOldName, sizeof(rockp->fsOldName), dep->name);
!         cm_ClientStrCpy(rockp->clOldName, lengthof(rockp->clOldName),
!                         matchName);
!         code = CM_ERROR_STOPNOW;
      } else {
  	code = 0;
      }
***************
*** 5446,5452 ****
  
  
  long 
! smb_Rename(smb_vc_t *vcp, smb_packet_t *inp, char * oldPathp, char * newPathp, int attrs)
  {
      long code = 0;
      cm_space_t *spacep = NULL;
--- 5527,5533 ----
  
  
  long 
! smb_Rename(smb_vc_t *vcp, smb_packet_t *inp, clientchar_t * oldPathp, clientchar_t * newPathp, int attrs)
  {
      long code = 0;
      cm_space_t *spacep = NULL;
***************
*** 5455,5466 ****
      cm_scache_t *newDscp = NULL;
      cm_scache_t *tmpscp= NULL;
      cm_scache_t *tmpscp2 = NULL;
!     char *oldLastNamep;
!     char *newLastNamep;
      osi_hyper_t thyper;
      cm_user_t *userp;
      int caseFold;
!     char *tidPathp;
      DWORD filter;
      cm_req_t req;
  
--- 5536,5547 ----
      cm_scache_t *newDscp = NULL;
      cm_scache_t *tmpscp= NULL;
      cm_scache_t *tmpscp2 = NULL;
!     clientchar_t *oldLastNamep;
!     clientchar_t *newLastNamep;
      osi_hyper_t thyper;
      cm_user_t *userp;
      int caseFold;
!     clientchar_t *tidPathp;
      DWORD filter;
      cm_req_t req;
  
***************
*** 5473,5482 ****
  
      cm_InitReq(&req);
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->data, &oldLastNamep, oldPathp);
  
      caseFold = CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD;
!     code = cm_NameI(cm_data.rootSCachep, spacep->data, caseFold,
                      userp, tidPathp, &req, &oldDscp);
      if (code) {
          cm_ReleaseUser(userp);
--- 5554,5563 ----
  
      cm_InitReq(&req);
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->wdata, &oldLastNamep, oldPathp);
  
      caseFold = CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD;
!     code = cm_NameI(cm_data.rootSCachep, spacep->wdata, caseFold,
                      userp, tidPathp, &req, &oldDscp);
      if (code) {
          cm_ReleaseUser(userp);
***************
*** 5485,5491 ****
          
  #ifdef DFS_SUPPORT
      if (oldDscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(oldDscp, tidPathp, spacep->data);
          cm_ReleaseSCache(oldDscp);
          cm_ReleaseUser(userp);
          if ( WANTS_DFS_PATHNAMES(inp) || pnc )
--- 5566,5572 ----
          
  #ifdef DFS_SUPPORT
      if (oldDscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(oldDscp, tidPathp, spacep->wdata);
          cm_ReleaseSCache(oldDscp);
          cm_ReleaseUser(userp);
          if ( WANTS_DFS_PATHNAMES(inp) || pnc )
***************
*** 5495,5502 ****
      }
  #endif /* DFS_SUPPORT */
  
!     smb_StripLastComponent(spacep->data, &newLastNamep, newPathp);
!     code = cm_NameI(cm_data.rootSCachep, spacep->data, caseFold,
                      userp, tidPathp, &req, &newDscp);
  
      if (code) {
--- 5576,5583 ----
      }
  #endif /* DFS_SUPPORT */
  
!     smb_StripLastComponent(spacep->wdata, &newLastNamep, newPathp);
!     code = cm_NameI(cm_data.rootSCachep, spacep->wdata, caseFold,
                      userp, tidPathp, &req, &newDscp);
  
      if (code) {
***************
*** 5507,5513 ****
  
  #ifdef DFS_SUPPORT
      if (newDscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(newDscp, tidPathp, spacep->data);
          cm_ReleaseSCache(oldDscp);
          cm_ReleaseSCache(newDscp);
          cm_ReleaseUser(userp);
--- 5588,5594 ----
  
  #ifdef DFS_SUPPORT
      if (newDscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(newDscp, tidPathp, spacep->wdata);
          cm_ReleaseSCache(oldDscp);
          cm_ReleaseSCache(newDscp);
          cm_ReleaseUser(userp);
***************
*** 5543,5552 ****
      rock.userp = userp;
      rock.reqp = &req;
      rock.vcp = vcp;
!     rock.maskp = oldLastNamep;
!     rock.flags = ((strchr(oldLastNamep, '~') != NULL) ? SMB_MASKFLAG_TILDE : 0);
      rock.newNamep = newLastNamep;
!     rock.oldName[0] = '\0';
      rock.any = 0;
  
      /* Check if the file already exists; if so return error */
--- 5624,5634 ----
      rock.userp = userp;
      rock.reqp = &req;
      rock.vcp = vcp;
!     rock.maskp = cm_ClientStringToNormStringAlloc(oldLastNamep, -1, NULL);
!     rock.flags = ((cm_ClientStrChr(oldLastNamep, '~') != NULL) ? SMB_MASKFLAG_TILDE : 0);
      rock.newNamep = newLastNamep;
!     rock.fsOldName[0] = '\0';
!     rock.clOldName[0] = '\0';
      rock.any = 0;
  
      /* Check if the file already exists; if so return error */
***************
*** 5554,5566 ****
      if ((code != CM_ERROR_NOSUCHFILE) && (code != CM_ERROR_BPLUS_NOMATCH) && 
          (code != CM_ERROR_NOSUCHPATH) && (code != CM_ERROR_NOSUCHVOLUME) ) 
      {
!         osi_Log2(smb_logp, "  lookup returns %ld for [%s]", code,
!                  osi_LogSaveString(smb_logp, newLastNamep));
  
          /* Check if the old and the new names differ only in case. If so return
           * success, else return CM_ERROR_EXISTS 
           */
!         if (!code && oldDscp == newDscp && !stricmp(oldLastNamep, newLastNamep)) {
  
              /* This would be a success only if the old file is *as same as* the new file */
              code = cm_Lookup(oldDscp, oldLastNamep, CM_FLAG_CHECKPATH, userp, &req, &tmpscp2);
--- 5636,5648 ----
      if ((code != CM_ERROR_NOSUCHFILE) && (code != CM_ERROR_BPLUS_NOMATCH) && 
          (code != CM_ERROR_NOSUCHPATH) && (code != CM_ERROR_NOSUCHVOLUME) ) 
      {
!         osi_Log2(smb_logp, "  lookup returns %ld for [%S]", code,
!                  osi_LogSaveClientString(smb_logp, newLastNamep));
  
          /* Check if the old and the new names differ only in case. If so return
           * success, else return CM_ERROR_EXISTS 
           */
!         if (!code && oldDscp == newDscp && !cm_ClientStrCmpI(oldLastNamep, newLastNamep)) {
  
              /* This would be a success only if the old file is *as same as* the new file */
              code = cm_Lookup(oldDscp, oldLastNamep, CM_FLAG_CHECKPATH, userp, &req, &tmpscp2);
***************
*** 5585,5590 ****
--- 5667,5675 ----
          cm_ReleaseSCache(newDscp);
          cm_ReleaseSCache(oldDscp);
          cm_ReleaseUser(userp);
+ 
+         free(rock.maskp);
+         rock.maskp = NULL;
          return code; 
      }
  
***************
*** 5601,5610 ****
      }
      osi_Log1(smb_logp, "smb_RenameProc returns %ld", code);
  
!     if (code == CM_ERROR_STOPNOW && rock.oldName[0] != '\0') {
! 	code = cm_Rename(rock.odscp, rock.oldName,
                           rock.ndscp, rock.newNamep, rock.userp,
!                          rock.reqp);	
          /* if the call worked, stop doing the search now, since we
           * really only want to rename one file.
           */
--- 5686,5695 ----
      }
      osi_Log1(smb_logp, "smb_RenameProc returns %ld", code);
  
!     if (code == CM_ERROR_STOPNOW && rock.fsOldName[0] != '\0') {
! 	code = cm_Rename(rock.odscp, rock.fsOldName, rock.clOldName,
                           rock.ndscp, rock.newNamep, rock.userp,
!                          rock.reqp);
          /* if the call worked, stop doing the search now, since we
           * really only want to rename one file.
           */
***************
*** 5619,5640 ****
      * filter, since we'd have to do a lookup.
      */
      if (code == 0) {
!     filter = FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME;
!     if (oldDscp == newDscp) {
!         if (oldDscp->flags & CM_SCACHEFLAG_ANYWATCH)
!             smb_NotifyChange(FILE_ACTION_RENAMED_OLD_NAME,
!                              filter, oldDscp, oldLastNamep,
!                              newLastNamep, TRUE);
!     } else {
!         if (oldDscp->flags & CM_SCACHEFLAG_ANYWATCH)
!             smb_NotifyChange(FILE_ACTION_RENAMED_OLD_NAME,
!                              filter, oldDscp, oldLastNamep,
!                              NULL, TRUE);
!         if (newDscp->flags & CM_SCACHEFLAG_ANYWATCH)
!             smb_NotifyChange(FILE_ACTION_RENAMED_NEW_NAME,
!                              filter, newDscp, newLastNamep,
!                              NULL, TRUE);
!     }
      }
  
      if (tmpscp != NULL) 
--- 5704,5725 ----
      * filter, since we'd have to do a lookup.
      */
      if (code == 0) {
!         filter = FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME;
!         if (oldDscp == newDscp) {
!             if (oldDscp->flags & CM_SCACHEFLAG_ANYWATCH)
!                 smb_NotifyChange(FILE_ACTION_RENAMED_OLD_NAME,
!                                  filter, oldDscp, rock.clOldName,
!                                  newLastNamep, TRUE);
!         } else {
!             if (oldDscp->flags & CM_SCACHEFLAG_ANYWATCH)
!                 smb_NotifyChange(FILE_ACTION_RENAMED_OLD_NAME,
!                                  filter, oldDscp, rock.clOldName,
!                                  NULL, TRUE);
!             if (newDscp->flags & CM_SCACHEFLAG_ANYWATCH)
!                 smb_NotifyChange(FILE_ACTION_RENAMED_NEW_NAME,
!                                  filter, newDscp, newLastNamep,
!                                  NULL, TRUE);
!         }
      }
  
      if (tmpscp != NULL) 
***************
*** 5642,5652 ****
      cm_ReleaseUser(userp);
      cm_ReleaseSCache(oldDscp);
      cm_ReleaseSCache(newDscp);
      return code;
  }       
  
  long 
! smb_Link(smb_vc_t *vcp, smb_packet_t *inp, char * oldPathp, char * newPathp) 
  {
      long code = 0;
      cm_space_t *spacep = NULL;
--- 5727,5741 ----
      cm_ReleaseUser(userp);
      cm_ReleaseSCache(oldDscp);
      cm_ReleaseSCache(newDscp);
+ 
+     free(rock.maskp);
+     rock.maskp = NULL;
+ 
      return code;
  }       
  
  long 
! smb_Link(smb_vc_t *vcp, smb_packet_t *inp, clientchar_t * oldPathp, clientchar_t * newPathp) 
  {
      long code = 0;
      cm_space_t *spacep = NULL;
***************
*** 5655,5665 ****
      cm_scache_t *tmpscp= NULL;
      cm_scache_t *tmpscp2 = NULL;
      cm_scache_t *sscp = NULL;
!     char *oldLastNamep;
!     char *newLastNamep;
      cm_user_t *userp;
      int caseFold;
!     char *tidPathp;
      DWORD filter;
      cm_req_t req;
  
--- 5744,5754 ----
      cm_scache_t *tmpscp= NULL;
      cm_scache_t *tmpscp2 = NULL;
      cm_scache_t *sscp = NULL;
!     clientchar_t *oldLastNamep;
!     clientchar_t *newLastNamep;
      cm_user_t *userp;
      int caseFold;
!     clientchar_t *tidPathp;
      DWORD filter;
      cm_req_t req;
  
***************
*** 5676,5684 ****
      caseFold = CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD;
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->data, &oldLastNamep, oldPathp);
      
!     code = cm_NameI(cm_data.rootSCachep, spacep->data, caseFold,
                      userp, tidPathp, &req, &oldDscp);
      if (code) {
          cm_ReleaseUser(userp);
--- 5765,5773 ----
      caseFold = CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD;
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->wdata, &oldLastNamep, oldPathp);
      
!     code = cm_NameI(cm_data.rootSCachep, spacep->wdata, caseFold,
                      userp, tidPathp, &req, &oldDscp);
      if (code) {
          cm_ReleaseUser(userp);
***************
*** 5687,5693 ****
          
  #ifdef DFS_SUPPORT
      if (oldDscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(oldDscp, tidPathp, spacep->data);
          cm_ReleaseSCache(oldDscp);
          cm_ReleaseUser(userp);
          if ( WANTS_DFS_PATHNAMES(inp) || pnc )
--- 5776,5782 ----
          
  #ifdef DFS_SUPPORT
      if (oldDscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(oldDscp, tidPathp, spacep->wdata);
          cm_ReleaseSCache(oldDscp);
          cm_ReleaseUser(userp);
          if ( WANTS_DFS_PATHNAMES(inp) || pnc )
***************
*** 5697,5704 ****
      }
  #endif /* DFS_SUPPORT */
  
!     smb_StripLastComponent(spacep->data, &newLastNamep, newPathp);
!     code = cm_NameI(cm_data.rootSCachep, spacep->data, caseFold,
                      userp, tidPathp, &req, &newDscp);
      if (code) {
          cm_ReleaseSCache(oldDscp);
--- 5786,5793 ----
      }
  #endif /* DFS_SUPPORT */
  
!     smb_StripLastComponent(spacep->wdata, &newLastNamep, newPathp);
!     code = cm_NameI(cm_data.rootSCachep, spacep->wdata, caseFold,
                      userp, tidPathp, &req, &newDscp);
      if (code) {
          cm_ReleaseSCache(oldDscp);
***************
*** 5708,5714 ****
  
  #ifdef DFS_SUPPORT
      if (newDscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(newDscp, tidPathp, spacep->data);
          cm_ReleaseSCache(newDscp);
          cm_ReleaseSCache(oldDscp);
          cm_ReleaseUser(userp);
--- 5797,5803 ----
  
  #ifdef DFS_SUPPORT
      if (newDscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(newDscp, tidPathp, spacep->wdata);
          cm_ReleaseSCache(newDscp);
          cm_ReleaseSCache(oldDscp);
          cm_ReleaseUser(userp);
***************
*** 5742,5748 ****
          newLastNamep++;
  
      /* now lookup the old name */
!     osi_Log1(smb_logp,"  looking up [%s]", osi_LogSaveString(smb_logp,oldLastNamep));
      code = cm_Lookup(oldDscp, oldLastNamep, CM_FLAG_CHECKPATH | CM_FLAG_CASEFOLD, userp, &req, &sscp);
      if (code) {
          cm_ReleaseSCache(oldDscp);
--- 5831,5837 ----
          newLastNamep++;
  
      /* now lookup the old name */
!     osi_Log1(smb_logp,"  looking up [%S]", osi_LogSaveClientString(smb_logp,oldLastNamep));
      code = cm_Lookup(oldDscp, oldLastNamep, CM_FLAG_CHECKPATH | CM_FLAG_CASEFOLD, userp, &req, &sscp);
      if (code) {
          cm_ReleaseSCache(oldDscp);
***************
*** 5756,5763 ****
      if ((code != CM_ERROR_NOSUCHFILE) && (code != CM_ERROR_BPLUS_NOMATCH) &&
          (code != CM_ERROR_NOSUCHPATH) && (code != CM_ERROR_NOSUCHVOLUME) ) 
      {
!         osi_Log2(smb_logp, "  lookup returns %ld for [%s]", code,
!                  osi_LogSaveString(smb_logp, newLastNamep));
  
          /* if the existing link is to the same file, then we return success */
          if (!code) {
--- 5845,5852 ----
      if ((code != CM_ERROR_NOSUCHFILE) && (code != CM_ERROR_BPLUS_NOMATCH) &&
          (code != CM_ERROR_NOSUCHPATH) && (code != CM_ERROR_NOSUCHVOLUME) ) 
      {
!         osi_Log2(smb_logp, "  lookup returns %ld for [%S]", code,
!                  osi_LogSaveClientString(smb_logp, newLastNamep));
  
          /* if the existing link is to the same file, then we return success */
          if (!code) {
***************
*** 5779,5785 ****
      }
  
      /* now create the hardlink */
!     osi_Log1(smb_logp,"  Attempting to create new link [%s]", osi_LogSaveString(smb_logp, newLastNamep));
      code = cm_Link(newDscp, newLastNamep, sscp, 0, userp, &req);
      osi_Log1(smb_logp,"  Link returns 0x%x", code);
  
--- 5868,5874 ----
      }
  
      /* now create the hardlink */
!     osi_Log1(smb_logp,"  Attempting to create new link [%S]", osi_LogSaveClientString(smb_logp, newLastNamep));
      code = cm_Link(newDscp, newLastNamep, sscp, 0, userp, &req);
      osi_Log1(smb_logp,"  Link returns 0x%x", code);
  
***************
*** 5801,5825 ****
      return code;
  }
  
  long 
  smb_ReceiveCoreRename(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     char *oldPathp;
!     char *newPathp;
!     char *tp;
      long code;
  
      tp = smb_GetSMBData(inp, NULL);
!     oldPathp = smb_ParseASCIIBlock(tp, &tp);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(oldPathp,oldPathp);
!     newPathp = smb_ParseASCIIBlock(tp, &tp);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(newPathp,newPathp);
! 
!     osi_Log2(smb_logp, "smb rename [%s] to [%s]",
!              osi_LogSaveString(smb_logp, oldPathp),
!              osi_LogSaveString(smb_logp, newPathp));
  
      code = smb_Rename(vcp,inp,oldPathp,newPathp,0);
  
--- 5890,5911 ----
      return code;
  }
  
+ /* SMB_COM_RENAME */
  long 
  smb_ReceiveCoreRename(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     clientchar_t *oldPathp;
!     clientchar_t *newPathp;
!     unsigned char *tp;
      long code;
  
      tp = smb_GetSMBData(inp, NULL);
!     oldPathp = smb_ParseASCIIBlock(inp, tp, &tp, SMB_STRF_ANSIPATH);
!     newPathp = smb_ParseASCIIBlock(inp, tp, &tp, SMB_STRF_ANSIPATH);
! 
!     osi_Log2(smb_logp, "smb rename [%S] to [%S]",
!              osi_LogSaveClientString(smb_logp, oldPathp),
!              osi_LogSaveClientString(smb_logp, newPathp));
  
      code = smb_Rename(vcp,inp,oldPathp,newPathp,0);
  
***************
*** 5833,5839 ****
      cm_scache_t *dscp;
      cm_user_t *userp;
      cm_req_t *reqp;
!     char *maskp;		/* pointer to the star pattern */
      int flags;
      int any;
      cm_dirEntryList_t * matches;
--- 5919,5925 ----
      cm_scache_t *dscp;
      cm_user_t *userp;
      cm_req_t *reqp;
!     normchar_t *maskp;		/* pointer to the star pattern */
      int flags;
      int any;
      cm_dirEntryList_t * matches;
***************
*** 5844,5899 ****
      long code = 0;
      smb_rmdirRock_t *rockp;
      int match;
!     char shortName[13];
!     char *matchName;
          
      rockp = (smb_rmdirRock_t *) vrockp;
  
!     matchName = dep->name;
      if (rockp->flags & SMB_MASKFLAG_CASEFOLD)
!         match = (cm_stricmp(matchName, rockp->maskp) == 0);
      else
!         match = (strcmp(matchName, rockp->maskp) == 0);
      if (!match &&
           (rockp->flags & SMB_MASKFLAG_TILDE) &&
!          !cm_Is8Dot3(dep->name)) {
!         cm_Gen8Dot3Name(dep, shortName, NULL);
!         matchName = shortName;
!         match = (cm_stricmp(matchName, rockp->maskp) == 0);
      }       
  
      if (match) {
!             rockp->any = 1;
          cm_DirEntryListAdd(dep->name, &rockp->matches);
      }
  
      return 0;
  }
  
  long smb_ReceiveCoreRemoveDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      long code = 0;
!     char *pathp;
!     char *tp;
      cm_space_t *spacep;
      cm_scache_t *dscp;
!     char *lastNamep;
      smb_rmdirRock_t rock;
      cm_user_t *userp;
      osi_hyper_t thyper;
      int caseFold;
!     char *tidPathp;
      cm_req_t req;
  
      cm_InitReq(&req);
  
      tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(tp, &tp);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(pathp,pathp);
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->data, &lastNamep, pathp);
  
      userp = smb_GetUserFromVCP(vcp, inp);
  
--- 5930,5982 ----
      long code = 0;
      smb_rmdirRock_t *rockp;
      int match;
!     normchar_t matchName[MAX_PATH];
          
      rockp = (smb_rmdirRock_t *) vrockp;
  
!     cm_FsStringToNormString(dep->name, -1, matchName, lengthof(matchName));
      if (rockp->flags & SMB_MASKFLAG_CASEFOLD)
!         match = (cm_ClientStrCmpI(matchName, rockp->maskp) == 0);
      else
!         match = (cm_ClientStrCmp(matchName, rockp->maskp) == 0);
      if (!match &&
           (rockp->flags & SMB_MASKFLAG_TILDE) &&
!          !cm_Is8Dot3(matchName)) {
!         cm_Gen8Dot3Name(dep, matchName, NULL);
!         match = (cm_ClientStrCmpI(matchName, rockp->maskp) == 0);
      }       
  
      if (match) {
!         rockp->any = 1;
          cm_DirEntryListAdd(dep->name, &rockp->matches);
      }
  
      return 0;
  }
  
+ 
  long smb_ReceiveCoreRemoveDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      long code = 0;
!     clientchar_t *pathp;
!     unsigned char *tp;
      cm_space_t *spacep;
      cm_scache_t *dscp;
!     clientchar_t *lastNamep;
      smb_rmdirRock_t rock;
      cm_user_t *userp;
      osi_hyper_t thyper;
      int caseFold;
!     clientchar_t *tidPathp;
      cm_req_t req;
  
      cm_InitReq(&req);
  
      tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(inp, tp, &tp, SMB_STRF_ANSIPATH);
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->wdata, &lastNamep, pathp);
  
      userp = smb_GetUserFromVCP(vcp, inp);
  
***************
*** 5904,5910 ****
          cm_ReleaseUser(userp);
          return CM_ERROR_NOSUCHPATH;
      }
!     code = cm_NameI(cm_data.rootSCachep, spacep->data, caseFold | CM_FLAG_FOLLOW,
                      userp, tidPathp, &req, &dscp);
  
      if (code) {
--- 5987,5993 ----
          cm_ReleaseUser(userp);
          return CM_ERROR_NOSUCHPATH;
      }
!     code = cm_NameI(cm_data.rootSCachep, spacep->wdata, caseFold | CM_FLAG_FOLLOW,
                      userp, tidPathp, &req, &dscp);
  
      if (code) {
***************
*** 5914,5920 ****
          
  #ifdef DFS_SUPPORT
      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->data);
          cm_ReleaseSCache(dscp);
          cm_ReleaseUser(userp);
          if ( WANTS_DFS_PATHNAMES(inp) || pnc )
--- 5997,6003 ----
          
  #ifdef DFS_SUPPORT
      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->wdata);
          cm_ReleaseSCache(dscp);
          cm_ReleaseUser(userp);
          if ( WANTS_DFS_PATHNAMES(inp) || pnc )
***************
*** 5931,5938 ****
          lastNamep++;
  	
      rock.any = 0;
!     rock.maskp = lastNamep;
!     rock.flags = ((strchr(rock.maskp, '~') != NULL) ? SMB_MASKFLAG_TILDE : 0);
  
      thyper.LowPart = 0;
      thyper.HighPart = 0;
--- 6014,6021 ----
          lastNamep++;
  	
      rock.any = 0;
!     rock.maskp = cm_ClientStringToNormStringAlloc(lastNamep, -1, NULL);
!     rock.flags = ((cm_ClientStrChr(rock.maskp, '~') != NULL) ? SMB_MASKFLAG_TILDE : 0);
  
      thyper.LowPart = 0;
      thyper.HighPart = 0;
***************
*** 5954,5968 ****
          cm_dirEntryList_t * entry;
  
          for (entry = rock.matches; code == 0 && entry; entry = entry->nextp) {
              osi_Log1(smb_logp, "Removing directory %s",
                       osi_LogSaveString(smb_logp, entry->name));
  
!             code = cm_RemoveDir(dscp, entry->name, userp, &req);
  
              if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
                  smb_NotifyChange(FILE_ACTION_REMOVED,
                                   FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_CREATION,
!                                  dscp, entry->name, NULL, TRUE);
          }
      }
  
--- 6037,6055 ----
          cm_dirEntryList_t * entry;
  
          for (entry = rock.matches; code == 0 && entry; entry = entry->nextp) {
+             clientchar_t clientName[MAX_PATH];
+ 
+             cm_FsStringToClientString(entry->name, -1, clientName, lengthof(clientName));
+ 
              osi_Log1(smb_logp, "Removing directory %s",
                       osi_LogSaveString(smb_logp, entry->name));
  
!             code = cm_RemoveDir(dscp, entry->name, clientName, userp, &req);
  
              if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
                  smb_NotifyChange(FILE_ACTION_REMOVED,
                                   FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_CREATION,
!                                  dscp, clientName, NULL, TRUE);
          }
      }
  
***************
*** 5974,5982 ****
--- 6061,6074 ----
  
      if (code == 0 && !rock.any)
          code = CM_ERROR_NOSUCHFILE;        
+ 
+     free(rock.maskp);
+     rock.maskp = NULL;
+ 
      return code;
  }
  
+ /* SMB_COM_FLUSH */
  long smb_ReceiveCoreFlush(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      unsigned short fid;
***************
*** 6032,6081 ****
  }
  
  struct smb_FullNameRock {
!     char *name;
!     cm_scache_t *vnode;
!     char *fullName;
  };
  
  int smb_FullNameProc(cm_scache_t *scp, cm_dirEntry_t *dep, void *rockp,
                       osi_hyper_t *offp)
  {
!     char shortName[13];
      struct smb_FullNameRock *vrockp;
  
      vrockp = (struct smb_FullNameRock *)rockp;
  
!     if (!cm_Is8Dot3(dep->name)) {
          cm_Gen8Dot3Name(dep, shortName, NULL);
  
!         if (cm_stricmp(shortName, vrockp->name) == 0) {
!             vrockp->fullName = strdup(dep->name);
              return CM_ERROR_STOPNOW;
          }
      }
!     if (cm_stricmp(dep->name, vrockp->name) == 0 &&
          ntohl(dep->fid.vnode) == vrockp->vnode->fid.vnode &&
          ntohl(dep->fid.unique) == vrockp->vnode->fid.unique) {
!         vrockp->fullName = strdup(dep->name);
          return CM_ERROR_STOPNOW;
      }
      return 0;
  }
  
! void smb_FullName(cm_scache_t *dscp, cm_scache_t *scp, char *pathp,
!                   char **newPathp, cm_user_t *userp, cm_req_t *reqp)
  {
      struct smb_FullNameRock rock;
      long code = 0;
  
      rock.name = pathp;
      rock.vnode = scp;
  
      code = cm_ApplyDir(dscp, smb_FullNameProc, &rock, NULL, userp, reqp, NULL); 
!     if (code == CM_ERROR_STOPNOW)
          *newPathp = rock.fullName;
!     else
!         *newPathp = strdup(pathp);
  }
  
  long smb_CloseFID(smb_vc_t *vcp, smb_fid_t *fidp, cm_user_t *userp,
--- 6124,6185 ----
  }
  
  struct smb_FullNameRock {
!     clientchar_t *name;
!     cm_scache_t  *vnode;
!     clientchar_t *fullName;
!     fschar_t     *originalName;
  };
  
  int smb_FullNameProc(cm_scache_t *scp, cm_dirEntry_t *dep, void *rockp,
                       osi_hyper_t *offp)
  {
!     normchar_t matchName[MAX_PATH];
      struct smb_FullNameRock *vrockp;
  
      vrockp = (struct smb_FullNameRock *)rockp;
  
!     cm_FsStringToNormString(dep->name, -1, matchName, lengthof(matchName));
! 
!     if (!cm_Is8Dot3(matchName)) {
!         clientchar_t shortName[13];
! 
          cm_Gen8Dot3Name(dep, shortName, NULL);
  
!         if (cm_ClientStrCmpIA(shortName, vrockp->name) == 0) {
!             vrockp->fullName = cm_ClientStrDup(matchName);
!             vrockp->originalName = cm_FsStrDup(dep->name);
              return CM_ERROR_STOPNOW;
          }
      }
!     if (cm_ClientStrCmpI(matchName, vrockp->name) == 0 &&
          ntohl(dep->fid.vnode) == vrockp->vnode->fid.vnode &&
          ntohl(dep->fid.unique) == vrockp->vnode->fid.unique) {
!         vrockp->fullName = cm_ClientStrDup(matchName);
!         vrockp->originalName = cm_FsStrDup(dep->name);
          return CM_ERROR_STOPNOW;
      }
      return 0;
  }
  
! void smb_FullName(cm_scache_t *dscp, cm_scache_t *scp, clientchar_t *pathp,
!                   clientchar_t **newPathp, fschar_t ** originalPathp,
!                   cm_user_t *userp, cm_req_t *reqp)
  {
      struct smb_FullNameRock rock;
      long code = 0;
  
+     memset(&rock, 0, sizeof(rock));
      rock.name = pathp;
      rock.vnode = scp;
  
      code = cm_ApplyDir(dscp, smb_FullNameProc, &rock, NULL, userp, reqp, NULL); 
!     if (code == CM_ERROR_STOPNOW) {
          *newPathp = rock.fullName;
!         *originalPathp = rock.originalName;
!     } else {
!         *newPathp = cm_ClientStrDup(pathp);
!         *originalPathp = cm_ClientStringToFsStringAlloc(pathp, -1, NULL);
!     }
  }
  
  long smb_CloseFID(smb_vc_t *vcp, smb_fid_t *fidp, cm_user_t *userp,
***************
*** 6083,6089 ****
      long code = 0;
      cm_req_t req;
      cm_scache_t *dscp = NULL;
!     char *pathp = NULL;
      cm_scache_t * scp = NULL;
      cm_scache_t *delscp = NULL;
      int nullcreator = 0;
--- 6187,6193 ----
      long code = 0;
      cm_req_t req;
      cm_scache_t *dscp = NULL;
!     clientchar_t *pathp = NULL;
      cm_scache_t * scp = NULL;
      cm_scache_t *delscp = NULL;
      int nullcreator = 0;
***************
*** 6107,6118 ****
      cm_InitReq(&req);
  
      lock_ObtainWrite(&smb_rctLock);
!     if (fidp->delete) {
  	osi_Log0(smb_logp, "  Fid already closed.");
  	lock_ReleaseWrite(&smb_rctLock);
  	return CM_ERROR_BADFD;
      }
!     fidp->delete = 1;
      lock_ReleaseWrite(&smb_rctLock);
  
      lock_ObtainMutex(&fidp->mx);
--- 6211,6222 ----
      cm_InitReq(&req);
  
      lock_ObtainWrite(&smb_rctLock);
!     if (fidp->deleteOk) {
  	osi_Log0(smb_logp, "  Fid already closed.");
  	lock_ReleaseWrite(&smb_rctLock);
  	return CM_ERROR_BADFD;
      }
!     fidp->deleteOk = 1;
      lock_ReleaseWrite(&smb_rctLock);
  
      lock_ObtainMutex(&fidp->mx);
***************
*** 6122,6128 ****
      }
  
      if (fidp->NTopen_pathp) {
! 	pathp = strdup(fidp->NTopen_pathp);
      }
  
      if (fidp->scp) {
--- 6226,6232 ----
      }
  
      if (fidp->NTopen_pathp) {
! 	pathp = cm_ClientStrDup(fidp->NTopen_pathp);
      }
  
      if (fidp->scp) {
***************
*** 6191,6197 ****
      }
  
      if (fidp->flags & SMB_FID_DELONCLOSE) {
!         char *fullPathp;
  
  	lock_ReleaseMutex(&fidp->mx);
  
--- 6295,6302 ----
      }
  
      if (fidp->flags & SMB_FID_DELONCLOSE) {
!         clientchar_t *fullPathp = NULL;
!         fschar_t *originalNamep = NULL;
  
  	lock_ReleaseMutex(&fidp->mx);
  
***************
*** 6200,6208 ****
              cm_HoldSCache(scp);
              delscp = scp;
          }
!         smb_FullName(dscp, delscp, pathp, &fullPathp, userp, &req);
          if (delscp->fileType == CM_SCACHETYPE_DIRECTORY) {
!             code = cm_RemoveDir(dscp, fullPathp, userp, &req);
  	    if (code == 0) {
  		if (dscp->flags & CM_SCACHEFLAG_ANYWATCH)
  		    smb_NotifyChange(FILE_ACTION_REMOVED,
--- 6305,6313 ----
              cm_HoldSCache(scp);
              delscp = scp;
          }
!         smb_FullName(dscp, delscp, pathp, &fullPathp, &originalNamep, userp, &req);
          if (delscp->fileType == CM_SCACHETYPE_DIRECTORY) {
!             code = cm_RemoveDir(dscp, originalNamep, fullPathp, userp, &req);
  	    if (code == 0) {
  		if (dscp->flags & CM_SCACHEFLAG_ANYWATCH)
  		    smb_NotifyChange(FILE_ACTION_REMOVED,
***************
*** 6210,6216 ****
  				      dscp, fullPathp, NULL, TRUE);
  	    }
          } else {
!             code = cm_Unlink(dscp, fullPathp, userp, &req);
  	    if (code == 0) {				
  		if (dscp->flags & CM_SCACHEFLAG_ANYWATCH)
  		    smb_NotifyChange(FILE_ACTION_REMOVED,
--- 6315,6321 ----
  				      dscp, fullPathp, NULL, TRUE);
  	    }
          } else {
!             code = cm_Unlink(dscp, originalNamep, fullPathp, userp, &req);
  	    if (code == 0) {				
  		if (dscp->flags & CM_SCACHEFLAG_ANYWATCH)
  		    smb_NotifyChange(FILE_ACTION_REMOVED,
***************
*** 6218,6224 ****
  				      dscp, fullPathp, NULL, TRUE);
  	    }
          }
!         free(fullPathp);
  	lock_ObtainMutex(&fidp->mx);
  	fidp->flags &= ~SMB_FID_DELONCLOSE;
      }
--- 6323,6334 ----
  				      dscp, fullPathp, NULL, TRUE);
  	    }
          }
! 
!         if (fullPathp)
!             free(fullPathp);
!         if (originalNamep)
!             free(originalNamep);
! 
  	lock_ObtainMutex(&fidp->mx);
  	fidp->flags &= ~SMB_FID_DELONCLOSE;
      }
***************
*** 6274,6279 ****
--- 6384,6390 ----
      return code;
  }
  
+ /* SMB_COM_CLOSE */
  long smb_ReceiveCoreClose(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      unsigned short fid;
***************
*** 6305,6317 ****
  /*
   * smb_ReadData -- common code for Read, Read And X, and Raw Read
   */
- #ifndef DJGPP
  long smb_ReadData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count, char *op,
  	cm_user_t *userp, long *readp)
- #else /* DJGPP */
- long smb_ReadData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count, char *op,
- 	cm_user_t *userp, long *readp, int dosflag)
- #endif /* !DJGPP */
  {
      osi_hyper_t offset;
      long code = 0;
--- 6416,6423 ----
***************
*** 6450,6461 ****
          if (nbytes > count) nbytes = count;	/* don't go past EOF */
  
          /* now copy the data */
! #ifdef DJGPP
!         if (dosflag)
!             dosmemput(bufferp->datap + bufIndex, nbytes, (dos_ptr)op);
!         else
! #endif /* DJGPP */
!             memcpy(op, bufferp->datap + bufIndex, nbytes);
                  
          /* adjust counters, pointers, etc. */
          op += nbytes;
--- 6556,6562 ----
          if (nbytes > count) nbytes = count;	/* don't go past EOF */
  
          /* now copy the data */
!         memcpy(op, bufferp->datap + bufIndex, nbytes);
                  
          /* adjust counters, pointers, etc. */
          op += nbytes;
***************
*** 6484,6496 ****
  /*
   * smb_WriteData -- common code for Write and Raw Write
   */
- #ifndef DJGPP
  long smb_WriteData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count, char *op,
  	cm_user_t *userp, long *writtenp)
- #else /* DJGPP */
- long smb_WriteData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count, char *op,
- 	cm_user_t *userp, long *writtenp, int dosflag)
- #endif /* !DJGPP */
  {
      osi_hyper_t offset = *offsetp;
      long code = 0;
--- 6585,6592 ----
***************
*** 6684,6695 ****
              nbytes = count;	/* don't go past end of request */
  
          /* now copy the data */
! #ifdef DJGPP
!         if (dosflag)
!             dosmemget((dos_ptr)op, nbytes, bufferp->datap + bufIndex);
!         else
! #endif /* DJGPP */
!             memcpy(bufferp->datap + bufIndex, op, nbytes);
          buf_SetDirty(bufferp, bufIndex, nbytes);
  
          /* and record the last writer */
--- 6780,6786 ----
              nbytes = count;	/* don't go past end of request */
  
          /* now copy the data */
!         memcpy(bufferp->datap + bufIndex, op, nbytes);
          buf_SetDirty(bufferp, bufIndex, nbytes);
  
          /* and record the last writer */
***************
*** 6756,6761 ****
--- 6847,6853 ----
      return code;
  }
  
+ /* SMB_COM_WRITE */
  long smb_ReceiveCoreWrite(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      unsigned short fd;
***************
*** 6870,6880 ****
  
      code = 0;
      while ( code == 0 && count > 0 ) {
- #ifndef DJGPP
  	code = smb_WriteData(fidp, &offset, count, op, userp, &written);
- #else /* DJGPP */
- 	code = smb_WriteData(fidp, &offset, count, op, userp, &written, FALSE);
- #endif /* !DJGPP */
  	if (code == 0 && written == 0)
              code = CM_ERROR_PARTIALWRITE;
  
--- 6962,6968 ----
***************
*** 6909,6919 ****
      unsigned short fd;
      smb_fid_t *fidp;
      cm_user_t *userp;
- #ifndef DJGPP
      char *rawBuf;
- #else /* DJGPP */
-     dos_ptr rawBuf;
- #endif /* !DJGPP */
      long written = 0;
      long code = 0;
  
--- 6997,7003 ----
***************
*** 6931,6946 ****
  
      userp = smb_GetUserFromVCP(vcp, inp);
  
- #ifndef DJGPP
      rawBuf = rwcp->buf;
      code = smb_WriteData(fidp, &rwcp->offset, rwcp->count, rawBuf, userp,
  						 &written);
- #else /* DJGPP */
-     rawBuf = (dos_ptr) rwcp->buf;
-     code = smb_WriteData(fidp, &rwcp->offset, rwcp->count,
-                          (unsigned char *) rawBuf, userp,
-                          &written, TRUE);
- #endif /* !DJGPP */
  
      if (rwcp->writeMode & 0x1) {	/* synchronous */
          smb_t *op;
--- 7015,7023 ----
***************
*** 6963,6973 ****
  
      /* Give back raw buffer */
      lock_ObtainMutex(&smb_RawBufLock);
- #ifndef DJGPP
      *((char **)rawBuf) = smb_RawBufs;
- #else /* DJGPP */
-     _farpokel(_dos_ds, rawBuf, smb_RawBufs);
- #endif /* !DJGPP */
      smb_RawBufs = rawBuf;
      lock_ReleaseMutex(&smb_RawBufLock);
  
--- 7040,7046 ----
***************
*** 6980,6985 ****
--- 7053,7059 ----
      return 0;
  }
  
+ /* SMB_COM_WRITE_RAW */
  long smb_ReceiveCoreWriteRaw(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp, raw_write_cont_t *rwcp)
  {
      osi_hyper_t offset;
***************
*** 6992,7002 ****
      cm_user_t *userp;
      char *op;
      unsigned short writeMode;
- #ifndef DJGPP
      char *rawBuf;
- #else /* DJGPP */
-     dos_ptr rawBuf;
- #endif /* !DJGPP */
  
      fd = smb_GetSMBParm(inp, 0);
      totalCount = smb_GetSMBParm(inp, 1);
--- 7066,7072 ----
***************
*** 7097,7107 ****
  
      code = 0;
      while ( code == 0 && count > 0 ) {
- #ifndef DJGPP
  	code = smb_WriteData(fidp, &offset, count, op, userp, &written);
- #else /* DJGPP */
- 	code = smb_WriteData(fidp, &offset, count, op, userp, &written, FALSE);
- #endif /* !DJGPP */
  	if (code == 0 && written == 0)
              code = CM_ERROR_PARTIALWRITE;
  
--- 7167,7173 ----
***************
*** 7120,7130 ****
          if (smb_RawBufs) {
              /* Get a raw buf, from head of list */
              rawBuf = smb_RawBufs;
- #ifndef DJGPP
              smb_RawBufs = *(char **)smb_RawBufs;
- #else /* DJGPP */
-             smb_RawBufs = _farpeekl(_dos_ds, smb_RawBufs);
- #endif /* !DJGPP */
          }
          else
              code = CM_ERROR_USESTD;
--- 7186,7192 ----
***************
*** 7171,7176 ****
--- 7233,7239 ----
      return 0;
  }
  
+ /* SMB_COM_READ */
  long smb_ReceiveCoreRead(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      osi_hyper_t offset;
***************
*** 7256,7266 ****
      *op++ = (unsigned char) (count & 0xff);
      *op++ = (unsigned char) ((count >> 8) & 0xff);
                  
- #ifndef DJGPP
      code = smb_ReadData(fidp, &offset, count, op, userp, &finalCount);
- #else /* DJGPP */
-     code = smb_ReadData(fidp, &offset, count, op, userp, &finalCount, FALSE);
- #endif /* !DJGPP */
  
      /* fix some things up */
      smb_SetSMBParm(outp, 0, finalCount);
--- 7319,7325 ----
***************
*** 7272,7291 ****
      return code;
  }
  
  long smb_ReceiveCoreMakeDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     char *pathp;
      long code = 0;
      cm_space_t *spacep;
!     char *tp;
      cm_user_t *userp;
      cm_scache_t *dscp;			/* dir we're dealing with */
      cm_scache_t *scp;			/* file we're creating */
      cm_attr_t setAttr;
      int initialModeBits;
!     char *lastNamep;
      int caseFold;
!     char *tidPathp;
      cm_req_t req;
  
      cm_InitReq(&req);
--- 7331,7351 ----
      return code;
  }
  
+ /* SMB_COM_CREATE_DIRECTORY */
  long smb_ReceiveCoreMakeDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     clientchar_t *pathp;
      long code = 0;
      cm_space_t *spacep;
!     unsigned char *tp;
      cm_user_t *userp;
      cm_scache_t *dscp;			/* dir we're dealing with */
      cm_scache_t *scp;			/* file we're creating */
      cm_attr_t setAttr;
      int initialModeBits;
!     clientchar_t *lastNamep;
      int caseFold;
!     clientchar_t *tidPathp;
      cm_req_t req;
  
      cm_InitReq(&req);
***************
*** 7296,7310 ****
      initialModeBits = 0777;
          
      tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(tp, &tp);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(pathp,pathp);
  
!     if (strcmp(pathp, "\\") == 0)
          return CM_ERROR_EXISTS;
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->data, &lastNamep, pathp);
  
      userp = smb_GetUserFromVCP(vcp, inp);
  
--- 7356,7368 ----
      initialModeBits = 0777;
          
      tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(inp, tp, &tp, SMB_STRF_ANSIPATH);
  
!     if (cm_ClientStrCmp(pathp, _C("\\")) == 0)
          return CM_ERROR_EXISTS;
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->wdata, &lastNamep, pathp);
  
      userp = smb_GetUserFromVCP(vcp, inp);
  
***************
*** 7316,7322 ****
          return CM_ERROR_NOSUCHPATH;
      }
  
!     code = cm_NameI(cm_data.rootSCachep, spacep->data,
                      caseFold | CM_FLAG_FOLLOW | CM_FLAG_CHECKPATH,
                      userp, tidPathp, &req, &dscp);
  
--- 7374,7380 ----
          return CM_ERROR_NOSUCHPATH;
      }
  
!     code = cm_NameI(cm_data.rootSCachep, spacep->wdata,
                      caseFold | CM_FLAG_FOLLOW | CM_FLAG_CHECKPATH,
                      userp, tidPathp, &req, &dscp);
  
***************
*** 7327,7333 ****
          
  #ifdef DFS_SUPPORT
      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->data);
          cm_ReleaseSCache(dscp);
          cm_ReleaseUser(userp);
          if ( WANTS_DFS_PATHNAMES(inp) || pnc )
--- 7385,7391 ----
          
  #ifdef DFS_SUPPORT
      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->wdata);
          cm_ReleaseSCache(dscp);
          cm_ReleaseUser(userp);
          if ( WANTS_DFS_PATHNAMES(inp) || pnc )
***************
*** 7377,7383 ****
      return 0;
  }
  
! BOOL smb_IsLegalFilename(char *filename)
  {
      /* 
       *  Find the longest substring of filename that does not contain
--- 7435,7441 ----
      return 0;
  }
  
! BOOL smb_IsLegalFilename(clientchar_t *filename)
  {
      /* 
       *  Find the longest substring of filename that does not contain
***************
*** 7385,7402 ****
       *  than the length of the whole string, then one or more of the
       *  illegal chars is in filename. 
       */
!     if (strcspn(filename, illegalChars) < strlen(filename))
          return FALSE;
  
      return TRUE;
! }        
  
  long smb_ReceiveCoreCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     char *pathp;
      long code = 0;
      cm_space_t *spacep;
!     char *tp;
      int excl;
      cm_user_t *userp;
      cm_scache_t *dscp;			/* dir we're dealing with */
--- 7443,7461 ----
       *  than the length of the whole string, then one or more of the
       *  illegal chars is in filename. 
       */
!     if (cm_ClientStrCSpn(filename, illegalChars) < cm_ClientStrLen(filename))
          return FALSE;
  
      return TRUE;
! }
  
+ /* SMB_COM_CREATE and SMB_COM_CREATE_NEW */
  long smb_ReceiveCoreCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     clientchar_t *pathp;
      long code = 0;
      cm_space_t *spacep;
!     unsigned char *tp;
      int excl;
      cm_user_t *userp;
      cm_scache_t *dscp;			/* dir we're dealing with */
***************
*** 7405,7414 ****
      int initialModeBits;
      smb_fid_t *fidp;
      int attributes;
!     char *lastNamep;
      int caseFold;
      afs_uint32 dosTime;
!     char *tidPathp;
      cm_req_t req;
      int created = 0;			/* the file was new */
  
--- 7464,7473 ----
      int initialModeBits;
      smb_fid_t *fidp;
      int attributes;
!     clientchar_t *lastNamep;
      int caseFold;
      afs_uint32 dosTime;
!     clientchar_t *tidPathp;
      cm_req_t req;
      int created = 0;			/* the file was new */
  
***************
*** 7426,7437 ****
  	initialModeBits &= ~0222;
          
      tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(tp, &tp);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(pathp,pathp);
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->data, &lastNamep, pathp);
  
      userp = smb_GetUserFromVCP(vcp, inp);
  
--- 7485,7494 ----
  	initialModeBits &= ~0222;
          
      tp = smb_GetSMBData(inp, NULL);
!     pathp = smb_ParseASCIIBlock(inp, tp, &tp, SMB_STRF_ANSIPATH);
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->wdata, &lastNamep, pathp);
  
      userp = smb_GetUserFromVCP(vcp, inp);
  
***************
*** 7442,7448 ****
          cm_ReleaseUser(userp);
          return CM_ERROR_NOSUCHPATH;
      }
!     code = cm_NameI(cm_data.rootSCachep, spacep->data, caseFold | CM_FLAG_FOLLOW,
                      userp, tidPathp, &req, &dscp);
  
      if (code) {
--- 7499,7505 ----
          cm_ReleaseUser(userp);
          return CM_ERROR_NOSUCHPATH;
      }
!     code = cm_NameI(cm_data.rootSCachep, spacep->wdata, caseFold | CM_FLAG_FOLLOW,
                      userp, tidPathp, &req, &dscp);
  
      if (code) {
***************
*** 7452,7458 ****
          
  #ifdef DFS_SUPPORT
      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->data);
          cm_ReleaseSCache(dscp);
          cm_ReleaseUser(userp);
          if ( WANTS_DFS_PATHNAMES(inp) || pnc )
--- 7509,7515 ----
          
  #ifdef DFS_SUPPORT
      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!         int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->wdata);
          cm_ReleaseSCache(dscp);
          cm_ReleaseUser(userp);
          if ( WANTS_DFS_PATHNAMES(inp) || pnc )
***************
*** 7473,7479 ****
      if (!smb_IsLegalFilename(lastNamep))
          return CM_ERROR_BADNTFILENAME;
  
!     osi_Log1(smb_logp, "SMB receive create [%s]", osi_LogSaveString( smb_logp, pathp ));
  #ifdef DEBUG_VERBOSE
      {
          char *hexp;
--- 7530,7536 ----
      if (!smb_IsLegalFilename(lastNamep))
          return CM_ERROR_BADNTFILENAME;
  
!     osi_Log1(smb_logp, "SMB receive create [%S]", osi_LogSaveClientString( smb_logp, pathp ));
  #ifdef DEBUG_VERBOSE
      {
          char *hexp;
***************
*** 7590,7595 ****
--- 7647,7653 ----
      return 0;
  }
  
+ /* SMB_COM_SEEK */
  long smb_ReceiveCoreSeek(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      long code = 0;
***************
*** 7701,7710 ****
      /* Sanity check */
      if (ncbp->ncb_length < offsetof(struct smb, vdata)) {
          /* log it and discard it */
- #ifndef DJGPP
  	LogEvent(EVENTLOG_WARNING_TYPE, MSG_BAD_SMB_TOO_SHORT, 
  		 __FILE__, __LINE__, ncbp->ncb_length);
- #endif /* !DJGPP */
  	osi_Log1(smb_logp, "SMB message too short, len %d", ncbp->ncb_length);
          return;
      }
--- 7759,7766 ----
***************
*** 7766,7774 ****
                  /* Raw Write */
                  code = smb_ReceiveCoreWriteRaw (vcp, inp, outp, rwcp);
              else {
!                 osi_Log4(smb_logp,"Dispatch %s vcp 0x%p lana %d lsn %d",opName,vcp,vcp->lana,vcp->lsn);
                  code = (*(dp->procp)) (vcp, inp, outp);
!                 osi_Log4(smb_logp,"Dispatch return  code 0x%x vcp 0x%p lana %d lsn %d",code,vcp,vcp->lana,vcp->lsn);
  #ifdef LOG_PACKET
                  if ( code == CM_ERROR_BADSMB ||
                       code == CM_ERROR_BADOP )
--- 7822,7832 ----
                  /* Raw Write */
                  code = smb_ReceiveCoreWriteRaw (vcp, inp, outp, rwcp);
              else {
!                 osi_Log4(smb_logp,"Dispatch %s vcp 0x%p lana %d lsn %d",
!                          opName,vcp,vcp->lana,vcp->lsn);
                  code = (*(dp->procp)) (vcp, inp, outp);
!                 osi_Log4(smb_logp,"Dispatch return  code 0x%x vcp 0x%p lana %d lsn %d",
!                          code,vcp,vcp->lana,vcp->lsn);
  #ifdef LOG_PACKET
                  if ( code == CM_ERROR_BADSMB ||
                       code == CM_ERROR_BADOP )
***************
*** 7780,7801 ****
              osi_Log2(smb_logp, "Dispatch %s duration %d ms", opName, newTime - oldTime);
  
              if (oldGen != sessionGen) {
- #ifndef DJGPP
  		LogEvent(EVENTLOG_WARNING_TYPE, MSG_BAD_SMB_WRONG_SESSION, 
  			 newTime - oldTime, ncbp->ncb_length);
- #endif /* !DJGPP */
  		osi_Log3(smb_logp, "Request %s straddled session startup, "
                            "took %d ms, ncb length %d", opName, newTime - oldTime, ncbp->ncb_length);
              }
!         }
!         else {
              /* bad opcode, fail the request, after displaying it */
              osi_Log1(smb_logp, "Received bad SMB req 0x%X", inp->inCom);
  #ifdef LOG_PACKET
              smb_LogPacket(inp);
  #endif  /* LOG_PACKET */
  
- #ifndef DJGPP
              if (showErrors) {
                  sprintf(tbuffer, "Received bad SMB req 0x%x", inp->inCom);
                  code = (*smb_MBfunc)(NULL, tbuffer, "Cancel: don't show again",
--- 7838,7857 ----
              osi_Log2(smb_logp, "Dispatch %s duration %d ms", opName, newTime - oldTime);
  
              if (oldGen != sessionGen) {
  		LogEvent(EVENTLOG_WARNING_TYPE, MSG_BAD_SMB_WRONG_SESSION, 
  			 newTime - oldTime, ncbp->ncb_length);
  		osi_Log3(smb_logp, "Request %s straddled session startup, "
                            "took %d ms, ncb length %d", opName, newTime - oldTime, ncbp->ncb_length);
              }
! 
!             FreeSMBStrings(inp);
!         } else {
              /* bad opcode, fail the request, after displaying it */
              osi_Log1(smb_logp, "Received bad SMB req 0x%X", inp->inCom);
  #ifdef LOG_PACKET
              smb_LogPacket(inp);
  #endif  /* LOG_PACKET */
  
              if (showErrors) {
                  sprintf(tbuffer, "Received bad SMB req 0x%x", inp->inCom);
                  code = (*smb_MBfunc)(NULL, tbuffer, "Cancel: don't show again",
***************
*** 7803,7818 ****
                  if (code == IDCANCEL) 
                      showErrors = 0;
              }
- #endif /* DJGPP */
              code = CM_ERROR_BADOP;
          }
  
          /* catastrophic failure:  log as much as possible */
          if (code == CM_ERROR_BADSMB) {
- #ifndef DJGPP
  	    LogEvent(EVENTLOG_WARNING_TYPE, MSG_BAD_SMB_INVALID, 
  		     ncbp->ncb_length);
- #endif /* !DJGPP */
  #ifdef LOG_PACKET
              smb_LogPacket(inp);
  #endif /* LOG_PACKET */
--- 7859,7871 ----
***************
*** 7923,7929 ****
      return;
  }
  
- #ifndef DJGPP
  /* Wait for Netbios() calls to return, and make the results available to server
   * threads.  Note that server threads can't wait on the NCBevents array
   * themselves, because NCB events are manual-reset, and the servers would race
--- 7976,7981 ----
***************
*** 7977,7983 ****
          thrd_SetEvent(NCBreturns[0][idx]);
      }
  }
- #endif /* !DJGPP */
  
  /*
   * Try to have one NCBRECV request waiting for every live session.  Not more
--- 8029,8034 ----
***************
*** 7988,7996 ****
      DWORD code;
      int idx_session, idx_NCB;
      NCB *ncbp;
- #ifdef DJGPP
-     dos_ptr dos_ncb;
- #endif /* DJGPP */
  
      while (smbShutdownFlag == 0) {
          /* Get a session */
--- 8039,8044 ----
***************
*** 8083,8101 ****
          ncbp->ncb_lsn = (unsigned char) LSNs[idx_session];
          ncbp->ncb_command = NCBRECV | ASYNCH;
          ncbp->ncb_lana_num = lanas[idx_session];
- #ifndef DJGPP
          ncbp->ncb_buffer = (unsigned char *) bufs[idx_NCB];
          ncbp->ncb_event = NCBevents[idx_NCB];
          ncbp->ncb_length = SMB_PACKETSIZE;
          Netbios(ncbp);
- #else /* DJGPP */
-         ncbp->ncb_buffer = bufs[idx_NCB]->dos_pkt;
-         ((smb_ncb_t*)ncbp)->orig_pkt = bufs[idx_NCB];
-         ncbp->ncb_event = NCBreturns[0][idx_NCB];
-         ncbp->ncb_length = SMB_PACKETSIZE;
-         dos_ncb = ((smb_ncb_t *)ncbp)->dos_ncb;
-         Netbios(ncbp, dos_ncb);
- #endif /* !DJGPP */
      }
  }
  
--- 8131,8140 ----
***************
*** 8121,8129 ****
      UCHAR rc;
      smb_vc_t *vcp = NULL;
      smb_t *smbp;
! #ifdef DJGPP
!     dos_ptr dos_ncb;
! #endif /* DJGPP */
  
      rx_StartClientThread();
  
--- 8160,8166 ----
      UCHAR rc;
      smb_vc_t *vcp = NULL;
      smb_t *smbp;
!     extern void rx_StartClientThread(void);
  
      rx_StartClientThread();
  
***************
*** 8185,8193 ****
          }
  
          ncbp = NCBs[idx_NCB];
- #ifdef DJGPP
-         dos_ncb = ((smb_ncb_t *)ncbp)->dos_ncb;
- #endif /* DJGPP */
          idx_session = NCBsessions[idx_NCB];
          rc = ncbp->ncb_retcode;
  
--- 8222,8227 ----
***************
*** 8206,8215 ****
  
          case NRC_SNUMOUT:
  	case NRC_SABORT:
- #ifndef DJGPP
  	    LogEvent(EVENTLOG_WARNING_TYPE, MSG_UNEXPECTED_SMB_SESSION_CLOSE, ncb_error_string(rc));
  	    /* fallthrough */
- #endif /* !DJGPP */
  	case NRC_SCLOSED:
              /* Client closed session */
              vcp = smb_FindVC(ncbp->ncb_lsn, 0, lanas[idx_session]);
--- 8240,8247 ----
***************
*** 8234,8243 ****
  
          case NRC_INCOMP:
              /* Treat as transient error */
- #ifndef DJGPP
  	    LogEvent(EVENTLOG_WARNING_TYPE, MSG_BAD_SMB_INCOMPLETE, 
  		     ncbp->ncb_length);
- #endif /* !DJGPP */
  	    osi_Log1(smb_logp,
  		     "dispatch smb recv failed, message incomplete, ncb_length %d",
  		     ncbp->ncb_length);
--- 8266,8273 ----
***************
*** 8333,8354 ****
  
          vcp->errorCount = 0;
          bufp = (struct smb_packet *) ncbp->ncb_buffer;
- #ifdef DJGPP
-         bufp = ((smb_ncb_t *) ncbp)->orig_pkt;
-         /* copy whole packet to virtual memory */
-         /*fprintf(stderr, "smb_Server: copying dos packet at 0x%x, "
-         "bufp=0x%x\n",
-         bufp->dos_pkt / 16, bufp);*/
-         fflush(stderr);
-         dosmemget(bufp->dos_pkt, ncbp->ncb_length, bufp->data);
- #endif /* DJGPP */
          smbp = (smb_t *)bufp->data;
          outbufp->flags = 0;
  
! #if !defined(DJGPP) && !defined(AFS_WIN32_ENV)
          __try
          {
  #endif
              if (smbp->com == 0x1d) {
                  /* Special handling for Write Raw */
                  raw_write_cont_t rwc;
--- 8363,8377 ----
  
          vcp->errorCount = 0;
          bufp = (struct smb_packet *) ncbp->ncb_buffer;
          smbp = (smb_t *)bufp->data;
          outbufp->flags = 0;
  
! #if !defined(AFS_WIN32_ENV)
! #ifndef NOTRACE
          __try
          {
  #endif
+ #endif
              if (smbp->com == 0x1d) {
                  /* Special handling for Write Raw */
                  raw_write_cont_t rwc;
***************
*** 8366,8376 ****
                      ncbp->ncb_buffer = rwc.buf;
                      ncbp->ncb_length = 65535;
                      ncbp->ncb_event = rwevent;
- #ifndef DJGPP
                      Netbios(ncbp);
- #else
-                     Netbios(ncbp, dos_ncb);
- #endif /* !DJGPP */
                      rcode = thrd_WaitForSingleObject_Event(rwevent, RAWTIMEOUT);
                      thrd_CloseHandle(rwevent);
                  }
--- 8389,8395 ----
***************
*** 8390,8399 ****
                  /* TODO: what else needs to be serialized? */
                  smb_DispatchPacket(vcp, bufp, outbufp, ncbp, NULL);
              }
! #if !defined(DJGPP) && !defined(AFS_WIN95_ENV)
          }
          __except( smb_ServerExceptionFilter() ) {
          }
  #endif
  
          smb_concurrentCalls--;
--- 8409,8420 ----
                  /* TODO: what else needs to be serialized? */
                  smb_DispatchPacket(vcp, bufp, outbufp, ncbp, NULL);
              }
! #if !defined(AFS_WIN95_ENV)
! #ifndef NOTRACE
          }
          __except( smb_ServerExceptionFilter() ) {
          }
+ #endif /* NOTRACE */
  #endif
  
          smb_concurrentCalls--;
***************
*** 8411,8417 ****
   * force trace and give control to upstream exception handlers. Useful for
   * debugging.
   */
! #if !defined(DJGPP) && !defined(AFS_WIN95_ENV)
  DWORD smb_ServerExceptionFilter(void) {
      /* While this is not the best time to do a trace, if it succeeds, then
       * we have a trace (assuming tracing was enabled). Otherwise, this should
--- 8432,8438 ----
   * force trace and give control to upstream exception handlers. Useful for
   * debugging.
   */
! #if !defined(AFS_WIN95_ENV)
  DWORD smb_ServerExceptionFilter(void) {
      /* While this is not the best time to do a trace, if it succeeds, then
       * we have a trace (assuming tracing was enabled). Otherwise, this should
***************
*** 8444,8455 ****
      NCBavails[idx] = thrd_CreateEvent(NULL, FALSE, TRUE, eventName);
      if ( GetLastError() == ERROR_ALREADY_EXISTS )
          osi_Log1(smb_logp, "Event Object Already Exists: %s", osi_LogSaveString(smb_logp, eventName));
- #ifndef DJGPP
      sprintf(eventName,"NCBevents[%d]", idx);
      NCBevents[idx] = thrd_CreateEvent(NULL, TRUE, FALSE, eventName);
      if ( GetLastError() == ERROR_ALREADY_EXISTS )
          osi_Log1(smb_logp, "Event Object Already Exists: %s", osi_LogSaveString(smb_logp, eventName));
- #endif /* !DJGPP */
      sprintf(eventName,"NCBReturns[0<=i<smb_NumServerThreads][%d]", idx);
      retHandle = thrd_CreateEvent(NULL, FALSE, FALSE, eventName);
      if ( GetLastError() == ERROR_ALREADY_EXISTS )
--- 8465,8474 ----
***************
*** 8474,8495 ****
      char rname[NCBNAMSZ+1];
      char cname[MAX_COMPUTERNAME_LENGTH+1];
      int cnamelen = MAX_COMPUTERNAME_LENGTH+1;
- #ifdef DJGPP
-     dos_ptr dos_ncb;
-     time_t now;
- #endif /* DJGPP */
      INT_PTR lana = (INT_PTR) parmp;
      char eventName[MAX_PATH];
  
!     sprintf(eventName,"smb_Listener_lana_%d", (char)lana);
      ListenerShutdown[lana] = thrd_CreateEvent(NULL, FALSE, FALSE, eventName);
      if ( GetLastError() == ERROR_ALREADY_EXISTS )
          thrd_ResetEvent(ListenerShutdown[lana]);
  
      ncbp = GetNCB();
- #ifdef DJGPP
-     dos_ncb = ((smb_ncb_t *)ncbp)->dos_ncb;
- #endif /* DJGPP */
  
      /* retrieve computer name */
      GetComputerName(cname, &cnamelen);
--- 8493,8507 ----
      char rname[NCBNAMSZ+1];
      char cname[MAX_COMPUTERNAME_LENGTH+1];
      int cnamelen = MAX_COMPUTERNAME_LENGTH+1;
      INT_PTR lana = (INT_PTR) parmp;
      char eventName[MAX_PATH];
  
!     sprintf(eventName,"smb_Listener_lana_%d", (unsigned char)lana);
      ListenerShutdown[lana] = thrd_CreateEvent(NULL, FALSE, FALSE, eventName);
      if ( GetLastError() == ERROR_ALREADY_EXISTS )
          thrd_ResetEvent(ListenerShutdown[lana]);
  
      ncbp = GetNCB();
  
      /* retrieve computer name */
      GetComputerName(cname, &cnamelen);
***************
*** 8513,8523 ****
          
          ncbp->ncb_lana_num = (UCHAR)lana;
  
- #ifndef DJGPP
          code = Netbios(ncbp);
- #else /* DJGPP */
-         code = Netbios(ncbp, dos_ncb);
- #endif
          if (code == NRC_NAMERR) {
              /* An smb shutdown or Vista resume must have taken place */
  	    osi_Log2(smb_logp,
--- 8525,8531 ----
***************
*** 8566,8574 ****
  	}
  #if 0
          else if (code != 0) {
- #ifndef DJGPP
              char tbuffer[AFSPATHMAX];
- #endif
  
              /* terminate silently if shutdown flag is set */
              while (!lock_TryMutex(&smb_StartedLock)) {
--- 8574,8580 ----
***************
*** 8583,8589 ****
              osi_Log0(smb_logp, 
                       "Client exiting due to network failure. Please restart client.\n");
  
- #ifndef DJGPP
              sprintf(tbuffer, 
                       "Client exiting due to network failure.  Please restart client.\n"
                       "NCBLISTEN lana=%d failed with code %d [%s]",
--- 8589,8594 ----
***************
*** 8592,8605 ****
                  code = (*smb_MBfunc)(NULL, tbuffer, "AFS Client Service: Fatal Error",
                                        MB_OK|MB_SERVICE_NOTIFICATION);
  	    osi_panic(tbuffer, __FILE__, __LINE__);
- #else
-             fprintf(stderr, "NCBLISTEN lana=%d failed with code %d\n",
-                      ncbp->ncb_lana_num, code);
-             fprintf(stderr, "\nClient exiting due to network failure "
-                      "(possibly due to power-saving mode)\n");
-             fprintf(stderr, "Please restart client.\n");
-             afs_exit(AFS_EXITCODE_NETWORK_FAILURE);
- #endif /* !DJGPP */
  
              lock_ReleaseMutex(&smb_StartedLock);
              break;
--- 8597,8602 ----
***************
*** 8643,8660 ****
  		     ncbp->ncb_lsn,ncbp->ncb_lana_num, osi_LogSaveString(smb_logp, rname), ongoingOps);
  
  	    if (reportSessionStartups) {
- #ifndef DJGPP
  		LogEvent(EVENTLOG_INFORMATION_TYPE, MSG_SMB_SESSION_START, ongoingOps);
- #else /* DJGPP */
- 		time(&now);
- 		fprintf(stderr, "%s: New session %d starting from host %s\n",
- 			asctime(localtime(&now)), ncbp->ncb_lsn, rname);
- 		fflush(stderr);
- #endif /* !DJGPP */
  	    }
  	    
  	    lock_ObtainMutex(&vcp->mx);
! 	    strcpy(vcp->rname, rname);
  	    vcp->flags |= flags;
  	    lock_ReleaseMutex(&vcp->mx);
  
--- 8640,8650 ----
  		     ncbp->ncb_lsn,ncbp->ncb_lana_num, osi_LogSaveString(smb_logp, rname), ongoingOps);
  
  	    if (reportSessionStartups) {
  		LogEvent(EVENTLOG_INFORMATION_TYPE, MSG_SMB_SESSION_START, ongoingOps);
  	    }
  	    
  	    lock_ObtainMutex(&vcp->mx);
!             cm_Utf8ToUtf16(rname, -1, vcp->rname, lengthof(vcp->rname));
  	    vcp->flags |= flags;
  	    lock_ReleaseMutex(&vcp->mx);
  
***************
*** 8686,8699 ****
  		     ncbp->ncb_lsn,ncbp->ncb_lana_num, osi_LogSaveString(smb_logp, rname), ongoingOps);
  
  	    if (reportSessionStartups) {
- #ifndef DJGPP
  		LogEvent(EVENTLOG_INFORMATION_TYPE, MSG_SMB_SESSION_START, ongoingOps);
- #else /* DJGPP */
- 		time(&now);
- 		fprintf(stderr, "%s: Re-using session %d starting from host %s\n",
- 			asctime(localtime(&now)), ncbp->ncb_lsn, rname);
- 		fflush(stderr);
- #endif /* !DJGPP */
  	    }
  	}
  
--- 8676,8682 ----
***************
*** 8732,8737 ****
--- 8715,8721 ----
                  smbp->errHigh = (unsigned char) ((errCode >> 8) & 0xff);
                  smbp->rcls = errClass;
              }
+ 
              smb_SendPacket(vcp, outp);
              smb_FreePacket(outp);
  
***************
*** 8892,8900 ****
  int smb_NetbiosInit(int locked)
  {
      NCB *ncbp;
- #ifdef DJGPP
-     dos_ptr dos_ncb;
- #endif /* DJGPP */
      int i, lana, code, l;
      char s[100];
      int delname_tried=0;
--- 8876,8881 ----
***************
*** 8914,8922 ****
      }
      /* setup the NCB system */
      ncbp = GetNCB();
- #ifdef DJGPP
-     dos_ncb = ((smb_ncb_t *)ncbp)->dos_ncb;
- #endif /* DJGPP */
  
      /* Call lanahelper to get Netbios name, lan adapter number and gateway flag */
      if (SUCCEEDED(code = lana_GetUncServerNameEx(cm_NetbiosName, &lanaNum, &isGateway, LANA_NETBIOS_NAME_FULL))) {
--- 8895,8900 ----
***************
*** 8946,8953 ****
      strcpy(smb_localNamep, cm_NetbiosName);
      afsi_log("smb_localNamep is >%s<", smb_localNamep);
  
  
- #ifndef DJGPP
      if (smb_LANadapter == LANA_INVALID) {
          ncbp->ncb_command = NCBENUM;
          ncbp->ncb_buffer = (PUCHAR)&lana_list;
--- 8924,8932 ----
      strcpy(smb_localNamep, cm_NetbiosName);
      afsi_log("smb_localNamep is >%s<", smb_localNamep);
  
+     /* Also copy the value to the client character encoded string */
+     cm_Utf8ToClientString(cm_NetbiosName, -1, cm_NetbiosNameC, MAX_NB_NAME_LENGTH);
  
      if (smb_LANadapter == LANA_INVALID) {
          ncbp->ncb_command = NCBENUM;
          ncbp->ncb_buffer = (PUCHAR)&lana_list;
***************
*** 8981,8999 ****
              afsi_log("Netbios NCBRESET lana %d succeeded", lana_list.lana[i]);
          }
      }
- #else
-     /* for DJGPP, there is no NCBENUM and NCBRESET is a real reset.  so
-        we will just fake the LANA list */
-     if (smb_LANadapter == LANA_INVALID) {
-         for (i = 0; i < 8; i++)
- 	    lana_list.lana[i] = i;
-         lana_list.length = 8;
-     }
-     else {
-         lana_list.length = 1;
-         lana_list.lana[0] = smb_LANadapter;
-     }
- #endif /* !DJGPP */
  
      /* and declare our name so we can receive connections */
      memset(ncbp, 0, sizeof(*ncbp));
--- 8960,8965 ----
***************
*** 9009,9019 ****
          ncbp->ncb_command = NCBADDNAME;
          ncbp->ncb_lana_num = lana;
          memcpy(ncbp->ncb_name,smb_sharename,NCBNAMSZ);
- #ifndef DJGPP
          code = Netbios(ncbp);
- #else /* DJGPP */
-         code = Netbios(ncbp, dos_ncb);
- #endif /* !DJGPP */
            
          afsi_log("Netbios NCBADDNAME lana=%d code=%d retcode=%d complete=%d",
                   lana, code, ncbp->ncb_retcode, ncbp->ncb_cmd_cplt);
--- 8975,8981 ----
***************
*** 9029,9039 ****
  
          if (code == 0) {
              afsi_log("Netbios NCBADDNAME succeeded on lana %d\n", lana);
- #ifdef DJGPP
-             /* we only use one LANA with djgpp */
-             lana_list.lana[0] = lana;
-             lana_list.length = 1;
- #endif	  
          }
          else {
              afsi_log("Netbios NCBADDNAME lana %d error code %d", lana, code);
--- 8991,8996 ----
***************
*** 9047,9057 ****
                  ncbp->ncb_command = NCBDELNAME;
                  memcpy(ncbp->ncb_name,smb_sharename,NCBNAMSZ);
                  ncbp->ncb_lana_num = lana;
- #ifndef DJGPP
                  code = Netbios(ncbp);
- #else
-                 code = Netbios(ncbp, dos_ncb);
- #endif /* DJGPP */
                  if (code == 0) 
                      code = ncbp->ncb_retcode;
                  else {
--- 9004,9010 ----
***************
*** 9076,9084 ****
          if (code == 0) {
              smb_LANadapter = lana;
              lana_found = 1;   /* at least one worked */
- #ifdef DJGPP
-             break;
- #endif
          }
      }
  
--- 9029,9034 ----
***************
*** 9238,9268 ****
          lock_ReleaseMutex(&smb_StartedLock);
  }
  
! void smb_Init(osi_log_t *logp, int useV3,
!               int nThreads
! #ifndef DJGPP
!               , void *aMBfunc
! #endif
!   )
! 
  {
      thread_t phandle;
      int lpid;
      INT_PTR i;
      struct tm myTime;
- #ifdef DJGPP
-     int npar, seg, sel;
-     dos_ptr rawBuf;
- #endif /* DJGPP */
      EVENT_HANDLE retHandle;
      char eventName[MAX_PATH];
      int startListeners = 0;
  
      smb_TlsRequestSlot = TlsAlloc();
  
- #ifndef DJGPP
      smb_MBfunc = aMBfunc;
- #endif /* DJGPP */
  
      smb_useV3 = useV3;
  
--- 9188,9206 ----
          lock_ReleaseMutex(&smb_StartedLock);
  }
  
! void smb_Init(osi_log_t *logp, int useV3, int nThreads, void *aMBfunc)
  {
      thread_t phandle;
      int lpid;
      INT_PTR i;
      struct tm myTime;
      EVENT_HANDLE retHandle;
      char eventName[MAX_PATH];
      int startListeners = 0;
  
      smb_TlsRequestSlot = TlsAlloc();
  
      smb_MBfunc = aMBfunc;
  
      smb_useV3 = useV3;
  
***************
*** 9299,9305 ****
      lock_InitializeMutex(&smb_StartedLock, "smb started lock");
  	
      /* 4 Raw I/O buffers */
- #ifndef DJGPP
      smb_RawBufs = calloc(65536,1);
      *((char **)smb_RawBufs) = NULL;
      for (i=0; i<3; i++) {
--- 9237,9242 ----
***************
*** 9307,9345 ****
          *((char **)rawBuf) = smb_RawBufs;
          smb_RawBufs = rawBuf;
      }
- #else /* DJGPP */
-     npar = 65536 >> 4;  /* number of paragraphs */
-     seg = __dpmi_allocate_dos_memory(npar, &smb_RawBufSel[0]);
-     if (seg == -1) {
-         afsi_log("Cannot allocate %d paragraphs of DOS memory",
-                   npar);
-         osi_panic("",__FILE__,__LINE__);
-     }
-     else {
-         afsi_log("Allocated %d paragraphs of DOS mem at 0x%X",
-                   npar, seg);
-     }
-     smb_RawBufs = (seg * 16) + 0;  /* DOS physical address */
-         
-     _farpokel(_dos_ds, smb_RawBufs, NULL);
-     for (i=0; i<SMB_RAW_BUFS-1; i++) {
-         npar = 65536 >> 4;  /* number of paragraphs */
-         seg = __dpmi_allocate_dos_memory(npar, &smb_RawBufSel[i+1]);
-         if (seg == -1) {
-             afsi_log("Cannot allocate %d paragraphs of DOS memory",
-                       npar);
-             osi_panic("",__FILE__,__LINE__);
-         }
-         else {
-             afsi_log("Allocated %d paragraphs of DOS mem at 0x%X",
-                       npar, seg);
-         }
-         rawBuf = (seg * 16) + 0;  /* DOS physical address */
-         /*_farpokel(_dos_ds, smb_RawBufs, smb_RawBufs);*/
-         _farpokel(_dos_ds, rawBuf, smb_RawBufs);
-         smb_RawBufs = rawBuf;
-     }
- #endif /* !DJGPP */
  
      /* global free lists */
      smb_ncbFreeListp = NULL;
--- 9244,9249 ----
***************
*** 9606,9627 ****
           * It is actually the domain for local logins, and we are acting as
           * a local SMB server. 
           */
!         bufsize = sizeof(smb_ServerDomainName) - 1;
!         GetComputerName(smb_ServerDomainName, &bufsize);
          smb_ServerDomainNameLength = bufsize + 1; /* bufsize doesn't include terminator */
!         afsi_log("Setting SMB server domain name to [%s]", smb_ServerDomainName);
      }
  
      /* Start listeners, waiters, servers, and daemons */
      if (startListeners)
          smb_StartListeners(1);
  
- #ifndef DJGPP
      phandle = thrd_Create(NULL, 65536, (ThreadFunc) smb_ClientWaiter,
                            NULL, 0, &lpid, "smb_ClientWaiter");
      osi_assertx(phandle != NULL, "smb_ClientWaiter thread creation failure");
      thrd_CloseHandle(phandle);
- #endif /* !DJGPP */
  
      phandle = thrd_Create(NULL, 65536, (ThreadFunc) smb_ServerWaiter,
                            NULL, 0, &lpid, "smb_ServerWaiter");
--- 9510,9529 ----
           * It is actually the domain for local logins, and we are acting as
           * a local SMB server. 
           */
!         bufsize = lengthof(smb_ServerDomainName) - 1;
!         GetComputerNameW(smb_ServerDomainName, &bufsize);
          smb_ServerDomainNameLength = bufsize + 1; /* bufsize doesn't include terminator */
!         afsi_log("Setting SMB server domain name to [%S]", smb_ServerDomainName);
      }
  
      /* Start listeners, waiters, servers, and daemons */
      if (startListeners)
          smb_StartListeners(1);
  
      phandle = thrd_Create(NULL, 65536, (ThreadFunc) smb_ClientWaiter,
                            NULL, 0, &lpid, "smb_ClientWaiter");
      osi_assertx(phandle != NULL, "smb_ClientWaiter thread creation failure");
      thrd_CloseHandle(phandle);
  
      phandle = thrd_Create(NULL, 65536, (ThreadFunc) smb_ServerWaiter,
                            NULL, 0, &lpid, "smb_ServerWaiter");
***************
*** 9645,9654 ****
      osi_assertx(phandle != NULL, "smb_WaitingLocksDaemon thread creation failure");
      thrd_CloseHandle(phandle);
  
- #ifdef DJGPP
-     smb_ListShares();
- #endif
- 
      lock_ReleaseMutex(&smb_StartedLock);
      return;
  }
--- 9547,9552 ----
***************
*** 9656,9664 ****
  void smb_Shutdown(void)
  {
      NCB *ncbp;
- #ifdef DJGPP
-     dos_ptr dos_ncb;
- #endif
      long code = 0;
      afs_uint32 i;
      smb_vc_t *vcp;
--- 9554,9559 ----
***************
*** 9667,9675 ****
          
      /* setup the NCB system */
      ncbp = GetNCB();
- #ifdef DJGPP
-     dos_ncb = ((smb_ncb_t *)ncbp)->dos_ncb;
- #endif
  
      /* Block new sessions by setting shutdown flag */
      smbShutdownFlag = 1;
--- 9562,9567 ----
***************
*** 9685,9695 ****
          ncbp->ncb_command = NCBHANGUP;
          ncbp->ncb_lana_num = lanas[i];  /*smb_LANadapter;*/
          ncbp->ncb_lsn = (UCHAR)LSNs[i];
- #ifndef DJGPP
          code = Netbios(ncbp);
- #else
-         code = Netbios(ncbp, dos_ncb);
- #endif
          /*fprintf(stderr, "returned from NCBHANGUP session %d LSN %d\n", i, LSNs[i]);*/
          if (code == 0) code = ncbp->ncb_retcode;
          if (code != 0) {
--- 9577,9583 ----
***************
*** 9723,9733 ****
          ncbp->ncb_command = NCBDELNAME;
          ncbp->ncb_lana_num = lana_list.lana[i];
          memcpy(ncbp->ncb_name,smb_sharename,NCBNAMSZ);
- #ifndef DJGPP
          code = Netbios(ncbp);
- #else
-         code = Netbios(ncbp, dos_ncb);
- #endif
          if (code == 0) 
              code = ncbp->ncb_retcode;
          if (code != 0) {
--- 9611,9617 ----
***************
*** 9786,9791 ****
--- 9670,9676 ----
  char *smb_GetSharename()
  {
      char *name;
+     int len;
  
      /* Make sure we have been properly initialized. */
      if (smb_localNamep == NULL)
***************
*** 9794,9809 ****
      /* Allocate space for \\<servername>\<sharename>, plus the
       * terminator.
       */
!     name = malloc(strlen(smb_localNamep) + strlen("ALL") + 4);
!     sprintf(name, "\\\\%s\\%s", smb_localNamep, "ALL");
      return name;
! }   
  
  
  #ifdef LOG_PACKET
  void smb_LogPacket(smb_packet_t *packet)
  {
      BYTE *vp, *cp;
      unsigned length, paramlen, datalen, i, j;
      char buf[81];
      char hex[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
--- 9679,9696 ----
      /* Allocate space for \\<servername>\<sharename>, plus the
       * terminator.
       */
!     len = (strlen(smb_localNamep) + strlen("ALL") + 4) * sizeof(char);
!     name = malloc(len);
!     snprintf(name, len, "\\\\%s\\%s", smb_localNamep, "ALL");
      return name;
! }
  
  
  #ifdef LOG_PACKET
  void smb_LogPacket(smb_packet_t *packet)
  {
      BYTE *vp, *cp;
+     smb_t * smbp;
      unsigned length, paramlen, datalen, i, j;
      char buf[81];
      char hex[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
***************
*** 9812,9822 ****
  
      osi_Log0(smb_logp, "*** SMB packet dump ***");
  
      vp = (BYTE *) packet->data;
  
!     datalen = *((WORD*)(vp + (paramlen = ((unsigned)*(vp+20)) << 1)));
!     length = paramlen + 2 + datalen;
! 
  
      for (i=0;i < length; i+=16)
      {
--- 9699,9710 ----
  
      osi_Log0(smb_logp, "*** SMB packet dump ***");
  
+     smbp = (smb_t *) packet->data;
      vp = (BYTE *) packet->data;
  
!     paramlen = smbp->wct * 2;
!     datalen = *((WORD *) (smbp->vdata + paramlen));
!     length = sizeof(*smbp) + paramlen + 1 + datalen;
  
      for (i=0;i < length; i+=16)
      {
***************
*** 9891,9898 ****
          {
              sprintf(output, "%s -- smb_fidp=0x%p, refCount=%d, fid=%d, vcp=0x%p, scp=0x%p, ioctlp=0x%p, NTopen_pathp=%s, NTopen_wholepathp=%s\r\n", 
                       cookie, fidp, fidp->refCount, fidp->fid, fidp->vcp, fidp->scp, fidp->ioctlp, 
!                      fidp->NTopen_pathp ? fidp->NTopen_pathp : "NULL", 
!                      fidp->NTopen_wholepathp ? fidp->NTopen_wholepathp : "NULL");
              WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
          }
        
--- 9779,9786 ----
          {
              sprintf(output, "%s -- smb_fidp=0x%p, refCount=%d, fid=%d, vcp=0x%p, scp=0x%p, ioctlp=0x%p, NTopen_pathp=%s, NTopen_wholepathp=%s\r\n", 
                       cookie, fidp, fidp->refCount, fidp->fid, fidp->vcp, fidp->scp, fidp->ioctlp, 
!                     fidp->NTopen_pathp ? fidp->NTopen_pathp : _C("NULL"), 
!                     fidp->NTopen_wholepathp ? fidp->NTopen_wholepathp : _C("NULL"));
              WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
          }
        
***************
*** 9921,9928 ****
          {
              sprintf(output, "%s -- smb_fidp=0x%p, refCount=%d, fid=%d, vcp=0x%p, scp=0x%p, ioctlp=0x%p, NTopen_pathp=%s, NTopen_wholepathp=%s\r\n", 
                       cookie, fidp, fidp->refCount, fidp->fid, fidp->vcp, fidp->scp, fidp->ioctlp, 
!                      fidp->NTopen_pathp ? fidp->NTopen_pathp : "NULL", 
!                      fidp->NTopen_wholepathp ? fidp->NTopen_wholepathp : "NULL");
              WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
          }
        
--- 9809,9816 ----
          {
              sprintf(output, "%s -- smb_fidp=0x%p, refCount=%d, fid=%d, vcp=0x%p, scp=0x%p, ioctlp=0x%p, NTopen_pathp=%s, NTopen_wholepathp=%s\r\n", 
                       cookie, fidp, fidp->refCount, fidp->fid, fidp->vcp, fidp->scp, fidp->ioctlp, 
!                     fidp->NTopen_pathp ? fidp->NTopen_pathp : _C("NULL"), 
!                     fidp->NTopen_wholepathp ? fidp->NTopen_wholepathp : _C("NULL"));
              WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL);
          }
        
Index: openafs/src/WINNT/afsd/smb.h
diff -c openafs/src/WINNT/afsd/smb.h:1.41.2.27 openafs/src/WINNT/afsd/smb.h:1.41.2.32
*** openafs/src/WINNT/afsd/smb.h:1.41.2.27	Thu Feb 28 12:17:16 2008
--- openafs/src/WINNT/afsd/smb.h	Thu Jun 26 12:38:31 2008
***************
*** 10,25 ****
  #ifndef __SMB_H_ENV__
  #define __SMB_H_ENV__ 1
  
- #ifdef DJGPP
- #include "netbios95.h"
- #endif /* DJGPP */
- 
  #if _WIN32_WINNT < 0x0501
  #undef _WIN32_WINNT
  #define _WIN32_WINNT 0x0501
  #endif
  #include <ntsecapi.h>
  
  /* Support largefiles by default */
  #define AFS_LARGEFILES
  
--- 10,23 ----
  #ifndef __SMB_H_ENV__
  #define __SMB_H_ENV__ 1
  
  #if _WIN32_WINNT < 0x0501
  #undef _WIN32_WINNT
  #define _WIN32_WINNT 0x0501
  #endif
  #include <ntsecapi.h>
  
+ #include <cm_nls.h>
+ 
  /* Support largefiles by default */
  #define AFS_LARGEFILES
  
***************
*** 51,57 ****
  #define SMB_FLAGS_CANONICAL_PATHNAMES      0x10
  #define SMB_FLAGS_REQUEST_OPLOCK           0x20
  #define SMB_FLAGS_REQUEST_BATCH_OPLOCK     0x40
! #define SMB_FLAGS_SERVER_TO_CLIENT         0x80           
  
  /* flg2 values */
  
--- 49,55 ----
  #define SMB_FLAGS_CANONICAL_PATHNAMES      0x10
  #define SMB_FLAGS_REQUEST_OPLOCK           0x20
  #define SMB_FLAGS_REQUEST_BATCH_OPLOCK     0x40
! #define SMB_FLAGS_SERVER_TO_CLIENT         0x80
  
  /* flg2 values */
  
***************
*** 68,73 ****
--- 66,72 ----
  
  #define KNOWS_LONG_NAMES(inp) ((((smb_t *)inp)->flg2 & SMB_FLAGS2_KNOWS_LONG_NAMES)?1:0)
  #define WANTS_DFS_PATHNAMES(inp) ((((smb_t *)inp)->flg2 & SMB_FLAGS2_DFS_PATHNAMES)?1:0)
+ #define WANTS_UNICODE(inp) ((((smb_t *)inp)->flg2 & SMB_FLAGS2_UNICODE)?1:0)
  
  /* Information Levels */
  #define SMB_INFO_STANDARD               1
***************
*** 129,134 ****
--- 128,135 ----
  #define SMB_PACKETSIZE	32768 /* was 8400 */
  /* raw mode is considered obsolete and cannot be used with message signing */
  #define SMB_MAXRAWSIZE  65536
+ /* max STRING characters per packet per request */
+ #define SMB_STRINGBUFSIZE 4096
  
  /* Negotiate protocol constants */
  /* Security */
***************
*** 190,199 ****
      unsigned char oddByte;
      unsigned short ncb_length;
      unsigned char flags;
! #ifdef DJGPP
!     dos_ptr dos_pkt;
!     unsigned int dos_pkt_sel;
! #endif /* DJGPP */
  } smb_packet_t;
  
  /* smb_packet flags */
--- 191,197 ----
      unsigned char oddByte;
      unsigned short ncb_length;
      unsigned char flags;
!     cm_space_t *stringsp;               /* decoded strings from this packet */
  } smb_packet_t;
  
  /* smb_packet flags */
***************
*** 206,216 ****
      NCB ncb;			        /* ncb to use */
      struct myncb *nextp;		/* when on free list */
      long magic;
- #ifdef DJGPP
-     dos_ptr dos_ncb;
-     smb_packet_t *orig_pkt;
-     unsigned int dos_ncb_sel;
- #endif /* DJGPP */
  } smb_ncb_t;
  
  /* structures representing environments from kernel / SMB network.
--- 204,209 ----
***************
*** 235,241 ****
      struct smb_user *usersp;	        /* the first child in the user session list */
      struct smb_fid *fidsp;		/* the first child in the open file list */
      unsigned char errorCount;
!     char rname[17];
      int lana;
      char encKey[MSV1_0_CHALLENGE_LENGTH]; /* MSV1_0_CHALLENGE_LENGTH is 8 */
      void * secCtx;                      /* security context when negotiating SMB extended auth
--- 228,234 ----
      struct smb_user *usersp;	        /* the first child in the user session list */
      struct smb_fid *fidsp;		/* the first child in the open file list */
      unsigned char errorCount;
!     clientchar_t rname[17];
      int lana;
      char encKey[MSV1_0_CHALLENGE_LENGTH]; /* MSV1_0_CHALLENGE_LENGTH is 8 */
      void * secCtx;                      /* security context when negotiating SMB extended auth
***************
*** 255,260 ****
--- 248,254 ----
  #define SMB_VCFLAG_SESSX_RCVD	0x40	/* we received at least one session setups on this vc */
  #define SMB_VCFLAG_AUTH_IN_PROGRESS 0x80 /* a SMB NT extended authentication is in progress */
  #define SMB_VCFLAG_CLEAN_IN_PROGRESS 0x100
+ #define SMB_VCFLAG_USEUNICODE   0x200   /* une UNICODE for STRING fields (NTLM 0.12 or later) */
  
  /* one per user session */
  typedef struct smb_user {
***************
*** 265,271 ****
      unsigned short userID;		/* the session identifier */
      struct smb_vc *vcp;		        /* back ptr to virtual circuit */
      struct smb_username *unp;           /* user name struct */
!     afs_uint32	delete;			/* ok to del: locked by smb_rctLock */
  } smb_user_t;
  
  #define SMB_USERFLAG_DELETE	    1	/* delete struct when ref count zero */
--- 259,265 ----
      unsigned short userID;		/* the session identifier */
      struct smb_vc *vcp;		        /* back ptr to virtual circuit */
      struct smb_username *unp;           /* user name struct */
!     afs_uint32	deleteOk;		/* ok to del: locked by smb_rctLock */
  } smb_user_t;
  
  #define SMB_USERFLAG_DELETE	    1	/* delete struct when ref count zero */
***************
*** 276,283 ****
      long flags;			        /* flags; locked by mx */
      osi_mutex_t mx;
      struct cm_user *userp;		/* CM user structure */
!     char *name;			        /* user name */
!     char *machine;                      /* machine name */
      time_t last_logoff_t;		/* most recent logoff time */
  } smb_username_t;
  
--- 270,277 ----
      long flags;			        /* flags; locked by mx */
      osi_mutex_t mx;
      struct cm_user *userp;		/* CM user structure */
!     clientchar_t *name;                 /* user name */
!     clientchar_t *machine;              /* machine name */
      time_t last_logoff_t;		/* most recent logoff time */
  } smb_username_t;
  
***************
*** 310,317 ****
      struct smb_vc *vcp;		        /* back ptr */
      struct cm_user *userp;		/* user logged in at the
  					 * tree connect level (base) */
!     char *pathname;			/* pathname derived from sharename */
!     afs_uint32	delete;			/* ok to del: locked by smb_rctLock */
  } smb_tid_t;
  
  #define SMB_TIDFLAG_IPC		1 	/* IPC$ */
--- 304,311 ----
      struct smb_vc *vcp;		        /* back ptr */
      struct cm_user *userp;		/* user logged in at the
  					 * tree connect level (base) */
!     clientchar_t *pathname;             /* pathname derived from sharename */
!     afs_uint32	deleteOk;		/* ok to del: locked by smb_rctLock */
  } smb_tid_t;
  
  #define SMB_TIDFLAG_IPC		1 	/* IPC$ */
***************
*** 326,361 ****
      struct smb_tid *tidp;		/* back ptr */
  } smb_pid_t;
  
! /* ioctl parameter, while being assembled and/or processed */
! typedef struct smb_ioctl {
!     /* input side */
!     char *inDatap;			/* ioctl func's current position
! 					 * in input parameter block */
!     char *inAllocp;			/* allocated input parameter block */
!     afs_uint32 inCopied;			/* # of input bytes copied in so far
! 					 * by write calls */
!     cm_space_t *prefix;		        /* prefix for subst drives */
!     char *tidPathp;			/* Pathname associated with Tree ID */
! 
!     /* output side */
!     char *outDatap;			/* output results assembled so far */
!     char *outAllocp;		        /* output results assembled so far */
!     afs_uint32 outCopied;		/* # of output bytes copied back so far
!                                          * by read calls */
! 	
!     /* flags */
!     afs_uint32 flags;
! 
!     /* fid pointer */
!     struct smb_fid *fidp;
! 
!     /* uid pointer */
!     smb_user_t *uidp;
! } smb_ioctl_t;
! 
! /* flags for smb_ioctl_t */
! #define SMB_IOCTLFLAG_DATAIN	1	/* reading data from client to server */
! #define SMB_IOCTLFLAG_LOGON	2	/* got tokens from integrated logon */
  
  /* one per file ID; these are really file descriptors */
  typedef struct smb_fid {
--- 320,328 ----
      struct smb_tid *tidp;		/* back ptr */
  } smb_pid_t;
  
! 
! /* Defined in smb_ioctl.h */
! struct smb_ioctl;
  
  /* one per file ID; these are really file descriptors */
  typedef struct smb_fid {
***************
*** 371,390 ****
                                             the file if session is
                                             terminated) */
      osi_hyper_t offset;			/* our file pointer */
!     smb_ioctl_t *ioctlp;		/* ptr to ioctl structure */
  					/* Under NT, we may need to know the
  					 * parent directory and pathname used
  					 * to open the file, either to delete
  					 * the file on close, or to do a
  					 * change notification */
      struct cm_scache *NTopen_dscp;	/* parent directory (NT) */
!     char *NTopen_pathp;		        /* path used in open (NT) */
!     char *NTopen_wholepathp;	        /* entire path, not just last name */
      int curr_chunk;			/* chunk being read */
      int prev_chunk;			/* previous chunk read */
      int raw_writers;		        /* pending async raw writes */
      EVENT_HANDLE raw_write_event;	/* signal this when raw_writers zero */
!     afs_uint32	delete;			/* ok to del: locked by smb_rctLock */
  } smb_fid_t;
  
  #define SMB_FID_OPENREAD_LISTDIR	1	/* open for reading / listing directory */
--- 338,357 ----
                                             the file if session is
                                             terminated) */
      osi_hyper_t offset;			/* our file pointer */
!     struct smb_ioctl *ioctlp;		/* ptr to ioctl structure */
  					/* Under NT, we may need to know the
  					 * parent directory and pathname used
  					 * to open the file, either to delete
  					 * the file on close, or to do a
  					 * change notification */
      struct cm_scache *NTopen_dscp;	/* parent directory (NT) */
!     clientchar_t *NTopen_pathp;		/* path used in open (NT) */
!     clientchar_t *NTopen_wholepathp;	/* entire path, not just last name */
      int curr_chunk;			/* chunk being read */
      int prev_chunk;			/* previous chunk read */
      int raw_writers;		        /* pending async raw writes */
      EVENT_HANDLE raw_write_event;	/* signal this when raw_writers zero */
!     afs_uint32	deleteOk;		/* ok to del: locked by smb_rctLock */
  } smb_fid_t;
  
  #define SMB_FID_OPENREAD_LISTDIR	1	/* open for reading / listing directory */
***************
*** 460,468 ****
  					 * locked by smb_globalLock */
      unsigned short attribute;	        /* search attribute
  					 * (used for extended protocol) */
!     char tidPath[256];                  /* tid path */
!     char relPath[1024];                 /* relative path */        
!     char mask[256];			/* search mask for V3 */
  } smb_dirSearch_t;
  
  #define SMB_DIRSEARCH_DELETE	1	/* delete struct when ref count zero */
--- 427,435 ----
  					 * locked by smb_globalLock */
      unsigned short attribute;	        /* search attribute
  					 * (used for extended protocol) */
!     clientchar_t tidPath[256];          /* tid path */
!     clientchar_t relPath[1024];         /* relative path */        
!     clientchar_t mask[256];	        /* search mask for V3 */
  } smb_dirSearch_t;
  
  #define SMB_DIRSEARCH_DELETE	1	/* delete struct when ref count zero */
***************
*** 473,479 ****
  /* type for patching directory listings */
  typedef struct smb_dirListPatch {
      osi_queue_t q;
!     char *dptr;		                /* ptr to attr, time, data, sizel, sizeh */
      long flags;                         /* flags.  See below */
      cm_fid_t fid;
      cm_dirEntry_t *dep;                 /* temp */
--- 440,446 ----
  /* type for patching directory listings */
  typedef struct smb_dirListPatch {
      osi_queue_t q;
!     char *dptr;                      /* ptr to attr, time, data, sizel, sizeh */
      long flags;                         /* flags.  See below */
      cm_fid_t fid;
      cm_dirEntry_t *dep;                 /* temp */
***************
*** 532,543 ****
  
  /* prototypes */
  
! extern void smb_Init(osi_log_t *logp, int useV3,
! 	int nThreads
! #ifndef DJGPP
!         , void *aMBfunc
! #endif
!   );
  
  extern void smb_LargeSearchTimeFromUnixTime(FILETIME *largeTimep, time_t unixTime);
  
--- 499,505 ----
  
  /* prototypes */
  
! extern void smb_Init(osi_log_t *logp, int useV3, int nThreads, void *aMBfunc);
  
  extern void smb_LargeSearchTimeFromUnixTime(FILETIME *largeTimep, time_t unixTime);
  
***************
*** 569,577 ****
  
  extern smb_user_t *smb_FindUID(smb_vc_t *vcp, unsigned short uid, int flags);
  
! extern smb_username_t *smb_FindUserByName(char *usern, char *machine, afs_uint32 flags);
  
! extern smb_user_t *smb_FindUserByNameThisSession(smb_vc_t *vcp, char *usern); 
  
  extern void smb_ReleaseUsername(smb_username_t *unp);
  
--- 531,541 ----
  
  extern smb_user_t *smb_FindUID(smb_vc_t *vcp, unsigned short uid, int flags);
  
! extern smb_username_t *smb_FindUserByName(clientchar_t *usern, clientchar_t *machine, afs_uint32 flags);
  
! extern cm_user_t *smb_FindCMUserByName(clientchar_t *usern, clientchar_t *machine, afs_uint32 flags);
! 
! extern smb_user_t *smb_FindUserByNameThisSession(smb_vc_t *vcp, clientchar_t *usern); 
  
  extern void smb_ReleaseUsername(smb_username_t *unp);
  
***************
*** 583,589 ****
  
  extern cm_user_t *smb_GetUserFromUID(smb_user_t *uidp);
  
! extern long smb_LookupTIDPath(smb_vc_t *vcp, unsigned short tid, char ** tidPathp);
  
  extern smb_fid_t *smb_FindFID(smb_vc_t *vcp, unsigned short fid, int flags);
  
--- 547,553 ----
  
  extern cm_user_t *smb_GetUserFromUID(smb_user_t *uidp);
  
! extern long smb_LookupTIDPath(smb_vc_t *vcp, unsigned short tid, clientchar_t ** tidPathp);
  
  extern smb_fid_t *smb_FindFID(smb_vc_t *vcp, unsigned short fid, int flags);
  
***************
*** 596,604 ****
  extern long smb_CloseFID(smb_vc_t *vcp, smb_fid_t *fidp, cm_user_t *userp,
                           afs_uint32 dosTime);
  
! extern int smb_FindShare(smb_vc_t *vcp, smb_user_t *uidp, char *shareName, char **pathNamep);
  
! extern int smb_FindShareCSCPolicy(char *shareName);
  
  extern smb_dirSearch_t *smb_FindDirSearchNL(long cookie);
  
--- 560,568 ----
  extern long smb_CloseFID(smb_vc_t *vcp, smb_fid_t *fidp, cm_user_t *userp,
                           afs_uint32 dosTime);
  
! extern int smb_FindShare(smb_vc_t *vcp, smb_user_t *uidp, clientchar_t *shareName, clientchar_t **pathNamep);
  
! extern int smb_FindShareCSCPolicy(clientchar_t *shareName);
  
  extern smb_dirSearch_t *smb_FindDirSearchNL(long cookie);
  
***************
*** 634,646 ****
  
  extern void smb_SetSMBParmByte(smb_packet_t *smbp, int slot, unsigned int parmValue);
  
! extern void smb_StripLastComponent(char *outPathp, char **lastComponentp,
! 	char *inPathp);
  
! extern unsigned char *smb_ParseASCIIBlock(unsigned char *inp, char **chainpp);
  
  extern unsigned char *smb_ParseVblBlock(unsigned char *inp, char **chainpp,
! 	int *lengthp);
  
  extern smb_packet_t *smb_GetResponsePacket(smb_vc_t *vcp, smb_packet_t *inp);
  
--- 598,633 ----
  
  extern void smb_SetSMBParmByte(smb_packet_t *smbp, int slot, unsigned int parmValue);
  
! extern void smb_StripLastComponent(clientchar_t *outPathp, clientchar_t **lastComponentp,
! 	clientchar_t *inPathp);
! 
! #define SMB_STRF_FORCEASCII (1<<0)
! #define SMB_STRF_ANSIPATH   (1<<1)
! #define SMB_STRF_IGNORENULL (1<<2)
! 
! extern clientchar_t *smb_ParseASCIIBlock(smb_packet_t * pktp, unsigned char *inp,
!                                          char **chainpp, int flags);
! 
! extern clientchar_t *smb_ParseString(smb_packet_t * pktp, unsigned char * inp,
!                                      char ** chainpp, int flags);
  
! extern clientchar_t *smb_ParseStringBuf(const unsigned char * bufbase,
!                                         cm_space_t ** stringspp,
!                                         unsigned char *inp, size_t *pcb_max,
!                                         char **chainpp, int flags);
! 
! extern clientchar_t *smb_ParseStringCb(smb_packet_t * pktp, unsigned char * inp,
!                                        size_t cb, char ** chainpp, int flags);
! 
! extern clientchar_t *smb_ParseStringCch(smb_packet_t * pktp, unsigned char * inp,
!                                         size_t cch, char ** chainpp, int flags);
! 
! extern unsigned char * smb_UnparseString(smb_packet_t * pktp, unsigned char * outp,
!                                    clientchar_t * str,
!                                    size_t * plen, int flags);
  
  extern unsigned char *smb_ParseVblBlock(unsigned char *inp, char **chainpp,
!                                   int *lengthp);
  
  extern smb_packet_t *smb_GetResponsePacket(smb_vc_t *vcp, smb_packet_t *inp);
  
***************
*** 672,678 ****
  
  extern int smb_StoreAnsiFilenames;
  extern int smb_hideDotFiles;
! extern unsigned int smb_IsDotFile(char *lastComp);
  extern afs_uint32 smb_AsyncStore;
  extern afs_uint32 smb_AsyncStoreSize;
  
--- 659,665 ----
  
  extern int smb_StoreAnsiFilenames;
  extern int smb_hideDotFiles;
! extern unsigned int smb_IsDotFile(clientchar_t *lastComp);
  extern afs_uint32 smb_AsyncStore;
  extern afs_uint32 smb_AsyncStoreSize;
  
***************
*** 685,698 ****
  
  extern HANDLE smb_lsaHandle; /* LSA handle obtained during smb_init if using SMB auth */
  extern ULONG smb_lsaSecPackage; /* LSA security package id. Set during smb_init */
! extern char smb_ServerDomainName[];
  extern int smb_ServerDomainNameLength;
! extern char smb_ServerOS[];
  extern int smb_ServerOSLength;
! extern char smb_ServerLanManager[];
  extern int smb_ServerLanManagerLength;
  extern GUID smb_ServerGUID;
  extern LSA_STRING smb_lsaLogonOrigin;
  
  /* used for getting a challenge for SMB auth */
  typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST {  
--- 672,686 ----
  
  extern HANDLE smb_lsaHandle; /* LSA handle obtained during smb_init if using SMB auth */
  extern ULONG smb_lsaSecPackage; /* LSA security package id. Set during smb_init */
! extern clientchar_t smb_ServerDomainName[];
  extern int smb_ServerDomainNameLength;
! extern clientchar_t smb_ServerOS[];
  extern int smb_ServerOSLength;
! extern clientchar_t smb_ServerLanManager[];
  extern int smb_ServerLanManagerLength;
  extern GUID smb_ServerGUID;
  extern LSA_STRING smb_lsaLogonOrigin;
+ extern LONG smb_UseUnicode;
  
  /* used for getting a challenge for SMB auth */
  typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST {  
***************
*** 705,713 ****
  } MSV1_0_LM20_CHALLENGE_RESPONSE, *PMSV1_0_LM20_CHALLENGE_RESPONSE;
  /**/
  
! extern long smb_AuthenticateUserLM(smb_vc_t *vcp, char * accountName, char * primaryDomain, char * ciPwd, unsigned ciPwdLength, char * csPwd, unsigned csPwdLength);
  
! extern long smb_GetNormalizedUsername(char * usern, const char * accountName, const char * domainName);
  
  extern void smb_FormatResponsePacket(smb_vc_t *vcp, smb_packet_t *inp,
  	smb_packet_t *op);
--- 693,701 ----
  } MSV1_0_LM20_CHALLENGE_RESPONSE, *PMSV1_0_LM20_CHALLENGE_RESPONSE;
  /**/
  
! extern long smb_AuthenticateUserLM(smb_vc_t *vcp, clientchar_t * accountName, clientchar_t * primaryDomain, char * ciPwd, unsigned ciPwdLength, char * csPwd, unsigned csPwdLength);
  
! extern long smb_GetNormalizedUsername(clientchar_t * usern, const clientchar_t * accountName, const clientchar_t * domainName);
  
  extern void smb_FormatResponsePacket(smb_vc_t *vcp, smb_packet_t *inp,
  	smb_packet_t *op);
***************
*** 724,756 ****
  
  extern unsigned char *smb_ParseDataBlock(unsigned char *inp, char **chainpp, int *lengthp);
  
- extern unsigned char *smb_ParseASCIIBlock(unsigned char *inp, char **chainpp);
- 
  extern unsigned char *smb_ParseVblBlock(unsigned char *inp, char **chainpp, int *lengthp);
  
  extern int smb_SUser(cm_user_t *userp);
  
- #ifndef DJGPP
  long smb_WriteData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count, char *op,
  	cm_user_t *userp, long *writtenp);
- #else /* DJGPP */
- long smb_WriteData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count, char *op,
- 	cm_user_t *userp, long *writtenp, int dosflag);
- #endif /* !DJGPP */
  
- #ifndef DJGPP
  extern long smb_ReadData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count,
  	char *op, cm_user_t *userp, long *readp);
- #else /* DJGPP */
- extern long smb_ReadData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count,
- 	char *op, cm_user_t *userp, long *readp, int dosflag);
- #endif /* !DJGPP */
  
! extern long smb_Rename(smb_vc_t *vcp, smb_packet_t *inp, char *oldPathp, char *newPathp, int attrs);
  
! extern long smb_Link(smb_vc_t *vcp, smb_packet_t *inp, char *oldPathp, char *newPathp);
  
! extern BOOL smb_IsLegalFilename(char *filename);
  
  extern char *smb_GetSharename(void);
  
--- 712,732 ----
  
  extern unsigned char *smb_ParseDataBlock(unsigned char *inp, char **chainpp, int *lengthp);
  
  extern unsigned char *smb_ParseVblBlock(unsigned char *inp, char **chainpp, int *lengthp);
  
  extern int smb_SUser(cm_user_t *userp);
  
  long smb_WriteData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count, char *op,
  	cm_user_t *userp, long *writtenp);
  
  extern long smb_ReadData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count,
  	char *op, cm_user_t *userp, long *readp);
  
! extern long smb_Rename(smb_vc_t *vcp, smb_packet_t *inp, clientchar_t *oldPathp, clientchar_t *newPathp, int attrs);
  
! extern long smb_Link(smb_vc_t *vcp, smb_packet_t *inp, clientchar_t *oldPathp, clientchar_t *newPathp);
  
! extern BOOL smb_IsLegalFilename(clientchar_t *filename);
  
  extern char *smb_GetSharename(void);
  
***************
*** 776,782 ****
  #include "smb_ioctl.h"
  #include "smb_iocons.h"
  
! cm_user_t *smb_FindOrCreateUser(smb_vc_t *vcp, char *usern);
  
  #ifdef NOTSERVICE
  extern void smb_LogPacket(smb_packet_t *packet);
--- 752,762 ----
  #include "smb_ioctl.h"
  #include "smb_iocons.h"
  
! cm_user_t *smb_FindOrCreateUser(smb_vc_t *vcp, clientchar_t *usern);
! 
! int smb_DumpVCP(FILE *outputFile, char *cookie, int lock);
! 
! void smb_Shutdown(void);
  
  #ifdef NOTSERVICE
  extern void smb_LogPacket(smb_packet_t *packet);
Index: openafs/src/WINNT/afsd/smb3.c
diff -c openafs/src/WINNT/afsd/smb3.c:1.95.2.58 openafs/src/WINNT/afsd/smb3.c:1.95.2.66
*** openafs/src/WINNT/afsd/smb3.c:1.95.2.58	Sun Mar  9 11:25:02 2008
--- openafs/src/WINNT/afsd/smb3.c	Mon Jul 14 09:38:23 2008
***************
*** 10,16 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
  #pragma warning(push)
  #pragma warning(disable: 4005)
--- 10,15 ----
***************
*** 19,25 ****
  #include <security.h>
  #include <lmaccess.h>
  #pragma warning(pop)
- #endif /* !DJGPP */
  #include <stdlib.h>
  #include <malloc.h>
  #include <string.h>
--- 18,23 ----
***************
*** 31,36 ****
--- 29,35 ----
  #include <WINNT\afsreg.h>
  
  #include "smb.h"
+ #include <strsafe.h>
  
  extern osi_hyper_t hzero;
  
***************
*** 44,50 ****
  /* protected by the smb_globalLock */
  smb_tran2Packet_t *smb_tran2AssemblyQueuep;
  
! const char **smb_ExecutableExtensions = NULL;
  
  /* retrieve a held reference to a user structure corresponding to an incoming
   * request */
--- 43,49 ----
  /* protected by the smb_globalLock */
  smb_tran2Packet_t *smb_tran2AssemblyQueuep;
  
! const clientchar_t **smb_ExecutableExtensions = NULL;
  
  /* retrieve a held reference to a user structure corresponding to an incoming
   * request */
***************
*** 68,85 ****
   * Return boolean specifying if the path name is thought to be an 
   * executable file.  For now .exe or .dll.
   */
! afs_uint32 smb_IsExecutableFileName(const char *name)
  {
      int i, j, len;
          
      if ( smb_ExecutableExtensions == NULL || name == NULL)
          return 0;
  
!     len = (int)strlen(name);
  
      for ( i=0; smb_ExecutableExtensions[i]; i++) {
!         j = len - (int)strlen(smb_ExecutableExtensions[i]);
!         if (_stricmp(smb_ExecutableExtensions[i], &name[j]) == 0)
              return 1;
      }
  
--- 67,84 ----
   * Return boolean specifying if the path name is thought to be an 
   * executable file.  For now .exe or .dll.
   */
! afs_uint32 smb_IsExecutableFileName(const clientchar_t *name)
  {
      int i, j, len;
          
      if ( smb_ExecutableExtensions == NULL || name == NULL)
          return 0;
  
!     len = (int)cm_ClientStrLen(name);
  
      for ( i=0; smb_ExecutableExtensions[i]; i++) {
!         j = len - (int)cm_ClientStrLen(smb_ExecutableExtensions[i]);
!         if (cm_ClientStrCmpI(smb_ExecutableExtensions[i], &name[j]) == 0)
              return 1;
      }
  
***************
*** 105,112 ****
  #endif /* SPECIAL_FOLDERS */
      } else if (scp->fileType == CM_SCACHETYPE_DFSLINK) {
          attrs = SMB_ATTR_DIRECTORY | SMB_ATTR_SPARSE_FILE;
!     } else
          attrs = 0;
      /*
       * We used to mark a file RO if it was in an RO volume, but that
       * turns out to be impolitic in NT.  See defect 10007.
--- 104,114 ----
  #endif /* SPECIAL_FOLDERS */
      } else if (scp->fileType == CM_SCACHETYPE_DFSLINK) {
          attrs = SMB_ATTR_DIRECTORY | SMB_ATTR_SPARSE_FILE;
!     } else if (scp->fid.vnode & 0x1)
!         attrs = SMB_ATTR_DIRECTORY;
!     else 
          attrs = 0;
+ 
      /*
       * We used to mark a file RO if it was in an RO volume, but that
       * turns out to be impolitic in NT.  See defect 10007.
***************
*** 125,133 ****
      return attrs;
  }
  
! int smb_V3IsStarMask(char *maskp)
  {
!     char tc;
  
      while (tc = *maskp++)
          if (tc == '?' || tc == '*' || tc == '<' || tc == '>') 
--- 127,135 ----
      return attrs;
  }
  
! int smb_V3IsStarMask(clientchar_t *maskp)
  {
!     clientchar_t tc;
  
      while (tc = *maskp++)
          if (tc == '?' || tc == '*' || tc == '<' || tc == '>') 
***************
*** 135,163 ****
      return 0;
  }
  
! unsigned char *smb_ParseString(unsigned char *inp, char **chainpp)
! {
!     if (chainpp) {
!         /* skip over null-terminated string */
!         *chainpp = inp + strlen(inp) + 1;
!     }
!     return inp;
! }   
! 
! void OutputDebugF(char * format, ...) {
      va_list args;
!     int len;
!     char * buffer;
  
      va_start( args, format );
!     len = _vscprintf( format, args ) // _vscprintf doesn't count
!                                + 3; // terminating '\0' + '\n'
!     buffer = malloc( len * sizeof(char) );
!     vsprintf( buffer, format, args );
!     osi_Log0(smb_logp, osi_LogSaveString(smb_logp, buffer));
!     strcat(buffer, "\n");
!     OutputDebugString(buffer);
!     free( buffer );
  }
  
  void OutputDebugHexDump(unsigned char * buffer, int len) {
--- 137,151 ----
      return 0;
  }
  
! void OutputDebugF(clientchar_t * format, ...) {
      va_list args;
!     clientchar_t vbuffer[1024];
  
      va_start( args, format );
!     cm_ClientStrPrintfV(vbuffer, lengthof(vbuffer), format, args);
!     osi_Log1(smb_logp, "%S", osi_LogSaveClientString(smb_logp, vbuffer));
!     cm_ClientStrCat(vbuffer, lengthof(vbuffer), _C("\n"));
!     OutputDebugStringW(vbuffer);
  }
  
  void OutputDebugHexDump(unsigned char * buffer, int len) {
***************
*** 165,180 ****
      char buf[256];
      static char tr[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  
!     OutputDebugF("Hexdump length [%d]",len);
  
      for (i=0;i<len;i++) {
          if(!(i%16)) {
              if(i) {
                  osi_Log1(smb_logp, "%s", osi_LogSaveString(smb_logp, buf));
!                 strcat(buf,"\r\n");
                  OutputDebugString(buf);
              }
!             sprintf(buf,"%5x",i);
              memset(buf+5,' ',80);
              buf[85] = 0;
          }
--- 153,168 ----
      char buf[256];
      static char tr[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  
!     OutputDebugF(_C("Hexdump length [%d]"),len);
  
      for (i=0;i<len;i++) {
          if(!(i%16)) {
              if(i) {
                  osi_Log1(smb_logp, "%s", osi_LogSaveString(smb_logp, buf));
!                 StringCchCatA(buf, lengthof(buf), "\r\n");
                  OutputDebugString(buf);
              }
!             StringCchPrintfA(buf, lengthof(buf), "%5x", i);
              memset(buf+5,' ',80);
              buf[85] = 0;
          }
***************
*** 192,198 ****
      }    
      if(i) {
          osi_Log1(smb_logp, "%s", osi_LogSaveString(smb_logp, buf));
!         strcat(buf,"\r\n");
          OutputDebugString(buf);
      }   
  }
--- 180,186 ----
      }    
      if(i) {
          osi_Log1(smb_logp, "%s", osi_LogSaveString(smb_logp, buf));
!         StringCchCatA(buf, lengthof(buf), "\r\n");
          OutputDebugString(buf);
      }   
  }
***************
*** 211,217 ****
      *secBlob = NULL;
      *secBlobLength = 0;
  
!     OutputDebugF("Negotiating Extended Security");
  
      status = AcquireCredentialsHandle( NULL,
                                         SMB_EXT_SEC_PACKAGE_NAME,
--- 199,205 ----
      *secBlob = NULL;
      *secBlobLength = 0;
  
!     OutputDebugF(_C("Negotiating Extended Security"));
  
      status = AcquireCredentialsHandle( NULL,
                                         SMB_EXT_SEC_PACKAGE_NAME,
***************
*** 225,231 ****
  
      if (status != SEC_E_OK) {
          /* Really bad. We return an empty security blob */
!         OutputDebugF("AcquireCredentialsHandle failed with %lX", status);
          goto nes_0;
      }
  
--- 213,219 ----
  
      if (status != SEC_E_OK) {
          /* Really bad. We return an empty security blob */
!         OutputDebugF(_C("AcquireCredentialsHandle failed with %lX"), status);
          goto nes_0;
      }
  
***************
*** 251,260 ****
                                      );
  
      if (status == SEC_I_COMPLETE_NEEDED || status == SEC_I_COMPLETE_AND_CONTINUE) {
!         OutputDebugF("Completing token...");
          istatus = CompleteAuthToken(&ctx, &secOut);
          if ( istatus != SEC_E_OK )
!             OutputDebugF("Token completion failed: %x", istatus);
      }
  
      if (status == SEC_I_COMPLETE_AND_CONTINUE || status == SEC_I_CONTINUE_NEEDED) {
--- 239,248 ----
                                      );
  
      if (status == SEC_I_COMPLETE_NEEDED || status == SEC_I_COMPLETE_AND_CONTINUE) {
!         OutputDebugF(_C("Completing token..."));
          istatus = CompleteAuthToken(&ctx, &secOut);
          if ( istatus != SEC_E_OK )
!             OutputDebugF(_C("Token completion failed: %x"), istatus);
      }
  
      if (status == SEC_I_COMPLETE_AND_CONTINUE || status == SEC_I_CONTINUE_NEEDED) {
***************
*** 265,271 ****
          }
      } else {
          if ( status != SEC_E_OK )
!             OutputDebugF("AcceptSecurityContext status != CONTINUE  %lX", status);
      }
  
      /* Discard partial security context */
--- 253,259 ----
          }
      } else {
          if ( status != SEC_E_OK )
!             OutputDebugF(_C("AcceptSecurityContext status != CONTINUE  %lX"), status);
      }
  
      /* Discard partial security context */
***************
*** 287,293 ****
      void * partialToken;
  };      
  
! long smb_AuthenticateUserExt(smb_vc_t * vcp, char * usern, char * secBlobIn, int secBlobInLength, char ** secBlobOut, int * secBlobOutLength) {
      SECURITY_STATUS status, istatus;
      CredHandle creds;
      TimeStamp expiry;
--- 275,283 ----
      void * partialToken;
  };      
  
! long smb_AuthenticateUserExt(smb_vc_t * vcp, clientchar_t * usern,
!                              char * secBlobIn, int secBlobInLength,
!                              char ** secBlobOut, int * secBlobOutLength) {
      SECURITY_STATUS status, istatus;
      CredHandle creds;
      TimeStamp expiry;
***************
*** 303,309 ****
      int assembledBlobLength = 0;
      ULONG flags;
  
!     OutputDebugF("In smb_AuthenticateUserExt");
  
      *secBlobOut = NULL;
      *secBlobOutLength = 0;
--- 293,299 ----
      int assembledBlobLength = 0;
      ULONG flags;
  
!     OutputDebugF(_C("In smb_AuthenticateUserExt"));
  
      *secBlobOut = NULL;
      *secBlobOutLength = 0;
***************
*** 317,328 ****
      }
  
      if (secBlobIn) {
!         OutputDebugF("Received incoming token:");
          OutputDebugHexDump(secBlobIn,secBlobInLength);
      }
      
      if (secCtx) {
!         OutputDebugF("Continuing with existing context.");		
          creds = secCtx->creds;
          ctx = secCtx->ctx;
  
--- 307,318 ----
      }
  
      if (secBlobIn) {
!         OutputDebugF(_C("Received incoming token:"));
          OutputDebugHexDump(secBlobIn,secBlobInLength);
      }
      
      if (secCtx) {
!         OutputDebugF(_C("Continuing with existing context."));		
          creds = secCtx->creds;
          ctx = secCtx->ctx;
  
***************
*** 344,350 ****
                                             &expiry);
  
          if (status != SEC_E_OK) {
!             OutputDebugF("Can't acquire Credentials handle [%lX]", status);
              code = CM_ERROR_BADPASSWORD; /* means "try again when I'm sober" */
              goto aue_0;
          }
--- 334,340 ----
                                             &expiry);
  
          if (status != SEC_E_OK) {
!             OutputDebugF(_C("Can't acquire Credentials handle [%lX]"), status);
              code = CM_ERROR_BADPASSWORD; /* means "try again when I'm sober" */
              goto aue_0;
          }
***************
*** 386,399 ****
                                      );
  
      if (status == SEC_I_COMPLETE_NEEDED || status == SEC_I_COMPLETE_AND_CONTINUE) {
!         OutputDebugF("Completing token...");
          istatus = CompleteAuthToken(&ctx, &secBufOut);
          if ( istatus != SEC_E_OK )
!             OutputDebugF("Token completion failed: %lX", istatus);
      }
  
      if (status == SEC_I_COMPLETE_AND_CONTINUE || status == SEC_I_CONTINUE_NEEDED) {
!         OutputDebugF("Continue needed");
  
          newSecCtx = malloc(sizeof(*newSecCtx));
  
--- 376,389 ----
                                      );
  
      if (status == SEC_I_COMPLETE_NEEDED || status == SEC_I_COMPLETE_AND_CONTINUE) {
!         OutputDebugF(_C("Completing token..."));
          istatus = CompleteAuthToken(&ctx, &secBufOut);
          if ( istatus != SEC_E_OK )
!             OutputDebugF(_C("Token completion failed: %lX"), istatus);
      }
  
      if (status == SEC_I_COMPLETE_AND_CONTINUE || status == SEC_I_CONTINUE_NEEDED) {
!         OutputDebugF(_C("Continue needed"));
  
          newSecCtx = malloc(sizeof(*newSecCtx));
  
***************
*** 413,428 ****
      if ((status == SEC_I_COMPLETE_NEEDED || status == SEC_E_OK || 
            status == SEC_I_COMPLETE_AND_CONTINUE || status == SEC_I_CONTINUE_NEEDED) && 
           secTokOut.pvBuffer) {
!         OutputDebugF("Need to send token back to client");
  
          *secBlobOutLength = secTokOut.cbBuffer;
          *secBlobOut = malloc(secTokOut.cbBuffer);
          memcpy(*secBlobOut, secTokOut.pvBuffer, secTokOut.cbBuffer);
  
!         OutputDebugF("Outgoing token:");
          OutputDebugHexDump(*secBlobOut,*secBlobOutLength);
      } else if (status == SEC_E_INCOMPLETE_MESSAGE) {
!         OutputDebugF("Incomplete message");
  
          newSecCtx = malloc(sizeof(*newSecCtx));
  
--- 403,418 ----
      if ((status == SEC_I_COMPLETE_NEEDED || status == SEC_E_OK || 
            status == SEC_I_COMPLETE_AND_CONTINUE || status == SEC_I_CONTINUE_NEEDED) && 
           secTokOut.pvBuffer) {
!         OutputDebugF(_C("Need to send token back to client"));
  
          *secBlobOutLength = secTokOut.cbBuffer;
          *secBlobOut = malloc(secTokOut.cbBuffer);
          memcpy(*secBlobOut, secTokOut.pvBuffer, secTokOut.cbBuffer);
  
!         OutputDebugF(_C("Outgoing token:"));
          OutputDebugHexDump(*secBlobOut,*secBlobOutLength);
      } else if (status == SEC_E_INCOMPLETE_MESSAGE) {
!         OutputDebugF(_C("Incomplete message"));
  
          newSecCtx = malloc(sizeof(*newSecCtx));
  
***************
*** 442,493 ****
  
      if (status == SEC_E_OK || status == SEC_I_COMPLETE_NEEDED) {
          /* woo hoo! */
!         SecPkgContext_Names names;
  
!         OutputDebugF("Authentication completed");
!         OutputDebugF("Returned flags : [%lX]", flags);
  
!         if (!QueryContextAttributes(&ctx, SECPKG_ATTR_NAMES, &names)) {
!             OutputDebugF("Received name [%s]", names.sUserName);
!             strcpy(usern, names.sUserName);
!             strlwr(usern); /* in tandem with smb_GetNormalizedUsername */
              FreeContextBuffer(names.sUserName);
          } else {
              /* Force the user to retry if the context is invalid */
!             OutputDebugF("QueryContextAttributes Names failed [%x]", GetLastError());
              code = CM_ERROR_BADPASSWORD; 
          }
      } else if (!code) {
          switch ( status ) {
          case SEC_E_INVALID_TOKEN:
!             OutputDebugF("Returning bad password :: INVALID_TOKEN");
              break;
          case SEC_E_INVALID_HANDLE:
!             OutputDebugF("Returning bad password :: INVALID_HANDLE");
              break;
          case SEC_E_LOGON_DENIED:
!             OutputDebugF("Returning bad password :: LOGON_DENIED");
              break;
          case SEC_E_UNKNOWN_CREDENTIALS:
!             OutputDebugF("Returning bad password :: UNKNOWN_CREDENTIALS");
              break;
          case SEC_E_NO_CREDENTIALS:
!             OutputDebugF("Returning bad password :: NO_CREDENTIALS");
              break;
          case SEC_E_CONTEXT_EXPIRED:
!             OutputDebugF("Returning bad password :: CONTEXT_EXPIRED");
              break;
          case SEC_E_INCOMPLETE_CREDENTIALS:
!             OutputDebugF("Returning bad password :: INCOMPLETE_CREDENTIALS");
              break;
          case SEC_E_WRONG_PRINCIPAL:
!             OutputDebugF("Returning bad password :: WRONG_PRINCIPAL");
              break;
          case SEC_E_TIME_SKEW:
!             OutputDebugF("Returning bad password :: TIME_SKEW");
              break;
          default:
!             OutputDebugF("Returning bad password :: Status == %lX", status);
          }
          code = CM_ERROR_BADPASSWORD;
      }
--- 432,483 ----
  
      if (status == SEC_E_OK || status == SEC_I_COMPLETE_NEEDED) {
          /* woo hoo! */
!         SecPkgContext_NamesW names;
  
!         OutputDebugF(_C("Authentication completed"));
!         OutputDebugF(_C("Returned flags : [%lX]"), flags);
  
!         if (!QueryContextAttributesW(&ctx, SECPKG_ATTR_NAMES, &names)) {
!             OutputDebugF(_C("Received name [%s]"), names.sUserName);
!             cm_ClientStrCpy(usern, SMB_MAX_USERNAME_LENGTH, names.sUserName);
!             cm_ClientStrLwr(usern); /* in tandem with smb_GetNormalizedUsername */
              FreeContextBuffer(names.sUserName);
          } else {
              /* Force the user to retry if the context is invalid */
!             OutputDebugF(_C("QueryContextAttributes Names failed [%x]"), GetLastError());
              code = CM_ERROR_BADPASSWORD; 
          }
      } else if (!code) {
          switch ( status ) {
          case SEC_E_INVALID_TOKEN:
!             OutputDebugF(_C("Returning bad password :: INVALID_TOKEN"));
              break;
          case SEC_E_INVALID_HANDLE:
!             OutputDebugF(_C("Returning bad password :: INVALID_HANDLE"));
              break;
          case SEC_E_LOGON_DENIED:
!             OutputDebugF(_C("Returning bad password :: LOGON_DENIED"));
              break;
          case SEC_E_UNKNOWN_CREDENTIALS:
!             OutputDebugF(_C("Returning bad password :: UNKNOWN_CREDENTIALS"));
              break;
          case SEC_E_NO_CREDENTIALS:
!             OutputDebugF(_C("Returning bad password :: NO_CREDENTIALS"));
              break;
          case SEC_E_CONTEXT_EXPIRED:
!             OutputDebugF(_C("Returning bad password :: CONTEXT_EXPIRED"));
              break;
          case SEC_E_INCOMPLETE_CREDENTIALS:
!             OutputDebugF(_C("Returning bad password :: INCOMPLETE_CREDENTIALS"));
              break;
          case SEC_E_WRONG_PRINCIPAL:
!             OutputDebugF(_C("Returning bad password :: WRONG_PRINCIPAL"));
              break;
          case SEC_E_TIME_SKEW:
!             OutputDebugF(_C("Returning bad password :: TIME_SKEW"));
              break;
          default:
!             OutputDebugF(_C("Returning bad password :: Status == %lX"), status);
          }
          code = CM_ERROR_BADPASSWORD;
      }
***************
*** 529,535 ****
      TOKEN_SOURCE tsource;
  };
  
! long smb_AuthenticateUserLM(smb_vc_t *vcp, char * accountName, char * primaryDomain, char * ciPwd, unsigned ciPwdLength, char * csPwd, unsigned csPwdLength) 
  {
      NTSTATUS nts, ntsEx;
      struct Lm20AuthBlob lmAuth;
--- 519,525 ----
      TOKEN_SOURCE tsource;
  };
  
! long smb_AuthenticateUserLM(smb_vc_t *vcp, clientchar_t * accountName, clientchar_t * primaryDomain, char * ciPwd, unsigned ciPwdLength, char * csPwd, unsigned csPwdLength) 
  {
      NTSTATUS nts, ntsEx;
      struct Lm20AuthBlob lmAuth;
***************
*** 540,550 ****
      LUID lmSession;
      HANDLE lmToken;
  
!     OutputDebugF("In smb_AuthenticateUser for user [%s] domain [%s]", accountName, primaryDomain);
!     OutputDebugF("ciPwdLength is %d and csPwdLength is %d", ciPwdLength, csPwdLength);
  
      if (ciPwdLength > P_RESP_LEN || csPwdLength > P_RESP_LEN) {
!         OutputDebugF("ciPwdLength or csPwdLength is too long");
          return CM_ERROR_BADPASSWORD;
      }
  
--- 530,540 ----
      LUID lmSession;
      HANDLE lmToken;
  
!     OutputDebugF(_C("In smb_AuthenticateUser for user [%s] domain [%s]"), accountName, primaryDomain);
!     OutputDebugF(_C("ciPwdLength is %d and csPwdLength is %d"), ciPwdLength, csPwdLength);
  
      if (ciPwdLength > P_RESP_LEN || csPwdLength > P_RESP_LEN) {
!         OutputDebugF(_C("ciPwdLength or csPwdLength is too long"));
          return CM_ERROR_BADPASSWORD;
      }
  
***************
*** 553,564 ****
      lmAuth.lmlogon.MessageType = MsV1_0NetworkLogon;
  	
      lmAuth.lmlogon.LogonDomainName.Buffer = lmAuth.primaryDomainW;
!     mbstowcs(lmAuth.primaryDomainW, primaryDomain, P_LEN);
      lmAuth.lmlogon.LogonDomainName.Length = (USHORT)(wcslen(lmAuth.primaryDomainW) * sizeof(WCHAR));
      lmAuth.lmlogon.LogonDomainName.MaximumLength = P_LEN * sizeof(WCHAR);
  
      lmAuth.lmlogon.UserName.Buffer = lmAuth.accountNameW;
!     mbstowcs(lmAuth.accountNameW, accountName, P_LEN);
      lmAuth.lmlogon.UserName.Length = (USHORT)(wcslen(lmAuth.accountNameW) * sizeof(WCHAR));
      lmAuth.lmlogon.UserName.MaximumLength = P_LEN * sizeof(WCHAR);
  
--- 543,554 ----
      lmAuth.lmlogon.MessageType = MsV1_0NetworkLogon;
  	
      lmAuth.lmlogon.LogonDomainName.Buffer = lmAuth.primaryDomainW;
!     cm_ClientStringToUtf16(primaryDomain, -1, lmAuth.primaryDomainW, P_LEN);
      lmAuth.lmlogon.LogonDomainName.Length = (USHORT)(wcslen(lmAuth.primaryDomainW) * sizeof(WCHAR));
      lmAuth.lmlogon.LogonDomainName.MaximumLength = P_LEN * sizeof(WCHAR);
  
      lmAuth.lmlogon.UserName.Buffer = lmAuth.accountNameW;
!     cm_ClientStringToUtf16(accountName, -1, lmAuth.accountNameW, P_LEN);
      lmAuth.lmlogon.UserName.Length = (USHORT)(wcslen(lmAuth.accountNameW) * sizeof(WCHAR));
      lmAuth.lmlogon.UserName.MaximumLength = P_LEN * sizeof(WCHAR);
  
***************
*** 586,594 ****
      lmAuth.tgroups.Groups[0].Sid = NULL;
      lmAuth.tgroups.Groups[0].Attributes = 0;
  
      lmAuth.tsource.SourceIdentifier.HighPart = (DWORD)((LONG_PTR)vcp << 32);
      lmAuth.tsource.SourceIdentifier.LowPart = (DWORD)((LONG_PTR)vcp & _UI32_MAX);
!     strcpy(lmAuth.tsource.SourceName,"OpenAFS"); /* 8 char limit */
  
      nts = LsaLogonUser( smb_lsaHandle,
                          &smb_lsaLogonOrigin,
--- 576,589 ----
      lmAuth.tgroups.Groups[0].Sid = NULL;
      lmAuth.tgroups.Groups[0].Attributes = 0;
  
+ #ifdef _WIN64
      lmAuth.tsource.SourceIdentifier.HighPart = (DWORD)((LONG_PTR)vcp << 32);
+ #else
+     lmAuth.tsource.SourceIdentifier.HighPart = 0;
+ #endif
      lmAuth.tsource.SourceIdentifier.LowPart = (DWORD)((LONG_PTR)vcp & _UI32_MAX);
!     StringCchCopyA(lmAuth.tsource.SourceName, lengthof(lmAuth.tsource.SourceName),
!                    "OpenAFS"); /* 8 char limit */
  
      nts = LsaLogonUser( smb_lsaHandle,
                          &smb_lsaLogonOrigin,
***************
*** 609,616 ****
          osi_Log2(smb_logp,"LsaLogonUser failure: nts %u ntsEx %u",
                    nts, ntsEx);
  
!     OutputDebugF("Return from LsaLogonUser is 0x%lX", nts);
!     OutputDebugF("Extended status is 0x%lX", ntsEx);
  
      if (nts == ERROR_SUCCESS) {
          /* free the token */
--- 604,611 ----
          osi_Log2(smb_logp,"LsaLogonUser failure: nts %u ntsEx %u",
                    nts, ntsEx);
  
!     OutputDebugF(_C("Return from LsaLogonUser is 0x%lX"), nts);
!     OutputDebugF(_C("Extended status is 0x%lX"), ntsEx);
  
      if (nts == ERROR_SUCCESS) {
          /* free the token */
***************
*** 627,639 ****
  }
  
  /* The buffer pointed to by usern is assumed to be at least SMB_MAX_USERNAME_LENGTH bytes */
! long smb_GetNormalizedUsername(char * usern, const char * accountName, const char * domainName) 
  {
!     char * atsign;
!     const char * domain;
  
      /* check if we have sane input */
!     if ((strlen(accountName) + strlen(domainName) + 1) > SMB_MAX_USERNAME_LENGTH)
          return 1;
  
      /* we could get : [accountName][domainName]
--- 622,634 ----
  }
  
  /* The buffer pointed to by usern is assumed to be at least SMB_MAX_USERNAME_LENGTH bytes */
! long smb_GetNormalizedUsername(clientchar_t * usern, const clientchar_t * accountName, const clientchar_t * domainName) 
  {
!     clientchar_t * atsign;
!     const clientchar_t * domain;
  
      /* check if we have sane input */
!     if ((cm_ClientStrLen(accountName) + cm_ClientStrLen(domainName) + 1) > SMB_MAX_USERNAME_LENGTH)
          return 1;
  
      /* we could get : [accountName][domainName]
***************
*** 642,648 ****
         [user][]/[user][?]
         [][]/[][?] */
  
!     atsign = strchr(accountName, '@');
  
      if (atsign) /* [user@domain][] -> [user@domain][domain] */
          domain = atsign + 1;
--- 637,643 ----
         [user][]/[user][?]
         [][]/[][?] */
  
!     atsign = cm_ClientStrChr(accountName, '@');
  
      if (atsign) /* [user@domain][] -> [user@domain][domain] */
          domain = atsign + 1;
***************
*** 655,672 ****
          /* Empty domains and empty usernames are usually sent from tokenless contexts.
             This way such logins will get an empty username (easy to check).  I don't know 
             when a non-empty username would be supplied with an anonymous domain, but *shrug* */
!         strcpy(usern,accountName);
      else {
          /* TODO: what about WIN.MIT.EDU\user vs. WIN\user? */
!         strcpy(usern,domain);
!         strcat(usern,"\\");
          if (atsign)
!             strncat(usern,accountName,atsign - accountName);
          else
!             strcat(usern,accountName);
!     }       
  
!     strlwr(usern);
  
      return 0;
  }
--- 650,667 ----
          /* Empty domains and empty usernames are usually sent from tokenless contexts.
             This way such logins will get an empty username (easy to check).  I don't know 
             when a non-empty username would be supplied with an anonymous domain, but *shrug* */
!         cm_ClientStrCpy(usern, SMB_MAX_USERNAME_LENGTH, accountName);
      else {
          /* TODO: what about WIN.MIT.EDU\user vs. WIN\user? */
!         cm_ClientStrCpy(usern, SMB_MAX_USERNAME_LENGTH, domain);
!         cm_ClientStrCat(usern, SMB_MAX_USERNAME_LENGTH, _C("\\"));
          if (atsign)
!             cm_ClientStrCat(usern, SMB_MAX_USERNAME_LENGTH, accountName);
          else
!             cm_ClientStrCat(usern, SMB_MAX_USERNAME_LENGTH, accountName);
!     }
  
!     cm_ClientStrLwr(usern);
  
      return 0;
  }
***************
*** 678,683 ****
--- 673,679 ----
   * sending a session setup packet, which means that we can't rely on a
   * UID in subsequent packets.  Though in practice we get one anyway.
   */
+ /* SMB_COM_SESSION_SETUP_ANDX */
  long smb_ReceiveV3SessionSetupX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      char *tp;
***************
*** 685,693 ****
      unsigned short newUid;
      unsigned long caps = 0;
      smb_username_t *unp;
!     char *s1 = " ";
      long code = 0; 
!     char usern[SMB_MAX_USERNAME_LENGTH];
      char *secBlobOut = NULL;
      int  secBlobOutLength = 0;
  
--- 681,689 ----
      unsigned short newUid;
      unsigned long caps = 0;
      smb_username_t *unp;
!     clientchar_t *s1 = _C(" ");
      long code = 0; 
!     clientchar_t usern[SMB_MAX_USERNAME_LENGTH];
      char *secBlobOut = NULL;
      int  secBlobOutLength = 0;
  
***************
*** 701,707 ****
              char *secBlobIn;
              int secBlobInLength;
  
!             OutputDebugF("NT Session Setup: Extended");
          
              if (!(vcp->flags & SMB_VCFLAG_SESSX_RCVD)) {
                  caps = smb_GetSMBParm(inp,10) | (((unsigned long) smb_GetSMBParm(inp,11)) << 16);
--- 697,703 ----
              char *secBlobIn;
              int secBlobInLength;
  
!             OutputDebugF(_C("NT Session Setup: Extended"));
          
              if (!(vcp->flags & SMB_VCFLAG_SESSX_RCVD)) {
                  caps = smb_GetSMBParm(inp,10) | (((unsigned long) smb_GetSMBParm(inp,11)) << 16);
***************
*** 713,747 ****
              code = smb_AuthenticateUserExt(vcp, usern, secBlobIn, secBlobInLength, &secBlobOut, &secBlobOutLength);
  
              if (code == CM_ERROR_GSSCONTINUE) {
                  smb_SetSMBParm(outp, 2, 0);
                  smb_SetSMBParm(outp, 3, secBlobOutLength);
!                 smb_SetSMBDataLength(outp, secBlobOutLength + smb_ServerOSLength + smb_ServerLanManagerLength + smb_ServerDomainNameLength);
                  tp = smb_GetSMBData(outp, NULL);
                  if (secBlobOutLength) {
                      memcpy(tp, secBlobOut, secBlobOutLength);
                      free(secBlobOut);
                      tp += secBlobOutLength;
                  }	
!                 memcpy(tp,smb_ServerOS,smb_ServerOSLength);
!                 tp += smb_ServerOSLength;
!                 memcpy(tp,smb_ServerLanManager,smb_ServerLanManagerLength);
!                 tp += smb_ServerLanManagerLength;
!                 memcpy(tp,smb_ServerDomainName,smb_ServerDomainNameLength);
!                 tp += smb_ServerDomainNameLength;
              }
  
              /* TODO: handle return code and continue auth. Also free secBlobOut if applicable. */
          } else {
              unsigned ciPwdLength, csPwdLength;
              char *ciPwd, *csPwd;
!             char *accountName;
!             char *primaryDomain;
              int  datalen;
  
              if (smb_authType == SMB_AUTH_NTLM)
!                 OutputDebugF("NT Session Setup: NTLM");
              else
!                 OutputDebugF("NT Session Setup: None");
  
              /* TODO: parse for extended auth as well */
              ciPwdLength = smb_GetSMBParm(inp, 7); /* case insensitive password length */
--- 709,745 ----
              code = smb_AuthenticateUserExt(vcp, usern, secBlobIn, secBlobInLength, &secBlobOut, &secBlobOutLength);
  
              if (code == CM_ERROR_GSSCONTINUE) {
+                 size_t cb_data = 0;
+ 
                  smb_SetSMBParm(outp, 2, 0);
                  smb_SetSMBParm(outp, 3, secBlobOutLength);
! 
                  tp = smb_GetSMBData(outp, NULL);
                  if (secBlobOutLength) {
                      memcpy(tp, secBlobOut, secBlobOutLength);
                      free(secBlobOut);
                      tp += secBlobOutLength;
+                     cb_data += secBlobOutLength;
                  }	
!                 tp = smb_UnparseString(outp, tp, smb_ServerOS, &cb_data, 0);
!                 tp = smb_UnparseString(outp, tp, smb_ServerLanManager, &cb_data, 0);
!                 tp = smb_UnparseString(outp, tp, smb_ServerDomainName, &cb_data, 0);
! 
!                 smb_SetSMBDataLength(outp, cb_data);
              }
  
              /* TODO: handle return code and continue auth. Also free secBlobOut if applicable. */
          } else {
              unsigned ciPwdLength, csPwdLength;
              char *ciPwd, *csPwd;
!             clientchar_t *accountName;
!             clientchar_t *primaryDomain;
              int  datalen;
  
              if (smb_authType == SMB_AUTH_NTLM)
!                 OutputDebugF(_C("NT Session Setup: NTLM"));
              else
!                 OutputDebugF(_C("NT Session Setup: None"));
  
              /* TODO: parse for extended auth as well */
              ciPwdLength = smb_GetSMBParm(inp, 7); /* case insensitive password length */
***************
*** 749,768 ****
  
              tp = smb_GetSMBData(inp, &datalen);
  
!             OutputDebugF("Session packet data size [%d]",datalen);
  
              ciPwd = tp;
              tp += ciPwdLength;
              csPwd = tp;
              tp += csPwdLength;
  
!             accountName = smb_ParseString(tp, &tp);
!             primaryDomain = smb_ParseString(tp, NULL);
  
!             OutputDebugF("Account Name: %s",accountName);
!             OutputDebugF("Primary Domain: %s", primaryDomain);
!             OutputDebugF("Case Sensitive Password: %s", csPwd && csPwd[0] ? "yes" : "no");
!             OutputDebugF("Case Insensitive Password: %s", ciPwd && ciPwd[0] ? "yes" : "no");
  
              if (smb_GetNormalizedUsername(usern, accountName, primaryDomain)) {
                  /* shouldn't happen */
--- 747,768 ----
  
              tp = smb_GetSMBData(inp, &datalen);
  
!             OutputDebugF(_C("Session packet data size [%d]"),datalen);
  
              ciPwd = tp;
              tp += ciPwdLength;
              csPwd = tp;
              tp += csPwdLength;
  
!             accountName = smb_ParseString(inp, tp, &tp, 0);
!             primaryDomain = smb_ParseString(inp, tp, NULL, 0);
  
!             OutputDebugF(_C("Account Name: %s"),accountName);
!             OutputDebugF(_C("Primary Domain: %s"), primaryDomain);
!             OutputDebugF(_C("Case Sensitive Password: %s"),
!                          csPwd && csPwd[0] ? _C("yes") : _C("no"));
!             OutputDebugF(_C("Case Insensitive Password: %s"),
!                          ciPwd && ciPwd[0] ? _C("yes") : _C("no"));
  
              if (smb_GetNormalizedUsername(usern, accountName, primaryDomain)) {
                  /* shouldn't happen */
***************
*** 778,815 ****
              if (smb_authType == SMB_AUTH_NTLM) {
                  code = smb_AuthenticateUserLM(vcp, accountName, primaryDomain, ciPwd, ciPwdLength, csPwd, csPwdLength);
                  if ( code )
!                     OutputDebugF("LM authentication failed [%d]", code);
                  else
!                     OutputDebugF("LM authentication succeeded");
              }
          }
      }  else { /* V3 */
          unsigned ciPwdLength;
          char *ciPwd;
!         char *accountName;
!         char *primaryDomain;
  
          switch ( smb_authType ) {
          case SMB_AUTH_EXTENDED:
!             OutputDebugF("V3 Session Setup: Extended");
              break;
          case SMB_AUTH_NTLM:
!             OutputDebugF("V3 Session Setup: NTLM");
              break;
          default:
!             OutputDebugF("V3 Session Setup: None");
          }
          ciPwdLength = smb_GetSMBParm(inp, 7);
          tp = smb_GetSMBData(inp, NULL);
          ciPwd = tp;
          tp += ciPwdLength;
  
!         accountName = smb_ParseString(tp, &tp);
!         primaryDomain = smb_ParseString(tp, NULL);
  
!         OutputDebugF("Account Name: %s",accountName);
!         OutputDebugF("Primary Domain: %s", primaryDomain);
!         OutputDebugF("Case Insensitive Password: %s", ciPwd && ciPwd[0] ? "yes" : "no");
  
          if ( smb_GetNormalizedUsername(usern, accountName, primaryDomain)) {
              /* shouldn't happen */
--- 778,815 ----
              if (smb_authType == SMB_AUTH_NTLM) {
                  code = smb_AuthenticateUserLM(vcp, accountName, primaryDomain, ciPwd, ciPwdLength, csPwd, csPwdLength);
                  if ( code )
!                     OutputDebugF(_C("LM authentication failed [%d]"), code);
                  else
!                     OutputDebugF(_C("LM authentication succeeded"));
              }
          }
      }  else { /* V3 */
          unsigned ciPwdLength;
          char *ciPwd;
!         clientchar_t *accountName;
!         clientchar_t *primaryDomain;
  
          switch ( smb_authType ) {
          case SMB_AUTH_EXTENDED:
!             OutputDebugF(_C("V3 Session Setup: Extended"));
              break;
          case SMB_AUTH_NTLM:
!             OutputDebugF(_C("V3 Session Setup: NTLM"));
              break;
          default:
!             OutputDebugF(_C("V3 Session Setup: None"));
          }
          ciPwdLength = smb_GetSMBParm(inp, 7);
          tp = smb_GetSMBData(inp, NULL);
          ciPwd = tp;
          tp += ciPwdLength;
  
!         accountName = smb_ParseString(inp, tp, &tp, 0);
!         primaryDomain = smb_ParseString(inp, tp, NULL, 0);
  
!         OutputDebugF(_C("Account Name: %s"),accountName);
!         OutputDebugF(_C("Primary Domain: %s"), primaryDomain);
!         OutputDebugF(_C("Case Insensitive Password: %s"), ciPwd && ciPwd[0] ? _C("yes") : _C("no"));
  
          if ( smb_GetNormalizedUsername(usern, accountName, primaryDomain)) {
              /* shouldn't happen */
***************
*** 823,831 ****
          if (smb_authType == SMB_AUTH_NTLM || smb_authType == SMB_AUTH_EXTENDED) {
              code = smb_AuthenticateUserLM(vcp,accountName,primaryDomain,ciPwd,ciPwdLength,"",0);
              if ( code )
!                 OutputDebugF("LM authentication failed [%d]", code);
              else
!                 OutputDebugF("LM authentication succeeded");
          }
      }
  
--- 823,831 ----
          if (smb_authType == SMB_AUTH_NTLM || smb_authType == SMB_AUTH_EXTENDED) {
              code = smb_AuthenticateUserLM(vcp,accountName,primaryDomain,ciPwd,ciPwdLength,"",0);
              if ( code )
!                 OutputDebugF(_C("LM authentication failed [%d]"), code);
              else
!                 OutputDebugF(_C("LM authentication succeeded"));
          }
      }
  
***************
*** 838,843 ****
--- 838,849 ----
          if (caps & NTNEGOTIATE_CAPABILITY_NTSTATUS) {
              vcp->flags |= SMB_VCFLAG_STATUS32;
          }       
+ 
+ #ifdef SMB_UNICODE
+         if ((caps & NTNEGOTIATE_CAPABILITY_UNICODE) && smb_UseUnicode) {
+             vcp->flags |= SMB_VCFLAG_USEUNICODE;
+         }
+ #endif
          lock_ReleaseMutex(&vcp->mx);
      }
  
***************
*** 849,855 ****
          return code;
      }
  
!     OutputDebugF("Received username=[%s]", usern);
  
      /* On Windows 2000, this function appears to be called more often than
         it is expected to be called. This resulted in multiple smb_user_t
--- 855,861 ----
          return code;
      }
  
!     OutputDebugF(_C("Received username=[%s]"), usern);
  
      /* On Windows 2000, this function appears to be called more often than
         it is expected to be called. This resulted in multiple smb_user_t
***************
*** 890,896 ****
  	lock_ObtainMutex(&vcp->mx);
          if (!vcp->uidCounter)
              vcp->uidCounter++; /* handle unlikely wraparounds */
!         newUid = (strlen(usern)==0)?0:vcp->uidCounter++;
          lock_ReleaseMutex(&vcp->mx);
  
          /* Create a new smb_user_t structure and connect them up */
--- 896,902 ----
  	lock_ObtainMutex(&vcp->mx);
          if (!vcp->uidCounter)
              vcp->uidCounter++; /* handle unlikely wraparounds */
!         newUid = (cm_ClientStrLen(usern)==0)?0:vcp->uidCounter++;
          lock_ReleaseMutex(&vcp->mx);
  
          /* Create a new smb_user_t structure and connect them up */
***************
*** 913,952 ****
      /* Also to the next chained message */
      ((smb_t *)inp)->uid = newUid;
  
!     osi_Log3(smb_logp, "SMB3 session setup name %s creating ID %d%s",
!              osi_LogSaveString(smb_logp, usern), newUid, osi_LogSaveString(smb_logp, s1));
  
      smb_SetSMBParm(outp, 2, 0);
  
      if (vcp->flags & SMB_VCFLAG_USENT) {
          if (smb_authType == SMB_AUTH_EXTENDED) {
              smb_SetSMBParm(outp, 3, secBlobOutLength);
!             smb_SetSMBDataLength(outp, secBlobOutLength + smb_ServerOSLength + smb_ServerLanManagerLength + smb_ServerDomainNameLength);
              tp = smb_GetSMBData(outp, NULL);
              if (secBlobOutLength) {
                  memcpy(tp, secBlobOut, secBlobOutLength);
                  free(secBlobOut);
                  tp += secBlobOutLength;
              }	
!             memcpy(tp,smb_ServerOS,smb_ServerOSLength);
!             tp += smb_ServerOSLength;
!             memcpy(tp,smb_ServerLanManager,smb_ServerLanManagerLength);
!             tp += smb_ServerLanManagerLength;
!             memcpy(tp,smb_ServerDomainName,smb_ServerDomainNameLength);
!             tp += smb_ServerDomainNameLength;
          } else {
              smb_SetSMBDataLength(outp, 0);
          }
      } else {
          if (smb_authType == SMB_AUTH_EXTENDED) {
!             smb_SetSMBDataLength(outp, smb_ServerOSLength + smb_ServerLanManagerLength + smb_ServerDomainNameLength);
              tp = smb_GetSMBData(outp, NULL);
!             memcpy(tp,smb_ServerOS,smb_ServerOSLength);
!             tp += smb_ServerOSLength;
!             memcpy(tp,smb_ServerLanManager,smb_ServerLanManagerLength);
!             tp += smb_ServerLanManagerLength;
!             memcpy(tp,smb_ServerDomainName,smb_ServerDomainNameLength);
!             tp += smb_ServerDomainNameLength;
          } else {
              smb_SetSMBDataLength(outp, 0);
          }
--- 919,963 ----
      /* Also to the next chained message */
      ((smb_t *)inp)->uid = newUid;
  
!     osi_Log3(smb_logp, "SMB3 session setup name %S creating ID %d%S",
!              osi_LogSaveClientString(smb_logp, usern), newUid,
!              osi_LogSaveClientString(smb_logp, s1));
  
      smb_SetSMBParm(outp, 2, 0);
  
      if (vcp->flags & SMB_VCFLAG_USENT) {
          if (smb_authType == SMB_AUTH_EXTENDED) {
+             size_t cb_data = 0;
+ 
              smb_SetSMBParm(outp, 3, secBlobOutLength);
! 
              tp = smb_GetSMBData(outp, NULL);
              if (secBlobOutLength) {
                  memcpy(tp, secBlobOut, secBlobOutLength);
                  free(secBlobOut);
                  tp += secBlobOutLength;
+                 cb_data +=  secBlobOutLength;
              }	
! 
!             tp = smb_UnparseString(outp, tp, smb_ServerOS, &cb_data, 0);
!             tp = smb_UnparseString(outp, tp, smb_ServerLanManager, &cb_data, 0);
!             tp = smb_UnparseString(outp, tp, smb_ServerDomainName, &cb_data, 0);
! 
!             smb_SetSMBDataLength(outp, cb_data);
          } else {
              smb_SetSMBDataLength(outp, 0);
          }
      } else {
          if (smb_authType == SMB_AUTH_EXTENDED) {
!             size_t cb_data = 0;
! 
              tp = smb_GetSMBData(outp, NULL);
! 
!             tp = smb_UnparseString(outp, tp, smb_ServerOS, &cb_data, 0);
!             tp = smb_UnparseString(outp, tp, smb_ServerLanManager, &cb_data, 0);
!             tp = smb_UnparseString(outp, tp, smb_ServerDomainName, &cb_data, 0);
! 
!             smb_SetSMBDataLength(outp, cb_data);
          } else {
              smb_SetSMBDataLength(outp, 0);
          }
***************
*** 955,960 ****
--- 966,972 ----
      return 0;
  }
  
+ /* SMB_COM_LOGOFF_ANDX */
  long smb_ReceiveV3UserLogoffX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      smb_user_t *uidp;
***************
*** 964,971 ****
      if (uidp) {
  	smb_username_t * unp;
  
!         osi_Log2(smb_logp, "SMB3 user logoffX uid %d name %s", uidp->userID,
!                   osi_LogSaveString(smb_logp, (uidp->unp) ? uidp->unp->name: " "));
  
          lock_ObtainMutex(&uidp->mx);
          uidp->flags |= SMB_USERFLAG_DELETE;
--- 976,983 ----
      if (uidp) {
  	smb_username_t * unp;
  
!         osi_Log2(smb_logp, "SMB3 user logoffX uid %d name %S", uidp->userID,
!                  osi_LogSaveClientString(smb_logp, (uidp->unp) ? uidp->unp->name: _C(" ")));
  
          lock_ObtainMutex(&uidp->mx);
          uidp->flags |= SMB_USERFLAG_DELETE;
***************
*** 1002,1019 ****
  #define SMB_SUPPORT_SEARCH_BITS        0x0001
  #define SMB_SHARE_IS_IN_DFS            0x0002
  
  long smb_ReceiveV3TreeConnectX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      smb_tid_t *tidp;
      smb_user_t *uidp = NULL;
      unsigned short newTid;
!     char shareName[AFSPATHMAX];
!     char *sharePath;
      int shareFound;
      char *tp;
!     char *pathp;
!     char *passwordp;
!     char *servicep;
      cm_user_t *userp = NULL;
      int ipc = 0;
          
--- 1014,1033 ----
  #define SMB_SUPPORT_SEARCH_BITS        0x0001
  #define SMB_SHARE_IS_IN_DFS            0x0002
  
+ /* SMB_COM_TREE_CONNECT_ANDX */
  long smb_ReceiveV3TreeConnectX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      smb_tid_t *tidp;
      smb_user_t *uidp = NULL;
      unsigned short newTid;
!     clientchar_t shareName[AFSPATHMAX];
!     clientchar_t *sharePath;
      int shareFound;
      char *tp;
!     clientchar_t *slashp;
!     clientchar_t *pathp;
!     clientchar_t *passwordp;
!     clientchar_t *servicep;
      cm_user_t *userp = NULL;
      int ipc = 0;
          
***************
*** 1021,1043 ****
  
      /* parse input parameters */
      tp = smb_GetSMBData(inp, NULL);
!     passwordp = smb_ParseString(tp, &tp);
!     pathp = smb_ParseString(tp, &tp);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(pathp,pathp);
!     servicep = smb_ParseString(tp, &tp);
  
!     tp = strrchr(pathp, '\\');
!     if (!tp) {
          return CM_ERROR_BADSMB;
      }
!     strcpy(shareName, tp+1);
  
!     osi_Log2(smb_logp, "Tree connect pathp[%s] shareName[%s]",
!              osi_LogSaveString(smb_logp, pathp),
!              osi_LogSaveString(smb_logp, shareName));
  
!     if (strcmp(servicep, "IPC") == 0 || strcmp(shareName, "IPC$") == 0) {
  #ifndef NO_IPC
          osi_Log0(smb_logp, "TreeConnectX connecting to IPC$");
          ipc = 1;
--- 1035,1057 ----
  
      /* parse input parameters */
      tp = smb_GetSMBData(inp, NULL);
!     passwordp = smb_ParseString(inp, tp, &tp, SMB_STRF_FORCEASCII);
!     pathp = smb_ParseString(inp, tp, &tp, SMB_STRF_ANSIPATH);
!     servicep = smb_ParseString(inp, tp, &tp, SMB_STRF_FORCEASCII);
  
!     slashp = cm_ClientStrRChr(pathp, '\\');
!     if (!slashp) {
          return CM_ERROR_BADSMB;
      }
!     cm_ClientStrCpy(shareName, lengthof(shareName), slashp+1);
  
!     osi_Log3(smb_logp, "Tree connect pathp[%S] shareName[%S] service[%S]",
!              osi_LogSaveClientString(smb_logp, pathp),
!              osi_LogSaveClientString(smb_logp, shareName),
!              osi_LogSaveClientString(smb_logp, servicep));
  
!     if (cm_ClientStrCmp(servicep, _C("IPC")) == 0 ||
!         cm_ClientStrCmp(shareName, _C("IPC$")) == 0) {
  #ifndef NO_IPC
          osi_Log0(smb_logp, "TreeConnectX connecting to IPC$");
          ipc = 1;
***************
*** 1057,1064 ****
      tidp = smb_FindTID(vcp, newTid, SMB_FLAG_CREATE);
  
      if (!ipc) {
! 	if (!strcmp(shareName, "*."))
! 	    strcpy(shareName, "all");
  	shareFound = smb_FindShare(vcp, uidp, shareName, &sharePath);
  	if (!shareFound) {
  	    if (uidp)
--- 1071,1078 ----
      tidp = smb_FindTID(vcp, newTid, SMB_FLAG_CREATE);
  
      if (!ipc) {
! 	if (!cm_ClientStrCmp(shareName, _C("*.")))
! 	    cm_ClientStrCpy(shareName, lengthof(shareName), _C("all"));
  	shareFound = smb_FindShare(vcp, uidp, shareName, &sharePath);
  	if (!shareFound) {
  	    if (uidp)
***************
*** 1085,1091 ****
              }
              smb_SetSMBParm(outp, 2, SMB_SUPPORT_SEARCH_BITS | 
                             (dwAdvertiseDFS ? SMB_SHARE_IS_IN_DFS : 0) |
!                             (policy << 2));
          }
      } else {
          smb_SetSMBParm(outp, 2, 0);
--- 1099,1105 ----
              }
              smb_SetSMBParm(outp, 2, SMB_SUPPORT_SEARCH_BITS | 
                             (dwAdvertiseDFS ? SMB_SHARE_IS_IN_DFS : 0) |
!                            (policy << 2));
          }
      } else {
          smb_SetSMBParm(outp, 2, 0);
***************
*** 1106,1123 ****
      ((smb_t *)inp)->tid = newTid;
      tp = smb_GetSMBData(outp, NULL);
      if (!ipc) {
!         /* XXX - why is this a drive letter? */
!         *tp++ = 'A';
!         *tp++ = ':';
!         *tp++ = 0;
!         *tp++ = 'A';
!         *tp++ = 'F';
!         *tp++ = 'S';
!         *tp++ = 0;
!         smb_SetSMBDataLength(outp, 7);
      } else {
!         strcpy(tp, "IPC");
!         smb_SetSMBDataLength(outp, 4);
      }
  
      osi_Log1(smb_logp, "SMB3 tree connect created ID %d", newTid);
--- 1120,1135 ----
      ((smb_t *)inp)->tid = newTid;
      tp = smb_GetSMBData(outp, NULL);
      if (!ipc) {
!         size_t cb_data = 0;
! 
!         tp = smb_UnparseString(outp, tp, _C("A:"), &cb_data, SMB_STRF_FORCEASCII);
!         tp = smb_UnparseString(outp, tp, _C("AFS"), &cb_data, 0);
!         smb_SetSMBDataLength(outp, cb_data);
      } else {
!         size_t cb_data = 0;
! 
!         tp = smb_UnparseString(outp, tp, _C("IPC"), &cb_data, SMB_STRF_FORCEASCII);
!         smb_SetSMBDataLength(outp, cb_data);
      }
  
      osi_Log1(smb_logp, "SMB3 tree connect created ID %d", newTid);
***************
*** 1139,1145 ****
  }
  
  smb_tran2Packet_t *smb_NewTran2Packet(smb_vc_t *vcp, smb_packet_t *inp,
! 	int totalParms, int totalData)
  {
      smb_tran2Packet_t *tp;
      smb_t *smbp;
--- 1151,1157 ----
  }
  
  smb_tran2Packet_t *smb_NewTran2Packet(smb_vc_t *vcp, smb_packet_t *inp,
!                                       int totalParms, int totalData)
  {
      smb_tran2Packet_t *tp;
      smb_t *smbp;
***************
*** 1169,1186 ****
          tp->com = 0x32;
      }
      tp->flags |= SMB_TRAN2PFLAG_ALLOC;
      return tp;
  }
  
  smb_tran2Packet_t *smb_GetTran2ResponsePacket(smb_vc_t *vcp,
!                                                smb_tran2Packet_t *inp, smb_packet_t *outp,
!                                                int totalParms, int totalData)  
  {
      smb_tran2Packet_t *tp;
      unsigned short parmOffset;
      unsigned short dataOffset;
      unsigned short dataAlign;
!         
      tp = malloc(sizeof(*tp));
      memset(tp, 0, sizeof(*tp));
      smb_HoldVC(vcp);
--- 1181,1202 ----
          tp->com = 0x32;
      }
      tp->flags |= SMB_TRAN2PFLAG_ALLOC;
+ #ifdef SMB_UNICODE
+     if (WANTS_UNICODE(inp) && (vcp->flags & SMB_VCFLAG_USEUNICODE))
+         tp->flags |= SMB_TRAN2PFLAG_USEUNICODE;
+ #endif
      return tp;
  }
  
  smb_tran2Packet_t *smb_GetTran2ResponsePacket(smb_vc_t *vcp,
!                                               smb_tran2Packet_t *inp, smb_packet_t *outp,
!                                               int totalParms, int totalData)  
  {
      smb_tran2Packet_t *tp;
      unsigned short parmOffset;
      unsigned short dataOffset;
      unsigned short dataAlign;
! 
      tp = malloc(sizeof(*tp));
      memset(tp, 0, sizeof(*tp));
      smb_HoldVC(vcp);
***************
*** 1228,1241 ****
          if (t2p->datap)
              free(t2p->datap);
      }       
      free(t2p);
  }
  
  /* called with a VC, an input packet to respond to, and an error code.
   * sends an error response.
   */
  void smb_SendTran2Error(smb_vc_t *vcp, smb_tran2Packet_t *t2p,
! 	smb_packet_t *tp, long code)
  {
      smb_t *smbp;
      unsigned short errCode;
--- 1244,1287 ----
          if (t2p->datap)
              free(t2p->datap);
      }       
+     while (t2p->stringsp) {
+         cm_space_t * ns;
+ 
+         ns = t2p->stringsp;
+         t2p->stringsp = ns->nextp;
+         cm_FreeSpace(ns);
+     }
      free(t2p);
  }
  
+ clientchar_t *smb_ParseStringT2Parm(smb_tran2Packet_t * p, unsigned char * inp,
+                                     char ** chainpp, int flags)
+ {
+     size_t cb;
+ 
+ #ifdef SMB_UNICODE
+     if (!(p->flags & SMB_TRAN2PFLAG_USEUNICODE))
+         flags |= SMB_STRF_FORCEASCII;
+ #endif
+ 
+     cb = p->totalParms - (inp - (char *)p->parmsp);
+     if (inp < (char *) p->parmsp ||
+         inp >= ((char *) p->parmsp) + p->totalParms) {
+ #ifdef DEBUG_UNICODE
+         DebugBreak();
+ #endif
+         cb = p->totalParms;
+     }
+ 
+     return smb_ParseStringBuf((unsigned char *) p->parmsp, &p->stringsp,
+                               inp, &cb, chainpp, flags);
+ }
+ 
  /* called with a VC, an input packet to respond to, and an error code.
   * sends an error response.
   */
  void smb_SendTran2Error(smb_vc_t *vcp, smb_tran2Packet_t *t2p,
!                         smb_packet_t *tp, long code)
  {
      smb_t *smbp;
      unsigned short errCode;
***************
*** 1333,1338 ****
--- 1379,1386 ----
      smb_SendPacket(vcp, tp);
  }   
  
+ 
+ /* SMB_COM_TRANSACTION and SMB_COM_TRANSACTION_SECONDARY */
  long smb_ReceiveV3Trans(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      smb_tran2Packet_t *asp;
***************
*** 1351,1359 ****
      /* We sometimes see 0 word count.  What to do? */
      if (*inp->wctp == 0) {
          osi_Log0(smb_logp, "Transaction2 word count = 0"); 
- #ifndef DJGPP
  	LogEvent(EVENTLOG_WARNING_TYPE, MSG_SMB_ZERO_TRANSACTION_COUNT);
- #endif /* !DJGPP */
  
          smb_SetSMBDataLength(outp, 0);
          smb_SendPacket(vcp, outp);
--- 1399,1405 ----
***************
*** 1457,1487 ****
      return 0;
  }
  
! /* ANSI versions.  The unicode versions support arbitrary length
!    share names, but we don't support unicode yet. */
  
  typedef struct smb_rap_share_info_0 {
!     char        shi0_netname[13];
  } smb_rap_share_info_0_t;
  
  typedef struct smb_rap_share_info_1 {
!     char			shi1_netname[13];
!     char			shi1_pad;
      WORD			shi1_type;
      DWORD			shi1_remark; /* char *shi1_remark; data offset */
  } smb_rap_share_info_1_t;
  
  typedef struct smb_rap_share_info_2 {
!     char			shi2_netname[13];
!     char			shi2_pad;
!     unsigned short		shi2_type;
      DWORD			shi2_remark; /* char *shi2_remark; data offset */
!     unsigned short		shi2_permissions;
!     unsigned short		shi2_max_uses;
!     unsigned short		shi2_current_uses;
      DWORD			shi2_path;  /* char *shi2_path; data offset */
!     unsigned short		shi2_passwd[9];
!     unsigned short		shi2_pad2;
  } smb_rap_share_info_2_t;
  
  #define SMB_RAP_MAX_SHARES 512
--- 1503,1534 ----
      return 0;
  }
  
! /* ANSI versions. */
! 
! #pragma pack(push, 1)
  
  typedef struct smb_rap_share_info_0 {
!     BYTE                shi0_netname[13];
  } smb_rap_share_info_0_t;
  
  typedef struct smb_rap_share_info_1 {
!     BYTE                shi1_netname[13];
!     BYTE                shi1_pad;
      WORD			shi1_type;
      DWORD			shi1_remark; /* char *shi1_remark; data offset */
  } smb_rap_share_info_1_t;
  
  typedef struct smb_rap_share_info_2 {
!     BYTE		shi2_netname[13];
!     BYTE		shi2_pad;
!     WORD        	shi2_type;
      DWORD			shi2_remark; /* char *shi2_remark; data offset */
!     WORD        	shi2_permissions;
!     WORD        	shi2_max_uses;
!     WORD        	shi2_current_uses;
      DWORD			shi2_path;  /* char *shi2_path; data offset */
!     WORD        	shi2_passwd[9];
!     WORD        	shi2_pad2;
  } smb_rap_share_info_2_t;
  
  #define SMB_RAP_MAX_SHARES 512
***************
*** 1492,1509 ****
      smb_rap_share_info_0_t * shares;
  } smb_rap_share_list_t;
  
  int smb_rapCollectSharesProc(cm_scache_t *dscp, cm_dirEntry_t *dep, void *vrockp, osi_hyper_t *offp) {
      smb_rap_share_list_t * sp;
-     char * name;
  
!     name = dep->name;
! 
!     if (name[0] == '.' && (!name[1] || (name[1] == '.' && !name[2])))
          return 0; /* skip over '.' and '..' */
  
      sp = (smb_rap_share_list_t *) vrockp;
  
!     strncpy(sp->shares[sp->cShare].shi0_netname, name, 12);
      sp->shares[sp->cShare].shi0_netname[12] = 0;
  
      sp->cShare++;
--- 1539,1555 ----
      smb_rap_share_info_0_t * shares;
  } smb_rap_share_list_t;
  
+ #pragma pack(pop)
+ 
  int smb_rapCollectSharesProc(cm_scache_t *dscp, cm_dirEntry_t *dep, void *vrockp, osi_hyper_t *offp) {
      smb_rap_share_list_t * sp;
  
!     if (dep->name[0] == '.' && (!dep->name[1] || (dep->name[1] == '.' && !dep->name[2])))
          return 0; /* skip over '.' and '..' */
  
      sp = (smb_rap_share_list_t *) vrockp;
  
!     strncpy(sp->shares[sp->cShare].shi0_netname, dep->name, 12);
      sp->shares[sp->cShare].shi0_netname[12] = 0;
  
      sp->cShare++;
***************
*** 1514,1519 ****
--- 1560,1566 ----
          return 0;
  }       
  
+ /* RAP NetShareEnumRequest */
  long smb_ReceiveRAPNetShareEnum(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op)
  {
      smb_tran2Packet_t *outp;
***************
*** 1534,1540 ****
      smb_rap_share_info_1_t * shares;
      USHORT cshare = 0;
      char * cstrp;
!     char thisShare[AFSPATHMAX];
      int i,j;
      DWORD dw;
      int nonrootShares;
--- 1581,1587 ----
      smb_rap_share_info_1_t * shares;
      USHORT cshare = 0;
      char * cstrp;
!     clientchar_t thisShare[AFSPATHMAX];
      int i,j;
      DWORD dw;
      int nonrootShares;
***************
*** 1544,1551 ****
      osi_hyper_t thyper;
  
      tp = p->parmsp + 1; /* skip over function number (always 0) */
!     (void) smb_ParseString((char *) tp, (char **) &tp); /* skip over parm descriptor */
!     (void) smb_ParseString((char *) tp, (char **) &tp); /* skip over data descriptor */
      infoLevel = tp[0];
      bufsize = tp[1];
  
--- 1591,1608 ----
      osi_hyper_t thyper;
  
      tp = p->parmsp + 1; /* skip over function number (always 0) */
! 
!     {
!         clientchar_t * cdescp;
! 
!         cdescp = smb_ParseStringT2Parm(p, (char *) tp, (char **) &tp, SMB_STRF_FORCEASCII);
!         if (cm_ClientStrCmp(cdescp,  _C("WrLeh")))
!             return CM_ERROR_INVAL;
!         cdescp = smb_ParseStringT2Parm(p, (char *) tp, (char **) &tp, SMB_STRF_FORCEASCII);
!         if (cm_ClientStrCmp(cdescp,  _C("B13BWz")))
!             return CM_ERROR_INVAL;
!     }
! 
      infoLevel = tp[0];
      bufsize = tp[1];
  
***************
*** 1553,1558 ****
--- 1610,1627 ----
          return CM_ERROR_INVAL;
      }
  
+     /* We are supposed to use the same ASCII data structure even if
+        Unicode is negotiated, which ultimately means that the share
+        names that we return must be at most 13 characters in length,
+        including the NULL terminator.
+ 
+        The RAP specification states that shares with names longer than
+        12 characters should not be included in the enumeration.
+        However, since we support prefix cell references and since many
+        cell names are going to exceed 12 characters, we lie and send
+        the first 12 characters.
+     */
+ 
      /* first figure out how many shares there are */
      rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY, 0,
                        KEY_QUERY_VALUE, &hkParam);
***************
*** 1617,1623 ****
      memset(outp->datap, 0, (sizeof(smb_rap_share_info_1_t) + REMARK_LEN) * nSharesRet);
  
      if (allSubmount) {
!         strcpy( shares[cshare].shi1_netname, "all" );
          shares[cshare].shi1_remark = (DWORD)(cstrp - outp->datap);
          /* type and pad are zero already */
          cshare++;
--- 1686,1693 ----
      memset(outp->datap, 0, (sizeof(smb_rap_share_info_1_t) + REMARK_LEN) * nSharesRet);
  
      if (allSubmount) {
!         StringCchCopyA(shares[cshare].shi1_netname,
!                        lengthof(shares[cshare].shi1_netname), "all" );
          shares[cshare].shi1_remark = (DWORD)(cstrp - outp->datap);
          /* type and pad are zero already */
          cshare++;
***************
*** 1627,1635 ****
      if (hkSubmount) {
          for (dw=0; dw < nRegShares && cshare < nSharesRet; dw++) {
              len = sizeof(thisShare);
!             rv = RegEnumValue(hkSubmount, dw, thisShare, &len, NULL, NULL, NULL, NULL);
!             if (rv == ERROR_SUCCESS && strlen(thisShare) && (!allSubmount || stricmp(thisShare,"all"))) {
!                 strncpy(shares[cshare].shi1_netname, thisShare, sizeof(shares->shi1_netname)-1);
                  shares[cshare].shi1_netname[sizeof(shares->shi1_netname)-1] = 0; /* unfortunate truncation */
                  shares[cshare].shi1_remark = (DWORD)(cstrp - outp->datap);
                  cshare++;
--- 1697,1708 ----
      if (hkSubmount) {
          for (dw=0; dw < nRegShares && cshare < nSharesRet; dw++) {
              len = sizeof(thisShare);
!             rv = RegEnumValueW(hkSubmount, dw, thisShare, &len, NULL, NULL, NULL, NULL);
!             if (rv == ERROR_SUCCESS &&
!                 cm_ClientStrLen(thisShare) &&
!                 (!allSubmount || cm_ClientStrCmpI(thisShare,_C("all")))) {
!                 cm_ClientStringToUtf8(thisShare, -1, shares[cshare].shi1_netname,
!                                       lengthof( shares[cshare].shi1_netname ));
                  shares[cshare].shi1_netname[sizeof(shares->shi1_netname)-1] = 0; /* unfortunate truncation */
                  shares[cshare].shi1_remark = (DWORD)(cstrp - outp->datap);
                  cshare++;
***************
*** 1645,1653 ****
      nonrootShares = cshare;
  
      for (i=0; i < rootShares.cShare && cshare < nSharesRet; i++) {
!         /* in case there are collisions with submounts, submounts have higher priority */		
          for (j=0; j < nonrootShares; j++)
!             if (!stricmp(shares[j].shi1_netname, rootShares.shares[i].shi0_netname))
                  break;
  		
          if (j < nonrootShares) {
--- 1718,1727 ----
      nonrootShares = cshare;
  
      for (i=0; i < rootShares.cShare && cshare < nSharesRet; i++) {
!         /* in case there are collisions with submounts, submounts have
!            higher priority */		
          for (j=0; j < nonrootShares; j++)
!             if (!cm_stricmp_utf8(shares[j].shi1_netname, rootShares.shares[i].shi0_netname))
                  break;
  		
          if (j < nonrootShares) {
***************
*** 1655,1661 ****
              continue;
          }
  
!         strcpy(shares[cshare].shi1_netname, rootShares.shares[i].shi0_netname);
          shares[cshare].shi1_remark = (DWORD)(cstrp - outp->datap);
          cshare++;
          cstrp+=REMARK_LEN;
--- 1729,1736 ----
              continue;
          }
  
!         StringCchCopyA(shares[cshare].shi1_netname, lengthof(shares[cshare].shi1_netname),
!                        rootShares.shares[i].shi0_netname);
          shares[cshare].shi1_remark = (DWORD)(cstrp - outp->datap);
          cshare++;
          cstrp+=REMARK_LEN;
***************
*** 1677,1687 ****
      return code;
  }
  
  long smb_ReceiveRAPNetShareGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op)
  {
      smb_tran2Packet_t *outp;
      unsigned short * tp;
!     char * shareName;
      BOOL shareFound = FALSE;
      unsigned short infoLevel;
      unsigned short bufsize;
--- 1752,1763 ----
      return code;
  }
  
+ /* RAP NetShareGetInfo */
  long smb_ReceiveRAPNetShareGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op)
  {
      smb_tran2Packet_t *outp;
      unsigned short * tp;
!     clientchar_t * shareName;
      BOOL shareFound = FALSE;
      unsigned short infoLevel;
      unsigned short bufsize;
***************
*** 1700,1708 ****
      cm_InitReq(&req);
  
      tp = p->parmsp + 1; /* skip over function number (always 1) */
!     (void) smb_ParseString( (char *) tp, (char **) &tp); /* skip over param descriptor */
!     (void) smb_ParseString( (char *) tp, (char **) &tp); /* skip over data descriptor */
!     shareName = smb_ParseString( (char *) tp, (char **) &tp);
      infoLevel = *tp++;
      bufsize = *tp++;
      
--- 1776,1799 ----
      cm_InitReq(&req);
  
      tp = p->parmsp + 1; /* skip over function number (always 1) */
! 
!     {
!         clientchar_t * cdescp;
! 
!         cdescp = smb_ParseStringT2Parm(p, (char *) tp, (char **) &tp, SMB_STRF_FORCEASCII);
!         if (cm_ClientStrCmp(cdescp,  _C("zWrLh")))
! 
!             return CM_ERROR_INVAL;
! 
!         cdescp = smb_ParseStringT2Parm(p, (char *) tp, (char **) &tp, SMB_STRF_FORCEASCII);
!         if (cm_ClientStrCmp(cdescp,  _C("B13")) &&
!             cm_ClientStrCmp(cdescp,  _C("B13BWz")) &&
!             cm_ClientStrCmp(cdescp,  _C("B13BWzWWWzB9B")))
! 
!             return CM_ERROR_INVAL;
!     }
!     shareName = smb_ParseStringT2Parm(p, (char *) tp, (char **) &tp, SMB_STRF_FORCEASCII);
! 
      infoLevel = *tp++;
      bufsize = *tp++;
      
***************
*** 1717,1723 ****
      else
          return CM_ERROR_INVAL;
  
!     if(!stricmp(shareName,"all") || !strcmp(shareName,"*.")) {
          rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY, 0,
                            KEY_QUERY_VALUE, &hkParam);
          if (rv == ERROR_SUCCESS) {
--- 1808,1814 ----
      else
          return CM_ERROR_INVAL;
  
!     if(!cm_ClientStrCmpI(shareName, _C("all")) || !cm_ClientStrCmp(shareName,_C("*."))) {
          rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY, 0,
                            KEY_QUERY_VALUE, &hkParam);
          if (rv == ERROR_SUCCESS) {
***************
*** 1749,1755 ****
              rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY "\\Submounts", 0,
                                KEY_QUERY_VALUE, &hkSubmount);
              if (rv == ERROR_SUCCESS) {
!                 rv = RegQueryValueEx(hkSubmount, shareName, NULL, NULL, NULL, NULL);
                  if (rv == ERROR_SUCCESS) {
                      shareFound = TRUE;
                  }
--- 1840,1846 ----
              rv = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY "\\Submounts", 0,
                                KEY_QUERY_VALUE, &hkSubmount);
              if (rv == ERROR_SUCCESS) {
!                 rv = RegQueryValueExW(hkSubmount, shareName, NULL, NULL, NULL, NULL);
                  if (rv == ERROR_SUCCESS) {
                      shareFound = TRUE;
                  }
***************
*** 1770,1787 ****
  
      if (infoLevel == 0) {
          smb_rap_share_info_0_t * info = (smb_rap_share_info_0_t *) outp->datap;
!         strncpy(info->shi0_netname, shareName, sizeof(info->shi0_netname)-1);
!         info->shi0_netname[sizeof(info->shi0_netname)-1] = 0;
      } else if(infoLevel == SMB_INFO_STANDARD) {
          smb_rap_share_info_1_t * info = (smb_rap_share_info_1_t *) outp->datap;
!         strncpy(info->shi1_netname, shareName, sizeof(info->shi1_netname)-1);
          info->shi1_netname[sizeof(info->shi1_netname)-1] = 0;
          info->shi1_remark = (DWORD)(((unsigned char *) (info + 1)) - outp->datap);
          /* type and pad are already zero */
      } else { /* infoLevel==2 */
          smb_rap_share_info_2_t * info = (smb_rap_share_info_2_t *) outp->datap;
!         strncpy(info->shi2_netname, shareName, sizeof(info->shi2_netname)-1);
!         info->shi2_netname[sizeof(info->shi2_netname)-1] = 0;
          info->shi2_remark = (DWORD)(((unsigned char *) (info + 1)) - outp->datap);
          info->shi2_permissions = ACCESS_ALL;
          info->shi2_max_uses = (unsigned short) -1;
--- 1861,1877 ----
  
      if (infoLevel == 0) {
          smb_rap_share_info_0_t * info = (smb_rap_share_info_0_t *) outp->datap;
!         cm_ClientStringToUtf8(shareName, -1, info->shi0_netname,
!                               lengthof(info->shi0_netname));
      } else if(infoLevel == SMB_INFO_STANDARD) {
          smb_rap_share_info_1_t * info = (smb_rap_share_info_1_t *) outp->datap;
!         cm_ClientStringToUtf8(shareName, -1, info->shi1_netname, lengthof(info->shi1_netname));
          info->shi1_netname[sizeof(info->shi1_netname)-1] = 0;
          info->shi1_remark = (DWORD)(((unsigned char *) (info + 1)) - outp->datap);
          /* type and pad are already zero */
      } else { /* infoLevel==2 */
          smb_rap_share_info_2_t * info = (smb_rap_share_info_2_t *) outp->datap;
!         cm_ClientStringToUtf8(shareName, -1, info->shi2_netname, lengthof(info->shi2_netname));
          info->shi2_remark = (DWORD)(((unsigned char *) (info + 1)) - outp->datap);
          info->shi2_permissions = ACCESS_ALL;
          info->shi2_max_uses = (unsigned short) -1;
***************
*** 1797,1812 ****
      return code;
  }
  
  typedef struct smb_rap_wksta_info_10 {
      DWORD	wki10_computername;	/*char *wki10_computername;*/
      DWORD	wki10_username; /* char *wki10_username; */
      DWORD  	wki10_langroup;	/* char *wki10_langroup;*/
!     unsigned char  	wki10_ver_major;
!     unsigned char	wki10_ver_minor;
      DWORD	wki10_logon_domain;	/*char *wki10_logon_domain;*/
      DWORD	wki10_oth_domains; /* char *wki10_oth_domains;*/
  } smb_rap_wksta_info_10_t;
  
  
  long smb_ReceiveRAPNetWkstaGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op)
  {
--- 1887,1905 ----
      return code;
  }
  
+ #pragma pack(push, 1)
+ 
  typedef struct smb_rap_wksta_info_10 {
      DWORD	wki10_computername;	/*char *wki10_computername;*/
      DWORD	wki10_username; /* char *wki10_username; */
      DWORD  	wki10_langroup;	/* char *wki10_langroup;*/
!     BYTE  	wki10_ver_major;
!     BYTE	wki10_ver_minor;
      DWORD	wki10_logon_domain;	/*char *wki10_logon_domain;*/
      DWORD	wki10_oth_domains; /* char *wki10_oth_domains;*/
  } smb_rap_wksta_info_10_t;
  
+ #pragma pack(pop)
  
  long smb_ReceiveRAPNetWkstaGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op)
  {
***************
*** 1822,1829 ****
      smb_user_t *uidp;
  
      tp = p->parmsp + 1; /* Skip over function number */
!     (void) smb_ParseString((unsigned char*) tp, (char **) &tp); /* skip over param descriptor */
!     (void) smb_ParseString((unsigned char*) tp, (char **) &tp); /* skip over data descriptor */
      infoLevel = *tp++;
      bufsize = *tp++;
  
--- 1915,1935 ----
      smb_user_t *uidp;
  
      tp = p->parmsp + 1; /* Skip over function number */
! 
!     {
!         clientchar_t * cdescp;
! 
!         cdescp = smb_ParseStringT2Parm(p, (unsigned char*) tp, (char **) &tp,
!                                        SMB_STRF_FORCEASCII);
!         if (cm_ClientStrCmp(cdescp,  _C("WrLh")))
!             return CM_ERROR_INVAL;
! 
!         cdescp = smb_ParseStringT2Parm(p, (unsigned char*) tp, (char **) &tp,
!                                        SMB_STRF_FORCEASCII);
!         if (cm_ClientStrCmp(cdescp,  _C("zzzBBzz")))
!             return CM_ERROR_INVAL;
!     }
! 
      infoLevel = *tp++;
      bufsize = *tp++;
  
***************
*** 1850,1856 ****
      cstrp = (char *) (info + 1);
  
      info->wki10_computername = (DWORD) (cstrp - outp->datap);
!     strcpy(cstrp, smb_localNamep);
      cstrp += strlen(cstrp) + 1;
  
      info->wki10_username = (DWORD) (cstrp - outp->datap);
--- 1956,1962 ----
      cstrp = (char *) (info + 1);
  
      info->wki10_computername = (DWORD) (cstrp - outp->datap);
!     StringCbCopyA(cstrp, totalData, smb_localNamep);
      cstrp += strlen(cstrp) + 1;
  
      info->wki10_username = (DWORD) (cstrp - outp->datap);
***************
*** 1858,1871 ****
      if (uidp) {
          lock_ObtainMutex(&uidp->mx);
          if(uidp->unp && uidp->unp->name)
!             strcpy(cstrp, uidp->unp->name);
          lock_ReleaseMutex(&uidp->mx);
          smb_ReleaseUID(uidp);
      }
      cstrp += strlen(cstrp) + 1;
  
      info->wki10_langroup = (DWORD) (cstrp - outp->datap);
!     strcpy(cstrp, "WORKGROUP");
      cstrp += strlen(cstrp) + 1;
  
      /* TODO: Not sure what values these should take, but these work */
--- 1964,1978 ----
      if (uidp) {
          lock_ObtainMutex(&uidp->mx);
          if(uidp->unp && uidp->unp->name)
!             cm_ClientStringToUtf8(uidp->unp->name, -1,
!                                   cstrp, totalData/sizeof(char) - (cstrp - outp->datap));
          lock_ReleaseMutex(&uidp->mx);
          smb_ReleaseUID(uidp);
      }
      cstrp += strlen(cstrp) + 1;
  
      info->wki10_langroup = (DWORD) (cstrp - outp->datap);
!     StringCbCopyA(cstrp, totalData - (cstrp - outp->datap)*sizeof(char), "WORKGROUP");
      cstrp += strlen(cstrp) + 1;
  
      /* TODO: Not sure what values these should take, but these work */
***************
*** 1873,1879 ****
      info->wki10_ver_minor = 1;
  
      info->wki10_logon_domain = (DWORD) (cstrp - outp->datap);
!     strcpy(cstrp, smb_ServerDomainName);
      cstrp += strlen(cstrp) + 1;
  
      info->wki10_oth_domains = (DWORD) (cstrp - outp->datap);
--- 1980,1987 ----
      info->wki10_ver_minor = 1;
  
      info->wki10_logon_domain = (DWORD) (cstrp - outp->datap);
!     cm_ClientStringToUtf8(smb_ServerDomainName, -1,
!                           cstrp, totalData/sizeof(char) - (cstrp - outp->datap));
      cstrp += strlen(cstrp) + 1;
  
      info->wki10_oth_domains = (DWORD) (cstrp - outp->datap);
***************
*** 1889,1906 ****
      return code;
  }
  
  typedef struct smb_rap_server_info_0 {
!     char    sv0_name[16];
  } smb_rap_server_info_0_t;
  
  typedef struct smb_rap_server_info_1 {
!     char            sv1_name[16];
!     char            sv1_version_major;
!     char            sv1_version_minor;
!     unsigned long   sv1_type;
!     DWORD           *sv1_comment_or_master_browser; /* char *sv1_comment_or_master_browser;*/
  } smb_rap_server_info_1_t;
  
  char smb_ServerComment[] = "OpenAFS Client";
  int smb_ServerCommentLen = sizeof(smb_ServerComment);
  
--- 1997,2018 ----
      return code;
  }
  
+ #pragma pack(push, 1)
+ 
  typedef struct smb_rap_server_info_0 {
!     BYTE    sv0_name[16];
  } smb_rap_server_info_0_t;
  
  typedef struct smb_rap_server_info_1 {
!     BYTE            sv1_name[16];
!     BYTE            sv1_version_major;
!     BYTE            sv1_version_minor;
!     DWORD           sv1_type;
!     DWORD           sv1_comment_or_master_browser; /* char *sv1_comment_or_master_browser;*/
  } smb_rap_server_info_1_t;
  
+ #pragma pack(pop)
+ 
  char smb_ServerComment[] = "OpenAFS Client";
  int smb_ServerCommentLen = sizeof(smb_ServerComment);
  
***************
*** 1922,1929 ****
      char * cstrp;
  
      tp = p->parmsp + 1; /* Skip over function number */
!     (void) smb_ParseString((unsigned char*) tp, (char **) &tp); /* skip over param descriptor */
!     (void) smb_ParseString((unsigned char*) tp, (char **) &tp); /* skip over data descriptor */
      infoLevel = *tp++;
      bufsize = *tp++;
  
--- 2034,2054 ----
      char * cstrp;
  
      tp = p->parmsp + 1; /* Skip over function number */
! 
!     {
!         clientchar_t * cdescp;
! 
!         cdescp = smb_ParseStringT2Parm(p, (unsigned char *) tp, (char **) &tp,
!                                        SMB_STRF_FORCEASCII);
!         if (cm_ClientStrCmp(cdescp,  _C("WrLh")))
!             return CM_ERROR_INVAL;
!         cdescp = smb_ParseStringT2Parm(p, (unsigned char*) tp, (char **) &tp,
!                                        SMB_STRF_FORCEASCII);
!         if (cm_ClientStrCmp(cdescp,  _C("B16")) ||
!             cm_ClientStrCmp(cdescp,  _C("B16BBDz")))
!             return CM_ERROR_INVAL;
!     }
! 
      infoLevel = *tp++;
      bufsize = *tp++;
  
***************
*** 1945,1955 ****
      if (infoLevel == 0) {
          info0 = (smb_rap_server_info_0_t *) outp->datap;
          cstrp = (char *) (info0 + 1);
!         strcpy(info0->sv0_name, "AFS");
      } else { /* infoLevel == SMB_INFO_STANDARD */
          info1 = (smb_rap_server_info_1_t *) outp->datap;
          cstrp = (char *) (info1 + 1);
!         strcpy(info1->sv1_name, "AFS");
  
          info1->sv1_type = 
              SMB_SV_TYPE_SERVER |
--- 2070,2080 ----
      if (infoLevel == 0) {
          info0 = (smb_rap_server_info_0_t *) outp->datap;
          cstrp = (char *) (info0 + 1);
!         StringCchCopyA(info0->sv0_name, lengthof(info0->sv0_name), "AFS");
      } else { /* infoLevel == SMB_INFO_STANDARD */
          info1 = (smb_rap_server_info_1_t *) outp->datap;
          cstrp = (char *) (info1 + 1);
!         StringCchCopyA(info1->sv1_name, lengthof(info1->sv1_name), "AFS");
  
          info1->sv1_type = 
              SMB_SV_TYPE_SERVER |
***************
*** 1958,1968 ****
  
          info1->sv1_version_major = 5;
          info1->sv1_version_minor = 1;
!         info1->sv1_comment_or_master_browser = (DWORD *) (cstrp - outp->datap);
  
!         strcpy(cstrp, smb_ServerComment);
  
!         cstrp += smb_ServerCommentLen;
      }
  
      totalData = (DWORD)(cstrp - outp->datap);
--- 2083,2093 ----
  
          info1->sv1_version_major = 5;
          info1->sv1_version_minor = 1;
!         info1->sv1_comment_or_master_browser = (DWORD) (cstrp - outp->datap);
  
!         StringCbCopyA(cstrp, smb_ServerCommentLen, smb_ServerComment);
  
!         cstrp += smb_ServerCommentLen / sizeof(char);
      }
  
      totalData = (DWORD)(cstrp - outp->datap);
***************
*** 1977,1982 ****
--- 2102,2108 ----
      return code;
  }
  
+ /* SMB_COM_TRANSACTION2 and SMB_COM_TRANSACTION2_SECONDARY */
  long smb_ReceiveV3Tran2A(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      smb_tran2Packet_t *asp;
***************
*** 1994,2002 ****
      /* We sometimes see 0 word count.  What to do? */
      if (*inp->wctp == 0) {
          osi_Log0(smb_logp, "Transaction2 word count = 0"); 
- #ifndef DJGPP
  	LogEvent(EVENTLOG_WARNING_TYPE, MSG_SMB_ZERO_TRANSACTION_COUNT);
- #endif /* !DJGPP */
  
          smb_SetSMBDataLength(outp, 0);
          smb_SendPacket(vcp, outp);
--- 2120,2126 ----
***************
*** 2097,2105 ****
      return 0;
  }
  
  long smb_ReceiveTran2Open(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op)
  {
!     char *pathp;
      smb_tran2Packet_t *outp;
      long code = 0;
      cm_space_t *spacep;
--- 2221,2230 ----
      return 0;
  }
  
+ /* TRANS2_OPEN2 */
  long smb_ReceiveTran2Open(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op)
  {
!     clientchar_t *pathp;
      smb_tran2Packet_t *outp;
      long code = 0;
      cm_space_t *spacep;
***************
*** 2111,2117 ****
      int initialModeBits;
      smb_fid_t *fidp;
      int attributes;
!     char *lastNamep;
      afs_uint32 dosTime;
      int openFun;
      int trunc;
--- 2236,2242 ----
      int initialModeBits;
      smb_fid_t *fidp;
      int attributes;
!     clientchar_t *lastNamep;
      afs_uint32 dosTime;
      int openFun;
      int trunc;
***************
*** 2120,2126 ****
      int openAction;
      int parmSlot;			/* which parm we're dealing with */
      long returnEALength;
!     char *tidPathp;
      cm_req_t req;
      int created = 0;
  
--- 2245,2251 ----
      int openAction;
      int parmSlot;			/* which parm we're dealing with */
      long returnEALength;
!     clientchar_t *tidPathp;
      cm_req_t req;
      int created = 0;
  
***************
*** 2145,2164 ****
      if (attributes & SMB_ATTR_READONLY) 
          initialModeBits &= ~0222;
          
!     pathp = (char *) (&p->parmsp[14]);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(pathp,pathp);
      
      outp = smb_GetTran2ResponsePacket(vcp, p, op, 40, 0);
  
      spacep = cm_GetSpace();
!     smb_StripLastComponent(spacep->data, &lastNamep, pathp);
  
      if (lastNamep && 
!          (stricmp(lastNamep, SMB_IOCTL_FILENAME) == 0 ||
!            stricmp(lastNamep, "\\srvsvc") == 0 ||
!            stricmp(lastNamep, "\\wkssvc") == 0 ||
!            stricmp(lastNamep, "\\ipc$") == 0)) {
          /* special case magic file name for receiving IOCTL requests
           * (since IOCTL calls themselves aren't getting through).
           */
--- 2270,2288 ----
      if (attributes & SMB_ATTR_READONLY) 
          initialModeBits &= ~0222;
          
!     pathp = smb_ParseStringT2Parm(p, (char *) (&p->parmsp[14]), NULL,
!                                   SMB_STRF_ANSIPATH);
      
      outp = smb_GetTran2ResponsePacket(vcp, p, op, 40, 0);
  
      spacep = cm_GetSpace();
!     smb_StripLastComponent(spacep->wdata, &lastNamep, pathp);
  
      if (lastNamep && 
!         (cm_ClientStrCmpI(lastNamep,  _C(SMB_IOCTL_FILENAME)) == 0 ||
!          cm_ClientStrCmpI(lastNamep,  _C("\\srvsvc")) == 0 ||
!          cm_ClientStrCmpI(lastNamep,  _C("\\wkssvc")) == 0 ||
!          cm_ClientStrCmpI(lastNamep,  _C("\\ipc$")) == 0)) {
          /* special case magic file name for receiving IOCTL requests
           * (since IOCTL calls themselves aren't getting through).
           */
***************
*** 2239,2245 ****
                       CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                       userp, tidPathp, &req, &scp);
      if (code != 0) {
!         code = cm_NameI(cm_data.rootSCachep, spacep->data,
                           CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                           userp, tidPathp, &req, &dscp);
          cm_FreeSpace(spacep);
--- 2363,2369 ----
                       CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                       userp, tidPathp, &req, &scp);
      if (code != 0) {
!         code = cm_NameI(cm_data.rootSCachep, spacep->wdata,
                           CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                           userp, tidPathp, &req, &dscp);
          cm_FreeSpace(spacep);
***************
*** 2252,2258 ****
          
  #ifdef DFS_SUPPORT
          if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!             int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->data);
              cm_ReleaseSCache(dscp);
              cm_ReleaseUser(userp);
              smb_FreeTran2Packet(outp);
--- 2376,2383 ----
          
  #ifdef DFS_SUPPORT
          if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!             int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp,
!                                                       (clientchar_t*) spacep->data);
              cm_ReleaseSCache(dscp);
              cm_ReleaseUser(userp);
              smb_FreeTran2Packet(outp);
***************
*** 2494,2537 ****
      return CM_ERROR_BAD_LEVEL;
  }
  
  long smb_ReceiveTran2QFSInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op)
  {
      smb_tran2Packet_t *outp;
      smb_tran2QFSInfo_t qi;
      int responseSize;
!     static char FSname[8] = {'A', 0, 'F', 0, 'S', 0, 0, 0};
          
      osi_Log1(smb_logp, "T2 QFSInfo type 0x%x", p->parmsp[0]);
  
      switch (p->parmsp[0]) {
      case SMB_INFO_ALLOCATION: 
  	responseSize = sizeof(qi.u.allocInfo); 
- 	break;
-     case SMB_INFO_VOLUME: 
- 	responseSize = sizeof(qi.u.volumeInfo); 
- 	break;
-     case SMB_QUERY_FS_VOLUME_INFO: 
- 	responseSize = sizeof(qi.u.FSvolumeInfo); 
- 	break;
-     case SMB_QUERY_FS_SIZE_INFO: 
- 	responseSize = sizeof(qi.u.FSsizeInfo); 
- 	break;
-     case SMB_QUERY_FS_DEVICE_INFO: 
- 	responseSize = sizeof(qi.u.FSdeviceInfo); 
- 	break;
-     case SMB_QUERY_FS_ATTRIBUTE_INFO: 
- 	responseSize = sizeof(qi.u.FSattributeInfo); 
- 	break;
-     case SMB_INFO_UNIX: 	/* CIFS Unix Info */
-     case SMB_INFO_MACOS: 	/* Mac FS Info */
-     default: 
- 	return CM_ERROR_BADOP;
-     }
  
-     outp = smb_GetTran2ResponsePacket(vcp, p, op, 0, responseSize);
-     switch (p->parmsp[0]) {
-     case SMB_INFO_ALLOCATION: 
-         /* alloc info */
          qi.u.allocInfo.FSID = 0;
          qi.u.allocInfo.sectorsPerAllocUnit = 1;
          qi.u.allocInfo.totalAllocUnits = 0x7fffffff;
--- 2619,2639 ----
      return CM_ERROR_BAD_LEVEL;
  }
  
+ /* TRANS2_QUERY_FS_INFORMATION */
  long smb_ReceiveTran2QFSInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op)
  {
      smb_tran2Packet_t *outp;
      smb_tran2QFSInfo_t qi;
      int responseSize;
!     size_t sz = 0;
          
      osi_Log1(smb_logp, "T2 QFSInfo type 0x%x", p->parmsp[0]);
  
      switch (p->parmsp[0]) {
      case SMB_INFO_ALLOCATION: 
+         /* alloc info */
  	responseSize = sizeof(qi.u.allocInfo); 
  
          qi.u.allocInfo.FSID = 0;
          qi.u.allocInfo.sectorsPerAllocUnit = 1;
          qi.u.allocInfo.totalAllocUnits = 0x7fffffff;
***************
*** 2541,2563 ****
  
      case SMB_INFO_VOLUME: 
          /* volume info */
!         qi.u.volumeInfo.vsn = 1234;
!         qi.u.volumeInfo.vnCount = 4;
          /* we're supposed to pad it out with zeroes to the end */
          memset(&qi.u.volumeInfo.label, 0, sizeof(qi.u.volumeInfo.label));
!         memcpy(qi.u.volumeInfo.label, "AFS", 4);
          break;
  
      case SMB_QUERY_FS_VOLUME_INFO: 
          /* FS volume info */
!         memset((char *)&qi.u.FSvolumeInfo.vct, 0, 4);
          qi.u.FSvolumeInfo.vsn = 1234;
!         qi.u.FSvolumeInfo.vnCount = 8;
!         memcpy(qi.u.FSvolumeInfo.label, "A\0F\0S\0\0\0", 8);
          break;
  
      case SMB_QUERY_FS_SIZE_INFO: 
          /* FS size info */
          qi.u.FSsizeInfo.totalAllocUnits.HighPart = 0;
  	qi.u.FSsizeInfo.totalAllocUnits.LowPart= 0x7fffffff;
          qi.u.FSsizeInfo.availAllocUnits.HighPart = 0;
--- 2643,2676 ----
  
      case SMB_INFO_VOLUME: 
          /* volume info */
!         qi.u.volumeInfo.vsn = 1234;  /* Volume serial number */
!         qi.u.volumeInfo.vnCount = 4; /* Number of characters in label (AFS\0)*/
! 
          /* we're supposed to pad it out with zeroes to the end */
          memset(&qi.u.volumeInfo.label, 0, sizeof(qi.u.volumeInfo.label));
!         smb_UnparseString(op, qi.u.volumeInfo.label, _C("AFS"), &sz, 0);
! 
!         responseSize = sizeof(unsigned long) + sizeof(char) + max(12, sz);
          break;
  
      case SMB_QUERY_FS_VOLUME_INFO: 
          /* FS volume info */
! 	responseSize = sizeof(qi.u.FSvolumeInfo);
! 
!         {
!             FILETIME ft = {0x832cf000, 0x01abfcc4}; /* October 1, 1982 00:00:00 +0600 */
!             memcpy(&qi.u.FSvolumeInfo.vct, &ft, sizeof(ft));
!         }
! 
          qi.u.FSvolumeInfo.vsn = 1234;
!         qi.u.FSvolumeInfo.vnCount = 8; /* This is always in Unicode */
!         memcpy(qi.u.FSvolumeInfo.label, L"AFS", sizeof(L"AFS"));
          break;
  
      case SMB_QUERY_FS_SIZE_INFO: 
          /* FS size info */
+ 	responseSize = sizeof(qi.u.FSsizeInfo); 
+ 
          qi.u.FSsizeInfo.totalAllocUnits.HighPart = 0;
  	qi.u.FSsizeInfo.totalAllocUnits.LowPart= 0x7fffffff;
          qi.u.FSsizeInfo.availAllocUnits.HighPart = 0;
***************
*** 2568,2579 ****
--- 2681,2695 ----
  
      case SMB_QUERY_FS_DEVICE_INFO: 
          /* FS device info */
+ 	responseSize = sizeof(qi.u.FSdeviceInfo); 
+ 
          qi.u.FSdeviceInfo.devType = 0x14; /* network file system */
          qi.u.FSdeviceInfo.characteristics = 0x50; /* remote, virtual */
          break;
  
      case SMB_QUERY_FS_ATTRIBUTE_INFO: 
          /* FS attribute info */
+ 
          /* attributes, defined in WINNT.H:
           *	FILE_CASE_SENSITIVE_SEARCH	0x1
           *	FILE_CASE_PRESERVED_NAMES	0x2
***************
*** 2584,2595 ****
           *	   despite our protestations to the contrary.
           */
          qi.u.FSattributeInfo.attributes = 0x4003;
          qi.u.FSattributeInfo.maxCompLength = MAX_PATH;
!         qi.u.FSattributeInfo.FSnameLength = sizeof(FSname);
!         memcpy(qi.u.FSattributeInfo.FSname, FSname, sizeof(FSname));
          break;
      }   
          
      /* copy out return data, and set corresponding sizes */
      outp->totalParms = 0;
      outp->totalData = responseSize;
--- 2700,2734 ----
           *	   despite our protestations to the contrary.
           */
          qi.u.FSattributeInfo.attributes = 0x4003;
+         /* The maxCompLength is supposed to be in bytes */
+ #ifdef SMB_UNICODE
+         if ((vcp->flags & SMB_VCFLAG_USEUNICODE) == SMB_VCFLAG_USEUNICODE)
+             qi.u.FSattributeInfo.maxCompLength = MAX_PATH * sizeof(wchar_t);
+         else {
+ #endif
          qi.u.FSattributeInfo.maxCompLength = MAX_PATH;
! #ifdef SMB_UNICODE
!         }
! #endif
!         smb_UnparseString(op, qi.u.FSattributeInfo.FSname, _C("AFS"), &sz, 0);
!         qi.u.FSattributeInfo.FSnameLength = sz;
! 
! 	responseSize =
!             sizeof(qi.u.FSattributeInfo.attributes) +
!             sizeof(qi.u.FSattributeInfo.maxCompLength) +
!             sizeof(qi.u.FSattributeInfo.FSnameLength) +
!             sz;
! 
          break;
+ 
+     case SMB_INFO_UNIX: 	/* CIFS Unix Info */
+     case SMB_INFO_MACOS: 	/* Mac FS Info */
+     default: 
+ 	return CM_ERROR_BADOP;
      }   
          
+     outp = smb_GetTran2ResponsePacket(vcp, p, op, 0, responseSize);
+         
      /* copy out return data, and set corresponding sizes */
      outp->totalParms = 0;
      outp->totalData = responseSize;
***************
*** 2609,2617 ****
  }
  
  struct smb_ShortNameRock {
!     char *maskp;
      unsigned int vnode;
!     char *shortName;
      size_t shortNameLen;
  };      
  
--- 2748,2756 ----
  }
  
  struct smb_ShortNameRock {
!     clientchar_t *maskp;
      unsigned int vnode;
!     clientchar_t *shortName;
      size_t shortNameLen;
  };      
  
***************
*** 2619,2645 ****
                           osi_hyper_t *offp)
  {       
      struct smb_ShortNameRock *rockp;
!     char *shortNameEnd;
  
      rockp = vrockp;
      /* compare both names and vnodes, though probably just comparing vnodes
       * would be safe enough.
       */
!     if (cm_stricmp(dep->name, rockp->maskp) != 0)
          return 0;
      if (ntohl(dep->fid.vnode) != rockp->vnode)
          return 0;
      /* This is the entry */
      cm_Gen8Dot3Name(dep, rockp->shortName, &shortNameEnd);
      rockp->shortNameLen = shortNameEnd - rockp->shortName;
      return CM_ERROR_STOPNOW;
! }       
  
! long cm_GetShortName(char *pathp, cm_user_t *userp, cm_req_t *reqp,
! 	char *tidPathp, int vnode, char *shortName, size_t *shortNameLenp)
  {
      struct smb_ShortNameRock rock;
!     char *lastNamep;
      cm_space_t *spacep;
      cm_scache_t *dscp;
      int caseFold = CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD;
--- 2758,2790 ----
                           osi_hyper_t *offp)
  {       
      struct smb_ShortNameRock *rockp;
!     normchar_t normName[MAX_PATH];
!     clientchar_t *shortNameEnd;
  
      rockp = vrockp;
+ 
+     cm_FsStringToNormString(dep->name, -1, normName, sizeof(normName)/sizeof(clientchar_t));
+ 
      /* compare both names and vnodes, though probably just comparing vnodes
       * would be safe enough.
       */
!     if (cm_NormStrCmpI(normName,  rockp->maskp) != 0)
          return 0;
      if (ntohl(dep->fid.vnode) != rockp->vnode)
          return 0;
+ 
      /* This is the entry */
      cm_Gen8Dot3Name(dep, rockp->shortName, &shortNameEnd);
      rockp->shortNameLen = shortNameEnd - rockp->shortName;
+ 
      return CM_ERROR_STOPNOW;
! }
  
! long cm_GetShortName(clientchar_t *pathp, cm_user_t *userp, cm_req_t *reqp,
! 	clientchar_t *tidPathp, int vnode, clientchar_t *shortName, size_t *shortNameLenp)
  {
      struct smb_ShortNameRock rock;
!     clientchar_t *lastNamep;
      cm_space_t *spacep;
      cm_scache_t *dscp;
      int caseFold = CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD;
***************
*** 2647,2656 ****
      osi_hyper_t thyper;
  
      spacep = cm_GetSpace();
!     smb_StripLastComponent(spacep->data, &lastNamep, pathp);
  
!     code = cm_NameI(cm_data.rootSCachep, spacep->data, caseFold, userp, tidPathp,
!                      reqp, &dscp);
      cm_FreeSpace(spacep);
      if (code) 
          return code;
--- 2792,2802 ----
      osi_hyper_t thyper;
  
      spacep = cm_GetSpace();
!     smb_StripLastComponent(spacep->wdata, &lastNamep, pathp);
  
!     code = cm_NameI(cm_data.rootSCachep, spacep->wdata,
!                     caseFold, userp, tidPathp,
!                     reqp, &dscp);
      cm_FreeSpace(spacep);
      if (code) 
          return code;
***************
*** 2659,2665 ****
--- 2805,2813 ----
      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
          cm_ReleaseSCache(dscp);
          cm_ReleaseUser(userp);
+ #ifdef DEBUG
          DebugBreak();
+ #endif
          return CM_ERROR_PATH_NOT_COVERED;
      }
  #endif /* DFS_SUPPORT */
***************
*** 2684,2689 ****
--- 2832,2838 ----
      return code;
  }
  
+ /* TRANS2_QUERY_PATH_INFORMATION */
  long smb_ReceiveTran2QPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *opx)
  {
      smb_tran2Packet_t *outp;
***************
*** 2694,2710 ****
      int responseSize;
      unsigned short attributes;
      unsigned long extAttributes;
!     char shortName[13];
!     unsigned int len;
      cm_user_t *userp;
      cm_space_t *spacep;
      cm_scache_t *scp, *dscp;
      int scp_mx_held = 0;
      int delonclose = 0;
      long code = 0;
!     char *pathp;
!     char *tidPathp;
!     char *lastComp;
      cm_req_t req;
  
      cm_InitReq(&req);
--- 2843,2859 ----
      int responseSize;
      unsigned short attributes;
      unsigned long extAttributes;
!     clientchar_t shortName[13];
!     size_t len;
      cm_user_t *userp;
      cm_space_t *spacep;
      cm_scache_t *scp, *dscp;
      int scp_mx_held = 0;
      int delonclose = 0;
      long code = 0;
!     clientchar_t *pathp;
!     clientchar_t *tidPathp;
!     clientchar_t *lastComp;
      cm_req_t req;
  
      cm_InitReq(&req);
***************
*** 2735,2745 ****
          return 0;
      }
  
!     pathp = (char *)(&p->parmsp[3]);
!     if (smb_StoreAnsiFilenames)
! 	OemToChar(pathp,pathp);
!     osi_Log2(smb_logp, "T2 QPathInfo type 0x%x path %s", infoLevel,
!               osi_LogSaveString(smb_logp, pathp));
  
      outp = smb_GetTran2ResponsePacket(vcp, p, opx, 2, responseSize);
  
--- 2884,2892 ----
          return 0;
      }
  
!     pathp = smb_ParseStringT2Parm(p, (char *) (&p->parmsp[3]), NULL, SMB_STRF_ANSIPATH);
!     osi_Log2(smb_logp, "T2 QPathInfo type 0x%x path %S", infoLevel,
!               osi_LogSaveClientString(smb_logp, pathp));
  
      outp = smb_GetTran2ResponsePacket(vcp, p, opx, 2, responseSize);
  
***************
*** 2790,2801 ****
       */
      if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) {
          spacep = cm_GetSpace();
!         smb_StripLastComponent(spacep->data, &lastComp, pathp);
  #ifndef SPECIAL_FOLDERS
          /* Make sure that lastComp is not NULL */
          if (lastComp) {
!             if (stricmp(lastComp, "\\desktop.ini") == 0) {
!                 code = cm_NameI(cm_data.rootSCachep, spacep->data,
                                   CM_FLAG_CASEFOLD
                                   | CM_FLAG_DIRSEARCH
                                   | CM_FLAG_FOLLOW,
--- 2937,2948 ----
       */
      if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) {
          spacep = cm_GetSpace();
!         smb_StripLastComponent(spacep->wdata, &lastComp, pathp);
  #ifndef SPECIAL_FOLDERS
          /* Make sure that lastComp is not NULL */
          if (lastComp) {
!             if (cm_ClientStrCmpIA(lastComp,  _C("\\desktop.ini")) == 0) {
!                 code = cm_NameI(cm_data.rootSCachep, spacep->wdata,
                                   CM_FLAG_CASEFOLD
                                   | CM_FLAG_DIRSEARCH
                                   | CM_FLAG_FOLLOW,
***************
*** 2803,2809 ****
                  if (code == 0) {
  #ifdef DFS_SUPPORT
                      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                         int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->data);
                          if ( WANTS_DFS_PATHNAMES(p) || pnc )
                              code = CM_ERROR_PATH_NOT_COVERED;
                          else
--- 2950,2957 ----
                  if (code == 0) {
  #ifdef DFS_SUPPORT
                      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                         int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp,
!                                                                   spacep->wdata);
                          if ( WANTS_DFS_PATHNAMES(p) || pnc )
                              code = CM_ERROR_PATH_NOT_COVERED;
                          else
***************
*** 2873,2878 ****
--- 3021,3028 ----
          
      lock_ConvertWToR(&scp->rw);
  
+     len = 0;
+ 
      /* now we have the status in the cache entry, and everything is locked.
       * Marshall the output data.
       */
***************
*** 2880,2899 ****
      if (infoLevel == SMB_QUERY_FILE_ALT_NAME_INFO) {
          code = cm_GetShortName(pathp, userp, &req,
                                  tidPathp, scp->fid.vnode, shortName,
!                                 (size_t *) &len);
          if (code) {
              goto done;
          }
  
! 	qpi.u.QPfileAltNameInfo.fileNameLength = (len + 1) * 2;
!         mbstowcs((unsigned short *)qpi.u.QPfileAltNameInfo.fileName, shortName, len + 1);
  
          goto done;
      }
      else if (infoLevel == SMB_QUERY_FILE_NAME_INFO) {
! 	len = (unsigned int)strlen(lastComp);
! 	qpi.u.QPfileNameInfo.fileNameLength = (len + 1) * 2;
!         mbstowcs((unsigned short *)qpi.u.QPfileNameInfo.fileName, lastComp, len + 1);
  
          goto done;
      }
--- 3030,3048 ----
      if (infoLevel == SMB_QUERY_FILE_ALT_NAME_INFO) {
          code = cm_GetShortName(pathp, userp, &req,
                                  tidPathp, scp->fid.vnode, shortName,
!                                &len);
          if (code) {
              goto done;
          }
  
!         smb_UnparseString(opx, qpi.u.QPfileAltNameInfo.fileName, shortName, &len, 0);
! 	qpi.u.QPfileAltNameInfo.fileNameLength = len;
  
          goto done;
      }
      else if (infoLevel == SMB_QUERY_FILE_NAME_INFO) {
!         smb_UnparseString(opx, qpi.u.QPfileNameInfo.fileName, lastComp, &len, 0);
! 	qpi.u.QPfileNameInfo.fileNameLength = len;
  
          goto done;
      }
***************
*** 2969,2977 ****
  	qpi.u.QPfileAllInfo.currentByteOffset.LowPart = 0;
  	qpi.u.QPfileAllInfo.mode = 0;
  	qpi.u.QPfileAllInfo.alignmentRequirement = 0;
! 	len = (unsigned int)strlen(lastComp);
! 	qpi.u.QPfileAllInfo.fileNameLength = (len + 1) * 2;
!         mbstowcs((unsigned short *)qpi.u.QPfileAllInfo.fileName, lastComp, len + 1);
      }
  
      /* send and free the packets */
--- 3118,3126 ----
  	qpi.u.QPfileAllInfo.currentByteOffset.LowPart = 0;
  	qpi.u.QPfileAllInfo.mode = 0;
  	qpi.u.QPfileAllInfo.alignmentRequirement = 0;
! 
!         smb_UnparseString(opx, qpi.u.QPfileAllInfo.fileName, lastComp, &len, 0);
! 	qpi.u.QPfileAllInfo.fileNameLength = len;
      }
  
      /* send and free the packets */
***************
*** 2991,2996 ****
--- 3140,3146 ----
      return 0;
  }
  
+ /* TRANS2_SET_PATH_INFORMATION */
  long smb_ReceiveTran2SetPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *opx)
  {
  #if 0
***************
*** 3000,3014 ****
      long code = 0;
      smb_fid_t *fidp;
      unsigned short infoLevel;
!     char * pathp;
      smb_tran2Packet_t *outp;
      smb_tran2QPathInfo_t *spi;
      cm_user_t *userp;
      cm_scache_t *scp, *dscp;
      cm_req_t req;
      cm_space_t *spacep;
!     char *tidPathp;
!     char *lastComp;
  
      cm_InitReq(&req);
  
--- 3150,3164 ----
      long code = 0;
      smb_fid_t *fidp;
      unsigned short infoLevel;
!     clientchar_t * pathp;
      smb_tran2Packet_t *outp;
      smb_tran2QPathInfo_t *spi;
      cm_user_t *userp;
      cm_scache_t *scp, *dscp;
      cm_req_t req;
      cm_space_t *spacep;
!     clientchar_t *tidPathp;
!     clientchar_t *lastComp;
  
      cm_InitReq(&req);
  
***************
*** 3024,3034 ****
          return 0;
      }
  
!     pathp = (char *)(&p->parmsp[3]);
!     if (smb_StoreAnsiFilenames)
! 	OemToChar(pathp,pathp);
!     osi_Log2(smb_logp, "T2 SetPathInfo infolevel 0x%x path %s", infoLevel,
!               osi_LogSaveString(smb_logp, pathp));
  
      userp = smb_GetTran2User(vcp, p);
      if (!userp) {
--- 3174,3183 ----
          return 0;
      }
  
!     pathp = smb_ParseStringT2Parm(p, (char *) (&p->parmsp[3]), NULL, SMB_STRF_ANSIPATH);
! 
!     osi_Log2(smb_logp, "T2 SetPathInfo infolevel 0x%x path %S", infoLevel,
!               osi_LogSaveClientString(smb_logp, pathp));
  
      userp = smb_GetTran2User(vcp, p);
      if (!userp) {
***************
*** 3065,3076 ****
      */
      if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) {
          spacep = cm_GetSpace();
!         smb_StripLastComponent(spacep->data, &lastComp, pathp);
  #ifndef SPECIAL_FOLDERS
          /* Make sure that lastComp is not NULL */
          if (lastComp) {
!             if (stricmp(lastComp, "\\desktop.ini") == 0) {
!                 code = cm_NameI(cm_data.rootSCachep, spacep->data,
                                   CM_FLAG_CASEFOLD
                                   | CM_FLAG_DIRSEARCH
                                   | CM_FLAG_FOLLOW,
--- 3214,3225 ----
      */
      if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) {
          spacep = cm_GetSpace();
!         smb_StripLastComponent(spacep->wdata, &lastComp, pathp);
  #ifndef SPECIAL_FOLDERS
          /* Make sure that lastComp is not NULL */
          if (lastComp) {
!             if (cm_ClientStrCmpI(lastComp,  _C("\\desktop.ini")) == 0) {
!                 code = cm_NameI(cm_data.rootSCachep, spacep->wdata,
                                   CM_FLAG_CASEFOLD
                                   | CM_FLAG_DIRSEARCH
                                   | CM_FLAG_FOLLOW,
***************
*** 3078,3084 ****
                  if (code == 0) {
  #ifdef DFS_SUPPORT
                      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                         int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->data);
                          if ( WANTS_DFS_PATHNAMES(p) || pnc )
                              code = CM_ERROR_PATH_NOT_COVERED;
                          else
--- 3227,3234 ----
                  if (code == 0) {
  #ifdef DFS_SUPPORT
                      if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                         int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp,
!                                                                   spacep->wdata);
                          if ( WANTS_DFS_PATHNAMES(p) || pnc )
                              code = CM_ERROR_PATH_NOT_COVERED;
                          else
***************
*** 3218,3223 ****
--- 3368,3374 ----
  #endif
  }
  
+ /* TRANS2_QUERY_FILE_INFORMATION */
  long smb_ReceiveTran2QFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *opx)
  {
      smb_tran2Packet_t *outp;
***************
*** 3328,3335 ****
          qfi.u.QFeaInfo.eaSize = 0;
      }
      else if (infoLevel == SMB_QUERY_FILE_NAME_INFO) {
!         unsigned long len;
!         char *name;
  
  	lock_ReleaseRead(&scp->rw);
  	lock_ObtainMutex(&fidp->mx);
--- 3479,3486 ----
          qfi.u.QFeaInfo.eaSize = 0;
      }
      else if (infoLevel == SMB_QUERY_FILE_NAME_INFO) {
!         size_t len = 0;
!         clientchar_t *name;
  
  	lock_ReleaseRead(&scp->rw);
  	lock_ObtainMutex(&fidp->mx);
***************
*** 3337,3348 ****
          if (fidp->NTopen_wholepathp)
              name = fidp->NTopen_wholepathp;
          else
!             name = "\\";	/* probably can't happen */
  	lock_ReleaseMutex(&fidp->mx);
!         len = (unsigned long)strlen(name);
!         outp->totalData = ((len+1)*2) + 4;	/* this is actually what we want to return */
!         qfi.u.QFfileNameInfo.fileNameLength = (len + 1) * 2;
!         mbstowcs((unsigned short *)qfi.u.QFfileNameInfo.fileName, name, len + 1);
      }
  
      /* send and free the packets */
--- 3488,3499 ----
          if (fidp->NTopen_wholepathp)
              name = fidp->NTopen_wholepathp;
          else
!             name = _C("\\");	/* probably can't happen */
  	lock_ReleaseMutex(&fidp->mx);
! 
!         smb_UnparseString(opx, qfi.u.QFfileNameInfo.fileName, name, &len, 0);
!         outp->totalData = len + 4;	/* this is actually what we want to return */
!         qfi.u.QFfileNameInfo.fileNameLength = len;
      }
  
      /* send and free the packets */
***************
*** 3365,3370 ****
--- 3516,3523 ----
      return 0;
  }       
  
+ 
+ /* TRANS2_SET_FILE_INFORMATION */
  long smb_ReceiveTran2SetFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *opx)
  {
      long code = 0;
***************
*** 3553,3558 ****
--- 3706,3712 ----
      return 0;
  }
  
+ /* TRANS2_FSCTL */
  long 
  smb_ReceiveTran2FSCTL(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *outp)
  {
***************
*** 3560,3565 ****
--- 3714,3720 ----
      return CM_ERROR_BADOP;
  }
  
+ /* TRANS2_IOCTL2 */
  long 
  smb_ReceiveTran2IOCTL(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *outp)
  {
***************
*** 3567,3572 ****
--- 3722,3728 ----
      return CM_ERROR_BADOP;
  }
  
+ /* TRANS2_FIND_NOTIFY_FIRST */
  long 
  smb_ReceiveTran2FindNotifyFirst(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *outp)
  {
***************
*** 3574,3579 ****
--- 3730,3736 ----
      return CM_ERROR_BADOP;
  }
  
+ /* TRANS2_FIND_NOTIFY_NEXT */
  long 
  smb_ReceiveTran2FindNotifyNext(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *outp)
  {
***************
*** 3581,3586 ****
--- 3738,3744 ----
      return CM_ERROR_BADOP;
  }
  
+ /* TRANS2_CREATE_DIRECTORY */
  long 
  smb_ReceiveTran2CreateDirectory(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *outp)
  {
***************
*** 3588,3593 ****
--- 3746,3752 ----
      return CM_ERROR_BADOP;
  }
  
+ /* TRANS2_SESSION_SETUP */
  long 
  smb_ReceiveTran2SessionSetup(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *outp)
  {
***************
*** 3605,3610 ****
--- 3764,3770 ----
      USHORT NetworkAddressOffset;
  };
  
+ /* TRANS2_GET_DFS_REFERRAL */
  long 
  smb_ReceiveTran2GetDFSReferral(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op)
  {
***************
*** 3620,3627 ****
  #ifdef DFS_SUPPORT
      long code = 0;
      int maxReferralLevel = 0;
!     char requestFileName[1024] = "";
!     char referralPath[1024] = "";
      smb_tran2Packet_t *outp = 0;
      cm_user_t *userp = 0;
      cm_scache_t *scp = 0;
--- 3780,3787 ----
  #ifdef DFS_SUPPORT
      long code = 0;
      int maxReferralLevel = 0;
!     clientchar_t requestFileName[1024] = _C("");
!     clientchar_t referralPath[1024] = _C("");
      smb_tran2Packet_t *outp = 0;
      cm_user_t *userp = 0;
      cm_scache_t *scp = 0;
***************
*** 3636,3661 ****
      maxReferralLevel = p->parmsp[0];
  
      GetCPInfo(CP_ACP, &CodePageInfo);
!     WideCharToMultiByte(CP_ACP, 0, (LPCWSTR) &p->parmsp[1], -1, 
!                         requestFileName, 1024, NULL, NULL);
  
!     osi_Log2(smb_logp,"ReceiveTran2GetDfsReferral [%d][%s]", 
!              maxReferralLevel, osi_LogSaveString(smb_logp, requestFileName));
  
!     nbnLen = (int)strlen(cm_NetbiosName);
!     reqLen = (int)strlen(requestFileName);
  
      if (reqLen > nbnLen + 2 && requestFileName[0] == '\\' &&
!         !_strnicmp(cm_NetbiosName,&requestFileName[1],nbnLen) &&
          requestFileName[nbnLen+1] == '\\') 
      {
          int found = 0;
  
!         if (!_strnicmp("all",&requestFileName[nbnLen+2],3) ||
!              !_strnicmp("*.",&requestFileName[nbnLen+2],2)) 
!         {
              found = 1;
!             strcpy(referralPath, requestFileName);
              refLen = reqLen;
          } else {
              userp = smb_GetTran2User(vcp, p);
--- 3796,3819 ----
      maxReferralLevel = p->parmsp[0];
  
      GetCPInfo(CP_ACP, &CodePageInfo);
!     cm_Utf16ToClientString(&p->parmsp[1], -1, requestFileName, lengthof(requestFileName));
  
!     osi_Log2(smb_logp,"ReceiveTran2GetDfsReferral [%d][%S]", 
!              maxReferralLevel, osi_LogSaveClientString(smb_logp, requestFileName));
  
!     nbnLen = (int)cm_ClientStrLen(cm_NetbiosNameC);
!     reqLen = (int)cm_ClientStrLen(requestFileName);
  
      if (reqLen > nbnLen + 2 && requestFileName[0] == '\\' &&
!         !cm_ClientStrCmpNI(cm_NetbiosNameC, &requestFileName[1], nbnLen) &&
          requestFileName[nbnLen+1] == '\\') 
      {
          int found = 0;
  
!         if (!cm_ClientStrCmpNI(_C("all"), &requestFileName[nbnLen+2], 3) ||
!             !cm_ClientStrCmpNI(_C("*."), &requestFileName[nbnLen+2], 2)) {
              found = 1;
!             cm_ClientStrCpy(referralPath, lengthof(referralPath), requestFileName);
              refLen = reqLen;
          } else {
              userp = smb_GetTran2User(vcp, p);
***************
*** 3664,3670 ****
                  code = CM_ERROR_BADSMB;
                  goto done;
              }   
! 
              /* 
               * We have a requested path.  Check to see if it is something 
               * we know about.
--- 3822,3828 ----
                  code = CM_ERROR_BADSMB;
                  goto done;
              }   
!             
              /* 
               * We have a requested path.  Check to see if it is something 
               * we know about.
***************
*** 3679,3698 ****
              if (code == 0) {
                  /* Yes it is. */
                  found = 1;
!                 strcpy(referralPath, requestFileName);
                  refLen = reqLen;
              } else if (code == CM_ERROR_PATH_NOT_COVERED ) {
!                 char temp[1024];
!                 char pathName[1024];
!                 char *lastComponent;
                  /* 
                   * we have a msdfs link somewhere in the path
                   * we should figure out where in the path the link is.
                   * and return it.
                   */
!                 osi_Log1(smb_logp,"ReceiveTran2GetDfsReferral PATH_NOT_COVERED [%s]", requestFileName);
  
!                 strcpy(temp, &requestFileName[nbnLen+2]);
  
                  do {
                      if (dscp) {
--- 3837,3856 ----
              if (code == 0) {
                  /* Yes it is. */
                  found = 1;
!                 cm_ClientStrCpy(referralPath, lengthof(referralPath), requestFileName);
                  refLen = reqLen;
              } else if (code == CM_ERROR_PATH_NOT_COVERED ) {
!                 clientchar_t temp[1024];
!                 clientchar_t pathName[1024];
!                 clientchar_t *lastComponent;
                  /* 
                   * we have a msdfs link somewhere in the path
                   * we should figure out where in the path the link is.
                   * and return it.
                   */
!                 osi_Log1(smb_logp,"ReceiveTran2GetDfsReferral PATH_NOT_COVERED [%S]", requestFileName);
  
!                 cm_ClientStrCpy(temp, lengthof(temp), &requestFileName[nbnLen+2]);
  
                  do {
                      if (dscp) {
***************
*** 3720,3734 ****
                  /* scp should now be the DfsLink we are looking for */
                  if (scp) {
                      /* figure out how much of the input path was used */
!                     reqLen = (int)(nbnLen+2 + strlen(pathName) + 1 + strlen(lastComponent));
  
!                     strcpy(referralPath, &scp->mountPointStringp[strlen("msdfs:")]);
!                     refLen = (int)strlen(referralPath);
                      found = 1;
                  }
              } else {
!                 char shareName[MAX_PATH + 1];
!                 char *p, *q;
                  /* we may have a sharename that is a volume reference */
  
                  for (p = &requestFileName[nbnLen+2], q = shareName; *p && *p != '\\'; p++, q++)
--- 3878,3893 ----
                  /* scp should now be the DfsLink we are looking for */
                  if (scp) {
                      /* figure out how much of the input path was used */
!                     reqLen = (int)(nbnLen+2 + cm_ClientStrLen(pathName) + 1 + cm_ClientStrLen(lastComponent));
  
!                     cm_FsStringToClientString(&scp->mountPointStringp[strlen("msdfs:")], -1,
!                                               referralPath, lengthof(referralPath));
!                     refLen = (int)cm_ClientStrLen(referralPath);
                      found = 1;
                  }
              } else {
!                 clientchar_t shareName[MAX_PATH + 1];
!                 clientchar_t *p, *q;
                  /* we may have a sharename that is a volume reference */
  
                  for (p = &requestFileName[nbnLen+2], q = shareName; *p && *p != '\\'; p++, q++)
***************
*** 3738,3751 ****
                  *q = '\0';
                  
                  if (smb_FindShare(vcp, vcp->usersp, shareName, &p)) {
!                     code = cm_NameI(cm_data.rootSCachep, "", 
                                      CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                                      userp, p, &req, &scp);
                      free(p);
  
                      if (code == 0) {
                          found = 1;
!                         strcpy(referralPath, requestFileName);
                          refLen = reqLen;
                      }
                  }
--- 3897,3911 ----
                  *q = '\0';
                  
                  if (smb_FindShare(vcp, vcp->usersp, shareName, &p)) {
!                     code = cm_NameI(cm_data.rootSCachep, _C(""), 
                                      CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
                                      userp, p, &req, &scp);
                      free(p);
  
                      if (code == 0) {
                          found = 1;
!                         cm_ClientStrCpy(referralPath, lengthof(referralPath),
!                                         requestFileName);
                          refLen = reqLen;
                      }
                  }
***************
*** 3811,3816 ****
--- 3971,3977 ----
  #endif /* DFS_SUPPORT */
  }
  
+ /* TRANS2_REPORT_DFS_INCONSISTENCY */
  long 
  smb_ReceiveTran2ReportDFSInconsistency(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *outp)
  {
***************
*** 3829,3852 ****
  
  static long 
  smb_ApplyV3DirListPatches(cm_scache_t *dscp,smb_dirListPatch_t **dirPatchespp, 
!                           char * tidPathp, char * relPathp, 
                            int infoLevel, cm_user_t *userp,
                            cm_req_t *reqp)
  {
      long code = 0;
      cm_scache_t *scp;
      cm_scache_t *targetScp;			/* target if scp is a symlink */
-     char *dptr;
      afs_uint32 dosTime;
      FILETIME ft;
-     int shortTemp;
      unsigned short attr;
      unsigned long lattr;
      smb_dirListPatch_t *patchp;
      smb_dirListPatch_t *npatchp;
      afs_uint32 rights;
      afs_int32 mustFake = 0;
!     char path[AFSPATHMAX];
  
      code = cm_FindACLCache(dscp, userp, &rights);
      if (code == 0 && !(rights & PRSFS_READ))
--- 3990,4011 ----
  
  static long 
  smb_ApplyV3DirListPatches(cm_scache_t *dscp,smb_dirListPatch_t **dirPatchespp, 
!                           clientchar_t * tidPathp, clientchar_t * relPathp, 
                            int infoLevel, cm_user_t *userp,
                            cm_req_t *reqp)
  {
      long code = 0;
      cm_scache_t *scp;
      cm_scache_t *targetScp;			/* target if scp is a symlink */
      afs_uint32 dosTime;
      FILETIME ft;
      unsigned short attr;
      unsigned long lattr;
      smb_dirListPatch_t *patchp;
      smb_dirListPatch_t *npatchp;
      afs_uint32 rights;
      afs_int32 mustFake = 0;
!     clientchar_t path[AFSPATHMAX];
  
      code = cm_FindACLCache(dscp, userp, &rights);
      if (code == 0 && !(rights & PRSFS_READ))
***************
*** 3866,3872 ****
  
      for(patchp = *dirPatchespp; patchp; patchp =
           (smb_dirListPatch_t *) osi_QNext(&patchp->q)) {
!         snprintf(path, AFSPATHMAX, "%s\\%s", relPathp ? relPathp : "", patchp->dep->name);
          reqp->relPathp = path;
          reqp->tidPathp = tidPathp;
  
--- 4025,4032 ----
  
      for(patchp = *dirPatchespp; patchp; patchp =
           (smb_dirListPatch_t *) osi_QNext(&patchp->q)) {
!         cm_ClientStrPrintfN(path, lengthof(path),_C("%s\\%S"),
!                             relPathp ? relPathp : _C(""), patchp->dep->name);
          reqp->relPathp = path;
          reqp->tidPathp = tidPathp;
  
***************
*** 3882,3918 ****
          if (mustFake || code) { 
              lock_ReleaseWrite(&scp->rw);
  
-             dptr = patchp->dptr;
- 
              /* Plug in fake timestamps. A time stamp of 0 causes 'invalid parameter'
                 errors in the client. */
              if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO) {
                  /* 1969-12-31 23:59:59 +00 */
                  ft.dwHighDateTime = 0x19DB200;
                  ft.dwLowDateTime = 0x5BB78980;
  
                  /* copy to Creation Time */
!                 *((FILETIME *)dptr) = ft;
!                 dptr += 8;
! 
!                 /* copy to Last Access Time */
!                 *((FILETIME *)dptr) = ft;
!                 dptr += 8;
! 
!                 /* copy to Last Write Time */
!                 *((FILETIME *)dptr) = ft;
!                 dptr += 8;
! 
!                 /* copy to Change Time */
!                 *((FILETIME *)dptr) = ft;
!                 dptr += 24;
  
                  switch (scp->fileType) {
                  case CM_SCACHETYPE_DIRECTORY:
                  case CM_SCACHETYPE_MOUNTPOINT:
                  case CM_SCACHETYPE_SYMLINK:
                  case CM_SCACHETYPE_INVALID:
!                     *((u_long *)dptr) = SMB_ATTR_DIRECTORY;
                      break;
                  default:
                      /* if we get here we either have a normal file
--- 4042,4068 ----
          if (mustFake || code) { 
              lock_ReleaseWrite(&scp->rw);
  
              /* Plug in fake timestamps. A time stamp of 0 causes 'invalid parameter'
                 errors in the client. */
              if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO) {
+                 smb_V3FileAttrsLong * fa = (smb_V3FileAttrsLong *) patchp->dptr;
+ 
                  /* 1969-12-31 23:59:59 +00 */
                  ft.dwHighDateTime = 0x19DB200;
                  ft.dwLowDateTime = 0x5BB78980;
  
                  /* copy to Creation Time */
!                 fa->creationTime = ft;
!                 fa->lastAccessTime = ft;
!                 fa->lastWriteTime = ft;
!                 fa->lastChangeTime = ft;
  
                  switch (scp->fileType) {
                  case CM_SCACHETYPE_DIRECTORY:
                  case CM_SCACHETYPE_MOUNTPOINT:
                  case CM_SCACHETYPE_SYMLINK:
                  case CM_SCACHETYPE_INVALID:
!                     fa->extFileAttributes = SMB_ATTR_DIRECTORY;
                      break;
                  default:
                      /* if we get here we either have a normal file
***************
*** 3923,3971 ****
                       * and odd means it is to be treated as a file.
                       */
                      if (mustFake && (scp->fid.vnode & 0x1))
!                         *((u_long *)dptr) = SMB_ATTR_DIRECTORY;
                      else
!                         *((u_long *)dptr) = SMB_ATTR_NORMAL;
!                         
                  }
                  /* merge in hidden attribute */
                  if ( patchp->flags & SMB_DIRLISTPATCH_DOTFILE ) {
!                     *((u_long *)dptr) |= SMB_ATTR_HIDDEN;
                  }
-                 dptr += 4;
              } else {
                  /* 1969-12-31 23:59:58 +00*/
                  dosTime = 0xEBBFBF7D;
  
!                 /* and copy out date */
!                 shortTemp = (dosTime>>16) & 0xffff;
!                 *((u_short *)dptr) = shortTemp;
!                 dptr += 2;
! 
!                 /* copy out creation time */
!                 shortTemp = dosTime & 0xffff;
!                 *((u_short *)dptr) = shortTemp;
!                 dptr += 2;
! 
!                 /* and copy out date */
!                 shortTemp = (dosTime>>16) & 0xffff;
!                 *((u_short *)dptr) = shortTemp;
!                 dptr += 2;
!     			
!                 /* copy out access time */
!                 shortTemp = dosTime & 0xffff;
!                 *((u_short *)dptr) = shortTemp;
!                 dptr += 2;
! 
!                 /* and copy out date */
!                 shortTemp = (dosTime>>16) & 0xffff;
!                 *((u_short *)dptr) = shortTemp;
!                 dptr += 2;
!     			
!                 /* copy out mod time */
!                 shortTemp = dosTime & 0xffff;
!                 *((u_short *)dptr) = shortTemp;
!                 dptr += 10;
  
                  /* set the attribute */
                  switch (scp->fileType) {
--- 4073,4095 ----
                       * and odd means it is to be treated as a file.
                       */
                      if (mustFake && (scp->fid.vnode & 0x1))
!                         fa->extFileAttributes = SMB_ATTR_DIRECTORY;
                      else
!                         fa->extFileAttributes = SMB_ATTR_NORMAL;
                  }
                  /* merge in hidden attribute */
                  if ( patchp->flags & SMB_DIRLISTPATCH_DOTFILE ) {
!                     fa->extFileAttributes |= SMB_ATTR_HIDDEN;
                  }
              } else {
+                 smb_V3FileAttrsShort * fa = (smb_V3FileAttrsShort *) patchp->dptr;
+ 
                  /* 1969-12-31 23:59:58 +00*/
                  dosTime = 0xEBBFBF7D;
  
!                 fa->creationDateTime = MAKELONG(HIWORD(dosTime),LOWORD(dosTime));
!                 fa->lastAccessDateTime = fa->creationDateTime;
!                 fa->lastWriteDateTime = fa->creationDateTime;
  
                  /* set the attribute */
                  switch (scp->fileType) {
***************
*** 3973,3988 ****
                  case CM_SCACHETYPE_MOUNTPOINT:
                  case CM_SCACHETYPE_SYMLINK:
                  case CM_SCACHETYPE_INVALID:
!                     attr = SMB_ATTR_DIRECTORY;
                  default:
!                     attr = SMB_ATTR_NORMAL;
                  }
                  /* merge in hidden (dot file) attribute */
                  if ( patchp->flags & SMB_DIRLISTPATCH_DOTFILE ) {
!                     attr |= SMB_ATTR_HIDDEN;
                  }       
-                 *dptr++ = attr & 0xff;
-                 *dptr++ = (attr >> 8) & 0xff;
              }
              
              cm_ReleaseSCache(scp);
--- 4097,4121 ----
                  case CM_SCACHETYPE_MOUNTPOINT:
                  case CM_SCACHETYPE_SYMLINK:
                  case CM_SCACHETYPE_INVALID:
!                     fa->attributes = SMB_ATTR_DIRECTORY;
!                     break;
                  default:
!                     /* if we get here we either have a normal file
!                      * or we have a file for which we have never 
!                      * received status info.  In this case, we can
!                      * check the even/odd value of the entry's vnode.
!                      * even means it is to be treated as a directory
!                      * and odd means it is to be treated as a file.
!                      */
!                     if (mustFake && (scp->fid.vnode & 0x1))
!                         fa->attributes = SMB_ATTR_DIRECTORY;
!                     else
!                         fa->attributes = SMB_ATTR_NORMAL;
                  }
                  /* merge in hidden (dot file) attribute */
                  if ( patchp->flags & SMB_DIRLISTPATCH_DOTFILE ) {
!                     fa->attributes |= SMB_ATTR_HIDDEN;
                  }       
              }
              
              cm_ReleaseSCache(scp);
***************
*** 3995,4001 ****
          code = 0;
          while (code == 0 && scp->fileType == CM_SCACHETYPE_SYMLINK) {
              lock_ReleaseWrite(&scp->rw);
!             snprintf(path, AFSPATHMAX, "%s\\%s", relPathp ? relPathp : "", patchp->dep->name);
              reqp->relPathp = path;
              reqp->tidPathp = tidPathp;
              code = cm_EvaluateSymLink(dscp, scp, &targetScp, userp, reqp);
--- 4128,4135 ----
          code = 0;
          while (code == 0 && scp->fileType == CM_SCACHETYPE_SYMLINK) {
              lock_ReleaseWrite(&scp->rw);
!             cm_ClientStrPrintfN(path, lengthof(path), _C("%s\\%S"),
!                                 relPathp ? relPathp : _C(""), patchp->dep->name);
              reqp->relPathp = path;
              reqp->tidPathp = tidPathp;
              code = cm_EvaluateSymLink(dscp, scp, &targetScp, userp, reqp);
***************
*** 4015,4047 ****
  
          lock_ConvertWToR(&scp->rw);
  
-         dptr = patchp->dptr;
- 
          if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO) {
              /* get filetime */
              smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime);
  
!             /* copy to Creation Time */
!             *((FILETIME *)dptr) = ft;
!             dptr += 8;
! 
!             /* copy to Last Access Time */
!             *((FILETIME *)dptr) = ft;
!             dptr += 8;
! 
!             /* copy to Last Write Time */
!             *((FILETIME *)dptr) = ft;
!             dptr += 8;
! 
!             /* copy to Change Time */
!             *((FILETIME *)dptr) = ft;
!             dptr += 8;
  
              /* Use length for both file length and alloc length */
!             *((LARGE_INTEGER *)dptr) = scp->length;
!             dptr += 8;
!             *((LARGE_INTEGER *)dptr) = scp->length;
!             dptr += 8;
  
              /* Copy attributes */
              lattr = smb_ExtAttributes(scp);
--- 4149,4168 ----
  
          lock_ConvertWToR(&scp->rw);
  
          if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO) {
+             smb_V3FileAttrsLong * fa = (smb_V3FileAttrsLong *) patchp->dptr;
+ 
              /* get filetime */
              smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime);
  
!             fa->creationTime = ft;
!             fa->lastAccessTime = ft;
!             fa->lastWriteTime = ft;
!             fa->lastChangeTime = ft;
  
              /* Use length for both file length and alloc length */
!             fa->endOfFile = scp->length;
!             fa->allocationSize = scp->length;
  
              /* Copy attributes */
              lattr = smb_ExtAttributes(scp);
***************
*** 4059,4107 ****
                  else
                      lattr |= SMB_ATTR_HIDDEN;
              }
!             *((u_long *)dptr) = lattr;
!             dptr += 4;
          } else {
              /* get dos time */
              smb_SearchTimeFromUnixTime(&dosTime, scp->clientModTime);
  
!             /* and copy out date */
!             shortTemp = (dosTime>>16) & 0xffff;
!             *((u_short *)dptr) = shortTemp;
!             dptr += 2;
! 
!             /* copy out creation time */
!             shortTemp = dosTime & 0xffff;
!             *((u_short *)dptr) = shortTemp;
!             dptr += 2;
! 
!             /* and copy out date */
!             shortTemp = (dosTime>>16) & 0xffff;
!             *((u_short *)dptr) = shortTemp;
!             dptr += 2;
! 
!             /* copy out access time */
!             shortTemp = dosTime & 0xffff;
!             *((u_short *)dptr) = shortTemp;
!             dptr += 2;
! 
!             /* and copy out date */
!             shortTemp = (dosTime>>16) & 0xffff;
!             *((u_short *)dptr) = shortTemp;
!             dptr += 2;
! 
!             /* copy out mod time */
!             shortTemp = dosTime & 0xffff;
!             *((u_short *)dptr) = shortTemp;
!             dptr += 2;
  
              /* copy out file length and alloc length,
               * using the same for both
               */
!             *((u_long *)dptr) = scp->length.LowPart;
!             dptr += 4;
!             *((u_long *)dptr) = scp->length.LowPart;
!             dptr += 4;
  
              /* finally copy out attributes as short */
              attr = smb_Attributes(scp);
--- 4180,4202 ----
                  else
                      lattr |= SMB_ATTR_HIDDEN;
              }
! 
!             fa->extFileAttributes = lattr;
          } else {
+             smb_V3FileAttrsShort * fa = (smb_V3FileAttrsShort *) patchp->dptr;
+ 
              /* get dos time */
              smb_SearchTimeFromUnixTime(&dosTime, scp->clientModTime);
  
!             fa->creationDateTime = MAKELONG(HIWORD(dosTime), LOWORD(dosTime));
!             fa->lastAccessDateTime = fa->creationDateTime;
!             fa->lastWriteDateTime = fa->creationDateTime;
  
              /* copy out file length and alloc length,
               * using the same for both
               */
!             fa->dataSize = scp->length.LowPart;
!             fa->allocationSize = scp->length.LowPart;
  
              /* finally copy out attributes as short */
              attr = smb_Attributes(scp);
***************
*** 4112,4119 ****
                  else
                      lattr |= SMB_ATTR_HIDDEN;
              }
!             *dptr++ = attr & 0xff;
!             *dptr++ = (attr >> 8) & 0xff;
          }
  
          lock_ReleaseRead(&scp->rw);
--- 4207,4213 ----
                  else
                      lattr |= SMB_ATTR_HIDDEN;
              }
!             fa->attributes = attr;
          }
  
          lock_ReleaseRead(&scp->rw);
***************
*** 4132,4261 ****
      return code;
  }
  
- // char table for case insensitive comparison
- char mapCaseTable[256];
- 
- VOID initUpperCaseTable(VOID) 
- {
-     int i;
-     for (i = 0; i < 256; ++i) 
-        mapCaseTable[i] = toupper(i);
-     // make '"' match '.' 
-     mapCaseTable[(int)'"'] = toupper('.');
-     // make '<' match '*' 
-     mapCaseTable[(int)'<'] = toupper('*');
-     // make '>' match '?' 
-     mapCaseTable[(int)'>'] = toupper('?');    
- }
- 
- // Compare 'pattern' (containing metacharacters '*' and '?') with the file
- // name 'name'.
- // Note : this procedure works recursively calling itself.
- // Parameters
- // PSZ pattern    : string containing metacharacters.
- // PSZ name       : file name to be compared with 'pattern'.
- // Return value
- // BOOL : TRUE/FALSE (match/mistmatch)
- 
- BOOL 
- szWildCardMatchFileName(PSZ pattern, PSZ name, int casefold) 
- {
-     PSZ pename;         // points to the last 'name' character
-     PSZ p;
-     pename = name + strlen(name) - 1;
-     while (*name) {
-         switch (*pattern) {
-         case '?':
- 	    ++pattern;
-             if (*name == '.')
- 		continue;
-             ++name;
-             break;
-          case '*':
-             ++pattern;
-             if (*pattern == '\0')
-                 return TRUE;
-             for (p = pename; p >= name; --p) {
-                 if ((casefold && (mapCaseTable[*p] == mapCaseTable[*pattern]) ||
-                      !casefold && (*p == *pattern)) &&
-                      szWildCardMatchFileName(pattern + 1, p + 1, casefold))
-                     return TRUE;
-             } /* endfor */
-             return FALSE;
-         default:
-             if ((casefold && mapCaseTable[*name] != mapCaseTable[*pattern]) ||
-                 (!casefold && *name != *pattern))
-                 return FALSE;
-             ++pattern, ++name;
-             break;
-         } /* endswitch */
-     } /* endwhile */ 
- 
-     /* if all we have left are wildcards, then we match */
-     for (;*pattern; pattern++) {
- 	if (*pattern != '*' && *pattern != '?')
- 	    return FALSE;
-     }
-     return TRUE;
- }
- 
- /* do a case-folding search of the star name mask with the name in namep.
-  * Return 1 if we match, otherwise 0.
-  */
- int smb_V3MatchMask(char *namep, char *maskp, int flags) 
- {
-     char * newmask;
-     int    i, j, star, qmark, casefold, retval;
- 
-     /* make sure we only match 8.3 names, if requested */
-     if ((flags & CM_FLAG_8DOT3) && !cm_Is8Dot3(namep)) 
-         return 0;
-     
-     casefold = (flags & CM_FLAG_CASEFOLD) ? 1 : 0;
- 
-     /* optimize the pattern:
-      * if there is a mixture of '?' and '*',
-      * for example  the sequence "*?*?*?*"
-      * must be turned into the form "*"
-      */
-     newmask = (char *)malloc(strlen(maskp)+1);
-     for ( i=0, j=0, star=0, qmark=0; maskp[i]; i++) {
-         switch ( maskp[i] ) {
-         case '?':
-         case '>':
-             qmark++;
-             break;
-         case '<':
-         case '*':
-             star++;
-             break;
-         default:
-             if ( star ) {
-                 newmask[j++] = '*';
-             } else if ( qmark ) {
-                 while ( qmark-- )
-                     newmask[j++] = '?';
-             }
-             newmask[j++] = maskp[i];
-             star = 0;
-             qmark = 0;
-         }
-     }
-     if ( star ) {
-         newmask[j++] = '*';
-     } else if ( qmark ) {
-         while ( qmark-- )
-             newmask[j++] = '?';
-     }
-     newmask[j++] = '\0';
- 
-     retval = szWildCardMatchFileName(newmask, namep, casefold) ? 1:0;
- 
-     free(newmask);
-     return retval;
- }
- 
- 
  /* smb_ReceiveTran2SearchDir implements both 
   * Tran2_Find_First and Tran2_Find_Next
   */
--- 4226,4231 ----
***************
*** 4273,4313 ****
     the usual mechanism. 
     
     This function will return either CM_ERROR_NOSUCHFILE or SUCCESS.
     */
  long smb_T2SearchDirSingle(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *opx)
  {
      int attribute;
      long nextCookie;
      long code = 0, code2 = 0;
!     char *pathp = 0;
      int maxCount;
      smb_dirListPatch_t *dirListPatchesp;
      smb_dirListPatch_t *curPatchp;
!     long orbytes;			/* # of bytes in this output record */
!     long ohbytes;			/* # of bytes, except file name */
!     long onbytes;			/* # of bytes in name, incl. term. null */
      cm_scache_t *scp = NULL;
      cm_scache_t *targetscp = NULL;
      cm_user_t *userp = NULL;
      char *op;				/* output data ptr */
      char *origOp;			/* original value of op */
      cm_space_t *spacep;			/* for pathname buffer */
!     long maxReturnData;			/* max # of return data */
      long maxReturnParms;		/* max # of return parms */
      long bytesInBuffer;			/* # data bytes in the output buffer */
!     char *maskp;			/* mask part of path */
      int infoLevel;
      int searchFlags;
      int eos;
      smb_tran2Packet_t *outp;		/* response packet */
!     char *tidPathp = 0;
      int align;
!     char shortName[13];			/* 8.3 name if needed */
      int NeedShortName;
!     char *shortNameEnd;
      cm_dirEntry_t * dep = NULL;
      cm_req_t req;
      char * s;
  
      cm_InitReq(&req);
  
--- 4243,4287 ----
     the usual mechanism. 
     
     This function will return either CM_ERROR_NOSUCHFILE or SUCCESS.
+ 
+    TRANS2_FIND_FIRST2 and TRANS2_FIND_NEXT2
     */
  long smb_T2SearchDirSingle(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *opx)
  {
      int attribute;
      long nextCookie;
      long code = 0, code2 = 0;
!     clientchar_t *pathp = 0;
      int maxCount;
      smb_dirListPatch_t *dirListPatchesp;
      smb_dirListPatch_t *curPatchp;
!     size_t orbytes;			/* # of bytes in this output record */
!     size_t ohbytes;			/* # of bytes, except file name */
!     size_t onbytes;			/* # of bytes in name, incl. term. null */
      cm_scache_t *scp = NULL;
      cm_scache_t *targetscp = NULL;
      cm_user_t *userp = NULL;
      char *op;				/* output data ptr */
      char *origOp;			/* original value of op */
      cm_space_t *spacep;			/* for pathname buffer */
!     unsigned long maxReturnData;	/* max # of return data */
      long maxReturnParms;		/* max # of return parms */
      long bytesInBuffer;			/* # data bytes in the output buffer */
!     clientchar_t *maskp;			/* mask part of path */
      int infoLevel;
      int searchFlags;
      int eos;
      smb_tran2Packet_t *outp;		/* response packet */
!     clientchar_t *tidPathp = 0;
      int align;
!     clientchar_t shortName[13];			/* 8.3 name if needed */
      int NeedShortName;
!     clientchar_t *shortNameEnd;
      cm_dirEntry_t * dep = NULL;
      cm_req_t req;
      char * s;
+     void * attrp = NULL;
+     smb_tran2Find_t * fp;
  
      cm_InitReq(&req);
  
***************
*** 4323,4365 ****
      maxCount = p->parmsp[1];
      infoLevel = p->parmsp[3];
      searchFlags = p->parmsp[2];
!     pathp = ((char *) p->parmsp) + 12;	/* points to path */
      nextCookie = 0;
!     maskp = strrchr(pathp, '\\');
      if (maskp == NULL) 
  	maskp = pathp;
      else 
  	maskp++;	/* skip over backslash */
      /* track if this is likely to match a lot of entries */
  
!     osi_Log2(smb_logp, "smb_T2SearchDirSingle : path[%s], mask[%s]",
!             osi_LogSaveString(smb_logp, pathp),
!             osi_LogSaveString(smb_logp, maskp));
  
      switch ( infoLevel ) {
      case SMB_INFO_STANDARD:
  	s = "InfoStandard";
      	break;
      case SMB_INFO_QUERY_EA_SIZE:
  	s = "InfoQueryEaSize";
      	break;
      case SMB_INFO_QUERY_EAS_FROM_LIST:
  	s = "InfoQueryEasFromList";
      	break;
      case SMB_FIND_FILE_DIRECTORY_INFO:
  	s = "FindFileDirectoryInfo";
      	break;
      case SMB_FIND_FILE_FULL_DIRECTORY_INFO:
  	s = "FindFileFullDirectoryInfo";
      	break;
      case SMB_FIND_FILE_NAMES_INFO:
  	s = "FindFileNamesInfo";
      	break;
      case SMB_FIND_FILE_BOTH_DIRECTORY_INFO:
  	s = "FindFileBothDirectoryInfo";
      	break;
      default:
  	s = "unknownInfoLevel";
      }
  
      osi_Log1(smb_logp, "smb_T2SearchDirSingle info level: %s", s);
--- 4297,4354 ----
      maxCount = p->parmsp[1];
      infoLevel = p->parmsp[3];
      searchFlags = p->parmsp[2];
!     pathp = smb_ParseStringT2Parm(p, (char *) &(p->parmsp[6]), NULL, SMB_STRF_ANSIPATH);
      nextCookie = 0;
!     maskp = cm_ClientStrRChr(pathp,  '\\');
      if (maskp == NULL) 
  	maskp = pathp;
      else 
  	maskp++;	/* skip over backslash */
      /* track if this is likely to match a lot of entries */
  
!     osi_Log2(smb_logp, "smb_T2SearchDirSingle : path[%S], mask[%S]",
!              osi_LogSaveClientString(smb_logp, pathp),
!              osi_LogSaveClientString(smb_logp, maskp));
  
      switch ( infoLevel ) {
      case SMB_INFO_STANDARD:
  	s = "InfoStandard";
+         ohbytes = sizeof(fp->u.FstandardInfo);
      	break;
+ 
      case SMB_INFO_QUERY_EA_SIZE:
+         ohbytes = sizeof(fp->u.FeaSizeInfo);
  	s = "InfoQueryEaSize";
      	break;
+ 
      case SMB_INFO_QUERY_EAS_FROM_LIST:
+         ohbytes = sizeof(fp->u.FeasFromListInfo);
  	s = "InfoQueryEasFromList";
      	break;
+ 
      case SMB_FIND_FILE_DIRECTORY_INFO:
  	s = "FindFileDirectoryInfo";
+         ohbytes = sizeof(fp->u.FfileDirectoryInfo);
      	break;
+ 
      case SMB_FIND_FILE_FULL_DIRECTORY_INFO:
  	s = "FindFileFullDirectoryInfo";
+         ohbytes = sizeof(fp->u.FfileFullDirectoryInfo);
      	break;
+ 
      case SMB_FIND_FILE_NAMES_INFO:
  	s = "FindFileNamesInfo";
+         ohbytes = sizeof(fp->u.FfileNamesInfo);
      	break;
+ 
      case SMB_FIND_FILE_BOTH_DIRECTORY_INFO:
  	s = "FindFileBothDirectoryInfo";
+         ohbytes = sizeof(fp->u.FfileBothDirectoryInfo);
      	break;
+ 
      default:
  	s = "unknownInfoLevel";
+         ohbytes = 0;
      }
  
      osi_Log1(smb_logp, "smb_T2SearchDirSingle info level: %s", s);
***************
*** 4368,4374 ****
               "smb_T2SearchDirSingle attr 0x%x, info level 0x%x, max count %d, flags 0x%x",
               attribute, infoLevel, maxCount, searchFlags);
      
!     if (infoLevel > SMB_FIND_FILE_BOTH_DIRECTORY_INFO) {
          osi_Log1(smb_logp, "Unsupported InfoLevel 0x%x", infoLevel);
          return CM_ERROR_INVAL;
      }
--- 4357,4363 ----
               "smb_T2SearchDirSingle attr 0x%x, info level 0x%x, max count %d, flags 0x%x",
               attribute, infoLevel, maxCount, searchFlags);
      
!     if (ohbytes == 0) {
          osi_Log1(smb_logp, "Unsupported InfoLevel 0x%x", infoLevel);
          return CM_ERROR_INVAL;
      }
***************
*** 4376,4381 ****
--- 4365,4373 ----
      if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO)
          searchFlags &= ~TRAN2_FIND_FLAG_RETURN_RESUME_KEYS;	/* no resume keys */
  
+     if (searchFlags & TRAN2_FIND_FLAG_RETURN_RESUME_KEYS)
+         ohbytes += 4;
+ 
      dirListPatchesp = NULL;
  
      maxReturnData = p->maxReturnData;
***************
*** 4390,4397 ****
      outp = smb_GetTran2ResponsePacket(vcp, p, opx, maxReturnParms,
                                        maxReturnData);
  
!     osi_Log2(smb_logp, "T2SDSingle search dir count %d [%s]",
!              maxCount, osi_LogSaveString(smb_logp, pathp));
          
      /* bail out if request looks bad */
      if (!pathp) {
--- 4382,4389 ----
      outp = smb_GetTran2ResponsePacket(vcp, p, opx, maxReturnParms,
                                        maxReturnData);
  
!     osi_Log2(smb_logp, "T2SDSingle search dir count %d [%S]",
!              maxCount, osi_LogSaveClientString(smb_logp, pathp));
          
      /* bail out if request looks bad */
      if (!pathp) {
***************
*** 4408,4414 ****
  
      /* try to get the vnode for the path name next */
      spacep = cm_GetSpace();
!     smb_StripLastComponent(spacep->data, NULL, pathp);
      code = smb_LookupTIDPath(vcp, p->tid, &tidPathp);
      if (code) {
          cm_ReleaseUser(userp);
--- 4400,4406 ----
  
      /* try to get the vnode for the path name next */
      spacep = cm_GetSpace();
!     smb_StripLastComponent(spacep->wdata, NULL, pathp);
      code = smb_LookupTIDPath(vcp, p->tid, &tidPathp);
      if (code) {
          cm_ReleaseUser(userp);
***************
*** 4417,4423 ****
          return 0;
      }
  
!     code = cm_NameI(cm_data.rootSCachep, spacep->data,
                      CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                      userp, tidPathp, &req, &scp);
      cm_FreeSpace(spacep);
--- 4409,4415 ----
          return 0;
      }
  
!     code = cm_NameI(cm_data.rootSCachep, spacep->wdata,
                      CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                      userp, tidPathp, &req, &scp);
      cm_FreeSpace(spacep);
***************
*** 4484,4489 ****
--- 4476,4483 ----
          op += 4;
      }
  
+     fp = (smb_tran2Find_t *) op;
+ 
      if (infoLevel == SMB_FIND_FILE_BOTH_DIRECTORY_INFO
          && targetscp->fid.vnode != 0
          && !cm_Is8Dot3(maskp)) {
***************
*** 4492,4508 ****
          dfid.vnode = htonl(targetscp->fid.vnode);
          dfid.unique = htonl(targetscp->fid.unique);
  
!         cm_Gen8Dot3NameInt(maskp, &dfid, shortName, &shortNameEnd);
          NeedShortName = 1;
      } else {
          NeedShortName = 0;
      }
  
!     osi_Log4(smb_logp, "T2SDSingle dir vn %u uniq %u name %s (%s)",
! 	      htonl(targetscp->fid.vnode),
! 	      htonl(targetscp->fid.unique),
! 	      osi_LogSaveString(smb_logp, pathp),
! 	      NeedShortName ? osi_LogSaveString(smb_logp, shortName) : "");
  
      /* Eliminate entries that don't match requested attributes */
      if (smb_hideDotFiles && !(attribute & SMB_ATTR_HIDDEN) &&
--- 4486,4502 ----
          dfid.vnode = htonl(targetscp->fid.vnode);
          dfid.unique = htonl(targetscp->fid.unique);
  
!         cm_Gen8Dot3NameIntW(maskp, &dfid, shortName, &shortNameEnd);
          NeedShortName = 1;
      } else {
          NeedShortName = 0;
      }
  
!     osi_Log4(smb_logp, "T2SDSingle dir vn %u uniq %u name %S (%S)",
!              htonl(targetscp->fid.vnode),
!              htonl(targetscp->fid.unique),
!              osi_LogSaveClientString(smb_logp, pathp),
!              (NeedShortName)? osi_LogSaveClientString(smb_logp, shortName) : _C(""));
  
      /* Eliminate entries that don't match requested attributes */
      if (smb_hideDotFiles && !(attribute & SMB_ATTR_HIDDEN) &&
***************
*** 4526,4554 ****
  
      }
  
-     /* Check if the name will fit */
-     if (infoLevel < 0x101)
-         ohbytes = 23;           /* pre-NT */
-     else if (infoLevel == SMB_FIND_FILE_NAMES_INFO)
-         ohbytes = 12;           /* NT names only */
-     else
-         ohbytes = 64;           /* NT */
- 
-     if (infoLevel == SMB_FIND_FILE_BOTH_DIRECTORY_INFO)
-         ohbytes += 26;          /* Short name & length */
- 
-     if (searchFlags & TRAN2_FIND_FLAG_RETURN_RESUME_KEYS) {
-         ohbytes += 4;           /* if resume key required */
-     }
- 
-     if (infoLevel != SMB_INFO_STANDARD
-         && infoLevel != SMB_FIND_FILE_DIRECTORY_INFO
-         && infoLevel != SMB_FIND_FILE_NAMES_INFO)
-         ohbytes += 4;           /* EASIZE */
- 
      /* add header to name & term. null */
!     onbytes = (int)strlen(maskp);
!     orbytes = ohbytes + onbytes + 1;
  
      /* now, we round up the record to a 4 byte alignment, and we make
       * sure that we have enough room here for even the aligned version
--- 4520,4529 ----
  
      }
  
      /* add header to name & term. null */
!     onbytes = 0;
!     smb_UnparseString(opx, NULL, maskp, &onbytes, SMB_STRF_ANSIPATH);
!     orbytes = ohbytes + onbytes;
  
      /* now, we round up the record to a 4 byte alignment, and we make
       * sure that we have enough room here for even the aligned version
***************
*** 4576,4617 ****
       * preceded by its length.
       */
      /* First zero everything else */
!     memset(origOp, 0, ohbytes);
  
!     if (infoLevel <= SMB_FIND_FILE_DIRECTORY_INFO)
!         *(origOp + ohbytes - 1) = (unsigned char) onbytes;
!     else if (infoLevel == SMB_FIND_FILE_NAMES_INFO)
!         *((u_long *)(op + 8)) = onbytes;
!     else
!         *((u_long *)(op + 60)) = onbytes;
!     strcpy(origOp+ohbytes, maskp);
!     if (smb_StoreAnsiFilenames)
!         CharToOem(origOp+ohbytes, origOp+ohbytes);
  
!     /* Short name if requested and needed */
!     if (infoLevel == SMB_FIND_FILE_BOTH_DIRECTORY_INFO) {
          if (NeedShortName) {
!             strcpy(op + 70, shortName);
!             if (smb_StoreAnsiFilenames)
!                 CharToOem(op + 70, op + 70);
!             *(op + 68) = (char)(shortNameEnd - shortName);
!         }
      }
  
!     /* NextEntryOffset and FileIndex */
!     if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO) {
!         int entryOffset = orbytes + align;
!         *((u_long *)op) = 0;
!         *((u_long *)(op+4)) = 0;
      }
  
      if (infoLevel != SMB_FIND_FILE_NAMES_INFO) {
          curPatchp = malloc(sizeof(*curPatchp));
          osi_QAdd((osi_queue_t **) &dirListPatchesp,
                   &curPatchp->q);
!         curPatchp->dptr = op;
!         if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO)
!             curPatchp->dptr += 8;
  
          if (smb_hideDotFiles && smb_IsDotFile(maskp)) {
              curPatchp->flags = SMB_DIRLISTPATCH_DOTFILE;
--- 4551,4629 ----
       * preceded by its length.
       */
      /* First zero everything else */
!     memset(origOp, 0, orbytes);
  
!     onbytes = 0;
!     smb_UnparseString(opx, origOp + ohbytes, maskp, &onbytes, SMB_STRF_ANSIPATH);
! 
!     switch (infoLevel) {
!     case SMB_INFO_STANDARD:
!         fp->u.FstandardInfo.fileNameLength = onbytes;
!         attrp = &fp->u.FstandardInfo.fileAttrs;
!         break;
  
!     case SMB_INFO_QUERY_EA_SIZE:
!         fp->u.FeaSizeInfo.fileNameLength = onbytes;
!         attrp = &fp->u.FeaSizeInfo.fileAttrs;
!         fp->u.FeaSizeInfo.eaSize = 0;
!         break;
! 
!     case SMB_INFO_QUERY_EAS_FROM_LIST:
!         fp->u.FeasFromListInfo.fileNameLength = onbytes;
!         attrp = &fp->u.FeasFromListInfo.fileAttrs;
!         fp->u.FeasFromListInfo.eaSize = 0;
!         break;
! 
!     case SMB_FIND_FILE_BOTH_DIRECTORY_INFO:
          if (NeedShortName) {
! #ifdef SMB_UNICODE
!             int nchars;
! 
!             nchars = cm_ClientStringToUtf16(shortName, -1,
!                                             fp->u.FfileBothDirectoryInfo.shortName,
!                                             sizeof(fp->u.FfileBothDirectoryInfo.shortName)/sizeof(wchar_t));
!             if (nchars > 0)
!                 fp->u.FfileBothDirectoryInfo.shortNameLength = (nchars - 1)*sizeof(wchar_t);
!             else
!                 fp->u.FfileBothDirectoryInfo.shortNameLength = 0;
!             fp->u.FfileBothDirectoryInfo.reserved = 0;
! #else
!             strcpy(fp->u.FfileBothDirectoryInfo.shortName,
!                    shortName);
!             fp->u.FfileBothDirectoryInfo.shortNameLength = cm_ClientStrLen(shortName);
! #endif
      }
+         /* Fallthrough */
  
!     case SMB_FIND_FILE_FULL_DIRECTORY_INFO:
!         fp->u.FfileFullDirectoryInfo.eaSize = 0;
!         /* Fallthrough */
! 
!     case SMB_FIND_FILE_DIRECTORY_INFO:
!         fp->u.FfileDirectoryInfo.nextEntryOffset = 0;
!         fp->u.FfileDirectoryInfo.fileIndex = 0;
!         attrp = &fp->u.FfileDirectoryInfo.fileAttrs;
!         fp->u.FfileDirectoryInfo.fileNameLength = onbytes;
!         break;
! 
!     case SMB_FIND_FILE_NAMES_INFO:
!         fp->u.FfileNamesInfo.nextEntryOffset = 0;
!         fp->u.FfileNamesInfo.fileIndex = 0;
!         fp->u.FfileNamesInfo.fileNameLength = onbytes;
!         break;
! 
!     default:
!         /* we shouldn't hit this case */
!         osi_assertx(FALSE, "Unknown query type");
      }
  
      if (infoLevel != SMB_FIND_FILE_NAMES_INFO) {
+         osi_assert(attrp != NULL);
+ 
          curPatchp = malloc(sizeof(*curPatchp));
          osi_QAdd((osi_queue_t **) &dirListPatchesp,
                   &curPatchp->q);
!         curPatchp->dptr = attrp;
  
          if (smb_hideDotFiles && smb_IsDotFile(maskp)) {
              curPatchp->flags = SMB_DIRLISTPATCH_DOTFILE;
***************
*** 4622,4629 ****
          cm_SetFid(&curPatchp->fid, targetscp->fid.cell, targetscp->fid.volume, targetscp->fid.vnode, targetscp->fid.unique);
  
          /* temp */
!         dep = (cm_dirEntry_t *)malloc(sizeof(cm_dirEntry_t)+strlen(maskp));
!         strcpy(dep->name, maskp);
          dep->fid.vnode = targetscp->fid.vnode;
          dep->fid.unique = targetscp->fid.unique;
          curPatchp->dep = dep;
--- 4634,4644 ----
          cm_SetFid(&curPatchp->fid, targetscp->fid.cell, targetscp->fid.volume, targetscp->fid.vnode, targetscp->fid.unique);
  
          /* temp */
!         {
!             int namelen = cm_ClientStringToFsString(maskp, -1, NULL, 0);
!             dep = (cm_dirEntry_t *)malloc(sizeof(cm_dirEntry_t)+namelen);
!             cm_ClientStringToFsString(maskp, -1, dep->name, namelen);
!         }
          dep->fid.vnode = targetscp->fid.vnode;
          dep->fid.unique = targetscp->fid.unique;
          curPatchp->dep = dep;
***************
*** 4645,4651 ****
      }
  
      /* apply the patches */
!     code2 = smb_ApplyV3DirListPatches(scp, &dirListPatchesp, tidPathp, spacep->data, infoLevel, userp, &req);
  
      outp->parmsp[0] = 0;
      outp->parmsp[1] = 1;        /* number of names returned */
--- 4660,4666 ----
      }
  
      /* apply the patches */
!     code2 = smb_ApplyV3DirListPatches(scp, &dirListPatchesp, tidPathp, spacep->wdata, infoLevel, userp, &req);
  
      outp->parmsp[0] = 0;
      outp->parmsp[1] = 1;        /* number of names returned */
***************
*** 4680,4701 ****
  }
  
  
  long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *opx)
  {
      int attribute;
      long nextCookie;
      char *tp;
      long code = 0, code2 = 0;
!     char *pathp;
      cm_dirEntry_t *dep = 0;
      int maxCount;
      smb_dirListPatch_t *dirListPatchesp = 0;
      smb_dirListPatch_t *curPatchp = 0;
      cm_buf_t *bufferp;
      long temp;
!     long orbytes;			/* # of bytes in this output record */
!     long ohbytes;			/* # of bytes, except file name */
!     long onbytes;			/* # of bytes in name, incl. term. null */
      osi_hyper_t dirLength;
      osi_hyper_t bufferOffset;
      osi_hyper_t curOffset;
--- 4695,4717 ----
  }
  
  
+ /* TRANS2_FIND_FIRST2 and TRANS2_FIND_NEXT2 */
  long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *opx)
  {
      int attribute;
      long nextCookie;
      char *tp;
      long code = 0, code2 = 0;
!     clientchar_t *pathp;
      cm_dirEntry_t *dep = 0;
      int maxCount;
      smb_dirListPatch_t *dirListPatchesp = 0;
      smb_dirListPatch_t *curPatchp = 0;
      cm_buf_t *bufferp;
      long temp;
!     size_t orbytes;			/* # of bytes in this output record */
!     size_t ohbytes;			/* # of bytes, except file name */
!     size_t onbytes;			/* # of bytes in name, incl. term. null */
      osi_hyper_t dirLength;
      osi_hyper_t bufferOffset;
      osi_hyper_t curOffset;
***************
*** 4713,4737 ****
      char *op;			/* output data ptr */
      char *origOp;			/* original value of op */
      cm_space_t *spacep;		/* for pathname buffer */
!     long maxReturnData;		/* max # of return data */
!     long maxReturnParms;		/* max # of return parms */
      long bytesInBuffer;		/* # data bytes in the output buffer */
      int starPattern;
!     char *maskp;			/* mask part of path */
      int infoLevel;
      int searchFlags;
      int eos;
      smb_tran2Packet_t *outp;	/* response packet */
!     char *tidPathp;
!     int align;
!     char shortName[13];		/* 8.3 name if needed */
      int NeedShortName;
      int foundInexact;
!     char *shortNameEnd;
      int fileType;
      cm_fid_t fid;
      cm_req_t req;
      char * s;
  
      cm_InitReq(&req);
  
--- 4729,4755 ----
      char *op;			/* output data ptr */
      char *origOp;			/* original value of op */
      cm_space_t *spacep;		/* for pathname buffer */
!     unsigned long maxReturnData;		/* max # of return data */
!     unsigned long maxReturnParms;		/* max # of return parms */
      long bytesInBuffer;		/* # data bytes in the output buffer */
      int starPattern;
!     clientchar_t *maskp;			/* mask part of path */
      int infoLevel;
      int searchFlags;
      int eos;
      smb_tran2Packet_t *outp;	/* response packet */
!     clientchar_t *tidPathp;
!     unsigned int align;
!     clientchar_t shortName[13];		/* 8.3 name if needed */
      int NeedShortName;
      int foundInexact;
!     clientchar_t *shortNameEnd;
      int fileType;
      cm_fid_t fid;
      cm_req_t req;
+     void * attrp;
      char * s;
+     smb_tran2Find_t * fp;
  
      cm_InitReq(&req);
  
***************
*** 4742,4752 ****
          maxCount = p->parmsp[1];
          infoLevel = p->parmsp[3];
          searchFlags = p->parmsp[2];
!         pathp = ((char *) p->parmsp) + 12;	/* points to path */
!         if (smb_StoreAnsiFilenames)
!             OemToChar(pathp,pathp);
          nextCookie = 0;
!         maskp = strrchr(pathp, '\\');
          if (maskp == NULL) 
              maskp = pathp;
          else 
--- 4760,4768 ----
          maxCount = p->parmsp[1];
          infoLevel = p->parmsp[3];
          searchFlags = p->parmsp[2];
!         pathp = smb_ParseStringT2Parm(p, (char *) (&p->parmsp[6]), NULL, SMB_STRF_ANSIPATH);
          nextCookie = 0;
!         maskp = cm_ClientStrRChr(pathp,  '\\');
          if (maskp == NULL) 
              maskp = pathp;
          else 
***************
*** 4772,4783 ****
                  return code;
              }
          }
! #endif
          dir_enums++;
  
          dsp = smb_NewDirSearch(1);
          dsp->attribute = attribute;
!         strcpy(dsp->mask, maskp);	/* and save mask */
      }
      else {
          osi_assertx(p->opcode == 2, "invalid opcode");
--- 4788,4799 ----
                  return code;
              }
          }
! #endif  /* NOFINDFIRSTOPTIMIZE */
          dir_enums++;
  
          dsp = smb_NewDirSearch(1);
          dsp->attribute = attribute;
!         cm_ClientStrCpy(dsp->mask, lengthof(dsp->mask),  maskp);	/* and save mask */
      }
      else {
          osi_assertx(p->opcode == 2, "invalid opcode");
***************
*** 4801,4827 ****
--- 4817,4858 ----
      switch ( infoLevel ) {
      case SMB_INFO_STANDARD:
  	s = "InfoStandard";
+         ohbytes = sizeof(fp->u.FstandardInfo);
      	break;
+ 
      case SMB_INFO_QUERY_EA_SIZE:
+         ohbytes = sizeof(fp->u.FeaSizeInfo);
  	s = "InfoQueryEaSize";
      	break;
+ 
      case SMB_INFO_QUERY_EAS_FROM_LIST:
+         ohbytes = sizeof(fp->u.FeasFromListInfo);
  	s = "InfoQueryEasFromList";
      	break;
+ 
      case SMB_FIND_FILE_DIRECTORY_INFO:
  	s = "FindFileDirectoryInfo";
+         ohbytes = sizeof(fp->u.FfileDirectoryInfo);
      	break;
+ 
      case SMB_FIND_FILE_FULL_DIRECTORY_INFO:
  	s = "FindFileFullDirectoryInfo";
+         ohbytes = sizeof(fp->u.FfileFullDirectoryInfo);
      	break;
+ 
      case SMB_FIND_FILE_NAMES_INFO:
  	s = "FindFileNamesInfo";
+         ohbytes = sizeof(fp->u.FfileNamesInfo);
      	break;
+ 
      case SMB_FIND_FILE_BOTH_DIRECTORY_INFO:
  	s = "FindFileBothDirectoryInfo";
+         ohbytes = sizeof(fp->u.FfileBothDirectoryInfo);
      	break;
+ 
      default:
  	s = "unknownInfoLevel";
+         ohbytes = 0;
      }
  
      osi_Log1(smb_logp, "T2 search dir info level: %s", s);
***************
*** 4833,4839 ****
      osi_Log3(smb_logp, "...T2 search op %d, id %d, nextCookie 0x%x",
                p->opcode, dsp->cookie, nextCookie);
  
!     if (infoLevel > SMB_FIND_FILE_BOTH_DIRECTORY_INFO) {
          osi_Log1(smb_logp, "Unsupported InfoLevel 0x%x", infoLevel);
          smb_ReleaseDirSearch(dsp);
          return CM_ERROR_INVAL;
--- 4864,4870 ----
      osi_Log3(smb_logp, "...T2 search op %d, id %d, nextCookie 0x%x",
                p->opcode, dsp->cookie, nextCookie);
  
!     if (ohbytes == 0) {
          osi_Log1(smb_logp, "Unsupported InfoLevel 0x%x", infoLevel);
          smb_ReleaseDirSearch(dsp);
          return CM_ERROR_INVAL;
***************
*** 4842,4847 ****
--- 4873,4881 ----
      if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO)
          searchFlags &= ~TRAN2_FIND_FLAG_RETURN_RESUME_KEYS;	/* no resume keys */
  
+     if (searchFlags & TRAN2_FIND_FLAG_RETURN_RESUME_KEYS)
+         ohbytes += 4;
+ 
      dirListPatchesp = NULL;
  
      maxReturnData = p->maxReturnData;
***************
*** 4858,4865 ****
      outp = smb_GetTran2ResponsePacket(vcp, p, opx, maxReturnParms,
                                        maxReturnData);
  
!     osi_Log2(smb_logp, "T2 receive search dir count %d [%s]",
!              maxCount, osi_LogSaveString(smb_logp, pathp));
          
      /* bail out if request looks bad */
      if (p->opcode == 1 && !pathp) {
--- 4892,4899 ----
      outp = smb_GetTran2ResponsePacket(vcp, p, opx, maxReturnParms,
                                        maxReturnData);
  
!     osi_Log2(smb_logp, "T2 receive search dir count %d [%S]",
!              maxCount, osi_LogSaveClientString(smb_logp, pathp));
          
      /* bail out if request looks bad */
      if (p->opcode == 1 && !pathp) {
***************
*** 4888,4894 ****
          code = 0;
      } else {
          spacep = cm_GetSpace();
!         smb_StripLastComponent(spacep->data, NULL, pathp);
          code = smb_LookupTIDPath(vcp, p->tid, &tidPathp);
          if (code) {
              cm_ReleaseUser(userp);
--- 4922,4928 ----
          code = 0;
      } else {
          spacep = cm_GetSpace();
!         smb_StripLastComponent(spacep->wdata, NULL, pathp);
          code = smb_LookupTIDPath(vcp, p->tid, &tidPathp);
          if (code) {
              cm_ReleaseUser(userp);
***************
*** 4900,4909 ****
              return 0;
          }
  
!         strcpy(dsp->tidPath, tidPathp ? tidPathp : "/");
!         strcpy(dsp->relPath, spacep->data);
  
!         code = cm_NameI(cm_data.rootSCachep, spacep->data,
                          CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                          userp, tidPathp, &req, &scp);
          cm_FreeSpace(spacep);
--- 4934,4943 ----
              return 0;
          }
  
!         cm_ClientStrCpy(dsp->tidPath, lengthof(dsp->tidPath), tidPathp ? tidPathp : _C("/"));
!         cm_ClientStrCpy(dsp->relPath, lengthof(dsp->relPath), spacep->wdata);
  
!         code = cm_NameI(cm_data.rootSCachep, spacep->wdata,
                          CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                          userp, tidPathp, &req, &scp);
          cm_FreeSpace(spacep);
***************
*** 4982,4992 ****
--- 5016,5031 ----
      returnedNames = 0;
      bytesInBuffer = 0;
      while (1) {
+         normchar_t normName[MAX_PATH]; /* Normalized name */
+         clientchar_t cfileName[MAX_PATH]; /* Non-normalized name */
+ 
          op = origOp;
          if (searchFlags & TRAN2_FIND_FLAG_RETURN_RESUME_KEYS)
              /* skip over resume key */
              op += 4;
  
+         fp = (smb_tran2Find_t *) op;
+ 
          /* make sure that curOffset.LowPart doesn't point to the first
           * 32 bytes in the 2nd through last dir page, and that it doesn't
           * point at the first 13 32-byte chunks in the first dir page,
***************
*** 5152,5179 ****
          if (dep->fid.vnode == 0) 
              goto nextEntry;             /* This entry is not in use */
  
          /* Need 8.3 name? */
          NeedShortName = 0;
          if (infoLevel == SMB_FIND_FILE_BOTH_DIRECTORY_INFO && 
!              !cm_Is8Dot3(dep->name)) {
              cm_Gen8Dot3Name(dep, shortName, &shortNameEnd);
              NeedShortName = 1;
          }
  
!         osi_Log4(smb_logp, "T2 search dir vn %u uniq %u name %s (%s)",
!                   dep->fid.vnode, dep->fid.unique, 
!                   osi_LogSaveString(smb_logp, dep->name),
!                   NeedShortName ? osi_LogSaveString(smb_logp, shortName) : "");
  
          /* When matching, we are using doing a case fold if we have a wildcard mask.
           * If we get a non-wildcard match, it's a lookup for a specific file. 
           */
!         if (smb_V3MatchMask(dep->name, maskp, (starPattern? CM_FLAG_CASEFOLD : 0)) ||
!              (NeedShortName && smb_V3MatchMask(shortName, maskp, CM_FLAG_CASEFOLD))) 
          {
              /* Eliminate entries that don't match requested attributes */
              if (smb_hideDotFiles && !(dsp->attribute & SMB_ATTR_HIDDEN) && 
!                  smb_IsDotFile(dep->name)) {
                  osi_Log0(smb_logp, "T2 search dir skipping hidden");
                  goto nextEntry; /* no hidden files */
              }
--- 5191,5221 ----
          if (dep->fid.vnode == 0) 
              goto nextEntry;             /* This entry is not in use */
  
+         cm_FsStringToClientString(dep->name, -1, cfileName, lengthof(cfileName));
+         cm_ClientStringToNormString(cfileName, -1, normName, lengthof(normName));
+ 
          /* Need 8.3 name? */
          NeedShortName = 0;
          if (infoLevel == SMB_FIND_FILE_BOTH_DIRECTORY_INFO && 
!             !cm_Is8Dot3(cfileName)) {
              cm_Gen8Dot3Name(dep, shortName, &shortNameEnd);
              NeedShortName = 1;
          }
  
!         osi_Log4(smb_logp, "T2 search dir vn %u uniq %u name %S (%S)",
!                  dep->fid.vnode, dep->fid.unique, 
!                  osi_LogSaveClientString(smb_logp, cfileName),
!                  NeedShortName ? osi_LogSaveClientString(smb_logp, shortName) : _C(""));
  
          /* When matching, we are using doing a case fold if we have a wildcard mask.
           * If we get a non-wildcard match, it's a lookup for a specific file. 
           */
!         if (cm_MatchMask(normName, maskp, (starPattern? CM_FLAG_CASEFOLD : 0)) ||
!             (NeedShortName && cm_MatchMask(shortName, maskp, CM_FLAG_CASEFOLD))) 
          {
              /* Eliminate entries that don't match requested attributes */
              if (smb_hideDotFiles && !(dsp->attribute & SMB_ATTR_HIDDEN) && 
!                 smb_IsDotFile(cfileName)) {
                  osi_Log0(smb_logp, "T2 search dir skipping hidden");
                  goto nextEntry; /* no hidden files */
              }
***************
*** 5181,5187 ****
              if (!(dsp->attribute & SMB_ATTR_DIRECTORY))  /* no directories */
              {
                  /* We have already done the cm_TryBulkStat above */
!                 cm_SetFid(&fid, scp->fid.cell, scp->fid.volume, ntohl(dep->fid.vnode), ntohl(dep->fid.unique));
                  fileType = cm_FindFileType(&fid);
                  /* osi_Log2(smb_logp, "smb_ReceiveTran2SearchDir: file %s "
                   * "has filetype %d", dep->name, fileType);
--- 5223,5230 ----
              if (!(dsp->attribute & SMB_ATTR_DIRECTORY))  /* no directories */
              {
                  /* We have already done the cm_TryBulkStat above */
!                 cm_SetFid(&fid, scp->fid.cell, scp->fid.volume,
!                           ntohl(dep->fid.vnode), ntohl(dep->fid.unique));
                  fileType = cm_FindFileType(&fid);
                  /* osi_Log2(smb_logp, "smb_ReceiveTran2SearchDir: file %s "
                   * "has filetype %d", dep->name, fileType);
***************
*** 5195,5223 ****
              }
  
              /* finally check if this name will fit */
! 
!             /* standard dir entry stuff */
!             if (infoLevel < 0x101)
!                 ohbytes = 23;	/* pre-NT */
!             else if (infoLevel == SMB_FIND_FILE_NAMES_INFO)
!                 ohbytes = 12;	/* NT names only */
!             else
!                 ohbytes = 64;	/* NT */
! 
!             if (infoLevel == SMB_FIND_FILE_BOTH_DIRECTORY_INFO)
!                 ohbytes += 26;	/* Short name & length */
! 
!             if (searchFlags & TRAN2_FIND_FLAG_RETURN_RESUME_KEYS) {
!                 ohbytes += 4;	/* if resume key required */
!             }   
! 
!             if ( infoLevel != SMB_INFO_STANDARD && 
!                  infoLevel != SMB_FIND_FILE_DIRECTORY_INFO &&
!                  infoLevel != SMB_FIND_FILE_NAMES_INFO)
!                 ohbytes += 4;	/* EASIZE */
! 
!             /* add header to name & term. null */
!             orbytes = onbytes + ohbytes + 1;
  
              /* now, we round up the record to a 4 byte alignment,
               * and we make sure that we have enough room here for
--- 5238,5246 ----
              }
  
              /* finally check if this name will fit */
!             onbytes = 0;
!             smb_UnparseString(opx, NULL, cfileName, &onbytes, SMB_STRF_ANSIPATH);
!             orbytes = ohbytes + onbytes;
  
              /* now, we round up the record to a 4 byte alignment,
               * and we make sure that we have enough room here for
***************
*** 5229,5237 ****
                  align = (4 - (orbytes & 3)) & 3;
              else
                  align = 0;
              if (orbytes + bytesInBuffer + align > maxReturnData) {
                  osi_Log1(smb_logp, "T2 dir search exceed max return data %d",
!                           maxReturnData);
                  break;      
              }       
  
--- 5252,5261 ----
                  align = (4 - (orbytes & 3)) & 3;
              else
                  align = 0;
+ 
              if (orbytes + bytesInBuffer + align > maxReturnData) {
                  osi_Log1(smb_logp, "T2 dir search exceed max return data %d",
!                          maxReturnData);
                  break;      
              }       
  
***************
*** 5240,5277 ****
               * Put out the name, preceded by its length.
               */
              /* First zero everything else */
!             memset(origOp, 0, ohbytes);
  
!             if (infoLevel <= SMB_FIND_FILE_DIRECTORY_INFO)
!                 *(origOp + ohbytes - 1) = (unsigned char) onbytes;
!             else if (infoLevel == SMB_FIND_FILE_NAMES_INFO)
!                 *((u_long *)(op + 8)) = onbytes;
!             else
!                 *((u_long *)(op + 60)) = onbytes;
!             strcpy(origOp+ohbytes, dep->name);
!             if (smb_StoreAnsiFilenames)
!                 CharToOem(origOp+ohbytes, origOp+ohbytes);
  
!             /* Short name if requested and needed */
!             if (infoLevel == SMB_FIND_FILE_BOTH_DIRECTORY_INFO) {
                  if (NeedShortName) {
!                     strcpy(op + 70, shortName);
!                     if (smb_StoreAnsiFilenames)
!                         CharToOem(op + 70, op + 70);
!                     *(op + 68) = (char)(shortNameEnd - shortName);
                  }
              }
  
              /* now, adjust the # of entries copied */
              returnedNames++;
  
-             /* NextEntryOffset and FileIndex */
-             if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO) {
-                 int entryOffset = orbytes + align;
-                 *((u_long *)op) = entryOffset;
-                 *((u_long *)(op+4)) = nextEntryCookie;
-             }
- 
              /* now we emit the attribute.  This is tricky, since
               * we need to really stat the file to find out what
               * type of entry we've got.  Right now, we're copying
--- 5264,5340 ----
               * Put out the name, preceded by its length.
               */
              /* First zero everything else */
!             memset(origOp, 0, orbytes);
  
!             onbytes = 0;
!             smb_UnparseString(opx, origOp + ohbytes, cfileName, &onbytes, SMB_STRF_ANSIPATH);
! 
!             switch (infoLevel) {
!             case SMB_INFO_STANDARD:
!                 fp->u.FstandardInfo.fileNameLength = onbytes;
!                 attrp = &fp->u.FstandardInfo.fileAttrs;
!                 break;
! 
!             case SMB_INFO_QUERY_EA_SIZE:
!                 fp->u.FeaSizeInfo.fileNameLength = onbytes;
!                 attrp = &fp->u.FeaSizeInfo.fileAttrs;
!                 fp->u.FeaSizeInfo.eaSize = 0;
!                 break;
  
!             case SMB_INFO_QUERY_EAS_FROM_LIST:
!                 fp->u.FeasFromListInfo.fileNameLength = onbytes;
!                 attrp = &fp->u.FeasFromListInfo.fileAttrs;
!                 fp->u.FeasFromListInfo.eaSize = 0;
!                 break;
! 
!             case SMB_FIND_FILE_BOTH_DIRECTORY_INFO:
                  if (NeedShortName) {
! #ifdef SMB_UNICODE
!                     int nchars;
! 
!                     nchars = cm_ClientStringToUtf16(shortName, -1,
!                                                     fp->u.FfileBothDirectoryInfo.shortName,
!                                                     sizeof(fp->u.FfileBothDirectoryInfo.shortName)/sizeof(wchar_t));
!                     if (nchars > 0)
!                         fp->u.FfileBothDirectoryInfo.shortNameLength = (nchars - 1)*sizeof(wchar_t);
!                     else
!                         fp->u.FfileBothDirectoryInfo.shortNameLength = 0;
!                     fp->u.FfileBothDirectoryInfo.reserved = 0;
! #else
!                     cm_ClientStrCpy(fp->u.FfileBothDirectoryInfo.shortName,
!                                     lengthof(fp->u.FfileBothDirectoryInfo.shortName),
!                                     shortName);
!                     fp->u.FfileBothDirectoryInfo.shortNameLength = cm_ClientStrLen(shortName);
! #endif
                  }
+                 /* Fallthrough */
+ 
+             case SMB_FIND_FILE_FULL_DIRECTORY_INFO:
+                 fp->u.FfileFullDirectoryInfo.eaSize = 0;
+                 /* Fallthrough */
+ 
+             case SMB_FIND_FILE_DIRECTORY_INFO:
+                 fp->u.FfileDirectoryInfo.nextEntryOffset = orbytes + align;
+                 fp->u.FfileDirectoryInfo.fileIndex = nextEntryCookie;
+                 attrp = &fp->u.FfileDirectoryInfo.fileAttrs;
+                 fp->u.FfileDirectoryInfo.fileNameLength = onbytes;
+                 break;
+ 
+             case SMB_FIND_FILE_NAMES_INFO:
+                 fp->u.FfileNamesInfo.nextEntryOffset = orbytes + align;
+                 fp->u.FfileNamesInfo.fileIndex = nextEntryCookie;
+                 fp->u.FfileNamesInfo.fileNameLength = onbytes;
+                 attrp = NULL;
+                 break;
+ 
+             default:
+                 /* we shouldn't hit this case */
+                 osi_assertx(FALSE, "Unknown query type");
              }
  
              /* now, adjust the # of entries copied */
              returnedNames++;
  
              /* now we emit the attribute.  This is tricky, since
               * we need to really stat the file to find out what
               * type of entry we've got.  Right now, we're copying
***************
*** 5286,5302 ****
               * safe to unlock the directory.
               */
              if (infoLevel != SMB_FIND_FILE_NAMES_INFO) {
                  curPatchp = malloc(sizeof(*curPatchp));
                  osi_QAdd((osi_queue_t **) &dirListPatchesp, &curPatchp->q);
!                 curPatchp->dptr = op;
!                 if (infoLevel >= SMB_FIND_FILE_DIRECTORY_INFO)
!                     curPatchp->dptr += 8;
  
!                 if (smb_hideDotFiles && smb_IsDotFile(dep->name)) {
                      curPatchp->flags = SMB_DIRLISTPATCH_DOTFILE;
!                 }       
!                 else    
                      curPatchp->flags = 0;
  
                  cm_SetFid(&curPatchp->fid, scp->fid.cell, scp->fid.volume, ntohl(dep->fid.vnode), ntohl(dep->fid.unique));
  
--- 5349,5364 ----
               * safe to unlock the directory.
               */
              if (infoLevel != SMB_FIND_FILE_NAMES_INFO) {
+                 osi_assert(attrp != NULL);
                  curPatchp = malloc(sizeof(*curPatchp));
                  osi_QAdd((osi_queue_t **) &dirListPatchesp, &curPatchp->q);
!                 curPatchp->dptr = attrp;
  
!                 if (smb_hideDotFiles && smb_IsDotFile(cfileName)) {
                      curPatchp->flags = SMB_DIRLISTPATCH_DOTFILE;
!                 } else {
                      curPatchp->flags = 0;
+                 }
  
                  cm_SetFid(&curPatchp->fid, scp->fid.cell, scp->fid.volume, ntohl(dep->fid.vnode), ntohl(dep->fid.unique));
  
***************
*** 5313,5326 ****
              bytesInBuffer += orbytes;
  
              /* and pad the record out */
!             while (--align >= 0) {
                  *origOp++ = 0;
                  bytesInBuffer++;
              }
          }	/* if we're including this name */
          else if (!starPattern &&
!                   !foundInexact &&
!                   smb_V3MatchMask(dep->name, maskp, CM_FLAG_CASEFOLD)) {
              /* We were looking for exact matches, but here's an inexact one*/
              foundInexact = 1;
          }
--- 5375,5388 ----
              bytesInBuffer += orbytes;
  
              /* and pad the record out */
!             while (align-- > 0) {
                  *origOp++ = 0;
                  bytesInBuffer++;
              }
          }	/* if we're including this name */
          else if (!starPattern &&
!                  !foundInexact &&
!                  cm_MatchMask(normName, maskp, CM_FLAG_CASEFOLD)) {
              /* We were looking for exact matches, but here's an inexact one*/
              foundInexact = 1;
          }
***************
*** 5414,5419 ****
--- 5476,5482 ----
      return 0;
  }
  
+ /* SMB_COM_FIND_CLOSE2 */
  long smb_ReceiveV3FindClose(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      int dirHandle;
***************
*** 5438,5452 ****
      return 0;
  }
  
  long smb_ReceiveV3FindNotifyClose(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      smb_SetSMBDataLength(outp, 0);
      return 0;
  }
  
  long smb_ReceiveV3OpenX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     char *pathp;
      long code = 0;
      cm_space_t *spacep;
      int excl;
--- 5501,5518 ----
      return 0;
  }
  
+ 
+ /* SMB_COM_FIND_NOTIFY_CLOSE */
  long smb_ReceiveV3FindNotifyClose(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      smb_SetSMBDataLength(outp, 0);
      return 0;
  }
  
+ /* SMB_COM_OPEN_ANDX */
  long smb_ReceiveV3OpenX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     clientchar_t *pathp;
      long code = 0;
      cm_space_t *spacep;
      int excl;
***************
*** 5457,5471 ****
      int initialModeBits;
      smb_fid_t *fidp;
      int attributes;
!     char *lastNamep;
!     afs_uint32 dosTime;
      int openFun;
      int trunc;
      int openMode;
      int extraInfo;
      int openAction;
      int parmSlot;			/* which parm we're dealing with */
!     char *tidPathp;
      cm_req_t req;
      int created = 0;
  
--- 5523,5537 ----
      int initialModeBits;
      smb_fid_t *fidp;
      int attributes;
!     clientchar_t *lastNamep;
!     unsigned long dosTime;
      int openFun;
      int trunc;
      int openMode;
      int extraInfo;
      int openAction;
      int parmSlot;			/* which parm we're dealing with */
!     clientchar_t *tidPathp;
      cm_req_t req;
      int created = 0;
  
***************
*** 5488,5505 ****
      if (attributes & SMB_ATTR_READONLY) 
  	initialModeBits &= ~0222;
          
!     pathp = smb_GetSMBData(inp, NULL);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(pathp,pathp);
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->data, &lastNamep, pathp);
  
      if (lastNamep && 
!          (stricmp(lastNamep, SMB_IOCTL_FILENAME) == 0 ||
!            stricmp(lastNamep, "\\srvsvc") == 0 ||
!            stricmp(lastNamep, "\\wkssvc") == 0 ||
!            stricmp(lastNamep, "ipc$") == 0)) {
          /* special case magic file name for receiving IOCTL requests
           * (since IOCTL calls themselves aren't getting through).
           */
--- 5554,5570 ----
      if (attributes & SMB_ATTR_READONLY) 
  	initialModeBits &= ~0222;
          
!     pathp = smb_ParseASCIIBlock(inp, smb_GetSMBData(inp, NULL), NULL,
!                                 SMB_STRF_ANSIPATH);
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->wdata, &lastNamep, pathp);
  
      if (lastNamep && 
!         (cm_ClientStrCmpIA(lastNamep,  _C(SMB_IOCTL_FILENAME)) == 0 ||
!          cm_ClientStrCmpIA(lastNamep,  _C("\\srvsvc")) == 0 ||
!          cm_ClientStrCmpIA(lastNamep,  _C("\\wkssvc")) == 0 ||
!          cm_ClientStrCmpIA(lastNamep,  _C("ipc$")) == 0)) {
          /* special case magic file name for receiving IOCTL requests
           * (since IOCTL calls themselves aren't getting through).
           */
***************
*** 5573,5579 ****
  #endif /* DFS_SUPPORT */
  
      if (code != 0) {
!         code = cm_NameI(cm_data.rootSCachep, spacep->data,
                          CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                          userp, tidPathp, &req, &dscp);
          if (code) {
--- 5638,5644 ----
  #endif /* DFS_SUPPORT */
  
      if (code != 0) {
!         code = cm_NameI(cm_data.rootSCachep, spacep->wdata,
                          CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                          userp, tidPathp, &req, &dscp);
          if (code) {
***************
*** 5583,5589 ****
  
  #ifdef DFS_SUPPORT
          if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!             int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->data);
              cm_ReleaseSCache(dscp);
              cm_ReleaseUser(userp);
              if ( WANTS_DFS_PATHNAMES(inp) || pnc )
--- 5648,5655 ----
  
  #ifdef DFS_SUPPORT
          if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!             int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp,
!                                                       spacep->wdata);
              cm_ReleaseSCache(dscp);
              cm_ReleaseUser(userp);
              if ( WANTS_DFS_PATHNAMES(inp) || pnc )
***************
*** 5649,5656 ****
      }
      else {
          osi_assertx(dscp != NULL, "null cm_scache_t");
!         osi_Log1(smb_logp, "smb_ReceiveV3OpenX creating file %s",
!                  osi_LogSaveString(smb_logp, lastNamep));
          openAction = 2;	/* created file */
          setAttr.mask = CM_ATTRMASK_CLIENTMODTIME;
          smb_UnixTimeFromDosUTime(&setAttr.clientModTime, dosTime);
--- 5715,5722 ----
      }
      else {
          osi_assertx(dscp != NULL, "null cm_scache_t");
!         osi_Log1(smb_logp, "smb_ReceiveV3OpenX creating file %S",
!                  osi_LogSaveClientString(smb_logp, lastNamep));
          openAction = 2;	/* created file */
          setAttr.mask = CM_ATTRMASK_CLIENTMODTIME;
          smb_UnixTimeFromDosUTime(&setAttr.clientModTime, dosTime);
***************
*** 5791,5796 ****
--- 5857,5863 ----
      }
  }
  
+ /* SMB_COM_LOCKING_ANDX */
  long smb_ReceiveV3LockingX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      cm_req_t req;
***************
*** 6085,6090 ****
--- 6152,6158 ----
      return code;
  }
  
+ /* SMB_COM_QUERY_INFORMATION2 */
  long smb_ReceiveV3GetAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      unsigned short fid;
***************
*** 6172,6177 ****
--- 6240,6246 ----
      return code;
  }       
  
+ /* SMB_COM_SET_INFORMATION2 */
  long smb_ReceiveV3SetAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      unsigned short fid;
***************
*** 6241,6246 ****
--- 6310,6316 ----
      return code;
  }
  
+ /* SMB_COM_WRITE_ANDX */
  long smb_ReceiveV3WriteX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      osi_hyper_t offset;
***************
*** 6349,6359 ****
  
      code = 0;
      while ( code == 0 && count > 0 ) {
- #ifndef DJGPP
  	code = smb_WriteData(fidp, &offset, count, op, userp, &written);
- #else /* DJGPP */
- 	code = smb_WriteData(fidp, &offset, count, op, userp, &written, FALSE);
- #endif /* !DJGPP */
  	if (code == 0 && written == 0)
              code = CM_ERROR_PARTIALWRITE;
  
--- 6419,6425 ----
***************
*** 6379,6384 ****
--- 6445,6451 ----
      return code;
  }
  
+ /* SMB_COM_READ_ANDX */
  long smb_ReceiveV3ReadX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      osi_hyper_t offset;
***************
*** 6495,6505 ****
      /* set the packet data length the count of the # of bytes */
      smb_SetSMBDataLength(outp, count);
  
- #ifndef DJGPP
      code = smb_ReadData(fidp, &offset, count, op, userp, &finalCount);
- #else /* DJGPP */
-     code = smb_ReadData(fidp, &offset, count, op, userp, &finalCount, FALSE);
- #endif /* !DJGPP */
  
      /* fix some things up */
      smb_SetSMBParm(outp, 5, finalCount);
--- 6562,6568 ----
***************
*** 6537,6545 ****
  #define FILE_DELETE_ON_CLOSE      0x1000
  #define FILE_OPEN_BY_FILE_ID      0x2000
  
  long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     char *pathp, *realPathp;
      long code = 0;
      cm_space_t *spacep;
      cm_user_t *userp;
--- 6600,6609 ----
  #define FILE_DELETE_ON_CLOSE      0x1000
  #define FILE_OPEN_BY_FILE_ID      0x2000
  
+ /* SMB_COM_NT_CREATE_ANDX */
  long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     clientchar_t *pathp, *realPathp;
      long code = 0;
      cm_space_t *spacep;
      cm_user_t *userp;
***************
*** 6547,6554 ****
      cm_scache_t *scp;		/* file to create or open */
      cm_scache_t *targetScp;	/* if scp is a symlink */
      cm_attr_t setAttr;
!     char *lastNamep;
!     char *treeStartp;
      unsigned short nameLength;
      unsigned int flags;
      unsigned int requestOpLock;
--- 6611,6618 ----
      cm_scache_t *scp;		/* file to create or open */
      cm_scache_t *targetScp;	/* if scp is a symlink */
      cm_attr_t setAttr;
!     clientchar_t *lastNamep;
!     clientchar_t *treeStartp;
      unsigned short nameLength;
      unsigned int flags;
      unsigned int requestOpLock;
***************
*** 6572,6578 ****
      long fidflags;
      FILETIME ft;
      LARGE_INTEGER sz;
!     char *tidPathp;
      BOOL foundscp;
      cm_req_t req;
      int created = 0;
--- 6636,6642 ----
      long fidflags;
      FILETIME ft;
      LARGE_INTEGER sz;
!     clientchar_t *tidPathp;
      BOOL foundscp;
      cm_req_t req;
      int created = 0;
***************
*** 6633,6658 ****
      if (extAttributes & SMB_ATTR_READONLY) 
          initialModeBits &= ~0222;
  
!     pathp = smb_GetSMBData(inp, NULL);
      /* Sometimes path is not null-terminated, so we make a copy. */
!     realPathp = malloc(nameLength+1);
!     memcpy(realPathp, pathp, nameLength);
!     realPathp[nameLength] = 0;
!     if (smb_StoreAnsiFilenames)
!         OemToChar(realPathp,realPathp);
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->data, &lastNamep, realPathp);
  
!     osi_Log1(smb_logp,"NTCreateX for [%s]",osi_LogSaveString(smb_logp,realPathp));
      osi_Log4(smb_logp,"... da=[%x] ea=[%x] cd=[%x] co=[%x]", desiredAccess, extAttributes, createDisp, createOptions);
!     osi_Log3(smb_logp,"... share=[%x] flags=[%x] lastNamep=[%s]", shareAccess, flags, osi_LogSaveString(smb_logp,(lastNamep?lastNamep:"null")));
  
  	if (lastNamep && 
!              (stricmp(lastNamep, SMB_IOCTL_FILENAME) == 0 ||
!                stricmp(lastNamep, "\\srvsvc") == 0 ||
!                stricmp(lastNamep, "\\wkssvc") == 0 ||
!                stricmp(lastNamep, "ipc$") == 0)) {
          /* special case magic file name for receiving IOCTL requests
           * (since IOCTL calls themselves aren't getting through).
           */
--- 6697,6722 ----
      if (extAttributes & SMB_ATTR_READONLY) 
          initialModeBits &= ~0222;
  
!     pathp = smb_ParseStringCb(inp, smb_GetSMBData(inp, NULL), nameLength,
!                               NULL, SMB_STRF_ANSIPATH);
! 
      /* Sometimes path is not null-terminated, so we make a copy. */
!     realPathp = malloc(nameLength+sizeof(clientchar_t));
!     memcpy(realPathp, pathp, nameLength+sizeof(clientchar_t));
!     realPathp[nameLength/sizeof(clientchar_t)] = 0;
  
      spacep = inp->spacep;
!     smb_StripLastComponent(spacep->wdata, &lastNamep, realPathp);
  
!     osi_Log1(smb_logp,"NTCreateX for [%S]",osi_LogSaveClientString(smb_logp,realPathp));
      osi_Log4(smb_logp,"... da=[%x] ea=[%x] cd=[%x] co=[%x]", desiredAccess, extAttributes, createDisp, createOptions);
!     osi_Log3(smb_logp,"... share=[%x] flags=[%x] lastNamep=[%S]", shareAccess, flags, osi_LogSaveClientString(smb_logp,(lastNamep?lastNamep:_C("null"))));
  
  	if (lastNamep && 
!             (cm_ClientStrCmpIA(lastNamep,  _C(SMB_IOCTL_FILENAME)) == 0 ||
!              cm_ClientStrCmpIA(lastNamep,  _C("\\srvsvc")) == 0 ||
!              cm_ClientStrCmpIA(lastNamep,  _C("\\wkssvc")) == 0 ||
!              cm_ClientStrCmpIA(lastNamep,  _C("ipc$")) == 0)) {
          /* special case magic file name for receiving IOCTL requests
           * (since IOCTL calls themselves aren't getting through).
           */
***************
*** 6744,6750 ****
          tidPathp = NULL;
      }
  
!     osi_Log1(smb_logp, "NTCreateX tidPathp=[%s]", (tidPathp==NULL)?"null": osi_LogSaveString(smb_logp,tidPathp));
  
      /* compute open mode */
      fidflags = 0;
--- 6808,6814 ----
          tidPathp = NULL;
      }
  
!     osi_Log1(smb_logp, "NTCreateX tidPathp=[%S]", (tidPathp==NULL)?_C("null"): osi_LogSaveClientString(smb_logp,tidPathp));
  
      /* compute open mode */
      fidflags = 0;
***************
*** 6776,6787 ****
      if ( createDisp == FILE_CREATE || 
           createDisp == FILE_OVERWRITE ||
           createDisp == FILE_OVERWRITE_IF) {
!         code = cm_NameI(baseDirp, spacep->data, CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                          userp, tidPathp, &req, &dscp);
          if (code == 0) {
  #ifdef DFS_SUPPORT
              if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                 int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->data);
                  cm_ReleaseSCache(dscp);
                  cm_ReleaseUser(userp);
                  free(realPathp);
--- 6840,6852 ----
      if ( createDisp == FILE_CREATE || 
           createDisp == FILE_OVERWRITE ||
           createDisp == FILE_OVERWRITE_IF) {
!         code = cm_NameI(baseDirp, spacep->wdata, CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                          userp, tidPathp, &req, &dscp);
          if (code == 0) {
  #ifdef DFS_SUPPORT
              if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                 int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp,
!                                                           spacep->wdata);
                  cm_ReleaseSCache(dscp);
                  cm_ReleaseUser(userp);
                  free(realPathp);
***************
*** 6844,6858 ****
  
          if (dscp == NULL) {
              do {
!                 char *tp;
  
!                 code = cm_NameI(baseDirp, spacep->data,
!                              CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
!                              userp, tidPathp, &req, &dscp);
  
  #ifdef DFS_SUPPORT
                  if (code == 0 && dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                     int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->data);
                      if (scp)
                          cm_ReleaseSCache(scp);
                      cm_ReleaseSCache(dscp);
--- 6909,6924 ----
  
          if (dscp == NULL) {
              do {
!                 clientchar_t *tp;
  
!                 code = cm_NameI(baseDirp, spacep->wdata,
!                                 CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
!                                 userp, tidPathp, &req, &dscp);
  
  #ifdef DFS_SUPPORT
                  if (code == 0 && dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                     int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp,
!                                                               spacep->wdata);
                      if (scp)
                          cm_ReleaseSCache(scp);
                      cm_ReleaseSCache(dscp);
***************
*** 6867,6879 ****
                  }
  #endif /* DFS_SUPPORT */
  
!                 if (code && 
!                      (tp = strrchr(spacep->data,'\\')) &&
!                      (createDisp == FILE_CREATE) &&
!                      (realDirFlag == 1)) {
                      *tp++ = 0;
                      treeCreate = TRUE;
!                     treeStartp = realPathp + (tp - spacep->data);
  
                      if (*tp && !smb_IsLegalFilename(tp)) {
                          cm_ReleaseUser(userp);
--- 6933,6945 ----
                  }
  #endif /* DFS_SUPPORT */
  
!                 if (code &&
!                     (tp = cm_ClientStrRChr(spacep->wdata, '\\')) &&
!                     (createDisp == FILE_CREATE) &&
!                     (realDirFlag == 1)) {
                      *tp++ = 0;
                      treeCreate = TRUE;
!                     treeStartp = realPathp + (tp - spacep->wdata);
  
                      if (*tp && !smb_IsLegalFilename(tp)) {
                          cm_ReleaseUser(userp);
***************
*** 7038,7045 ****
          return CM_ERROR_NOSUCHFILE;
      } else if (realDirFlag == 0 || realDirFlag == -1) {
          osi_assertx(dscp != NULL, "null cm_scache_t");
!         osi_Log1(smb_logp, "smb_ReceiveNTCreateX creating file %s",
!                   osi_LogSaveString(smb_logp, lastNamep));
          openAction = 2;		/* created file */
          setAttr.mask = CM_ATTRMASK_CLIENTMODTIME;
          setAttr.clientModTime = time(NULL);
--- 7104,7111 ----
          return CM_ERROR_NOSUCHFILE;
      } else if (realDirFlag == 0 || realDirFlag == -1) {
          osi_assertx(dscp != NULL, "null cm_scache_t");
!         osi_Log1(smb_logp, "smb_ReceiveNTCreateX creating file %S",
!                   osi_LogSaveClientString(smb_logp, lastNamep));
          openAction = 2;		/* created file */
          setAttr.mask = CM_ATTRMASK_CLIENTMODTIME;
          setAttr.clientModTime = time(NULL);
***************
*** 7086,7093 ****
              }	/* lookup succeeded */
          }
      } else {
!         char *tp, *pp;
!         char *cp; /* This component */
          int clen = 0; /* length of component */
          cm_scache_t *tscp1, *tscp2;
          int isLast = 0;
--- 7152,7159 ----
              }	/* lookup succeeded */
          }
      } else {
!         clientchar_t *tp, *pp;
!         clientchar_t *cp; /* This component */
          int clen = 0; /* length of component */
          cm_scache_t *tscp1, *tscp2;
          int isLast = 0;
***************
*** 7096,7103 ****
          if ( !treeCreate ) 
              treeStartp = lastNamep;
          osi_assertx(dscp != NULL, "null cm_scache_t");
!         osi_Log1(smb_logp, "smb_ReceiveNTCreateX creating directory [%s]",
!                   osi_LogSaveString(smb_logp, treeStartp));
          openAction = 2;		/* created directory */
  
  	/* if the request is to create the root directory 
--- 7162,7169 ----
          if ( !treeCreate ) 
              treeStartp = lastNamep;
          osi_assertx(dscp != NULL, "null cm_scache_t");
!         osi_Log1(smb_logp, "smb_ReceiveNTCreateX creating directory [%S]",
!                   osi_LogSaveClientString(smb_logp, treeStartp));
          openAction = 2;		/* created directory */
  
  	/* if the request is to create the root directory 
***************
*** 7111,7130 ****
          setAttr.clientModTime = time(NULL);
  
          pp = treeStartp;
!         cp = spacep->data;
          tscp1 = dscp;
          cm_HoldSCache(tscp1);
          tscp2 = NULL;
  
          while (pp && *pp) {
!             tp = strchr(pp, '\\');
              if (!tp) {
!                 strcpy(cp,pp);
!                 clen = (int)strlen(cp);
                  isLast = 1; /* indicate last component.  the supplied path never ends in a slash */
              } else {
                  clen = (int)(tp - pp);
!                 strncpy(cp,pp,clen);
                  *(cp + clen) = 0;
                  tp++;
              }
--- 7177,7197 ----
          setAttr.clientModTime = time(NULL);
  
          pp = treeStartp;
!         cp = spacep->wdata;
          tscp1 = dscp;
          cm_HoldSCache(tscp1);
          tscp2 = NULL;
  
          while (pp && *pp) {
!             tp = cm_ClientStrChr(pp, '\\');
              if (!tp) {
!                 cm_ClientStrCpy(cp, lengthof(spacep->wdata) - (cp - spacep->wdata), pp);
!                 clen = (int)cm_ClientStrLen(cp);
                  isLast = 1; /* indicate last component.  the supplied path never ends in a slash */
              } else {
                  clen = (int)(tp - pp);
!                 cm_ClientStrCpyN(cp, lengthof(spacep->wdata) - (cp - spacep->wdata),
!                                  pp, clen);
                  *(cp + clen) = 0;
                  tp++;
              }
***************
*** 7137,7146 ****
              code = cm_MakeDir(tscp1, cp, 0, &setAttr, userp, &req);
              if (code == 0 && (tscp1->flags & CM_SCACHEFLAG_ANYWATCH))
                  smb_NotifyChange(FILE_ACTION_ADDED,
!                                   FILE_NOTIFY_CHANGE_DIR_NAME,
!                                   tscp1, cp, NULL, TRUE);
!             if (code == 0 || 
!                  (code == CM_ERROR_EXISTS && createDisp != FILE_CREATE)) {
                  /* Not an exclusive create, and someone else tried
                   * creating it already, then we open it anyway.  We
                   * don't bother retrying after this, since if this next
--- 7204,7213 ----
              code = cm_MakeDir(tscp1, cp, 0, &setAttr, userp, &req);
              if (code == 0 && (tscp1->flags & CM_SCACHEFLAG_ANYWATCH))
                  smb_NotifyChange(FILE_ACTION_ADDED,
!                                  FILE_NOTIFY_CHANGE_DIR_NAME,
!                                  tscp1, cp, NULL, TRUE);
!             if (code == 0 ||
!                 (code == CM_ERROR_EXISTS && createDisp != FILE_CREATE)) {
                  /* Not an exclusive create, and someone else tried
                   * creating it already, then we open it anyway.  We
                   * don't bother retrying after this, since if this next
***************
*** 7148,7155 ****
                   * started this call.
                   */
                  code = cm_Lookup(tscp1, cp, CM_FLAG_CASEFOLD,
!                                   userp, &req, &tscp2);
!             }       
              if (code) 
                  break;
  
--- 7215,7222 ----
                   * started this call.
                   */
                  code = cm_Lookup(tscp1, cp, CM_FLAG_CASEFOLD,
!                                  userp, &req, &tscp2);
!             }
              if (code) 
                  break;
  
***************
*** 7306,7312 ****
          fidp->flags |= SMB_FID_NTOPEN;
          fidp->NTopen_dscp = dscp;
  	dscp = NULL;
!         fidp->NTopen_pathp = strdup(lastNamep);
      }
      fidp->NTopen_wholepathp = realPathp;
      lock_ReleaseMutex(&fidp->mx);
--- 7373,7379 ----
          fidp->flags |= SMB_FID_NTOPEN;
          fidp->NTopen_dscp = dscp;
  	dscp = NULL;
!         fidp->NTopen_pathp = cm_ClientStrDup(lastNamep);
      }
      fidp->NTopen_wholepathp = realPathp;
      lock_ReleaseMutex(&fidp->mx);
***************
*** 7354,7361 ****
      }
      lock_ReleaseRead(&scp->rw);
  
!     osi_Log2(smb_logp, "SMB NT CreateX opening fid %d path %s", fidp->fid,
!               osi_LogSaveString(smb_logp, realPathp));
  
      cm_ReleaseUser(userp);
      smb_ReleaseFID(fidp);
--- 7421,7428 ----
      }
      lock_ReleaseRead(&scp->rw);
  
!     osi_Log2(smb_logp, "SMB NT CreateX opening fid %d path %S", fidp->fid,
!               osi_LogSaveClientString(smb_logp, realPathp));
  
      cm_ReleaseUser(userp);
      smb_ReleaseFID(fidp);
***************
*** 7371,7379 ****
   * A lot of stuff copied verbatim from NT Create&X to NT Tran Create.
   * Instead, ultimately, would like to use a subroutine for common code.
   */
  long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     char *pathp, *realPathp;
      long code = 0;
      cm_space_t *spacep;
      cm_user_t *userp;
--- 7438,7448 ----
   * A lot of stuff copied verbatim from NT Create&X to NT Tran Create.
   * Instead, ultimately, would like to use a subroutine for common code.
   */
+ 
+ /* NT_TRANSACT_CREATE (SMB_COM_NT_TRANSACT) */
  long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     clientchar_t *pathp, *realPathp;
      long code = 0;
      cm_space_t *spacep;
      cm_user_t *userp;
***************
*** 7381,7387 ****
      cm_scache_t *scp;		/* file to create or open */
      cm_scache_t *targetScp;     /* if scp is a symlink */
      cm_attr_t setAttr;
!     char *lastNamep;
      unsigned long nameLength;
      unsigned int flags;
      unsigned int requestOpLock;
--- 7450,7456 ----
      cm_scache_t *scp;		/* file to create or open */
      cm_scache_t *targetScp;     /* if scp is a symlink */
      cm_attr_t setAttr;
!     clientchar_t *lastNamep;
      unsigned long nameLength;
      unsigned int flags;
      unsigned int requestOpLock;
***************
*** 7409,7415 ****
      int parmSlot;
      long fidflags;
      FILETIME ft;
!     char *tidPathp;
      BOOL foundscp;
      int parmOffset, dataOffset;
      char *parmp;
--- 7478,7484 ----
      int parmSlot;
      long fidflags;
      FILETIME ft;
!     clientchar_t *tidPathp;
      BOOL foundscp;
      int parmOffset, dataOffset;
      char *parmp;
***************
*** 7479,7494 ****
      if (extAttributes & SMB_ATTR_READONLY) 
          initialModeBits &= ~0222;
  
!     pathp = parmp + (13 * sizeof(ULONG)) + sizeof(UCHAR);
      /* Sometimes path is not null-terminated, so we make a copy. */
!     realPathp = malloc(nameLength+1);
!     memcpy(realPathp, pathp, nameLength);
      realPathp[nameLength] = 0;
-     if (smb_StoreAnsiFilenames)
-         OemToChar(realPathp,realPathp);
- 
      spacep = cm_GetSpace();
!     smb_StripLastComponent(spacep->data, &lastNamep, realPathp);
  
      /*
       * Nothing here to handle SMB_IOCTL_FILENAME.
--- 7548,7561 ----
      if (extAttributes & SMB_ATTR_READONLY) 
          initialModeBits &= ~0222;
  
!     pathp = smb_ParseStringCch(inp, (parmp + (13 * sizeof(ULONG)) + sizeof(UCHAR)),
!                                nameLength, NULL, SMB_STRF_ANSIPATH);
      /* Sometimes path is not null-terminated, so we make a copy. */
!     realPathp = malloc((nameLength+1) * sizeof(clientchar_t));
!     memcpy(realPathp, pathp, nameLength * sizeof(clientchar_t));
      realPathp[nameLength] = 0;
      spacep = cm_GetSpace();
!     smb_StripLastComponent(spacep->wdata, &lastNamep, realPathp);
  
      /*
       * Nothing here to handle SMB_IOCTL_FILENAME.
***************
*** 7578,7589 ****
      if ( createDisp == FILE_OPEN || 
           createDisp == FILE_OVERWRITE ||
           createDisp == FILE_OVERWRITE_IF) {
!         code = cm_NameI(baseDirp, spacep->data, CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                          userp, tidPathp, &req, &dscp);
          if (code == 0) {
  #ifdef DFS_SUPPORT
              if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                 int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->data);
                  cm_ReleaseSCache(dscp);
                  cm_ReleaseUser(userp);
                  free(realPathp);
--- 7645,7656 ----
      if ( createDisp == FILE_OPEN || 
           createDisp == FILE_OVERWRITE ||
           createDisp == FILE_OVERWRITE_IF) {
!         code = cm_NameI(baseDirp, spacep->wdata, CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                          userp, tidPathp, &req, &dscp);
          if (code == 0) {
  #ifdef DFS_SUPPORT
              if (dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                 int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->wdata);
                  cm_ReleaseSCache(dscp);
                  cm_ReleaseUser(userp);
                  free(realPathp);
***************
*** 7637,7648 ****
      if (code != 0 || (fidflags & (SMB_FID_OPENDELETE | SMB_FID_OPENWRITE))) {
          /* look up parent directory */
          if ( !dscp ) {
!             code = cm_NameI(baseDirp, spacep->data,
                               CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                               userp, tidPathp, &req, &dscp);
  #ifdef DFS_SUPPORT
              if (code == 0 && dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                 int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->data);
                  cm_ReleaseSCache(dscp);
                  cm_ReleaseUser(userp);
                  free(realPathp);
--- 7704,7715 ----
      if (code != 0 || (fidflags & (SMB_FID_OPENDELETE | SMB_FID_OPENWRITE))) {
          /* look up parent directory */
          if ( !dscp ) {
!             code = cm_NameI(baseDirp, spacep->wdata,
                               CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD,
                               userp, tidPathp, &req, &dscp);
  #ifdef DFS_SUPPORT
              if (code == 0 && dscp->fileType == CM_SCACHETYPE_DFSLINK) {
!                 int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->wdata);
                  cm_ReleaseSCache(dscp);
                  cm_ReleaseUser(userp);
                  free(realPathp);
***************
*** 7773,7780 ****
      }
      else if (realDirFlag == 0 || realDirFlag == -1) {
          osi_assertx(dscp != NULL, "null cm_scache_t");
!         osi_Log1(smb_logp, "smb_ReceiveNTTranCreate creating file %s",
!                   osi_LogSaveString(smb_logp, lastNamep));
          openAction = 2;		/* created file */
          setAttr.mask = CM_ATTRMASK_CLIENTMODTIME;
          setAttr.clientModTime = time(NULL);
--- 7840,7847 ----
      }
      else if (realDirFlag == 0 || realDirFlag == -1) {
          osi_assertx(dscp != NULL, "null cm_scache_t");
!         osi_Log1(smb_logp, "smb_ReceiveNTTranCreate creating file %S",
!                   osi_LogSaveClientString(smb_logp, lastNamep));
          openAction = 2;		/* created file */
          setAttr.mask = CM_ATTRMASK_CLIENTMODTIME;
          setAttr.clientModTime = time(NULL);
***************
*** 7825,7832 ****
          /* create directory */
          osi_assertx(dscp != NULL, "null cm_scache_t");
          osi_Log1(smb_logp,
!                   "smb_ReceiveNTTranCreate creating directory %s",
!                   osi_LogSaveString(smb_logp, lastNamep));
          openAction = 2;		/* created directory */
          setAttr.mask = CM_ATTRMASK_CLIENTMODTIME;
          setAttr.clientModTime = time(NULL);
--- 7892,7899 ----
          /* create directory */
          osi_assertx(dscp != NULL, "null cm_scache_t");
          osi_Log1(smb_logp,
!                   "smb_ReceiveNTTranCreate creating directory %S",
!                   osi_LogSaveClientString(smb_logp, lastNamep));
          openAction = 2;		/* created directory */
          setAttr.mask = CM_ATTRMASK_CLIENTMODTIME;
          setAttr.clientModTime = time(NULL);
***************
*** 7972,7978 ****
          fidp->NTopen_dscp = dscp;
  	osi_Log2(smb_logp,"smb_ReceiveNTTranCreate fidp 0x%p dscp 0x%p", fidp, dscp);
  	dscp = NULL;
!         fidp->NTopen_pathp = strdup(lastNamep);
      }
      fidp->NTopen_wholepathp = realPathp;
      lock_ReleaseMutex(&fidp->mx);
--- 8039,8045 ----
          fidp->NTopen_dscp = dscp;
  	osi_Log2(smb_logp,"smb_ReceiveNTTranCreate fidp 0x%p dscp 0x%p", fidp, dscp);
  	dscp = NULL;
!         fidp->NTopen_pathp = cm_ClientStrDup(lastNamep);
      }
      fidp->NTopen_wholepathp = realPathp;
      lock_ReleaseMutex(&fidp->mx);
***************
*** 8109,8114 ****
--- 8176,8182 ----
      return 0;
  }
  
+ /* NT_TRANSACT_NOTIFY_CHANGE (SMB_COM_NT_TRANSACT) */
  long smb_ReceiveNTTranNotifyChange(smb_vc_t *vcp, smb_packet_t *inp,
  	smb_packet_t *outp)
  {
***************
*** 8151,8158 ****
      lock_ReleaseMutex(&smb_Dir_Watch_Lock);
  
      scp = fidp->scp;
!     osi_Log3(smb_logp,"smb_ReceiveNTTranNotifyChange fidp 0x%p scp 0x%p file \"%s\"", 
! 	      fidp, scp, osi_LogSaveString(smb_logp, fidp->NTopen_wholepathp));
      osi_Log3(smb_logp, "Request for NotifyChange filter 0x%x fid %d wtree %d",
               filter, fid, watchtree);
      if (filter & FILE_NOTIFY_CHANGE_FILE_NAME)
--- 8219,8226 ----
      lock_ReleaseMutex(&smb_Dir_Watch_Lock);
  
      scp = fidp->scp;
!     osi_Log3(smb_logp,"smb_ReceiveNTTranNotifyChange fidp 0x%p scp 0x%p file \"%S\"", 
! 	      fidp, scp, osi_LogSaveClientString(smb_logp, fidp->NTopen_wholepathp));
      osi_Log3(smb_logp, "Request for NotifyChange filter 0x%x fid %d wtree %d",
               filter, fid, watchtree);
      if (filter & FILE_NOTIFY_CHANGE_FILE_NAME)
***************
*** 8207,8212 ****
--- 8275,8281 ----
                                          /* "null SID" group SID */
  };      
  
+ /* NT_TRANSACT_QUERY_SECURITY_DESC (SMB_COM_NT_TRANSACT) */
  long smb_ReceiveNTTranQuerySecurityDesc(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      int parmOffset, parmCount, dataOffset, dataCount;
***************
*** 8275,8280 ****
--- 8344,8353 ----
          return CM_ERROR_BUFFERTOOSMALL;
  }
  
+ /* SMB_COM_NT_TRANSACT
+ 
+    SMB_COM_NT_TRANSACT_SECONDARY should also be handled here.
+  */
  long smb_ReceiveNTTransact(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      unsigned short function;
***************
*** 8288,8307 ****
          ((smb_t *)outp)->flg2 |= SMB_FLAGS2_IS_LONG_NAME;
          
      switch (function) {
!     case 1: 
          return smb_ReceiveNTTranCreate(vcp, inp, outp);
!     case 2:
  	osi_Log0(smb_logp, "SMB NT Transact Ioctl - not implemented");
  	break;
!     case 3:
  	osi_Log0(smb_logp, "SMB NT Transact SetSecurityDesc - not implemented");
  	break;
!     case 4:
          return smb_ReceiveNTTranNotifyChange(vcp, inp, outp);
!     case 5:
  	osi_Log0(smb_logp, "SMB NT Transact Rename - not implemented");
  	break;
!     case 6:
          return smb_ReceiveNTTranQuerySecurityDesc(vcp, inp, outp);
      case 7:
          osi_Log0(smb_logp, "SMB NT Transact Query Quota - not implemented");
--- 8361,8380 ----
          ((smb_t *)outp)->flg2 |= SMB_FLAGS2_IS_LONG_NAME;
          
      switch (function) {
!     case 1:                     /* NT_TRANSACT_CREATE */
          return smb_ReceiveNTTranCreate(vcp, inp, outp);
!     case 2:                     /* NT_TRANSACT_IOCTL */
  	osi_Log0(smb_logp, "SMB NT Transact Ioctl - not implemented");
  	break;
!     case 3:                     /* NT_TRANSACT_SET_SECURITY_DESC */
  	osi_Log0(smb_logp, "SMB NT Transact SetSecurityDesc - not implemented");
  	break;
!     case 4:                     /* NT_TRANSACT_NOTIFY_CHANGE */
          return smb_ReceiveNTTranNotifyChange(vcp, inp, outp);
!     case 5:                     /* NT_TRANSACT_RENAME */
  	osi_Log0(smb_logp, "SMB NT Transact Rename - not implemented");
  	break;
!     case 6:                     /* NT_TRANSACT_QUERY_SECURITY_DESC */
          return smb_ReceiveNTTranQuerySecurityDesc(vcp, inp, outp);
      case 7:
          osi_Log0(smb_logp, "SMB NT Transact Query Quota - not implemented");
***************
*** 8324,8334 ****
   * has the isDirectParent parameter set to FALSE.  
   */
  void smb_NotifyChange(DWORD action, DWORD notifyFilter,
! 	cm_scache_t *dscp, char *filename, char *otherFilename,
  	BOOL isDirectParent)
  {
      smb_packet_t *watch, *lastWatch, *nextWatch;
!     ULONG parmSlot, parmCount, parmOffset, dataOffset, nameLen;
      char *outData, *oldOutData;
      ULONG filter;
      USHORT fid, wtree;
--- 8397,8407 ----
   * has the isDirectParent parameter set to FALSE.  
   */
  void smb_NotifyChange(DWORD action, DWORD notifyFilter,
! 	cm_scache_t *dscp, clientchar_t *filename, clientchar_t *otherFilename,
  	BOOL isDirectParent)
  {
      smb_packet_t *watch, *lastWatch, *nextWatch;
!     ULONG parmSlot, parmCount, parmOffset, dataOffset, nameLen = 0;
      char *outData, *oldOutData;
      ULONG filter;
      USHORT fid, wtree;
***************
*** 8344,8351 ****
          otherAction = FILE_ACTION_RENAMED_NEW_NAME;
      }
  
!     osi_Log4(smb_logp,"in smb_NotifyChange for file [%s] dscp [%p] notification 0x%x parent %d",
!              osi_LogSaveString(smb_logp,filename),dscp, notifyFilter, isDirectParent);
      if (action == 0)
  	osi_Log0(smb_logp,"      FILE_ACTION_NONE");
      if (action == FILE_ACTION_ADDED)
--- 8417,8424 ----
          otherAction = FILE_ACTION_RENAMED_NEW_NAME;
      }
  
!     osi_Log4(smb_logp,"in smb_NotifyChange for file [%S] dscp [%p] notification 0x%x parent %d",
!              osi_LogSaveClientString(smb_logp,filename),dscp, notifyFilter, isDirectParent);
      if (action == 0)
  	osi_Log0(smb_logp,"      FILE_ACTION_NONE");
      if (action == FILE_ACTION_ADDED)
***************
*** 8398,8405 ****
          smb_ReleaseFID(fidp);
  
          osi_Log4(smb_logp,
!                   "Sending Change Notification for fid %d filter 0x%x wtree %d file %s",
!                   fid, filter, wtree, osi_LogSaveString(smb_logp, filename));
  	if (filter & FILE_NOTIFY_CHANGE_FILE_NAME)
  	    osi_Log0(smb_logp, "      Notify Change File Name");
  	if (filter & FILE_NOTIFY_CHANGE_DIR_NAME)
--- 8471,8478 ----
          smb_ReleaseFID(fidp);
  
          osi_Log4(smb_logp,
!                   "Sending Change Notification for fid %d filter 0x%x wtree %d file %S",
!                   fid, filter, wtree, osi_LogSaveClientString(smb_logp, filename));
  	if (filter & FILE_NOTIFY_CHANGE_FILE_NAME)
  	    osi_Log0(smb_logp, "      Notify Change File Name");
  	if (filter & FILE_NOTIFY_CHANGE_DIR_NAME)
***************
*** 8448,8461 ****
          ((smb_t *) watch)->wct = 0;
  
          /* out parms */
!         if (filename == NULL)
              parmCount = 0;
!         else {
!             nameLen = (ULONG)strlen(filename);
              parmCount = 3*4 + nameLen*2;
              parmCount = (parmCount + 3) & ~3;	/* pad to 4 */
              if (twoEntries) {
!                 otherNameLen = (ULONG)strlen(otherFilename);
                  oldParmCount = parmCount;
                  parmCount += 3*4 + otherNameLen*2;
                  parmCount = (parmCount + 3) & ~3; /* pad to 4 */
--- 8521,8534 ----
          ((smb_t *) watch)->wct = 0;
  
          /* out parms */
!         if (filename == NULL) {
              parmCount = 0;
!         } else {
!             nameLen = (ULONG)cm_ClientStrLen(filename);
              parmCount = 3*4 + nameLen*2;
              parmCount = (parmCount + 3) & ~3;	/* pad to 4 */
              if (twoEntries) {
!                 otherNameLen = (ULONG)cm_ClientStrLen(otherFilename);
                  oldParmCount = parmCount;
                  parmCount += 3*4 + otherNameLen*2;
                  parmCount = (parmCount + 3) & ~3; /* pad to 4 */
***************
*** 8489,8495 ****
          smb_SetSMBDataLength(watch, parmCount + 1);
  
          if (parmCount != 0) {
-             char * p;
              outData = smb_GetSMBData(watch, NULL);
              outData++;	/* round to get to parmOffset */
              oldOutData = outData;
--- 8562,8567 ----
***************
*** 8499,8510 ****
              /* Action */
              *((DWORD *)outData) = nameLen*2; outData += 4;
              /* File Name Length */
!             p = strdup(filename);
!             if (smb_StoreAnsiFilenames)
!                 CharToOem(p,p);
!             mbstowcs((WCHAR *)outData, p, nameLen);
!             free(p);
              /* File Name */
              if (twoEntries) {
                  outData = oldOutData + oldParmCount;
                  *((DWORD *)outData) = 0; outData += 4;
--- 8571,8580 ----
              /* Action */
              *((DWORD *)outData) = nameLen*2; outData += 4;
              /* File Name Length */
! 
!             smb_UnparseString(watch, outData, filename, NULL, 0);
              /* File Name */
+ 
              if (twoEntries) {
                  outData = oldOutData + oldParmCount;
                  *((DWORD *)outData) = 0; outData += 4;
***************
*** 8513,8525 ****
                  /* Action */
                  *((DWORD *)outData) = otherNameLen*2;
                  outData += 4;	/* File Name Length */
!                 p = strdup(otherFilename);
!                 if (smb_StoreAnsiFilenames)
!                     CharToOem(p,p);
!                 mbstowcs((WCHAR *)outData, p, otherNameLen);	/* File Name */
!                 free(p);
              }       
!         }       
  
          /*
           * If filename is null, we don't know the cause of the
--- 8583,8591 ----
                  /* Action */
                  *((DWORD *)outData) = otherNameLen*2;
                  outData += 4;	/* File Name Length */
!                 smb_UnparseString(watch, outData, otherFilename, NULL, 0);
              }       
!         }
  
          /*
           * If filename is null, we don't know the cause of the
***************
*** 8544,8549 ****
--- 8610,8616 ----
      lock_ReleaseMutex(&smb_Dir_Watch_Lock);
  }       
  
+ /* SMB_COM_NT_CANCEL */
  long smb_ReceiveNTCancel(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      unsigned char *replyWctp;
***************
*** 8577,8585 ****
  
              fidp = smb_FindFID(vcp, fid, 0);
              if (fidp) {
!                 osi_Log3(smb_logp, "Cancelling change notification for fid %d wtree %d file %s", 
!                           fid, watchtree,
!                           osi_LogSaveString(smb_logp, (fidp)?fidp->NTopen_wholepathp:""));
  
                  scp = fidp->scp;
  		osi_Log2(smb_logp,"smb_ReceiveNTCancel fidp 0x%p scp 0x%p", fidp, scp);
--- 8644,8652 ----
  
              fidp = smb_FindFID(vcp, fid, 0);
              if (fidp) {
!                 osi_Log3(smb_logp, "Cancelling change notification for fid %d wtree %d file %S", 
!                          fid, watchtree,
!                          (fidp ? osi_LogSaveClientString(smb_logp, fidp->NTopen_wholepathp) :_C("")));
  
                  scp = fidp->scp;
  		osi_Log2(smb_logp,"smb_ReceiveNTCancel fidp 0x%p scp 0x%p", fidp, scp);
***************
*** 8627,8633 ****
  
  long smb_ReceiveNTRename(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     char *oldPathp, *newPathp;
      long code = 0;
      char * tp;
      int attrs;
--- 8694,8700 ----
  
  long smb_ReceiveNTRename(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     clientchar_t *oldPathp, *newPathp;
      long code = 0;
      char * tp;
      int attrs;
***************
*** 8642,8657 ****
      }
  
      tp = smb_GetSMBData(inp, NULL);
!     oldPathp = smb_ParseASCIIBlock(tp, &tp);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(oldPathp,oldPathp);
!     newPathp = smb_ParseASCIIBlock(tp, &tp);
!     if (smb_StoreAnsiFilenames)
!         OemToChar(newPathp,newPathp);
! 
!     osi_Log3(smb_logp, "NTRename for [%s]->[%s] type [%s]",
!              osi_LogSaveString(smb_logp, oldPathp),
!              osi_LogSaveString(smb_logp, newPathp),
               ((rename_type==RENAME_FLAG_RENAME)?"rename":"hardlink"));
  
      if (rename_type == RENAME_FLAG_RENAME) {
--- 8709,8720 ----
      }
  
      tp = smb_GetSMBData(inp, NULL);
!     oldPathp = smb_ParseASCIIBlock(inp, tp, &tp, 0);
!     newPathp = smb_ParseASCIIBlock(inp, tp, &tp, 0);
! 
!     osi_Log3(smb_logp, "NTRename for [%S]->[%S] type [%s]",
!              osi_LogSaveClientString(smb_logp, oldPathp),
!              osi_LogSaveClientString(smb_logp, newPathp),
               ((rename_type==RENAME_FLAG_RENAME)?"rename":"hardlink"));
  
      if (rename_type == RENAME_FLAG_RENAME) {
***************
*** 8667,8673 ****
      lock_InitializeMutex(&smb_Dir_Watch_Lock, "Directory Watch List Lock");
  }
  
! cm_user_t *smb_FindCMUserByName(char *usern, char *machine, afs_uint32 flags)
  {
      smb_username_t *unp;
      cm_user_t *     userp;
--- 8730,8736 ----
      lock_InitializeMutex(&smb_Dir_Watch_Lock, "Directory Watch List Lock");
  }
  
! cm_user_t *smb_FindCMUserByName(clientchar_t *usern, clientchar_t *machine, afs_uint32 flags)
  {
      smb_username_t *unp;
      cm_user_t *     userp;
***************
*** 8677,8685 ****
          lock_ObtainMutex(&unp->mx);
          unp->userp = cm_NewUser();
          lock_ReleaseMutex(&unp->mx);
!         osi_Log2(smb_logp,"smb_FindCMUserByName New user name[%s] machine[%s]",osi_LogSaveString(smb_logp,usern),osi_LogSaveString(smb_logp,machine));
      }  else	{
!         osi_Log2(smb_logp,"smb_FindCMUserByName Not found name[%s] machine[%s]",osi_LogSaveString(smb_logp,usern),osi_LogSaveString(smb_logp,machine));
      }
      userp = unp->userp;
      cm_HoldUser(userp);
--- 8740,8748 ----
          lock_ObtainMutex(&unp->mx);
          unp->userp = cm_NewUser();
          lock_ReleaseMutex(&unp->mx);
!         osi_Log2(smb_logp,"smb_FindCMUserByName New user name[%S] machine[%S]",osi_LogSaveClientString(smb_logp,usern),osi_LogSaveClientString(smb_logp,machine));
      }  else	{
!         osi_Log2(smb_logp,"smb_FindCMUserByName Found name[%S] machine[%S]",osi_LogSaveClientString(smb_logp,usern),osi_LogSaveClientString(smb_logp,machine));
      }
      userp = unp->userp;
      cm_HoldUser(userp);
Index: openafs/src/WINNT/afsd/smb3.h
diff -c openafs/src/WINNT/afsd/smb3.h:1.12.2.5 openafs/src/WINNT/afsd/smb3.h:1.12.2.8
*** openafs/src/WINNT/afsd/smb3.h:1.12.2.5	Mon Dec 11 23:01:26 2006
--- openafs/src/WINNT/afsd/smb3.h	Thu Jun 26 12:38:31 2008
***************
*** 30,39 ****
--- 30,41 ----
  	unsigned short res[6];		/* contains PidHigh */
          unsigned short *parmsp;		/* parms */
          unsigned char *datap;		/* data bytes */
+         cm_space_t * stringsp;          /* decoded strings */
  } smb_tran2Packet_t;
  
  /* for flags field */
  #define SMB_TRAN2PFLAG_ALLOC	1
+ #define SMB_TRAN2PFLAG_USEUNICODE  2
  
  typedef struct smb_tran2Dispatch {
  	long (*procp)(smb_vc_t *, smb_tran2Packet_t *, smb_packet_t *);
***************
*** 56,69 ****
          struct {
              unsigned long vsn;			/* volume serial number */
              char vnCount;			/* count of chars in label, incl null */
!             char label[12];			/* pad out with nulls */
          } volumeInfo;
          struct {
              FILETIME      vct;		/* volume creation time */
              unsigned long vsn;	        /* volume serial number */
              unsigned long vnCount;	/* length of volume label in bytes */
              char res[2];		/* reserved */
!             char label[10];		/* volume label */
          } FSvolumeInfo;
          struct {
              LARGE_INTEGER totalAllocUnits;	/* on the disk */
--- 58,71 ----
          struct {
              unsigned long vsn;			/* volume serial number */
              char vnCount;			/* count of chars in label, incl null */
!             char /* STRING */ label[24];        /* pad out with nulls */
          } volumeInfo;
          struct {
              FILETIME      vct;		/* volume creation time */
              unsigned long vsn;	        /* volume serial number */
              unsigned long vnCount;	/* length of volume label in bytes */
              char res[2];		/* reserved */
!             char /* STRING */ label[20];	/* volume label */
          } FSvolumeInfo;
          struct {
              LARGE_INTEGER totalAllocUnits;	/* on the disk */
***************
*** 79,85 ****
              unsigned long attributes;
              unsigned long maxCompLength;	/* max path component length */
              unsigned long FSnameLength;		/* length of file system name */
!             unsigned char FSname[12];
          } FSattributeInfo;
      } u;
  } smb_tran2QFSInfo_t;
--- 81,87 ----
              unsigned long attributes;
              unsigned long maxCompLength;	/* max path component length */
              unsigned long FSnameLength;		/* length of file system name */
!             unsigned char /* STRING */ FSname[24]; /* File system name */
          } FSattributeInfo;
      } u;
  } smb_tran2QFSInfo_t;
***************
*** 137,143 ****
  	} QPfileEaInfo;
  	struct {
  	    unsigned long  fileNameLength;
! 	    unsigned char  fileName[512];
  	} QPfileNameInfo;
  	struct {
  	    FILETIME       creationTime;
--- 139,145 ----
  	} QPfileEaInfo;
  	struct {
  	    unsigned long  fileNameLength;
! 	    unsigned char  fileName[512]; /* STRING */
  	} QPfileNameInfo;
  	struct {
  	    FILETIME       creationTime;
***************
*** 158,175 ****
  	    unsigned long  mode;
  	    unsigned long  alignmentRequirement;
  	    unsigned long  fileNameLength;
! 	    unsigned char  fileName[512];
  	} QPfileAllInfo;
  	struct {
  	    unsigned long  fileNameLength;
! 	    unsigned char  fileName[512];
  	} QPfileAltNameInfo;
  	struct {
  	    unsigned long  nextEntryOffset;
  	    unsigned long  streamNameLength;
  	    LARGE_INTEGER  streamSize;
  	    LARGE_INTEGER  streamAllocationSize;
! 	    unsigned char  fileName[512];
  	} QPfileStreamInfo;
  	struct {
  	    LARGE_INTEGER  compressedFileSize;
--- 160,177 ----
  	    unsigned long  mode;
  	    unsigned long  alignmentRequirement;
  	    unsigned long  fileNameLength;
! 	    unsigned char  fileName[512]; /* STRING */
  	} QPfileAllInfo;
  	struct {
  	    unsigned long  fileNameLength;
! 	    unsigned char  fileName[512]; /* STRING */
  	} QPfileAltNameInfo;
  	struct {
  	    unsigned long  nextEntryOffset;
  	    unsigned long  streamNameLength;
  	    LARGE_INTEGER  streamSize;
  	    LARGE_INTEGER  streamAllocationSize;
! 	    unsigned char  fileName[512]; /* STRING */
  	} QPfileStreamInfo;
  	struct {
  	    LARGE_INTEGER  compressedFileSize;
***************
*** 207,212 ****
--- 209,287 ----
  	} QFfileNameInfo;
      } u;
  } smb_tran2QFileInfo_t;
+ 
+ typedef struct {
+     unsigned long  creationDateTime;	/* SMB_DATE / SMB_TIME */
+     unsigned long  lastAccessDateTime;	/* SMB_DATE / SMB_TIME */
+     unsigned long  lastWriteDateTime;	/* SMB_DATE / SMB_TIME */
+     unsigned long  dataSize;
+     unsigned long  allocationSize;
+     unsigned short attributes;
+ } smb_V3FileAttrsShort;
+ 
+ typedef struct {
+     FILETIME       creationTime;
+     FILETIME       lastAccessTime;
+     FILETIME       lastWriteTime;
+     FILETIME       lastChangeTime;
+     LARGE_INTEGER  endOfFile;
+     LARGE_INTEGER  allocationSize;
+     unsigned long  extFileAttributes;
+ } smb_V3FileAttrsLong;
+ 
+ typedef struct {
+     union {
+ 	struct {
+             smb_V3FileAttrsShort fileAttrs;
+ 	    unsigned char  fileNameLength;
+             /* STRING fileName */
+ 	} FstandardInfo;
+ 
+ 	struct {
+             smb_V3FileAttrsShort fileAttrs;
+ 	    unsigned long  eaSize;
+             unsigned char  fileNameLength;
+             /* STRING fileName */
+ 	} FeaSizeInfo, FeasFromListInfo;
+ 
+         struct {
+             unsigned long  nextEntryOffset;
+             unsigned long  fileIndex;
+             smb_V3FileAttrsLong fileAttrs;
+             unsigned long  fileNameLength;
+             /* STRING fileName */
+         } FfileDirectoryInfo;
+ 
+         struct {
+             unsigned long  nextEntryOffset;
+             unsigned long  fileIndex;
+             smb_V3FileAttrsLong fileAttrs;
+             unsigned long  fileNameLength;
+             unsigned long  eaSize;
+             /* STRING fileName */
+         } FfileFullDirectoryInfo;
+ 
+         struct {
+             unsigned long  nextEntryOffset;
+             unsigned long  fileIndex;
+             smb_V3FileAttrsLong fileAttrs;
+             unsigned long  fileNameLength;
+             unsigned long  eaSize;
+             unsigned char  shortNameLength;
+             unsigned char  reserved;
+             wchar_t        shortName[12];
+             /* STRING fileName */
+         } FfileBothDirectoryInfo;
+ 
+         struct {
+             unsigned long  nextEntryOffset;
+             unsigned long  fileIndex;
+             unsigned long  fileNameLength;
+             /* STRING fileName */
+         } FfileNamesInfo;
+     } u;
+ } smb_tran2Find_t;
+ 
  #pragma pack(pop)
  
  /* more than enough opcodes for today, anyway */
***************
*** 314,344 ****
  extern long smb_ReceiveNTTransact(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
  
  extern void smb_NotifyChange(DWORD action, DWORD notifyFilter,
! 	cm_scache_t *dscp, char *filename, char *otherFilename,
  	BOOL isDirectParent);
  
  extern long smb_ReceiveNTCancel(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
  
  extern long smb_ReceiveNTRename(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
  
! extern int smb_V3MatchMask(char *namep, char *maskp, int flags);
  
  extern void smb3_Init();
- extern cm_user_t *smb_FindCMUserByName(char *usern, char *machine, afs_uint32 flags);
  
  /* SMB auth related functions */
  extern void smb_NegotiateExtendedSecurity(void ** secBlob, int * secBlobLength);
  
- #ifdef DJGPP
- #define DELETE (0x00010000)
- #define READ_CONTROL (0x00020000)
- #define SYNCHRONIZE (0x00100000)
- #define FILE_WRITE_ATTRIBUTES ( 0x0100 )
- #define FILE_GENERIC_READ (0x00120089)
- #define FILE_GENERIC_WRITE (0x00120116)
- #define FILE_GENERIC_EXECUTE (0x001200a0)
- #endif /* DJGPP */
- 
  /* Some of the FILE_NOTIFY_CHANGE values are undefined in winnt.h */
  #define FILE_NOTIFY_CHANGE_EA           0x00000080
  #define FILE_NOTIFY_CHANGE_STREAM_NAME  0x00000200
--- 389,408 ----
  extern long smb_ReceiveNTTransact(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
  
  extern void smb_NotifyChange(DWORD action, DWORD notifyFilter,
! 	cm_scache_t *dscp, clientchar_t *filename, clientchar_t *otherFilename,
  	BOOL isDirectParent);
  
  extern long smb_ReceiveNTCancel(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
  
  extern long smb_ReceiveNTRename(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
  
! extern unsigned long smb_ExtAttributes(cm_scache_t *scp);
  
  extern void smb3_Init();
  
  /* SMB auth related functions */
  extern void smb_NegotiateExtendedSecurity(void ** secBlob, int * secBlobLength);
  
  /* Some of the FILE_NOTIFY_CHANGE values are undefined in winnt.h */
  #define FILE_NOTIFY_CHANGE_EA           0x00000080
  #define FILE_NOTIFY_CHANGE_STREAM_NAME  0x00000200
Index: openafs/src/WINNT/afsd/smb_iocons.h
diff -c openafs/src/WINNT/afsd/smb_iocons.h:1.10.4.6 openafs/src/WINNT/afsd/smb_iocons.h:1.10.4.8
*** openafs/src/WINNT/afsd/smb_iocons.h:1.10.4.6	Tue Jan 15 22:19:52 2008
--- openafs/src/WINNT/afsd/smb_iocons.h	Thu Jun 26 10:58:06 2008
***************
*** 21,27 ****
  } chservinfo_t;
  
  struct gaginfo {
! 	unsigned long showflags, logflags, logwritethruflag, spare[3];
          unsigned char spare2[128];
  };
  
--- 21,27 ----
  } chservinfo_t;
  
  struct gaginfo {
! 	afs_uint32 showflags, logflags, logwritethruflag, spare[3];
          unsigned char spare2[128];
  };
  
***************
*** 94,100 ****
  #define VIOC_UUIDCTL                    0x30
  #define VIOC_PATH_AVAILABILITY          0x31
  #define VIOC_GETFILETYPE                0x32
  
  #define VIOC_VOLSTAT_TEST               0x3F
! /* Not to exceed SMB_IOCTL_MAXPROCS from smb_ioctl.h */
  #endif /*  __SMB_IOCONS_H_ENV_ */
--- 94,109 ----
  #define VIOC_UUIDCTL                    0x30
  #define VIOC_PATH_AVAILABILITY          0x31
  #define VIOC_GETFILETYPE                0x32
+ #define VIOC_UNICODECTL                 0x33
  
  #define VIOC_VOLSTAT_TEST               0x3F
! 
! /* magic file name for ioctl opens */
! #define CM_IOCTL_FILENAME	"\\_._AFS_IOCTL_._"	/* double backslashes for C compiler */
! #define CM_IOCTL_FILENAME_NOSLASH "_._AFS_IOCTL_._"
! 
! /* max parms for ioctl, in either direction */
! #define CM_IOCTL_MAXDATA	        8192*2
! #define CM_IOCTL_MAXPROCS               64
! 
  #endif /*  __SMB_IOCONS_H_ENV_ */
Index: openafs/src/WINNT/afsd/smb_ioctl.c
diff -c openafs/src/WINNT/afsd/smb_ioctl.c:1.25.2.8 openafs/src/WINNT/afsd/smb_ioctl.c:1.25.2.13
*** openafs/src/WINNT/afsd/smb_ioctl.c:1.25.2.8	Tue Jan 15 22:19:52 2008
--- openafs/src/WINNT/afsd/smb_ioctl.c	Fri Jul 11 18:27:01 2008
***************
*** 10,23 ****
  #include <afs/param.h>
  #include <afs/stds.h>
  
- #ifndef DJGPP
  #include <windows.h>
- #endif /* !DJGPP */
  #include <stdlib.h>
  #include <malloc.h>
  #include <string.h>
  #include <stdio.h>
  #include <time.h>
  
  #include <osi.h>
  
--- 10,22 ----
  #include <afs/param.h>
  #include <afs/stds.h>
  
  #include <windows.h>
  #include <stdlib.h>
  #include <malloc.h>
  #include <string.h>
  #include <stdio.h>
  #include <time.h>
+ #include <strsafe.h>
  
  #include <osi.h>
  
***************
*** 25,96 ****
  
  #include "smb.h"
  
! smb_ioctlProc_t *smb_ioctlProcsp[SMB_IOCTL_MAXPROCS];
  
! /*extern unsigned char smb_LANadapter;*/
  
! void smb_InitIoctl(void)
  {
!         int i;
!         for (i=0; i<SMB_IOCTL_MAXPROCS; i++)
! 	    smb_ioctlProcsp[i] = NULL;
! 
! 	smb_ioctlProcsp[VIOCGETAL] = cm_IoctlGetACL;
!         smb_ioctlProcsp[VIOC_FILE_CELL_NAME] = cm_IoctlGetFileCellName;
!         smb_ioctlProcsp[VIOCSETAL] = cm_IoctlSetACL;
!         smb_ioctlProcsp[VIOC_FLUSHVOLUME] = cm_IoctlFlushVolume;
!         smb_ioctlProcsp[VIOCFLUSH] = cm_IoctlFlushFile;
!         smb_ioctlProcsp[VIOCSETVOLSTAT] = cm_IoctlSetVolumeStatus;
!         smb_ioctlProcsp[VIOCGETVOLSTAT] = cm_IoctlGetVolumeStatus;
!         smb_ioctlProcsp[VIOCWHEREIS] = cm_IoctlWhereIs;
!         smb_ioctlProcsp[VIOC_AFS_STAT_MT_PT] = cm_IoctlStatMountPoint;
!         smb_ioctlProcsp[VIOC_AFS_DELETE_MT_PT] = cm_IoctlDeleteMountPoint;
!         smb_ioctlProcsp[VIOCCKSERV] = cm_IoctlCheckServers;
!         smb_ioctlProcsp[VIOC_GAG] = cm_IoctlGag;
!         smb_ioctlProcsp[VIOCCKBACK] = cm_IoctlCheckVolumes;
!         smb_ioctlProcsp[VIOCSETCACHESIZE] = cm_IoctlSetCacheSize;
!         smb_ioctlProcsp[VIOCGETCACHEPARMS] = cm_IoctlGetCacheParms;
!         smb_ioctlProcsp[VIOCGETCELL] = cm_IoctlGetCell;
!         smb_ioctlProcsp[VIOCNEWCELL] = cm_IoctlNewCell;
!         smb_ioctlProcsp[VIOC_GET_WS_CELL] = cm_IoctlGetWsCell;
!         smb_ioctlProcsp[VIOC_AFS_SYSNAME] = cm_IoctlSysName;
!         smb_ioctlProcsp[VIOC_GETCELLSTATUS] = cm_IoctlGetCellStatus;
!         smb_ioctlProcsp[VIOC_SETCELLSTATUS] = cm_IoctlSetCellStatus;
!         smb_ioctlProcsp[VIOC_SETSPREFS] = cm_IoctlSetSPrefs;
!         smb_ioctlProcsp[VIOC_GETSPREFS] = cm_IoctlGetSPrefs;
!         smb_ioctlProcsp[VIOC_STOREBEHIND] = cm_IoctlStoreBehind;
!         smb_ioctlProcsp[VIOC_AFS_CREATE_MT_PT] = cm_IoctlCreateMountPoint;
!         smb_ioctlProcsp[VIOC_TRACECTL] = cm_IoctlTraceControl;
! 	smb_ioctlProcsp[VIOCSETTOK] = cm_IoctlSetToken;
! 	smb_ioctlProcsp[VIOCGETTOK] = cm_IoctlGetTokenIter;
! 	smb_ioctlProcsp[VIOCNEWGETTOK] = cm_IoctlGetToken;
! 	smb_ioctlProcsp[VIOCDELTOK] = cm_IoctlDelToken;
! 	smb_ioctlProcsp[VIOCDELALLTOK] = cm_IoctlDelAllToken;
! 	smb_ioctlProcsp[VIOC_SYMLINK] = cm_IoctlSymlink;
! 	smb_ioctlProcsp[VIOC_LISTSYMLINK] = cm_IoctlListlink;
! 	smb_ioctlProcsp[VIOC_DELSYMLINK] = cm_IoctlDeletelink;
! 	smb_ioctlProcsp[VIOC_MAKESUBMOUNT] = cm_IoctlMakeSubmount;
! 	smb_ioctlProcsp[VIOC_GETRXKCRYPT] = cm_IoctlGetRxkcrypt;
! 	smb_ioctlProcsp[VIOC_SETRXKCRYPT] = cm_IoctlSetRxkcrypt;
! 	smb_ioctlProcsp[VIOC_ISSYMLINK] = cm_IoctlIslink;
! #ifdef DJGPP
! 	smb_ioctlProcsp[VIOC_SHUTDOWN] = cm_IoctlShutdown;
! #endif
! 	smb_ioctlProcsp[VIOC_TRACEMEMDUMP] = cm_IoctlMemoryDump;
! 	smb_ioctlProcsp[VIOC_ISSYMLINK] = cm_IoctlIslink;
!         smb_ioctlProcsp[VIOC_FLUSHALL] = cm_IoctlFlushAllVolumes;
!         smb_ioctlProcsp[VIOCGETFID] = cm_IoctlGetFid;
!         smb_ioctlProcsp[VIOCGETOWNER] = cm_IoctlGetOwner;
!         smb_ioctlProcsp[VIOC_RXSTAT_PROC] = cm_IoctlRxStatProcess;
!         smb_ioctlProcsp[VIOC_RXSTAT_PEER] = cm_IoctlRxStatPeer;
!         smb_ioctlProcsp[VIOC_UUIDCTL] = cm_IoctlUUIDControl;
!         smb_ioctlProcsp[VIOC_PATH_AVAILABILITY] = cm_IoctlPathAvailability;
!         smb_ioctlProcsp[VIOC_GETFILETYPE] = cm_IoctlGetFileType;
!         smb_ioctlProcsp[VIOC_VOLSTAT_TEST] = cm_IoctlVolStatTest;
! }
  
  /* called to make a fid structure into an IOCTL fid structure */
! void smb_SetupIoctlFid(smb_fid_t *fidp, cm_space_t *prefix)
  {
      smb_ioctl_t *iop;
      cm_space_t *copyPrefix;
--- 24,97 ----
  
  #include "smb.h"
  
! #include "cm_rpc.h"
! #include "afs/afsrpc.h"
! #include "afs/auth.h"
  
! smb_ioctlProc_t *smb_ioctlProcsp[SMB_IOCTL_MAXPROCS];
  
! void 
! smb_InitIoctl(void)
  {
!     int i;
!     for (i=0; i<SMB_IOCTL_MAXPROCS; i++)
!         smb_ioctlProcsp[i] = NULL;
! 
!     smb_ioctlProcsp[VIOCGETAL] = smb_IoctlGetACL;
!     smb_ioctlProcsp[VIOC_FILE_CELL_NAME] = smb_IoctlGetFileCellName;
!     smb_ioctlProcsp[VIOCSETAL] = smb_IoctlSetACL;
!     smb_ioctlProcsp[VIOC_FLUSHVOLUME] = smb_IoctlFlushVolume;
!     smb_ioctlProcsp[VIOCFLUSH] = smb_IoctlFlushFile;
!     smb_ioctlProcsp[VIOCSETVOLSTAT] = smb_IoctlSetVolumeStatus;
!     smb_ioctlProcsp[VIOCGETVOLSTAT] = smb_IoctlGetVolumeStatus;
!     smb_ioctlProcsp[VIOCWHEREIS] = smb_IoctlWhereIs;
!     smb_ioctlProcsp[VIOC_AFS_STAT_MT_PT] = smb_IoctlStatMountPoint;
!     smb_ioctlProcsp[VIOC_AFS_DELETE_MT_PT] = smb_IoctlDeleteMountPoint;
!     smb_ioctlProcsp[VIOCCKSERV] = smb_IoctlCheckServers;
!     smb_ioctlProcsp[VIOC_GAG] = smb_IoctlGag;
!     smb_ioctlProcsp[VIOCCKBACK] = smb_IoctlCheckVolumes;
!     smb_ioctlProcsp[VIOCSETCACHESIZE] = smb_IoctlSetCacheSize;
!     smb_ioctlProcsp[VIOCGETCACHEPARMS] = smb_IoctlGetCacheParms;
!     smb_ioctlProcsp[VIOCGETCELL] = smb_IoctlGetCell;
!     smb_ioctlProcsp[VIOCNEWCELL] = smb_IoctlNewCell;
!     smb_ioctlProcsp[VIOC_GET_WS_CELL] = smb_IoctlGetWsCell;
!     smb_ioctlProcsp[VIOC_AFS_SYSNAME] = smb_IoctlSysName;
!     smb_ioctlProcsp[VIOC_GETCELLSTATUS] = smb_IoctlGetCellStatus;
!     smb_ioctlProcsp[VIOC_SETCELLSTATUS] = smb_IoctlSetCellStatus;
!     smb_ioctlProcsp[VIOC_SETSPREFS] = smb_IoctlSetSPrefs;
!     smb_ioctlProcsp[VIOC_GETSPREFS] = smb_IoctlGetSPrefs;
!     smb_ioctlProcsp[VIOC_STOREBEHIND] = smb_IoctlStoreBehind;
!     smb_ioctlProcsp[VIOC_AFS_CREATE_MT_PT] = smb_IoctlCreateMountPoint;
!     smb_ioctlProcsp[VIOC_TRACECTL] = smb_IoctlTraceControl;
!     smb_ioctlProcsp[VIOCSETTOK] = smb_IoctlSetToken;
!     smb_ioctlProcsp[VIOCGETTOK] = smb_IoctlGetTokenIter;
!     smb_ioctlProcsp[VIOCNEWGETTOK] = smb_IoctlGetToken;
!     smb_ioctlProcsp[VIOCDELTOK] = smb_IoctlDelToken;
!     smb_ioctlProcsp[VIOCDELALLTOK] = smb_IoctlDelAllToken;
!     smb_ioctlProcsp[VIOC_SYMLINK] = smb_IoctlSymlink;
!     smb_ioctlProcsp[VIOC_LISTSYMLINK] = smb_IoctlListlink;
!     smb_ioctlProcsp[VIOC_DELSYMLINK] = smb_IoctlDeletelink;
!     smb_ioctlProcsp[VIOC_MAKESUBMOUNT] = smb_IoctlMakeSubmount;
!     smb_ioctlProcsp[VIOC_GETRXKCRYPT] = smb_IoctlGetRxkcrypt;
!     smb_ioctlProcsp[VIOC_SETRXKCRYPT] = smb_IoctlSetRxkcrypt;
!     smb_ioctlProcsp[VIOC_ISSYMLINK] = smb_IoctlIslink;
!     smb_ioctlProcsp[VIOC_TRACEMEMDUMP] = smb_IoctlMemoryDump;
!     smb_ioctlProcsp[VIOC_ISSYMLINK] = smb_IoctlIslink;
!     smb_ioctlProcsp[VIOC_FLUSHALL] = smb_IoctlFlushAllVolumes;
!     smb_ioctlProcsp[VIOCGETFID] = smb_IoctlGetFid;
!     smb_ioctlProcsp[VIOCGETOWNER] = smb_IoctlGetOwner;
!     smb_ioctlProcsp[VIOC_RXSTAT_PROC] = smb_IoctlRxStatProcess;
!     smb_ioctlProcsp[VIOC_RXSTAT_PEER] = smb_IoctlRxStatPeer;
!     smb_ioctlProcsp[VIOC_UUIDCTL] = smb_IoctlUUIDControl;
!     smb_ioctlProcsp[VIOC_PATH_AVAILABILITY] = smb_IoctlPathAvailability;
!     smb_ioctlProcsp[VIOC_GETFILETYPE] = smb_IoctlGetFileType;
!     smb_ioctlProcsp[VIOC_VOLSTAT_TEST] = smb_IoctlVolStatTest;
!     smb_ioctlProcsp[VIOC_UNICODECTL] = smb_IoctlUnicodeControl;
! }       
  
  /* called to make a fid structure into an IOCTL fid structure */
! void 
! smb_SetupIoctlFid(smb_fid_t *fidp, cm_space_t *prefix)
  {
      smb_ioctl_t *iop;
      cm_space_t *copyPrefix;
***************
*** 107,113 ****
      }
      if (prefix) {
          copyPrefix = cm_GetSpace();
!         strcpy(copyPrefix->data, prefix->data);
          fidp->ioctlp->prefix = copyPrefix;
      }
      lock_ReleaseMutex(&fidp->mx);
--- 108,114 ----
      }
      if (prefix) {
          copyPrefix = cm_GetSpace();
!         StringCbCopy(copyPrefix->data, CM_UTILS_SPACESIZE, prefix->data);
          fidp->ioctlp->prefix = copyPrefix;
      }
      lock_ReleaseMutex(&fidp->mx);
***************
*** 117,138 ****
   * this is the first read call.  This is the function that actually makes the
   * call to the ioctl code.
   */
! long smb_IoctlPrepareRead(smb_fid_t *fidp, smb_ioctl_t *ioctlp, cm_user_t *userp)
  {
!     long opcode;
      smb_ioctlProc_t *procp = NULL;
!     long code;
  
!     if (ioctlp->flags & SMB_IOCTLFLAG_DATAIN) {
!         ioctlp->flags &= ~SMB_IOCTLFLAG_DATAIN;
  
          /* do the call now, or fail if we didn't get an opcode, or
           * enough of an opcode.
           */
!         if (ioctlp->inCopied < sizeof(long)) 
              return CM_ERROR_INVAL;
!         memcpy(&opcode, ioctlp->inDatap, sizeof(long));
!         ioctlp->inDatap += sizeof(long);
  
          osi_Log1(afsd_logp, "Ioctl opcode 0x%x", opcode);
  
--- 118,140 ----
   * this is the first read call.  This is the function that actually makes the
   * call to the ioctl code.
   */
! afs_int32
! smb_IoctlPrepareRead(struct smb_fid *fidp, smb_ioctl_t *ioctlp, cm_user_t *userp)
  {
!     afs_int32 opcode;
      smb_ioctlProc_t *procp = NULL;
!     afs_int32 code;
  
!     if (ioctlp->ioctl.flags & CM_IOCTLFLAG_DATAIN) {
!         ioctlp->ioctl.flags &= ~CM_IOCTLFLAG_DATAIN;
  
          /* do the call now, or fail if we didn't get an opcode, or
           * enough of an opcode.
           */
!         if (ioctlp->ioctl.inCopied < sizeof(afs_int32)) 
              return CM_ERROR_INVAL;
!         memcpy(&opcode, ioctlp->ioctl.inDatap, sizeof(afs_int32));
!         ioctlp->ioctl.inDatap += sizeof(afs_int32);
  
          osi_Log1(afsd_logp, "Ioctl opcode 0x%x", opcode);
  
***************
*** 146,158 ****
              return CM_ERROR_BADOP;
  
          /* otherwise, make the call */
!         ioctlp->outDatap += sizeof(long);	/* reserve room for return code */
          code = (*procp)(ioctlp, userp);
  
          osi_Log1(afsd_logp, "Ioctl return code 0x%x", code);
  
          /* copy in return code */
!         memcpy(ioctlp->outAllocp, &code, sizeof(long));
      }
      return 0;
  }
--- 148,160 ----
              return CM_ERROR_BADOP;
  
          /* otherwise, make the call */
!         ioctlp->ioctl.outDatap += sizeof(afs_int32); /* reserve room for return code */
          code = (*procp)(ioctlp, userp);
  
          osi_Log1(afsd_logp, "Ioctl return code 0x%x", code);
  
          /* copy in return code */
!         memcpy(ioctlp->ioctl.outAllocp, &code, sizeof(afs_int32));
      }
      return 0;
  }
***************
*** 161,336 ****
   * a series of reads (or the very first call), then we start a new call.
   * We also ensure that things are properly initialized for the start of a call.
   */
! void smb_IoctlPrepareWrite(smb_fid_t *fidp, smb_ioctl_t *ioctlp)
  {
! 	/* make sure the buffer(s) are allocated */
! 	if (!ioctlp->inAllocp) ioctlp->inAllocp = malloc(SMB_IOCTL_MAXDATA);
!         if (!ioctlp->outAllocp) ioctlp->outAllocp = malloc(SMB_IOCTL_MAXDATA);
! 
! 	/* Fixes fs la problem.  We do a StrToOEM later and if this data isn't initialized we get memory issues. */
!        (void) memset(ioctlp->inAllocp, 0, SMB_IOCTL_MAXDATA);
!        (void) memset(ioctlp->outAllocp, 0, SMB_IOCTL_MAXDATA);
! 
! 	/* and make sure that we've reset our state for the new incoming request */
! 	if (!(ioctlp->flags & SMB_IOCTLFLAG_DATAIN)) {
! 	        ioctlp->inCopied = 0;
! 	        ioctlp->outCopied = 0;
! 		ioctlp->inDatap = ioctlp->inAllocp;
! 		ioctlp->outDatap = ioctlp->outAllocp;
! 	        ioctlp->flags |= SMB_IOCTLFLAG_DATAIN;
! 	}
! }
  
  /* called from smb_ReceiveCoreRead when we receive a read on the ioctl fid */
! long smb_IoctlRead(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp,
! 	smb_packet_t *outp)
  {
! 	smb_ioctl_t *iop;
!         long count;
!         long leftToCopy;
!         char *op;
!         long code;
!         cm_user_t *userp;
! 
!         iop = fidp->ioctlp;
!         count = smb_GetSMBParm(inp, 1);
!         userp = smb_GetUserFromVCP(vcp, inp);
  
! 	/* Identify tree */
      code = smb_LookupTIDPath(vcp, ((smb_t *)inp)->tid, &iop->tidPathp);
      if(code) {
          cm_ReleaseUser(userp);
          return CM_ERROR_NOSUCHPATH;
      }
  
! 	/* turn the connection around, if required */
! 	code = smb_IoctlPrepareRead(fidp, iop, userp);
  
! 	if (code) {
! 		cm_ReleaseUser(userp);
! 		return code;
!         }
  
! 	leftToCopy = (long)((iop->outDatap - iop->outAllocp) - iop->outCopied);
!         if (count > leftToCopy) count = leftToCopy;
!         
!         /* now set the parms for a read of count bytes */
!         smb_SetSMBParm(outp, 0, count);
!         smb_SetSMBParm(outp, 1, 0);
!         smb_SetSMBParm(outp, 2, 0);
!         smb_SetSMBParm(outp, 3, 0);
!         smb_SetSMBParm(outp, 4, 0);
! 
! 	smb_SetSMBDataLength(outp, count+3);
! 
!         op = smb_GetSMBData(outp, NULL);
!         *op++ = 1;
!         *op++ = (char)(count & 0xff);
!         *op++ = (char)((count >> 8) & 0xff);
!         
! 	/* now copy the data into the response packet */
!         memcpy(op, iop->outCopied + iop->outAllocp, count);
  
!         /* and adjust the counters */
!         iop->outCopied += count;
!         
!         cm_ReleaseUser(userp);
  
!         return 0;
  }
  
  /* called from smb_ReceiveCoreWrite when we receive a write call on the IOCTL
   * file descriptor.
   */
! long smb_IoctlWrite(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
! 	smb_ioctl_t *iop;
!         long count;
!         long code;
!         char *op;
!         int inDataBlockCount;
! 
! 	code = 0;
! 	count = smb_GetSMBParm(inp, 1);
!         iop = fidp->ioctlp;
          
! 	smb_IoctlPrepareWrite(fidp, iop);
  
!         op = smb_GetSMBData(inp, NULL);
! 	op = smb_ParseDataBlock(op, NULL, &inDataBlockCount);
  	
!         if (count + iop->inCopied > SMB_IOCTL_MAXDATA) {
! 		code = CM_ERROR_TOOBIG;
!                 goto done;
!         }
          
! 	/* copy data */
!         memcpy(iop->inDatap + iop->inCopied, op, count);
          
!         /* adjust counts */
!         iop->inCopied += count;
  
! done:
! 	/* return # of bytes written */
! 	if (code == 0) {
! 		smb_SetSMBParm(outp, 0, count);
!                 smb_SetSMBDataLength(outp, 0);
!         }
  
!         return code;
! }
  
  /* called from smb_ReceiveV3WriteX when we receive a write call on the IOCTL
   * file descriptor.
   */
! long smb_IoctlV3Write(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
! 	smb_ioctl_t *iop;
!         long count;
!         long code;
!         char *op;
!         int inDataBlockCount;
! 
! 	code = 0;
! 	count = smb_GetSMBParm(inp, 10);
!         iop = fidp->ioctlp;
!         
! 	smb_IoctlPrepareWrite(fidp, iop);
  
!         op = inp->data + smb_GetSMBParm(inp, 11);
!         inDataBlockCount = count;
! 	
!         if (count + iop->inCopied > SMB_IOCTL_MAXDATA) {
! 		code = CM_ERROR_TOOBIG;
!                 goto done;
!         }
!         
! 	/* copy data */
!         memcpy(iop->inDatap + iop->inCopied, op, count);
          
!         /* adjust counts */
!         iop->inCopied += count;
  
! done:
! 	/* return # of bytes written */
! 	if (code == 0) {
! 		smb_SetSMBParm(outp, 2, count);
!                 smb_SetSMBParm(outp, 3, 0); /* reserved */
! 	        smb_SetSMBParm(outp, 4, 0); /* reserved */
! 	        smb_SetSMBParm(outp, 5, 0); /* reserved */
! 	        smb_SetSMBDataLength(outp, 0);
!         }
  
!         return code;
! }
  
  
  /* called from V3 read to handle IOCTL descriptor reads */
! long smb_IoctlV3Read(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      smb_ioctl_t *iop;
      long count;
!     long code;
      long leftToCopy;
      char *op;
      cm_user_t *userp;
--- 163,345 ----
   * a series of reads (or the very first call), then we start a new call.
   * We also ensure that things are properly initialized for the start of a call.
   */
! void 
! smb_IoctlPrepareWrite(smb_fid_t *fidp, smb_ioctl_t *ioctlp)
  {
!     /* make sure the buffer(s) are allocated */
!     if (!ioctlp->ioctl.inAllocp) 
!         ioctlp->ioctl.inAllocp = malloc(SMB_IOCTL_MAXDATA);
!     if (!ioctlp->ioctl.outAllocp)
!         ioctlp->ioctl.outAllocp = malloc(SMB_IOCTL_MAXDATA);
! 
!     /* Fixes fs la problem.  We do a StrToOEM later and if this data isn't initialized we get memory issues. */
!     (void) memset(ioctlp->ioctl.inAllocp, 0, SMB_IOCTL_MAXDATA);
!     (void) memset(ioctlp->ioctl.outAllocp, 0, SMB_IOCTL_MAXDATA);
! 
!     /* and make sure that we've reset our state for the new incoming request */
!     if (!(ioctlp->ioctl.flags & CM_IOCTLFLAG_DATAIN)) {
!         ioctlp->ioctl.inCopied = 0;
!         ioctlp->ioctl.outCopied = 0;
!         ioctlp->ioctl.inDatap = ioctlp->ioctl.inAllocp;
!         ioctlp->ioctl.outDatap = ioctlp->ioctl.outAllocp;
!         ioctlp->ioctl.flags |= CM_IOCTLFLAG_DATAIN;
!     }
! }       
  
  /* called from smb_ReceiveCoreRead when we receive a read on the ioctl fid */
! afs_int32
! smb_IoctlRead(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     smb_ioctl_t *iop;
!     long count;
!     afs_int32 leftToCopy;
!     char *op;
!     afs_int32 code;
!     cm_user_t *userp;
! 
!     iop = fidp->ioctlp;
!     count = smb_GetSMBParm(inp, 1);
!     userp = smb_GetUserFromVCP(vcp, inp);
  
!     /* Identify tree */
      code = smb_LookupTIDPath(vcp, ((smb_t *)inp)->tid, &iop->tidPathp);
      if(code) {
          cm_ReleaseUser(userp);
          return CM_ERROR_NOSUCHPATH;
      }
  
!     /* turn the connection around, if required */
!     code = smb_IoctlPrepareRead(fidp, iop, userp);
  
!     if (code) {
!         cm_ReleaseUser(userp);
!         return code;
!     }
  
!     leftToCopy = (afs_int32)((iop->ioctl.outDatap - iop->ioctl.outAllocp) - iop->ioctl.outCopied);
!     if (count > leftToCopy)
!         count = leftToCopy;
! 
!     /* now set the parms for a read of count bytes */
!     smb_SetSMBParm(outp, 0, count);
!     smb_SetSMBParm(outp, 1, 0);
!     smb_SetSMBParm(outp, 2, 0);
!     smb_SetSMBParm(outp, 3, 0);
!     smb_SetSMBParm(outp, 4, 0);
  
!     smb_SetSMBDataLength(outp, count+3);
! 
!     op = smb_GetSMBData(outp, NULL);
!     *op++ = 1;
!     *op++ = (char)(count & 0xff);
!     *op++ = (char)((count >> 8) & 0xff);
! 
!     /* now copy the data into the response packet */
!     memcpy(op, iop->ioctl.outCopied + iop->ioctl.outAllocp, count);
  
!     /* and adjust the counters */
!     iop->ioctl.outCopied += count;
! 
!     cm_ReleaseUser(userp);
! 
!     return 0;
  }
  
  /* called from smb_ReceiveCoreWrite when we receive a write call on the IOCTL
   * file descriptor.
   */
! afs_int32
! smb_IoctlWrite(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     smb_ioctl_t *iop;
!     long count;
!     afs_int32 code;
!     char *op;
!     int inDataBlockCount;
! 
!     code = 0;
!     count = smb_GetSMBParm(inp, 1);
!     iop = fidp->ioctlp;
          
!     smb_IoctlPrepareWrite(fidp, iop);
  
!     op = smb_GetSMBData(inp, NULL);
!     op = smb_ParseDataBlock(op, NULL, &inDataBlockCount);
  	
!     if (count + iop->ioctl.inCopied > SMB_IOCTL_MAXDATA) {
!         code = CM_ERROR_TOOBIG;
!         goto done;
!     }
          
!     /* copy data */
!     memcpy(iop->ioctl.inDatap + iop->ioctl.inCopied, op, count);
          
!     /* adjust counts */
!     iop->ioctl.inCopied += count;
  
!   done:
!     /* return # of bytes written */
!     if (code == 0) {
!         smb_SetSMBParm(outp, 0, count);
!         smb_SetSMBDataLength(outp, 0);
!     }
  
!     return code;
! }       
  
  /* called from smb_ReceiveV3WriteX when we receive a write call on the IOCTL
   * file descriptor.
   */
! afs_int32
! smb_IoctlV3Write(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
!     smb_ioctl_t *iop;
!     long count;
!     afs_int32 code;
!     char *op;
!     int inDataBlockCount;
  
!     code = 0;
!     count = smb_GetSMBParm(inp, 10);
!     iop = fidp->ioctlp;
! 
!     smb_IoctlPrepareWrite(fidp, iop);
! 
!     op = inp->data + smb_GetSMBParm(inp, 11);
!     inDataBlockCount = count;
! 
!     if (count + iop->ioctl.inCopied > SMB_IOCTL_MAXDATA) {
!         code = CM_ERROR_TOOBIG;
!         goto done;
!     }
          
!     /* copy data */
!     memcpy(iop->ioctl.inDatap + iop->ioctl.inCopied, op, count);
  
!     /* adjust counts */
!     iop->ioctl.inCopied += count;
  
!   done:
!     /* return # of bytes written */
!     if (code == 0) {
!         smb_SetSMBParm(outp, 2, count);
!         smb_SetSMBParm(outp, 3, 0); /* reserved */
!         smb_SetSMBParm(outp, 4, 0); /* reserved */
!         smb_SetSMBParm(outp, 5, 0); /* reserved */
!         smb_SetSMBDataLength(outp, 0);
!     }
! 
!     return code;
! }       
  
  
  /* called from V3 read to handle IOCTL descriptor reads */
! afs_int32
! smb_IoctlV3Read(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
  {
      smb_ioctl_t *iop;
      long count;
!     afs_int32 code;
      long leftToCopy;
      char *op;
      cm_user_t *userp;
***************
*** 344,352 ****
      osi_assertx(userp != NULL, "null cm_user_t");
      iop->uidp = uidp;
      if (uidp && uidp->unp) {
!         osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s",
                    uidp->userID, userp,
!                   osi_LogSaveString(afsd_logp, uidp->unp->name));
      } else {
          if (uidp)
  	    osi_Log2(afsd_logp, "Ioctl uid %d user %x no name",
--- 353,361 ----
      osi_assertx(userp != NULL, "null cm_user_t");
      iop->uidp = uidp;
      if (uidp && uidp->unp) {
!         osi_Log3(afsd_logp, "Ioctl uid %d user %x name %S",
                    uidp->userID, userp,
!                   osi_LogSaveClientString(afsd_logp, uidp->unp->name));
      } else {
          if (uidp)
  	    osi_Log2(afsd_logp, "Ioctl uid %d user %x no name",
***************
*** 374,381 ****
  	return code;
      }
  
!     leftToCopy = (long)((iop->outDatap - iop->outAllocp) - iop->outCopied);
!     if (count > leftToCopy) count = leftToCopy;
          
      /* 0 and 1 are reserved for request chaining, were setup by our caller,
       * and will be further filled in after we return.
--- 383,391 ----
  	return code;
      }
  
!     leftToCopy = (long)((iop->ioctl.outDatap - iop->ioctl.outAllocp) - iop->ioctl.outCopied);
!     if (count > leftToCopy) 
!         count = leftToCopy;
          
      /* 0 and 1 are reserved for request chaining, were setup by our caller,
       * and will be further filled in after we return.
***************
*** 403,412 ****
      smb_SetSMBDataLength(outp, count);
          
      /* now copy the data into the response packet */
!     memcpy(op, iop->outCopied + iop->outAllocp, count);
  
      /* and adjust the counters */
!     iop->outCopied += count;
  
      /* and cleanup things */
      cm_ReleaseUser(userp);
--- 413,422 ----
      smb_SetSMBDataLength(outp, count);
          
      /* now copy the data into the response packet */
!     memcpy(op, iop->ioctl.outCopied + iop->ioctl.outAllocp, count);
  
      /* and adjust the counters */
!     iop->ioctl.outCopied += count;
  
      /* and cleanup things */
      cm_ReleaseUser(userp);
***************
*** 415,479 ****
  }	
  
  /* called from Read Raw to handle IOCTL descriptor reads */
! long smb_IoctlReadRaw(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp,
! 		      smb_packet_t *outp
! #ifdef DJGPP
! 		      , dos_ptr rawBuf
! #endif /* DJGPP */
! 		      )
  {
      smb_ioctl_t *iop;
      long leftToCopy;
      NCB *ncbp;
!     long code;
      cm_user_t *userp;
! #ifdef DJGPP
!     dos_ptr dos_ncb;
! 
!     if (rawBuf == 0)
!     {
! 	osi_Log0(afsd_logp, "Failed to get raw buf for smb_IoctlReadRaw");
! 	return -1;
!     }
! #endif /* DJGPP */
  
      iop = fidp->ioctlp;
  
      userp = smb_GetUserFromVCP(vcp, inp);
  
      /* Log the user */
!     {
! 	smb_user_t *uidp;
! 
! 	uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
! 	if (uidp && uidp->unp) {
! 	    osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s",
! 		     uidp->userID, userp,
! 		     osi_LogSaveString(afsd_logp, uidp->unp->name));
! 	} else if (uidp) {
! 	    osi_Log2(afsd_logp, "Ioctl uid %d user %x no name",
! 		     uidp->userID, userp);
! 	} else {
! 	    osi_Log1(afsd_logp, "Ioctl no uid user %x no name",
! 		     userp);
! 	}
! 	if (uidp) 
! 	    smb_ReleaseUID(uidp);
!     }	
  
      code = smb_LookupTIDPath(vcp, ((smb_t *)inp)->tid, &iop->tidPathp);
      if (code) {
!         cm_ReleaseUser(userp);
!         return CM_ERROR_NOSUCHPATH;
      }
  
      code = smb_IoctlPrepareRead(fidp, iop, userp);
      if (code) {
! 	cm_ReleaseUser(userp);
! 	return code;
      }
  
!     leftToCopy = (long)((iop->outDatap - iop->outAllocp) - iop->outCopied);
  
      ncbp = outp->ncbp;
      memset((char *)ncbp, 0, sizeof(NCB));
--- 425,473 ----
  }	
  
  /* called from Read Raw to handle IOCTL descriptor reads */
! afs_int32
! smb_IoctlReadRaw(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp,
!                  smb_packet_t *outp)
  {
      smb_ioctl_t *iop;
      long leftToCopy;
      NCB *ncbp;
!     afs_int32 code;
      cm_user_t *userp;
!     smb_user_t *uidp;
  
      iop = fidp->ioctlp;
  
      userp = smb_GetUserFromVCP(vcp, inp);
  
      /* Log the user */
!     uidp = smb_FindUID(vcp, ((smb_t *)inp)->uid, 0);
!     if (uidp && uidp->unp) {
!         osi_Log3(afsd_logp, "Ioctl uid %d user %x name %s",
!                  uidp->userID, userp,
!                  osi_LogSaveClientString(afsd_logp, uidp->unp->name));
!     } else if (uidp) {
!         osi_Log2(afsd_logp, "Ioctl uid %d user %x no name",
!                  uidp->userID, userp);
!     } else {
!         osi_Log1(afsd_logp, "Ioctl no uid user %x no name",
!                   userp);
!     }
!     if (uidp) 
!         smb_ReleaseUID(uidp);
  
      code = smb_LookupTIDPath(vcp, ((smb_t *)inp)->tid, &iop->tidPathp);
      if (code) {
!         code = CM_ERROR_NOSUCHPATH;
!         goto done;
      }
  
      code = smb_IoctlPrepareRead(fidp, iop, userp);
      if (code) {
! 	goto done;
      }
  
!     leftToCopy = (long)((iop->ioctl.outDatap - iop->ioctl.outAllocp) - iop->ioctl.outCopied);
  
      ncbp = outp->ncbp;
      memset((char *)ncbp, 0, sizeof(NCB));
***************
*** 484,503 ****
      /*ncbp->ncb_lana_num = smb_LANadapter;*/
      ncbp->ncb_lana_num = vcp->lana;
  
! #ifndef DJGPP
!     ncbp->ncb_buffer = iop->outCopied + iop->outAllocp;
      code = Netbios(ncbp);
- #else /* DJGPP */
-     dosmemput(iop->outCopied + iop->outAllocp, ncbp->ncb_length, rawBuf);
-     ncbp->ncb_buffer = rawBuf;
-     dos_ncb = ((smb_ncb_t *)ncbp)->dos_ncb;
-     code = Netbios(ncbp, dos_ncb);
- #endif /* !DJGPP */
  
      if (code != 0)
  	osi_Log1(afsd_logp, "ReadRaw send failure code %d", code);
  
      cm_ReleaseUser(userp);
  
      return 0;
  }
--- 478,1839 ----
      /*ncbp->ncb_lana_num = smb_LANadapter;*/
      ncbp->ncb_lana_num = vcp->lana;
  
!     ncbp->ncb_buffer = iop->ioctl.outCopied + iop->ioctl.outAllocp;
      code = Netbios(ncbp);
  
      if (code != 0)
  	osi_Log1(afsd_logp, "ReadRaw send failure code %d", code);
  
+   done:
      cm_ReleaseUser(userp);
  
+     return code;
+ }
+ 
+ /* parse the passed-in file name and do a namei on it.  If we fail,
+  * return an error code, otherwise return the vnode located in *scpp.
+  */
+ #define CM_PARSE_FLAG_LITERAL 1
+ 
+ afs_int32
+ smb_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
+                    cm_scache_t **scpp, afs_uint32 flags)
+ {
+     long code;
+     cm_scache_t  *substRootp = NULL;
+     cm_scache_t  *iscp = NULL;
+     char      *inPath;
+     clientchar_t *relativePath = NULL;
+     clientchar_t *lastComponent = NULL;
+     afs_uint32 follow = (flags & CM_PARSE_FLAG_LITERAL ? CM_FLAG_NOMOUNTCHASE : CM_FLAG_FOLLOW);
+ 
+     inPath = ioctlp->ioctl.inDatap;
+     /* setup the next data value for the caller to use */
+     ioctlp->ioctl.inDatap += (long)strlen(ioctlp->ioctl.inDatap) + 1;
+ 
+     osi_Log1(afsd_logp, "cm_ParseIoctlPath %s", osi_LogSaveString(afsd_logp,inPath));
+ 
+     /* This is usually the file name, but for StatMountPoint it is the path. */
+     /* ioctlp->ioctl.inDatap can be either of the form:
+      *    \path\.
+      *    \path\file
+      *    \\netbios-name\submount\path\.
+      *    \\netbios-name\submount\path\file
+      */
+ 
+     /* We do not perform path name translation on the ioctl path data
+      * because these paths were not translated by Windows through the
+      * file system API.  Therefore, they are not OEM characters but
+      * whatever the display character set is.
+      */
+ 
+     // TranslateExtendedChars(relativePath);
+ 
+     /* This is usually nothing, but for StatMountPoint it is the file name. */
+     // TranslateExtendedChars(ioctlp->ioctl.inDatap);
+ 
+     /* If the string starts with our UTF-8 prefix (which is the
+        sequence [ESC,'%','G'] as used by ISO-2022 to designate UTF-8
+        strings), we assume that the provided path is UTF-8.  Otherwise
+        we have to convert the string to UTF-8, since that is what we
+        want to use everywhere else.*/
+ 
+     if (memcmp(inPath, utf8_prefix, utf8_prefix_size) == 0) {
+         /* String is UTF-8 */
+         inPath += utf8_prefix_size;
+         ioctlp->ioctl.flags |= CM_IOCTLFLAG_USEUTF8;
+ 
+         relativePath = cm_Utf8ToClientStringAlloc(inPath, -1, NULL);
+     } else {
+         int cch;
+ 
+         /* Not a UTF-8 string */
+         /* TODO: If this is an OEM string, we should convert it to
+            UTF-8. */
+         if (smb_StoreAnsiFilenames) {
+             cch = cm_AnsiToClientString(inPath, -1, NULL, 0);
+ #ifdef DEBUG
+             osi_assert(cch > 0);
+ #endif
+             relativePath = malloc(cch * sizeof(clientchar_t));
+             cm_AnsiToClientString(inPath, -1, relativePath, cch);
+         } else {
+             TranslateExtendedChars(inPath);
+ 
+             cch = cm_OemToClientString(inPath, -1, NULL, 0);
+ #ifdef DEBUG
+             osi_assert(cch > 0);
+ #endif
+             relativePath = malloc(cch * sizeof(clientchar_t));
+             cm_OemToClientString(inPath, -1, relativePath, cch);
+         }
+     }
+ 
+     if (relativePath[0] == relativePath[1] &&
+         relativePath[1] == '\\' && 
+         !cm_ClientStrCmpNI(cm_NetbiosNameC, relativePath+2,
+                            cm_ClientStrLen(cm_NetbiosNameC))) 
+     {
+         clientchar_t shareName[256];
+         clientchar_t *sharePath;
+         int shareFound, i;
+ 
+         /* We may have found a UNC path. 
+          * If the first component is the NetbiosName,
+          * then throw out the second component (the submount)
+          * since it had better expand into the value of ioctl->tidPathp
+          */
+         clientchar_t * p;
+         p = relativePath + 2 + cm_ClientStrLen(cm_NetbiosNameC) + 1;			/* buffer overflow vuln.? */
+         if ( !cm_ClientStrCmpNI(_C("all"),  p,  3) )
+             p += 4;
+ 
+         for (i = 0; *p && *p != '\\'; i++,p++ ) {
+             shareName[i] = *p;
+         }
+         p++;                    /* skip past trailing slash */
+         shareName[i] = 0;       /* terminate string */
+ 
+         shareFound = smb_FindShare(ioctlp->fidp->vcp, ioctlp->uidp, shareName, &sharePath);
+         if ( shareFound ) {
+             /* we found a sharename, therefore use the resulting path */
+             code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->wdata,
+                             CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                             userp, sharePath, reqp, &substRootp);
+             free(sharePath);
+             if (code) {
+ 		osi_Log1(afsd_logp,"cm_ParseIoctlPath [1] code 0x%x", code);
+                 if (relativePath)
+                     free(relativePath);
+                 return code;
+ 	    }
+ 
+ 	    lastComponent = cm_ClientStrRChr(p,  '\\');
+ 	    if (lastComponent && (lastComponent - p) > 1 &&
+                 cm_ClientStrLen(lastComponent) > 1) {
+ 		*lastComponent = '\0';
+ 		lastComponent++;
+ 
+ 		code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                                 userp, NULL, reqp, &iscp);
+ 		if (code == 0)
+ 		    code = cm_NameI(iscp, lastComponent, CM_FLAG_CASEFOLD | follow,
+ 				    userp, NULL, reqp, scpp);
+ 		if (iscp)
+ 		    cm_ReleaseSCache(iscp);
+ 	    } else {
+ 		code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD,
+ 				userp, NULL, reqp, scpp);
+ 	    }
+ 	    cm_ReleaseSCache(substRootp);
+             if (code) {
+ 		osi_Log1(afsd_logp,"cm_ParseIoctlPath [2] code 0x%x", code);
+                 if (relativePath)
+                     free(relativePath);
+                 return code;
+ 	    }
+         } else {
+             /* otherwise, treat the name as a cellname mounted off the afs root.
+              * This requires that we reconstruct the shareName string with 
+              * leading and trailing slashes.
+              */
+             p = relativePath + 2 + cm_ClientStrLen(cm_NetbiosNameC) + 1;
+             if ( !cm_ClientStrCmpNI(_C("all"),  p,  3) )
+                 p += 4;
+ 
+             shareName[0] = '/';
+             for (i = 1; *p && *p != '\\'; i++,p++ ) {
+                 shareName[i] = *p;
+             }
+             p++;                    /* skip past trailing slash */
+             shareName[i++] = '/';	/* add trailing slash */
+             shareName[i] = 0;       /* terminate string */
+ 
+ 
+             code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->wdata,
+                             CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                             userp, shareName, reqp, &substRootp);
+             if (code) {
+ 		osi_Log1(afsd_logp,"cm_ParseIoctlPath [3] code 0x%x", code);
+                 if (relativePath)
+                     free(relativePath);
+                 return code;
+ 	    }
+ 
+ 	    lastComponent = cm_ClientStrRChr(p,  '\\');
+ 	    if (lastComponent && (lastComponent - p) > 1 &&
+                 cm_ClientStrLen(lastComponent) > 1) {
+ 		*lastComponent = '\0';
+ 		lastComponent++;
+ 
+ 		code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                                 userp, NULL, reqp, &iscp);
+ 		if (code == 0)
+ 		    code = cm_NameI(iscp, lastComponent, CM_FLAG_CASEFOLD | follow,
+ 				    userp, NULL, reqp, scpp);
+ 		if (iscp)
+ 		    cm_ReleaseSCache(iscp);
+ 	    } else {
+ 		code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD,
+ 				userp, NULL, reqp, scpp);
+ 	    }
+ 
+ 	    if (code) {
+ 		cm_ReleaseSCache(substRootp);
+ 		osi_Log1(afsd_logp,"cm_ParseIoctlPath code [4] 0x%x", code);
+                 if (relativePath)
+                     free(relativePath);
+                 return code;
+ 	    }
+         }
+     } else {
+         code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->wdata,
+                          CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                          userp, ioctlp->tidPathp, reqp, &substRootp);
+         if (code) {
+ 	    osi_Log1(afsd_logp,"cm_ParseIoctlPath [6] code 0x%x", code);
+             if (relativePath)
+                 free(relativePath);
+             return code;
+ 	}
+         
+ 	lastComponent = cm_ClientStrRChr(relativePath,  '\\');
+ 	if (lastComponent && (lastComponent - relativePath) > 1 &&
+             cm_ClientStrLen(lastComponent) > 1) {
+ 	    *lastComponent = '\0';
+ 	    lastComponent++;
+ 
+ 	    code = cm_NameI(substRootp, relativePath, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                             userp, NULL, reqp, &iscp);
+ 	    if (code == 0)
+ 		code = cm_NameI(iscp, lastComponent, CM_FLAG_CASEFOLD | follow,
+                                 userp, NULL, reqp, scpp);
+ 	    if (iscp)
+ 		cm_ReleaseSCache(iscp);
+ 	} else {
+ 	    code = cm_NameI(substRootp, relativePath, CM_FLAG_CASEFOLD | follow,
+                             userp, NULL, reqp, scpp);
+ 	}
+         if (code) {
+ 	    cm_ReleaseSCache(substRootp);
+ 	    osi_Log1(afsd_logp,"cm_ParseIoctlPath [7] code 0x%x", code);
+             if (relativePath)
+                 free(relativePath);
+             return code;
+ 	}
+     }
+ 
+     if (substRootp)
+ 	cm_ReleaseSCache(substRootp);
+ 
+     /* and return success */
+     osi_Log1(afsd_logp,"cm_ParseIoctlPath [8] code 0x%x", code);
+ 
+     if (relativePath)
+         free(relativePath);
+     return 0;
+ }
+ 
+ 
+ 
+ #define LEAF_SIZE 256
+ /* parse the passed-in file name and do a namei on its parent.  If we fail,
+  * return an error code, otherwise return the vnode located in *scpp.
+  */
+ afs_int32
+ smb_ParseIoctlParent(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
+                      cm_scache_t **scpp, clientchar_t *leafp)
+ {
+     long code;
+     clientchar_t tbuffer[1024];
+     clientchar_t *tp, *jp;
+     cm_scache_t *substRootp = NULL;
+     clientchar_t *inpathp = NULL;
+     char *inpathdatap;
+ 
+     inpathdatap = ioctlp->ioctl.inDatap;
+ 
+     /* If the string starts with our UTF-8 prefix (which is the
+        sequence [ESC,'%','G'] as used by ISO-2022 to designate UTF-8
+        strings), we assume that the provided path is UTF-8.  Otherwise
+        we have to convert the string to UTF-8, since that is what we
+        want to use everywhere else.*/
+ 
+     if (memcmp(inpathdatap, utf8_prefix, utf8_prefix_size) == 0) {
+ 
+         /* String is UTF-8 */
+         inpathdatap += utf8_prefix_size;
+         ioctlp->ioctl.flags |= CM_IOCTLFLAG_USEUTF8;
+ 
+         inpathp = cm_Utf8ToClientStringAlloc(inpathdatap, -1, NULL);
+     } else {
+         int cch;
+ 
+         /* Not a UTF-8 string */
+         /* TODO: If this is an OEM string, we should convert it to
+            UTF-8. */
+         if (smb_StoreAnsiFilenames) {
+             cch = cm_AnsiToClientString(inpathdatap, -1, NULL, 0);
+ #ifdef DEBUG
+             osi_assert(cch > 0);
+ #endif
+             inpathp = malloc(cch * sizeof(clientchar_t));
+             cm_AnsiToClientString(inpathdatap, -1, inpathp, cch);
+         } else {
+             TranslateExtendedChars(inpathdatap);
+ 
+             cch = cm_OemToClientString(inpathdatap, -1, NULL, 0);
+ #ifdef DEBUG
+             osi_assert(cch > 0);
+ #endif
+             inpathp = malloc(cch * sizeof(clientchar_t));
+             cm_OemToClientString(inpathdatap, -1, inpathp, cch);
+         }
+     }
+ 
+     cm_ClientStrCpy(tbuffer, lengthof(tbuffer), inpathp);
+     tp = cm_ClientStrRChr(tbuffer, '\\');
+     jp = cm_ClientStrRChr(tbuffer, '/');
+     if (!tp)
+         tp = jp;
+     else if (jp && (tp - tbuffer) < (jp - tbuffer))
+         tp = jp;
+     if (!tp) {
+         cm_ClientStrCpy(tbuffer, lengthof(tbuffer), _C("\\"));
+         if (leafp)
+             cm_ClientStrCpy(leafp, LEAF_SIZE, inpathp);
+     }
+     else {
+         *tp = 0;
+         if (leafp) 
+             cm_ClientStrCpy(leafp, LEAF_SIZE, tp+1);
+     }
+ 
+     free(inpathp);
+     inpathp = NULL;             /* We don't need this from this point on */
+ 
+     if (tbuffer[0] == tbuffer[1] &&
+         tbuffer[1] == '\\' && 
+         !cm_ClientStrCmpNI(cm_NetbiosNameC, tbuffer+2,
+                            cm_ClientStrLen(cm_NetbiosNameC))) 
+     {
+         clientchar_t shareName[256];
+         clientchar_t *sharePath;
+         int shareFound, i;
+ 
+         /* We may have found a UNC path. 
+          * If the first component is the NetbiosName,
+          * then throw out the second component (the submount)
+          * since it had better expand into the value of ioctl->tidPathp
+          */
+         clientchar_t * p;
+         p = tbuffer + 2 + cm_ClientStrLen(cm_NetbiosNameC) + 1;
+         if ( !cm_ClientStrCmpNI(_C("all"),  p,  3) )
+             p += 4;
+ 
+         for (i = 0; *p && *p != '\\'; i++,p++ ) {
+             shareName[i] = *p;
+         }
+         p++;                    /* skip past trailing slash */
+         shareName[i] = 0;       /* terminate string */
+ 
+         shareFound = smb_FindShare(ioctlp->fidp->vcp, ioctlp->uidp, shareName, &sharePath);
+         if ( shareFound ) {
+             /* we found a sharename, therefore use the resulting path */
+             code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->wdata,
+                             CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                             userp, sharePath, reqp, &substRootp);
+             free(sharePath);
+             if (code) return code;
+ 
+             code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                             userp, NULL, reqp, scpp);
+ 	    cm_ReleaseSCache(substRootp);
+             if (code) return code;
+         } else {
+             /* otherwise, treat the name as a cellname mounted off the afs root.
+              * This requires that we reconstruct the shareName string with 
+              * leading and trailing slashes.
+              */
+             p = tbuffer + 2 + cm_ClientStrLen(cm_NetbiosNameC) + 1;
+             if ( !cm_ClientStrCmpNI(_C("all"),  p,  3) )
+                 p += 4;
+ 
+             shareName[0] = '/';
+             for (i = 1; *p && *p != '\\'; i++,p++ ) {
+                 shareName[i] = *p;
+             }
+             p++;                    /* skip past trailing slash */
+             shareName[i++] = '/';	/* add trailing slash */
+             shareName[i] = 0;       /* terminate string */
+ 
+             code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->wdata,
+                             CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                             userp, shareName, reqp, &substRootp);
+             if (code) return code;
+ 
+             code = cm_NameI(substRootp, p, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                             userp, NULL, reqp, scpp);
+ 	    cm_ReleaseSCache(substRootp);
+             if (code) return code;
+         }
+     } else {
+         code = cm_NameI(cm_data.rootSCachep, ioctlp->prefix->wdata,
+                         CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                         userp, ioctlp->tidPathp, reqp, &substRootp);
+         if (code) return code;
+ 
+         code = cm_NameI(substRootp, tbuffer, CM_FLAG_CASEFOLD | CM_FLAG_FOLLOW,
+                         userp, NULL, reqp, scpp);
+ 	cm_ReleaseSCache(substRootp);
+         if (code) return code;
+     }
+ 
+     /* # of bytes of path */
+     code = (long)strlen(ioctlp->ioctl.inDatap) + 1;
+     ioctlp->ioctl.inDatap += code;
+ 
+     /* and return success */
      return 0;
  }
+ 
+ afs_int32 
+ smb_IoctlSetToken(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     char *saveDataPtr;
+     char *tp;
+     int ticketLen;
+     char *ticket;
+     int ctSize;
+     struct ClearToken ct;
+     cm_cell_t *cellp;
+     cm_ucell_t *ucellp;
+     afs_uuid_t uuid;
+     int flags;
+     char sessionKey[8];
+     int release_userp = 0;
+     clientchar_t *uname = NULL;
+     clientchar_t *smbname = NULL;
+     clientchar_t *wdir = NULL;
+     afs_int32 code = 0;
+ 
+     saveDataPtr = ioctlp->ioctl.inDatap;
+ 
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     tp = ioctlp->ioctl.inDatap;
+ 
+     /* ticket length */
+     memcpy(&ticketLen, tp, sizeof(ticketLen));
+     tp += sizeof(ticketLen);
+     if (ticketLen < MINKTCTICKETLEN || ticketLen > MAXKTCTICKETLEN)
+         return CM_ERROR_INVAL;
+ 
+     /* remember ticket and skip over it for now */
+     ticket = tp;
+     tp += ticketLen;
+ 
+     /* clear token size */
+     memcpy(&ctSize, tp, sizeof(ctSize));
+     tp += sizeof(ctSize);
+     if (ctSize != sizeof(struct ClearToken))
+         return CM_ERROR_INVAL;
+ 
+     /* clear token */
+     memcpy(&ct, tp, ctSize);
+     tp += ctSize;
+     if (ct.AuthHandle == -1)
+         ct.AuthHandle = 999;	/* more rxvab compat stuff */
+ 
+     /* more stuff, if any */
+     if (ioctlp->ioctl.inCopied > tp - saveDataPtr) {
+         /* flags:  logon flag */
+         memcpy(&flags, tp, sizeof(int));
+         tp += sizeof(int);
+ 
+         /* cell name */
+         {
+             fschar_t * cellnamep;
+             clientchar_t * temp;
+ 
+             temp = cm_ParseIoctlStringAlloc(&ioctlp->ioctl, tp);
+             cellnamep = cm_ClientStringToFsStringAlloc(temp, -1, NULL);
+             cellp = cm_GetCell(cellnamep, CM_FLAG_CREATE | CM_FLAG_NOPROBE);
+             free(cellnamep);
+             free(temp);
+         }
+ 
+         if (!cellp) {
+             code = CM_ERROR_NOSUCHCELL;
+             goto done;
+         }
+         tp += strlen(tp) + 1;
+ 
+         /* user name */
+         uname = cm_ParseIoctlStringAlloc(&ioctlp->ioctl, tp);
+         tp += strlen(tp) + 1;
+ 
+         if (flags & PIOCTL_LOGON) {
+             /* SMB user name with which to associate tokens */
+             smbname = cm_ParseIoctlStringAlloc(&ioctlp->ioctl, tp);
+             osi_Log2(smb_logp,"cm_IoctlSetToken for user [%S] smbname [%S]",
+                      osi_LogSaveClientString(smb_logp,uname),
+                      osi_LogSaveClientString(smb_logp,smbname));
+             fprintf(stderr, "SMB name = %S\n", smbname);
+             tp += strlen(tp) + 1;
+         } else {
+             osi_Log1(smb_logp,"cm_IoctlSetToken for user [%S]",
+                      osi_LogSaveClientString(smb_logp, uname));
+         }
+ 
+         /* uuid */
+         memcpy(&uuid, tp, sizeof(uuid));
+         if (!cm_FindTokenEvent(uuid, sessionKey)) {
+             code = CM_ERROR_INVAL;
+             goto done;
+         }
+     } else {
+         cellp = cm_data.rootCellp;
+         osi_Log0(smb_logp,"cm_IoctlSetToken - no name specified");
+     }
+ 
+     if (flags & PIOCTL_LOGON) {
+         userp = smb_FindCMUserByName(smbname, ioctlp->fidp->vcp->rname,
+ 				     SMB_FLAG_CREATE|SMB_FLAG_AFSLOGON);
+ 	release_userp = 1;
+     }
+ 
+     /* store the token */
+     lock_ObtainMutex(&userp->mx);
+     ucellp = cm_GetUCell(userp, cellp);
+     osi_Log1(smb_logp,"cm_IoctlSetToken ucellp %lx", ucellp);
+     ucellp->ticketLen = ticketLen;
+     if (ucellp->ticketp)
+         free(ucellp->ticketp);	/* Discard old token if any */
+     ucellp->ticketp = malloc(ticketLen);
+     memcpy(ucellp->ticketp, ticket, ticketLen);
+     /*
+      * Get the session key from the RPC, rather than from the pioctl.
+      */
+     /*
+     memcpy(&ucellp->sessionKey, ct.HandShakeKey, sizeof(ct.HandShakeKey));
+     */
+     memcpy(ucellp->sessionKey.data, sessionKey, sizeof(sessionKey));
+     ucellp->kvno = ct.AuthHandle;
+     ucellp->expirationTime = ct.EndTimestamp;
+     ucellp->gen++;
+ #ifdef QUERY_AFSID
+     ucellp->uid = ANONYMOUSID;
+ #endif
+     if (uname) {
+         cm_ClientStringToFsString(uname, -1, ucellp->userName, MAXKTCNAMELEN);
+ #ifdef QUERY_AFSID
+ 	cm_UsernameToId(uname, ucellp, &ucellp->uid);
+ #endif
+     }
+     ucellp->flags |= CM_UCELLFLAG_RXKAD;
+     lock_ReleaseMutex(&userp->mx);
+ 
+     if (flags & PIOCTL_LOGON) {
+         ioctlp->ioctl.flags |= CM_IOCTLFLAG_LOGON;
+     }
+ 
+     cm_ResetACLCache(userp);
+ 
+   done:
+     if (release_userp)
+ 	cm_ReleaseUser(userp);
+ 
+     if (uname)
+         free(uname);
+ 
+     if (smbname)
+         free(smbname);
+ 
+     return code;
+ }
+ 
+ 
+ 
+ afs_int32
+ smb_IoctlGetSMBName(smb_ioctl_t *ioctlp, cm_user_t *userp)
+ {
+     smb_user_t *uidp = ioctlp->uidp;
+ 
+     if (uidp && uidp->unp) {
+         int cch;
+ 
+         cch = cm_ClientStringToUtf8(uidp->unp->name,
+                                     cm_ClientStrLen(uidp->unp->name),
+ 
+                                     ioctlp->ioctl.outDatap,
+                                     (SMB_IOCTL_MAXDATA -
+                                      (ioctlp->ioctl.outDatap - ioctlp->ioctl.outAllocp))
+                                     / sizeof(cm_utf8char_t));
+ 
+         ioctlp->ioctl.outDatap += cch * sizeof(cm_utf8char_t);
+     }
+ 
+     return 0;
+ }
+ 
+ afs_int32 
+ smb_IoctlGetACL(smb_ioctl_t *ioctlp, cm_user_t *userp)
+ {
+     cm_scache_t *scp;
+     afs_int32 code;
+     cm_req_t req;
+     cm_ioctlQueryOptions_t *optionsp;
+     afs_uint32 flags = 0;
+ 
+     cm_InitReq(&req);
+ 
+     optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
+         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
+ 
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
+         cm_fid_t fid;
+         cm_SkipIoctlPath(&ioctlp->ioctl);
+         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
+                   optionsp->fid.vnode, optionsp->fid.unique);
+         code = cm_GetSCache(&fid, &scp, userp, &req);
+     } else {
+         code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+     }
+     if (code) 
+         return code;
+ 
+     code = cm_IoctlGetACL(&ioctlp->ioctl, userp, scp, &req);
+ 
+     cm_ReleaseSCache(scp);
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlSetACL(smb_ioctl_t *ioctlp, cm_user_t *userp)
+ {
+     cm_scache_t *scp;
+     afs_int32 code;
+     cm_req_t req;
+     cm_ioctlQueryOptions_t *optionsp;
+     afs_uint32 flags = 0;
+ 
+     cm_InitReq(&req);
+ 
+     optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
+         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
+ 
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
+         cm_fid_t fid;
+         cm_SkipIoctlPath(&ioctlp->ioctl);
+         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
+                   optionsp->fid.vnode, optionsp->fid.unique);
+         code = cm_GetSCache(&fid, &scp, userp, &req);
+     } else {
+         code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+     }
+     if (code) 
+         return code;
+ 
+     code = cm_IoctlSetACL(&ioctlp->ioctl, userp, scp, &req);
+ 
+     cm_ReleaseSCache(scp);
+     return code;
+ }
+ 
+ afs_int32
+ smb_IoctlGetFileCellName(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *scp;
+     cm_req_t req;
+     cm_ioctlQueryOptions_t *optionsp;
+     afs_uint32 flags = 0;
+ 
+     cm_InitReq(&req);
+ 
+     optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
+         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
+ 
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
+         cm_fid_t fid;
+         cm_SkipIoctlPath(&ioctlp->ioctl);
+         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
+                   optionsp->fid.vnode, optionsp->fid.unique);
+         code = cm_GetSCache(&fid, &scp, userp, &req);
+     } else {
+         code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+     }
+     if (code) 
+         return code;
+ 
+     code = cm_IoctlGetFileCellName(&ioctlp->ioctl, userp, scp, &req);
+ 
+     cm_ReleaseSCache(scp);
+ 
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlFlushAllVolumes(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_req_t req;
+ 
+     cm_InitReq(&req);
+ 
+     cm_SkipIoctlPath(&ioctlp->ioctl);	/* we don't care about the path */
+ 
+     return cm_IoctlFlushAllVolumes(&ioctlp->ioctl, userp, &req);
+ }
+ 
+ afs_int32 
+ smb_IoctlFlushVolume(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *scp;
+     cm_req_t req;
+     cm_ioctlQueryOptions_t *optionsp;
+     afs_uint32 flags = 0;
+ 
+     cm_InitReq(&req);
+ 
+     optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
+         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
+ 
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
+         cm_fid_t fid;
+         cm_SkipIoctlPath(&ioctlp->ioctl);
+         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
+                   optionsp->fid.vnode, optionsp->fid.unique);
+         code = cm_GetSCache(&fid, &scp, userp, &req);
+     } else {
+         code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+     }
+     if (code) 
+         return code;
+ 
+     code = cm_IoctlFlushVolume(&ioctlp->ioctl, userp, scp, &req);
+ 
+     cm_ReleaseSCache(scp);
+ 
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlFlushFile(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *scp;
+     cm_req_t req;
+     cm_ioctlQueryOptions_t *optionsp;
+     afs_uint32 flags = 0;
+ 
+     cm_InitReq(&req);
+ 
+     optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
+         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
+ 
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
+         cm_fid_t fid;
+         cm_SkipIoctlPath(&ioctlp->ioctl);
+ 	cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
+                   optionsp->fid.vnode, optionsp->fid.unique);
+         code = cm_GetSCache(&fid, &scp, userp, &req);
+     } else {
+         code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+     }
+     if (code) 
+         return code;
+ 
+     code = cm_IoctlFlushFile(&ioctlp->ioctl, userp, scp, &req);
+ 
+     cm_ReleaseSCache(scp);
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlSetVolumeStatus(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *scp;
+     cm_req_t req;
+ 
+     cm_InitReq(&req);
+ 
+     code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, 0);
+     if (code) return code;
+ 
+     code = cm_IoctlSetVolumeStatus(&ioctlp->ioctl, userp, scp, &req);
+     cm_ReleaseSCache(scp);
+ 
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlGetVolumeStatus(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *scp;
+     cm_ioctlQueryOptions_t *optionsp;
+     afs_uint32 flags = 0;
+     cm_req_t req;
+ 
+     cm_InitReq(&req);
+ 
+     optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
+         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
+ 
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
+         cm_fid_t fid;
+         cm_SkipIoctlPath(&ioctlp->ioctl);
+         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
+                   optionsp->fid.vnode, optionsp->fid.unique);
+         code = cm_GetSCache(&fid, &scp, userp, &req);
+     } else {
+         code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+     }
+     if (code) 
+         return code;
+ 
+     code = cm_IoctlGetVolumeStatus(&ioctlp->ioctl, userp, scp, &req);
+ 
+     cm_ReleaseSCache(scp);
+ 
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlGetFid(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *scp;
+     cm_req_t req;
+     cm_ioctlQueryOptions_t * optionsp;
+     afs_uint32 flags = 0;
+ 
+     cm_InitReq(&req);
+ 
+     optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
+         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
+ 
+     code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+     if (code) 
+         return code;
+ 
+     code = cm_IoctlGetFid(&ioctlp->ioctl, userp, scp, &req);
+ 
+     cm_ReleaseSCache(scp);
+ 
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlGetFileType(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *scp;
+     cm_req_t req;
+     cm_ioctlQueryOptions_t * optionsp;
+     afs_uint32 flags = 0;
+ 
+     cm_InitReq(&req);
+ 
+     optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
+         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
+ 
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
+         cm_fid_t fid;
+         cm_SkipIoctlPath(&ioctlp->ioctl);
+         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
+                   optionsp->fid.vnode, optionsp->fid.unique);
+         code = cm_GetSCache(&fid, &scp, userp, &req);
+     } else {
+         code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+     }
+     if (code) 
+         return code;
+ 
+     code = cm_IoctlGetFileType(&ioctlp->ioctl, userp, scp, &req);
+ 
+     cm_ReleaseSCache(scp);
+ 
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlGetOwner(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *scp;
+     cm_req_t req;
+     cm_ioctlQueryOptions_t *optionsp;
+     afs_uint32 flags = 0;
+ 
+     cm_InitReq(&req);
+ 
+     optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
+         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
+ 
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
+         cm_fid_t fid;
+         cm_SkipIoctlPath(&ioctlp->ioctl);
+         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
+                   optionsp->fid.vnode, optionsp->fid.unique);
+         code = cm_GetSCache(&fid, &scp, userp, &req);
+     } else {
+         code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+     }
+     if (code) 
+         return code;
+ 
+     code = cm_IoctlGetOwner(&ioctlp->ioctl, userp, scp, &req);
+ 
+     cm_ReleaseSCache(scp);
+ 
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlWhereIs(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *scp;
+     cm_req_t req;
+     cm_ioctlQueryOptions_t *optionsp;
+     afs_uint32 flags = 0;
+ 
+     cm_InitReq(&req);
+ 
+     optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
+         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
+ 
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
+         cm_fid_t fid;
+         cm_SkipIoctlPath(&ioctlp->ioctl);
+         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
+                   optionsp->fid.vnode, optionsp->fid.unique);
+         code = cm_GetSCache(&fid, &scp, userp, &req);
+     } else {
+         code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+     }
+     if (code) 
+         return code;
+ 
+     code = cm_IoctlWhereIs(&ioctlp->ioctl, userp, scp, &req);
+ 
+     cm_ReleaseSCache(scp);
+ 
+     return code;
+ }
+ 
+ 
+ afs_int32 
+ smb_IoctlStatMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *dscp;
+     cm_req_t req;
+ 
+     cm_InitReq(&req);
+ 
+     code = smb_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
+     if (code)
+         return code;
+ 
+     code = cm_IoctlStatMountPoint(&ioctlp->ioctl, userp, dscp, &req);
+ 
+     cm_ReleaseSCache(dscp);
+ 
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlDeleteMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *dscp;
+     cm_req_t req;
+ 
+     cm_InitReq(&req);
+ 
+     code = smb_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
+     if (code) 
+         return code;
+ 
+     code = cm_IoctlDeleteMountPoint(&ioctlp->ioctl, userp, dscp, &req);
+ 
+     cm_ReleaseSCache(dscp);
+ 
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlCheckServers(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);	/* we don't care about the path */
+ 
+     return cm_IoctlCheckServers(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32 
+ smb_IoctlGag(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     /* we don't print anything superfluous, so we don't support the gag call */
+     return CM_ERROR_INVAL;
+ }
+ 
+ afs_int32 
+ smb_IoctlCheckVolumes(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlCheckVolumes(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32 smb_IoctlSetCacheSize(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlSetCacheSize(&ioctlp->ioctl, userp);
+ }
+ 
+ 
+ afs_int32 
+ smb_IoctlTraceControl(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+        
+     return cm_IoctlTraceControl(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32 
+ smb_IoctlGetCacheParms(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+        
+     return cm_IoctlGetCacheParms(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32 
+ smb_IoctlGetCell(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlGetCell(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32 
+ smb_IoctlNewCell(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlNewCell(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32 
+ smb_IoctlGetWsCell(smb_ioctl_t *ioctlp, cm_user_t *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlGetWsCell(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32 
+ smb_IoctlSysName(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlSysName(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32 
+ smb_IoctlGetCellStatus(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlGetCellStatus(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32 
+ smb_IoctlSetCellStatus(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlSetCellStatus(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32
+ smb_IoctlSetSPrefs(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlSetSPrefs(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32
+ smb_IoctlGetSPrefs(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlGetSPrefs(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32
+ smb_IoctlStoreBehind(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     /* we ignore default asynchrony since we only have one way
+      * of doing this today.
+      */
+     return 0;
+ }       
+ 
+ afs_int32
+ smb_IoctlCreateMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *dscp;
+     clientchar_t leaf[LEAF_SIZE];
+     cm_req_t req;
+ 
+     cm_InitReq(&req);
+         
+     code = smb_ParseIoctlParent(ioctlp, userp, &req, &dscp, leaf);
+     if (code)
+         return code;
+ 
+     code = cm_IoctlCreateMountPoint(&ioctlp->ioctl, userp, dscp, &req, leaf);
+ 
+     cm_ReleaseSCache(dscp);
+     return code;
+ }
+ 
+ afs_int32
+ smb_IoctlSymlink(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *dscp;
+     clientchar_t leaf[LEAF_SIZE];
+     cm_req_t req;
+ 
+     cm_InitReq(&req);
+ 
+     code = smb_ParseIoctlParent(ioctlp, userp, &req, &dscp, leaf);
+     if (code) return code;
+ 
+     code = cm_IoctlSymlink(&ioctlp->ioctl, userp, dscp, &req, leaf);
+ 
+     cm_ReleaseSCache(dscp);
+ 
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlListlink(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *dscp;
+     cm_req_t req;
+ 
+     cm_InitReq(&req);
+ 
+     code = smb_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
+     if (code) return code;
+ 
+     code = cm_IoctlListlink(&ioctlp->ioctl, userp, dscp, &req);
+ 
+     cm_ReleaseSCache(dscp);
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlIslink(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {/*CHECK FOR VALID SYMLINK*/
+     afs_int32 code;
+     cm_scache_t *dscp;
+     cm_req_t req;
+ 
+     cm_InitReq(&req);
+ 
+     code = smb_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
+     if (code) return code;
+ 
+     code = cm_IoctlIslink(&ioctlp->ioctl, userp, dscp, &req);
+ 
+     cm_ReleaseSCache(dscp);
+ 
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlDeletelink(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *dscp;
+     cm_req_t req;
+ 
+     cm_InitReq(&req);
+ 
+     code = smb_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
+     if (code) return code;
+ 
+     code = cm_IoctlDeletelink(&ioctlp->ioctl, userp, dscp, &req);
+ 
+     cm_ReleaseSCache(dscp);
+ 
+     return code;
+ }
+ 
+ afs_int32 
+ smb_IoctlGetTokenIter(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlGetTokenIter(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32
+ smb_IoctlGetToken(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlGetToken(&ioctlp->ioctl, userp);
+ }
+ 
+ 
+ afs_int32
+ smb_IoctlDelToken(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlDelToken(&ioctlp->ioctl, userp);
+ }
+ 
+ 
+ afs_int32
+ smb_IoctlDelAllToken(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlDelAllToken(&ioctlp->ioctl, userp);
+ }
+ 
+ 
+ afs_int32
+ smb_IoctlMakeSubmount(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlMakeSubmount(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32
+ smb_IoctlGetRxkcrypt(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlGetRxkcrypt(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32
+ smb_IoctlSetRxkcrypt(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlSetRxkcrypt(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32
+ smb_IoctlRxStatProcess(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlRxStatProcess(&ioctlp->ioctl, userp);
+ }
+ 
+ 
+ afs_int32
+ smb_IoctlRxStatPeer(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlRxStatPeer(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32
+ smb_IoctlUnicodeControl(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlUnicodeControl(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32
+ smb_IoctlUUIDControl(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlUUIDControl(&ioctlp->ioctl, userp);
+ }
+ 
+ 
+ afs_int32
+ smb_IoctlMemoryDump(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlMemoryDump(&ioctlp->ioctl, userp);
+ }
+ 
+ afs_int32
+ smb_IoctlPathAvailability(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     afs_int32 code;
+     cm_scache_t *scp;
+     cm_req_t req;
+     cm_ioctlQueryOptions_t *optionsp;
+     afs_uint32 flags = 0;
+ 
+     cm_InitReq(&req);
+ 
+     optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
+         flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
+ 
+     if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
+         cm_fid_t fid;
+         cm_SkipIoctlPath(&ioctlp->ioctl);
+         cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume, 
+                   optionsp->fid.vnode, optionsp->fid.unique);
+         code = cm_GetSCache(&fid, &scp, userp, &req);
+     } else {
+         code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+     }
+     if (code) 
+         return code;
+ 
+     code = cm_IoctlPathAvailability(&ioctlp->ioctl, userp, scp, &req);
+     cm_ReleaseSCache(scp);
+     return code;
+ }
+ 
+ afs_int32
+ smb_IoctlVolStatTest(struct smb_ioctl *ioctlp, struct cm_user *userp)
+ {
+     cm_req_t req;
+ 
+     cm_InitReq(&req);
+ 
+     cm_SkipIoctlPath(&ioctlp->ioctl);
+ 
+     return cm_IoctlVolStatTest(&ioctlp->ioctl, userp, &req);
+ }
Index: openafs/src/WINNT/afsd/smb_ioctl.h
diff -c openafs/src/WINNT/afsd/smb_ioctl.h:1.4.14.3 openafs/src/WINNT/afsd/smb_ioctl.h:1.4.14.5
*** openafs/src/WINNT/afsd/smb_ioctl.h:1.4.14.3	Sun Jun 10 13:00:07 2007
--- openafs/src/WINNT/afsd/smb_ioctl.h	Thu Jun 26 12:38:31 2008
***************
*** 10,47 ****
  #ifndef __SMB_IOCTL_H_ENV__
  #define __SMB_IOCTL_H_ENV__ 1
  
  /* magic file name for ioctl opens */
! #define SMB_IOCTL_FILENAME	"\\_._AFS_IOCTL_._"	/* double backslashes for C compiler */
! #define SMB_IOCTL_FILENAME_NOSLASH "_._AFS_IOCTL_._"
  
  /* max parms for ioctl, in either direction */
! #define SMB_IOCTL_MAXDATA	8192*2
  
! #define SMB_IOCTL_MAXPROCS	64			/* max # of calls */
  
  /* procedure implementing an ioctl */
  typedef long (smb_ioctlProc_t)(smb_ioctl_t *, struct cm_user *userp);
  
! extern void smb_InitIoctl(void);
  
! extern void smb_SetupIoctlFid(smb_fid_t *fidp, cm_space_t *prefix);
  
! extern long smb_IoctlRead(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
  
! extern long smb_IoctlWrite(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
  
! extern long smb_IoctlV3Write(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
  
! extern long smb_IoctlV3Read(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp);
  
! #ifndef DJGPP
! extern long smb_IoctlReadRaw(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp,
! 	smb_packet_t *outp);
! #else /* DJGPP */
! extern long smb_IoctlReadRaw(smb_fid_t *fidp, smb_vc_t *vcp, smb_packet_t *inp,
! 	smb_packet_t *outp, dos_ptr rawBuf);
! #endif /* !DJGPP */
  
! extern long smb_IoctlPrepareRead(smb_fid_t *fidp, smb_ioctl_t *ioctlp, cm_user_t *userp);
  
  #endif /*  __SMB_IOCTL_H_ENV__ */
--- 10,203 ----
  #ifndef __SMB_IOCTL_H_ENV__
  #define __SMB_IOCTL_H_ENV__ 1
  
+ #include <cm_ioctl.h>
+ #include <smb_iocons.h>
+ 
  /* magic file name for ioctl opens */
! #define SMB_IOCTL_FILENAME	   CM_IOCTL_FILENAME
! #define SMB_IOCTL_FILENAME_NOSLASH CM_IOCTL_FILENAME_NOSLASH
  
  /* max parms for ioctl, in either direction */
! #define SMB_IOCTL_MAXDATA	   CM_IOCTL_MAXDATA
! #define SMB_IOCTL_MAXPROCS         CM_IOCTL_MAXPROCS
! 
! struct smb_fid;
! struct smb_user;
! struct smb_vc;
! 
! /* ioctl parameter, while being assembled and/or processed */
! typedef struct smb_ioctl {
!     /* fid pointer */
!     struct smb_fid *fidp;
! 
!     /* uid pointer */
!     struct smb_user *uidp;
! 
!     /* pathname associated with the Tree ID */
!     clientchar_t *tidPathp;
!     
!     /* prefix for subst drives */
!     cm_space_t *prefix;
  
!     cm_ioctl_t  ioctl;
! } smb_ioctl_t;
  
  /* procedure implementing an ioctl */
  typedef long (smb_ioctlProc_t)(smb_ioctl_t *, struct cm_user *userp);
  
! extern void
! smb_InitIoctl(void);
! 
! extern void
! smb_SetupIoctlFid(struct smb_fid *fidp, cm_space_t *prefix);
! 
! extern afs_int32
! smb_IoctlRead(struct smb_fid *fidp, struct smb_vc *vcp,
!               struct smb_packet *inp, struct smb_packet *outp);
! 
! extern afs_int32
! smb_IoctlWrite(struct smb_fid *fidp, struct smb_vc *vcp,
!                struct smb_packet *inp, struct smb_packet *outp);
! 
! extern afs_int32
! smb_IoctlV3Write(struct smb_fid *fidp, struct smb_vc *vcp,
!                  struct smb_packet *inp, struct smb_packet *outp);
! 
! extern afs_int32
! smb_IoctlV3Read(struct smb_fid *fidp, struct smb_vc *vcp,
!                 struct smb_packet *inp, struct smb_packet *outp);
! 
! extern afs_int32
! smb_IoctlReadRaw(struct smb_fid *fidp, struct smb_vc *vcp,
!                  struct smb_packet *inp, struct smb_packet *outp);
! 
! extern afs_int32
! smb_IoctlPrepareRead(struct smb_fid *fidp, smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32
! smb_ParseIoctlPath(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
!                    cm_scache_t **scpp, afs_uint32 flags);
! 
! extern afs_int32
! smb_ParseIoctlParent(smb_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
!                      cm_scache_t **scpp, clientchar_t *leafp);
! 
! extern afs_int32 
! smb_IoctlSetToken(struct smb_ioctl *ioctlp, struct cm_user *userp);
! 
! extern afs_int32
! smb_IoctlGetSMBName(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetACL(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetFileCellName(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlSetACL(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlFlushAllVolumes(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlFlushVolume(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlFlushFile(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlSetVolumeStatus(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetVolumeStatus(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetFid(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetOwner(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlWhereIs(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlStatMountPoint(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlDeleteMountPoint(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlCheckServers(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGag(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlCheckVolumes(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlSetCacheSize(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetCacheParms(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetCell(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlNewCell(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetWsCell(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlSysName(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetCellStatus(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlSetCellStatus(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlSetSPrefs(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetSPrefs(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlStoreBehind(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlCreateMountPoint(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 cm_CleanFile(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
! 
! extern afs_int32 cm_FlushFile(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
! 
! extern afs_int32 cm_FlushVolume(cm_user_t *, cm_req_t *reqp, afs_uint32 cell, afs_uint32 volume);
! 
! extern afs_int32 cm_FlushParent(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
! 
! extern afs_int32 smb_IoctlTraceControl(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlSetToken(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetTokenIter(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetToken(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlDelToken(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlDelAllToken(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlSymlink(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlIslink(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlListlink(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlDeletelink(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlMakeSubmount(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlGetRxkcrypt(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlSetRxkcrypt(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlShutdown(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlFreemountAddCell(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlFreemountRemoveCell(smb_ioctl_t *ioctlp, cm_user_t *userp);
! 
! extern afs_int32 smb_IoctlMemoryDump(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 smb_IoctlRxStatProcess(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 smb_IoctlRxStatPeer(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 smb_IoctlUUIDControl(struct smb_ioctl * ioctlp, struct cm_user *userp);
  
! extern afs_int32 smb_IoctlPathAvailability(struct smb_ioctl * ioctlp, struct cm_user *userp);
  
! extern afs_int32 smb_IoctlGetFileType(smb_ioctl_t *ioctlp, cm_user_t *userp);
  
! extern afs_int32 smb_IoctlVolStatTest(struct smb_ioctl *ioctlp, struct cm_user *userp);
  
! extern afs_int32 smb_IoctlUnicodeControl(struct smb_ioctl *ioctlp, struct cm_user * userp);
  
  #endif /*  __SMB_IOCTL_H_ENV__ */
Index: openafs/src/WINNT/afsd/symlink.c
diff -c openafs/src/WINNT/afsd/symlink.c:1.8.4.5 openafs/src/WINNT/afsd/symlink.c:1.8.4.7
*** openafs/src/WINNT/afsd/symlink.c:1.8.4.5	Fri Feb  8 21:32:20 2008
--- openafs/src/WINNT/afsd/symlink.c	Thu Jun 26 08:45:12 2008
***************
*** 44,49 ****
--- 44,50 ----
  
  void Die();
  
+ #if 0
  foldcmp (a, b)
      register char *a;
      register char *b; {
***************
*** 57,62 ****
--- 58,64 ----
          if (t == 0) return 0;
      }
  }
+ #endif
  
  /* this function returns TRUE (1) if the file is in AFS, otherwise false (0) */
  static int InAFS(register char *apath)
***************
*** 68,74 ****
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl(apath, VIOC_FILE_CELL_NAME, &blob, 1);
      if (code) {
  	if ((errno == EINVAL) || (errno == ENOENT)) 
              return 0;
--- 70,76 ----
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl_utf8(apath, VIOC_FILE_CELL_NAME, &blob, 1);
      if (code) {
  	if ((errno == EINVAL) || (errno == ENOENT)) 
              return 0;
***************
*** 86,92 ****
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl(apath, VIOC_FILE_CELL_NAME, &blob, 1);
      if (code == 0)
          return !stricmp("Freelance.Local.Root",space);
      return 1;   /* assume it is because it is more restrictive that way */
--- 88,94 ----
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl_utf8(apath, VIOC_FILE_CELL_NAME, &blob, 1);
      if (code == 0)
          return !stricmp("Freelance.Local.Root",space);
      return 1;   /* assume it is because it is more restrictive that way */
***************
*** 399,405 ****
  	blob.out = space;
  	memset(space, 0, MAXSIZE);
  
! 	code = pioctl(parent_dir, VIOC_LISTSYMLINK, &blob, 1);
  
  	if (code == 0)
  	    printf("'%s' is a %ssymlink to '%s'\n",
--- 401,407 ----
  	blob.out = space;
  	memset(space, 0, MAXSIZE);
  
! 	code = pioctl_utf8(parent_dir, VIOC_LISTSYMLINK, &blob, 1);
  
  	if (code == 0)
  	    printf("'%s' is a %ssymlink to '%s'\n",
***************
*** 460,465 ****
--- 462,469 ----
  	return 1;
      }
  
+     fprintf(stderr, "Creating symlink [%s] to [%s]\n", path, as->parms[1].items->data);
+ 
      /* create symlink with a special pioctl for Windows NT, since it doesn't
       * have a symlink system call.
       */
***************
*** 467,473 ****
      blob.in_size = 1 + (long)strlen(as->parms[1].items->data);
      blob.in = as->parms[1].items->data;
      blob.out = NULL;
!     code = pioctl(path, VIOC_SYMLINK, &blob, 0);
  #else /* not WIN32 */
      code = symlink(as->parms[1].items->data, path);
  #endif /* not WIN32 */
--- 471,477 ----
      blob.in_size = 1 + (long)strlen(as->parms[1].items->data);
      blob.in = as->parms[1].items->data;
      blob.out = NULL;
!     code = pioctl_utf8(path, VIOC_SYMLINK, &blob, 0);
  #else /* not WIN32 */
      code = symlink(as->parms[1].items->data, path);
  #endif /* not WIN32 */
***************
*** 528,534 ****
  	blob.in_size = (int)strlen(tp)+1;
  	blob.out = lsbuffer;
  	blob.out_size = sizeof(lsbuffer);
! 	code = pioctl(tbuffer, VIOC_LISTSYMLINK, &blob, 0);
  	if (code) {
  	    if (errno == EINVAL)
  		fprintf(stderr,"symlink: '%s' is not a symlink.\n", ti->data);
--- 532,538 ----
  	blob.in_size = (int)strlen(tp)+1;
  	blob.out = lsbuffer;
  	blob.out_size = sizeof(lsbuffer);
! 	code = pioctl_utf8(tbuffer, VIOC_LISTSYMLINK, &blob, 0);
  	if (code) {
  	    if (errno == EINVAL)
  		fprintf(stderr,"symlink: '%s' is not a symlink.\n", ti->data);
***************
*** 547,553 ****
  	blob.out_size = 0;
  	blob.in = tp;
  	blob.in_size = (long)strlen(tp)+1;
! 	code = pioctl(tbuffer, VIOC_DELSYMLINK, &blob, 0);
  	if (code) {
  	    Die(errno, ti->data);
  	}
--- 551,557 ----
  	blob.out_size = 0;
  	blob.in = tp;
  	blob.in_size = (long)strlen(tp)+1;
! 	code = pioctl_utf8(tbuffer, VIOC_DELSYMLINK, &blob, 0);
  	if (code) {
  	    Die(errno, ti->data);
  	}
***************
*** 555,568 ****
      return code;
  }
  
  static    struct ViceIoctl gblob;
  static int debug = 0;
  
! main(argc, argv)
! int argc;
! char **argv; {
      register afs_int32 code;
      register struct cmd_syndesc *ts;
      
  #ifdef	AFS_AIX32_ENV
      /*
--- 559,616 ----
      return code;
  }
  
+ static void
+ FreeUtf8CmdLine(int argc, char ** argv)
+ {
+     int i;
+     for (i=0; i < argc; i++) {
+         if (argv[i])
+             free(argv[i]);
+     }
+     free(argv);
+ }
+ 
+ static char **
+ MakeUtf8Cmdline(int argc, const wchar_t **wargv)
+ {
+     char ** argv;
+     int i;
+ 
+     argv = calloc(argc, sizeof(argv[0]));
+     if (argv == NULL)
+         return NULL;
+ 
+     for (i=0; i < argc; i++) {
+         int s;
+ 
+         s = WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, NULL, 0, NULL, FALSE);
+         if (s == 0 ||
+             (argv[i] = calloc(s+1, sizeof(char))) == NULL) {
+             break;
+         }
+ 
+         s = WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, argv[i], s+1, NULL, FALSE);
+         if (s == 0) {
+             break;
+         }
+     }
+ 
+     if (i < argc) {
+         FreeUtf8CmdLine(argc, argv);
+         return NULL;
+     }
+ 
+     return argv;
+ }
+ 
  static    struct ViceIoctl gblob;
  static int debug = 0;
  
! int wmain(int argc, wchar_t **wargv)
! {
      register afs_int32 code;
      register struct cmd_syndesc *ts;
+     char ** argv;
      
  #ifdef	AFS_AIX32_ENV
      /*
***************
*** 586,591 ****
--- 634,640 ----
  
      /* try to find volume location information */
      
+     argv = MakeUtf8Cmdline(argc, wargv);
  
      osi_Init();
  
***************
*** 606,611 ****
--- 655,662 ----
      if (rxInitDone) rx_Finalize();
  #endif /* not WIN32 */
      
+     FreeUtf8CmdLine(argc, argv);
+     
      return code;
  }
  
Index: openafs/src/WINNT/afslegal/NTMakefile
diff -c openafs/src/WINNT/afslegal/NTMakefile:1.5 openafs/src/WINNT/afslegal/NTMakefile:1.5.4.1
*** openafs/src/WINNT/afslegal/NTMakefile:1.5	Sun Nov 20 20:56:07 2005
--- openafs/src/WINNT/afslegal/NTMakefile	Wed Jul  2 08:48:20 2008
***************
*** 30,35 ****
--- 30,36 ----
  	$(EXEGUILINK) $(EXELIBS)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  install : $(EXEFILE) lang
Index: openafs/src/WINNT/afslegal/lang/NTMakefile
diff -c openafs/src/WINNT/afslegal/lang/NTMakefile:1.4 openafs/src/WINNT/afslegal/lang/NTMakefile:1.4.14.1
*** openafs/src/WINNT/afslegal/lang/NTMakefile:1.4	Fri Nov 21 02:59:47 2003
--- openafs/src/WINNT/afslegal/lang/NTMakefile	Wed Jul  2 08:48:21 2008
***************
*** 44,49 ****
--- 44,50 ----
  $(DLLFILE) : $(DLLOBJS)
  	$(DLLRESLINK)
  	$(DLLPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(DLLFILE)
  
Index: openafs/src/WINNT/afsreg/test/NTMakefile
diff -c openafs/src/WINNT/afsreg/test/NTMakefile:1.5 openafs/src/WINNT/afsreg/test/NTMakefile:1.5.4.1
*** openafs/src/WINNT/afsreg/test/NTMakefile:1.5	Sun Nov 20 20:56:09 2005
--- openafs/src/WINNT/afsreg/test/NTMakefile	Wed Jul  2 08:48:23 2008
***************
*** 13,22 ****
--- 13,24 ----
  $(OUT)\getifinfo.exe: $(OUT)\getifinfo.obj $(DESTDIR)\lib\afs\afsreg.lib 
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\dupkey.exe: $(OUT)\dupkey.obj $(DESTDIR)\lib\afs\afsreg.lib
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  REGMAN_EXELIBS =\
  	$(DESTDIR)\lib\afs\afsreg.lib \
***************
*** 27,32 ****
--- 29,35 ----
  $(OUT)\regman.exe: $(OUT)\regman.obj $(REGMAN_EXELIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  mkdir:
  	
Index: openafs/src/WINNT/afssvrcfg/NTMakefile
diff -c openafs/src/WINNT/afssvrcfg/NTMakefile:1.11 openafs/src/WINNT/afssvrcfg/NTMakefile:1.11.4.1
*** openafs/src/WINNT/afssvrcfg/NTMakefile:1.11	Sun Nov 20 20:56:10 2005
--- openafs/src/WINNT/afssvrcfg/NTMakefile	Wed Jul  2 08:48:24 2008
***************
*** 65,70 ****
--- 65,71 ----
  	$(EXEGUILINK)  $(VCLIBS)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)     
+         $(CODESIGN_USERLAND)
  
  
  ############################################################################
Index: openafs/src/WINNT/afssvrcfg/lang/NTMakefile
diff -c openafs/src/WINNT/afssvrcfg/lang/NTMakefile:1.5 openafs/src/WINNT/afssvrcfg/lang/NTMakefile:1.5.14.1
*** openafs/src/WINNT/afssvrcfg/lang/NTMakefile:1.5	Thu Apr  1 14:29:43 2004
--- openafs/src/WINNT/afssvrcfg/lang/NTMakefile	Wed Jul  2 08:48:26 2008
***************
*** 44,49 ****
--- 44,50 ----
  $(DLLFILE) : $(DLLOBJS)
  	$(DLLRESLINK)
  	$(DLLPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(DLLFILE)
  
Index: openafs/src/WINNT/afssvrcpa/NTMakefile
diff -c openafs/src/WINNT/afssvrcpa/NTMakefile:1.10 openafs/src/WINNT/afssvrcpa/NTMakefile:1.10.4.1
*** openafs/src/WINNT/afssvrcpa/NTMakefile:1.10	Sun Nov 20 20:56:11 2005
--- openafs/src/WINNT/afssvrcpa/NTMakefile	Wed Jul  2 08:48:27 2008
***************
*** 30,35 ****
--- 30,36 ----
  	$(DLLGUILINK)  $(DLLLIBS) /DEF:$(DEFFILE)
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  
  
  ############################################################################
Index: openafs/src/WINNT/afssvrcpa/lang/NTMakefile
diff -c openafs/src/WINNT/afssvrcpa/lang/NTMakefile:1.5 openafs/src/WINNT/afssvrcpa/lang/NTMakefile:1.5.14.1
*** openafs/src/WINNT/afssvrcpa/lang/NTMakefile:1.5	Thu Apr  1 14:29:43 2004
--- openafs/src/WINNT/afssvrcpa/lang/NTMakefile	Wed Jul  2 08:48:28 2008
***************
*** 44,49 ****
--- 44,50 ----
  $(DLLFILE) : $(DLLOBJS)
  	$(DLLRESLINK)
  	$(DLLPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(DLLFILE)
  
Index: openafs/src/WINNT/afssvrmgr/NTMakefile
diff -c openafs/src/WINNT/afssvrmgr/NTMakefile:1.10.4.1 openafs/src/WINNT/afssvrmgr/NTMakefile:1.10.4.2
*** openafs/src/WINNT/afssvrmgr/NTMakefile:1.10.4.1	Mon Jul 24 10:13:18 2006
--- openafs/src/WINNT/afssvrmgr/NTMakefile	Wed Jul  2 08:48:31 2008
***************
*** 108,113 ****
--- 108,114 ----
  	$(EXEGUILINK) $(VCLIBS)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  lang ::
  	$(CD) lang
Index: openafs/src/WINNT/afssvrmgr/lang/NTMakefile
diff -c openafs/src/WINNT/afssvrmgr/lang/NTMakefile:1.5 openafs/src/WINNT/afssvrmgr/lang/NTMakefile:1.5.14.1
*** openafs/src/WINNT/afssvrmgr/lang/NTMakefile:1.5	Thu Apr  1 14:29:44 2004
--- openafs/src/WINNT/afssvrmgr/lang/NTMakefile	Wed Jul  2 08:48:37 2008
***************
*** 44,49 ****
--- 44,50 ----
  $(DLLFILE) : $(DLLOBJS)
  	$(DLLRESLINK)
  	$(DLLPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(DLLFILE)
  
Index: openafs/src/WINNT/afsusrmgr/NTMakefile
diff -c openafs/src/WINNT/afsusrmgr/NTMakefile:1.9 openafs/src/WINNT/afsusrmgr/NTMakefile:1.9.4.1
*** openafs/src/WINNT/afsusrmgr/NTMakefile:1.9	Sun Nov 20 20:56:14 2005
--- openafs/src/WINNT/afsusrmgr/NTMakefile	Wed Jul  2 08:48:40 2008
***************
*** 79,84 ****
--- 79,85 ----
  	$(EXEGUILINK) $(VCLIBS)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  lang ::
  	$(CD) lang
Index: openafs/src/WINNT/afsusrmgr/lang/NTMakefile
diff -c openafs/src/WINNT/afsusrmgr/lang/NTMakefile:1.5 openafs/src/WINNT/afsusrmgr/lang/NTMakefile:1.5.14.1
*** openafs/src/WINNT/afsusrmgr/lang/NTMakefile:1.5	Thu Apr  1 14:29:45 2004
--- openafs/src/WINNT/afsusrmgr/lang/NTMakefile	Wed Jul  2 08:48:42 2008
***************
*** 44,49 ****
--- 44,50 ----
  $(DLLFILE) : $(DLLOBJS)
  	$(DLLRESLINK)
  	$(DLLPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(DLLFILE)
  
Index: openafs/src/WINNT/aklog/NTMakefile
diff -c openafs/src/WINNT/aklog/NTMakefile:1.4.4.3 openafs/src/WINNT/aklog/NTMakefile:1.4.4.4
*** openafs/src/WINNT/aklog/NTMakefile:1.4.4.3	Thu Nov 29 15:55:30 2007
--- openafs/src/WINNT/aklog/NTMakefile	Wed Jul  2 08:48:43 2008
***************
*** 6,11 ****
--- 6,12 ----
  # directory or online at http://www.openafs.org/dl/license10.html
  
  # include the primary makefile
+ AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES)  -DHAVE_KRB5_CREDS_KEYBLOCK=1
  RELDIR=WINNT\aklog
  !INCLUDE ..\..\config\NTMakefile.$(SYS_NAME)
  !INCLUDE ..\..\config\NTMakefile.version
***************
*** 61,71 ****
--- 62,74 ----
  	$(EXECONLINK) $(EXELIBS) $(OTHERLIBS) $(LINKOPTS)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  $(ASETKEY) : $(ASETKEYOBJS) $(EXELIBS) $(OUT)\asetkey.res
  	$(EXECONLINK) $(EXELIBS) $(OTHERLIBS) $(LINKOPTS)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(COPYHEADERS) $(AKLOG) $(ASETKEY)
  
***************
*** 78,83 ****
--- 81,88 ----
  
  $(OUT)\asetkey.res : asetkey.rc AFS_component_version_number.h
  
+ $(OUT)\k5log.res : k5log.rc AFS_component_version_number.h
+ 
  mkdir:
  	-mkdir $(OUT)\lang
  	cd lang
Index: openafs/src/WINNT/bosctlsvc/NTMakefile
diff -c openafs/src/WINNT/bosctlsvc/NTMakefile:1.6.4.1 openafs/src/WINNT/bosctlsvc/NTMakefile:1.6.4.2
*** openafs/src/WINNT/bosctlsvc/NTMakefile:1.6.4.1	Sat Feb  2 08:43:23 2008
--- openafs/src/WINNT/bosctlsvc/NTMakefile	Wed Jul  2 08:48:44 2008
***************
*** 34,39 ****
--- 34,40 ----
  	$(EXECONLINK) $(EXESDKLIBS)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # Definitions for generating versioninfo resource via RC
Index: openafs/src/WINNT/client_config/NTMakefile
diff -c openafs/src/WINNT/client_config/NTMakefile:1.11.4.5 openafs/src/WINNT/client_config/NTMakefile:1.11.4.6
*** openafs/src/WINNT/client_config/NTMakefile:1.11.4.5	Tue Sep 18 02:36:59 2007
--- openafs/src/WINNT/client_config/NTMakefile	Wed Jul  2 08:48:46 2008
***************
*** 116,121 ****
--- 116,122 ----
  !ENDIF
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(COPYHEADERS) $(EXEFILE) lang
  
Index: openafs/src/WINNT/client_config/config.cpp
diff -c openafs/src/WINNT/client_config/config.cpp:1.9 openafs/src/WINNT/client_config/config.cpp:1.9.4.1
*** openafs/src/WINNT/client_config/config.cpp:1.9	Fri Jul 15 07:56:42 2005
--- openafs/src/WINNT/client_config/config.cpp	Thu Jun 26 12:48:29 2008
***************
*** 22,27 ****
--- 22,28 ----
  #define __CM_CONFIG_INTERFACES_ONLY__
  #include "../afsd/cm_config.h"
  
+ #include "../afsd/cm_nls.h"
  #define __CM_IOCTL_INTERFACES_ONLY__
  #include "../afsd/cm_ioctl.h"
  
Index: openafs/src/WINNT/client_config/drivemap.cpp
diff -c openafs/src/WINNT/client_config/drivemap.cpp:1.37 openafs/src/WINNT/client_config/drivemap.cpp:1.37.4.1
*** openafs/src/WINNT/client_config/drivemap.cpp:1.37	Mon Nov 21 19:36:35 2005
--- openafs/src/WINNT/client_config/drivemap.cpp	Thu Jun 26 12:48:29 2008
***************
*** 400,405 ****
--- 400,406 ----
  #define __CM_CONFIG_INTERFACES_ONLY__
  #include "../afsd/cm_config.h"
  
+ #include "../afsd/cm_nls.h"
  #define __CM_IOCTL_INTERFACES_ONLY__
  #include "../afsd/cm_ioctl.h"
  
Index: openafs/src/WINNT/client_config/lang/NTMakefile
diff -c openafs/src/WINNT/client_config/lang/NTMakefile:1.5 openafs/src/WINNT/client_config/lang/NTMakefile:1.5.14.1
*** openafs/src/WINNT/client_config/lang/NTMakefile:1.5	Fri Nov 21 02:59:55 2003
--- openafs/src/WINNT/client_config/lang/NTMakefile	Wed Jul  2 08:48:49 2008
***************
*** 44,49 ****
--- 44,50 ----
  $(DLLFILE) : $(DLLOBJS)
  	$(DLLRESLINK)
  	$(DLLPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(DLLFILE)
  
Index: openafs/src/WINNT/client_cpa/NTMakefile
diff -c openafs/src/WINNT/client_cpa/NTMakefile:1.6.4.1 openafs/src/WINNT/client_cpa/NTMakefile:1.6.4.2
*** openafs/src/WINNT/client_cpa/NTMakefile:1.6.4.1	Tue Oct 10 11:49:34 2006
--- openafs/src/WINNT/client_cpa/NTMakefile	Wed Jul  2 08:48:50 2008
***************
*** 30,35 ****
--- 30,36 ----
  	$(DLLGUILINK)  $(DLLLIBS) /DEF:$(DEFFILE)
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  
  
  ############################################################################
Index: openafs/src/WINNT/client_cpa/lang/NTMakefile
diff -c openafs/src/WINNT/client_cpa/lang/NTMakefile:1.5.14.1 openafs/src/WINNT/client_cpa/lang/NTMakefile:1.5.14.2
*** openafs/src/WINNT/client_cpa/lang/NTMakefile:1.5.14.1	Mon Aug 28 00:28:08 2006
--- openafs/src/WINNT/client_cpa/lang/NTMakefile	Wed Jul  2 08:48:50 2008
***************
*** 44,49 ****
--- 44,50 ----
  $(DLLFILE) : $(DLLOBJS)
  	$(DLLRESLINK)
  	$(DLLPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(DLLFILE)
  
Index: openafs/src/WINNT/client_creds/NTMakefile
diff -c openafs/src/WINNT/client_creds/NTMakefile:1.16.4.5 openafs/src/WINNT/client_creds/NTMakefile:1.16.4.6
*** openafs/src/WINNT/client_creds/NTMakefile:1.16.4.5	Tue Feb 12 08:21:17 2008
--- openafs/src/WINNT/client_creds/NTMakefile	Wed Jul  2 08:48:53 2008
***************
*** 108,113 ****
--- 108,114 ----
  	$(EXEGUILINK) $(VCLIBS)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(COPYHEADERS) $(EXEFILE) lang
  
Index: openafs/src/WINNT/client_creds/lang/NTMakefile
diff -c openafs/src/WINNT/client_creds/lang/NTMakefile:1.6 openafs/src/WINNT/client_creds/lang/NTMakefile:1.6.14.1
*** openafs/src/WINNT/client_creds/lang/NTMakefile:1.6	Thu Apr  1 14:29:47 2004
--- openafs/src/WINNT/client_creds/lang/NTMakefile	Wed Jul  2 08:48:55 2008
***************
*** 44,49 ****
--- 44,50 ----
  $(DLLFILE) : $(DLLOBJS)
  	$(DLLRESLINK)
  	$(DLLPREP) 
+         $(CODESIGN_USERLAND)
  
  install : $(DLLFILE)
  
Index: openafs/src/WINNT/client_exp/NTMakefile
diff -c openafs/src/WINNT/client_exp/NTMakefile:1.9.4.4 openafs/src/WINNT/client_exp/NTMakefile:1.9.4.6
*** openafs/src/WINNT/client_exp/NTMakefile:1.9.4.4	Fri Feb  8 21:32:24 2008
--- openafs/src/WINNT/client_exp/NTMakefile	Wed Jul  2 08:48:57 2008
***************
*** 5,11 ****
  # License.  For details, see the LICENSE file in the top-level source
  # directory or online at http://www.openafs.org/dl/license10.html
  
! AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES) -I..\afsd  /D"_WINDOWS" /D"_WINDLL" /D"_AFXDLL" /D"_USRDLL"
  
  NO_CRTDBG=1			#define this to disable any CRT_DBG flag
  RELDIR=WINNT\client_exp
--- 5,11 ----
  # License.  For details, see the LICENSE file in the top-level source
  # directory or online at http://www.openafs.org/dl/license10.html
  
! AFSDEV_AUXCDEFINES = $(AFSDEV_AUXCDEFINES) -I..\afsd  /D"_WINDOWS" /D"_WINDLL" /D"_AFXDLL" /D"_USRDLL" -DUNICODE -D_UNICODE
  
  NO_CRTDBG=1			#define this to disable any CRT_DBG flag
  RELDIR=WINNT\client_exp
***************
*** 68,73 ****
--- 68,74 ----
  	$(DLLCONLINK) /DEF:afs_shl_ext.def $(DLLSDKLIBS)
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # Definitions for generating versioninfo resources
Index: openafs/src/WINNT/client_exp/afs_shl_ext.cpp
diff -c openafs/src/WINNT/client_exp/afs_shl_ext.cpp:1.6.4.4 openafs/src/WINNT/client_exp/afs_shl_ext.cpp:1.6.4.5
*** openafs/src/WINNT/client_exp/afs_shl_ext.cpp:1.6.4.4	Fri Feb  8 21:32:24 2008
--- openafs/src/WINNT/client_exp/afs_shl_ext.cpp	Fri May  9 11:10:13 2008
***************
*** 21,26 ****
--- 21,29 ----
  extern "C" {
  #include "WINNT\afsreg.h"
  }
+ #define STRSAFE_NO_DEPRECATE
+ #include <strsafe.h>
+ 
  #ifdef _DEBUG
  #define new DEBUG_NEW
  #undef THIS_FILE
***************
*** 72,79 ****
  
  BOOL CAfsShlExt::InitInstance()
  {
      // Load our translated resources
!     TaLocale_LoadCorrespondingModuleByName (m_hInstance, TEXT("afs_shl_ext.dll"));
  
      // Register all OLE server (factories) as running.  This enables the
      //  OLE libraries to create objects from other applications.
--- 75,84 ----
  
  BOOL CAfsShlExt::InitInstance()
  {
+     extern EXPORTED HINSTANCE TaLocale_LoadCorrespondingModuleByName (HINSTANCE hInstance, LPSTR pszFilename, WORD wSearchPriority = MODULE_PRIORITY_BOOSTED);
+ 
      // Load our translated resources
!     TaLocale_LoadCorrespondingModuleByName (m_hInstance, "afs_shl_ext.dll");
  
      // Register all OLE server (factories) as running.  This enables the
      //  OLE libraries to create objects from other applications.
***************
*** 112,119 ****
--- 117,128 ----
  
  int WideCharToLocal(LPTSTR pLocal, LPCWSTR pWide, DWORD dwChars)
  {
+ #ifdef UNICODE
+     StringCchCopy(pLocal, dwChars, pWide);
+ #else
      *pLocal = 0;
      WideCharToMultiByte( CP_ACP, 0, pWide, -1, pLocal, dwChars, NULL, NULL);
+ #endif
      return lstrlen(pLocal);
  }
  
***************
*** 152,165 ****
      StringFromIID(IID_IShellExt, &pwsz);
      if(pwsz)
      {
  	WideCharToMultiByte( CP_ACP, 0,pwsz, -1, szCLSID, sizeof(szCLSID), NULL, NULL);
! 	LPMALLOC pMalloc;
! 	CoGetMalloc(1, &pMalloc);
! 	if(pMalloc)
! 	{
! 	    (pMalloc->Free)(pwsz);
! 	    (pMalloc->Release)();
! 	}
      } else {
  	return E_FAIL;
      }
--- 161,172 ----
      StringFromIID(IID_IShellExt, &pwsz);
      if(pwsz)
      {
+ #ifdef UNICODE
+         StringCbCopy(szCLSID, sizeof(szCLSID), pwsz);
+ #else
  	WideCharToMultiByte( CP_ACP, 0,pwsz, -1, szCLSID, sizeof(szCLSID), NULL, NULL);
! #endif
!         CoTaskMemFree(pwsz);
      } else {
  	return E_FAIL;
      }
***************
*** 169,182 ****
      @="Y:\\DEST\\root.client\\usr\\vice\\etc\\afs_shl_ext.dll"
      "ThreadingModel"="Apartment"
      */
!     HMODULE hModule=GetModuleHandle("afs_shl_ext.dll");
      DWORD z=GetModuleFileName(hModule,szModule,sizeof(szModule));
      wsprintf(szSubKey, TEXT("CLSID\\%s\\InprocServer32"),szCLSID);
      if ((lResult=DoRegCLSID(HKEY_CLASSES_ROOT,szSubKey,szModule))!=NOERROR)
  	return lResult;
  
      wsprintf(szSubKey, TEXT("CLSID\\%s\\InprocServer32"),szCLSID);
!     if ((lResult=DoRegCLSID(HKEY_CLASSES_ROOT,szSubKey,"Apartment","ThreadingModel"))!=NOERROR)
  	return lResult;
  
      /*
--- 176,190 ----
      @="Y:\\DEST\\root.client\\usr\\vice\\etc\\afs_shl_ext.dll"
      "ThreadingModel"="Apartment"
      */
!     HMODULE hModule=GetModuleHandle(TEXT("afs_shl_ext.dll"));
      DWORD z=GetModuleFileName(hModule,szModule,sizeof(szModule));
      wsprintf(szSubKey, TEXT("CLSID\\%s\\InprocServer32"),szCLSID);
      if ((lResult=DoRegCLSID(HKEY_CLASSES_ROOT,szSubKey,szModule))!=NOERROR)
  	return lResult;
  
      wsprintf(szSubKey, TEXT("CLSID\\%s\\InprocServer32"),szCLSID);
!     if ((lResult=DoRegCLSID(HKEY_CLASSES_ROOT,szSubKey,
!                             TEXT("Apartment"),TEXT("ThreadingModel")))!=NOERROR)
  	return lResult;
  
      /*
***************
*** 203,209 ****
      if(VER_PLATFORM_WIN32_NT == osvi.dwPlatformId)
      {
          wsprintf(szSubKey, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved"));
!         if ((lResult=DoRegCLSID(HKEY_LOCAL_MACHINE,szSubKey,STR_EXT_TITLE,szCLSID))!=NOERROR)
              return lResult;
      }
      wsprintf(szSubKey, TEXT("*\\shellex\\ContextMenuHandlers\\%s"),STR_EXT_TITLE);
--- 211,217 ----
      if(VER_PLATFORM_WIN32_NT == osvi.dwPlatformId)
      {
          wsprintf(szSubKey, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved"));
!         if ((lResult=DoRegCLSID(HKEY_LOCAL_MACHINE,szSubKey,_TEXT(STR_EXT_TITLE),szCLSID))!=NOERROR)
              return lResult;
      }
      wsprintf(szSubKey, TEXT("*\\shellex\\ContextMenuHandlers\\%s"),STR_EXT_TITLE);
***************
*** 273,279 ****
  	    TCHAR szData[MAX_PATH];
  
  	    //Create the value string.
! 	    lstrcpy(szData, STR_EXT_TITLE);
  
  	    lResult = RegSetValueEx( hKey,
  				     szCLSID,
--- 281,287 ----
  	    TCHAR szData[MAX_PATH];
  
  	    //Create the value string.
! 	    lstrcpy(szData, _TEXT(STR_EXT_TITLE));
  
  	    lResult = RegSetValueEx( hKey,
  				     szCLSID,
***************
*** 322,335 ****
      StringFromIID(IID_IShellExt, &pwsz);
      if(pwsz)
      {
  	WideCharToMultiByte( CP_ACP, 0,pwsz, -1, szCLSID, sizeof(szCLSID), NULL, NULL);
! 	LPMALLOC pMalloc;
! 	CoGetMalloc(1, &pMalloc);
! 	if(pMalloc)
! 	{
! 	    (pMalloc->Free)(pwsz);
! 	    (pMalloc->Release)();
! 	}
      } else {
  	return E_FAIL;
      }
--- 330,341 ----
      StringFromIID(IID_IShellExt, &pwsz);
      if(pwsz)
      {
+ #ifdef UNICODE
+         StringCbCopy(szCLSID, sizeof(szCLSID), pwsz);
+ #else
  	WideCharToMultiByte( CP_ACP, 0,pwsz, -1, szCLSID, sizeof(szCLSID), NULL, NULL);
! #endif
!         CoTaskMemFree(pwsz);
      } else {
  	return E_FAIL;
      }
Index: openafs/src/WINNT/client_exp/copy_acl_dlg.cpp
diff -c openafs/src/WINNT/client_exp/copy_acl_dlg.cpp:1.2 openafs/src/WINNT/client_exp/copy_acl_dlg.cpp:1.2.32.1
*** openafs/src/WINNT/client_exp/copy_acl_dlg.cpp:1.2	Sat Nov  4 05:02:51 2000
--- openafs/src/WINNT/client_exp/copy_acl_dlg.cpp	Fri May  9 11:10:13 2008
***************
*** 7,18 ****
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
  extern "C" {
  #include <afs/param.h>
  #include <afs/stds.h>
  }
  
- #include "stdafx.h"
  #include "afs_shl_ext.h"
  #include "copy_acl_dlg.h"
  #include "io.h"
--- 7,20 ----
   * directory or online at http://www.openafs.org/dl/license10.html
   */
  
+ #include "stdafx.h"
+ #include <shlwapi.h>
+ 
  extern "C" {
  #include <afs/param.h>
  #include <afs/stds.h>
  }
  
  #include "afs_shl_ext.h"
  #include "copy_acl_dlg.h"
  #include "io.h"
***************
*** 69,75 ****
  	m_bClear = m_Clear.GetCheck() == 1;
  	m_ToDir.GetWindowText(m_strToDir);
  	
! 	if (access(m_strToDir, 0) == -1) {
  		ShowMessageBox(IDS_DIR_DOES_NOT_EXIST_ERROR, MB_ICONEXCLAMATION, IDS_DIR_DOES_NOT_EXIST_ERROR, m_strToDir);
  		return;
  	}
--- 71,77 ----
  	m_bClear = m_Clear.GetCheck() == 1;
  	m_ToDir.GetWindowText(m_strToDir);
  	
! 	if (PathIsDirectory(m_strToDir) == -1) {
  		ShowMessageBox(IDS_DIR_DOES_NOT_EXIST_ERROR, MB_ICONEXCLAMATION, IDS_DIR_DOES_NOT_EXIST_ERROR, m_strToDir);
  		return;
  	}
***************
*** 97,103 ****
  
  void CCopyAclDlg::OnBrowse() 
  {
! 	CFileDialog dlg(TRUE, 0, "*.*", OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR | OFN_HIDEREADONLY, 0, 0);
  
  	if (dlg.DoModal() == IDCANCEL)
  		return;
--- 99,105 ----
  
  void CCopyAclDlg::OnBrowse() 
  {
!     CFileDialog dlg(TRUE, 0, TEXT("*.*"), OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR | OFN_HIDEREADONLY, 0, 0);
  
  	if (dlg.DoModal() == IDCANCEL)
  		return;
Index: openafs/src/WINNT/client_exp/gui2fs.cpp
diff -c openafs/src/WINNT/client_exp/gui2fs.cpp:1.19.4.6 openafs/src/WINNT/client_exp/gui2fs.cpp:1.19.4.7
*** openafs/src/WINNT/client_exp/gui2fs.cpp:1.19.4.6	Wed Mar 19 09:24:05 2008
--- openafs/src/WINNT/client_exp/gui2fs.cpp	Fri May  9 11:10:13 2008
***************
*** 38,43 ****
--- 38,46 ----
  #include <cm.h>
  }
  
+ #define STRSAFE_NO_DEPRECATE
+ #include <strsafe.h>
+ 
  #define PCCHAR(str)		((char *)(const char *)(str))
  #define VL_NOENT                (363524L)
  
***************
*** 65,70 ****
--- 68,150 ----
  static char *szLogFileName = "afsguilog.txt";
  #endif
  
+ #ifdef UNICODE
+ class CStringUtf8 : public CStringA
+ {
+ public:
+     CStringUtf8(const CStringW& csw) : CStringA()
+     {
+         SetString(csw);
+     }
+ 
+     CStringUtf8(const char * cp) : CStringA(cp) {}
+ 
+     CStringUtf8() :CStringA() {}
+ 
+     void SetString(const CStringW& csw)
+     {
+         char buffer[1024];
+         int rv;
+ 
+         rv = WideCharToMultiByte(CP_UTF8, 0, csw, -1,
+                                  buffer, sizeof(buffer),
+                                  NULL, FALSE);
+ 
+         if (rv != 0) {
+             CStringA::SetString(buffer);
+         } else {
+             if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
+                 int cb_req;
+ 
+                 cb_req = WideCharToMultiByte(CP_UTF8, 0, csw, -1, NULL, 0, NULL, FALSE);
+                 if (cb_req != 0) {
+                     cb_req ++;
+ 
+                     WideCharToMultiByte(CP_UTF8, 0, csw, -1, CStringA::GetBuffer(cb_req), cb_req, NULL, FALSE);
+                     CStringA::ReleaseBuffer();
+                 }
+             } else {
+ #ifdef DEBUG
+                 DebugBreak();
+ #endif
+             }
+         }
+     }
+ 
+     static CString _Utf8ToCString(const char * ustr)
+     {
+         CString cs;
+         int cch;
+ 
+         cch = MultiByteToWideChar(CP_UTF8, 0, ustr, -1, NULL, 0);
+         if (cch == 0) {
+             cs.Empty();
+             return cs;
+         }
+ 
+         cch++;
+         cch = MultiByteToWideChar(CP_UTF8, 0, ustr, -1, cs.GetBuffer(cch), cch);
+         cs.ReleaseBuffer();
+ 
+         return cs;
+     }
+ };
+ 
+ long pioctl_T(const CString& path, long opcode, struct ViceIoctl * blob, int follow)
+ {
+     CStringUtf8 upath(path);
+ 
+     return pioctl_utf8(PCCHAR(upath), opcode, blob, follow);
+ }
+ 
+ #define Utf8ToCString(cs) CStringUtf8::_Utf8ToCString(cs)
+ #else
+ #define pioctl_T(path, op, vblob, follow) pioctl(PCCHAR(path), op, vblob, follow)
+ #define Utf8ToCString(cs) (cs)
+ #endif
+ 
+ 
+ 
  static int
  VLDBInit(int noAuthFlag, struct afsconf_cell *info)
  {
***************
*** 79,92 ****
      return code;
  }
  
! FILE *OpenFile(char *file, char *rwp)
  {
      char wdir[256];
      long code;
      long tlen;
      FILE *fp;
  
!     code = GetWindowsDirectory(wdir, sizeof(wdir));
      if (code == 0 || code > sizeof(wdir)) 
          return FALSE;
  
--- 159,173 ----
      return code;
  }
  
! static FILE *
! OpenFile(char *file, char *rwp)
  {
      char wdir[256];
      long code;
      long tlen;
      FILE *fp;
  
!     code = GetWindowsDirectoryA(wdir, sizeof(wdir));
      if (code == 0 || code > sizeof(wdir)) 
          return FALSE;
  
***************
*** 132,138 ****
      for (int i = 0; i < files.GetSize(); i++) {
          blob.in_size = blob.out_size = 0;
  
!         code = pioctl(PCCHAR(files[i]), VIOCFLUSH, &blob, 0);
          if (code) {
              error = 1;
              if (errno == EMFILE)
--- 213,219 ----
      for (int i = 0; i < files.GetSize(); i++) {
          blob.in_size = blob.out_size = 0;
  
!         code = pioctl_T(files[i], VIOCFLUSH, &blob, 0);
          if (code) {
              error = 1;
              if (errno == EMFILE)
***************
*** 157,163 ****
      for (int i = 0; i < files.GetSize(); i++) {
          blob.in_size = blob.out_size = 0;
  
!         code = pioctl(PCCHAR(files[i]), VIOC_FLUSHVOLUME, &blob, 0);
          if (code) {
              error = 1;
              ShowMessageBox(IDS_FLUSH_VOLUME_ERROR, MB_ICONERROR, IDS_FLUSH_VOLUME_ERROR, files[i], strerror(errno));
--- 238,244 ----
      for (int i = 0; i < files.GetSize(); i++) {
          blob.in_size = blob.out_size = 0;
  
!         code = pioctl_T(files[i], VIOC_FLUSHVOLUME, &blob, 0);
          if (code) {
              error = 1;
              ShowMessageBox(IDS_FLUSH_VOLUME_ERROR, MB_ICONERROR, IDS_FLUSH_VOLUME_ERROR, files[i], strerror(errno));
***************
*** 187,201 ****
          blob.out_size = MAXSIZE;
          blob.out = space;
  
!         code = pioctl(PCCHAR(files[i]), VIOC_FILE_CELL_NAME, &blob, 1);
          if (code) {
              if (code == ENOENT) {
                  LoadString (str, IDS_CANT_GET_CELL);
                  results.Add(str);
              } else
                  results.Add(GetAfsError(errno));
!         } else
!             results.Add(space);
      }       
  
      LoadString (str, IDS_SHOW_CELL);
--- 268,283 ----
          blob.out_size = MAXSIZE;
          blob.out = space;
  
!         code = pioctl_T(files[i], VIOC_FILE_CELL_NAME, &blob, 1);
          if (code) {
              if (code == ENOENT) {
                  LoadString (str, IDS_CANT_GET_CELL);
                  results.Add(str);
              } else
                  results.Add(GetAfsError(errno));
!         } else {
!             results.Add(Utf8ToCString(space));
!         }
      }       
  
      LoadString (str, IDS_SHOW_CELL);
***************
*** 279,285 ****
          blob.out = space;
          memset(space, 0, sizeof(space));
  
!         code = pioctl(PCCHAR(files[i]), VIOCWHEREIS, &blob, 1);
          if (code) {
              resultFiles.Add(StripPath(files[i]));
              servers.Add(GetAfsError(errno));
--- 361,367 ----
          blob.out = space;
          memset(space, 0, sizeof(space));
  
!         code = pioctl_T(files[i], VIOCWHEREIS, &blob, 1);
          if (code) {
              resultFiles.Add(StripPath(files[i]));
              servers.Add(GetAfsError(errno));
***************
*** 352,358 ****
      }
  }
  
! CString GetAfsError(int code, const char *filename)
  {
      CString strMsg;
  
--- 434,440 ----
      }
  }
  
! CString GetAfsError(int code, const TCHAR *filename)
  {
      CString strMsg;
  
***************
*** 360,387 ****
  
      if (code == EINVAL) {
          if (filename)
!             strMsg.Format("Invalid argument; it is possible that the file is not in AFS");
          else 
!             strMsg.Format("Invalid argument");
      } else if (code == ENOENT) {
          if (filename) 
!             strMsg.Format("The file does not exist");
          else 
!             strMsg.Format("No such file returned");
      } else if (code == EROFS)  {
!         strMsg.Format("You can not change a backup or readonly volume");
      } else if (code == EACCES || code == EPERM) {
!         strMsg.Format("You do not have the required rights to do this operation");
      } else if (code == ENODEV) {
!         strMsg.Format("AFS service may not have started");
      } else if (code == ESRCH) {
!         strMsg.Format("Cell name not recognized");
      } else if (code == ETIMEDOUT) {
!         strMsg.Format("Connection timed out");
      } else if (code == EPIPE) {
!         strMsg.Format("Volume name or ID not recognized");
      } else {
!         strMsg.Format("Error 0x%x occurred", code);
      }
  
      return strMsg;
--- 442,469 ----
  
      if (code == EINVAL) {
          if (filename)
!             strMsg.Format(_T("Invalid argument; it is possible that the file is not in AFS"));
          else 
!             strMsg.Format(_T("Invalid argument"));
      } else if (code == ENOENT) {
          if (filename) 
!             strMsg.Format(_T("The file does not exist"));
          else 
!             strMsg.Format(_T("No such file returned"));
      } else if (code == EROFS)  {
!         strMsg.Format(_T("You can not change a backup or readonly volume"));
      } else if (code == EACCES || code == EPERM) {
!         strMsg.Format(_T("You do not have the required rights to do this operation"));
      } else if (code == ENODEV) {
!         strMsg.Format(_T("AFS service may not have started"));
      } else if (code == ESRCH) {
!         strMsg.Format(_T("Cell name not recognized"));
      } else if (code == ETIMEDOUT) {
!         strMsg.Format(_T("Connection timed out"));
      } else if (code == EPIPE) {
!         strMsg.Format(_T("Volume name or ID not recognized"));
      } else {
!         strMsg.Format(_T("Error 0x%x occurred"), code);
      }
  
      return strMsg;
***************
*** 492,514 ****
      CString str;
  
      if (!dfs) {
!         if (arights & PRSFS_READ) str += "r";
!         if (arights & PRSFS_LOOKUP) str += "l";
!         if (arights & PRSFS_INSERT) str += "i";
!         if (arights & PRSFS_DELETE) str += "d";
!         if (arights & PRSFS_WRITE) str += "w";
!         if (arights & PRSFS_LOCK) str += "k";
!         if (arights & PRSFS_ADMINISTER) str += "a";
      } else {
          ASSERT(FALSE);
  /*
! 		if (arights & DFS_READ) str += "r"; else str += "-";
! 		if (arights & DFS_WRITE) str += "w"; else printf("-");
! 		if (arights & DFS_EXECUTE) str += "x"; else printf("-");
! 		if (arights & DFS_CONTROL) str += "c"; else printf("-");
! 		if (arights & DFS_INSERT) str += "i"; else printf("-");
! 		if (arights & DFS_DELETE) str += "d"; else printf("-");
! 		if (arights & (DFS_USRALL)) str += "+";
  */
      }	
  
--- 574,596 ----
      CString str;
  
      if (!dfs) {
!         if (arights & PRSFS_READ) str += _T("r");
!         if (arights & PRSFS_LOOKUP) str += _T("l");
!         if (arights & PRSFS_INSERT) str += _T("i");
!         if (arights & PRSFS_DELETE) str += _T("d");
!         if (arights & PRSFS_WRITE) str += _T("w");
!         if (arights & PRSFS_LOCK) str += _T("k");
!         if (arights & PRSFS_ADMINISTER) str += _T("a");
      } else {
          ASSERT(FALSE);
  /*
! 		if (arights & DFS_READ) str += _T("r"); else str += _T("-");
! 		if (arights & DFS_WRITE) str += _T("w"); else printf(_T("-"));
! 		if (arights & DFS_EXECUTE) str += _T("x"); else printf(_T("-"));
! 		if (arights & DFS_CONTROL) str += _T("c"); else printf(_T("-"));
! 		if (arights & DFS_INSERT) str += _T("i"); else printf(_T("-"));
! 		if (arights & DFS_DELETE) str += _T("d"); else printf(_T("-"));
! 		if (arights & (DFS_USRALL)) str += _T("+");
  */
      }	
  
***************
*** 544,555 ****
  struct Acl *EmptyAcl(const CString& strCellName)
  {
      register struct Acl *tp;
      
      tp = (struct Acl *)malloc(sizeof (struct Acl));
      tp->nplus = tp->nminus = 0;
      tp->pluslist = tp->minuslist = 0;
      tp->dfs = 0;
!     strcpy(tp->cell, strCellName);
  
      return tp;
  }
--- 626,638 ----
  struct Acl *EmptyAcl(const CString& strCellName)
  {
      register struct Acl *tp;
+     CStringUtf8 ustrCell(strCellName);
      
      tp = (struct Acl *)malloc(sizeof (struct Acl));
      tp->nplus = tp->nminus = 0;
      tp->pluslist = tp->minuslist = 0;
      tp->dfs = 0;
!     StringCbCopyA(tp->cell, sizeof(tp->cell), ustrCell);
  
      return tp;
  }
***************
*** 640,646 ****
      }
      ta->minuslist = first;
  
-   exit:
      return ta;
  
    nminus_err:
--- 723,728 ----
***************
*** 722,728 ****
          blob.in_size = 0;
          blob.out = space;
  
!         code = pioctl(PCCHAR(names[i]), VIOCGETAL, &blob, 1);
          if (code) {
              ShowMessageBox(IDS_CLEANACL_ERROR, MB_ICONERROR, 0, names[i], GetAfsError(errno));
              continue;
--- 804,810 ----
          blob.in_size = 0;
          blob.out = space;
  
!         code = pioctl_T(names[i], VIOCGETAL, &blob, 1);
          if (code) {
              ShowMessageBox(IDS_CLEANACL_ERROR, MB_ICONERROR, 0, names[i], GetAfsError(errno));
              continue;
***************
*** 747,753 ****
          blob.in_size = strlen((char *)blob.in) + 1;
          blob.out_size = 0;
  		
!         code = pioctl(PCCHAR(names[i]), VIOCSETAL, &blob, 1);
          if (code) {
              if (errno == EINVAL) {
                  ShowMessageBox(IDS_CLEANACL_INVALID_ARG, MB_ICONERROR, IDS_CLEANACL_INVALID_ARG, names[i]);
--- 829,835 ----
          blob.in_size = strlen((char *)blob.in) + 1;
          blob.out_size = 0;
  		
!         code = pioctl_T(names[i], VIOCSETAL, &blob, 1);
          if (code) {
              if (errno == EINVAL) {
                  ShowMessageBox(IDS_CLEANACL_INVALID_ARG, MB_ICONERROR, IDS_CLEANACL_INVALID_ARG, names[i]);
***************
*** 776,782 ****
      blob.in_size = idf;
      blob.in = blob.out = space;
  	
!     code = pioctl(PCCHAR(strDir), VIOCGETAL, &blob, 1);
      if (code) {
          ShowMessageBox(IDS_GETRIGHTS_ERROR, MB_ICONERROR, IDS_GETRIGHTS_ERROR, strDir, GetAfsError(errno));
          return FALSE;
--- 858,864 ----
      blob.in_size = idf;
      blob.in = blob.out = space;
  	
!     code = pioctl_T(strDir, VIOCGETAL, &blob, 1);
      if (code) {
          ShowMessageBox(IDS_GETRIGHTS_ERROR, MB_ICONERROR, IDS_GETRIGHTS_ERROR, strDir, GetAfsError(errno));
          return FALSE;
***************
*** 825,841 ****
      return 0;
  }
  
! void ChangeList (struct Acl *pAcl, BYTE bNormalRights, const char *entryName, LONG nEntryRights)
  {
      ASSERT(pAcl);
      ASSERT(entryName);
      
      struct AclEntry *pEntry;
  
      HOURGLASS hourglass;
  
      pEntry = (bNormalRights ? pAcl->pluslist : pAcl->minuslist);
!     pEntry = FindList(pEntry, entryName);
  
      /* Found the item already in the list. */
      if (pEntry) {
--- 907,924 ----
      return 0;
  }
  
! void ChangeList(struct Acl *pAcl, BYTE bNormalRights, const CString & entryName, LONG nEntryRights)
  {
      ASSERT(pAcl);
      ASSERT(entryName);
      
      struct AclEntry *pEntry;
+     CStringUtf8 uEntryName(entryName);
  
      HOURGLASS hourglass;
  
      pEntry = (bNormalRights ? pAcl->pluslist : pAcl->minuslist);
!     pEntry = FindList(pEntry, uEntryName);
  
      /* Found the item already in the list. */
      if (pEntry) {
***************
*** 851,857 ****
      pEntry = (struct AclEntry *) malloc(sizeof (struct AclEntry));
      ASSERT(pEntry);
  	
!     strcpy(pEntry->name, entryName);
      pEntry->rights = nEntryRights;
      
      if (bNormalRights) {
--- 934,940 ----
      pEntry = (struct AclEntry *) malloc(sizeof (struct AclEntry));
      ASSERT(pEntry);
  	
!     strcpy(pEntry->name, uEntryName);
      pEntry->rights = nEntryRights;
      
      if (bNormalRights) {
***************
*** 872,913 ****
  
  enum rtype {add, destroy, deny};
  
! LONG Convert(const register char *arights, int dfs, enum rtype *rtypep)
  {
      register int i, len;
      LONG mode;
-     register char tc;
  
      *rtypep = add;	/* add rights, by default */
  
!     if (!strcmp(arights,"read")) 
          return PRSFS_READ | PRSFS_LOOKUP;
!     if (!strcmp(arights, "write")) 
          return PRSFS_READ | PRSFS_LOOKUP | PRSFS_INSERT | PRSFS_DELETE | PRSFS_WRITE | PRSFS_LOCK;
!     if (!strcmp(arights, "mail")) 
          return PRSFS_INSERT | PRSFS_LOCK | PRSFS_LOOKUP;
!     if (!strcmp(arights, "all")) 
          return PRSFS_READ | PRSFS_LOOKUP | PRSFS_INSERT | PRSFS_DELETE | PRSFS_WRITE | PRSFS_LOCK | PRSFS_ADMINISTER;
      
!     if (!strcmp(arights, "none")) {
          *rtypep = destroy; /* Remove entire entry */
          return 0;
      }
  
!     len = strlen(arights);
      mode = 0;
  
      for (i = 0; i < len; i++) {
!         tc = *arights++;
!         if (tc == 'r') mode |= PRSFS_READ;
!         else if (tc == 'l') mode |= PRSFS_LOOKUP;
!         else if (tc == 'i') mode |= PRSFS_INSERT;
!         else if (tc == 'd') mode |= PRSFS_DELETE;
!         else if (tc == 'w') mode |= PRSFS_WRITE;
!         else if (tc == 'k') mode |= PRSFS_LOCK;
!         else if (tc == 'a') mode |= PRSFS_ADMINISTER;
          else {
!             fprintf(stderr, "illegal rights character '%c'.\n", tc);
              exit(1);
          }
      }   
--- 955,995 ----
  
  enum rtype {add, destroy, deny};
  
! static LONG Convert(const CString& strRights, int dfs, enum rtype *rtypep)
  {
      register int i, len;
      LONG mode;
  
      *rtypep = add;	/* add rights, by default */
  
!     if (strRights == _T("read")) 
          return PRSFS_READ | PRSFS_LOOKUP;
!     if (strRights == _T("write")) 
          return PRSFS_READ | PRSFS_LOOKUP | PRSFS_INSERT | PRSFS_DELETE | PRSFS_WRITE | PRSFS_LOCK;
!     if (strRights == _T("mail")) 
          return PRSFS_INSERT | PRSFS_LOCK | PRSFS_LOOKUP;
!     if (strRights == _T("all")) 
          return PRSFS_READ | PRSFS_LOOKUP | PRSFS_INSERT | PRSFS_DELETE | PRSFS_WRITE | PRSFS_LOCK | PRSFS_ADMINISTER;
      
!     if (strRights == _T("none")) {
          *rtypep = destroy; /* Remove entire entry */
          return 0;
      }
  
!     len = strRights.GetLength();
      mode = 0;
  
      for (i = 0; i < len; i++) {
!         TCHAR c = strRights[i];
!         if (c == _T('r')) mode |= PRSFS_READ;
!         else if (c == _T('l')) mode |= PRSFS_LOOKUP;
!         else if (c == _T('i')) mode |= PRSFS_INSERT;
!         else if (c == _T('d')) mode |= PRSFS_DELETE;
!         else if (c == _T('w')) mode |= PRSFS_WRITE;
!         else if (c == _T('k')) mode |= PRSFS_LOCK;
!         else if (c == _T('a')) mode |= PRSFS_ADMINISTER;
          else {
!             fprintf(stderr, "illegal rights character '%c'.\n", c);
              exit(1);
          }
      }   
***************
*** 945,951 ****
      blob.out_size = 0;
      blob.in_size = 1 + strlen((const char *)blob.in);
  
!     code = pioctl(PCCHAR(strDir), VIOCSETAL, &blob, 1);
      if (code) {
          if (errno == EINVAL)
              ShowMessageBox(IDS_SAVE_ACL_EINVAL_ERROR, MB_ICONERROR, IDS_SAVE_ACL_EINVAL_ERROR, strDir);
--- 1027,1033 ----
      blob.out_size = 0;
      blob.in_size = 1 + strlen((const char *)blob.in);
  
!     code = pioctl_T(strDir, VIOCSETAL, &blob, 1);
      if (code) {
          if (errno == EINVAL)
              ShowMessageBox(IDS_SAVE_ACL_EINVAL_ERROR, MB_ICONERROR, IDS_SAVE_ACL_EINVAL_ERROR, strDir);
***************
*** 972,978 ****
      blob.in_size = idf;
      blob.in = blob.out = space;
  	
!     code = pioctl(PCCHAR(strToDir), VIOCGETAL, &blob, 1);
      if (code) {
          ShowMessageBox(IDS_ACL_READ_ERROR, MB_ICONERROR, IDS_ACL_READ_ERROR, strToDir, GetAfsError(errno, strToDir));
          return FALSE;
--- 1054,1060 ----
      blob.in_size = idf;
      blob.in = blob.out = space;
  	
!     code = pioctl_T(strToDir, VIOCGETAL, &blob, 1);
      if (code) {
          ShowMessageBox(IDS_ACL_READ_ERROR, MB_ICONERROR, IDS_ACL_READ_ERROR, strToDir, GetAfsError(errno, strToDir));
          return FALSE;
***************
*** 1016,1022 ****
      blob.out_size = 0;
      blob.in_size = 1 + strlen((char *)blob.in);
  
!     code = pioctl(PCCHAR(strToDir), VIOCSETAL, &blob, 1);
      if (code) {
          ZapAcl(pToAcl);
          if (errno == EINVAL)
--- 1098,1104 ----
      blob.out_size = 0;
      blob.in_size = 1 + strlen((char *)blob.in);
  
!     code = pioctl_T(strToDir, VIOCSETAL, &blob, 1);
      if (code) {
          ZapAcl(pToAcl);
          if (errno == EINVAL)
***************
*** 1052,1058 ****
      } else
          strVolume = strMountPoint.Mid(1);
  
!     strMountPointInfo = strFile + "\t" + strVolume + "\t" + strCell + "\t" + strType;
  
      return strMountPointInfo;
  }       
--- 1134,1140 ----
      } else
          strVolume = strMountPoint.Mid(1);
  
!     strMountPointInfo = strFile + _T("\t") + strVolume + _T("\t") + strCell + _T("\t") + strType;
  
      return strMountPointInfo;
  }       
***************
*** 1061,1090 ****
  {
      CString strSymlinkInfo;
  
!     strSymlinkInfo = strFile + "\t" + strSymlink;
  
      return strSymlinkInfo;
  }       
  
! BOOL IsPathInAfs(const CHAR *strPath)
  {
      struct ViceIoctl blob;
      int code;
  
      HOURGLASS hourglass;
  
!     char buf[512];
!     sprintf(buf, "IsPathInAfs(%s)", strPath);
!     OutputDebugString(buf);
  
      blob.in_size = 0;
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl((LPTSTR)((LPCTSTR)strPath), VIOC_FILE_CELL_NAME, &blob, 1);
  
!     sprintf(buf, "VIOC_FILE_CELL_NAME=%d", code);
!     OutputDebugString(buf);
  
      if (code) {
  	if ((errno == EINVAL) || (errno == ENOENT))
--- 1143,1173 ----
  {
      CString strSymlinkInfo;
  
!     strSymlinkInfo = strFile + _T("\t") + strSymlink;
  
      return strSymlinkInfo;
  }       
  
! BOOL IsPathInAfs(const CString & strPath)
  {
      struct ViceIoctl blob;
      int code;
  
      HOURGLASS hourglass;
  
!     CString debugBuf;
! 
!     debugBuf.Format(_T("IsPathInAfs(%s)"), strPath);
!     OutputDebugString(debugBuf);
  
      blob.in_size = 0;
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl_T(strPath, VIOC_FILE_CELL_NAME, &blob, 1);
  
!     debugBuf.Format(_T("VIOC_FILE_CELL_NAME=%d"), code);
!     OutputDebugString(debugBuf);
  
      if (code) {
  	if ((errno == EINVAL) || (errno == ENOENT))
***************
*** 1094,1100 ****
  }
  
  static int 
! IsFreelanceRoot(char *apath)
  {
      struct ViceIoctl blob;
      afs_int32 code;
--- 1177,1183 ----
  }
  
  static int 
! IsFreelanceRoot(const CString& apath)
  {
      struct ViceIoctl blob;
      afs_int32 code;
***************
*** 1103,1115 ****
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl(apath, VIOC_FILE_CELL_NAME, &blob, 1);
      if (code == 0)
          return !strcmp("Freelance.Local.Root",space);
      return 1;   /* assume it is because it is more restrictive that way */
  }
  
! const char * NetbiosName(void)
  {
      static char buffer[1024] = "AFS";
      HKEY  parmKey;
--- 1186,1198 ----
      blob.out_size = MAXSIZE;
      blob.out = space;
  
!     code = pioctl_T(apath, VIOC_FILE_CELL_NAME, &blob, 1);
      if (code == 0)
          return !strcmp("Freelance.Local.Root",space);
      return 1;   /* assume it is because it is more restrictive that way */
  }
  
! static const char * NetbiosName(void)
  {
      static char buffer[1024] = "AFS";
      HKEY  parmKey;
***************
*** 1117,1127 ****
      DWORD dummyLen;
      DWORD enabled = 0;
  
!     code = RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY,
                           0, (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &parmKey);
      if (code == ERROR_SUCCESS) {
          dummyLen = sizeof(buffer);
!         code = RegQueryValueEx(parmKey, "NetbiosName", NULL, NULL,
  			       (LPBYTE)buffer, &dummyLen);
          RegCloseKey (parmKey);
      } else {
--- 1200,1210 ----
      DWORD dummyLen;
      DWORD enabled = 0;
  
!     code = RegOpenKeyExA(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY,
                           0, (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &parmKey);
      if (code == ERROR_SUCCESS) {
          dummyLen = sizeof(buffer);
!         code = RegQueryValueExA(parmKey, "NetbiosName", NULL, NULL,
  			       (LPBYTE)buffer, &dummyLen);
          RegCloseKey (parmKey);
      } else {
***************
*** 1130,1135 ****
--- 1213,1236 ----
      return buffer;
  }
  
+ static void FixNetbiosPath(CString& path)
+ {
+     if (!IsPathInAfs(path)) {
+         CString nbroot;
+         const char * nbname = NetbiosName();
+ 
+ #ifdef UNICODE
+         nbroot.Format(_T("\\\\%S\\"), nbname);
+ #else
+         nbroot.Format(_T("\\\\%s\\"), nbname);
+ #endif
+ 
+         if (nbroot.CompareNoCase(path) == 0) {
+             path.Append(_T("all\\"));
+         }
+     }
+ }
+ 
  #define AFSCLIENT_ADMIN_GROUPNAME "AFS Client Admins"
  
  static BOOL IsAdmin (void)
***************
*** 1144,1151 ****
           */
          PSID psidAdmin = NULL;
          DWORD dwSize, dwSize2;
!         char pszAdminGroup[ MAX_COMPUTERNAME_LENGTH + sizeof(AFSCLIENT_ADMIN_GROUPNAME) + 2 ];
!         char *pszRefDomain = NULL;
          SID_NAME_USE snu = SidTypeGroup;
  
          dwSize = sizeof(pszAdminGroup);
--- 1245,1252 ----
           */
          PSID psidAdmin = NULL;
          DWORD dwSize, dwSize2;
!         TCHAR pszAdminGroup[ MAX_COMPUTERNAME_LENGTH + sizeof(AFSCLIENT_ADMIN_GROUPNAME) + 2 ];
!         TCHAR *pszRefDomain = NULL;
          SID_NAME_USE snu = SidTypeGroup;
  
          dwSize = sizeof(pszAdminGroup);
***************
*** 1159,1166 ****
          dwSize = 0;
          dwSize2 = 0;
  
!         strcat(pszAdminGroup,"\\");
!         strcat(pszAdminGroup, AFSCLIENT_ADMIN_GROUPNAME);
  
          LookupAccountName(NULL, pszAdminGroup, NULL, &dwSize, NULL, &dwSize2, &snu);
          /* that should always fail. */
--- 1260,1267 ----
          dwSize = 0;
          dwSize2 = 0;
  
!         lstrcat(pszAdminGroup, _T("\\"));
!         lstrcat(pszAdminGroup, _T(AFSCLIENT_ADMIN_GROUPNAME));
  
          LookupAccountName(NULL, pszAdminGroup, NULL, &dwSize, NULL, &dwSize2, &snu);
          /* that should always fail. */
***************
*** 1178,1184 ****
          }
  
          psidAdmin = (PSID)malloc(dwSize); memset(psidAdmin,0,dwSize);
!         pszRefDomain = (char *)malloc(dwSize2);
  
          if (!LookupAccountName(NULL, pszAdminGroup, psidAdmin, &dwSize, pszRefDomain, &dwSize2, &snu)) {
              /* We can't lookup the group now even though we looked it up earlier.  
--- 1279,1285 ----
          }
  
          psidAdmin = (PSID)malloc(dwSize); memset(psidAdmin,0,dwSize);
!         pszRefDomain = (TCHAR *)malloc(dwSize2);
  
          if (!LookupAccountName(NULL, pszAdminGroup, psidAdmin, &dwSize, pszRefDomain, &dwSize2, &snu)) {
              /* We can't lookup the group now even though we looked it up earlier.  
***************
*** 1265,1300 ****
      return fAdmin;
  }
  
! /* return a static pointer to a buffer */
! static char *Parent(char *apath)
  {
!     register char *tp;
  
!     strcpy(tspace, apath);
!     tp = strrchr(tspace, '\\');
!     if (tp) {
!         *(tp+1) = 0;	/* lv trailing slash so Parent("k:\foo") is "k:\" not "k:" */
      }
-     else {
-         fs_ExtractDriveLetter(apath, tspace);
-     	strcat(tspace, ".");
      }
      
!     return tspace;
  }
  
! static afs_int32
! GetCell(char *fname, char *cellname)
  {
      afs_int32 code;
      struct ViceIoctl blob;
  
      blob.in_size = 0;
!     blob.out_size = MAXCELLCHARS;
      blob.out = cellname;
  
!     code = pioctl(fname, VIOC_FILE_CELL_NAME, &blob, 1);
!     return code ? errno : 0;
  }
  
  
--- 1366,1428 ----
      return fAdmin;
  }
  
! CString Parent(const CString& path)
  {
!     int last_slash = path.ReverseFind(_T('\\'));
  
!     if (last_slash != -1) {
!         CString ret = path.Left(last_slash + 1);
!         return ret;
!     } else {
!         if (path.GetLength() >= 2 && path[1] == _T(':')) {
!             CString ret = path.Left(2);
!             ret.AppendChar(_T('.'));
!             return ret;
!         } else {
!             CString ret = _T(".");
!             return ret;
!         }
      }
      }
      
! CString LastComponent(const CString& path)
! {
!     int last_slash = path.ReverseFind(_T('\\'));
! 
!     if (last_slash != -1) {
!         CString ret = path.Mid(last_slash + 1);
!         return ret;
!     } else {
!         if (path.GetLength() >= 2 && path[1] == _T(':')) {
!             CString ret = path.Mid(2);
!             return ret;
!         } else {
!             CString ret = path;
!             return ret;
!         }
!     }
  }
  
! static CString
! GetCell(const CString & path)
  {
+     char cellname[MAXCELLCHARS];
      afs_int32 code;
      struct ViceIoctl blob;
  
      blob.in_size = 0;
!     blob.out_size = sizeof(cellname);
      blob.out = cellname;
  
!     code = pioctl_T(path, VIOC_FILE_CELL_NAME, &blob, 1);
!     if (code) {
!         CString s;
!         s.Empty();
! 
!         return s;
!     } else {
!         return Utf8ToCString(cellname);
!     }
  }
  
  
***************
*** 1303,1312 ****
      register LONG code;
      struct ViceIoctl blob;
      int error;
!     char orig_name[1024];			/* Original name, may be modified */
!     char true_name[1024];			/* ``True'' dirname (e.g., symlink target) */
!     char parent_dir[1024];			/* Parent directory of true name */
!     register char *last_component;	/* Last component of true name */
      CStringArray mountPoints;
      
      HOURGLASS hourglass;
--- 1431,1440 ----
      register LONG code;
      struct ViceIoctl blob;
      int error;
! 
!     CString parent_dir;		/* Parent directory of true name */
!     CStringUtf8 last_component;	        /* Last component of true name */
! 
      CStringArray mountPoints;
      
      HOURGLASS hourglass;
***************
*** 1314,1371 ****
      error = 0;
  
      for (int i = 0; i < files.GetSize(); i++) {
!         strcpy(orig_name, files[i]);
!         strcpy(true_name, orig_name);
  
!         /*
!          * Find rightmost slash, if any.
!          */
!         last_component = (char *)strrchr(true_name, '\\');
!         if (last_component) {
!             /*
!              * Found it.  Designate everything before it as the parent directory,
!              * everything after it as the final component.
!              */
!             strncpy(parent_dir, true_name, last_component - true_name + 1);
!             parent_dir[last_component - true_name + 1] = 0;
!             last_component++;   /* Skip the slash */
! 
! 	    if (!IsPathInAfs(parent_dir)) {
! 		const char * nbname = NetbiosName();
! 		int len = strlen(nbname);
! 
! 		if (parent_dir[0] == '\\' && parent_dir[1] == '\\' &&
! 		    parent_dir[len+2] == '\\' &&
! 		    parent_dir[len+3] == '\0' &&
! 		    !strnicmp(nbname,&parent_dir[2],len))
! 		{
! 		    sprintf(parent_dir,"\\\\%s\\all\\", nbname);
! 		}
  	    }
          }
-         else {
-             /*
-              * No slash appears in the given file name.  Set parent_dir to the current
-              * directory, and the last component as the given name.
-              */
-             fs_ExtractDriveLetter(true_name, parent_dir);
-             strcat(parent_dir, ".");
-             last_component = true_name;
-             fs_StripDriveLetter(true_name, true_name, sizeof(true_name));
-         }
  
!         blob.in = last_component;
!         blob.in_size = strlen(last_component) + 1;
          blob.out_size = MAXSIZE;
          blob.out = space;
          memset(space, 0, MAXSIZE);
  
!         code = pioctl(parent_dir, VIOC_AFS_STAT_MT_PT, &blob, 1);
          if (code == 0) {
              int nPos = strlen(space) - 1;
              if (space[nPos] == '.')
                  space[nPos] = 0;
!             mountPoints.Add(ParseMountPoint(StripPath(files[i]), space));
          } else {
              error = 1;
              if (errno == EINVAL)
--- 1442,1482 ----
      error = 0;
  
      for (int i = 0; i < files.GetSize(); i++) {
!         int last_slash = files[i].ReverseFind(_T('\\'));
  
!         if (last_slash != -1) {
!             last_component.SetString( files[i].Mid(last_slash + 1) );
!             parent_dir.SetString( files[i].Left(last_slash + 1) );
!             FixNetbiosPath(parent_dir);
!         } else {
!             // The path is of the form "C:foo" or just "foo".  If
!             // there is a drive, then use the current directory of
!             // that drive.  Otherwise we just use '.'.
! 
!             if (files[i].GetLength() >= 2 && files[i][1] == _T(':')) {
!                 parent_dir.Format(_T("%c:."), files[i][0]);
!                 last_component.SetString( files[i].Mid(2) );
!             } else {
!                 parent_dir.SetString( _T("."));
!                 last_component.SetString( files[i] );
  	    }
          }
  
!         blob.in_size = last_component.GetLength() + 1;
!         blob.in = last_component.GetBuffer();
          blob.out_size = MAXSIZE;
          blob.out = space;
          memset(space, 0, MAXSIZE);
  
!         code = pioctl_T(parent_dir, VIOC_AFS_STAT_MT_PT, &blob, 1);
! 
!         last_component.ReleaseBuffer();
! 
          if (code == 0) {
              int nPos = strlen(space) - 1;
              if (space[nPos] == '.')
                  space[nPos] = 0;
!             mountPoints.Add(ParseMountPoint(StripPath(files[i]), Utf8ToCString(space)));
          } else {
              error = 1;
              if (errno == EINVAL)
***************
*** 1382,1494 ****
      return !error;
  }
  
! BOOL MakeMount(const CString& strDir, const CString& strVolName, const CString& strCellName, BOOL bRW)
  {
!     register LONG code;
!     register char *cellName;
!     char localCellName[128];
!     struct afsconf_cell info;
! #if 0
!     struct vldbentry vldbEntry;
! #endif
      struct ViceIoctl blob;
-     char * parent;
-     char path[1024] = "";
- 
      HOURGLASS hourglass;
  
      ASSERT(strVolName.GetLength() < 64);
  
!     if (strCellName.GetLength() > 0)	/* cell name specified */
!         cellName = PCCHAR(strCellName);
!     else
!         cellName = (char *) 0;
  
!     parent = Parent(PCCHAR(strDir));
!     if (!IsPathInAfs(parent)) {
! 	const char * nbname = NetbiosName();
! 	int len = strlen(nbname);
! 
! 	if (parent[0] == '\\' && parent[1] == '\\' &&
! 	    parent[len+2] == '\\' &&
! 	    parent[len+3] == '\0' &&
! 	    !strnicmp(nbname,&parent[2],len))
! 	{
! 	    sprintf(path,"%sall\\%s", parent, &(PCCHAR(strDir)[strlen(parent)]));
! 	    parent = Parent(path);
! 	    if (!IsPathInAfs(parent)) {
! 		ShowMessageBox(IDS_MAKE_MP_NOT_AFS_ERROR, MB_ICONERROR, IDS_MAKE_MP_NOT_AFS_ERROR);
! 		return FALSE;
! 	    }
! 	} else {
  	    ShowMessageBox(IDS_MAKE_MP_NOT_AFS_ERROR, MB_ICONERROR, IDS_MAKE_MP_NOT_AFS_ERROR);
  	    return FALSE;
  	}
-     }
  
!     if ( strlen(path) == 0 )
! 	strcpy(path, PCCHAR(strDir));
  
!     if ( IsFreelanceRoot(parent) ) {
! 	if ( !IsAdmin() ) {
! 	    ShowMessageBox(IDS_NOT_AFS_CLIENT_ADMIN_ERROR, MB_ICONERROR, IDS_NOT_AFS_CLIENT_ADMIN_ERROR);
  	    return FALSE;
  	}
  
! 	if (!cellName) {
! 	    blob.in_size = 0;
! 	    blob.out_size = sizeof(localCellName);
! 	    blob.out = localCellName;
! 	    code = pioctl(parent, VIOC_GET_WS_CELL, &blob, 1);
! 	    if (!code)
! 		cellName = localCellName;
! 	}
!     } else {
! 	if (!cellName)
! 	    GetCell(parent,space);
!     }
  
!     code = GetCellName(cellName?cellName:space, &info);
!     if (code) {
! 	return FALSE;
!     }
  
! #if 0
!     code = VLDBInit(1, &info);
!     if (code == 0) {
! 	/* make the check.  Don't complain if there are problems with init */
! 	code = ubik_VL_GetEntryByNameO(uclient, 0, PCCHAR(strVolName), &vldbEntry);
! 	if (code == VL_NOENT) {
! 	    ShowMessageBox(IDS_WARNING, MB_ICONWARNING, IDS_VOLUME_NOT_IN_CELL_WARNING, 
! 			    PCCHAR(strVolName), cellName ? cellName : space);
! 	}
!     }
!     if (rxInitDone) 
!         rx_Finalize();
! #endif
! 
!     if (bRW)	/* if -rw specified */
!         strcpy(space, "%");
!     else
!         strcpy(space, "#");
! 
!     /* If cellular mount point, prepend cell prefix */
!     if (cellName) {
!         strcat(space, info.name);
!         strcat(space, ":");
!     }   
! 
!     strcat(space, strVolName);	/* append volume name */
!     strcat(space, ".");		/* stupid convention; these end with a period */
  
-     /* create symlink with a special pioctl for Windows NT, since it doesn't
-      * have a symlink system call.
-      */
      blob.out_size = 0;
!     blob.in_size = 1 + strlen(space);
!     blob.in = space;
      blob.out = NULL;
!     code = pioctl(path, VIOC_AFS_CREATE_MT_PT, &blob, 0);
  
      if (code) {
          ShowMessageBox(IDS_MOUNT_POINT_ERROR, MB_ICONERROR, IDS_MOUNT_POINT_ERROR, GetAfsError(errno, strDir));
--- 1493,1544 ----
      return !error;
  }
  
! BOOL
! MakeMount(const CString& strDir,
!           const CString& strVolName,
!           const CString& strInCellName,
!           BOOL bRW)
  {
!     LONG code;
      struct ViceIoctl blob;
      HOURGLASS hourglass;
  
      ASSERT(strVolName.GetLength() < 64);
  
!     CString strParent = Parent(strDir);
  
!     FixNetbiosPath(strParent);
!     if (!IsPathInAfs(strParent)) {
  	    ShowMessageBox(IDS_MAKE_MP_NOT_AFS_ERROR, MB_ICONERROR, IDS_MAKE_MP_NOT_AFS_ERROR);
  	    return FALSE;
  	}
  
!     CString strPath = strParent + LastComponent(strDir);
  
!     if ( IsFreelanceRoot(strParent) && !IsAdmin() ) {
!         ShowMessageBox(IDS_NOT_AFS_CLIENT_ADMIN_ERROR, MB_ICONERROR,
!                        IDS_NOT_AFS_CLIENT_ADMIN_ERROR);
  	    return FALSE;
  	}
  
!     CString strMount;
  
!     strMount.Format(_T("%c%s%s%s."),
!                     ((bRW)?_T('%'):_T('#')),
!                     strInCellName,
!                     ((strInCellName.IsEmpty())?_T(""):_T(":")),
!                     strVolName);
  
!     CStringUtf8 ustrMount(strMount);
  
      blob.out_size = 0;
!     blob.in_size = ustrMount.GetLength() + 1;
!     blob.in = ustrMount.GetBuffer();
      blob.out = NULL;
! 
!     code = pioctl_T(strPath, VIOC_AFS_CREATE_MT_PT, &blob, 0);
! 
!     ustrMount.ReleaseBuffer();
  
      if (code) {
          ShowMessageBox(IDS_MOUNT_POINT_ERROR, MB_ICONERROR, IDS_MOUNT_POINT_ERROR, GetAfsError(errno, strDir));
***************
*** 1530,1707 ****
  }       
  
  
! BOOL RemoveSymlink(const char * linkName)
  {
      BOOL error = FALSE;
      INT code=0;
      struct ViceIoctl blob;
-     char tbuffer[1024];
      char lsbuffer[1024];
-     char tpbuffer[1024];
-     char *tp;
      
      HOURGLASS hourglass;
  
!     tp = (char *) strrchr(linkName, '\\');
!     if (!tp)
!         tp = (char *) strrchr(linkName, '/');
!     if (tp) {
!         strncpy(tbuffer, linkName, code=tp-linkName+1);  /* the dir name */
!         tbuffer[code] = 0;
!         tp++;   /* skip the slash */
! 
! 	if (!IsPathInAfs(tbuffer)) {
! 	    const char * nbname = NetbiosName();
! 	    int len = strlen(nbname);
! 
! 	    if (tbuffer[0] == '\\' && tbuffer[1] == '\\' &&
! 		 tbuffer[len+2] == '\\' &&
! 		 tbuffer[len+3] == '\0' &&
! 		 !strnicmp(nbname,&tbuffer[2],len))
! 	    {
! 		sprintf(tbuffer,"\\\\%s\\all\\", nbname);
! 	    }
! 	}
!     }
!     else {
!         fs_ExtractDriveLetter(linkName, tbuffer);
!         strcat(tbuffer, ".");
!         fs_StripDriveLetter(tp, tpbuffer, 0);
!         tp=tpbuffer;
!     }
  
!     if ( IsFreelanceRoot(tbuffer) && !IsAdmin() ) {
  	ShowMessageBox(IDS_NOT_AFS_CLIENT_ADMIN_ERROR, MB_ICONERROR, IDS_NOT_AFS_CLIENT_ADMIN_ERROR);
  	return FALSE;
      }
  
!     blob.in = tp;
!     blob.in_size = strlen(tp)+1;
      blob.out = lsbuffer;
      blob.out_size = sizeof(lsbuffer);
!     code = pioctl(tbuffer, VIOC_LISTSYMLINK, &blob, 0);
      if (code)
          return FALSE;
      blob.out_size = 0;
!     blob.in = tp;
!     blob.in_size = strlen(tp)+1;
!     return (pioctl(tbuffer, VIOC_DELSYMLINK, &blob, 0)==0);
  }       
  
! BOOL IsSymlink(const char * true_name)
  {
-     char parent_dir[MAXSIZE];		/*Parent directory of true name*/
-     char strip_name[MAXSIZE];
      struct ViceIoctl blob;
-     char *last_component;
      int code;
  
      HOURGLASS hourglass;
  
-     char buf[512];
-     sprintf(buf, "IsSymlink(%s)", true_name);
-     OutputDebugString(buf);
- 
-     last_component = (char *) strrchr(true_name, '\\');
-     if (!last_component)
-         last_component = (char *) strrchr(true_name, '/');
-     if (last_component) {
-         /*
-          * Found it.  Designate everything before it as the parent directory,
-          * everything after it as the final component.
-          */
-         strncpy(parent_dir, true_name, last_component - true_name + 1);
-         parent_dir[last_component - true_name + 1] = 0;
-         last_component++;   /*Skip the slash*/
- 
- 	if (!IsPathInAfs(parent_dir)) {
- 	    const char * nbname = NetbiosName();
- 	    int len = strlen(nbname);
- 
- 	    if (parent_dir[0] == '\\' && parent_dir[1] == '\\' &&
- 		 parent_dir[len+2] == '\\' &&
- 		 parent_dir[len+3] == '\0' &&
- 		 !strnicmp(nbname,&parent_dir[2],len))
  	    {
! 		sprintf(parent_dir,"\\\\%s\\all\\", nbname);
! 	    }
! 	}
!     }
!     else {
!         /*
!          * No slash appears in the given file name.  Set parent_dir to the current
!          * directory, and the last component as the given name.
!          */
!         fs_ExtractDriveLetter(true_name, parent_dir);
!         strcat(parent_dir, ".");
!         last_component = strip_name;
!         fs_StripDriveLetter(true_name, strip_name, sizeof(strip_name));
      }
  
!     sprintf(buf, "last_component=%s", last_component);
!     OutputDebugString(buf);
  
!     blob.in = last_component;
!     blob.in_size = strlen(last_component)+1;
      blob.out_size = MAXSIZE;
      blob.out = space;
      memset(space, 0, MAXSIZE);
!     code = pioctl(parent_dir, VIOC_LISTSYMLINK, &blob, 1);
      return (code==0);
  }       
  
  
! BOOL IsMountPoint(const char * name)
  {
      register LONG code = 0;
      struct ViceIoctl blob;
-     char tbuffer[1024];
      char lsbuffer[1024];
-     register char *tp;
-     char szCurItem[1024];
  
      HOURGLASS hourglass;
  
!     strcpy(szCurItem, name);
! 	
!     char buf[512];
!     sprintf(buf, "IsMountPoint(%s)", name);
!     OutputDebugString(buf);
! 
!     tp = (char *)strrchr(szCurItem, '\\');
!     if (tp) {
!         strncpy(tbuffer, szCurItem, code = tp - szCurItem + 1);  /* the dir name */
!         tbuffer[code] = 0;
!         tp++;   /* skip the slash */
  
! 	if (!IsPathInAfs(tbuffer)) {
! 	    const char * nbname = NetbiosName();
! 	    int len = strlen(nbname);
  
- 	    if (tbuffer[0] == '\\' && tbuffer[1] == '\\' &&
- 		 tbuffer[len+2] == '\\' &&
- 		 tbuffer[len+3] == '\0' &&
- 		 !strnicmp(nbname,&tbuffer[2],len))
  	    {
! 		sprintf(tbuffer,"\\\\%s\\all\\", nbname);
! 	    }
! 	}
!     } else {
!         fs_ExtractDriveLetter(szCurItem, tbuffer);
!         strcat(tbuffer, ".");
!         tp = szCurItem;
!         fs_StripDriveLetter(tp, tp, 0);
      }
  
!     sprintf(buf, "last_component=%s", tp);
!     OutputDebugString(buf);
! 
!     blob.in = tp;
!     blob.in_size = strlen(tp)+1;
      blob.out = lsbuffer;
      blob.out_size = sizeof(lsbuffer);
  
!     code = pioctl(tbuffer, VIOC_AFS_STAT_MT_PT, &blob, 0);
  
      return (code==0);
  }       
--- 1580,1691 ----
  }       
  
  
! BOOL RemoveSymlink(const CString& strName)
  {
      BOOL error = FALSE;
      INT code=0;
      struct ViceIoctl blob;
      char lsbuffer[1024];
      
      HOURGLASS hourglass;
  
!     CString strParent = Parent(strName);
!     CStringUtf8 ustrLast(LastComponent(strName));
!     FixNetbiosPath(strParent);
  
!     if ( IsFreelanceRoot(strParent) && !IsAdmin() ) {
  	ShowMessageBox(IDS_NOT_AFS_CLIENT_ADMIN_ERROR, MB_ICONERROR, IDS_NOT_AFS_CLIENT_ADMIN_ERROR);
  	return FALSE;
      }
  
!     blob.in_size = ustrLast.GetLength() + 1;
!     blob.in = ustrLast.GetBuffer();
      blob.out = lsbuffer;
      blob.out_size = sizeof(lsbuffer);
!     code = pioctl_T(strParent, VIOC_LISTSYMLINK, &blob, 0);
!     ustrLast.ReleaseBuffer();
      if (code)
          return FALSE;
      blob.out_size = 0;
!     blob.in_size = ustrLast.GetLength() + 1;
!     blob.in = ustrLast.GetBuffer();
! 
!     code = pioctl_T(strParent, VIOC_DELSYMLINK, &blob, 0);
! 
!     ustrLast.ReleaseBuffer();
! 
!     return (code == 0);
  }       
  
! BOOL IsSymlink(const CString& strName)
  {
      struct ViceIoctl blob;
      int code;
  
      HOURGLASS hourglass;
  
  	    {
!         CString str;
!         str.Format(_T("IsSymlink(%s)"), strName);
!         OutputDebugString(str);
      }
  
!     CStringUtf8 ustrLast(LastComponent(strName));
!     CString strParent = Parent(strName);
  
!     FixNetbiosPath(strParent);
! 
!     blob.in_size = ustrLast.GetLength() + 1;
!     blob.in = ustrLast.GetBuffer();
      blob.out_size = MAXSIZE;
      blob.out = space;
      memset(space, 0, MAXSIZE);
! 
!     code = pioctl_T(strParent, VIOC_LISTSYMLINK, &blob, 1);
! 
!     ustrLast.ReleaseBuffer();
! 
      return (code==0);
  }       
  
  
! BOOL IsMountPoint(const CString& path)
  {
      register LONG code = 0;
      struct ViceIoctl blob;
      char lsbuffer[1024];
  
      HOURGLASS hourglass;
  
!     {
!         CString str;
!         str.Format(_T("IsMountPoint(%s)"), path);
!         OutputDebugString(str);
!     }
  
!     CString parent = Parent(path);
!     FixNetbiosPath(parent);
! 
!     CStringUtf8 mountpoint(LastComponent(path));
  
  	    {
!         CString str;
! #ifdef UNICODE
!         str.Format(_T("last_component=%S"), mountpoint);
! #else
!         str.Format(_T("last_component=%s"), mountpoint);
! #endif
!         OutputDebugString(str);
      }
  
!     blob.in_size = mountpoint.GetLength() + 1;
!     blob.in = mountpoint.GetBuffer();
      blob.out = lsbuffer;
      blob.out_size = sizeof(lsbuffer);
  
!     code = pioctl_T(parent, VIOC_AFS_STAT_MT_PT, &blob, 0);
! 
!     mountpoint.ReleaseBuffer();
  
      return (code==0);
  }       
***************
*** 1717,1725 ****
  {
      register LONG code = 0;
      struct ViceIoctl blob;
-     char tbuffer[1024];
-     register char *tp;
-     char szCurItem[1024];
      BOOL error = FALSE;
      CStringArray results;
      CString str;
--- 1701,1706 ----
***************
*** 1737,1780 ****
              continue;	// don't bother trying
          }
  
!         strcpy(szCurItem, files[i]);
! 	
!         tp = (char *)strrchr(szCurItem, '\\');
!         if (tp) {
!             strncpy(tbuffer, szCurItem, code = tp - szCurItem + 1);  /* the dir name */
!             tbuffer[code] = 0;
!             tp++;   /* skip the slash */
! 
! 	    if (!IsPathInAfs(tbuffer)) {
! 		const char * nbname = NetbiosName();
! 		int len = strlen(nbname);
! 
! 		if (tbuffer[0] == '\\' && tbuffer[1] == '\\' &&
! 		    tbuffer[len+2] == '\\' &&
! 		    tbuffer[len+3] == '\0' &&
! 		    !strnicmp(nbname,&tbuffer[2],len))
! 		{
! 		    sprintf(tbuffer,"\\\\%s\\all\\", nbname);
! 		}
! 	    }
!         } else {
!             fs_ExtractDriveLetter(szCurItem, tbuffer);
!             strcat(tbuffer, ".");
!             tp = szCurItem;
!             fs_StripDriveLetter(tp, tp, 0);
!         }
  
! 	if ( IsFreelanceRoot(tbuffer) && !IsAdmin() ) {
  	    results.Add(GetMessageString(IDS_NOT_AFS_CLIENT_ADMIN_ERROR, StripPath(files[i])));
              error = TRUE;
              continue;   /* skip */
          }
  
          blob.out_size = 0;
!         blob.in = tp;
!         blob.in_size = strlen(tp)+1;
  
-         code = pioctl(tbuffer, VIOC_AFS_DELETE_MT_PT, &blob, 0);
          if (code) {
              error = TRUE;
              results.Add(GetMessageString(IDS_ERROR, GetAfsError(errno, StripPath(files[i]))));
--- 1718,1741 ----
              continue;	// don't bother trying
          }
  
!         CString parent = Parent(files[i]);
!         CStringUtf8 mountpoint(LastComponent(files[i]));
!         FixNetbiosPath(parent);
  
!         if ( IsFreelanceRoot(parent) && !IsAdmin() ) {
  	    results.Add(GetMessageString(IDS_NOT_AFS_CLIENT_ADMIN_ERROR, StripPath(files[i])));
              error = TRUE;
              continue;   /* skip */
          }
  
          blob.out_size = 0;
!         blob.in_size = mountpoint.GetLength() + 1;
!         blob.in = mountpoint.GetBuffer();
! 
!         code = pioctl_T(parent, VIOC_AFS_DELETE_MT_PT, &blob, 0);
! 
!         mountpoint.ReleaseBuffer();
  
          if (code) {
              error = TRUE;
              results.Add(GetMessageString(IDS_ERROR, GetAfsError(errno, StripPath(files[i]))));
***************
*** 1819,1825 ****
      blob.in_size = 0;
      blob.out = space;
  
!     code = pioctl(PCCHAR(strFile), VIOCGETVOLSTAT, &blob, 1);
      if (code) {
          volInfo.m_strErrorMsg = GetAfsError(errno, strFile);
          return FALSE;
--- 1780,1786 ----
      blob.in_size = 0;
      blob.out = space;
  
!     code = pioctl_T(strFile, VIOCGETVOLSTAT, &blob, 1);
      if (code) {
          volInfo.m_strErrorMsg = GetAfsError(errno, strFile);
          return FALSE;
***************
*** 1828,1834 ****
      status = (VolumeStatus *)space;
      name = (char *)status + sizeof(*status);
  
!     volInfo.m_strName = name;
      volInfo.m_nID = status->Vid;
      volInfo.m_nQuota = status->MaxQuota;
      volInfo.m_nNewQuota = status->MaxQuota;
--- 1789,1795 ----
      status = (VolumeStatus *)space;
      name = (char *)status + sizeof(*status);
  
!     volInfo.m_strName = Utf8ToCString(name);
      volInfo.m_nID = status->Vid;
      volInfo.m_nQuota = status->MaxQuota;
      volInfo.m_nNewQuota = status->MaxQuota;
***************
*** 1878,1884 ****
      }
  #endif
  
!     code = pioctl(PCCHAR(volInfo.m_strFilePath), VIOCSETVOLSTAT, &blob, 1);
      if (code) {
          ShowMessageBox(IDS_SET_QUOTA_ERROR, MB_ICONERROR, IDS_SET_QUOTA_ERROR, GetAfsError(errno, volInfo.m_strName));
          return FALSE;
--- 1839,1845 ----
      }
  #endif
  
!     code = pioctl_T(volInfo.m_strFilePath, VIOCSETVOLSTAT, &blob, 1);
      if (code) {
          ShowMessageBox(IDS_SET_QUOTA_ERROR, MB_ICONERROR, IDS_SET_QUOTA_ERROR, GetAfsError(errno, volInfo.m_strName));
          return FALSE;
***************
*** 1887,1896 ****
      return TRUE;
  }
  
! int GetCellName(char *cellNamep, struct afsconf_cell *infop)
  {
!     strcpy(infop->name, cellNamep);
!     return 0;
  }
  
  BOOL CheckServers(const CString& strCellName, WHICH_CELLS nCellsToCheck, BOOL bFast)
--- 1848,1858 ----
      return TRUE;
  }
  
! void GetCellName(const CString& cellNamep, struct afsconf_cell *infop)
  {
!     CStringUtf8 uCellName(cellNamep);
! 
!     StringCbCopyA(infop->name, sizeof(infop->name), uCellName);
  }
  
  BOOL CheckServers(const CString& strCellName, WHICH_CELLS nCellsToCheck, BOOL bFast)
***************
*** 1914,1920 ****
  
      if (nCellsToCheck == SPECIFIC_CELL) {
  	temp = 2;
!         GetCellName(PCCHAR(strCellName), &info);
          strcpy(checkserv.tbuffer,info.name);
          checkserv.tsize = strlen(info.name) + 1;
      } else {
--- 1876,1882 ----
  
      if (nCellsToCheck == SPECIFIC_CELL) {
  	temp = 2;
!         GetCellName(strCellName, &info);
          strcpy(checkserv.tbuffer,info.name);
          checkserv.tsize = strlen(info.name) + 1;
      } else {
***************
*** 1930,1936 ****
      checkserv.tflags = temp;
      checkserv.tinterval = -1;	/* don't change current interval */
  
!     code = pioctl(0, VIOCCKSERV, &blob, 1);
      if (code) {
          ShowMessageBox(IDS_CHECK_SERVERS_ERROR, MB_ICONERROR, IDS_CHECK_SERVERS_ERROR, GetAfsError(errno, CString()));
          return FALSE;
--- 1892,1898 ----
      checkserv.tflags = temp;
      checkserv.tinterval = -1;	/* don't change current interval */
  
!     code = pioctl_utf8(0, VIOCCKSERV, &blob, 1);
      if (code) {
          ShowMessageBox(IDS_CHECK_SERVERS_ERROR, MB_ICONERROR, IDS_CHECK_SERVERS_ERROR, GetAfsError(errno, CString()));
          return FALSE;
***************
*** 2046,2052 ****
                  expireString += 4;	 /* Skip day of week */
                  expireString[12] = '\0'; /* Omit secs & year */
  //		printf("[Expires %s]\n", expireString);
!                 strExpir.Format("%s", expireString);
              }
  
              strTokenInfo = strUserName + "\t" + strCellName + "\t" + strExpir + "\t" + strCellName;
--- 2008,2018 ----
                  expireString += 4;	 /* Skip day of week */
                  expireString[12] = '\0'; /* Omit secs & year */
  //		printf("[Expires %s]\n", expireString);
! #ifdef UNICODE
!                 strExpir.Format(_T("%S"), expireString);
! #else
!                 strExpir.Format(_T("%s"), expireString);
! #endif
              }
  
              strTokenInfo = strUserName + "\t" + strCellName + "\t" + strExpir + "\t" + strCellName;
***************
*** 2059,2098 ****
      return TRUE;
  }
  
! UINT MakeSymbolicLink(const char *strName, const char *strTarget)
  {
      struct ViceIoctl blob;
-     char space[MAXSIZE];
-     char * parent;
-     char path[1024] = "";
      UINT code;
- 
      HOURGLASS hourglass;
-     static char message[2048];
  
!     strcpy(path, strName);
!     parent = Parent(path);
  
!     sprintf(message,"MakeSymbolicLink: name = %s target = %s parent = %s\n",strName,strTarget, parent);
!     OutputDebugString(message);
  
!     if ( IsFreelanceRoot(parent) && !IsAdmin() ) {
  	ShowMessageBox(IDS_NOT_AFS_CLIENT_ADMIN_ERROR, MB_ICONERROR, IDS_NOT_AFS_CLIENT_ADMIN_ERROR);
  	return FALSE;
      }
  
!     LPTSTR lpsz = new TCHAR[strlen(strTarget)+1];
!     _tcscpy(lpsz, strName);
!     strcpy(space, strTarget);
      blob.out_size = 0;
-     blob.in_size = 1 + strlen(space);
-     blob.in = space;
      blob.out = NULL;
!     code=pioctl(lpsz, VIOC_SYMLINK, &blob, 0);
!     delete lpsz;
      if (code != 0)
          return code;
!     return FALSE;
  }
  
  void ListSymbolicLinkPath(const char *strName,char *strPath,UINT nlenPath)
--- 2025,2065 ----
      return TRUE;
  }
  
! UINT MakeSymbolicLink(const CString& strName, const CString& strTarget)
  {
      struct ViceIoctl blob;
      UINT code;
      HOURGLASS hourglass;
  
!     CString strParent = Parent(strName);
!     FixNetbiosPath(strParent);
  
!     {
!         CString str;
!         str.Format(_T("MakeSymbolicLink: name = %s target = %s parent = %s\n"),
!                    strName, strTarget, strParent);
!         OutputDebugString(str);
!     }
  
!     if ( IsFreelanceRoot(strParent) && !IsAdmin() ) {
  	ShowMessageBox(IDS_NOT_AFS_CLIENT_ADMIN_ERROR, MB_ICONERROR, IDS_NOT_AFS_CLIENT_ADMIN_ERROR);
  	return FALSE;
      }
  
!     CStringUtf8 ustrTarget(strTarget);
! 
!     blob.in_size = ustrTarget.GetLength() + 1;
!     blob.in = ustrTarget.GetBuffer();
      blob.out_size = 0;
      blob.out = NULL;
! 
!     code = pioctl_T(strName, VIOC_SYMLINK, &blob, 0);
! 
!     ustrTarget.ReleaseBuffer();
! 
      if (code != 0)
          return code;
!     return 0;
  }
  
  void ListSymbolicLinkPath(const char *strName,char *strPath,UINT nlenPath)
***************
*** 2163,2172 ****
      register LONG code;
      struct ViceIoctl blob;
      int error;
-     char orig_name[1024];			/* Original name, may be modified */
-     char true_name[1024];			/* ``True'' dirname (e.g., symlink target) */
-     char parent_dir[1024];			/* Parent directory of true name */
-     register char *last_component;	/* Last component of true name */
      CStringArray symlinks;
      
      HOURGLASS hourglass;
--- 2130,2135 ----
***************
*** 2174,2231 ****
      error = 0;
  
      for (int i = 0; i < files.GetSize(); i++) {
-         strcpy(orig_name, files[i]);
-         strcpy(true_name, orig_name);
  
!         /*
!          * Find rightmost slash, if any.
!          */
!         last_component = (char *)strrchr(true_name, '\\');
!         if (last_component) {
!             /*
!              * Found it.  Designate everything before it as the parent directory,
!              * everything after it as the final component.
!              */
!             strncpy(parent_dir, true_name, last_component - true_name + 1);
!             parent_dir[last_component - true_name + 1] = 0;
!             last_component++;   /* Skip the slash */
! 
! 	    if (!IsPathInAfs(parent_dir)) {
! 		const char * nbname = NetbiosName();
! 		int len = strlen(nbname);
! 
! 		if (parent_dir[0] == '\\' && parent_dir[1] == '\\' &&
! 		    parent_dir[len+2] == '\\' &&
! 		    parent_dir[len+3] == '\0' &&
! 		    !strnicmp(nbname,&parent_dir[2],len))
! 		{
! 		    sprintf(parent_dir,"\\\\%s\\all\\", nbname);
! 		}
! 	    }
!         }
!         else {
!             /*
!              * No slash appears in the given file name.  Set parent_dir to the current
!              * directory, and the last component as the given name.
!              */
!             fs_ExtractDriveLetter(true_name, parent_dir);
!             strcat(parent_dir, ".");
!             last_component = true_name;
!             fs_StripDriveLetter(true_name, true_name, sizeof(true_name));
!         }
  
!         blob.in = last_component;
!         blob.in_size = strlen(last_component) + 1;
          blob.out_size = MAXSIZE;
          blob.out = space;
          memset(space, 0, MAXSIZE);
  
!         code = pioctl(parent_dir, VIOC_LISTSYMLINK, &blob, 1);
          if (code == 0) {
!             int nPos = strlen(space) - 1;
!             if (space[nPos] == '.')
!                 space[nPos] = 0;
!             symlinks.Add(ParseSymlink(StripPath(files[i]), space));
          } else {
              error = 1;
              if (errno == EINVAL)
--- 2137,2169 ----
      error = 0;
  
      for (int i = 0; i < files.GetSize(); i++) {
  
!         CString strParent = Parent(files[i]);
!         CStringUtf8 ustrLast(LastComponent(files[i]));
! 
!         FixNetbiosPath(strParent);
  
!         blob.in_size = ustrLast.GetLength() + 1;
!         blob.in = ustrLast.GetBuffer();
          blob.out_size = MAXSIZE;
          blob.out = space;
          memset(space, 0, MAXSIZE);
  
!         code = pioctl_T(strParent, VIOC_LISTSYMLINK, &blob, 1);
! 
!         ustrLast.ReleaseBuffer();
! 
          if (code == 0) {
!             CString syml = Utf8ToCString(space);
!             int len = syml.GetLength();
! 
!             if (len > 0) {
!                 if (syml[len - 1] == _T('.'))
!                     syml.Truncate(len - 1);
!             }
! 
!             symlinks.Add(ParseSymlink(StripPath(files[i]), syml));
! 
          } else {
              error = 1;
              if (errno == EINVAL)
Index: openafs/src/WINNT/client_exp/gui2fs.h
diff -c openafs/src/WINNT/client_exp/gui2fs.h:1.7.4.1 openafs/src/WINNT/client_exp/gui2fs.h:1.7.4.2
*** openafs/src/WINNT/client_exp/gui2fs.h:1.7.4.1	Sat Jan 12 18:31:24 2008
--- openafs/src/WINNT/client_exp/gui2fs.h	Fri May  9 11:10:13 2008
***************
*** 18,26 ****
  void WhichCell(CStringArray& files);
  BOOL CheckVolumes();
  void SetCacheSize(LONG nNewCacheSize);
- void RemoveMountCmd(const CStringArray& files);
  void WhereIs(CStringArray& files);
! CString GetAfsError(int code, const char *filename = 0);
  void CleanACL(CStringArray& names);
  BOOL GetRights(const CString& strDir, CStringArray& strNormal, CStringArray& strNegative);
  BOOL SaveACL(const CString& strCellName, const CString& strDir, const CStringArray& normal, const CStringArray& negative);
--- 18,25 ----
  void WhichCell(CStringArray& files);
  BOOL CheckVolumes();
  void SetCacheSize(LONG nNewCacheSize);
  void WhereIs(CStringArray& files);
! CString GetAfsError(int code, const TCHAR *filename = 0);
  void CleanACL(CStringArray& names);
  BOOL GetRights(const CString& strDir, CStringArray& strNormal, CStringArray& strNegative);
  BOOL SaveACL(const CString& strCellName, const CString& strDir, const CStringArray& normal, const CStringArray& negative);
***************
*** 28,47 ****
  BOOL ListMount(CStringArray& files);
  BOOL MakeMount(const CString& strDir, const CString& strVolName, const CString& strCellName, BOOL bRW);
  BOOL RemoveMount(CStringArray& files);
! BOOL RemoveSymlink(const char *);
  BOOL GetVolumeInfo(CString strFile, CVolInfo& volInfo);
  BOOL SetVolInfo(CVolInfo& volInfo);
  enum WHICH_CELLS { LOCAL_CELL = 0, SPECIFIC_CELL = 1, ALL_CELLS = 2 };
  BOOL CheckServers(const CString& strCellName, WHICH_CELLS nCellsToCheck, BOOL bFast);
  BOOL GetTokenInfo(CStringArray& tokenInfo);
! BOOL IsPathInAfs(const CHAR *strPath);
! int GetCellName(char *baseNamep, struct afsconf_cell *infop);
! long fs_StripDriveLetter(const char *inPathp, char *outPathp, long outSize);
! long fs_ExtractDriveLetter(const char *inPathp, char *outPathp);
! BOOL IsSymlink(const char * true_name);
! BOOL IsMountPoint(const char * name);
! UINT MakeSymbolicLink(const char *,const char *);
! void ListSymbolicLinkPath(const char *strName,char *strPath,UINT nlenPath);
  BOOL ListSymlink(CStringArray& files);
- const char * NetbiosName(void);
  #endif //__GUI2FS_H__
--- 27,42 ----
  BOOL ListMount(CStringArray& files);
  BOOL MakeMount(const CString& strDir, const CString& strVolName, const CString& strCellName, BOOL bRW);
  BOOL RemoveMount(CStringArray& files);
! BOOL RemoveSymlink(const CString& symlink);
  BOOL GetVolumeInfo(CString strFile, CVolInfo& volInfo);
  BOOL SetVolInfo(CVolInfo& volInfo);
  enum WHICH_CELLS { LOCAL_CELL = 0, SPECIFIC_CELL = 1, ALL_CELLS = 2 };
  BOOL CheckServers(const CString& strCellName, WHICH_CELLS nCellsToCheck, BOOL bFast);
  BOOL GetTokenInfo(CStringArray& tokenInfo);
! BOOL IsPathInAfs(const CString& strPath);
! BOOL IsSymlink(const CString& name);
! BOOL IsMountPoint(const CString& name);
! UINT MakeSymbolicLink(const CString&,const CString&);
! void ListSymbolicLinkPath(CString&,CString&,UINT nlenPath);
  BOOL ListSymlink(CStringArray& files);
  #endif //__GUI2FS_H__
Index: openafs/src/WINNT/client_exp/help.cpp
diff -c openafs/src/WINNT/client_exp/help.cpp:1.2 openafs/src/WINNT/client_exp/help.cpp:1.2.32.1
*** openafs/src/WINNT/client_exp/help.cpp:1.2	Sat Nov  4 05:02:52 2000
--- openafs/src/WINNT/client_exp/help.cpp	Fri May  9 11:10:13 2008
***************
*** 41,50 ****
  }
  
  
! 
! void SetHelpPath(const char *pszDefaultHelpFilePath)
  {
! 	CString str = pszDefaultHelpFilePath;
  	int nIndex = str.ReverseFind('\\');
  	ASSERT(nIndex >= 0);
  
--- 41,49 ----
  }
  
  
! void SetHelpPath(LPCTSTR pszDefaultHelpFilePath)
  {
!     CString str(pszDefaultHelpFilePath);
  	int nIndex = str.ReverseFind('\\');
  	ASSERT(nIndex >= 0);
  
Index: openafs/src/WINNT/client_exp/help.h
diff -c openafs/src/WINNT/client_exp/help.h:1.2.32.1 openafs/src/WINNT/client_exp/help.h:1.2.32.2
*** openafs/src/WINNT/client_exp/help.h:1.2.32.1	Sat Jan 12 18:31:24 2008
--- openafs/src/WINNT/client_exp/help.h	Fri May  9 11:10:13 2008
***************
*** 34,39 ****
  #define EDIT_PATH_NAME_HELP_ID		46
  #define SYMLINK_HELP_ID                 47
  
! void SetHelpPath(const char *pszDefaultHelpFilePath);
  void ShowHelp(HWND hWnd, DWORD nHelpID);
  
--- 34,39 ----
  #define EDIT_PATH_NAME_HELP_ID		46
  #define SYMLINK_HELP_ID                 47
  
! void SetHelpPath(LPCTSTR pszDefaultHelpFilePath);
  void ShowHelp(HWND hWnd, DWORD nHelpID);
  
Index: openafs/src/WINNT/client_exp/hourglass.h
diff -c openafs/src/WINNT/client_exp/hourglass.h:1.3 openafs/src/WINNT/client_exp/hourglass.h:1.3.14.1
*** openafs/src/WINNT/client_exp/hourglass.h:1.3	Fri Nov 21 02:59:58 2003
--- openafs/src/WINNT/client_exp/hourglass.h	Fri May  9 11:10:13 2008
***************
*** 15,21 ****
        HCURSOR m_OldCursor;
  
     public:
!       HOURGLASS (LPCSTR idCursor = IDC_WAIT)
        {
           m_OldCursor = GetCursor();
           SetCursor (LoadCursor (NULL, idCursor));
--- 15,21 ----
        HCURSOR m_OldCursor;
  
     public:
!       HOURGLASS (LPTSTR idCursor = IDC_WAIT)
        {
           m_OldCursor = GetCursor();
           SetCursor (LoadCursor (NULL, idCursor));
Index: openafs/src/WINNT/client_exp/klog_dlg.cpp
diff -c openafs/src/WINNT/client_exp/klog_dlg.cpp:1.2 openafs/src/WINNT/client_exp/klog_dlg.cpp:1.2.32.1
*** openafs/src/WINNT/client_exp/klog_dlg.cpp:1.2	Sat Nov  4 05:02:52 2000
--- openafs/src/WINNT/client_exp/klog_dlg.cpp	Fri May  9 11:10:13 2008
***************
*** 28,44 ****
  static char THIS_FILE[] = __FILE__;
  #endif
  
  #define PCCHAR(str)	((char *)(const char *)str)
! 
  
  /////////////////////////////////////////////////////////////////////////////
  // CKlogDlg dialog
  
! int kl_Authenticate(const CString& strCellName, const CString& strName, const CString& strPassword, char **reason)
  {
  	afs_int32 pw_exp;
  
! 	return ka_UserAuthenticateGeneral(KA_USERAUTH_VERSION, PCCHAR(strName), "", PCCHAR(strCellName), PCCHAR(strPassword), 0, &pw_exp, 0, reason);
  }
  
  CKlogDlg::CKlogDlg(CWnd* pParent /*=NULL*/)
--- 28,58 ----
  static char THIS_FILE[] = __FILE__;
  #endif
  
+ #ifdef UNICODE
+ CStringA CStringToCStringA(const CString& str)
+ {
+     CStringA astr(str);
+     return astr;
+ }
+ #define PCCHAR(str)     ((char *)(const char *)CStringToCStringA(str))
+ #else
  #define PCCHAR(str)	((char *)(const char *)str)
! #endif
  
  /////////////////////////////////////////////////////////////////////////////
  // CKlogDlg dialog
  
! int kl_Authenticate(const CString& strCellName, const CString& strName,
!                     const CString& strPassword, char **reason)
  {
  	afs_int32 pw_exp;
  
! 	return ka_UserAuthenticateGeneral(KA_USERAUTH_VERSION,
!                                           PCCHAR(strName), "",
!                                           PCCHAR(strCellName),
!                                           PCCHAR(strPassword),
!                                           0,
!                                           &pw_exp, 0, reason);
  }
  
  CKlogDlg::CKlogDlg(CWnd* pParent /*=NULL*/)
***************
*** 85,91 ****
  		char defaultCell[256];
  		long code = cm_GetRootCellName(defaultCell);
  		if (code < 0)
! 			AfxMessageBox("Error determining root cell name.");
  		else
  			m_strCellName = defaultCell;
  	}
--- 99,105 ----
  		char defaultCell[256];
  		long code = cm_GetRootCellName(defaultCell);
  		if (code < 0)
!                     AfxMessageBox(_T("Error determining root cell name."));
  		else
  			m_strCellName = defaultCell;
  	}
***************
*** 104,110 ****
  	HOURGLASS hg;
  
  	if (kl_Authenticate(m_strCellName, m_strName, m_strPassword, &reason)) {
! 		AfxMessageBox(reason);
  		return;
  	}
  
--- 118,125 ----
  	HOURGLASS hg;
  
  	if (kl_Authenticate(m_strCellName, m_strName, m_strPassword, &reason)) {
!             CString strReason(reason);
!             AfxMessageBox(strReason);
  		return;
  	}
  
Index: openafs/src/WINNT/client_exp/msgs.cpp
diff -c openafs/src/WINNT/client_exp/msgs.cpp:1.2.32.1 openafs/src/WINNT/client_exp/msgs.cpp:1.2.32.2
*** openafs/src/WINNT/client_exp/msgs.cpp:1.2.32.1	Tue Jan 30 07:42:43 2007
--- openafs/src/WINNT/client_exp/msgs.cpp	Fri May  9 11:10:13 2008
***************
*** 12,18 ****
  #include <afs/stds.h>
  }
  
! #include <string.h>
  #include <stdarg.h>
  
  #include "stdafx.h"
--- 12,18 ----
  #include <afs/stds.h>
  }
  
! #include <tchar.h>
  #include <stdarg.h>
  
  #include "stdafx.h"
***************
*** 58,191 ****
  UINT ShowMessageBox (UINT Id, UINT Button, UINT Help, ...) {
  
      CString temp;
!     char *pszstring, 
      *pszpaste, 
      *pszcut, 
      *pszdone,
      *pszconvert;
!     char chread;
      va_list params;
      int x;
  
!     pszconvert = new char[255];    	
      va_start(params, Help);
      LoadString (temp, Id);
      pszstring = temp.GetBuffer(512);
!     strcpy(pszstring,pszstring);
      temp.ReleaseBuffer();
      // Look and see - is there a need to insert chars (95% of the time, there won't)
!     if (!strstr(pszstring, "%")) {
  	delete pszconvert;
  	return AfxMessageBox(pszstring, Button, Help);
      }   
  
!     x = strcspn(pszstring, "%");
!     pszdone = new char[512];
!     pszcut = new char[512];
!     pszpaste = new char[512];
!     strcpy(pszcut, &pszstring[x+2]);
!     strncpy(pszpaste, pszstring, x);
!     pszpaste[x] = '\0';
      chread = pszstring[x+1];
  
      for ( ; ; ) {
  
  	switch (chread) { 
! 	case	'i' :
! 	case	'd' :
  	{ 	    
  	    int anint = va_arg(params, int);
! 	    _itoa( anint, pszconvert, 10);
  	    break;
  	}
! 	case	'u' :
  	{	
  	    UINT anuint = va_arg(params, UINT);
! 	    _itoa( anuint, pszconvert, 10);
  	    break;
  	}
  
! 	case	'x' :
! 	case	'X' :   
  	{
  	    int ahex = va_arg(params, int);
! 	    _itoa( ahex, pszconvert, 16);
  	    break;
  	}
! 	case	'g' :
! 	case	'f' :
! 	case	'e' :   
  	{
  	    double adbl = va_arg(params, double);
! 	    _gcvt( adbl, 10, pszconvert);
  	    break;
  	}
! 	case	's' :	
  	{
! 	    char *pStr = va_arg(params, char*);
! 	    ASSERT(strlen(pStr) <= 255);
! 	    strcpy(pszconvert, pStr);
  	    break;
  	}
! 	case	'l' :	
  	{
  	    chread = pszdone[x+2];
  	    switch(chread) {
! 	    case	'x'	:
  	    {
  		long int alhex = va_arg(params, long int);
! 		_ltoa(alhex, pszconvert, 16);
! 		strcpy(pszcut, &pszcut[1]);
  		break;
  	    }
! 	    case 	'd'	:
  		default 	:
  		{
  		    long int along = va_arg(params, long int);
! 		    _ltoa( along, pszconvert, 10);
  		    // For the L, there will be one character after it,
  		    //   so move ahead another letter
! 		    strcpy(pszcut, &pszcut[1]);
  		    break;
  		}
  	    }
  	    break;
  	}
  
! 	case	'c' :	
  	{
  	    int letter = va_arg(params, int);
! 	    pszconvert[0] = (char)letter;
  	    pszconvert[1] = '\0'; 
  	    break;
  	}
! 	case 	'a'	:
  	{
  	    CString zeta;
! 	    char* lsc;
  	    UINT ls = va_arg(params, UINT);
  	    LoadString (zeta, ls);
  	    lsc = zeta.GetBuffer(255);
! 	    strcpy(pszconvert, lsc);
  	    zeta.ReleaseBuffer();
  	    break;
  	}
! 	case	'o'	:
  	{
  	    CString get = va_arg(params, CString);
! 	    char* ex = get.GetBuffer(255);
! 	    strcpy(pszconvert,ex);
  	    get.ReleaseBuffer();
  	    break;
  	}
  	    default 	:
  	    {	
! 		strcpy(pszconvert, " Could not load message. Invalid %type in string table entry. ");
  		delete pszdone;
! 		pszdone = new char[strlen(pszpaste)+strlen(pszcut)+strlen(pszconvert)+5];
! 		strcpy(pszdone, pszpaste);
! 		strcat(pszdone, pszconvert);
! 		strcat(pszdone, pszcut);
  		AfxMessageBox(pszdone, Button, Help);
  		delete pszcut;
  		delete pszpaste;
--- 58,191 ----
  UINT ShowMessageBox (UINT Id, UINT Button, UINT Help, ...) {
  
      CString temp;
!     TCHAR *pszstring, 
      *pszpaste, 
      *pszcut, 
      *pszdone,
      *pszconvert;
!     TCHAR chread;
      va_list params;
      int x;
  
!     pszconvert = new TCHAR[255];    	
      va_start(params, Help);
      LoadString (temp, Id);
      pszstring = temp.GetBuffer(512);
!     _tcscpy(pszstring,pszstring);
      temp.ReleaseBuffer();
      // Look and see - is there a need to insert chars (95% of the time, there won't)
!     if (!_tcsstr(pszstring, _T("%"))) {
  	delete pszconvert;
  	return AfxMessageBox(pszstring, Button, Help);
      }   
  
!     x = _tcscspn(pszstring, _T("%"));
!     pszdone = new TCHAR[512];
!     pszcut = new TCHAR[512];
!     pszpaste = new TCHAR[512];
!     _tcscpy(pszcut, &pszstring[x+2]);
!     _tcsncpy(pszpaste, pszstring, x);
!     pszpaste[x] = _T('\0');
      chread = pszstring[x+1];
  
      for ( ; ; ) {
  
  	switch (chread) { 
! 	case	_T('i') :
! 	case	_T('d') :
  	{ 	    
  	    int anint = va_arg(params, int);
! 	    _itot( anint, pszconvert, 10);
  	    break;
  	}
! 	case	_T('u') :
  	{	
  	    UINT anuint = va_arg(params, UINT);
! 	    _itot( anuint, pszconvert, 10);
  	    break;
  	}
  
! 	case	_T('x') :
! 	case	_T('X') :   
  	{
  	    int ahex = va_arg(params, int);
! 	    _itot( ahex, pszconvert, 16);
  	    break;
  	}
! 	case	_T('g') :
! 	case	_T('f') :
! 	case	_T('e') :   
  	{
  	    double adbl = va_arg(params, double);
!             _stprintf(pszconvert, _T("%g"), adbl);
  	    break;
  	}
! 	case	_T('s') :	
  	{
! 	    TCHAR *pStr = va_arg(params, TCHAR*);
! 	    ASSERT(_tcslen(pStr) <= 255);
! 	    _tcscpy(pszconvert, pStr);
  	    break;
  	}
! 	case	_T('l') :	
  	{
  	    chread = pszdone[x+2];
  	    switch(chread) {
! 	    case	_T('x')	:
  	    {
  		long int alhex = va_arg(params, long int);
! 		_ltot(alhex, pszconvert, 16);
! 		_tcscpy(pszcut, &pszcut[1]);
  		break;
  	    }
! 	    case 	_T('d')	:
  		default 	:
  		{
  		    long int along = va_arg(params, long int);
! 		    _ltot( along, pszconvert, 10);
  		    // For the L, there will be one character after it,
  		    //   so move ahead another letter
! 		    _tcscpy(pszcut, &pszcut[1]);
  		    break;
  		}
  	    }
  	    break;
  	}
  
! 	case	_T('c') :	
  	{
  	    int letter = va_arg(params, int);
! 	    pszconvert[0] = (TCHAR)letter;
  	    pszconvert[1] = '\0'; 
  	    break;
  	}
! 	case 	_T('a')	:
  	{
  	    CString zeta;
! 	    TCHAR* lsc;
  	    UINT ls = va_arg(params, UINT);
  	    LoadString (zeta, ls);
  	    lsc = zeta.GetBuffer(255);
! 	    _tcscpy(pszconvert, lsc);
  	    zeta.ReleaseBuffer();
  	    break;
  	}
! 	case	_T('o')	:
  	{
  	    CString get = va_arg(params, CString);
! 	    TCHAR* ex = get.GetBuffer(255);
! 	    _tcscpy(pszconvert,ex);
  	    get.ReleaseBuffer();
  	    break;
  	}
  	    default 	:
  	    {	
! 		_tcscpy(pszconvert, _T(" Could not load message. Invalid %type in string table entry. "));
  		delete pszdone;
! 		pszdone = new TCHAR[_tcslen(pszpaste)+_tcslen(pszcut)+_tcslen(pszconvert)+5];
! 		_tcscpy(pszdone, pszpaste);
! 		_tcscat(pszdone, pszconvert);
! 		_tcscat(pszdone, pszcut);
  		AfxMessageBox(pszdone, Button, Help);
  		delete pszcut;
  		delete pszpaste;
***************
*** 197,210 ****
  	} // case
  
  	delete pszdone;
! 	pszdone = new char[strlen(pszpaste)+strlen(pszcut)+strlen(pszconvert)+5];
! 	strcpy(pszdone, pszpaste);
! 	strcat(pszdone, pszconvert);
! 	strcat(pszdone, pszcut);
  	// Now pszdone holds the entire message.
  	// Check to see if there are more insertions to be made or not
  	
! 	if (!strstr(pszdone, "%"))	{
  	    UINT rt_type = AfxMessageBox(pszdone, Button, Help);
  	    delete pszcut;
  	    delete pszpaste;
--- 197,210 ----
  	} // case
  
  	delete pszdone;
! 	pszdone = new TCHAR[_tcslen(pszpaste)+_tcslen(pszcut)+_tcslen(pszconvert)+5];
! 	_tcscpy(pszdone, pszpaste);
! 	_tcscat(pszdone, pszconvert);
! 	_tcscat(pszdone, pszcut);
  	// Now pszdone holds the entire message.
  	// Check to see if there are more insertions to be made or not
  	
! 	if (!_tcsstr(pszdone, _T("%")))	{
  	    UINT rt_type = AfxMessageBox(pszdone, Button, Help);
  	    delete pszcut;
  	    delete pszpaste;
***************
*** 214,223 ****
  	} // if
  
  	// there are more insertions to make, prepare the strings to use.
! 	x = strcspn(pszdone, "%");
! 	strcpy(pszcut, &pszdone[x+2]);
! 	strncpy(pszpaste, pszdone, x); 
! 	pszpaste[x] = '\0';
  	chread = pszdone[x+1];
  	
      } // for
--- 214,223 ----
  	} // if
  
  	// there are more insertions to make, prepare the strings to use.
! 	x = _tcscspn(pszdone, _T("%"));
! 	_tcscpy(pszcut, &pszdone[x+2]);
! 	_tcsncpy(pszpaste, pszdone, x); 
! 	pszpaste[x] = _T('\0');
  	chread = pszdone[x+1];
  	
      } // for
***************
*** 229,365 ****
  CString GetMessageString(UINT Id, ...)
  {
      CString temp;
!     char *pszstring, 
      *pszpaste, 
      *pszcut, 
      *pszdone,
      *pszconvert;
!     char chread;
      va_list params;
      int x;
      CString strMsg;
  
!     pszconvert = new char[255];    	
      va_start(params, Id);
      LoadString (temp, Id);
      pszstring = temp.GetBuffer(512);
!     strcpy(pszconvert,pszstring);
      temp.ReleaseBuffer();
  
      // Look and see - is there a need to insert chars (95% of the time, there won't)
!     if (!strstr(pszstring, "%")) {
  	strMsg = pszconvert;
  	delete pszconvert;
  	return strMsg;
      }   
  
!     x = strcspn(pszstring, "%");
!     pszdone = new char[512];
!     pszcut = new char[512];
!     pszpaste = new char[512];
!     strcpy(pszcut, &pszstring[x+2]);
!     strncpy(pszpaste, pszstring, x);
!     pszpaste[x] = '\0';
      chread = pszstring[x+1];
  
      for ( ; ; ) {
  
  	switch (chread) { 
! 	case	'i' :
! 	case	'd' :
  	{ 	    
  	    int anint = va_arg(params, int);
! 	    _itoa( anint, pszconvert, 10);
  	    break;
  	}
! 	case	'u' :
  	{	
  	    UINT anuint = va_arg(params, UINT);
! 	    _itoa( anuint, pszconvert, 10);
  	    break;
  	}
  
! 	case	'x' :
! 	case	'X' :   
  	{
  	    int ahex = va_arg(params, int);
! 	    _itoa( ahex, pszconvert, 16);
  	    break;
  	}
! 	case	'g' :
! 	case	'f' :
! 	case	'e' :   
  	{
  	    double adbl = va_arg(params, double);
! 	    _gcvt( adbl, 10, pszconvert);
  	    break;
  	}
! 	case	's' :	
  	{
! 	    char *pStr = va_arg(params, char*);
! 	    ASSERT(strlen(pStr) <= 255);
! 	    strcpy(pszconvert, pStr);
  	    break;
  	}
! 	case	'l' :	
  	{
  	    chread = pszdone[x+2];
  	    switch(chread) {
! 	    case	'x'	:
  	    {
  		long int alhex = va_arg(params, long int);
! 		_ltoa(alhex, pszconvert, 16);
! 		strcpy(pszcut, &pszcut[1]);
  		break;
  	    }
! 	    case 	'd'	:
  		default 	:
  		{
  		    long int along = va_arg(params, long int);
! 		    _ltoa( along, pszconvert, 10);
  		    // For the L, there will be one character after it,
  		    //   so move ahead another letter
! 		    strcpy(pszcut, &pszcut[1]);
  		    break;
  		}
  	    }
  	    break;
  	}	
  
! 	case	'c' :	
  	{
  	    int letter = va_arg(params, int);
! 	    pszconvert[0] = (char)letter;
! 	    pszconvert[1] = '\0'; 
  	    break;
  	}
! 	case 	'a'	:
  	{
  	    CString zeta;
! 	    char* lsc;
  	    UINT ls = va_arg(params, UINT);
  	    LoadString (zeta, ls);
  	    lsc = zeta.GetBuffer(255);
! 	    strcpy(pszconvert, lsc);
  	    zeta.ReleaseBuffer();
  	    break;
  	}
! 	case	'o'	:
  	{
  	    CString get = va_arg(params, CString);
! 	    char* ex = get.GetBuffer(255);
! 	    strcpy(pszconvert,ex);
  	    get.ReleaseBuffer();
  	    break;
  	}
  	default:
  	    {	
! 		strcpy(pszconvert, " Could not load message. Invalid %type in string table entry. ");
  		delete pszdone;
! 		pszdone = new char[strlen(pszpaste)+strlen(pszcut)+strlen(pszconvert)+5];
! 		strcpy(pszdone, pszpaste);
! 		strcat(pszdone, pszconvert);
! 		strcat(pszdone, pszcut);
  		strMsg = pszdone;
  		delete pszcut;
  		delete pszpaste;
--- 229,365 ----
  CString GetMessageString(UINT Id, ...)
  {
      CString temp;
!     TCHAR *pszstring, 
      *pszpaste, 
      *pszcut, 
      *pszdone,
      *pszconvert;
!     TCHAR chread;
      va_list params;
      int x;
      CString strMsg;
  
!     pszconvert = new TCHAR[255];    	
      va_start(params, Id);
      LoadString (temp, Id);
      pszstring = temp.GetBuffer(512);
!     _tcscpy(pszconvert,pszstring);
      temp.ReleaseBuffer();
  
      // Look and see - is there a need to insert chars (95% of the time, there won't)
!     if (!_tcsstr(pszstring, _T("%"))) {
  	strMsg = pszconvert;
  	delete pszconvert;
  	return strMsg;
      }   
  
!     x = _tcscspn(pszstring, _T("%"));
!     pszdone = new TCHAR[512];
!     pszcut = new TCHAR[512];
!     pszpaste = new TCHAR[512];
!     _tcscpy(pszcut, &pszstring[x+2]);
!     _tcsncpy(pszpaste, pszstring, x);
!     pszpaste[x] = _T('\0');
      chread = pszstring[x+1];
  
      for ( ; ; ) {
  
  	switch (chread) { 
! 	case	_T('i') :
! 	case	_T('d') :
  	{ 	    
  	    int anint = va_arg(params, int);
! 	    _itot( anint, pszconvert, 10);
  	    break;
  	}
! 	case	_T('u') :
  	{	
  	    UINT anuint = va_arg(params, UINT);
! 	    _itot( anuint, pszconvert, 10);
  	    break;
  	}
  
! 	case	_T('x') :
! 	case	_T('X') :   
  	{
  	    int ahex = va_arg(params, int);
! 	    _itot( ahex, pszconvert, 16);
  	    break;
  	}
! 	case	_T('g') :
! 	case	_T('f') :
! 	case	_T('e') :   
  	{
  	    double adbl = va_arg(params, double);
!             _stprintf(pszconvert, _T("%g"), adbl);
  	    break;
  	}
! 	case	_T('s') :	
  	{
! 	    TCHAR *pStr = va_arg(params, TCHAR*);
! 	    ASSERT(_tcslen(pStr) <= 255);
! 	    _tcscpy(pszconvert, pStr);
  	    break;
  	}
! 	case	_T('l') :	
  	{
  	    chread = pszdone[x+2];
  	    switch(chread) {
! 	    case	_T('x')	:
  	    {
  		long int alhex = va_arg(params, long int);
! 		_ltot(alhex, pszconvert, 16);
! 		_tcscpy(pszcut, &pszcut[1]);
  		break;
  	    }
! 	    case 	_T('d')	:
  		default 	:
  		{
  		    long int along = va_arg(params, long int);
! 		    _ltot( along, pszconvert, 10);
  		    // For the L, there will be one character after it,
  		    //   so move ahead another letter
! 		    _tcscpy(pszcut, &pszcut[1]);
  		    break;
  		}
  	    }
  	    break;
  	}	
  
! 	case	_T('c') :	
  	{
  	    int letter = va_arg(params, int);
! 	    pszconvert[0] = (TCHAR)letter;
! 	    pszconvert[1] = _T('\0'); 
  	    break;
  	}
! 	case 	_T('a')	:
  	{
  	    CString zeta;
! 	    TCHAR* lsc;
  	    UINT ls = va_arg(params, UINT);
  	    LoadString (zeta, ls);
  	    lsc = zeta.GetBuffer(255);
! 	    _tcscpy(pszconvert, lsc);
  	    zeta.ReleaseBuffer();
  	    break;
  	}
! 	case	_T('o')	:
  	{
  	    CString get = va_arg(params, CString);
! 	    TCHAR* ex = get.GetBuffer(255);
! 	    _tcscpy(pszconvert,ex);
  	    get.ReleaseBuffer();
  	    break;
  	}
  	default:
  	    {	
! 		_tcscpy(pszconvert, _T(" Could not load message. Invalid %type in string table entry. "));
  		delete pszdone;
! 		pszdone = new TCHAR[_tcslen(pszpaste)+_tcslen(pszcut)+_tcslen(pszconvert)+5];
! 		_tcscpy(pszdone, pszpaste);
! 		_tcscat(pszdone, pszconvert);
! 		_tcscat(pszdone, pszcut);
  		strMsg = pszdone;
  		delete pszcut;
  		delete pszpaste;
***************
*** 371,384 ****
  	} // case
  
  	delete pszdone;
! 	pszdone = new char[strlen(pszpaste)+strlen(pszcut)+strlen(pszconvert)+5];
! 	strcpy(pszdone, pszpaste);
! 	strcat(pszdone, pszconvert);
! 	strcat(pszdone, pszcut);
  	// Now pszdone holds the entire message.
  	// Check to see if there are more insertions to be made or not
  	
! 	if (!strstr(pszdone, "%"))	{
  	    strMsg = pszdone;
  	    delete pszcut;
  	    delete pszpaste;
--- 371,384 ----
  	} // case
  
  	delete pszdone;
! 	pszdone = new TCHAR[_tcslen(pszpaste)+_tcslen(pszcut)+_tcslen(pszconvert)+5];
! 	_tcscpy(pszdone, pszpaste);
! 	_tcscat(pszdone, pszconvert);
! 	_tcscat(pszdone, pszcut);
  	// Now pszdone holds the entire message.
  	// Check to see if there are more insertions to be made or not
  	
! 	if (!_tcsstr(pszdone, _T("%")))	{
  	    strMsg = pszdone;
  	    delete pszcut;
  	    delete pszpaste;
***************
*** 388,397 ****
  	} // if
  
  	// there are more insertions to make, prepare the strings to use.
! 	x = strcspn(pszdone, "%");
! 	strcpy(pszcut, &pszdone[x+2]);
! 	strncpy(pszpaste, pszdone, x); 
! 	pszpaste[x] = '\0';
  	chread = pszdone[x+1];
  	
      } // for
--- 388,397 ----
  	} // if
  
  	// there are more insertions to make, prepare the strings to use.
! 	x = _tcscspn(pszdone, _T("%"));
! 	_tcscpy(pszcut, &pszdone[x+2]);
! 	_tcsncpy(pszpaste, pszdone, x); 
! 	pszpaste[x] = _T('\0');
  	chread = pszdone[x+1];
  	
      } // for
***************
*** 401,408 ****
  
  void LoadString (CString &Str, UINT id)
  {
!     TCHAR szString[ 256 ];
      GetString (szString, id);
      Str = szString;
  }
  
--- 401,415 ----
  
  void LoadString (CString &Str, UINT id)
  {
!     extern EXPORTED void GetString (LPSTR pszTarget, int idsSource, int cchMax = cchRESOURCE);
! 
!     char szString[ 256 ];
      GetString (szString, id);
+ #ifdef UNICODE
+     CString wstr(szString);
+     Str = wstr;
+ #else
      Str = szString;
+ #endif
  }
  
Index: openafs/src/WINNT/client_exp/partition_info_dlg.cpp
diff -c openafs/src/WINNT/client_exp/partition_info_dlg.cpp:1.3 openafs/src/WINNT/client_exp/partition_info_dlg.cpp:1.3.14.1
*** openafs/src/WINNT/client_exp/partition_info_dlg.cpp:1.3	Thu Feb 26 14:22:48 2004
--- openafs/src/WINNT/client_exp/partition_info_dlg.cpp	Fri May  9 11:10:13 2008
***************
*** 66,83 ****
  	ASSERT(m_nSize != 0);
  
  	CString strSize;
! 	strSize.Format("%ld", m_nSize);
  	
  	CString strFree;
! 	strFree.Format("%ld", m_nFree);
  	
  	CString strPerUsed;
! 	strPerUsed.Format("%d", ((m_nSize - m_nFree) * 100) / m_nSize);
  
  	m_Size.SetWindowText(strSize);
  	m_Free.SetWindowText(strFree);
      percentUsed = ( double(m_nSize - m_nFree) * 100.0l ) / double(m_nSize);
!     strPerUsed.Format("%2.2lf", percentUsed );
  
  	return TRUE;  // return TRUE unless you set the focus to a control
  	              // EXCEPTION: OCX Property Pages should return FALSE
--- 66,83 ----
  	ASSERT(m_nSize != 0);
  
  	CString strSize;
! 	strSize.Format(_T("%ld"), m_nSize);
  	
  	CString strFree;
! 	strFree.Format(_T("%ld"), m_nFree);
  	
  	CString strPerUsed;
! 	strPerUsed.Format(_T("%d"), ((m_nSize - m_nFree) * 100) / m_nSize);
  
  	m_Size.SetWindowText(strSize);
  	m_Free.SetWindowText(strFree);
      percentUsed = ( double(m_nSize - m_nFree) * 100.0l ) / double(m_nSize);
!     strPerUsed.Format(_T("%2.2lf"), percentUsed );
  
  	return TRUE;  // return TRUE unless you set the focus to a control
  	              // EXCEPTION: OCX Property Pages should return FALSE
Index: openafs/src/WINNT/client_exp/set_afs_acl.cpp
diff -c openafs/src/WINNT/client_exp/set_afs_acl.cpp:1.4 openafs/src/WINNT/client_exp/set_afs_acl.cpp:1.4.4.1
*** openafs/src/WINNT/client_exp/set_afs_acl.cpp:1.4	Sat Oct 15 17:45:48 2005
--- openafs/src/WINNT/client_exp/set_afs_acl.cpp	Fri May  9 11:10:13 2008
***************
*** 101,110 ****
  
          int i;
  	for (i = 0; i < m_Normal.GetSize(); i += 2)
! 		m_NormalRights.AddString(m_Normal[i + 1] + "\t" + m_Normal[i]);
  
  	for (i = 0; i < m_Negative.GetSize(); i += 2)
! 		m_NegativeRights.AddString(m_Negative[i + 1] + "\t" + m_Negative[i]);
  
  	CenterWindow();
  
--- 101,110 ----
  
          int i;
  	for (i = 0; i < m_Normal.GetSize(); i += 2)
! 		m_NormalRights.AddString(m_Normal[i + 1] + _T("\t") + m_Normal[i]);
  
  	for (i = 0; i < m_Negative.GetSize(); i += 2)
! 		m_NegativeRights.AddString(m_Negative[i + 1] + _T("\t") + m_Negative[i]);
  
  	CenterWindow();
  
***************
*** 159,171 ****
  	if (bNormal) {
  		m_Normal.Add(name);
  		m_Normal.Add(rights);
! 		m_nCurSel = m_NormalRights.AddString(rights + "\t" + name);
  		m_NormalRights.SetSel(m_nCurSel);
  		m_bShowingNormal = TRUE;
  	} else {
  		m_Negative.Add(name);
  		m_Negative.Add(rights);
! 		m_nCurSel = m_NegativeRights.AddString(rights + "\t" + name);
  		m_NegativeRights.SetSel(m_nCurSel);
  		m_bShowingNormal = FALSE;
  	}
--- 159,171 ----
  	if (bNormal) {
  		m_Normal.Add(name);
  		m_Normal.Add(rights);
! 		m_nCurSel = m_NormalRights.AddString(rights + _T("\t") + name);
  		m_NormalRights.SetSel(m_nCurSel);
  		m_bShowingNormal = TRUE;
  	} else {
  		m_Negative.Add(name);
  		m_Negative.Add(rights);
! 		m_nCurSel = m_NegativeRights.AddString(rights + _T("\t") + name);
  		m_NegativeRights.SetSel(m_nCurSel);
  		m_bShowingNormal = FALSE;
  	}
***************
*** 193,205 ****
  
  void CSetAfsAcl::ShowRights(const CString& strRights)
  {
! 	m_ReadPerm.SetCheck((strRights.Find("r") == -1) ? UNCHECKED : CHECKED);
! 	m_WritePerm.SetCheck((strRights.Find("w") == -1) ? UNCHECKED : CHECKED);
! 	m_LookupPerm.SetCheck((strRights.Find("l") == -1) ? UNCHECKED : CHECKED);
! 	m_DeletePerm.SetCheck((strRights.Find("d") == -1) ? UNCHECKED : CHECKED);
! 	m_InsertPerm.SetCheck((strRights.Find("i") == -1) ? UNCHECKED : CHECKED);
! 	m_LockPerm.SetCheck((strRights.Find("k") == -1) ? UNCHECKED : CHECKED);
! 	m_AdminPerm.SetCheck((strRights.Find("a") == -1) ? UNCHECKED : CHECKED);
  }
  
  void CSetAfsAcl::OnSelChangeNormalRights() 
--- 193,205 ----
  
  void CSetAfsAcl::ShowRights(const CString& strRights)
  {
! 	m_ReadPerm.SetCheck((strRights.Find(_T("r")) == -1) ? UNCHECKED : CHECKED);
! 	m_WritePerm.SetCheck((strRights.Find(_T("w")) == -1) ? UNCHECKED : CHECKED);
! 	m_LookupPerm.SetCheck((strRights.Find(_T("l")) == -1) ? UNCHECKED : CHECKED);
! 	m_DeletePerm.SetCheck((strRights.Find(_T("d")) == -1) ? UNCHECKED : CHECKED);
! 	m_InsertPerm.SetCheck((strRights.Find(_T("i")) == -1) ? UNCHECKED : CHECKED);
! 	m_LockPerm.SetCheck((strRights.Find(_T("k")) == -1) ? UNCHECKED : CHECKED);
! 	m_AdminPerm.SetCheck((strRights.Find(_T("a")) == -1) ? UNCHECKED : CHECKED);
  }
  
  void CSetAfsAcl::OnSelChangeNormalRights() 
***************
*** 210,216 ****
  
  	int nNum = m_NormalRights.GetSelCount();
  	if (nNum != 1) {
! 		ShowRights("");
  		EnablePermChanges(FALSE);
  		return;
  	}
--- 210,216 ----
  
  	int nNum = m_NormalRights.GetSelCount();
  	if (nNum != 1) {
! 		ShowRights(_T(""));
  		EnablePermChanges(FALSE);
  		return;
  	}
***************
*** 233,239 ****
  
  	int nNum = m_NegativeRights.GetSelCount();
  	if (nNum != 1) {
! 		ShowRights("");
  		EnablePermChanges(FALSE);
  		return;
  	}
--- 233,239 ----
  
  	int nNum = m_NegativeRights.GetSelCount();
  	if (nNum != 1) {
! 		ShowRights(_T(""));
  		EnablePermChanges(FALSE);
  		return;
  	}
***************
*** 253,271 ****
  	CString str;
  
  	if (m_ReadPerm.GetCheck() == CHECKED)
! 		str += "r";
  	if (m_LookupPerm.GetCheck() == CHECKED)
! 		str += "l";
  	if (m_InsertPerm.GetCheck() == CHECKED)
! 		str += "i";
  	if (m_DeletePerm.GetCheck() == CHECKED)
! 		str += "d";
  	if (m_WritePerm.GetCheck() == CHECKED)
! 		str += "w";
  	if (m_LockPerm.GetCheck() == CHECKED)
! 		str += "k";
  	if (m_AdminPerm.GetCheck() == CHECKED)
! 		str += "a";
  
  	return str;
  }
--- 253,271 ----
  	CString str;
  
  	if (m_ReadPerm.GetCheck() == CHECKED)
! 		str += _T("r");
  	if (m_LookupPerm.GetCheck() == CHECKED)
! 		str += _T("l");
  	if (m_InsertPerm.GetCheck() == CHECKED)
! 		str += _T("i");
  	if (m_DeletePerm.GetCheck() == CHECKED)
! 		str += _T("d");
  	if (m_WritePerm.GetCheck() == CHECKED)
! 		str += _T("w");
  	if (m_LockPerm.GetCheck() == CHECKED)
! 		str += _T("k");
  	if (m_AdminPerm.GetCheck() == CHECKED)
! 		str += _T("a");
  
  	return str;
  }
***************
*** 287,293 ****
  
  	CString str = MakeRightsString();
  	(*pRights)[(2 * m_nCurSel) + 1] = str;
! 	str += "\t" + (*pRights)[(2 * m_nCurSel)];
  
  	pRightsList->DeleteString(m_nCurSel);
  	pRightsList->InsertString(m_nCurSel, str);
--- 287,293 ----
  
  	CString str = MakeRightsString();
  	(*pRights)[(2 * m_nCurSel) + 1] = str;
! 	str += _T("\t") + (*pRights)[(2 * m_nCurSel)];
  
  	pRightsList->DeleteString(m_nCurSel);
  	pRightsList->InsertString(m_nCurSel, str);
***************
*** 361,367 ****
      {
  	m_NegativeRights.SetSel(i, FALSE);
      }
!     ShowRights("");				// Show no rights
      EnablePermChanges(FALSE);		// Allow no rights changes
      m_Remove.EnableWindow(FALSE);		// Disable remove button
  }
--- 361,367 ----
      {
  	m_NegativeRights.SetSel(i, FALSE);
      }
!     ShowRights(_T(""));				// Show no rights
      EnablePermChanges(FALSE);		// Allow no rights changes
      m_Remove.EnableWindow(FALSE);		// Disable remove button
  }
Index: openafs/src/WINNT/client_exp/shell_ext.cpp
diff -c openafs/src/WINNT/client_exp/shell_ext.cpp:1.12.4.4 openafs/src/WINNT/client_exp/shell_ext.cpp:1.12.4.5
*** openafs/src/WINNT/client_exp/shell_ext.cpp:1.12.4.4	Fri Feb  8 21:32:24 2008
--- openafs/src/WINNT/client_exp/shell_ext.cpp	Fri May  9 11:10:13 2008
***************
*** 51,57 ****
  {
      struct _stat statbuf;
  
!     if (_stat(strName, &statbuf) < 0)
  	return FALSE;
  
      return statbuf.st_mode & _S_IFDIR;
--- 51,57 ----
  {
      struct _stat statbuf;
  
!     if (_tstat(strName, &statbuf) < 0)
  	return FALSE;
  
      return statbuf.st_mode & _S_IFDIR;
***************
*** 76,84 ****
      m_bIsOverlayEnabled=FALSE;
      if (FAILED(hr))
  	m_pAlloc = NULL;
!     RegOpenKeyEx(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY,0, (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &NPKey);
      LSPsize=sizeof(ShellOption);
!     code=RegQueryValueEx(NPKey, "ShellOption", NULL,
  			  &LSPtype, (LPBYTE)&ShellOption, &LSPsize);
      RegCloseKey (NPKey);
      m_bIsOverlayEnabled=((code==0) && (LSPtype==REG_DWORD) && ((ShellOption & OVERLAYENABLED)!=0));
--- 76,84 ----
      m_bIsOverlayEnabled=FALSE;
      if (FAILED(hr))
  	m_pAlloc = NULL;
!     RegOpenKeyExA(HKEY_LOCAL_MACHINE, AFSREG_CLT_SVC_PARAM_SUBKEY,0, (IsWow64()?KEY_WOW64_64KEY:0)|KEY_QUERY_VALUE, &NPKey);
      LSPsize=sizeof(ShellOption);
!     code=RegQueryValueEx(NPKey, _T("ShellOption"), NULL,
  			  &LSPtype, (LPBYTE)&ShellOption, &LSPsize);
      RegCloseKey (NPKey);
      m_bIsOverlayEnabled=((code==0) && (LSPtype==REG_DWORD) && ((ShellOption & OVERLAYENABLED)!=0));
***************
*** 203,213 ****
  	    DeleteMenu (hMenu, iItem, MF_BYPOSITION);
  	    continue;
  	}
! 	if ((!lstrcmp(szItemText,"&Delete"))&&(pThis->m_bIsSymlink)) {	/*this is a symlink - don't present a delete menu!*/
  	    DeleteMenu (hMenu, iItem, MF_BYPOSITION);
  	    continue;
  	}
! 	if ((!lstrcmp(szItemText,"Cu&t"))&&(pThis->m_bIsSymlink)) {	/*same for cut*/
  	    DeleteMenu (hMenu, iItem, MF_BYPOSITION);
  	    continue;
  	}
--- 203,213 ----
  	    DeleteMenu (hMenu, iItem, MF_BYPOSITION);
  	    continue;
  	}
! 	if ((!lstrcmp(szItemText,_T("&Delete")))&&(pThis->m_bIsSymlink)) {	/*this is a symlink - don't present a delete menu!*/
  	    DeleteMenu (hMenu, iItem, MF_BYPOSITION);
  	    continue;
  	}
! 	if ((!lstrcmp(szItemText,_T("Cu&t")))&&(pThis->m_bIsSymlink)) {	/*same for cut*/
  	    DeleteMenu (hMenu, iItem, MF_BYPOSITION);
  	    continue;
  	}
***************
*** 408,414 ****
      }
  
      case IDM_SYMBOLICLINK_ADD: {
! 	CString msg=files.GetAt(0);
  	int i;
  	if ((i=msg.ReverseFind('\\'))>0)
  	    msg=msg.Left(i+1);
--- 408,414 ----
      }
  
      case IDM_SYMBOLICLINK_ADD: {
! 	CStringA msg(files.GetAt(0));
  	int i;
  	if ((i=msg.ReverseFind('\\'))>0)
  	    msg=msg.Left(i+1);
***************
*** 528,534 ****
      CString strMsg;
      LoadString (strMsg, nCmdStrID);
  
!     strncpy(pszName, strMsg, cchMax);
  
      return NOERROR;
  }
--- 528,534 ----
      CString strMsg;
      LoadString (strMsg, nCmdStrID);
  
!     _tcsncpy((LPTSTR) pszName, strMsg, cchMax);
  
      return NOERROR;
  }
***************
*** 655,664 ****
      if(IsBadWritePtr(pdwFlags, sizeof(DWORD)))
  	return E_INVALIDARG;
  
!     HMODULE hModule=GetModuleHandle("shell32.dll");
      TCHAR szModule[MAX_PATH];
      DWORD z=GetModuleFileName(hModule,szModule,sizeof(szModule));
      MultiByteToWideChar( CP_ACP,0,szModule,-1,pwszIconFile,cchMax); 
      *pIndex = 30;
      *pdwFlags = ISIOI_ICONFILE | ISIOI_ICONINDEX;
      return S_OK;
--- 655,668 ----
      if(IsBadWritePtr(pdwFlags, sizeof(DWORD)))
  	return E_INVALIDARG;
  
!     HMODULE hModule=GetModuleHandle(_T("shell32.dll"));
      TCHAR szModule[MAX_PATH];
      DWORD z=GetModuleFileName(hModule,szModule,sizeof(szModule));
+ #ifndef UNICODE
      MultiByteToWideChar( CP_ACP,0,szModule,-1,pwszIconFile,cchMax); 
+ #else
+     _tcsncpy(pwszIconFile, szModule, cchMax);
+ #endif
      *pIndex = 30;
      *pdwFlags = ISIOI_ICONFILE | ISIOI_ICONINDEX;
      return S_OK;
***************
*** 675,681 ****
--- 679,689 ----
  STDMETHODIMP CShellExt::XIconExt::IsMemberOf(LPCWSTR pwszPath,DWORD dwAttrib)
  {
      TCHAR szPath[MAX_PATH];
+ #ifdef UNICODE
+     _tcscpy(szPath, pwszPath);
+ #else
      WideCharToMultiByte( CP_ACP,0,pwszPath,-1,szPath,MAX_PATH,NULL,NULL);
+ #endif
      if (IsSymlink(szPath))
  	return S_OK;
      return S_FALSE;
Index: openafs/src/WINNT/client_exp/shell_ext.h
diff -c openafs/src/WINNT/client_exp/shell_ext.h:1.6.4.1 openafs/src/WINNT/client_exp/shell_ext.h:1.6.4.2
*** openafs/src/WINNT/client_exp/shell_ext.h:1.6.4.1	Tue Jan 30 07:42:43 2007
--- openafs/src/WINNT/client_exp/shell_ext.h	Fri May  9 11:10:13 2008
***************
*** 24,30 ****
  extern ULONG nTPRefCount;	// IQueryInfo ref count
  extern ULONG nXPRefCount;	// IPersistFile ref count
  
! #define STR_EXT_TITLE   TEXT("AfsClientContextMenu")
  #define STR_REG_PATH    TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellIconOverlayIdentifiers")
  
  /////////////////////////////////////////////////////////////////////////////
--- 24,30 ----
  extern ULONG nTPRefCount;	// IQueryInfo ref count
  extern ULONG nXPRefCount;	// IPersistFile ref count
  
! #define STR_EXT_TITLE   "AfsClientContextMenu"
  #define STR_REG_PATH    TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellIconOverlayIdentifiers")
  
  /////////////////////////////////////////////////////////////////////////////
Index: openafs/src/WINNT/client_exp/submounts_dlg.cpp
diff -c openafs/src/WINNT/client_exp/submounts_dlg.cpp:1.5.6.1 openafs/src/WINNT/client_exp/submounts_dlg.cpp:1.5.6.2
*** openafs/src/WINNT/client_exp/submounts_dlg.cpp:1.5.6.1	Fri Feb  8 21:32:24 2008
--- openafs/src/WINNT/client_exp/submounts_dlg.cpp	Fri May  9 11:10:13 2008
***************
*** 42,51 ****
  
  	DWORD len;
  
! 	char pathName[1024];
  
      HKEY hkSubmounts;
!     RegCreateKeyEx( HKEY_LOCAL_MACHINE, 
                      AFSREG_CLT_OPENAFS_SUBKEY "\\Submounts",
                      0, 
                      "AFS", 
--- 42,51 ----
  
  	DWORD len;
  
! 	TCHAR pathName[1024];
  
      HKEY hkSubmounts;
!     RegCreateKeyExA( HKEY_LOCAL_MACHINE, 
                      AFSREG_CLT_OPENAFS_SUBKEY "\\Submounts",
                      0, 
                      "AFS", 
***************
*** 58,64 ****
      DWORD dwType;
      DWORD status;
      len = sizeof(pathName);
!     status = RegQueryValueEx( hkSubmounts, (LPCSTR)PCCHAR(strShareName), 0,
                                &dwType, (LPBYTE)pathName, &len);
      RegCloseKey( hkSubmounts );
  
--- 58,64 ----
      DWORD dwType;
      DWORD status;
      len = sizeof(pathName);
!     status = RegQueryValueEx( hkSubmounts, strShareName, 0,
                                &dwType, (LPBYTE)pathName, &len);
      RegCloseKey( hkSubmounts );
  
***************
*** 166,172 ****
      DWORD dwIndex;
      DWORD dwSubmounts;
  
!     RegCreateKeyEx( HKEY_LOCAL_MACHINE, 
                      AFSREG_CLT_OPENAFS_SUBKEY "\\Submounts",
                      0, 
                      "AFS", 
--- 166,172 ----
      DWORD dwIndex;
      DWORD dwSubmounts;
  
!     RegCreateKeyExA( HKEY_LOCAL_MACHINE, 
                      AFSREG_CLT_OPENAFS_SUBKEY "\\Submounts",
                      0, 
                      "AFS", 
***************
*** 192,198 ****
  
  
      for ( dwIndex = 0; dwIndex < dwSubmounts; dwIndex ++ ) {
!         char submountName[256];
          DWORD submountNameLen = sizeof(submountName);
  
          RegEnumValue( hkSubmounts, dwIndex, submountName, &submountNameLen, NULL,
--- 192,198 ----
  
  
      for ( dwIndex = 0; dwIndex < dwSubmounts; dwIndex ++ ) {
!         TCHAR submountName[256];
          DWORD submountNameLen = sizeof(submountName);
  
          RegEnumValue( hkSubmounts, dwIndex, submountName, &submountNameLen, NULL,
***************
*** 219,225 ****
  
  	ASSERT(!strSubmt.IsEmpty());
  
! 	strShareName = strSubmt.SpanExcluding("=");
  
  	if (ShowMessageBox(IDS_REALLY_DELETE_SUBMT, MB_YESNO | MB_ICONQUESTION, IDS_REALLY_DELETE_SUBMT, strShareName) != IDYES)
  		return;
--- 219,225 ----
  
  	ASSERT(!strSubmt.IsEmpty());
  
! 	strShareName = strSubmt.SpanExcluding(_T("="));
  
  	if (ShowMessageBox(IDS_REALLY_DELETE_SUBMT, MB_YESNO | MB_ICONQUESTION, IDS_REALLY_DELETE_SUBMT, strShareName) != IDYES)
  		return;
***************
*** 248,254 ****
  	HOURGLASS hourglass;
  
      HKEY hkSubmounts;
!     RegCreateKeyEx( HKEY_LOCAL_MACHINE, 
                      AFSREG_CLT_OPENAFS_SUBKEY "\\Submounts",
                      0, 
                      "AFS", 
--- 248,254 ----
  	HOURGLASS hourglass;
  
      HKEY hkSubmounts;
!     RegCreateKeyExA( HKEY_LOCAL_MACHINE, 
                      AFSREG_CLT_OPENAFS_SUBKEY "\\Submounts",
                      0, 
                      "AFS", 
***************
*** 258,265 ****
                      &hkSubmounts,
                      NULL );
  
!     DWORD status = RegSetValueEx( hkSubmounts, PCCHAR(pInfo->GetShareName()), 0, REG_SZ,
!                    (const BYTE *)PCCHAR(pInfo->GetPathName()), strlen(PCCHAR(pInfo->GetPathName())) + 1);
  
      RegCloseKey(hkSubmounts);
  	return (status == ERROR_SUCCESS);
--- 258,266 ----
                      &hkSubmounts,
                      NULL );
  
!     DWORD status = RegSetValueEx( hkSubmounts, pInfo->GetShareName(), 0, REG_SZ,
!                                   (const BYTE *)(const TCHAR *) pInfo->GetPathName(),
!                                   pInfo->GetPathName().GetLength() + 1);
  
      RegCloseKey(hkSubmounts);
  	return (status == ERROR_SUCCESS);
***************
*** 270,276 ****
  	HOURGLASS hourglass;
  
      HKEY hkSubmounts;
!     RegCreateKeyEx( HKEY_LOCAL_MACHINE, 
                      AFSREG_CLT_OPENAFS_SUBKEY "\\Submounts",
                      0, 
                      "AFS", 
--- 271,277 ----
  	HOURGLASS hourglass;
  
      HKEY hkSubmounts;
!     RegCreateKeyExA( HKEY_LOCAL_MACHINE, 
                      AFSREG_CLT_OPENAFS_SUBKEY "\\Submounts",
                      0, 
                      "AFS", 
***************
*** 280,286 ****
                      &hkSubmounts,
                      NULL );
  
!     DWORD status = RegDeleteValue( hkSubmounts, PCCHAR(pInfo->GetShareName()));
  
      RegCloseKey(hkSubmounts);
  	return (status == ERROR_SUCCESS);
--- 281,287 ----
                      &hkSubmounts,
                      NULL );
  
!     DWORD status = RegDeleteValue( hkSubmounts, pInfo->GetShareName());
  
      RegCloseKey(hkSubmounts);
  	return (status == ERROR_SUCCESS);
***************
*** 322,328 ****
  
  	ASSERT(!strSubmt.IsEmpty());
  
! 	strShareName = strSubmt.SpanExcluding("=");
  
  	CSubmountInfo *pInfo = FindWork(strShareName);
  	if (pInfo != 0)
--- 323,329 ----
  
  	ASSERT(!strSubmt.IsEmpty());
  
! 	strShareName = strSubmt.SpanExcluding(_T("="));
  
  	CSubmountInfo *pInfo = FindWork(strShareName);
  	if (pInfo != 0)
Index: openafs/src/WINNT/client_exp/unlog_dlg.cpp
diff -c openafs/src/WINNT/client_exp/unlog_dlg.cpp:1.2 openafs/src/WINNT/client_exp/unlog_dlg.cpp:1.2.32.1
*** openafs/src/WINNT/client_exp/unlog_dlg.cpp:1.2	Sat Nov  4 05:02:55 2000
--- openafs/src/WINNT/client_exp/unlog_dlg.cpp	Fri May  9 11:10:13 2008
***************
*** 66,72 ****
  		char defaultCell[256];
  		long code = cm_GetRootCellName(defaultCell);
  		if (code < 0)
! 			AfxMessageBox("Error determining root cell name.");
  		else
  			m_strCellName = defaultCell;
  	}
--- 66,72 ----
  		char defaultCell[256];
  		long code = cm_GetRootCellName(defaultCell);
  		if (code < 0)
!                     AfxMessageBox(_T("Error determining root cell name."));
  		else
  			m_strCellName = defaultCell;
  	}
***************
*** 80,100 ****
  {
  	struct ktc_principal server;
  	int code;
- 	static char xreason[100];
  
  	if (strCellName.IsEmpty())
  		code = ktc_ForgetAllTokens();
  	else {
! 		strcpy(server.cell, strCellName);
  		server.instance[0] = '\0';
  		strcpy(server.name, "afs");
  		code = ktc_ForgetToken(&server);
  	}
  	
  	if (code == KTC_NOCM)
! 		AfxMessageBox("AFS service may not have started");
  	else if (code) {
! 		sprintf(xreason, "Unexpected error, code %d", code);
  		AfxMessageBox(xreason);
  	}
  	
--- 80,103 ----
  {
  	struct ktc_principal server;
  	int code;
  
  	if (strCellName.IsEmpty())
  		code = ktc_ForgetAllTokens();
  	else {
!             CStringA astrCellName(strCellName);
! 
!             strcpy(server.cell, astrCellName);
  		server.instance[0] = '\0';
  		strcpy(server.name, "afs");
  		code = ktc_ForgetToken(&server);
  	}
  	
  	if (code == KTC_NOCM)
!             AfxMessageBox(_T("AFS service may not have started"));
  	else if (code) {
!             CString xreason;
! 
!             xreason.Format(_T("Unexpected error, code %d"), code);
  		AfxMessageBox(xreason);
  	}
  	
Index: openafs/src/WINNT/client_exp/volumeinfo.cpp
diff -c openafs/src/WINNT/client_exp/volumeinfo.cpp:1.2 openafs/src/WINNT/client_exp/volumeinfo.cpp:1.2.32.1
*** openafs/src/WINNT/client_exp/volumeinfo.cpp:1.2	Sat Nov  4 05:02:55 2000
--- openafs/src/WINNT/client_exp/volumeinfo.cpp	Fri May  9 11:10:13 2008
***************
*** 230,239 ****
  
   			if (nQuota != 0) {
  				LONG nPercentUsed = (m_pVolInfo[i].m_nUsed * 100) / nQuota;
! 				strEntry.Format("%s\t%s\t%ld\t%ldK\t%ldK\t%ld%%", m_pVolInfo[i].m_strFileName, m_pVolInfo[i].m_strName,
! 					m_pVolInfo[i].m_nID, nQuota, m_pVolInfo[i].m_nUsed, nPercentUsed);
  			} else {
! 				strEntry.Format("%s\t%s\t%ld\tUnlimited\t%ldK", m_pVolInfo[i].m_strFileName, m_pVolInfo[i].m_strName,
  					m_pVolInfo[i].m_nID, m_pVolInfo[i].m_nUsed);
  			}
  		}
--- 230,244 ----
  
   			if (nQuota != 0) {
  				LONG nPercentUsed = (m_pVolInfo[i].m_nUsed * 100) / nQuota;
!                             strEntry.Format(_T("%s\t%s\t%ld\t%ldK\t%ldK\t%ld%%"),
!                                             m_pVolInfo[i].m_strFileName,
!                                             m_pVolInfo[i].m_strName,
!                                             m_pVolInfo[i].m_nID, nQuota,
!                                             m_pVolInfo[i].m_nUsed, nPercentUsed);
  			} else {
!                             strEntry.Format(_T("%s\t%s\t%ld\tUnlimited\t%ldK"),
!                                             m_pVolInfo[i].m_strFileName,
!                                             m_pVolInfo[i].m_strName,
  					m_pVolInfo[i].m_nID, m_pVolInfo[i].m_nUsed);
  			}
  		}
Index: openafs/src/WINNT/client_osi/NTMakefile
diff -c openafs/src/WINNT/client_osi/NTMakefile:1.10.4.3 openafs/src/WINNT/client_osi/NTMakefile:1.10.4.4
*** openafs/src/WINNT/client_osi/NTMakefile:1.10.4.3	Tue Feb 12 08:32:53 2008
--- openafs/src/WINNT/client_osi/NTMakefile	Wed Jul  2 08:48:58 2008
***************
*** 78,83 ****
--- 78,84 ----
  	$(DLLGUILINK) $(DLLLIBS) -def:libosi.def
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  	$(COPY) $*.lib $(ILIBDIR)
  	$(DEL) $*.lib $*.exp
  
***************
*** 107,112 ****
--- 108,114 ----
  $(EXEFILE) : $(EXEOBJS)
  	$(EXEGUILINK) $(EXELIBS)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # midl on dbrpc.idl
Index: openafs/src/WINNT/client_osi/libosi.def
diff -c openafs/src/WINNT/client_osi/libosi.def:1.3.14.2 openafs/src/WINNT/client_osi/libosi.def:1.3.14.3
*** openafs/src/WINNT/client_osi/libosi.def:1.3.14.2	Wed Feb 27 12:06:44 2008
--- openafs/src/WINNT/client_osi/libosi.def	Thu Jun 26 12:00:53 2008
***************
*** 71,73 ****
--- 71,74 ----
          osi_HexifyString        @64
          osi_QRemoveHT           @65
  	lock_ConvertRToW	@66
+         osi_LogSaveStringW      @67
Index: openafs/src/WINNT/client_osi/osilog.c
diff -c openafs/src/WINNT/client_osi/osilog.c:1.12.4.3 openafs/src/WINNT/client_osi/osilog.c:1.12.4.4
*** openafs/src/WINNT/client_osi/osilog.c:1.12.4.3	Thu Feb 14 09:09:18 2008
--- openafs/src/WINNT/client_osi/osilog.c	Thu Jun 26 12:00:53 2008
***************
*** 24,29 ****
--- 24,30 ----
  #include <stdio.h>
  #include <assert.h>
  #include <WINNT\afsreg.h>
+ #include <strsafe.h>
  
  #define AFS_DAEMON_EVENT_NAME "TransarcAFSDaemon"
  
***************
*** 89,97 ****
  
          logp = malloc(sizeof(osi_log_t));
          memset(logp, 0, sizeof(osi_log_t));
!         logp->namep = malloc(strlen(namep)+1);
!         strcpy(logp->namep, namep);
!         
          osi_QAdd((osi_queue_t **) &osi_allLogsp, &logp->q);
  
  	/* compute size we'll use */
--- 90,101 ----
  
          logp = malloc(sizeof(osi_log_t));
          memset(logp, 0, sizeof(osi_log_t));
!         {
!             size_t namelen = strlen(namep) + 1;
! 
!             logp->namep = malloc(namelen * sizeof(char));
!             StringCchCopyA(logp->namep, namelen, namep);
!         }
          osi_QAdd((osi_queue_t **) &osi_allLogsp, &logp->q);
  
  	/* compute size we'll use */
***************
*** 109,116 ****
          /* and sync */
          thrd_InitCrit(&logp->cs);
          
! 	strcpy(tbuffer, "log:");
!         strcat(tbuffer, namep);
  	typep = osi_RegisterFDType(tbuffer, &osi_logFDOps, logp);
  #ifndef DJGPP
  	if (typep) {
--- 113,120 ----
          /* and sync */
          thrd_InitCrit(&logp->cs);
          
! 	StringCbCopyA(tbuffer, sizeof(tbuffer), "log:");
!         StringCbCatA(tbuffer, sizeof(tbuffer), namep);
  	typep = osi_RegisterFDType(tbuffer, &osi_logFDOps, logp);
  #ifndef DJGPP
  	if (typep) {
***************
*** 224,234 ****
          if(ISCLIENTDEBUGLOG(osi_TraceOption)) {
  	    char wholemsg[1024], msg[1000];
  
! 	    snprintf(msg, sizeof(msg), formatp,
! 		     p0, p1, p2, p3);
! 	    snprintf(wholemsg, sizeof(wholemsg), 
! 		     "tid[%d] %s\n",
! 		     lep->tid, msg);
              OutputDebugStringA(wholemsg);
          }
  
--- 228,238 ----
          if(ISCLIENTDEBUGLOG(osi_TraceOption)) {
  	    char wholemsg[1024], msg[1000];
  
! 	    StringCbPrintfA(msg, sizeof(msg), formatp,
!                             p0, p1, p2, p3);
! 	    StringCbPrintfA(wholemsg, sizeof(wholemsg), 
!                             "tid[%d] %s\n",
!                             lep->tid, msg);
              OutputDebugStringA(wholemsg);
          }
  
***************
*** 249,268 ****
  	     i < logp->nused;
  	     i++, ix++, (ix >= logp->alloc ? ix -= logp->alloc : 0)) {
  		lep = logp->datap + ix;		/* pointer arithmetic */
! 		snprintf(msg, sizeof(msg), lep->formatp,
! 			lep->parms[0], lep->parms[1],
! 			lep->parms[2], lep->parms[3]);
! 		snprintf(wholemsg, sizeof(wholemsg),
! 			 "time %d.%06d, tid %d %s\r\n",
! 			lep->micros / 1000000,
! 			lep->micros % 1000000,
! 			lep->tid, msg);
! #ifndef DJGPP
  		if (!WriteFile(handle, wholemsg, strlen(wholemsg),
! 				&ioCount, NULL))
! #else /* DJGPP */
!                 if ((ioCount = fwrite(wholemsg, 1, strlen(wholemsg), handle)) == 0)
! #endif /* !DJGPP */
  			break;
  	}
  
--- 253,268 ----
  	     i < logp->nused;
  	     i++, ix++, (ix >= logp->alloc ? ix -= logp->alloc : 0)) {
  		lep = logp->datap + ix;		/* pointer arithmetic */
! 		StringCbPrintfA(msg, sizeof(msg), lep->formatp,
!                                 lep->parms[0], lep->parms[1],
!                                 lep->parms[2], lep->parms[3]);
! 		StringCbPrintfA(wholemsg, sizeof(wholemsg),
!                                 "time %d.%06d, tid %d %s\r\n",
!                                 lep->micros / 1000000,
!                                 lep->micros % 1000000,
!                                 lep->tid, msg);
  		if (!WriteFile(handle, wholemsg, strlen(wholemsg),
!                                &ioCount, NULL))
  			break;
  	}
  
***************
*** 271,301 ****
  
  char *osi_LogSaveString(osi_log_t *logp, char *s)
  {
! 	char *saveplace;
  
!         if (!logp) return s;
  
!         if (!logp->enabled) s;
  
! 	if (s == NULL) return NULL;
  
!         thrd_EnterCrit(&logp->cs);
  
!         saveplace = logp->stringsp[logp->stringindex];
  
! 	if (strlen(s) >= OSI_LOG_STRINGSIZE)
! 		sprintf(saveplace, "...%s",
! 			s + strlen(s) - (OSI_LOG_STRINGSIZE - 4));
! 	else
! 		strcpy(saveplace, s);
! 	logp->stringindex++;
  
! 	if (logp->stringindex >= logp->maxstringindex)
! 	    logp->stringindex = 0;
  
!         thrd_LeaveCrit(&logp->cs);
  
! 	return saveplace;
  }
  
  long osi_LogFDCreate(osi_fdType_t *typep, osi_fd_t **outpp)
--- 271,333 ----
  
  char *osi_LogSaveString(osi_log_t *logp, char *s)
  {
!     char *saveplace;
  
!     if (!logp) return s;
  
!     if (!logp->enabled) return s;
  
!     if (s == NULL) return NULL;
  
!     thrd_EnterCrit(&logp->cs);
  
!     saveplace = logp->stringsp[logp->stringindex];
  
!     if (strlen(s) >= OSI_LOG_STRINGSIZE)
!         StringCbPrintfA(saveplace, OSI_LOG_STRINGSIZE,
!                         "...%s",
!                         s + strlen(s) - (OSI_LOG_STRINGSIZE - 4));
!     else
!         StringCbCopyA(saveplace, OSI_LOG_STRINGSIZE, s);
  
!     logp->stringindex++;
  
!     if (logp->stringindex >= logp->maxstringindex)
!         logp->stringindex = 0;
  
!     thrd_LeaveCrit(&logp->cs);
! 
!     return saveplace;
! }
! 
! wchar_t *osi_LogSaveStringW(osi_log_t *logp, wchar_t *s)
! {
!     wchar_t *saveplace;
! 
!     if (!logp) return s;
! 
!     if (!logp->enabled) return s;
! 
!     if (s == NULL) return NULL;
! 
!     thrd_EnterCrit(&logp->cs);
! 
!     saveplace = (wchar_t *) (logp->stringsp[logp->stringindex]);
! 
!     if (wcslen(s)*sizeof(wchar_t) >= OSI_LOG_STRINGSIZE)
!         StringCbPrintfW(saveplace, OSI_LOG_STRINGSIZE, L"...%s",
!                         (s + wcslen(s) - (OSI_LOG_STRINGSIZE/sizeof(wchar_t) - 4)));
!     else
!         StringCbCopyW(saveplace, OSI_LOG_STRINGSIZE, s);
! 
!     logp->stringindex++;
! 
!     if (logp->stringindex >= logp->maxstringindex)
!         logp->stringindex = 0;
! 
!     thrd_LeaveCrit(&logp->cs);
! 
!     return saveplace;
  }
  
  long osi_LogFDCreate(osi_fdType_t *typep, osi_fd_t **outpp)
***************
*** 315,359 ****
          return 0;
  }
  
- #ifndef DJGPP
  long osi_LogFDGetInfo(osi_fd_t *ifd, osi_remGetInfoParms_t *outp)
  {
! 	osi_logFD_t *lfdp;
!         osi_log_t *logp;
!         osi_logEntry_t *lep;
!         char tbuffer[256];
!         long ix;
          
!         lfdp = (osi_logFD_t *) ifd;
!         logp = lfdp->logp;
          
! 	/* see if we're done */
! 	if (lfdp->current >= lfdp->nused) return OSI_DBRPC_EOF;
          
! 	/* grab lock */
! 	thrd_EnterCrit(&logp->cs);
! 
!         /* compute which one we want */
!         ix = lfdp->first + lfdp->current;
!         if (ix >= logp->alloc) ix -= logp->alloc;
!         lfdp->current++;
!         lep = logp->datap + ix;	/* ptr arith to current index */
! 
! 	sprintf(tbuffer, lep->formatp, lep->parms[0], lep->parms[1],
!         	lep->parms[2], lep->parms[3]);
  
! 	/* now copy out info */
!         strcpy(outp->sdata[0], tbuffer);
!         sprintf(tbuffer, "%5.6f", ((double)lep->micros)/1000000.0);
!         strcpy(outp->sdata[1], tbuffer);
!         outp->idata[0] = lep->tid;
!         outp->scount = 2;
!         outp->icount = 1;
  
! 	thrd_LeaveCrit(&logp->cs);
!         return 0;
  }
- #endif /* !DJGPP */
  
  long osi_LogFDClose(osi_fd_t *ifdp)
  {
--- 347,389 ----
          return 0;
  }
  
  long osi_LogFDGetInfo(osi_fd_t *ifd, osi_remGetInfoParms_t *outp)
  {
!     osi_logFD_t *lfdp;
!     osi_log_t *logp;
!     osi_logEntry_t *lep;
!     char tbuffer[256];
!     long ix;
          
!     lfdp = (osi_logFD_t *) ifd;
!     logp = lfdp->logp;
          
!     /* see if we're done */
!     if (lfdp->current >= lfdp->nused) return OSI_DBRPC_EOF;
          
!     /* grab lock */
!     thrd_EnterCrit(&logp->cs);
  
!     /* compute which one we want */
!     ix = lfdp->first + lfdp->current;
!     if (ix >= logp->alloc) ix -= logp->alloc;
!     lfdp->current++;
!     lep = logp->datap + ix;	/* ptr arith to current index */
! 
!     StringCbPrintfA(tbuffer, sizeof(tbuffer), lep->formatp, lep->parms[0], lep->parms[1],
!                     lep->parms[2], lep->parms[3]);
! 
!     /* now copy out info */
!     StringCbCopyA(outp->sdata[0], sizeof(outp->sdata[0]), tbuffer);
!     StringCbPrintfA(tbuffer, sizeof(tbuffer), "%5.6f", ((double)lep->micros)/1000000.0);
!     StringCbCopyA(outp->sdata[1], sizeof(outp->sdata[0]), tbuffer);
!     outp->idata[0] = lep->tid;
!     outp->scount = 2;
!     outp->icount = 1;
  
!     thrd_LeaveCrit(&logp->cs);
!     return 0;
  }
  
  long osi_LogFDClose(osi_fd_t *ifdp)
  {
***************
*** 407,413 ****
  		return;
      h = RegisterEventSource(NULL, AFS_DAEMON_EVENT_NAME);
  	va_start(marker,c);
! 	_vsnprintf(buf,MAXBUF_,c,marker);
  	ptbuf[0] = buf;
  	ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, (const char **)ptbuf, NULL);\
  	DeregisterEventSource(h);
--- 437,443 ----
  		return;
      h = RegisterEventSource(NULL, AFS_DAEMON_EVENT_NAME);
  	va_start(marker,c);
! 	StringCbVPrintfA(buf,MAXBUF_,c,marker);
  	ptbuf[0] = buf;
  	ReportEvent(h, EVENTLOG_INFORMATION_TYPE, 0, 0, NULL, 1, 0, (const char **)ptbuf, NULL);\
  	DeregisterEventSource(h);
Index: openafs/src/WINNT/client_osi/osilog.h
diff -c openafs/src/WINNT/client_osi/osilog.h:1.7.4.1 openafs/src/WINNT/client_osi/osilog.h:1.7.4.2
*** openafs/src/WINNT/client_osi/osilog.h:1.7.4.1	Wed Feb 27 12:06:44 2008
--- openafs/src/WINNT/client_osi/osilog.h	Thu Jun 26 12:00:53 2008
***************
*** 19,25 ****
  #include "osiqueue.h"
  
  #define OSI_LOG_DEFAULTSIZE	1000
! #define OSI_LOG_STRINGSIZE	128
  #define OSI_LOG_MAXPARMS	4	/* max # of int parms */
  
  typedef struct osi_logEntry {
--- 19,25 ----
  #include "osiqueue.h"
  
  #define OSI_LOG_DEFAULTSIZE	1000
! #define OSI_LOG_STRINGSIZE	256
  #define OSI_LOG_MAXPARMS	4	/* max # of int parms */
  
  typedef struct osi_logEntry {
***************
*** 32,38 ****
  typedef struct osi_log {
  	osi_queue_t q;			/* queue of all logs */
  	char *namep;			/* name */
! 	size_t alloc;			/* allocated size */
          long nused;			/* number currently in use */
          long first;			/* index of first entry */
          Crit_Sec cs;			/* use this, rather than a higher-level
--- 32,38 ----
  typedef struct osi_log {
  	osi_queue_t q;			/* queue of all logs */
  	char *namep;			/* name */
!         long alloc;			/* allocated size */
          long nused;			/* number currently in use */
          long first;			/* index of first entry */
          Crit_Sec cs;			/* use this, rather than a higher-level
***************
*** 79,84 ****
--- 79,85 ----
  
  extern void osi_LogPrint(osi_log_t *logp, FILE_HANDLE handle);
  
+ extern wchar_t *osi_LogSaveStringW(osi_log_t *logp, wchar_t *s);
  extern char *osi_LogSaveString(osi_log_t *logp, char *s);
  extern void osi_InitTraceOption();
  extern void osi_LogEvent0(char *a,char *b);
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm:1.5.4.30.2.2 openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm:1.5.4.35
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm:1.5.4.30.2.2	Mon Jun 23 00:09:20 2008
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/index.htm	Wed Jul 16 01:34:53 2008
***************
*** 57,77 ****
  
  <h1>OpenAFS for Windows</h1>
  
! <h2>Version 1.5.39</h2>
  
  <p class=MsoNormal>&nbsp; </p>
  
  <p>Welcome to the OpenAFS for Windows online documentation set! </p>
  
! <p>The documentation set includes the OpenAFS for Windows Release Notes and the
! IBM AFS for Windows 3.6 product notes and installation and configuration
! information for the AFS Server, AFS Control Center,
! AFS Client, and AFS Light products. The OpenAFS for Windows online
  documentation set also includes the following administrative documentation: the
! <i>IBM AFS Administration Reference</i> and the <i>IBM AFS Administration Guide</i>.
  </p>
  
! <p>Although the IBM AFS documentation is out of date, OpenAFS does not have
  revised documentation to replace it at the current time.</p>
  
  <p><b><span style='font-size:13.5pt'>Online Documentation:</span></b> </p>
--- 57,75 ----
  
  <h1>OpenAFS for Windows</h1>
  
! <h2>Version 1.5.50</h2>
  
  <p class=MsoNormal>&nbsp; </p>
  
  <p>Welcome to the OpenAFS for Windows online documentation set! </p>
  
! <p>The documentation set includes the OpenAFS for Windows Release Notes.
! The OpenAFS for Windows online
  documentation set also includes the following administrative documentation: the
! <i>OpenAFS Command Reference</i> and the <i>IBM AFS Administration Guide</i>.
  </p>
  
! <p>Although the IBM AFS Administration Guide is out of date, OpenAFS does not have
  revised documentation to replace it at the current time.</p>
  
  <p><b><span style='font-size:13.5pt'>Online Documentation:</span></b> </p>
***************
*** 80,111 ****
  <span
  style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span></span><a
! href="ReleaseNotes/relnotes-frames.htm">OpenAFS for Windows 1.5.36
  Release Notes</a></p>
  
  <p style='margin-left:36.0pt;text-indent:-18.0pt;'>
  <span
  style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span><a href="InstallGd/awqbg002.htm">IBM AFS for
! Windows 3.6 Quick Beginnings</a> </p>
! 
! <p style='margin-left:36.0pt;text-indent:-18.0pt;'>
! <span
! style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span><a href="ReleaseNotes/awrns002.htm">IBM AFS for
! Windows 3.6 Release Notes</a> </p>
  
  <p style='margin-left:36.0pt;text-indent:-18.0pt;'>
  <span
  style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span></span><a href="SysAdminGd/auagd002.htm">IBM AFS 3.6 Administration
! Guide</a> </p>
! 
! <p style='margin-left:36.0pt;text-indent:-18.0pt;'>
! <span
! style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span><a href="CmdRef/auarf002.htm">IBM AFS 3.6 Administration
! Reference</a> </p>
  
  <p>&nbsp; <br>
  <br>
--- 78,96 ----
  <span
  style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span></span><a
! href="ReleaseNotes/relnotes-frames.htm">OpenAFS for Windows 1.5.50
  Release Notes</a></p>
  
  <p style='margin-left:36.0pt;text-indent:-18.0pt;'>
  <span
  style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span></span><a href="CmdRef/index.html">OpenAFS Command Reference</a> </p>
  
  <p style='margin-left:36.0pt;text-indent:-18.0pt;'>
  <span
  style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span></span><a href="SysAdminGd/auagd002.htm">IBM AFS 3.6 Administration
! Guide</a></p>
  
  <p>&nbsp; <br>
  <br>
***************
*** 116,118 ****
--- 101,107 ----
  </body>
  
  </html>
+ 
+ 
+ 
+ 
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg000.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg000.htm:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg000.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg000.htm:1.1	Fri Nov  3 21:18:48 2000
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg000.htm	Fri Jul 18 12:42:58 2008
***************
*** 1,43 ****
- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3//EN">
- <HTML><HEAD>
- <TITLE>Quick Beginnings</TITLE>
- <!-- Begin Header Records  ========================================== -->
- <!-- /tmp/idwt3639/awqbg000.scr converted by idb2h R4.2 (359) ID      -->
- <!-- Workbench Version (AIX) on 6 Dec 1999 at 11:23:35                -->
- <META HTTP-EQUIV="updated" CONTENT="Mon, 06 Dec 1999 11:23:34">
- <META HTTP-EQUIV="review" CONTENT="Wed, 06 Dec 2000 11:23:34">
- <META HTTP-EQUIV="expires" CONTENT="Thu, 06 Dec 2001 11:23:34">
- </HEAD><BODY>
- <!-- (C) IBM Corporation 2000. All Rights Reserved    --> 
- <BODY bgcolor="ffffff"> 
- <!-- End Header Records  ============================================ -->
- <A NAME="Top_Of_Page"></A>
- <H1>Quick Beginnings</H1>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awqbg002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Table of Contents]"></A> <A HREF="#Bot_Of_Page"><IMG SRC="../bot.gif" BORDER="0" ALT="[Bottom of Topic]"></A> <A HREF="awqbg002.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="awqbg004.htm#HDRINDEX"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P><HR> 
- AFS for Windows<BR>
- Quick Beginnings<BR>
- <P>Version 3.6 
- <P>Document Number SC09-4564-00
- <P>CT6Q8NA
- <P><B>First Edition (April 2000)</B>
- <P>This edition applies to&#58;
- <DL COMPACT>
- <DD>IBM AFS for Windows, Version 3.6
- </DL>
- <P>and to all subsequent releases and modifications until otherwise indicated
- in new editions.
- <P>This softcopy version is based on the printed edition of this book.
- Some formatting amendments have been made to make this information more
- suitable for softcopy.
- <P>Order publications through your IBM representative or through the IBM
- branch office serving your locality.
- <P><B>&copy; Copyright International Business Machines Corporation 1999. All rights reserved. </B>
- <P>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awqbg002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Table of Contents]"></A> <A HREF="#Top_Of_Page"><IMG SRC="../top.gif" BORDER="0" ALT="[Top of Topic]"></A> <A HREF="awqbg002.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="awqbg004.htm#HDRINDEX"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <!-- Begin Footer Records  ========================================== -->
- <P><HR><B> 
- <br>&#169; <A HREF="http://www.ibm.com/">IBM Corporation 2000.</A>  All Rights Reserved 
- </B> 
- <!-- End Footer Records  ============================================ -->
- <A NAME="Bot_Of_Page"></A>
- </BODY></HTML>
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg002.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg002.htm:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg002.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg002.htm:1.1	Fri Nov  3 21:18:48 2000
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg002.htm	Fri Jul 18 12:42:58 2008
***************
*** 1,64 ****
- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3//EN">
- <HTML><HEAD>
- <TITLE>Quick Beginnings</TITLE>
- <!-- Begin Header Records  ========================================== -->
- <!-- /tmp/idwt3639/awqbg000.scr converted by idb2h R4.2 (359) ID      -->
- <!-- Workbench Version (AIX) on 6 Dec 1999 at 11:23:35                -->
- <META HTTP-EQUIV="updated" CONTENT="Mon, 06 Dec 1999 11:23:34">
- <META HTTP-EQUIV="review" CONTENT="Wed, 06 Dec 2000 11:23:34">
- <META HTTP-EQUIV="expires" CONTENT="Thu, 06 Dec 2001 11:23:34">
- </HEAD><BODY>
- <!-- (C) IBM Corporation 2000. All Rights Reserved    --> 
- <BODY bgcolor="ffffff"> 
- <!-- End Header Records  ============================================ -->
- <A NAME="Top_Of_Page"></A>
- <H1>Quick Beginnings</H1>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awqbg000.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Bot_Of_Page"><IMG SRC="../bot.gif" BORDER="0" ALT="[Bottom of Topic]"></A> <A HREF="awqbg003.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="awqbg004.htm#HDRINDEX"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <H2><A NAME="ToC">Table of Contents</A></H2>
- <P><B><A NAME="ToC_1" HREF="awqbg003.htm#Header_1">IBM AFS for Windows Quick Beginnings</A></B><BR>
- <MENU>
- <LI><A NAME="ToC_2" HREF="awqbg003.htm#Header_2">Introduction</A>
- <LI><A NAME="ToC_3" HREF="awqbg003.htm#Header_3">Document Overview</A>
- <MENU>
- <LI><A NAME="ToC_4" HREF="awqbg003.htm#Header_4">Audience</A>
- <LI><A NAME="ToC_5" HREF="awqbg003.htm#Header_5">Organization</A>
- </MENU>
- <LI><A NAME="ToC_6" HREF="awqbg003.htm#HDRINSTALLATION">Installing AFS for Windows</A>
- <MENU>
- <LI><A NAME="ToC_7" HREF="awqbg003.htm#Header_7">AFS for Windows Components</A>
- <LI><A NAME="ToC_8" HREF="awqbg003.htm#HDROPTIONS">Installation Options</A>
- <LI><A NAME="ToC_9" HREF="awqbg003.htm#Header_9">Upgrading From an Earlier Version</A>
- <LI><A NAME="ToC_10" HREF="awqbg003.htm#HDRHOWTOINSTALL">To Install AFS for Windows</A>
- <LI><A NAME="ToC_11" HREF="awqbg003.htm#Header_11">Changes Made to Your System</A>
- </MENU>
- <LI><A NAME="ToC_17" HREF="awqbg003.htm#HDRDOCUMENT">AFS for Windows Documentation</A>
- <MENU>
- <LI><A NAME="ToC_18" HREF="awqbg003.htm#Header_18">The Online Documentation Directory</A>
- <LI><A NAME="ToC_20" HREF="awqbg003.htm#Header_20">The CD-ROM Documentation Directory</A>
- <LI><A NAME="ToC_22" HREF="awqbg003.htm#Header_22">Online Help</A>
- </MENU>
- <LI><A NAME="ToC_23" HREF="awqbg003.htm#HDRCONFIGURE">Configuring AFS for Windows</A>
- <MENU>
- <LI><A NAME="ToC_24" HREF="awqbg003.htm#HDRCLIENT_CONFIG">To Configure the AFS Client</A>
- <LI><A NAME="ToC_25" HREF="awqbg003.htm#HDRGATEWAY">To Configure the AFS Client as an AFS Light Gateway</A>
- <LI><A NAME="ToC_26" HREF="awqbg003.htm#Header_26">To Configure AFS Light</A>
- <LI><A NAME="ToC_27" HREF="awqbg003.htm#Header_27">To Configure the AFS Server</A>
- <LI><A NAME="ToC_28" HREF="awqbg003.htm#Header_28">To Configure the AFS Control Center</A>
- </MENU>
- <LI><A NAME="ToC_29" HREF="awqbg003.htm#HDRUNINSTALL">Uninstalling AFS for Windows</A>
- <MENU>
- <LI><A NAME="ToC_30" HREF="awqbg003.htm#Header_30">Reinstalling and Upgrading</A>
- <LI><A NAME="ToC_31" HREF="awqbg003.htm#Header_31">Uninstallation Prerequisites</A>
- <LI><A NAME="ToC_32" HREF="awqbg003.htm#HDRTOUNINSTALL">To Uninstall AFS for Windows</A>
- <LI><A NAME="ToC_33" HREF="awqbg003.htm#Header_33">Changes Made to Your System</A>
- </MENU></MENU>
- <P><B><A NAME="ToC_39" HREF="awqbg004.htm#HDRINDEX">Index</A></B><BR>
- <P>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awqbg000.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Top_Of_Page"><IMG SRC="../top.gif" BORDER="0" ALT="[Top of Topic]"></A> <A HREF="awqbg003.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="awqbg004.htm#HDRINDEX"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <!-- Begin Footer Records  ========================================== -->
- <P><HR><B> 
- <br>&#169; <A HREF="http://www.ibm.com/">IBM Corporation 2000.</A>  All Rights Reserved 
- </B> 
- <!-- End Footer Records  ============================================ -->
- <A NAME="Bot_Of_Page"></A>
- </BODY></HTML>
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg003.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg003.htm:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg003.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg003.htm:1.1	Fri Nov  3 21:18:49 2000
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg003.htm	Fri Jul 18 12:42:58 2008
***************
*** 1,1203 ****
- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3//EN">
- <HTML><HEAD>
- <TITLE>Quick Beginnings</TITLE>
- <!-- Begin Header Records  ========================================== -->
- <!-- /tmp/idwt3639/awqbg000.scr converted by idb2h R4.2 (359) ID      -->
- <!-- Workbench Version (AIX) on 6 Dec 1999 at 11:23:35                -->
- <META HTTP-EQUIV="updated" CONTENT="Mon, 06 Dec 1999 11:23:34">
- <META HTTP-EQUIV="review" CONTENT="Wed, 06 Dec 2000 11:23:34">
- <META HTTP-EQUIV="expires" CONTENT="Thu, 06 Dec 2001 11:23:34">
- </HEAD><BODY>
- <!-- (C) IBM Corporation 2000. All Rights Reserved    --> 
- <BODY bgcolor="ffffff"> 
- <!-- End Header Records  ============================================ -->
- <A NAME="Top_Of_Page"></A>
- <H1>Quick Beginnings</H1>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awqbg002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awqbg002.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Bot_Of_Page"><IMG SRC="../bot.gif" BORDER="0" ALT="[Bottom of Topic]"></A> <A HREF="awqbg004.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="awqbg004.htm#HDRINDEX"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <HR><H1><A NAME="Header_1" HREF="awqbg002.htm#ToC_1">IBM AFS for Windows Quick Beginnings</A></H1>
- <HR><H2><A NAME="Header_2" HREF="awqbg002.htm#ToC_2">Introduction</A></H2>
- <A NAME="IDX178"></A>
- <A NAME="IDX179"></A>
- <P>AFS<SUP>(R)</SUP> is an enterprise file system that provides consistent
- file access by way of a shared filespace. By joining the local file
- systems of several File Server machines, AFS presents a single filespace
- independent of machine boundaries. Files are stored on different
- machines in the computer network but are accessible from all machines across
- the enterprise.
- <P>IBM AFS for Windows<SUP>(R)</SUP>, version 3.6 extends the full
- capabilities of AFS to Microsoft<SUP>(R)</SUP> Windows operating
- systems.
- <HR><H2><A NAME="Header_3" HREF="awqbg002.htm#ToC_3">Document Overview</A></H2>
- <P>
- <A NAME="IDX180"></A>
- This document summarizes installation prerequisites, provides detailed
- instructions on how to install, configure, and uninstall AFS for Windows, and
- outlines the changes made to your system during the installation and
- uninstallation processes. This document also describes the
- documentation provided with AFS for Windows.
- <P><H3><A NAME="Header_4" HREF="awqbg002.htm#ToC_4">Audience</A></H3>
- <P>
- <A NAME="IDX181"></A>
- This document provides information for system administrators and users
- responsible for the installation and configuration of the products included in
- AFS for Windows. This document assumes that system administrators are
- familiar with system administration in general and that users are familiar
- with the basic terms and concepts of the Microsoft Windows operating
- systems.
- <P><H3><A NAME="Header_5" HREF="awqbg002.htm#ToC_5">Organization</A></H3>
- <P>This document has the following organization&#58;
- <UL>
- <P><LI><A HREF="#HDRINSTALLATION">Installing AFS for Windows</A> outlines installable combinations of AFS components,
- describes the procedure for installing the products that are included in AFS
- for Windows, and lists the changes that the installation process makes to your
- system.
- <P><LI><A HREF="#HDRDOCUMENT">AFS for Windows Documentation</A> presents the various types of documentation that are
- provided with AFS for Windows and discusses procedures for accessing this
- documentation.
- <P><LI><A HREF="#HDRCONFIGURE">Configuring AFS for Windows</A> describes the procedures for configuring the products that
- are included in AFS for Windows.
- <P><LI><A HREF="#HDRUNINSTALL">Uninstalling AFS for Windows</A> outlines uninstallation prerequisites, describes the
- procedure for uninstalling the products that are included in AFS for Windows,
- and lists the changes that the uninstallation process makes to your
- system.
- </UL>
- <HR><H2><A NAME="HDRINSTALLATION" HREF="awqbg002.htm#ToC_6">Installing AFS for Windows</A></H2>
- <P>This section outlines installable combinations of AFS components,
- describes the procedure for installing AFS for Windows, and lists the changes
- that the installation process makes to your system.
- <P><H3><A NAME="Header_7" HREF="awqbg002.htm#ToC_7">AFS for Windows Components</A></H3>
- <P>
- <A NAME="IDX182"></A>
- AFS for Windows, version 3.6 includes the following components&#58;
- <UL>
- <P><LI>
- <A NAME="IDX183"></A>
- <A NAME="IDX184"></A>
- <A NAME="IDX185"></A>
- <B>AFS Server</B>
- <P>The AFS Server runs AFS server processes and includes the AFS Server
- Configuration Wizard to facilitate setup.
- <P><LI>
- <A NAME="IDX186"></A>
- <A NAME="IDX187"></A>
- <A NAME="IDX188"></A>
- <B>AFS Control Center</B>
- <P>The AFS Control Center includes two powerful graphical user interface (GUI)
- tools to assist AFS system administrators in AFS cell administration&#58;
- the AFS Server Manager and the AFS Account Manager.
- <P><LI>
- <A NAME="IDX189"></A>
- <A NAME="IDX190"></A>
- <A NAME="IDX191"></A>
- <B>AFS Client</B>
- <P>The AFS Client provides direct access to the AFS filespace, enabling users
- to manage files and directories in AFS. The AFS Client includes the AFS
- Light Gateway.
- <P><LI>
- <A NAME="IDX192"></A>
- <A NAME="IDX193"></A>
- <A NAME="IDX194"></A>
- <B>AFS Light</B>
- <P>AFS Light provides access to the AFS filespace via an AFS Light Gateway
- machine, enabling users to manage files and directories in AFS.
- <P><LI>
- <A NAME="IDX195"></A>
- <B>AFS Supplemental Documentation</B>
- <P>AFS Supplemental Documentation provides additional AFS system
- administration information and includes the following documents&#58;
- <I>IBM AFS Administration Guide</I> and <I>IBM AFS Administration
- Reference</I>.
- </UL>
- <P><H3><A NAME="HDROPTIONS" HREF="awqbg002.htm#ToC_8">Installation Options</A></H3>
- <P>
- <A NAME="IDX196"></A>
- <A NAME="IDX197"></A>
- <A NAME="IDX198"></A>
- You can install the components of AFS for Windows in various combinations,
- based on your Windows operating system. Refer to the <I>IBM AFS for
- Windows Release Notes</I> for details on the specific software requirements
- for each AFS for Windows component. Note that if you are installing the
- AFS Server, you must also install the AFS Client, unless the AFS Client,
- version 3.6 is already installed on the machine. Follow the
- installation procedure described in <A HREF="#HDRHOWTOINSTALL">To Install AFS for Windows</A> regardless of the components you are installing.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">
- <A NAME="IDX199"></A>
- <A NAME="IDX200"></A>
- <A NAME="IDX201"></A>
- <A NAME="IDX202"></A>
- <A NAME="IDX203"></A>
- You have the option of altering the AFS for Windows setup program to disable
- all but the client component. Such a client-only setup program renders
- users unable to install any components other than the AFS Client. To
- perform a client-only installation, create the file <B>setup.co</B>
- in the same directory as the other installation files; the setup program
- then only allows the AFS Client to be installed. Note that the contents
- of the <B>setup.co</B> file are irrelevent. Follow the
- installation procedure described in <A HREF="#HDRHOWTOINSTALL">To Install AFS for Windows</A> regardless of the type of installation you are
- performing.
- </TD></TR></TABLE>
- <P><H3><A NAME="Header_9" HREF="awqbg002.htm#ToC_9">Upgrading From an Earlier Version</A></H3>
- <P>
- <A NAME="IDX204"></A>
- <A NAME="IDX205"></A>
- <A NAME="IDX206"></A>
- On a Windows NT machine, it is <I>not</I> necessary to uninstall the
- components of AFS for Windows for the purpose of upgrading the software;
- you can install this release of AFS for Windows on your system
- <I>without</I> removing or unconfiguring your existing software. To
- upgrade AFS for Windows, follow the installation procedure described in <A HREF="#HDRHOWTOINSTALL">To Install AFS for Windows</A>. During the installation process, the
- previous-version AFS component is upgraded and the AFS configuration
- information is preserved.
- <P>On a Windows 95 or Windows 98 machine, you must uninstall the
- previously-installed AFS Light component, as described in <A HREF="#HDRTOUNINSTALL">To Uninstall AFS for Windows</A>, before upgrading AFS Light.
- <P>Note that the AFS for Windows installation tool does <I>not</I> allow a
- user to install AFS components that have different version numbers. If
- you have more than one AFS for Windows component installed on your machine,
- you cannot update one component without updating all of the other components
- as well.
- <P><H3><A NAME="HDRHOWTOINSTALL" HREF="awqbg002.htm#ToC_10">To Install AFS for Windows</A></H3>
- <A NAME="IDX207"></A>
- <A NAME="IDX208"></A>
- <A NAME="IDX209"></A>
- <A NAME="IDX210"></A>
- <A NAME="IDX211"></A>
- <A NAME="IDX212"></A>
- <A NAME="IDX213"></A>
- <P>Before installing AFS for Windows, refer to your <I>IBM AFS for Windows
- Release Notes</I> for a detailed description of the installation
- prerequisites. If you are running any other Windows applications, it is
- recommended that you exit from them before installing AFS for Windows. 
- <OL TYPE=1>
- <P><LI>Insert the AFS for Windows installation disk into your CD-ROM
- drive.
- <P><LI>Run the AFS for Windows <B>setup</B> program by using one of the
- following methods&#58;
- <UL>
- <P><LI>From the <B>Start</B> menu, select <B>Run</B>. Type
- <TT><I>drive</I><B>&#58;\setup</B></TT> where <I>drive</I> is
- the drive letter of your CD-ROM drive. Click <B>OK</B>.
- <P><LI>In the <B>Windows Explorer</B>, select your CD-ROM drive, and
- double-click the <B>setup.exe</B> program.
- </UL>
- <P><LI>The Welcome dialog box appears. Select the <B>Next</B> button
- to continue with the installation process.
- <P><LI>The Select Components dialog box appears. 
- <UL>
- <P><LI>In the <B>Components</B> box, select the AFS for Windows components
- that you want to install or upgrade. See <A HREF="#HDROPTIONS">Installation Options</A> for information on the various combinations of components
- that can be installed on a Windows machine. Note that if you are
- installing the AFS Server, you must also select to install (or upgrade) the
- AFS Client, unless the AFS Client, version 3.6 is already installed on
- your system.
- <P><LI>The <B>Destination Folder</B> box indicates the default drive and
- directory in which the selected components will be installed. The
- default drive is the drive where Windows is installed. The default
- directory on that drive is <B>\Program Files\Ibm\Afs</B>. To select
- another drive, directory, or both, select the <B>Browse</B> button.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">If you are upgrading from a previous-version of AFS for Windows or
- reinstalling AFS for Windows, the installation directory that you choose must
- be the same as the installation directory that was used by the
- previously-installed version.
- </TD></TR></TABLE>
- </UL>
- <P>Select the <B>Next</B> button to continue with the installation
- process.
- <P><LI>The application files for the selected AFS for Windows components are
- installed on your system. When the installation process finishes, the
- Setup Complete dialog box appears, indicating that you must restart your
- system before you can use the installed AFS products. Select <B>Yes,
- I want to restart my computer now</B>, and then select the <B>Finish</B>
- button. Your system is shut down and then restarted.
- <P>Installation of AFS for Windows is complete.
- </OL>
- <P><H3><A NAME="Header_11" HREF="awqbg002.htm#ToC_11">Changes Made to Your System</A></H3>
- <P>
- <A NAME="IDX214"></A>
- This section describes the changes that are made to your system by installing
- each AFS for Windows component. The information in this section is
- based upon the default installation settings.
- <P><H4><A NAME="HDRCLIENTCHANGE">Changes made to your system by installing the AFS Client</A></H4>
- <P>Installing the AFS Client for Windows NT makes the following changes to
- your system&#58;
- <UL>
- <P><LI>Creates a <B>Start</B> menu program group named <B>IBM AFS</B>
- with the following program applications&#58;
- <DL>
- <DD><P>The <B>Documentation</B> program entry allows access to the AFS online
- documentation set that is provided with AFS for Windows.
- <DD><P>The <B>Client</B> program subgroup enables users to access the AFS
- Client property box and the AFS Client Online Help.
- </DL>
- <P><LI>Adds the AFS Menu to the Windows NT Explorer&#39;s context menu.
- <P><LI>Creates a documentation directory and places the <I>IBM AFS for Windows
- Quick Beginnings</I> and the <I>IBM AFS for Windows Release Notes</I>
- online documents in the directory, which is located at <B>\Program
- Files\Ibm\Afs\Documentation</B>.
- <P><LI>Adds <B>AFS Credentials</B> to the <B>Startup</B> program
- group. The <B>AFS Client</B> icon is displayed in the taskbar at
- startup.
- <P><LI>Creates the installation directories in which the setup program installs
- AFS binaries, icons, and help files. The default directories are
- <B>\Program Files\Ibm\Afs\Client\Program</B> and <B>\Program
- Files\Ibm\Afs\Common</B>.
- <P><LI>Registers the AFS Client as a service.
- <P><LI>Installs the AFS Client Configuration utility and adds the <B>AFS Client
- Configuration</B> icon to the Control Panel by placing the
- <B>afs_cpa.cpl</B> file in the
- <B>\</B><I>WindowsDefault</I><B>\system32</B> directory, where
- <I>WindowsDefault</I> is your Windows directory.
- <P><LI>Places the <B>afsdcell.ini</B> file in your Windows directory
- and in the <B>\Program Files\Ibm\Afs\Common</B> directory. If you
- have upgraded from a previous-version AFS Client, the AFS Client cell database
- (<B>afsdcell.ini</B>) in the Windows directory is not
- replaced.
- <P><LI>Modifies the Windows NT Registry by adding entries relevant to the AFS
- Client.
- </UL>
- <P><H4><A NAME="Header_13">Changes made to your system by installing AFS Light</A></H4>
- <P>Installing AFS Light for Windows 95 and Windows 98 makes the following
- changes to your system&#58;
- <UL>
- <P><LI>Creates a program group named <B>IBM AFS</B> with the following
- program applications&#58;
- <DL>
- <DD><P>The <B>Documentation</B> program entry allows access to the AFS online
- documentation set that is provided with AFS for Windows.
- <DD><P>The <B>Light</B> program subgroup enables users to access the AFS
- Light property box and the AFS Light Online Help.
- </DL>
- <P><LI>Adds the AFS Menu to the Windows Explorer&#39;s context menu.
- <P><LI>Creates a documentation directory and places the <I>IBM AFS for Windows
- Quick Beginnings</I> and the <I>IBM AFS for Windows Release Notes</I>
- online documents in the directory, which is located at <B>\Program
- Files\Ibm\Afs\Documentation</B>.
- <P><LI>Creates the installation directories in which the setup program installs
- AFS binaries, icons, and help files. The default directories are
- <B>\Program Files\Ibm\Afs\Client\Program</B> and <B>\Program
- Files\Ibm\Afs\Common</B>.
- <P><LI>Installs the AFS Light Configuration utility and adds the <B>AFS Light
- Configuration</B> icon to the Control Panel by placing the
- <B>afs_cpa.cpl</B> file in the
- <B>\</B><I>WindowsDefault</I><B>\system</B> directory, where
- <I>WindowsDefault</I> is your Windows directory.
- <P><LI>Places the <B>afsdcell.ini</B> file in your Windows directory
- and in the <B>\Program Files\Ibm\Afs\Common</B> directory.
- <P><LI>Modifies the Windows Registry by adding entries relevant to AFS
- Light.
- </UL>
- <P><H4><A NAME="Header_14">Changes made to your system by installing the AFS Server</A></H4>
- <P>Installing the AFS Server for Windows NT makes the following changes to
- your system&#58;
- <UL>
- <P><LI>Creates a <B>Start</B> menu program group named <B>IBM AFS</B>
- with the following program applications&#58;
- <DL>
- <DD><P>The <B>Documentation</B> program entry allows access to the AFS online
- documentation set that is provided with AFS for Windows.
- <DD><P>The <B>Server</B> program subgroup enables users to access the AFS
- Server Quick-Start Wizard.
- </DL>
- <P><LI>Creates a documentation directory and places the <I>IBM AFS for Windows
- Quick Beginnings</I> and the <I>IBM AFS for Windows Release Notes</I>
- online documents in the directory, which is located at <B>\Program
- Files\Ibm\Afs\Documentation</B>.
- <P><LI>Creates the installation directories in which the setup program installs
- AFS binaries, icons, and help files. The default directories are
- <B>\Program Files\Ibm\Afs\Server\usr\afs\bin</B> and <B>\Program
- Files\Ibm\Afs\Common</B>.
- <P><LI>Registers the AFS Server as a service.
- <P><LI>Installs the AFS Server Configuration application and adds the <B>AFS
- Server Configuration</B> icon to the Control Panel by placing the
- <B>afsserver.cpl</B> file in the
- <B>\</B><I>WindowsDefault</I><B>\system32</B> directory, where
- <I>WindowsDefault</I> is your Windows directory.
- <P><LI>Modifies the Windows NT Registry by adding entries relevant to the AFS
- Server.
- </UL>
- <P><H4><A NAME="Header_15">Changes made to your system by installing the AFS Control Center</A></H4>
- <P>Installing the AFS Control Center for Windows NT makes the following
- changes to your system&#58;
- <UL>
- <P><LI>Creates a <B>Start</B> menu program group named <B>IBM AFS</B>
- with the following program applications&#58;
- <DL>
- <DD><P>The <B>Documentation</B> program entry allows access to the AFS online
- documentation set that is provided with AFS for Windows.
- <DD><P>The <B>Control Center</B> program subgroup enables users to access the
- Account Manager and the Server Manager.
- </DL>
- <P><LI>Creates a documentation directory and places the <I>IBM AFS for Windows
- Quick Beginnings</I> and the <I>IBM AFS for Windows Release Notes</I>
- online documents in the directory, which is located at <B>\Program
- Files\Ibm\Afs\Documentation</B>.
- <P><LI>Creates the installation directories in which the setup program installs
- AFS binaries, icons, and help files. The default directories are
- <B>\Program Files\Ibm\Afs\Control Center</B> and <B>\Program
- Files\Ibm\Afs\Common</B>.
- <P><LI>Installs the AFS Control Center Properties utility and adds the <B>AFS
- Control Center</B> icon to the Control Panel by placing the
- <B>afs_cpa.cpl</B> file in the
- <B>\</B><I>WindowsDefault</I><B>\system32</B> directory, where
- <I>WindowsDefault</I> is your Windows directory. This icon is added
- to the Control Panel if only the AFS Control Center is installed on your
- system.
- <P><LI>Places the <B>afsdcell.ini</B> file in your Windows directory
- and in the <B>\Program Files\Ibm\Afs\Common</B> directory.
- <P><LI>Modifies the Windows NT Registry by adding entries relevant to the AFS
- Control Center.
- </UL>
- <P><H4><A NAME="Header_16">Changes made to your system by installing the AFS Supplemental Documentation</A></H4>
- <P>Installing the AFS Supplemental Documentation makes the following
- changes to your system&#58;
- <UL>
- <P><LI>Creates a <B>Start</B> menu program group named <B>IBM AFS</B>
- with a program entry named <B>Documentation</B>.
- <P><LI>The following system administration documents are installed on the
- machine&#58; <I>IBM AFS Administration Guide</I> and <I>IBM AFS
- Administration Reference</I>. These documents are added to the online
- documentation directory, which is located at <B>\Program
- Files\Ibm\Afs\Documentation</B>. The <I>IBM AFS for Windows Quick
- Beginnings</I> and the <I>IBM AFS for Windows Release Notes</I> online
- documents are also installed in the documentation directory.
- <P><LI>Modifies the Windows NT Registry by adding entries relevant to the AFS
- Supplemental Documentation.
- </UL>
- <HR><H2><A NAME="HDRDOCUMENT" HREF="awqbg002.htm#ToC_17">AFS for Windows Documentation</A></H2>
- <P>This section describes the documentation that is provided with AFS for
- Windows and details the procedures for accessing this documentation.
- <P><H3><A NAME="Header_18" HREF="awqbg002.htm#ToC_18">The Online Documentation Directory</A></H3>
- <A NAME="IDX215"></A>
- <A NAME="IDX216"></A>
- <P>Regardless of the components you install on your system, a documentation
- directory is created. The default location is <B>\Program
- Files\Ibm\Afs\Documentation</B>. This directory includes the <I>IBM
- AFS for Windows Quick Beginnings</I> and <I>IBM AFS for Windows Release
- Notes</I>. These same documents are available from the Documentation
- index accessed from the <B>Documentation</B> entry in the <B>Start</B>
- menu.
- <P>If you install the AFS Supplemental Documentation, then the documentation
- directory also includes the following documents&#58; <I>IBM AFS
- Administration Guide</I> and <I>IBM AFS Administration
- Reference</I>. These same documents are available from the
- Documentation index accessed from the <B>Documentation</B> entry in the
- <B>Start</B> menu.
- <P><H4><A NAME="Header_19">To access the online documentation directory&#58;</A></H4>
- <OL TYPE=1>
- <P><LI>From the <B>Start</B> menu, choose <B>Programs</B>, then choose
- <B>IBM AFS</B>, then choose <B>Documentation</B>.
- <P><LI>Select the document that you want to view.
- </OL>
- <P><H3><A NAME="Header_20" HREF="awqbg002.htm#ToC_20">The CD-ROM Documentation Directory</A></H3>
- <A NAME="IDX217"></A>
- <A NAME="IDX218"></A>
- <P>The AFS for Windows CD-ROM contains a documentation directory. This
- directory includes the following documentation&#58; <I>IBM AFS for Windows
- Quick Beginnings</I>, <I>IBM AFS for Windows Release Notes</I>, <I>IBM
- AFS Administration Guide</I>, and <I>IBM AFS Administration
- Reference</I>. The documentation is provided in HTML and PDF
- formats.
- <P><H4><A NAME="Header_21">To access the CD-ROM documentation directory&#58;</A></H4>
- <OL TYPE=1>
- <P><LI>Insert the AFS for Windows CD-ROM into your machine&#39;s CD-ROM
- drive.
- <P><LI>Follow one of the paths listed below. Note that <I>CD</I> is
- the drive letter of your CD-ROM drive.
- <UL>
- <P><LI>For HTML documentation, follow the path
- <I>CD</I><B>&#58;\Documentation\Html</B>.
- <P><LI>For PDF documentation, follow the path
- <I>CD</I><B>&#58;\Documentation\Pdf</B>.
- </UL>
- </OL>
- <P><H3><A NAME="Header_22" HREF="awqbg002.htm#ToC_22">Online Help</A></H3>
- <A NAME="IDX219"></A>
- <A NAME="IDX220"></A>
- <P>Online help is installed along with each AFS for Windows component.
- The online help documentation describes the features available from each
- component. Use the <B>Help</B> menus and <B>Help</B> buttons
- located on most dialog boxes to access the online help. You can get
- help on topics by browsing the contents page, using the index to locate
- topics, and using <B>Find</B>, the online help search engine.
- <HR><H2><A NAME="HDRCONFIGURE" HREF="awqbg002.htm#ToC_23">Configuring AFS for Windows</A></H2>
- <P>
- <A NAME="IDX221"></A>
- <A NAME="IDX222"></A>
- This section details the configuration procedure for each of the components of
- AFS for Windows. You must configure the components on your system
- before you can use AFS.
- <P><H3><A NAME="HDRCLIENT_CONFIG" HREF="awqbg002.htm#ToC_24">To Configure the AFS Client</A></H3>
- <A NAME="IDX223"></A>
- <A NAME="IDX224"></A>
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">If you intend to configure the AFS Server on your Windows NT system, you do
- not need to configure the AFS Client. The AFS Client is configured
- automatically when the AFS Server is configured. In addition, if you
- upgraded to this version of AFS for Windows from a previous-version AFS
- Client, configuration information is preserved. You do not need to
- reconfigure the AFS Client.
- </TD></TR></TABLE>
- <OL TYPE=1>
- <P><LI>From the <B>Start</B> menu, choose <B>Settings</B>, then choose
- <B>Control Panel</B>.
- <P><LI>Double-click the <B>AFS Client Configuration</B> icon. The AFS
- Client Configuration utility opens, displaying the <B>General</B>
- tab.
- <P><LI>In the <B>Cell Name</B> box, enter the name of the AFS cell in which
- the machine is to be a client.
- <P><LI>Select the <B>AFS Cells</B> tab. If the cell in which the
- machine is to be a client is not listed in the list of AFS cells, choose the
- <B>Add</B> button. The New Cell dialog box opens. Enter the
- cell name in the <B>AFS Cell</B> box and a short description in the
- <B>Description</B> box.
- <P>Choose the <B>Add</B> button. The Add Server dialog box
- opens. In the <B>Server Name</B> box, enter the name of a Volume
- Location Server in the selected cell. Choose <B>OK</B> to close the
- Add Server dialog box. Repeat this process, adding information for all
- Volume Location Servers in the cell. (If you do not know the names of
- the Volume Location Servers in the AFS cell, consult your AFS system
- administrator.) After all server information has been entered, choose
- <B>OK</B> to close the New Cell dialog box.
- <P><LI>Select the <B>General</B> tab and choose the <B>Start Service</B>
- button to start the AFS Client service.
- <P><LI>Select the <B>Drive Letters</B> tab. To map a drive letter on
- the Windows NT machine to the AFS filespace, choose the <B>Add</B>
- button. The Map Drive Letter dialog box opens.
- <P><LI>In the <B>Drive Letter</B> box, select the drive to be mapped to the
- AFS filespace or accept the default. In the <B>AFS</B>
- <B>Path</B> box, indicate the AFS location to which you want to map the
- selected drive, for example,<B> /afs</B>. If desired, enter a
- description of the AFS drive mapping in the <B>Description</B> box.
- Choose <B>OK</B> to connect the drive to the specified place in the AFS
- filespace.
- <P><LI>Choose <B>OK</B> to close the AFS Client Configuration utility.
- <P>The AFS Client is now configured in the selected AFS cell and the AFS
- filespace can be accessed via the selected drive mapping in the Windows NT
- Explorer.
- </OL>
- <P><H3><A NAME="HDRGATEWAY" HREF="awqbg002.htm#ToC_25">To Configure the AFS Client as an AFS Light Gateway</A></H3>
- <A NAME="IDX225"></A>
- <A NAME="IDX226"></A>
- <A NAME="IDX227"></A>
- <P>You can configure the AFS Client on your Windows NT machine to serve as an
- AFS Light Gateway. Your AFS Client, configured as an AFS Light Gateway,
- makes it possible for AFS Light users to access the AFS filespace.
- <OL TYPE=1>
- <P><LI>Configure the AFS Client as detailed in <A HREF="#HDRCLIENT_CONFIG">To Configure the AFS Client</A>.
- <P><LI>From the <B>Start</B> menu, choose <B>Settings</B>, then choose
- <B>Control Panel</B>.
- <P><LI>Double-click the <B>AFS Client Configuration</B> icon. The AFS
- Client Configuration utility opens, displaying the <B>General</B>
- tab.
- <P><LI>Select the <B>Provide an AFS Light Gateway</B> option.
- <P><LI>Choose <B>OK</B>. 
- <UL>
- <P><LI>If the AFS Client service is running, a message box appears, informing you
- that the service must be restarted. Choose <B>Yes</B> to restart
- the AFS Client service and enable the AFS Light Gateway.
- <P><LI>If the AFS Client service is stopped, a message box appears, informing you
- that you must start the AFS Client service. Choose <B>Yes</B> to
- start the AFS Client service and enable the AFS Light Gateway.
- </UL>
- <P><LI>
- <A NAME="IDX228"></A>
- Add cell entries to your AFS Light Gateway&#39;s cell database. Note
- that in order for an AFS Light user to access a cell, an entry for the cell
- must exist in both the AFS Light cell database and the AFS Light Gateway cell
- database. Incorrect or missing information about a cell in the gateway
- machine&#39;s cell database renders light client machines unable to access
- files. 
- <P><B>To add an entry to the cell database&#58;</B>
- <P>Access the <B>AFS Cells</B> tab from the AFS Light Configuration
- utility and choose the <B>Add</B> button. The New Cell dialog box
- opens. Enter the cell name in the <B>AFS Cell</B> box and a short
- description in the <B>Description</B> box.
- <P>Choose the <B>Add</B> button. The Add Server dialog box
- opens. In the <B>Server Name</B> box, enter the name of a Volume
- Location Server in the selected cell. Choose <B>OK</B> to close the
- Add Server dialog box. Repeat this process, adding information for all
- Volume Location Servers in the cell. (If you do not know the names of
- the Volume Location Servers in the AFS cell, consult your AFS system
- administrator.) After all server information has been entered, choose
- <B>OK</B> to close the New Cell dialog box.
- </OL>
- <P>
- <A NAME="IDX229"></A>
- <A NAME="IDX230"></A>
- <A NAME="IDX231"></A>
- The Windows NT machine is now configured as an AFS Light Gateway. Once
- configured as an AFS Light Gateway, your AFS Client machine must be able to
- authenticate AFS Light users in a Windows context. This authentication
- can be achieved via a <I>domain</I> user account or via synchronized
- <I>machine</I> user accounts. A domain user account is a user
- account in a Windows domain. A machine user account is a user account
- that is valid only on a particular host machine.
- <P>When the AFS Light Gateway is configured into a Windows domain, the AFS
- Light user must log onto either a domain user account in the domain to which
- the gateway belongs or a machine user account with the same username and
- password as that of a domain user account in the gateway domain.
- <P>If machine user accounts are employed, then these accounts must be
- synchronized on the AFS Light Gateway and AFS Light machines. A user
- must log onto an AFS Light machine with the same username and password as that
- of a machine user account that is defined on the AFS Light Gateway
- machine.
- <P><H3><A NAME="Header_26" HREF="awqbg002.htm#ToC_26">To Configure AFS Light</A></H3>
- <A NAME="IDX232"></A>
- <A NAME="IDX233"></A>
- <P>AFS Light accesses the AFS filespace via an AFS Light Gateway.
- Before configuring AFS Light, you must have a Windows NT machine running the
- AFS Client and configured as an AFS Light Gateway. See <A HREF="#HDRGATEWAY">To Configure the AFS Client as an AFS Light Gateway</A> for more information.
- <OL TYPE=1>
- <P><LI>From the <B>Start</B> menu, choose <B>Settings</B>, then choose
- <B>Control Panel</B>.
- <P><LI>Double-click the <B>AFS Light Configuration</B> icon. The AFS
- Light Configuration utility opens, displaying the <B>General</B>
- tab.
- <A NAME="IDX234"></A>
- <A NAME="IDX235"></A>
- <P><LI>In the <B>Gateway</B> box, enter the name of a Windows NT machine that
- is configured as an AFS Light Gateway and click <B>Connect Now</B>.
- The name of the gateway machine is the gateway&#39;s NetBIOS service name, in
- the form <I>mach</I><B>-afs</B>, where <I>mach</I> is the
- host computer name up to a maximum of 11 characters. AFS Light must be
- able to resolve this service name in order to communicate with the gateway
- machine. Name resolution can be achieved by adding the gateway&#39;s
- NetBIOS service name to the client&#39;s LMHOSTS file or to the appropriate
- DNS or WINS servers. If the AFS Light machine and its AFS Light Gateway
- machine reside on the same subnet, then no additional configuration is
- required. 
- <P>AFS Light automatically becomes a member of the same cell as its AFS Light
- Gateway. The name of the cell is displayed in the <B>Cell Name</B>
- box.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">If the AFS Light Gateway machine is in the same domain as the AFS Light
- machine and the hostname of the gateway machine in this domain is
- <B>xyz-pc</B>, you can specify the computer name in the <B>Gateway</B>
- box as either <B>xyz-pc</B> or
- <B>xyz-pc.xcompany.com</B>.
- </TD></TR></TABLE>
- <P><LI>Select the <B>AFS Cells</B> tab. If the cell to which the
- machine belongs is not listed in the list of AFS cells, choose the
- <B>Add</B> button. The New Cell dialog box opens. Enter the
- cell name in the <B>AFS Cell</B> box and a short description in the
- <B>Description</B> box. 
- <P>Choose the <B>Add</B> button. The Add Server dialog box
- opens. In the <B>Server Name</B> box, enter the name of a Volume
- Location Server in the selected cell. Choose <B>OK</B> to close the
- Add Server dialog box. Repeat this process, adding information for all
- Volume Location Servers in the cell. (If you do not know the names of
- the Volume Location Servers in the AFS cell, consult your AFS system
- administrator.) After all server information has been entered, choose
- <B>OK</B> to close the New Cell dialog box.
- <P>Note that an identical entry must exist in the AFS Light Gateway&#39;s
- cell database (<B>afsdcell.ini</B> file) in order for the AFS Light
- user to authenticate to the cell. See <A HREF="#HDRGATEWAY">To Configure the AFS Client as an AFS Light Gateway</A> for more information on synchronizing the gateway
- machine&#39;s cell database with your light client&#39;s cell
- database.
- <P><LI>Select the <B>Drive Letters</B> tab. To map a drive letter on
- the Windows machine to the AFS filespace, choose the <B>Add</B>
- button. The Map Drive Letter dialog box opens.
- <P><LI>In the <B>Drive Letter</B> box, select the drive to be mapped to the
- AFS filespace or accept the default. In the <B>AFS</B>
- <B>Path</B> box, indicate the AFS location to which you want to map the
- selected drive, for example,<B> /afs</B>. If desired, enter a
- description of the AFS drive mapping in the <B>Description</B> box.
- Choose <B>OK</B> to connect the drive to the specified place in the AFS
- filespace.
- <P><LI>Choose <B>OK</B> to close the AFS Light Configuration utility.
- <P>AFS Light is now configured in the specified AFS cell and the AFS filespace
- can be accessed via the drive mapping in the Windows Explorer.
- </OL>
- <P><H3><A NAME="Header_27" HREF="awqbg002.htm#ToC_27">To Configure the AFS Server</A></H3>
- <A NAME="IDX236"></A>
- <A NAME="IDX237"></A>
- <P>The configuration process starts the services needed to run the AFS Server
- and sets up AFS partitions on your Windows NT machine. Using the AFS
- Configuration Wizard, you can quickly configure the AFS Server as either the
- first server in a new AFS cell or as a server in an existing AFS cell.
- Note that if you have upgraded to this version of the AFS Server,
- previous-version configuration information is preserved; you do not need
- to reconfigure the server.
- <P><B>
- <A NAME="IDX238"></A>
- To configure the AFS Server as the first AFS Server in a cell&#58;</B>
- <OL TYPE=1>
- <P><LI>From the <B>Start</B> menu, choose <B>Programs</B>, then choose
- <B>IBM AFS</B>, then choose <B>Server</B>, and then choose
- <B>Configuration Wizard</B>. The AFS Server Quick-Start
- Wizard opens.
- <P><LI>Choose the <B>Next</B> button. The Cell and Server Information
- dialog box appears.
- <P><LI>Choose the <B>This will be the first server in a new AFS cell</B>
- option.
- <P><LI>In the <B>Cell Name</B> box, enter a name for the new AFS cell.
- <P>The following constraints apply to the form of an internet domain name that
- can be used as the name of an AFS cell&#58;
- <UL>
- <P><LI>The cell name must be unique in order to distinguish your AFS cell from
- all others in the AFS global namespace.
- <P><LI>The cell name can contain as many as 64 characters; however, shorter
- names are recommended.
- <P><LI>The cell name must include only lowercase characters, numbers,
- underscores, dashes, and periods to ensure portability between different
- operating system types.
- <P><LI>The cell name can include any numbers or letters, which are conventionally
- separated by periods.
- <P><LI>The cell name must end in a suffix that indicates the type of institution
- to which it belongs. Some of the standard suffixes are
- <B>.com</B>, for business and other commercial organizations,
- <B>.edu</B>, for educational institutions such as universities,
- <B>.gov</B>, for government institutions, and
- <B>.mil</B>, for military institutions.
- </UL>
- <P><LI>In the <B>Password</B> box, enter the character string to serve as the
- password for the AFS Server principal account in the cell
- (<B>afs</B>). All AFS Servers obtain AFS tokens as this principal,
- and the Authentication Server&#39;s Ticket Granting Service (TGS) module uses
- this password to encrypt the server tickets that AFS Clients present to
- servers during mutual authentication.
- <P><LI>In the <B>Verify password</B> box, retype the initial AFS password for
- the AFS Server principal account for this cell to confirm the password
- selection.
- <P><LI>Choose the <B>Next</B> button. The Administrative Information
- dialog box appears.
- <P><LI>In the <B>Name</B> box, enter a username to serve as a generic AFS
- administrative account for this cell (generally, <B>admin</B>.)
- <P>
- <A NAME="IDX239"></A>
- Use of a generic administrative account means that you do not need to grant
- privileges to each system administrator. Instead, each administrator
- knows the name and password of this generic administrative account and uses
- this identity to authenticate to AFS when performing tasks that require
- administrative privileges.
- <P><LI>In the <B>Password</B> box, enter a character string to serve as the
- password for the AFS administrative account.
- <P><LI>In the <B>Verify password</B> box, retype the password for the AFS
- administrative account to confirm the password selection.
- <P><LI>Specify the AFS User ID (UID) to assign to the AFS administrative
- account&#58;
- <UL>
- <P><LI>(Recommended) To automatically assign the next available UID to the AFS
- administrative account, choose the <B>Use the next available AFS UID</B>
- option.
- <P><LI>To assign a specific UID to the AFS administrative account, choose the
- <B>Use this AFS ID</B> option and enter the desired UID in the entry
- box.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">It is not generally recommended that you assign a specific UID to a new AFS
- account, unless you need to make the AFS UID match an existing UNIX
- UID.
- </TD></TR></TABLE>
- </UL>
- <P><LI>Choose the <B>Next</B> button. The File Service dialog box
- appears.
- <P>
- <A NAME="IDX240"></A>
- AFS File Servers deliver requested files and data from the server to AFS
- Clients. File Servers store files and data, handle requests for
- copying, moving, creating, and deleting files and directories, and keep track
- of status information about each file and directory on the server.
- <P>Because you are configuring the first AFS Server in a new cell, the File
- Service must be configured on the server, and will be configured
- automatically.
- <P><LI>Choose the <B>Next</B> button. The Database Service dialog box
- appears.
- <P>
- <A NAME="IDX241"></A>
- Every AFS cell must contain at least one Database Server. Each Database
- Server runs the Database processes that maintain the AFS databases&#58; the
- Authentication Database, the Protection Database, the Volume Location
- Database, and optionally the Backup Database.
- <P>Because you are configuring the first AFS Server in a new cell, the
- Database Service must be configured on the server, and will be configured
- automatically.
- <P><LI>Choose the <B>Next</B> button. The Backup Server dialog box
- appears.
- <P>
- <A NAME="IDX242"></A>
- A Backup Server maintains the Backup Database where information related to the
- Backup system is stored. The Backup Server enables the AFS system
- administrator to back up data in the AFS filespace from volumes to
- tape. The data can then be restored from tape in the event that it is
- lost from the file system (for example, if a system or disk failure causes
- data to be lost).
- <P><LI>Choose the <B>Yes, configure as a Backup Server</B> option if you want
- to configure this AFS Server as a Backup Server. If you do not want to
- configure this AFS Server as a Backup Server, choose the <B>No, do not
- configure as a Backup Server</B> option.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">If the Backup Server is configured on any Database Server in the cell, it
- must be configured on <I>all</I> Database Servers in the cell.
- </TD></TR></TABLE>
- <P><LI>Choose the <B>Next</B> button. The AFS Partition dialog box
- appears.
- <P>
- <A NAME="IDX243"></A>
- Every AFS File Server must have at least one partition designated exclusively
- to storing AFS volumes, and all AFS volumes must reside on partitions that
- have been designated as AFS partitions. On a Windows NT machine, only
- NTFS volumes can be designated as AFS partitions. In addition, AFS
- partitions can be created only on NTFS volumes that are empty (or contain only
- the Windows NT Recycle Bin).
- <P>Because you are configuring the first AFS Server in a new cell, you must
- designate an AFS partition on the server.
- <P><LI>In the list of NTFS volumes, choose the volume you want to designate as an
- AFS partition. In the <B>AFS Partition Name</B> box, enter the last
- part of the partition name.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">There can exist up to 256 AFS partitions on an AFS Server. By
- convention, each partition is named <B>/vicep</B><I>x</I>, where
- <I>x</I> is one or two lowercase letters of the English alphabet.
- AFS partitions can be named <B>/vicepa</B>, <B>/vicepb</B>, and so on
- up to <B>/vicepz</B>. Additional partitions can be named
- <B>/vicepaa</B> through <B>vicepaz</B> and so on up to
- <B>/vicepiv</B>.
- </TD></TR></TABLE>
- <P>It is strongly recommended that you use the NTFS volume drive letter as the
- last letter of the partition name.
- <P><LI>Choose the <B>Next</B> button. The Root AFS Volumes dialog box
- appears.
- <P>
- <A NAME="IDX244"></A>
- <A NAME="IDX245"></A>
- <A NAME="IDX246"></A>
- The root AFS volumes are two volumes that every AFS cell must include in its
- file system. They are named&#58;
- <UL>
- <P><LI><B>root.afs</B>, for the volume corresponding to the top
- (<B>/afs</B>) level of the AFS filespace
- <P><LI><B>root.cell</B>, for the volume mounted just below
- <B>/afs</B> at the cell&#39;s name (for example,
- <B>/afs/yourcompany.com</B> in the
- <B>yourcompany.com</B> cell)
- </UL>
- <P>Because you are configuring the first AFS Server in a new cell, the
- cell&#39;s root volumes must be created on the server, and will be created
- automatically during the configuration of the server.
- <P><LI>Choose the <B>Next</B> button. The Replication dialog box
- appears.
- <P>
- <A NAME="IDX247"></A>
- If you want to be able to take advantage of the replication capabilities of
- AFS, the AFS root volumes must be replicated. The replication process
- creates one or more read-only copies of an AFS volume, and distributes these
- copies to one or more other sites (AFS partitions and servers).
- Replication increases system efficiency and improves data availability by
- making the contents of an AFS volume accessible on one or more AFS File Server
- machines.
- <P>Because you are configuring the first AFS Server in a new cell, the
- cell&#39;s root volumes must be replicated on the server, and will be
- replicated automatically during the configuration of the server.
- <P><LI>Choose the <B>Next</B> button. The System Control Service
- dialog box appears.
- <P>
- <A NAME="IDX248"></A>
- In cells running the domestic version of AFS for Windows, the System Control
- Server distributes new versions of AFS Server configuration information to all
- AFS servers. It is generally recommended that you designate the first
- server in an AFS cell as the System Control Server. (Cells running the
- international version of AFS for Windows do not use the System Control Server
- to distribute system configuration files.)
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">The role of System Control Server can later be assigned to a different server
- machine if desired. However, depending on the number of AFS servers in
- the cell, the process of assigning the role to another machine can be very
- time-consuming.
- </TD></TR></TABLE>
- <P><LI>To configure this AFS Server as the System Control Server for the AFS
- cell, choose the <B>Configure as the System Control Server</B>
- option. If you do not want to configure this AFS Server as the System
- Control Server for the AFS cell, choose the <B>Do not configure as the
- System Control Server</B> option.
- <P><LI>Choose the <B>Next</B> button. The Configure the System dialog
- box appears.
- <P>A list of the steps that will be taken to configure this AFS Server is
- displayed, enabling you to review the steps before starting the actual
- configuration process.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">To return to a previous step to review or modify your selections, choose the
- <B>Back</B> button.
- </TD></TR></TABLE>
- <P><LI>To begin configuration of the AFS Server on this machine, choose the
- <B>Configure</B> button. The AFS Server is configured according to
- your specifications. The progress bar at the bottom of the dialog box
- indicates the steps in progress. A message box appears indicating that
- configuration is complete.
- </OL>
- <P>
- <A NAME="IDX249"></A>
- <B>To configure the AFS Server into an existing AFS cell&#58;</B>
- <OL TYPE=1>
- <P><LI>From the <B>Start</B> menu, choose <B>Programs</B>, then choose
- <B>IBM AFS</B>, then choose <B>Server</B>, and then choose
- <B>Configuration Wizard</B>. The AFS Server Quick-Start
- Wizard opens.
- <P><LI>Choose the <B>Next</B> button. The Cell and Server Information
- dialog box appears.
- <P><LI>Choose the <B>Make this host a server in an existing AFS cell</B>
- option.
- <P><LI>In the <B>Cell Name</B> box, enter the name of the AFS cell to which
- you want to add the new AFS Server.
- <P><LI>Choose the <B>Next</B> button. The Administrative Information
- dialog box appears.
- <P><LI>In the <B>Name</B> box, enter the username of the AFS administrative
- account, for example <B>admin</B>, or the username of an AFS user account
- with administrative privileges.
- <P><LI>In the <B>Password</B> box, enter the password for the AFS
- administrative account or the AFS user account with administrative privileges
- entered in the <B>Name</B> box.
- <P><LI>In the <B>AFS Server</B> box, enter the hostname of a running AFS
- Server in this AFS cell. AFS configuration information will be
- retrieved from the server for use in configuring this new AFS Server.
- <P><LI>Choose the <B>Next</B> button. The File Service dialog box
- appears.
- <P>
- <A NAME="IDX250"></A>
- AFS File Servers deliver requested files and data from the server to AFS
- Clients. File Servers store files and data, handle requests for
- copying, moving, creating, and deleting files and directories, and keep track
- of status information about each file and directory on the server.
- <P>To configure this AFS Server as a File Server, choose the <B>Yes,
- configure as a File Server</B> option. If you do not want to
- configure this AFS Server as a File Server, choose the <B>No, do not
- configure as a File Server</B> option.
- <P><LI>Choose the <B>Next</B> button. The Database Service dialog box
- appears.
- <P>
- <A NAME="IDX251"></A>
- Every AFS cell must contain at least one Database Server. Each Database
- Server runs the Database processes that maintain the AFS databases&#58; the
- Authentication Database, the Protection Database, the Volume Location
- Database, and optionally the Backup Database.
- <P>To configure this AFS Server as a Database Server, choose the <B>Yes,
- configure as a Database Server</B> option. If there is a System
- Control Server in the AFS cell to which you are adding the server, enter its
- hostname in the System Control Server box. AFS configuration
- information (for example, the list of AFS Database Servers maintained in the
- <B>CellServDB</B> file on each AFS Server machine) will be updated by this
- server. If you do not want to configure this AFS Server as a Database
- Server, choose the <B>No, do not configure as a Database Server</B>
- option.
- <P><LI>Choose the <B>Next</B> button. The Backup Server dialog box
- appears.
- <P>
- <A NAME="IDX252"></A>
- A Backup Server maintains the Backup Database where information related to the
- Backup system is stored. The Backup Server enables the AFS system
- administrator to back up data in the AFS filespace from volumes to
- tape. The data can then be restored from tape in the event that it is
- lost from the file system (for example, if a system or disk failure causes
- data to be lost).
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">The Backup Server can only be configured on a machine that is configured as a
- Database Server. Also, if the Backup Server is configured on any
- Database Server in the cell, it must be configured on <I>all</I> Database
- Servers in the cell.
- </TD></TR></TABLE>
- <P><LI>Choose the <B>Yes, configure as a Backup Server</B> option if you want
- to configure this AFS Server as a Backup Server. If you do not want to
- configure this AFS Server as a Backup Server, choose the <B>No, do not
- configure as a Backup Server</B> option.
- <P><LI>Choose the <B>Next</B> button. The AFS Partition dialog box
- appears.
- <P>If you are configuring this AFS Server as a File Server, you must specify
- an NTFS volume to designate as an AFS partition. Every AFS File Server
- must have at least one partition designated exclusively to storing AFS
- volumes, and all AFS volumes must reside on partitions that have been
- designated as AFS partitions. On a Windows NT machine, only NTFS
- volumes can be designated as AFS partitions. In addition, AFS
- partitions can be created only on NTFS volumes that are empty (or contain only
- the Windows NT Recycle Bin).
- <P>To designate a volume as an AFS partition, choose the <B>Yes, create a
- partition</B> option. In the list of NTFS volumes, choose the volume
- that you want to designate as an AFS partition. In the <B>AFS
- Partition Name</B> box, enter the last part of the partition name.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">There can exist up to 256 AFS partitions on an AFS Server. By
- convention, each partition is named <B>/vicep</B><I>x</I>, where
- <I>x</I> is one or two lowercase letters of the English alphabet.
- AFS partitions can be named <B>/vicepa</B>, <B>/vicepb</B>, and so on
- up to <B>/vicepz</B>. Additional partitions can be named
- <B>/vicepaa</B> through <B>vicepaz</B> and so on up to
- <B>/vicepiv</B>.
- </TD></TR></TABLE>
- <P>It is strongly recommended that you use the NTFS volume drive letter as the
- last letter of the partition name.
- <P>If you do not want to designate a volume as an AFS partition, choose the
- <B>No, do not create a partition</B> option.
- <P><LI>Choose the <B>Next</B> button. The Root AFS Volumes dialog box
- appears.
- <P>The root AFS volumes are two volumes that every AFS cell must include in
- its file system. They are named&#58;
- <UL>
- <P><LI><B>root.afs</B>, for the volume corresponding to the top
- (<B>/afs</B>) level of the AFS filespace
- <P><LI><B>root.cell</B>, for the volume mounted just below
- <B>/afs</B> at the cell&#39;s name (for example,
- <B>/afs/yourcompany.com</B> in the
- <B>yourcompany.com</B> cell)
- </UL>
- <A NAME="IDX253"></A>
- Because you are adding this AFS Server to an existing AFS cell, the root AFS
- volumes already exist in the cell, and the AFS Configuration Wizard indicates
- that you do not need to create the root volumes. 
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">If for some reason the root AFS volumes do not yet exist in this AFS cell,
- you can choose the <B>Yes, create the root volumes</B> option to create
- the root volumes on this AFS Server.
- </TD></TR></TABLE>
- <P><LI>Choose the <B>Next</B> button. The Replication dialog box
- appears.
- <P>If you want to be able to take advantage of the replication capabilities of
- AFS, the AFS root volumes must be replicated. The replication process
- creates one or more read-only copies of an AFS volume, and distributes these
- copies to one or more other sites (AFS partitions and servers).
- Replication increases system efficiency and improves data availability by
- making the contents of an AFS volume accessible on one or more AFS File Server
- machines.
- <P>Because you are adding this AFS Server to an existing AFS cell, the root
- AFS volumes are probably already replicated, and the AFS Server Configuration
- Wizard indicates that you do not need to replicate the root AFS
- volumes.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">If for some reason the root AFS volumes are not yet replicated in this AFS
- cell, you can choose the <B>Yes, replicate the root volumes</B> option to
- replicate the AFS cell&#39;s root volumes on this AFS Server.
- </TD></TR></TABLE>
- <P><LI>Choose the <B>Next</B> button. The System Control Service
- dialog box appears.
- <P>In cells running the domestic version of AFS for Windows, the System
- Control Server distributes new versions of AFS Server configuration
- information to all AFS servers and the System Control Client machines obtain
- common AFS configuration files from the System Control machine. (Cells
- running the international version of AFS for Windows do not use the System
- Control Server to distribute system configuration files or the System Control
- Client to obtain these files.)
- <P><LI>To configure this AFS Server as the System Control Server for the AFS
- cell, choose the <B>Configure as the System Control Server</B>
- option. To configure this AFS Server as a System Control Client, choose
- the <B>Configure as a System Control Client</B> option and enter the
- hostname of the System Control Server in this AFS cell. The AFS Server
- will obtain new versions of AFS Server configuration information from the
- server specified. If you do not want to configure this AFS Server as
- the System Control Server for the AFS cell or as a System Control Client,
- choose the <B>Do not configure as the System Control Client or Server</B>
- option.
- <P><LI>Choose the <B>Next</B> button. The Configure the System dialog
- box appears.
- <P>A list of the steps that will be taken to configure this AFS Server is
- displayed, enabling you to review the steps before starting the actual
- configuration process.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">To return to a previous step to review or modify your selections, choose the
- <B>Back</B> button.
- </TD></TR></TABLE>
- <P><LI>To begin configuration of the AFS Server on this machine, choose the
- <B>Configure</B> button. If you are configuring the AFS Server into
- an AFS cell in which there are Database Servers running a version of AFS older
- than version 3.5, a dialog box appears prompting you to enter the AFS
- principal password. 
- <P>The AFS Server is configured according to your specifications. The
- progress bar at the bottom of the dialog box indicates the steps in
- progress. A message box appears indicating that configuration is
- complete.
- </OL>
- <P><H3><A NAME="Header_28" HREF="awqbg002.htm#ToC_28">To Configure the AFS Control Center</A></H3>
- <A NAME="IDX254"></A>
- <A NAME="IDX255"></A>
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">If you have installed the AFS Control Center in combination with the AFS
- Server, or the AFS Client, or both, then you do not need to configure the AFS
- Control Center. The AFS Control Center is automatically configured when
- the AFS Server or AFS Client is configured. If you have installed the
- AFS Control Center only, then the Control Center must be configured on your
- system before it can be used.
- </TD></TR></TABLE>
- <OL TYPE=1>
- <P><LI>From the <B>Start</B> menu, choose <B>Settings</B>, then choose
- <B>Control Panel</B>.
- <P><LI>Double-click the <B>AFS Control Center</B> icon. The AFS
- Control Center Properties dialog box appears.
- <P><LI>In the <B>Default Cell</B> box, enter the full name of the AFS cell to
- be administered by default.
- <P><LI>If the cell to be administered by the AFS Control Center is not listed in
- the list of AFS cells, choose the <B>Add</B> button. The New Cell
- dialog box opens. Enter the cell name in the <B>AFS Cell</B> box
- and a short description in the <B>Description</B> box.
- <P>Choose the <B>Add</B> button. The Add Server dialog box
- opens. In the <B>Server Name</B> box, enter the name of a Volume
- Location Server in the selected cell. Choose <B>OK</B> to close the
- Add Server dialog box. Repeat this process, adding information for all
- Volume Location Servers in the cell. After all server information has
- been entered, choose <B>OK</B> to close the New Cell dialog box.
- <P><LI>Choose <B>OK</B> to close the AFS Control Center Properties dialog
- box.
- </OL>
- <P>The AFS Control Center is now configured.
- <A NAME="IDX256"></A>
- <HR><H2><A NAME="HDRUNINSTALL" HREF="awqbg002.htm#ToC_29">Uninstalling AFS for Windows</A></H2>
- <P>This section outlines uninstallation prerequisites, provides
- instructions for uninstalling AFS for Windows, and lists the changes that the
- uninstallation process makes to your system.
- <A NAME="IDX257"></A>
- <A NAME="IDX258"></A>
- <P><H3><A NAME="Header_30" HREF="awqbg002.htm#ToC_30">Reinstalling and Upgrading</A></H3>
- <P>On a Windows NT machine, it is <I>not</I> necessary to uninstall
- the components of AFS for Windows for the purpose of reinstalling or upgrading
- the software. To reinstall or upgrade AFS for Windows, follow the
- installation procedure described in <A HREF="#HDRHOWTOINSTALL">To Install AFS for Windows</A>. During the installation process, the
- previously-installed AFS components are replaced. AFS configuration
- information is preserved.
- <P>On a Windows 95 or Windows 98 machine, you must uninstall the
- previously-installed AFS Light component, as described in <A HREF="#HDRTOUNINSTALL">To Uninstall AFS for Windows</A>, before reinstalling or upgrading AFS Light.
- <A NAME="IDX259"></A>
- <A NAME="IDX260"></A>
- <A NAME="IDX261"></A>
- <P><H3><A NAME="Header_31" HREF="awqbg002.htm#ToC_31">Uninstallation Prerequisites</A></H3>
- <P>Uninstalling AFS results in the deletion of all AFS application
- files. These files cannot be deleted if other applications are using
- them. For this reason, you must close all AFS dialog boxes before
- uninstalling AFS for Windows.
- <P>If you are uninstalling the AFS Server for the purpose of decommissioning
- the machine, the following prerequisites are necessary to avoid loss of
- data&#58;
- <OL TYPE=1>
- <P><LI>If the AFS Server is functioning as a File Server, move all read/write
- volumes to another AFS File Server, and remove all read-only volumes.
- <P><LI>Unconfigure the AFS Server. Open the AFS Server Configuration
- utility and choose the <B>Server</B> tab. Clear all check boxes and
- choose <B>OK</B>.
- </OL>
- <A NAME="IDX262"></A>
- <A NAME="IDX263"></A>
- <A NAME="IDX264"></A>
- <A NAME="IDX265"></A>
- <A NAME="IDX266"></A>
- <A NAME="IDX267"></A>
- <A NAME="IDX268"></A>
- <P><H3><A NAME="HDRTOUNINSTALL" HREF="awqbg002.htm#ToC_32">To Uninstall AFS for Windows</A></H3>
- <OL TYPE=1>
- <P><LI>From the <B>Start</B> menu, choose <B>Settings</B>, then choose
- <B>Control Panel</B>.
- <P><LI>Double-click the <B>Add/Remove Programs</B> icon. The
- Add/Remove Programs Properties dialog box appears, displaying the
- <B>Install/Uninstall</B> tab.
- <P><LI>Close the Control Panel.
- <P><LI>Select the AFS component to be uninstalled, and select the
- <B>Add/Remove</B> button. The Confirm File Deletion dialog box
- appears, verifying that you want to remove the selected AFS for Windows
- component. Click <B>Yes</B> to continue with the uninstallation
- procedure.
- <P><LI>An AFS message box appears asking if you want to preserve configuration
- information. Select <B>Yes</B> to preserve configuration
- information or <B>No</B> to delete all configuration information.
- (No configuration information is associated with the AFS Supplemental
- Documentation component. If you are removing this component from your
- system, the AFS message box does not appear.)
- <P><LI>The Remove Programs from your Computer dialog box opens, displaying the
- components being removed from your system.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">A message box can possibly appear asking if you want to remove shared AFS
- files that are no longer needed by other components. Click <B>Yes To
- All</B> to completely remove the selected AFS component.
- </TD></TR></TABLE>
- </OL>
- <P>The selected AFS for Windows component is now uninstalled. If you
- installed a combination of AFS for Windows components, you must repeat Steps
- 4-6 to remove each component separately.
- <P><H3><A NAME="Header_33" HREF="awqbg002.htm#ToC_33">Changes Made to Your System</A></H3>
- <A NAME="IDX269"></A>
- <P><H4><A NAME="Header_34">Changes made to your system by uninstalling the AFS Client</A></H4>
- <P>Uninstalling the AFS Client makes the following changes to your
- system&#58;
- <UL>
- <P><LI>Removes all AFS Client files from the <B>\Program
- Files\Ibm\Afs\Client\Program</B> directory, removes the <B>Client</B>
- directory, and, if no other AFS components remain installed, removes the
- <B>Ibm</B> directory.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">The directories are <I>not</I> removed if they contain any files other
- than those installed by the AFS for Windows <B>setup</B> program.
- </TD></TR></TABLE>
- <P><LI>Removes the <B>IBM AFS</B> program group from the <B>Start</B>
- menu if no other AFS components remain installed.
- <P><LI>Removes the <B>AFS Client Configuration</B> icon from the Control
- Panel.
- <P><LI>Removes the AFS Menu from the Windows NT Explorer&#39;s context
- menu.
- <P><LI>Deletes the <B>IBM AFS Client</B> service.
- <P><LI>Removes AFS Client related registry entries from your system. Note
- that if you chose to preserve configuration information, some information
- remains in the registry after the uninstallation process.
- </UL>
- <P><H4><A NAME="Header_35">Changes made to your system by uninstalling AFS Light</A></H4>
- <P>Uninstalling AFS Light makes the following changes to your
- system&#58;
- <UL>
- <P><LI>Removes all AFS files from the <B>\Program
- Files\Ibm\Afs\Client\Program</B> directory and removes the <B>Ibm</B>
- directory.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">The directories are <I>not</I> removed if they contain any files other
- than those installed by the AFS for Windows <B>setup</B> program.
- </TD></TR></TABLE>
- <P><LI>Removes the <B>IBM AFS</B> program group from the <B>Start</B>
- menu.
- <P><LI>Removes the <B>AFS Light Configuration</B> icon from the Control
- Panel.
- <P><LI>Removes the AFS Menu from the Windows Explorer&#39;s context menu.
- <P><LI>Removes AFS Light related registry entries from your system. Note
- that if you chose to preserve configuration information, some information
- remains in the registry after the uninstallation process.
- </UL>
- <P><H4><A NAME="Header_36">Changes made to your system by uninstalling the AFS Server</A></H4>
- <P>Uninstalling the AFS Server makes the following changes to your
- system&#58;
- <UL>
- <P><LI>Removes all AFS Server files from the <B>\Program
- Files\Ibm\Afs\Server</B> directory, removes the <B>Server</B> directory,
- and, if no other AFS components remain installed, removes the <B>Ibm</B>
- directory.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">These directories are <I>not</I> removed if they contain any files other
- than those installed by the AFS for Windows <B>setup</B> program.
- Also, if you chose to preserve configuration information, some files in the
- <B>\Program Files\Ibm\Afs\Server</B> directory are <I>not</I>
- removed.
- </TD></TR></TABLE>
- <P><LI>Removes the <B>IBM AFS</B> program group from the <B>Start</B>
- menu if no other AFS components remain installed.
- <P><LI>Removes the <B>AFS Server Configuration</B> icon from the Control
- Panel.
- <P><LI>Deletes the <B>IBM AFS Server</B> service.
- <P><LI>Removes AFS Server related registry entries from your system. Note
- that if you chose to preserve configuration information, some information
- remains in the registry after the uninstallation process.
- </UL>
- <P><H4><A NAME="Header_37">Changes made to your system by uninstalling the AFS Control Center</A></H4>
- <P>Uninstalling the AFS Control Center makes the following changes to your
- system&#58;
- <UL>
- <P><LI>Removes all AFS Control Center files from the <B>\Program
- Files\Ibm\Afs\Control Center</B> directory, removes the <B>Control
- Center</B> directory, and, if no other AFS components remain installed,
- removes the <B>Ibm</B> directory.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">These directories are <I>not</I> removed if they contain any files other
- than those installed by the AFS for Windows <B>setup</B> program.
- </TD></TR></TABLE>
- <P><LI>Removes the <B>IBM AFS</B> program group from the <B>Start</B>
- menu if no other AFS components remain installed.
- <P><LI>Removes the <B>AFS Control Center</B> icon from the Control
- Panel. Note that this icon appears in the Control Panel only if no
- other AFS for Windows components are installed on your system.
- <P><LI>Removes AFS Control Center related registry entries from your
- system. Note that if you chose to preserve configuration information,
- some information remains in the registry after the uninstallation
- process.
- </UL>
- <P><H4><A NAME="Header_38">Changes made to your system by uninstalling the AFS supplemental documentation</A></H4>
- <P>Uninstalling the AFS supplemental documentation makes the following
- changes to your system&#58;
- <UL>
- <P><LI>Removes the <B>SysAdminGd</B> directory and the <B>CmdRef</B>
- directory from the <B>\Program Files\Ibm\Afs\Documentation\Html</B>
- directory, and, if no other AFS components remain installed, removes the
- <B>Ibm</B> directory.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">These directories are <I>not</I> removed if they contain any files other
- than those installed by the AFS for Windows <B>setup</B> program.
- </TD></TR></TABLE>
- <P><LI>Removes the <B>IBM AFS</B> program group from the <B>Start</B>
- menu if no other AFS components remain installed.
- <P><LI>Removes AFS supplemental documentation related registry entries from your
- system.
- </UL>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awqbg002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awqbg002.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Top_Of_Page"><IMG SRC="../top.gif" BORDER="0" ALT="[Top of Topic]"></A> <A HREF="awqbg004.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="awqbg004.htm#HDRINDEX"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <!-- Begin Footer Records  ========================================== -->
- <P><HR><B> 
- <br>&#169; <A HREF="http://www.ibm.com/">IBM Corporation 2000.</A>  All Rights Reserved 
- </B> 
- <!-- End Footer Records  ============================================ -->
- <A NAME="Bot_Of_Page"></A>
- </BODY></HTML>
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg004.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg004.htm:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg004.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg004.htm:1.1	Fri Nov  3 21:18:49 2000
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/InstallGd/awqbg004.htm	Fri Jul 18 12:42:58 2008
***************
*** 1,341 ****
- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3//EN">
- <HTML><HEAD>
- <TITLE>Quick Beginnings</TITLE>
- <!-- Begin Header Records ========================================== -->
- <!-- /tmp/idwt3639/awqbg000.scr converted by idb2h R4.2 (359) ID -->
- <!-- Workbench Version (AIX) on 6 Dec 1999 at 11:23:35 -->
- <META HTTP-EQUIV="updated" CONTENT="Mon, 06 Dec 1999 11:23:34">
- <META HTTP-EQUIV="review" CONTENT="Wed, 06 Dec 2000 11:23:34">
- <META HTTP-EQUIV="expires" CONTENT="Thu, 06 Dec 2001 11:23:34">
- </HEAD><BODY>
- <!-- (C) IBM Corporation 2000. All Rights Reserved -->
- <BODY bgcolor="ffffff">
- <!-- End Header Records ============================================ -->
- <A NAME="Top_Of_Page"></A>
- <H1>Quick Beginnings</H1>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awqbg002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awqbg003.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Bot_Of_Page"><IMG SRC="../bot.gif" BORDER="0" ALT="[Bottom of Topic]"></A> <P>
- <P>
- <HR><H1><A NAME="HDRINDEX" HREF="awqbg002.htm#ToC_39">Index</A></H1>
- <A NAME="IDX0_41" HREF="#IDX1_41">A</A>
- <A NAME="IDX0_42" HREF="#IDX1_42">B</A>
- <A NAME="IDX0_43" HREF="#IDX1_43">C</A>
- <A NAME="IDX0_44" HREF="#IDX1_44">D</A>
- <A NAME="IDX0_46" HREF="#IDX1_46">F</A>
- <A NAME="IDX0_47" HREF="#IDX1_47">G</A>
- <A NAME="IDX0_49" HREF="#IDX1_49">I</A>
- <A NAME="IDX0_4C" HREF="#IDX1_4C">L</A>
- <A NAME="IDX0_4D" HREF="#IDX1_4D">M</A>
- <A NAME="IDX0_4F" HREF="#IDX1_4F">O</A>
- <A NAME="IDX0_52" HREF="#IDX1_52">R</A>
- <A NAME="IDX0_53" HREF="#IDX1_53">S</A>
- <A NAME="IDX0_55" HREF="#IDX1_55">U</A>
- <HR>
- <STRONG><A NAME="IDX1_41" HREF="#IDX0_41">A</A></STRONG>
- <MENU>
- <LI>AFS
- <MENU>
- <LI>client
- <MENU>
- <LI>overview
- <A HREF="awqbg003.htm#IDX191">(1)</A>
- </MENU>
- <LI>components
- <A HREF="awqbg003.htm#IDX182">(1)</A>
- <LI>configuration
- <MENU>
- <LI>AFS Client
- <A HREF="awqbg003.htm#IDX224">(1)</A>
- <LI>AFS Control Center
- <A HREF="awqbg003.htm#IDX255">(1)</A>
- <LI>AFS Light
- <A HREF="awqbg003.htm#IDX233">(1)</A>
- <LI>AFS Light Gateway
- <A HREF="awqbg003.htm#IDX227">(1)</A>
- <LI>AFS Server
- <A HREF="awqbg003.htm#IDX237">(1)</A>
- <LI>overview
- <A HREF="awqbg003.htm#IDX221">(1)</A>
- </MENU>
- <LI>control center
- <MENU>
- <LI>overview
- <A HREF="awqbg003.htm#IDX188">(1)</A>
- </MENU>
- <LI>installation options
- <A HREF="awqbg003.htm#IDX197">(1)</A>
- <LI>installation procedure
- <A HREF="awqbg003.htm#IDX208">(1)</A>
- <LI>light
- <MENU>
- <LI>overview
- <A HREF="awqbg003.htm#IDX194">(1)</A>
- </MENU>
- <LI>overview
- <A HREF="awqbg003.htm#IDX178">(1)</A>
- <LI>reinstalling
- <A HREF="awqbg003.htm#IDX257">(1)</A>
- <LI>server
- <MENU>
- <LI>overview
- <A HREF="awqbg003.htm#IDX185">(1)</A>
- </MENU>
- <LI>supplemental documentation component
- <A HREF="awqbg003.htm#IDX195">(1)</A>
- <LI>uninstallation prerequisites
- <A HREF="awqbg003.htm#IDX259">(1)</A>
- <LI>uninstallation procedure
- <A HREF="awqbg003.htm#IDX263">(1)</A>
- <LI>upgrading
- <A HREF="awqbg003.htm#IDX205">(1)</A>
- </MENU>
- <LI>AFS Client
- <A HREF="awqbg003.htm#IDX201">(1)</A>
- <MENU>
- <LI><B>setup.co</B> file
- <LI>client-only installation
- <A HREF="awqbg003.htm#IDX200">(1)</A>
- <LI>configuration
- <A HREF="awqbg003.htm#IDX223">(1)</A>
- <LI>configure as AFS Light Gateway
- <A HREF="awqbg003.htm#IDX225">(1)</A>
- <LI>installation
- <A HREF="awqbg003.htm#IDX210">(1)</A>
- <LI>overview
- <A HREF="awqbg003.htm#IDX189">(1)</A>
- <LI>uninstallation
- <A HREF="awqbg003.htm#IDX265">(1)</A>
- </MENU>
- <LI>AFS Control Center
- <MENU>
- <LI>configuration
- <A HREF="awqbg003.htm#IDX254">(1)</A>
- <LI>installation
- <A HREF="awqbg003.htm#IDX213">(1)</A>
- <LI>overview
- <A HREF="awqbg003.htm#IDX186">(1)</A>
- <LI>uninstallation
- <A HREF="awqbg003.htm#IDX268">(1)</A>
- </MENU>
- <LI>AFS Light
- <MENU>
- <LI>configuration
- <A HREF="awqbg003.htm#IDX232">(1)</A>
- <LI>gateway machine
- <A HREF="awqbg003.htm#IDX234">(1)</A>
- <LI>installation
- <A HREF="awqbg003.htm#IDX211">(1)</A>
- <LI>overview
- <A HREF="awqbg003.htm#IDX192">(1)</A>
- <LI>uninstallation
- <A HREF="awqbg003.htm#IDX266">(1)</A>
- </MENU>
- <LI>AFS Light Gateway
- <MENU>
- <LI>authenticating AFS Light users
- <A HREF="awqbg003.htm#IDX229">(1)</A>
- <LI>configuration
- <A HREF="awqbg003.htm#IDX226">(1)</A>
- <LI>synchronizing the cell database
- <A HREF="awqbg003.htm#IDX228">(1)</A>
- </MENU>
- <LI>AFS partitions
- <A HREF="awqbg003.htm#IDX243">(1)</A>
- <LI>AFS Server
- <MENU>
- <LI>configuration
- <MENU>
- <LI>as first server in a cell
- <A HREF="awqbg003.htm#IDX238">(1)</A>
- <LI>as server in an existing cell
- <A HREF="awqbg003.htm#IDX249">(1)</A>
- <LI>overview
- <A HREF="awqbg003.htm#IDX236">(1)</A>
- </MENU>
- <LI>installation
- <A HREF="awqbg003.htm#IDX212">(1)</A>
- <LI>overview
- <A HREF="awqbg003.htm#IDX183">(1)</A>
- <LI>uninstallation
- <A HREF="awqbg003.htm#IDX267">(1)</A>
- </MENU>
- <LI>audience
- <A HREF="awqbg003.htm#IDX181">(1)</A>
- </MENU>
- <STRONG><A NAME="IDX1_42" HREF="#IDX0_42">B</A></STRONG>
- <MENU>
- <LI>Backup Server
- <MENU>
- <LI>configuring in a new cell
- <A HREF="awqbg003.htm#IDX242">(1)</A>
- <LI>configuring in an existing cell
- <A HREF="awqbg003.htm#IDX252">(1)</A>
- </MENU>
- </MENU>
- <STRONG><A NAME="IDX1_43" HREF="#IDX0_43">C</A></STRONG>
- <MENU>
- <LI>CD-ROM documentation
- <A HREF="awqbg003.htm#IDX218">(1)</A>
- <LI>client
- <MENU>
- <LI>overview
- <A HREF="awqbg003.htm#IDX190">(1)</A>
- </MENU>
- <LI>client-only installation
- <A HREF="awqbg003.htm#IDX203">(1)</A>
- <LI>configuration
- <A HREF="awqbg003.htm#IDX222">(1)</A>
- <LI>control center
- <MENU>
- <LI>overview
- <A HREF="awqbg003.htm#IDX187">(1)</A>
- </MENU>
- </MENU>
- <STRONG><A NAME="IDX1_44" HREF="#IDX0_44">D</A></STRONG>
- <MENU>
- <LI>Database Server
- <MENU>
- <LI>configuring in a new cell
- <A HREF="awqbg003.htm#IDX241">(1)</A>
- <LI>configuring in an existing cell
- <A HREF="awqbg003.htm#IDX251">(1)</A>
- </MENU>
- <LI>documentation
- <MENU>
- <LI>CD-ROM
- <A HREF="awqbg003.htm#IDX217">(1)</A>
- <LI>online
- <A HREF="awqbg003.htm#IDX215">(1)</A>
- <LI>online help
- <A HREF="awqbg003.htm#IDX219">(1)</A>
- </MENU>
- <LI>domain user accounts
- <A HREF="awqbg003.htm#IDX230">(1)</A>
- </MENU>
- <STRONG><A NAME="IDX1_46" HREF="#IDX0_46">F</A></STRONG>
- <MENU>
- <LI>File Server
- <MENU>
- <LI>configuring in a new cell
- <A HREF="awqbg003.htm#IDX240">(1)</A>
- <LI>configuring in an existing cell
- <A HREF="awqbg003.htm#IDX250">(1)</A>
- </MENU>
- </MENU>
- <STRONG><A NAME="IDX1_47" HREF="#IDX0_47">G</A></STRONG>
- <MENU>
- <LI>gateway machine name
- <A HREF="awqbg003.htm#IDX235">(1)</A>
- <LI>generic administrative account
- <A HREF="awqbg003.htm#IDX239">(1)</A>
- </MENU>
- <STRONG><A NAME="IDX1_49" HREF="#IDX0_49">I</A></STRONG>
- <MENU>
- <LI>installation
- <MENU>
- <LI>changes made to your system
- <A HREF="awqbg003.htm#IDX214">(1)</A>
- <LI>client-only installation
- <A HREF="awqbg003.htm#IDX199">(1)</A>
- <LI>possible component combinations
- <A HREF="awqbg003.htm#IDX198">(1)</A>
- <LI>procedure
- <A HREF="awqbg003.htm#IDX209">(1)</A>
- <LI>upgrading from an earlier version
- <A HREF="awqbg003.htm#IDX206">(1)</A>
- </MENU>
- <LI>installation options
- <A HREF="awqbg003.htm#IDX196">(1)</A>
- <LI>installation procedure
- <A HREF="awqbg003.htm#IDX207">(1)</A>
- </MENU>
- <STRONG><A NAME="IDX1_4C" HREF="#IDX0_4C">L</A></STRONG>
- <MENU>
- <LI>light
- <MENU>
- <LI>overview
- <A HREF="awqbg003.htm#IDX193">(1)</A>
- </MENU>
- </MENU>
- <STRONG><A NAME="IDX1_4D" HREF="#IDX0_4D">M</A></STRONG>
- <MENU>
- <LI>machine user accounts
- <A HREF="awqbg003.htm#IDX231">(1)</A>
- </MENU>
- <STRONG><A NAME="IDX1_4F" HREF="#IDX0_4F">O</A></STRONG>
- <MENU>
- <LI>online documentation
- <A HREF="awqbg003.htm#IDX216">(1)</A>
- <LI>online help
- <A HREF="awqbg003.htm#IDX220">(1)</A>
- <LI>overview
- <MENU>
- <LI>AFS
- <A HREF="awqbg003.htm#IDX179">(1)</A>
- <LI>document
- <A HREF="awqbg003.htm#IDX180">(1)</A>
- </MENU>
- </MENU>
- <STRONG><A NAME="IDX1_52" HREF="#IDX0_52">R</A></STRONG>
- <MENU>
- <LI>reinstalling
- <A HREF="awqbg003.htm#IDX258">(1)</A>
- <LI>replication
- <MENU>
- <LI>when configuring a new cell
- <A HREF="awqbg003.htm#IDX247">(1)</A>
- </MENU>
- <LI>root AFS volumes
- <MENU>
- <LI>when configuring a new cell
- <A HREF="awqbg003.htm#IDX244">(1)</A>
- <LI>when configuring a server in an existing cell
- <A HREF="awqbg003.htm#IDX253">(1)</A>
- </MENU>
- <LI>root.afs
- <A HREF="awqbg003.htm#IDX245">(1)</A>
- <LI>root.cell
- <A HREF="awqbg003.htm#IDX246">(1)</A>
- </MENU>
- <STRONG><A NAME="IDX1_53" HREF="#IDX0_53">S</A></STRONG>
- <MENU>
- <LI>server
- <MENU>
- <LI>overview
- <A HREF="awqbg003.htm#IDX184">(1)</A>
- </MENU>
- <LI>setup.co file
- <A HREF="awqbg003.htm#IDX202">(1)</A>
- <LI>System Control Server
- <MENU>
- <LI>in a new AFS cell
- <A HREF="awqbg003.htm#IDX248">(1)</A>
- </MENU>
- </MENU>
- <STRONG><A NAME="IDX1_55" HREF="#IDX0_55">U</A></STRONG>
- <MENU>
- <LI>uninstallation
- <MENU>
- <LI>changes made to your system
- <A HREF="awqbg003.htm#IDX269">(1)</A>
- <LI>overview
- <A HREF="awqbg003.htm#IDX256">(1)</A>
- <LI>prerequisites
- <A HREF="awqbg003.htm#IDX260">(1)</A>
- <LI>procedure
- <A HREF="awqbg003.htm#IDX264">(1)</A>
- </MENU>
- <LI>uninstallation prerequisites
- <A HREF="awqbg003.htm#IDX261">(1)</A>
- <LI>uninstallation procedure
- <A HREF="awqbg003.htm#IDX262">(1)</A>
- <LI>upgrading
- <A HREF="awqbg003.htm#IDX204">(1)</A>
- </MENU>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awqbg002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awqbg003.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Top_Of_Page"><IMG SRC="../top.gif" BORDER="0" ALT="[Top of Topic]"></A> <P>
- <!-- Begin Footer Records ========================================== -->
- <P><HR><B>
- <br>&#169; <A HREF="http://www.ibm.com/">IBM Corporation 2000.</A> All Rights Reserved
- </B>
- <!-- End Footer Records ============================================ -->
- <A NAME="Bot_Of_Page"></A>
- </BODY></HTML>
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns000.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns000.htm:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns000.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns000.htm:1.1	Fri Nov  3 21:18:50 2000
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns000.htm	Fri Jul 18 12:42:58 2008
***************
*** 1,43 ****
- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3//EN">
- <HTML><HEAD>
- <TITLE>Release Notes</TITLE>
- <!-- Begin Header Records  ========================================== -->
- <!-- /tmp/idwt4485/awrns000.scr converted by idb2h R4.2 (359) ID      -->
- <!-- Workbench Version (AIX) on 15 Feb 2000 at 10:10:20               -->
- <META HTTP-EQUIV="updated" CONTENT="Tue, 15 Feb 2000 10:10:19">
- <META HTTP-EQUIV="review" CONTENT="Thu, 15 Feb 2001 10:10:19">
- <META HTTP-EQUIV="expires" CONTENT="Fri, 15 Feb 2002 10:10:19">
- </HEAD><BODY>
- <!-- (C) IBM Corporation 2000. All Rights Reserved    --> 
- <BODY bgcolor="ffffff"> 
- <!-- End Header Records  ============================================ -->
- <A NAME="Top_Of_Page"></A>
- <H1>Release Notes</H1>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awrns002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Table of Contents]"></A> <A HREF="#Bot_Of_Page"><IMG SRC="../bot.gif" BORDER="0" ALT="[Bottom of Topic]"></A> <A HREF="awrns002.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="#INDEX_START"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P><HR> 
- AFS for Windows<BR>
- Release Notes<BR>
- <P>Version 3.6 
- <P>Document Number GC09-4559-00
- <P>0000000
- <P><B>First Edition (April 2000)</B>
- <P>This edition applies to&#58;
- <DL COMPACT>
- <DD>IBM AFS for Windows, Version 3.6
- </DL>
- <P>and to all subsequent releases and modifications until otherwise indicated
- in new editions.
- <P>This softcopy version is based on the printed edition of this book.
- Some formatting amendments have been made to make this information more
- suitable for softcopy.
- <P>Order publications through your IBM representative or through the IBM
- branch office serving your locality.
- <P><B>&copy; Copyright International Business Machines Corporation 2000. All rights reserved. </B>
- <P>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awrns002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Table of Contents]"></A> <A HREF="#Top_Of_Page"><IMG SRC="../top.gif" BORDER="0" ALT="[Top of Topic]"></A> <A HREF="awrns002.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="#INDEX_START"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <!-- Begin Footer Records  ========================================== -->
- <P><HR><B> 
- <br>&#169; <A HREF="http://www.ibm.com/">IBM Corporation 2000.</A>  All Rights Reserved 
- </B> 
- <!-- End Footer Records  ============================================ -->
- <A NAME="Bot_Of_Page"></A>
- </BODY></HTML>
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns002.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns002.htm:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns002.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns002.htm:1.1	Fri Nov  3 21:18:50 2000
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns002.htm	Fri Jul 18 12:42:58 2008
***************
*** 1,135 ****
- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3//EN">
- <HTML><HEAD>
- <TITLE>Release Notes</TITLE>
- <!-- Begin Header Records  ========================================== -->
- <!-- /tmp/idwt4485/awrns000.scr converted by idb2h R4.2 (359) ID      -->
- <!-- Workbench Version (AIX) on 15 Feb 2000 at 10:10:20               -->
- <META HTTP-EQUIV="updated" CONTENT="Tue, 15 Feb 2000 10:10:19">
- <META HTTP-EQUIV="review" CONTENT="Thu, 15 Feb 2001 10:10:19">
- <META HTTP-EQUIV="expires" CONTENT="Fri, 15 Feb 2002 10:10:19">
- </HEAD><BODY>
- <!-- (C) IBM Corporation 2000. All Rights Reserved    --> 
- <BODY bgcolor="ffffff"> 
- <!-- End Header Records  ============================================ -->
- <A NAME="Top_Of_Page"></A>
- <H1>Release Notes</H1>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awrns000.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Bot_Of_Page"><IMG SRC="../bot.gif" BORDER="0" ALT="[Bottom of Topic]"></A> <A HREF="awrns003.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="#INDEX_START"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <H2><A NAME="ToC">Table of Contents</A></H2>
- <P><B><A NAME="ToC_1" HREF="awrns003.htm#HDRINTRO">Introduction</A></B><BR>
- <MENU>
- <LI><A NAME="ToC_2" HREF="awrns003.htm#Header_2">Overview</A>
- <LI><A NAME="ToC_3" HREF="awrns003.htm#Header_3">About the Release Notes</A>
- <MENU>
- <LI><A NAME="ToC_4" HREF="awrns003.htm#Header_4">Audience</A>
- <LI><A NAME="ToC_5" HREF="awrns003.htm#Header_5">Document Organization</A>
- </MENU></MENU>
- <P><B><A NAME="ToC_6" HREF="awrns004.htm#HDRCLIENT">AFS Client Release Notes</A></B><BR>
- <MENU>
- <LI><A NAME="ToC_7" HREF="awrns004.htm#Header_7">Introduction</A>
- <LI><A NAME="ToC_8" HREF="awrns004.htm#HDRPREREQ">AFS Client Installation Requirements</A>
- <MENU>
- <LI><A NAME="ToC_9" HREF="awrns004.htm#Header_9">Hardware</A>
- <LI><A NAME="ToC_10" HREF="awrns004.htm#Header_10">Software</A>
- <LI><A NAME="ToC_11" HREF="awrns004.htm#Header_11">Administrative Privilege Requirement</A>
- </MENU>
- <LI><A NAME="ToC_12" HREF="awrns004.htm#Header_12">Product Notes</A>
- <MENU>
- <LI><A NAME="ToC_13" HREF="awrns004.htm#Header_13">Additional Configuration Options Available Via the Client Interface</A>
- <LI><A NAME="ToC_14" HREF="awrns004.htm#HDRCACHE">AFS Client Cache Location Is Now Configurable</A>
- <LI><A NAME="ToC_15" HREF="awrns004.htm#Header_15">Mapping Global Drives to the AFS Filespace</A>
- <LI><A NAME="ToC_16" HREF="awrns004.htm#Header_16">AFS Client Computer Name Must Correspond to the Name Service Host Name</A>
- <LI><A NAME="ToC_17" HREF="awrns004.htm#Header_17">AFS Command-Line Binaries</A>
- <LI><A NAME="ToC_18" HREF="awrns004.htm#Header_18">The AFS Client Must Be Installed in a Directory Whose Path Contains Only ANSI Characters</A>
- <LI><A NAME="ToC_19" HREF="awrns004.htm#Header_19">Disabling All but the Client Component of the AFS for Windows Setup Program</A>
- <LI><A NAME="ToC_20" HREF="awrns004.htm#Header_20">Temporary Files</A>
- <LI><A NAME="ToC_21" HREF="awrns004.htm#Header_21">National Language Support for the AFS Client</A>
- <LI><A NAME="ToC_22" HREF="awrns004.htm#Header_22">The kpwvalid Password Strength Checker Is Not Used on Windows Systems</A>
- <LI><A NAME="ToC_23" HREF="awrns004.htm#Header_23">Configurable LAN Adapter Number</A>
- <LI><A NAME="ToC_24" HREF="awrns004.htm#Header_24">WinLogon Graphical Identification and Authentication (GINA) Modules and AFS Authentication</A>
- <LI><A NAME="ToC_25" HREF="awrns004.htm#Header_25">Cell Database Is Maintained During Upgrade</A>
- </MENU>
- <LI><A NAME="ToC_26" HREF="awrns004.htm#Header_26">Limitations and Restrictions</A>
- <MENU>
- <LI><A NAME="ToC_27" HREF="awrns004.htm#Header_27">Symbolic Links to AFS Files and Directories</A>
- <LI><A NAME="ToC_28" HREF="awrns004.htm#Header_28">AFS Client Can Fail to Load When Network Drives Are in the Application Path</A>
- </MENU></MENU>
- <P><B><A NAME="ToC_29" HREF="awrns005.htm#HDRLTCLIENT">AFS Light Release Notes</A></B><BR>
- <MENU>
- <LI><A NAME="ToC_30" HREF="awrns005.htm#Header_30">Introduction</A>
- <LI><A NAME="ToC_31" HREF="awrns005.htm#HDRLIGHT_PREREQ">AFS Light Installation Requirements</A>
- <MENU>
- <LI><A NAME="ToC_32" HREF="awrns005.htm#Header_32">Hardware</A>
- <LI><A NAME="ToC_33" HREF="awrns005.htm#Header_33">Software</A>
- <LI><A NAME="ToC_34" HREF="awrns005.htm#Header_34">Administrative Privilege Requirement</A>
- </MENU>
- <LI><A NAME="ToC_35" HREF="awrns005.htm#Header_35">Product Notes</A>
- <MENU>
- <LI><A NAME="ToC_36" HREF="awrns005.htm#HDRGATEWAY">Accessing AFS via the AFS Light Gateway</A>
- <LI><A NAME="ToC_37" HREF="awrns005.htm#Header_37">AFS Light for Windows 95 Requires the Windows Sockets 2 Update</A>
- <LI><A NAME="ToC_38" HREF="awrns005.htm#Header_38">AFS Command-Line Binaries</A>
- <LI><A NAME="ToC_39" HREF="awrns005.htm#Header_39">AFS Light Must Be Installed in a Directory Whose Path Contains Only ANSI Characters</A>
- <LI><A NAME="ToC_40" HREF="awrns005.htm#Header_40">Temporary Files</A>
- <LI><A NAME="ToC_41" HREF="awrns005.htm#Header_41">National Language Support for AFS Light</A>
- <LI><A NAME="ToC_42" HREF="awrns005.htm#Header_42">The kpwvalid Password Strength Checker Is Not Used on Windows Systems</A>
- </MENU>
- <LI><A NAME="ToC_43" HREF="awrns005.htm#Header_43">Limitations and Restrictions</A>
- <MENU>
- <LI><A NAME="ToC_44" HREF="awrns005.htm#Header_44">Encryption Not Supported in Simplified Chinese Version</A>
- <LI><A NAME="ToC_45" HREF="awrns005.htm#Header_45">Symbolic Links to AFS Files and Directories</A>
- </MENU></MENU>
- <P><B><A NAME="ToC_46" HREF="awrns006.htm#HDRSERVER">AFS Server Release Notes</A></B><BR>
- <MENU>
- <LI><A NAME="ToC_47" HREF="awrns006.htm#Header_47">Introduction</A>
- <LI><A NAME="ToC_48" HREF="awrns006.htm#Header_48">AFS Server Installation Requirements</A>
- <MENU>
- <LI><A NAME="ToC_49" HREF="awrns006.htm#Header_49">Hardware</A>
- <LI><A NAME="ToC_50" HREF="awrns006.htm#Header_50">Software</A>
- <LI><A NAME="ToC_51" HREF="awrns006.htm#Header_51">Administrative Privilege Requirement</A>
- </MENU>
- <LI><A NAME="ToC_52" HREF="awrns006.htm#Header_52">Product Notes</A>
- <MENU>
- <LI><A NAME="ToC_53" HREF="awrns006.htm#Header_53">Support for Volumes That Are Greater Than 2 GB</A>
- <LI><A NAME="ToC_54" HREF="awrns006.htm#Header_54">Encryption Routines Used by the System Control Server Are Included with All Versions of AFS for Windows</A>
- <LI><A NAME="ToC_55" HREF="awrns006.htm#Header_55">AFS Server Computer Name Must Correspond to the Name Service Host Name</A>
- <LI><A NAME="ToC_56" HREF="awrns006.htm#Header_56">Time Clock Synchronization</A>
- <LI><A NAME="ToC_57" HREF="awrns006.htm#Header_57">Securing AFS Server Machines</A>
- <LI><A NAME="ToC_58" HREF="awrns006.htm#Header_58">Shutting Down AFS File Server Machines</A>
- <LI><A NAME="ToC_59" HREF="awrns006.htm#Header_59">Obtaining Crash Dump Files in the Event of Server Problems</A>
- <LI><A NAME="ToC_60" HREF="awrns006.htm#Header_60">The AFS Server Must Be Installed in a Directory Whose Path Contains Only ANSI Characters</A>
- <LI><A NAME="ToC_61" HREF="awrns006.htm#Header_61">Temporary Files</A>
- <LI><A NAME="ToC_62" HREF="awrns006.htm#Header_62">National Language Support for the AFS Server</A>
- <LI><A NAME="ToC_63" HREF="awrns006.htm#Header_63">The kpwvalid Password Strength Checker Is Not Used on Windows Systems</A>
- <LI><A NAME="ToC_64" HREF="awrns006.htm#Header_64">Configuring a Server into a Cell with pre-3.5 Database Servers Requires the Principal Password</A>
- </MENU>
- <LI><A NAME="ToC_65" HREF="awrns006.htm#Header_65">Limitations and Restrictions</A>
- <MENU>
- <LI><A NAME="ToC_66" HREF="awrns006.htm#Header_66">AFS bosserver Process Does Not Execute the Notifier Program When a Process Terminates</A>
- </MENU></MENU>
- <P><B><A NAME="ToC_67" HREF="awrns007.htm#HDRCNTRLCNTR">AFS Control Center Release Notes</A></B><BR>
- <MENU>
- <LI><A NAME="ToC_68" HREF="awrns007.htm#Header_68">Introduction</A>
- <LI><A NAME="ToC_69" HREF="awrns007.htm#Header_69">AFS Control Center Installation Requirements</A>
- <MENU>
- <LI><A NAME="ToC_70" HREF="awrns007.htm#Header_70">Hardware</A>
- <LI><A NAME="ToC_71" HREF="awrns007.htm#Header_71">Software</A>
- <LI><A NAME="ToC_72" HREF="awrns007.htm#Header_72">Administrative Privilege Requirement</A>
- </MENU>
- <LI><A NAME="ToC_73" HREF="awrns007.htm#Header_73">Product Notes</A>
- <MENU>
- <LI><A NAME="ToC_74" HREF="awrns007.htm#Header_74">The AFS Control Center Must Be Installed in a Directory Whose Path Contains Only ANSI Characters</A>
- <LI><A NAME="ToC_75" HREF="awrns007.htm#Header_75">Temporary Files</A>
- <LI><A NAME="ToC_76" HREF="awrns007.htm#Header_76">National Language Support for the AFS Control Center</A>
- <LI><A NAME="ToC_77" HREF="awrns007.htm#Header_77">The kpwvalid Password Strength Checker Is Not Used on Windows Systems</A>
- <LI><A NAME="ToC_78" HREF="awrns007.htm#Header_78">Tokens Obtained for Control Center Applications Expire after 25 Hours</A>
- <LI><A NAME="ToC_79" HREF="awrns007.htm#Header_79">Server Manager Displays All Server Entries Referenced in the Volume Location Database (VLDB)</A>
- </MENU>
- <LI><A NAME="ToC_80" HREF="awrns007.htm#Header_80">Limitations and Restrictions</A>
- </MENU><P>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awrns000.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Top_Of_Page"><IMG SRC="../top.gif" BORDER="0" ALT="[Top of Topic]"></A> <A HREF="awrns003.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="#INDEX_START"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <!-- Begin Footer Records  ========================================== -->
- <P><HR><B> 
- <br>&#169; <A HREF="http://www.ibm.com/">IBM Corporation 2000.</A>  All Rights Reserved 
- </B> 
- <!-- End Footer Records  ============================================ -->
- <A NAME="Bot_Of_Page"></A>
- </BODY></HTML>
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns003.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns003.htm:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns003.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns003.htm:1.1	Fri Nov  3 21:18:50 2000
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns003.htm	Fri Jul 18 12:42:58 2008
***************
*** 1,98 ****
- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3//EN">
- <HTML><HEAD>
- <TITLE>Release Notes</TITLE>
- <!-- Begin Header Records  ========================================== -->
- <!-- /tmp/idwt4485/awrns000.scr converted by idb2h R4.2 (359) ID      -->
- <!-- Workbench Version (AIX) on 15 Feb 2000 at 10:10:20               -->
- <META HTTP-EQUIV="updated" CONTENT="Tue, 15 Feb 2000 10:10:19">
- <META HTTP-EQUIV="review" CONTENT="Thu, 15 Feb 2001 10:10:19">
- <META HTTP-EQUIV="expires" CONTENT="Fri, 15 Feb 2002 10:10:19">
- </HEAD><BODY>
- <!-- (C) IBM Corporation 2000. All Rights Reserved    --> 
- <BODY bgcolor="ffffff"> 
- <!-- End Header Records  ============================================ -->
- <A NAME="Top_Of_Page"></A>
- <H1>Release Notes</H1>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awrns002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awrns002.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Bot_Of_Page"><IMG SRC="../bot.gif" BORDER="0" ALT="[Bottom of Topic]"></A> <A HREF="awrns004.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="#INDEX_START"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <HR><H1><A NAME="HDRINTRO" HREF="awrns002.htm#ToC_1">Introduction</A></H1>
- <HR><H2><A NAME="Header_2" HREF="awrns002.htm#ToC_2">Overview</A></H2>
- <P>AFS<SUP>(R)</SUP> is a distributed file system that provides
- secure, reliable access to information across an enterprise. By
- seamlessly uniting the directories and files on individual file server
- machines into one file system accessible from any desktop, AFS presents users
- with a single filespace independent of machine boundaries.
- <P>AFS offers several advantages. It improves the availability of files
- by employing client-side caching and replication of frequently accessed data
- across multiple file servers. AFS provides powerful security to protect
- the information stored in the filespace. In addition, AFS is highly
- scalable. Virtually unlimited additional server and client machines can
- be added as needed to an AFS configuration with little impact on existing
- server and client machines. This enables the file system to grow with
- the enterprise.
- <P>AFS for Windows includes the following products&#58;
- <UL>
- <P><LI><B>AFS Server</B>
- <P>The AFS Server runs AFS server processes on a Windows NT<SUP>(R)</SUP>
- machine. An AFS Server on a Windows NT machine can be configured as one
- or more of the following&#58; an AFS File Server, an AFS Database Server, an
- AFS Backup Server, and an AFS System Control Server. The AFS Server
- includes the AFS Server Configuration Wizard to facilitate setup.
- <P><LI><B>AFS Control Center</B>
- <P>The AFS Control Center includes two powerful graphical user interface (GUI)
- tools to assist AFS system administrators in AFS cell administration&#58;
- the AFS Server Manager, a tool that facilitates the administration of volumes
- and services on one or more AFS servers (on Windows NT and UNIX systems), and
- the AFS Account Manager, a tool that enables simple creation and maintenance
- of AFS user and group accounts.
- <P><LI><B>AFS Client</B>
- <P>The AFS Client provides direct access to the AFS filespace from a PC
- running Windows NT, enabling users to manage files and directories in
- AFS.
- <P><LI><B>AFS Light</B>
- <P>AFS Light provides access to the AFS filespace from a PC running Windows 98
- or Windows 95 by forwarding AFS requests to another PC on which the AFS Client
- is installed.
- </UL>
- <HR><H2><A NAME="Header_3" HREF="awrns002.htm#ToC_3">About the Release Notes</A></H2>
- <P>This document contains important information about AFS for Windows,
- version 3.6. This document summarizes the installation
- prerequisites, product notes, and specific limitations and restrictions of
- this release.
- <P>
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">AFS for Windows users can view the <B>README.txt</B> file to check
- for any additional AFS for Windows information that became available since the
- writing of this document. The <B>README.txt</B> file is
- installed in the <I>AFS for Windows
- Installation</I>\<B>documentation</B> directory when AFS for Windows is
- installed.
- </TD></TR></TABLE>
- <P><H3><A NAME="Header_4" HREF="awrns002.htm#ToC_4">Audience</A></H3>
- <P>This document is written for system administrators responsible for the
- installation, configuration, and use of the products included in AFS for
- Windows. This document assumes that readers are familiar with system
- administration in general and with the use of AFS.
- <P><H3><A NAME="Header_5" HREF="awrns002.htm#ToC_5">Document Organization</A></H3>
- <P>The document has the following organization&#58;
- <UL>
- <P><LI><A HREF="awrns004.htm#HDRCLIENT">AFS Client Release Notes</A> provides release information for the AFS Client, version
- 3.6.
- <P><LI><A HREF="awrns005.htm#HDRLTCLIENT">AFS Light Release Notes</A> provides release information for AFS Light, version
- 3.6.
- <P><LI><A HREF="awrns006.htm#HDRSERVER">AFS Server Release Notes</A> provides release information for the AFS Server, version
- 3.6.
- <P><LI><A HREF="awrns007.htm#HDRCNTRLCNTR">AFS Control Center Release Notes</A> provides release information for the AFS Control Center,
- version 3.6.
- </UL>
- <P>Each section describes installation requirements, product notes, and
- limitations and restrictions for the specified AFS for Windows
- component. Also, where applicable, descriptions of new features and
- enhancements that are made available in this release of AFS for Windows are
- included.
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awrns002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awrns002.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Top_Of_Page"><IMG SRC="../top.gif" BORDER="0" ALT="[Top of Topic]"></A> <A HREF="awrns004.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="#INDEX_START"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <!-- Begin Footer Records  ========================================== -->
- <P><HR><B> 
- <br>&#169; <A HREF="http://www.ibm.com/">IBM Corporation 2000.</A>  All Rights Reserved 
- </B> 
- <!-- End Footer Records  ============================================ -->
- <A NAME="Bot_Of_Page"></A>
- </BODY></HTML>
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns004.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns004.htm:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns004.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns004.htm:1.1	Fri Nov  3 21:18:50 2000
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns004.htm	Fri Jul 18 12:42:58 2008
***************
*** 1,238 ****
- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3//EN">
- <HTML><HEAD>
- <TITLE>Release Notes</TITLE>
- <!-- Begin Header Records  ========================================== -->
- <!-- /tmp/idwt4485/awrns000.scr converted by idb2h R4.2 (359) ID      -->
- <!-- Workbench Version (AIX) on 15 Feb 2000 at 10:10:20               -->
- <META HTTP-EQUIV="updated" CONTENT="Tue, 15 Feb 2000 10:10:19">
- <META HTTP-EQUIV="review" CONTENT="Thu, 15 Feb 2001 10:10:19">
- <META HTTP-EQUIV="expires" CONTENT="Fri, 15 Feb 2002 10:10:19">
- </HEAD><BODY>
- <!-- (C) IBM Corporation 2000. All Rights Reserved    --> 
- <BODY bgcolor="ffffff"> 
- <!-- End Header Records  ============================================ -->
- <A NAME="Top_Of_Page"></A>
- <H1>Release Notes</H1>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awrns002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awrns003.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Bot_Of_Page"><IMG SRC="../bot.gif" BORDER="0" ALT="[Bottom of Topic]"></A> <A HREF="awrns005.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="#INDEX_START"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <HR><H1><A NAME="HDRCLIENT" HREF="awrns002.htm#ToC_6">AFS Client Release Notes</A></H1>
- <HR><H2><A NAME="Header_7" HREF="awrns002.htm#ToC_7">Introduction</A></H2>
- <P>This section contains important information about the AFS Client
- component of AFS for Windows, version 3.6. The AFS Client
- provides direct access to the AFS filespace from a PC running Windows NT,
- enabling users to manage files and directories in AFS. The AFS Client
- includes the AFS Light Gateway, which enables AFS Light users to access the
- AFS filespace.
- <HR><H2><A NAME="HDRPREREQ" HREF="awrns002.htm#ToC_8">AFS Client Installation Requirements</A></H2>
- <P>Your system must meet the following hardware, software, and
- administrative privilege requirements to install the AFS Client.
- <P><H3><A NAME="Header_9" HREF="awrns002.htm#ToC_9">Hardware</A></H3>
- <P>The hardware requirements for installing the AFS Client are&#58;
- <UL>
- <P><LI>A PC using an 80486/66 MHz (or faster) microprocessor or a Pentium-based
- microprocessor
- <P><LI>At least 16 MB of RAM
- <P><LI>A hard disk with at least 4 MB of available disk space, plus enough
- additional disk space on the drive where the cache is located to accommodate
- the desired cache size. (By default, the cache is located on the drive
- where Windows is installed and the cache size is 20 MB.)
- </UL>
- <P><H3><A NAME="Header_10" HREF="awrns002.htm#ToC_10">Software</A></H3>
- <P>The software requirements for installing the AFS Client are&#58;
- <UL>
- <P><LI>Microsoft Windows NT 4.0 with Service Pack 4 or Service Pack 5
- </UL>
- <P><H3><A NAME="Header_11" HREF="awrns002.htm#ToC_11">Administrative Privilege Requirement</A></H3>
- <P>You must be a member of the local <B>Administrators</B> group on
- your Windows system in order to install, configure, and start the AFS
- Client.
- <HR><H2><A NAME="Header_12" HREF="awrns002.htm#ToC_12">Product Notes</A></H2>
- <P>This section highlights important general information about the AFS
- Client component of AFS for Windows, version 3.6. It includes
- descriptions of new features and enhancements made available in this release
- of the AFS Client.
- <P><H3><A NAME="Header_13" HREF="awrns002.htm#ToC_13">Additional Configuration Options Available Via the Client Interface</A></H3>
- <P>The AFS Client Configuration utility&#39;s <B>Advanced</B> tab now
- includes options for configuring logon parameters, diagnostic parameters, and
- other miscellaneous configuration parameters. From the
- <B>Advanced</B> tab, you can also configure global drive mappings.
- Many of these configuration options were formerly available to AFS Client
- users as registry settings.
- <P>The <B>Advanced</B> tab is accessed from the Windows Control
- Panel. To display the <B>Advanced</B> tab&#58;
- <OL TYPE=1>
- <P><LI>From the <B>Start</B> menu, choose <B>Settings</B>, then choose
- <B>Control Panel</B>.
- <P><LI>Double-click the <B>AFS Client Configuration</B> icon to display the
- AFS Client Configuration utility.
- <P><LI>Choose the <B>Advanced</B> tab.
- </OL>
- <P><H3><A NAME="HDRCACHE" HREF="awrns002.htm#ToC_14">AFS Client Cache Location Is Now Configurable</A></H3>
- <P>The AFS Client Cache is stored in a file named <B>AFSCache</B>,
- rather than in the system paging file. By default, the cache is stored
- on the drive where Windows is installed. The size of the AFS Client
- Cache is limited by available free disk space. The cache size must be
- at least 1 MB. The default cache size is 20480 KB (20MB).
- <P>The location of the AFS Client Cache can now be changed. Changing
- the cache location is useful when there is not sufficient available free disk
- space on the drive where Windows is installed. To change the cache
- location, enter a valid, fully qualified filename in the <B>Cache Path</B>
- field on the AFS Client Configuration&#39;s <B>Advanced</B> tab.
- <P><H3><A NAME="Header_15" HREF="awrns002.htm#ToC_15">Mapping Global Drives to the AFS Filespace</A></H3>
- <P>The AFS Client&#39;s graphical user interface can now be used to map
- global drives to places in the AFS filespace. Global drives are mapped
- to the AFS filespace when the IBM AFS Client service starts; users are
- not required to be logged on. To map global drives to AFS&#58;
- <OL TYPE=1>
- <P><LI>From the <B>Start</B> menu, choose <B>Settings</B>, then choose
- <B>Control Panel</B>.
- <P><LI>Double-click the <B>AFS Client Configuration</B> icon to display the
- AFS Client Configuration utility. Select the <B>Advanced</B>
- tab.
- <P><LI>Click <B>Add</B>. The Map Global Drive dialog box
- appears. In the <B>Drive Letter</B> box, choose a network drive or
- accept the default. In the <B>AFS Path</B> box, type a path to the
- AFS filespace. If desired, enter a short name to be associated with the
- specified drive letter and AFS path in the <B>Description</B> box.
- Note that a drive letter description can have no more than 12 characters and
- cannot contain spaces or tabs.
- <P><LI>Click <B>OK</B> to establish the connection. The drive letter
- and AFS path appear on the Global Drives dialog box. The drive letter
- now appears in your Windows NT Explorer.
- </OL>
- <P><H3><A NAME="Header_16" HREF="awrns002.htm#ToC_16">AFS Client Computer Name Must Correspond to the Name Service Host Name</A></H3>
- <P>The computer name of an AFS Client machine (as displayed in the
- <B>Computer Name</B> field on the <B>Identification</B> tab of the
- Network dialog box) must correspond to the host name assigned to the computer
- by the name service (normally the Domain Name Service, or DNS) used to map
- names to Internet Protocol (IP) addresses. For example, if the machine
- on which the AFS Client is installed has the computer name
- <B>afsclient1</B> and is in the <B>yourcompany.com</B> domain,
- the corresponding DNS entry for the machine must be
- <B>afsclient1.yourcompany.com</B>.
- <P><H3><A NAME="Header_17" HREF="awrns002.htm#ToC_17">AFS Command-Line Binaries</A></H3>
- <P>The AFS Client includes administration-oriented command suites such as
- <B>bos</B>, <B>kas</B>, <B>vos</B>, and <B>pts</B>.
- Execute the commands within these suites from the Windows Command
- Prompt.
- <P><H3><A NAME="Header_18" HREF="awrns002.htm#ToC_18">The AFS Client Must Be Installed in a Directory Whose Path Contains Only ANSI Characters</A></H3>
- <P>The AFS for Windows software must be installed in a directory whose
- path contains only ANSI characters, for example the default directory
- <B>C&#58;\Program Files</B>.
- <P><H3><A NAME="Header_19" HREF="awrns002.htm#ToC_19">Disabling All but the Client Component of the AFS for Windows Setup Program</A></H3>
- <P>You have the option of altering the AFS for Windows setup program to
- disable all but the client component. Such a client-only setup program
- renders users unable to install any components other than the AFS
- Client. To perform a client-only installation, create the file
- <B>setup.co</B> in the same directory as the other installation
- files; the setup program then allows only the AFS Client to be
- installed. Note that the contents of the <B>setup.co</B>
- file are irrelevant. Follow the installation procedure described in
- <I>IBM AFS for Windows Quick Beginnings</I> regardless of the type of
- installation you are performing.
- <P><H3><A NAME="Header_20" HREF="awrns002.htm#ToC_20">Temporary Files</A></H3>
- <P>The AFS Client for Windows occasionally creates temporary files.
- To control where such files are created, set your environment variable (TMP or
- TEMP) to the fully qualified path of the preferred temporary directory.
- If you do not specify a temporary directory, then any temporary files are
- created in the current working directory of the process that creates the
- files.
- <P><H3><A NAME="Header_21" HREF="awrns002.htm#ToC_21">National Language Support for the AFS Client</A></H3>
- <P>AFS provides national language support for the AFS Client graphical
- user interface (GUI) tools and documentation, including support for
- bidirectional scripts (Hebrew, Arabic, etc.). The language
- strings installed are determined by your machine&#39;s system default locale,
- as specified in the Control Panel&#39;s Regional Settings Properties dialog
- box. If no language strings exist for the current locale, then English
- language strings are installed by default.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">The <I>system default</I> locale for a machine can be different than the
- <I>user</I> locale (specified by a user) on the machine. However,
- the language strings installed with AFS for Windows are always determined by
- the system default locale.
- </TD></TR></TABLE>
- <P><H3><A NAME="Header_22" HREF="awrns002.htm#ToC_22">The kpwvalid Password Strength Checker Is Not Used on Windows Systems</A></H3>
- <P>When an AFS user password is changed from a Windows system, the
- <B>kpwvalid</B> program is <I>not</I> used to check the quality of the
- new password. (On UNIX systems, if a <B>kpwvalid</B> program exists
- in the same directory as the <B>kpasswd</B> program, the
- <B>kpwvalid</B> program checks the quality of every new user
- password.)
- <P><H3><A NAME="Header_23" HREF="awrns002.htm#ToC_23">Configurable LAN Adapter Number</A></H3>
- <P>The LAN Adapter (LANA) number used by the AFS Client service must match
- the LANA number setting on your Windows system. By default, the AFS
- Client service is configured to use LANA number <B>0</B> (zero).
- <P>You can now use the AFS Client&#39;s graphical user interface tools to
- modify the value of the LANA number used by the AFS Client service. To
- change the LANA number, enter a new value in the <B>Lan Adapter Number</B>
- field on the AFS Client Configuration&#39;s <B>Advanced</B> tab.
- You must restart the AFS Client service after modifying this parameter.
- <P>Alternatively, if you do not want to change the default LANA number used by
- the AFS Client service to match the NetBIOS Configuration of your Windows NT
- machine, you can instead modify your system&#39;s LANA number setting to
- match the AFS default setting (<B>0</B>). Access the
- <B>Services</B> tab on the Control Panel&#39;s Network
- application. Choose <B>NetBIOS Interface</B>, and select the
- <B>Properties</B> button. Enter <B>0</B> (zero) in the
- <B>Lana Number</B> field. You must restart your machine after
- making changes to this Windows setting.
- <P><H3><A NAME="Header_24" HREF="awrns002.htm#ToC_24">WinLogon Graphical Identification and Authentication (GINA) Modules and AFS Authentication</A></H3>
- <P>The AFS Client includes the header files and libraries required to
- build a WinLogon Graphical Identification and Authentication (GINA) module
- that obtains AFS tokens. These header files and libraries are installed
- in the <B> &lt;</B><I>AFS for Windows Installation
- Directory</I><B>>\afs\client\program</B> directory. In addition,
- a sample program with compiling and linking instructions is provided in
- <B>&lt;</B><I>AFS for Windows Installation
- Directory</I><B>>\afs\client\program\sample\token.c</B>.
- <P><H3><A NAME="Header_25" HREF="awrns002.htm#ToC_25">Cell Database Is Maintained During Upgrade</A></H3>
- <P>When the AFS Client software is upgraded, the AFS Client cell database
- file (<B>afsdcell.ini</B>) located in the <B>Windows</B>
- directory is not replaced, in order to preserve local cell configuration
- information. However, a copy of the cell database as distributed by the
- vendor is installed in the AFS Client program directory.
- <P>
- <HR><H2><A NAME="Header_26" HREF="awrns002.htm#ToC_26">Limitations and Restrictions</A></H2>
- <P>This section briefly describes the known limitations and restrictions
- in the AFS Client component of AFS for Windows, version 3.6.
- <P><H3><A NAME="Header_27" HREF="awrns002.htm#ToC_27">Symbolic Links to AFS Files and Directories</A></H3>
- <P>Symbolic links to directories are treated as directories, and symbolic
- links to files appear as files in Windows NT systems. Neither appear as
- links.
- <P>Currently, you cannot use the Windows interface (the Windows NT Explorer,
- for example) to delete symbolic links or create symbolic links in the AFS
- filespace. If you attempt to delete a directory that is a symbolic link
- using the Windows interface, the directory&#39;s contents are deleted.
- The directory itself is not deleted. If you attempt to delete a file
- that is a symbolic link using the Windows interface, the link is removed,
- rather than the target file.
- <P>To create and delete symbolic links to AFS files and directories, use the
- <B>symlink.exe</B> program that is provided with AFS for Windows,
- version 3.6. Execute <B>symlink</B> commands from your
- Windows NT Command Prompt.
- <P><H3><A NAME="Header_28" HREF="awrns002.htm#ToC_28">AFS Client Can Fail to Load When Network Drives Are in the Application Path</A></H3>
- <P>When loading an application (such as the AFS Client), Windows NT
- searches for the application&#39;s dynamic-link libraries (DLLs). One
- of the places that Windows searches for an application&#39;s DLLs is in each
- directory specified in the Path environment variable. In the Path
- environment variable, if a network path is defined before the path that
- contains a DLL, the application can possible fail to load.
- <P>Most services (such as the AFS Client) do not have security access to
- network drives specified in the Path environment variable. When a
- network drive is encountered in the path and the application does not have the
- permission to access the network, Windows fails to distinguish between an
- Access Denied error caused by a process which cannot access a file and a
- process which cannot access the network drive that contains the file.
- Because this distinction cannot be made, the operating system assumes that the
- file exists but cannot be accessed by the process. This error causes
- the system to discontinue the search for the DLLs and assume that a DLL cannot
- be accessed. Since Windows believes that a DLL is inaccessible, it
- fails to load the application.
- <P>In order to avoid this problem, ensure that the directory to an
- application&#39;s DLLs comes before any network drives in the path.
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awrns002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awrns003.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Top_Of_Page"><IMG SRC="../top.gif" BORDER="0" ALT="[Top of Topic]"></A> <A HREF="awrns005.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="#INDEX_START"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <!-- Begin Footer Records  ========================================== -->
- <P><HR><B> 
- <br>&#169; <A HREF="http://www.ibm.com/">IBM Corporation 2000.</A>  All Rights Reserved 
- </B> 
- <!-- End Footer Records  ============================================ -->
- <A NAME="Bot_Of_Page"></A>
- </BODY></HTML>
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns005.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns005.htm:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns005.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns005.htm:1.1	Fri Nov  3 21:18:50 2000
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns005.htm	Fri Jul 18 12:42:58 2008
***************
*** 1,179 ****
- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3//EN">
- <HTML><HEAD>
- <TITLE>Release Notes</TITLE>
- <!-- Begin Header Records  ========================================== -->
- <!-- /tmp/idwt4485/awrns000.scr converted by idb2h R4.2 (359) ID      -->
- <!-- Workbench Version (AIX) on 15 Feb 2000 at 10:10:20               -->
- <META HTTP-EQUIV="updated" CONTENT="Tue, 15 Feb 2000 10:10:19">
- <META HTTP-EQUIV="review" CONTENT="Thu, 15 Feb 2001 10:10:19">
- <META HTTP-EQUIV="expires" CONTENT="Fri, 15 Feb 2002 10:10:19">
- </HEAD><BODY>
- <!-- (C) IBM Corporation 2000. All Rights Reserved    --> 
- <BODY bgcolor="ffffff"> 
- <!-- End Header Records  ============================================ -->
- <A NAME="Top_Of_Page"></A>
- <H1>Release Notes</H1>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awrns002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awrns004.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Bot_Of_Page"><IMG SRC="../bot.gif" BORDER="0" ALT="[Bottom of Topic]"></A> <A HREF="awrns006.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="#INDEX_START"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <HR><H1><A NAME="HDRLTCLIENT" HREF="awrns002.htm#ToC_29">AFS Light Release Notes</A></H1>
- <HR><H2><A NAME="Header_30" HREF="awrns002.htm#ToC_30">Introduction</A></H2>
- <P>This section contains important information about the AFS Light
- component of AFS for Windows, version 3.6. AFS Light provides
- access to the AFS filespace from a PC running Windows 95 or Windows 98,
- enabling users to manage files and directories in AFS. AFS Light
- accesses the AFS filespace via an AFS Client machine that is configured as an
- AFS Light Gateway.
- <HR><H2><A NAME="HDRLIGHT_PREREQ" HREF="awrns002.htm#ToC_31">AFS Light Installation Requirements</A></H2>
- <P>Your system must meet the following hardware, software, and
- administrative privilege requirements to install AFS Light.
- <P><H3><A NAME="Header_32" HREF="awrns002.htm#ToC_32">Hardware</A></H3>
- <P>The hardware requirements for installing AFS Light are&#58;
- <UL>
- <P><LI>A PC using an 80486/66 MHz (or faster) microprocessor or a Pentium-based
- microprocessor
- <P><LI>At least 16 MB of RAM
- <P><LI>A hard disk with at least 4 MB of available disk space
- </UL>
- <P><H3><A NAME="Header_33" HREF="awrns002.htm#ToC_33">Software</A></H3>
- <P>The software requirements for installing AFS Light are&#58;
- <UL>
- <P><LI>Microsoft Windows 95 with the Windows Sockets 2 update or Microsoft
- Windows 98
- <P><LI>AFS Light Gateway
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">The AFS Light Gateway must be enabled on a Windows NT machine running the AFS
- Client, version 3.5 or version 3.6. AFS Light accesses
- AFS through the AFS Light Gateway. See <A HREF="#HDRGATEWAY">Accessing AFS via the AFS Light Gateway</A> for more information.
- </TD></TR></TABLE>
- </UL>
- <P><H3><A NAME="Header_34" HREF="awrns002.htm#ToC_34">Administrative Privilege Requirement</A></H3>
- <P>No administrative privileges are required to install and configure AFS
- Light.
- <HR><H2><A NAME="Header_35" HREF="awrns002.htm#ToC_35">Product Notes</A></H2>
- <P>This section highlights important general information about the AFS
- Light component of AFS for Windows, version 3.6.
- <P><H3><A NAME="HDRGATEWAY" HREF="awrns002.htm#ToC_36">Accessing AFS via the AFS Light Gateway</A></H3>
- <P>AFS Light accesses the AFS filespace through an AFS Light
- Gateway. In order to use AFS Light, you must have at least one machine
- in the same domain as the AFS Light machine running the AFS Client for
- Windows, version 3.5 or the AFS Client for Windows, version
- 3.6.
- <UL>
- <P><LI><B>The AFS Light cell database and the AFS Light Gateway cell database
- must be synchronized</B>
- <P>In order for an AFS Light user to access a cell, an entry for the cell must
- exist in both the AFS Light cell database (<B>afsdcell.ini</B>
- file) and the AFS Light Gateway cell database (<B>afsdcell.ini</B>
- file).
- <P><LI><B>AFS Light must be able to resolve the AFS Light Gateway&#39;s
- service name</B>
- <P>AFS Light must be able to resolve the name of the gateway machine in order
- to communicate with the gateway machine. The name of the gateway
- machine is the gateway&#39;s NetBIOS service name, in the form
- <I>mach</I><B>-afs</B>, where <I>mach</I> is the host
- computer name up to a maximum of 11 characters. Name resolution can be
- achieved by adding the gateway&#39;s NetBIOS service name to the
- client&#39;s LMHOSTS file or to the appropriate DNS or WINS servers.
- If the AFS Light machine and its AFS Light Gateway machine reside on the same
- subnet, then name resolution succeeds automatically via a NetBIOS
- broadcast.
- <P><LI><B>The AFS Light Gateway must be able to authenticate an AFS Light user
- in a Windows context</B>
- <P>Once configured as an AFS Light Gateway, your AFS Client machine must be
- able to authenticate AFS Light users in a Windows context. This
- authentication can be achieved via a <I>domain</I> user account or via
- synchronized <I>machine</I> user accounts. A domain user account is
- a user account in a Windows domain. A machine user account is a user
- account that is valid only on a particular host machine.
- <P>When the AFS Light Gateway is configured into a Windows domain, an AFS
- Light user must log onto either a domain user account in the domain to which
- the gateway belongs or a machine user account with the same username and
- password as that of a domain user account in the gateway domain.
- <P>If machine user accounts are employed, then these accounts must be
- synchronized on the AFS Light Gateway and AFS Light machines. A user
- must log onto an AFS Light machine with the same username and password as that
- of a machine user account that is defined on the AFS Light Gateway
- machine.
- <P><I>The use of domain user accounts is recommended to simplify
- administration.</I>
- </UL>
- <P><H3><A NAME="Header_37" HREF="awrns002.htm#ToC_37">AFS Light for Windows 95 Requires the Windows Sockets 2 Update</A></H3>
- <P>To run AFS Light on a Windows 95 machine, you must install the Windows
- Sockets 2 update if it is not yet installed. This update is available
- for download from the Microsoft Web site.
- <P><H3><A NAME="Header_38" HREF="awrns002.htm#ToC_38">AFS Command-Line Binaries</A></H3>
- <P>When installed on a Windows 98 system, AFS Light includes
- administration-oriented command suites such as <B>bos</B>, <B>kas</B>,
- <B>vos</B>, and <B>pts</B>. Execute the commands within these
- suites from the Windows Command Prompt. The command suites are
- <I>not</I> available when AFS Light is installed on a Windows 95
- system.
- <P>
- <P><H3><A NAME="Header_39" HREF="awrns002.htm#ToC_39">AFS Light Must Be Installed in a Directory Whose Path Contains Only ANSI Characters</A></H3>
- <P>The AFS for Windows software must be installed in a directory whose
- path contains only ANSI characters, for example the default directory
- <B>C&#58;\Program Files</B>.
- <P><H3><A NAME="Header_40" HREF="awrns002.htm#ToC_40">Temporary Files</A></H3>
- <P>AFS Light for Windows occasionally creates temporary files. To
- control where such files are created, set your environment variable (TMP or
- TEMP) to the fully qualified path of the preferred temporary directory.
- If you do not specify a temporary directory, then any temporary files are
- created in the current working directory of the process that creates the
- files.
- <P><H3><A NAME="Header_41" HREF="awrns002.htm#ToC_41">National Language Support for AFS Light</A></H3>
- <P>AFS provides national language support for the AFS Light graphical user
- interface (GUI) tools and documentation, including support for bidirectional
- scripts (Hebrew, Arabic, etc.). The language strings installed
- are determined by your machine&#39;s system default locale, as specified in
- the Control Panel&#39;s Regional Settings Properties dialog box. If no
- language strings exist for the current locale, then English language strings
- are installed by default.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">The <I>system default</I> locale for a machine can be different than the
- <I>user</I> locale (specified by a user) on the machine. However,
- the language strings installed with AFS for Windows are always determined by
- the system default locale.
- </TD></TR></TABLE>
- <P><H3><A NAME="Header_42" HREF="awrns002.htm#ToC_42">The kpwvalid Password Strength Checker Is Not Used on Windows Systems</A></H3>
- <P>When an AFS user password is changed from a Windows system, the
- <B>kpwvalid</B> program is <I>not</I> used to check the quality of the
- new password. (On UNIX systems, if a <B>kpwvalid</B> program exists
- in the same directory as the <B>kpasswd</B> program, the
- <B>kpwvalid</B> program checks the quality of every new user
- password.)
- <HR><H2><A NAME="Header_43" HREF="awrns002.htm#ToC_43">Limitations and Restrictions</A></H2>
- <P>This section briefly describes the known limitations and restrictions
- in the AFS Light component of AFS for Windows, version 3.6.
- <P><H3><A NAME="Header_44" HREF="awrns002.htm#ToC_44">Encryption Not Supported in Simplified Chinese Version</A></H3>
- <P>The Simplified Chinese version of Microsoft Windows 98 does not support
- encryption, which is needed to transmit AFS passwords from AFS Light to the
- AFS Light Gateway. In order for AFS Light users to obtain AFS tokens
- when using the Simplified Chinese version of Microsoft Windows 98, encryption
- in AFS must be disabled.
- <P>To disable encryption in AFS, add the following line to your Windows
- <B>Autoexec.bat</B> file&#58; 
- <PRE>set AFS_RPC_ENCRYPT=OFF
- </PRE>
- <P>Note that disabling encryption introduces a potential security risk because
- AFS passwords are transmitted to the AFS Client Gateway in an unencrypted form
- when tokens are obtained.
- <P><H3><A NAME="Header_45" HREF="awrns002.htm#ToC_45">Symbolic Links to AFS Files and Directories</A></H3>
- <P>Symbolic links to directories are treated as directories, and symbolic
- links to files appear as files in Windows 98 and Windows 95 systems.
- Neither appear as symbolic links.
- <P>Currently, you cannot use the Windows interface (the Windows Explorer, for
- example) to delete symbolic links or create symbolic links in the AFS
- filespace. If you attempt to delete a directory that is a symbolic link
- using the Windows interface, the directory&#39;s contents are deleted.
- The directory itself is not deleted. If you attempt to delete a file
- that is a symbolic link using the Windows interface, the link is removed,
- rather than the target file.
- <P>To create and delete symbolic links to AFS files and directories, use the
- <B>symlink.exe</B> program that is provided with AFS for Windows,
- version 3.6. Execute <B>symlink</B> commands from your
- Windows NT Command Prompt.
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awrns002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awrns004.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Top_Of_Page"><IMG SRC="../top.gif" BORDER="0" ALT="[Top of Topic]"></A> <A HREF="awrns006.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="#INDEX_START"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <!-- Begin Footer Records  ========================================== -->
- <P><HR><B> 
- <br>&#169; <A HREF="http://www.ibm.com/">IBM Corporation 2000.</A>  All Rights Reserved 
- </B> 
- <!-- End Footer Records  ============================================ -->
- <A NAME="Bot_Of_Page"></A>
- </BODY></HTML>
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns006.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns006.htm:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns006.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns006.htm:1.1	Fri Nov  3 21:18:51 2000
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns006.htm	Fri Jul 18 12:42:58 2008
***************
*** 1,209 ****
- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3//EN">
- <HTML><HEAD>
- <TITLE>Release Notes</TITLE>
- <!-- Begin Header Records  ========================================== -->
- <!-- /tmp/idwt4485/awrns000.scr converted by idb2h R4.2 (359) ID      -->
- <!-- Workbench Version (AIX) on 15 Feb 2000 at 10:10:20               -->
- <META HTTP-EQUIV="updated" CONTENT="Tue, 15 Feb 2000 10:10:19">
- <META HTTP-EQUIV="review" CONTENT="Thu, 15 Feb 2001 10:10:19">
- <META HTTP-EQUIV="expires" CONTENT="Fri, 15 Feb 2002 10:10:19">
- </HEAD><BODY>
- <!-- (C) IBM Corporation 2000. All Rights Reserved    --> 
- <BODY bgcolor="ffffff"> 
- <!-- End Header Records  ============================================ -->
- <A NAME="Top_Of_Page"></A>
- <H1>Release Notes</H1>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awrns002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awrns005.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Bot_Of_Page"><IMG SRC="../bot.gif" BORDER="0" ALT="[Bottom of Topic]"></A> <A HREF="awrns007.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="#INDEX_START"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <HR><H1><A NAME="HDRSERVER" HREF="awrns002.htm#ToC_46">AFS Server Release Notes</A></H1>
- <HR><H2><A NAME="Header_47" HREF="awrns002.htm#ToC_47">Introduction</A></H2>
- <P>This section contains important information about the AFS Server
- component of AFS for Windows, version 3.6. The AFS Server runs
- AFS server processes on a Windows NT machine. An AFS Server on a
- Windows NT machine can be configured as one or more of the following&#58; an
- AFS File Server, an AFS Database Server, an AFS Backup Server, and an AFS
- System Control Server.
- <HR><H2><A NAME="Header_48" HREF="awrns002.htm#ToC_48">AFS Server Installation Requirements</A></H2>
- <P>Your system must meet the following hardware, software, and
- administrative privilege requirements to install the AFS Server component of
- AFS for Windows.
- <P><H3><A NAME="Header_49" HREF="awrns002.htm#ToC_49">Hardware</A></H3>
- <P>The hardware requirements for installing the AFS Server are&#58;
- <UL>
- <P><LI>A PC using an 80486/66 MHz (or faster) microprocessor or Pentium-based
- microprocessor 
- <P><I>Recommended&#58; A PC using a Pentium or higher microprocessor</I>
- <P><LI>At least 16 MB of RAM 
- <P><I>Recommended&#58; 32 MB of RAM or more</I>
- <P><LI>A hard disk with at least 20 MB of available disk space
- <P><LI>At least one NTFS disk volume to hold the AFS file system data. The
- NTFS volume must not contain any data or files other than that of a Windows NT
- Recycle Bin to be eligible for configuration as an AFS partition.
- </UL>
- <P><H3><A NAME="Header_50" HREF="awrns002.htm#ToC_50">Software</A></H3>
- <P>The software requirements for installing the AFS Server are&#58;
- <UL>
- <P><LI>Microsoft Windows NT 4.0 with Service Pack 4 or Service Pack 5
- </UL>
- <P><H3><A NAME="Header_51" HREF="awrns002.htm#ToC_51">Administrative Privilege Requirement</A></H3>
- <P>You must be a member of the local <B>Administrators</B> group on
- your Windows system in order to install, configure, and start the AFS
- Server.
- <HR><H2><A NAME="Header_52" HREF="awrns002.htm#ToC_52">Product Notes</A></H2>
- <P>This section highlights important general information about the AFS
- Server component of AFS for Windows, version 3.6. Included in
- this section are descriptions of new features and enhancements made available
- in this release of the AFS Server.
- <P><H3><A NAME="Header_53" HREF="awrns002.htm#ToC_53">Support for Volumes That Are Greater Than 2 GB</A></H3>
- <P>An AFS volume is a collection of related files that are organized into
- a single, easily managed unit and that can be easily moved between File Server
- machines to facilitate load balancing across the network. Each AFS
- volume has a specific quota associated with it. A volume&#39;s quota
- specifies the maximum amount of disk space the information in the volume can
- occupy. Quota is set on a per volume basis, so it can be increased for
- volumes that contain more data and decreased for volumes that do not need the
- additional space. AFS for Windows, version 3.6 now supports
- volumes with quotas greater than 2 GB.
- <P><H3><A NAME="Header_54" HREF="awrns002.htm#ToC_54">Encryption Routines Used by the System Control Server Are Included with All Versions of AFS for Windows</A></H3>
- <P>Encryption routines used by the Update Service on the System Control
- Server machine are now being included with <I>all</I> versions of AFS for
- Windows due to the relaxation of United States government export
- regulations. Previously, government regulations prohibited the export
- of these encryption routines. Thus, sites that were not running the
- United States distribution of AFS were not able to use a System Control Server
- to distribute configuration files, because doing so permitted sensitive system
- information to be transmitted unencrypted. Now, all sites can use a
- System Control Server machine to distribute new versions of AFS Server
- configuration information to all AFS File Server machines.
- <P><H3><A NAME="Header_55" HREF="awrns002.htm#ToC_55">AFS Server Computer Name Must Correspond to the Name Service Host Name</A></H3>
- <P>The computer name of an AFS Server machine (as displayed in the
- <B>Computer Name</B> field on the <B>Identification</B> tab of the
- Network dialog box) must correspond to the host name assigned to the computer
- by the name service (normally the Domain Name Service, or DNS) used to map
- names to Internet Protocol (IP) addresses. For example, if the machine
- on which the AFS Server is installed has the computer name
- <B>afsserver1</B> and is in the <B>yourcompany.com</B> domain,
- the corresponding DNS entry for the machine must be
- <B>afsserver1.yourcompany.com</B>.
- <P><H3><A NAME="Header_56" HREF="awrns002.htm#ToC_56">Time Clock Synchronization</A></H3>
- <P>To support security and database replication protocols, the time clocks
- on all machines running AFS servers must be synchronized. Time
- synchronization software can be obtained from numerous sources; for
- example, Microsoft distributes the <B>timeserv</B> time synchronization
- service with the Windows NT Server Resource Kit.
- <P><H3><A NAME="Header_57" HREF="awrns002.htm#ToC_57">Securing AFS Server Machines</A></H3>
- <P>If the machine on which the AFS Server software is installed is not
- secure (that is, if nonadministrative personnel are able to log into the
- machine), then it is strongly recommended that the AFS Server software
- directories and all AFS partitions on the machine be secured as appropriate
- for the environment and file system type. However, when securing AFS
- Server machines, ensure that the Windows NT local <B>SYSTEM</B> principal
- has full access to the AFS software and all AFS partitions; otherwise AFS
- processes will not be able to run.
- <P><H3><A NAME="Header_58" HREF="awrns002.htm#ToC_58">Shutting Down AFS File Server Machines</A></H3>
- <P>Before shutting down a Windows NT machine that is running as an AFS
- File Server, always stop the AFS File Server on the machine.
- <P>When the AFS File Server is started on a machine, the process creates a
- salvage file. When the File Server is stopped manually, this salvage
- file is removed. However, if a Windows NT machine is shut down while
- the AFS File Server is still running, this salvage file is not removed.
- When the machine is subsequently restarted, the File Server starts
- automatically and, upon noticing the presence of the salvage file, executes
- the Salvager. Because running the Salvager can be very time consuming,
- it is always preferable to stop the AFS File Server on a machine before
- shutting the machine down to avoid unnecessarily executing the Salvager
- process.
- <P>Use one of the following procedures to shut down the AFS File Server on a
- Windows NT machine.
- <P>
- <UL>
- <P><LI>From the Windows NT Control Panel&#58;
- <OL TYPE=1>
- <P><LI>Double-click the <B>Services</B> icon. The Services dialog box
- opens.
- <P><LI>In the <B>Service</B> list, select the <B>IBM AFS Server</B>
- service.
- <P><LI>Choose the <B>Stop</B> button. A message box appears, prompting
- you to confirm that you want to stop the service. Choose the
- <B>Yes</B> button.
- <P>The AFS File Server on the machine is stopped.
- </OL>
- <P><LI>From the Windows NT Command Prompt&#58;
- <OL TYPE=1>
- <P><LI>Enter the following command&#58;
- <PRE>bos shutdown -server <VAR>machine_name</VAR> -wait
- </PRE>
- <P>where <I>machine_name</I> is the name of the Windows NT machine on
- which the AFS File Server is running.
- <P><LI>Press &lt;<B>Enter</B>> to execute the command.
- </OL>
- </UL>
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">In general, machines that are running as AFS File Servers are shut down only
- to perform preventative maintenance.
- </TD></TR></TABLE>
- <P><H3><A NAME="Header_59" HREF="awrns002.htm#ToC_59">Obtaining Crash Dump Files in the Event of Server Problems</A></H3>
- <P>It is recommended that you configure all AFS Server machines to create
- a crash dump file in the event of a server failure. This information is
- important for technical support personnel to use in order to diagnose a server
- problem. Consult your Microsoft Windows NT documentation for
- information on how to configure the Dr. Watson utility to generate a
- binary crash dump file automatically when an application error occurs.
- <P><H3><A NAME="Header_60" HREF="awrns002.htm#ToC_60">The AFS Server Must Be Installed in a Directory Whose Path Contains Only ANSI Characters</A></H3>
- <P>The AFS for Windows software can only be installed in a directory whose
- path contains only ANSI characters, for example the default directory
- <B>C&#58;\Program Files</B>.
- <P><H3><A NAME="Header_61" HREF="awrns002.htm#ToC_61">Temporary Files</A></H3>
- <P>The AFS Server for Windows occasionally creates temporary files.
- To control where such files are created, set your environment variable (TMP or
- TEMP) to the fully qualified path of the preferred temporary directory.
- If you do not specify a temporary directory, then any temporary files are
- created in the current working directory of the process that creates the
- files.
- <P><H3><A NAME="Header_62" HREF="awrns002.htm#ToC_62">National Language Support for the AFS Server</A></H3>
- <P>AFS provides national language support for the AFS Server graphical
- user interface (GUI) tools and documentation, including support for
- bidirectional scripts (Hebrew, Arabic, etc.). The language
- strings installed are determined by your machine&#39;s system default locale,
- as specified in the Control Panel&#39;s Regional Settings Properties dialog
- box. If no language strings exist for the current locale, then English
- language strings are installed by default.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">The <I>system default</I> locale for a machine can be different than the
- <I>user</I> locale (specified by a user) on the machine. However,
- the language strings installed with AFS for Windows are always determined by
- the system default locale.
- </TD></TR></TABLE>
- <P><H3><A NAME="Header_63" HREF="awrns002.htm#ToC_63">The kpwvalid Password Strength Checker Is Not Used on Windows Systems</A></H3>
- <P>When an AFS user password is changed from a Windows system, the
- <B>kpwvalid</B> program is <I>not</I> used to check the quality of the
- new password. (On UNIX systems, if a <B>kpwvalid</B> program exists
- in the same directory as the <B>kpasswd</B> program, the
- <B>kpwvalid</B> program checks the quality of every new user
- password.)
- <P><H3><A NAME="Header_64" HREF="awrns002.htm#ToC_64">Configuring a Server into a Cell with pre-3.5 Database Servers Requires the Principal Password</A></H3>
- <P>If you configure the AFS Server for Windows, version 3.6, into
- an AFS cell in which the Database Servers are running a version of AFS older
- than version 3.5, during the configuration process a dialog box prompts
- you to provide the AFS principal password.
- <P>
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">If for some reason the AFS principal password is unknown, you can instead
- enter the 24-character string of octal digits representing the AFS
- principal&#39;s key. To obtain the octal key, issue either the
- <B>kas examine</B> command or <B>boslistkeys</B> command on an AFS
- Database Server machine. Note, the server must be running in
- <B>noauth</B> mode in order to display the AFS principal&#39;s octal
- key.
- </TD></TR></TABLE>
- <HR><H2><A NAME="Header_65" HREF="awrns002.htm#ToC_65">Limitations and Restrictions</A></H2>
- <P>This section briefly describes the known limitations and restrictions
- in the AFS Server component of AFS for Windows, version 3.6.
- <P><H3><A NAME="Header_66" HREF="awrns002.htm#ToC_66">AFS bosserver Process Does Not Execute the Notifier Program When a Process Terminates</A></H3>
- <P>The AFS <B>bosserver</B> process does not currently execute the
- registered notifier command (if one is specified) when a process under its
- control terminates.
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awrns002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awrns005.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Top_Of_Page"><IMG SRC="../top.gif" BORDER="0" ALT="[Top of Topic]"></A> <A HREF="awrns007.htm"><IMG SRC="../next.gif" BORDER="0" ALT="[Next Topic]"></A> <A HREF="#INDEX_START"><IMG SRC="../index.gif" BORDER="0" ALT="[Index]"></A> <P> 
- <!-- Begin Footer Records  ========================================== -->
- <P><HR><B> 
- <br>&#169; <A HREF="http://www.ibm.com/">IBM Corporation 2000.</A>  All Rights Reserved 
- </B> 
- <!-- End Footer Records  ============================================ -->
- <A NAME="Bot_Of_Page"></A>
- </BODY></HTML>
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns007.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns007.htm:1.1 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns007.htm:removed
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns007.htm:1.1	Fri Nov  3 21:18:51 2000
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/awrns007.htm	Fri Jul 18 12:42:58 2008
***************
*** 1,151 ****
- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3//EN">
- <HTML><HEAD>
- <TITLE>Release Notes</TITLE>
- <!-- Begin Header Records ========================================== -->
- <!-- /tmp/idwt4485/awrns000.scr converted by idb2h R4.2 (359) ID -->
- <!-- Workbench Version (AIX) on 15 Feb 2000 at 10:10:20 -->
- <META HTTP-EQUIV="updated" CONTENT="Tue, 15 Feb 2000 10:10:19">
- <META HTTP-EQUIV="review" CONTENT="Thu, 15 Feb 2001 10:10:19">
- <META HTTP-EQUIV="expires" CONTENT="Fri, 15 Feb 2002 10:10:19">
- </HEAD><BODY>
- <!-- (C) IBM Corporation 2000. All Rights Reserved -->
- <BODY bgcolor="ffffff">
- <!-- End Header Records ============================================ -->
- <A NAME="Top_Of_Page"></A>
- <H1>Release Notes</H1>
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awrns002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awrns006.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Bot_Of_Page"><IMG SRC="../bot.gif" BORDER="0" ALT="[Bottom of Topic]"></A> <P>
- <HR><H1><A NAME="HDRCNTRLCNTR" HREF="awrns002.htm#ToC_67">AFS Control Center Release Notes</A></H1>
- <HR><H2><A NAME="Header_68" HREF="awrns002.htm#ToC_68">Introduction</A></H2>
- <P>This section contains important information about the AFS Control
- Center component of AFS for Windows, version 3.6. The AFS
- Control Center provides two powerful graphical user interface (GUI) tools to
- assist AFS system administrators in AFS cell administration&#58; the AFS
- Server Manager and the AFS Account Manager.
- <HR><H2><A NAME="Header_69" HREF="awrns002.htm#ToC_69">AFS Control Center Installation Requirements</A></H2>
- <P>Your system must meet the following hardware, software, and
- administrative privilege requirements to install the AFS Control Center
- component of AFS for Windows.
- <P><H3><A NAME="Header_70" HREF="awrns002.htm#ToC_70">Hardware</A></H3>
- <P>The hardware requirements for installing the AFS Control Center
- are&#58;
- <UL>
- <P><LI>A PC using an 80486/66 MHz (or faster) microprocessor or Pentium-based
- microprocessor
- <P><LI>At least 16 MB of RAM
- <P><LI>A hard disk with at least 4 MB of available disk space
- </UL>
- <P><H3><A NAME="Header_71" HREF="awrns002.htm#ToC_71">Software</A></H3>
- <P>The software requirements for installing the AFS Control Center
- are&#58;
- <UL>
- <P><LI>Microsoft Windows NT 4.0 with Service Pack 4 or Service Pack 5
- </UL>
- <P><H3><A NAME="Header_72" HREF="awrns002.htm#ToC_72">Administrative Privilege Requirement</A></H3>
- <P>You must be a member of the local <B>Administrators</B> group on
- your Windows system in order to install the AFS Control Center.
- <HR><H2><A NAME="Header_73" HREF="awrns002.htm#ToC_73">Product Notes</A></H2>
- <P>This section highlights important general information about the AFS
- Control Center component of AFS for Windows, version 3.6.
- <P><H3><A NAME="Header_74" HREF="awrns002.htm#ToC_74">The AFS Control Center Must Be Installed in a Directory Whose Path Contains Only ANSI Characters</A></H3>
- <P>The AFS for Windows software can only be installed in a directory whose
- path contains only ANSI characters, for example the default directory
- <B>C&#58;\Program Files</B>.
- <P><H3><A NAME="Header_75" HREF="awrns002.htm#ToC_75">Temporary Files</A></H3>
- <P>The AFS Control Center for Windows occasionally creates temporary
- files. To control where such files are created, set your environment
- variable (TMP or TEMP) to the fully qualified path of the preferred temporary
- directory. If you do not specify a temporary directory, then any
- temporary files are created in the current working directory of the process
- that creates the files.
- <P><H3><A NAME="Header_76" HREF="awrns002.htm#ToC_76">National Language Support for the AFS Control Center</A></H3>
- <P>AFS provides national language support for the AFS Control Center
- graphical user interface (GUI) tools and documentation, including support for
- bidirectional scripts (Hebrew, Arabic, etc.). The language
- strings installed are determined by your machine&#39;s system default locale,
- as specified in the Control Panel&#39;s Regional Settings Properties dialog
- box.
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">The <I>system default</I> locale for a machine can be different than the
- <I>user</I> locale (specified by a user) on the machine. However,
- the language strings installed with AFS for Windows are always determined by
- the system default locale.
- </TD></TR></TABLE>
- <P>If no language strings exist for the current locale, then English language
- strings are installed by default.
- <P><H3><A NAME="Header_77" HREF="awrns002.htm#ToC_77">The kpwvalid Password Strength Checker Is Not Used on Windows Systems</A></H3>
- <P>When an AFS user password is changed from a Windows system, the
- <B>kpwvalid</B> program is <I>not</I> used to check the quality of the
- new password. (On UNIX systems, if a <B>kpwvalid</B> program exists
- in the same directory as the <B>kpasswd</B> program, the
- <B>kpwvalid</B> program checks the quality of every new user
- password.)
- <P><H3><A NAME="Header_78" HREF="awrns002.htm#ToC_78">Tokens Obtained for Control Center Applications Expire after 25 Hours</A></H3>
- <P>In order to use either the AFS Server Manager or the AFS Account
- Manager, users must obtain AFS tokens. The lifetime of tokens obtained
- in either application is always 25 hours and 25 minutes, regardless of the
- Maximum Ticket Lifetime designated for the user.
- <P><H3><A NAME="Header_79" HREF="awrns002.htm#ToC_79">Server Manager Displays All Server Entries Referenced in the Volume Location Database (VLDB)</A></H3>
- <P>The AFS Server Manager displays a server icon for every server entry in
- the Volume Location Database (VLDB). If an AFS server has been
- decommissioned, but its VLDB entry has not been removed, then the Server
- Manager continues to display an icon for the server.
- <P>To remove an obsolete AFS File Server entry from the VLDB on a Database
- Server running AFS version 3.5 or later, issue the following
- command&#58;
- <P>
- <PRE><B>vos changeaddr</B> &lt;<VAR>ip_address</VAR>> <B>-remove</B>
- </PRE>
- <P>where <I>ip_address</I> is the Internet Protocol (IP) address of the
- server machine that has been decommissioned.
- <P>On AFS Database Servers running a version of AFS older than version
- 3.5, there is currently no command for removal of obsolete server
- entries in the VLDB. However, to prevent the AFS Server Manager from
- displaying decommissioned servers, you can modify the Windows NT Registry so
- that the AFS Server Manager disregards all machines with IP addresses of a
- specified pattern.
- <P>To prevent the AFS Server Manager from displaying server machines with IP
- addresses of a specified pattern, use the following steps to modify the
- Windows NT Registry&#58;
- <OL TYPE=1>
- <P><LI>From the Start menu, choose <B>Run</B>. In the Open box, type
- <TT>regedit</TT>, and then choose <B>OK</B>. The Windows NT
- Registry Editor opens.
- <P><LI>Right-click the <B>\\HKEY_LOCAL_MACHINE\Software\TransarcCorporation\AFS
- Control Center</B> key. From the context menu that opens, choose
- <B>New</B>, and then choose <B>DWORD Value</B>. A New Value
- entry is added to the key.
- <P><LI>Specify the name of the new value entry by typing
- <TT>IgnoreBadAddrs</TT> as the new value.
- <P><LI>Double-click the new <B>IgnoreBadAddrs</B> entry. The Edit
- DWORD Value dialog box opens.
- <P><LI>In the <B>Value data</B> box, specify in hexadecimal notation the IP
- address or range of IP addresses to ignore. For example, to instruct
- the AFS Server Manager to disregard any machines listed in the VLDB with IP
- addresses match the pattern <B>10.0.0.*</B>, enter
- <B><TT>0A0000FF</TT></B> in the <B>Value data</B> box. (The
- hexadecimal value <B>FF</B> represents a wildcard.)
- <P><LI>Choose <B>OK</B> to close the Edit DWORD value box and save the new
- registry entry.
- <P><LI>Close the Registry Editor.
- </OL>
- <P>
- <TABLE><TR><TD ALIGN="LEFT" VALIGN="TOP"><B>Note:</B></TD><TD ALIGN="LEFT" VALIGN="TOP">To take advantage of this feature, it is advisable to change the IP addresses
- of any decommissioned servers in the VLDB to easily recognizable unused IP
- addresses in a specific range, for example
- <B>10.0.0.1</B>,
- <B>10.0.0.2</B>,
- <B>10.0.0.3</B> etc. Then add the
- <B>IgnoreBadAddrs</B> registry entry as described in the previous steps to
- instruct the AFS Server Manager to ignore all IP addresses within the
- specified range.
- </TD></TR></TABLE>
- <HR><H2><A NAME="Header_80" HREF="awrns002.htm#ToC_80">Limitations and Restrictions</A></H2>
- <P>There are currently no known limitations and restrictions for the AFS
- Control Center component of AFS for Windows, version 3.6.
- <HR><P ALIGN="center"> <A HREF="../index.htm"><IMG SRC="../books.gif" BORDER="0" ALT="[Return to Library]"></A> <A HREF="awrns002.htm#ToC"><IMG SRC="../toc.gif" BORDER="0" ALT="[Contents]"></A> <A HREF="awrns006.htm"><IMG SRC="../prev.gif" BORDER="0" ALT="[Previous Topic]"></A> <A HREF="#Top_Of_Page"><IMG SRC="../top.gif" BORDER="0" ALT="[Top of Topic]"></A> <P>
- <!-- Begin Footer Records ========================================== -->
- <P><HR><B>
- <br>&#169; <A HREF="http://www.ibm.com/">IBM Corporation 2000.</A> All Rights Reserved
- </B>
- <!-- End Footer Records ============================================ -->
- <A NAME="Bot_Of_Page"></A>
- </BODY></HTML>
--- 0 ----
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm:1.1.6.30.2.2 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm:1.1.6.33
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm:1.1.6.30.2.2	Mon Jun 23 00:09:20 2008
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/logo.htm	Wed Jul 16 01:34:56 2008
***************
*** 18,24 ****
  .shape {behavior:url(#default#VML);}
  </style>
  <![endif]-->
! <title>OpenAFS for Windows 1.5.39 Release Notes</title>
  <!--[if gte mso 9]><xml>
   <o:DocumentProperties>
    <o:Revision>1</o:Revision>
--- 18,24 ----
  .shape {behavior:url(#default#VML);}
  </style>
  <![endif]-->
! <title>OpenAFS for Windows 1.5.50 Release Notes</title>
  <!--[if gte mso 9]><xml>
   <o:DocumentProperties>
    <o:Revision>1</o:Revision>
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm:1.1.4.32.2.2 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm:1.1.4.35
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm:1.1.4.32.2.2	Mon Jun 23 00:09:21 2008
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes-frames.htm	Wed Jul 16 01:34:56 2008
***************
*** 1,31 ****
  <html xmlns:o="urn:schemas-microsoft-com:office:office"
  xmlns:w="urn:schemas-microsoft-com:office:word"
- xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
  xmlns="http://www.w3.org/TR/REC-html40">
  
  <head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
  <meta name=ProgId content=Word.Document>
! <meta name=Generator content="Microsoft Word 12">
! <meta name=Originator content="Microsoft Word 12">
  <link rel=File-List href="relnotes-frames_files/filelist.xml">
! <title>OpenAFS for Windows 1.5.39 Release Notes</title>
! <link rel=themeData href="relnotes-frames_files/themedata.thmx">
! <link rel=colorSchemeMapping href="relnotes-frames_files/colorschememapping.xml">
  <!--[if gte mso 9]><xml>
   <w:WordDocument>
    <w:Zoom>0</w:Zoom>
    <w:SpellingState>Clean</w:SpellingState>
-   <w:TrackMoves>false</w:TrackMoves>
-   <w:TrackFormatting/>
    <w:ValidateAgainstSchemas/>
    <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
    <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
    <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
-   <w:DoNotPromoteQF/>
-   <w:LidThemeOther>EN-US</w:LidThemeOther>
-   <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
-   <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
    <w:Compatibility>
     <w:BreakWrappedTables/>
     <w:SnapToGridInCell/>
--- 1,22 ----
  <html xmlns:o="urn:schemas-microsoft-com:office:office"
  xmlns:w="urn:schemas-microsoft-com:office:word"
  xmlns="http://www.w3.org/TR/REC-html40">
  
  <head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
  <meta name=ProgId content=Word.Document>
! <meta name=Generator content="Microsoft Word 11">
! <meta name=Originator content="Microsoft Word 11">
  <link rel=File-List href="relnotes-frames_files/filelist.xml">
! <title>OpenAFS for Windows 1.5.50 Release Notes</title>
  <!--[if gte mso 9]><xml>
   <w:WordDocument>
    <w:Zoom>0</w:Zoom>
    <w:SpellingState>Clean</w:SpellingState>
    <w:ValidateAgainstSchemas/>
    <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
    <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
    <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
    <w:Compatibility>
     <w:BreakWrappedTables/>
     <w:SnapToGridInCell/>
***************
*** 40,49 ****
     <w:CachedColBalance/>
    </w:Compatibility>
    <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
    <m:mathPr>
     <m:mathFont m:val="Cambria Math"/>
     <m:brkBin m:val="before"/>
!    <m:brkBinSub m:val="&#45;-"/>
     <m:smallFrac m:val="off"/>
     <m:dispDef/>
     <m:lMargin m:val="0"/>
--- 31,46 ----
     <w:CachedColBalance/>
    </w:Compatibility>
    <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+   <w:TrackMoves>false</w:TrackMoves>
+   <w:TrackFormatting/>
+   <w:DoNotPromoteQF/>
+   <w:LidThemeOther>EN-US</w:LidThemeOther>
+   <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
+   <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
    <m:mathPr>
     <m:mathFont m:val="Cambria Math"/>
     <m:brkBin m:val="before"/>
!    <m:brkBinSub m:val="--"/>
     <m:smallFrac m:val="off"/>
     <m:dispDef/>
     <m:lMargin m:val="0"/>
***************
*** 52,207 ****
     <m:wrapIndent m:val="1440"/>
     <m:intLim m:val="subSup"/>
     <m:naryLim m:val="undOvr"/>
!   </m:mathPr></w:WordDocument>
  </xml><![endif]--><!--[if gte mso 9]><xml>
!  <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
!   DefSemiHidden="false" DefQFormat="false" LatentStyleCount="267">
!   <w:LsdException Locked="false" QFormat="true" Name="Normal"/>
!   <w:LsdException Locked="false" QFormat="true" Name="heading 1"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 2"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 3"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 4"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 5"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 6"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 7"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 8"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 9"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="caption"/>
!   <w:LsdException Locked="false" QFormat="true" Name="Title"/>
!   <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
!   <w:LsdException Locked="false" QFormat="true" Name="Subtitle"/>
!   <w:LsdException Locked="false" QFormat="true" Name="Strong"/>
!   <w:LsdException Locked="false" QFormat="true" Name="Emphasis"/>
!   <w:LsdException Locked="false" Priority="99" Name="No List"/>
!   <w:LsdException Locked="false" Priority="99" SemiHidden="true"
!    Name="Placeholder Text"/>
!   <w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
!   <w:LsdException Locked="false" Priority="99" SemiHidden="true" Name="Revision"/>
!   <w:LsdException Locked="false" Priority="34" QFormat="true"
!    Name="List Paragraph"/>
!   <w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
!   <w:LsdException Locked="false" Priority="30" QFormat="true"
!    Name="Intense Quote"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
!   <w:LsdException Locked="false" Priority="19" QFormat="true"
!    Name="Subtle Emphasis"/>
!   <w:LsdException Locked="false" Priority="21" QFormat="true"
!    Name="Intense Emphasis"/>
!   <w:LsdException Locked="false" Priority="31" QFormat="true"
!    Name="Subtle Reference"/>
!   <w:LsdException Locked="false" Priority="32" QFormat="true"
!    Name="Intense Reference"/>
!   <w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
!   <w:LsdException Locked="false" Priority="37" SemiHidden="true"
!    UnhideWhenUsed="true" Name="Bibliography"/>
!   <w:LsdException Locked="false" Priority="39" SemiHidden="true"
!    UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
   </w:LatentStyles>
  </xml><![endif]-->
  <style>
--- 49,58 ----
     <m:wrapIndent m:val="1440"/>
     <m:intLim m:val="subSup"/>
     <m:naryLim m:val="undOvr"/>
!   </m:mathPr>
!  </w:WordDocument>
  </xml><![endif]--><!--[if gte mso 9]><xml>
!  <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
   </w:LatentStyles>
  </xml><![endif]-->
  <style>
***************
*** 214,227 ****
  	mso-font-charset:128;
  	mso-generic-font-family:modern;
  	mso-font-pitch:fixed;
! 	mso-font-signature:-536870145 1791491579 18 0 131231 0;}
! @font-face
! 	{font-family:"Cambria Math";
! 	panose-1:2 4 5 3 5 4 6 3 2 4;
! 	mso-font-charset:0;
! 	mso-generic-font-family:roman;
! 	mso-font-pitch:variable;
! 	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
  @font-face
  	{font-family:"\@MS Mincho";
  	panose-1:2 2 6 9 4 2 5 8 3 4;
--- 65,71 ----
  	mso-font-charset:128;
  	mso-generic-font-family:modern;
  	mso-font-pitch:fixed;
! 	mso-font-signature:-1610612033 1757936891 16 0 131231 0;}
  @font-face
  	{font-family:"\@MS Mincho";
  	panose-1:2 2 6 9 4 2 5 8 3 4;
***************
*** 231,256 ****
  	mso-font-signature:-536870145 1791491579 18 0 131231 0;}
   /* Style Definitions */
   p.MsoNormal, li.MsoNormal, div.MsoNormal
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-style-parent:"";
! 	margin:0in;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman","serif";
  	mso-fareast-font-family:"MS Mincho";}
- .MsoChpDefault
- 	{mso-style-type:export-only;
- 	mso-default-props:yes;
- 	font-size:10.0pt;
- 	mso-ansi-font-size:10.0pt;
- 	mso-bidi-font-size:10.0pt;}
  @page Section1
! 	{size:8.5in 11.0in;
! 	margin:1.0in 1.25in 1.0in 1.25in;
! 	mso-header-margin:.5in;
! 	mso-footer-margin:.5in;
  	mso-paper-source:0;}
  div.Section1
  	{page:Section1;}
--- 75,92 ----
  	mso-font-signature:-536870145 1791491579 18 0 131231 0;}
   /* Style Definitions */
   p.MsoNormal, li.MsoNormal, div.MsoNormal
! 	{mso-style-parent:"";
! 	margin:0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";
  	mso-fareast-font-family:"MS Mincho";}
  @page Section1
! 	{size:612.0pt 792.0pt;
! 	margin:72.0pt 90.0pt 72.0pt 90.0pt;
! 	mso-header-margin:36.0pt;
! 	mso-footer-margin:36.0pt;
  	mso-paper-source:0;}
  div.Section1
  	{page:Section1;}
***************
*** 264,290 ****
  	mso-tstyle-rowband-size:0;
  	mso-tstyle-colband-size:0;
  	mso-style-noshow:yes;
- 	mso-style-priority:99;
- 	mso-style-qformat:yes;
  	mso-style-parent:"";
! 	mso-padding-alt:0in 5.4pt 0in 5.4pt;
! 	mso-para-margin:0in;
  	mso-para-margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:10.0pt;
! 	font-family:"Times New Roman","serif";}
  </style>
  <![endif]-->
  </head>
  
! <frameset cols="30%,*">
!  <frameset rows="16%,*">
    <frame name=logo src=logo.htm>
!   <frame name=toc src=toc.htm target="body">
   </frameset>
   <frame name=body src=relnotes.htm>
   <noframes>
!   <body lang=EN-US style='tab-interval:.5in'>
    <div class=Section1>
    <p class=MsoNormal>This page uses frames, but your browser doesn't support
    them.</p>
--- 100,129 ----
  	mso-tstyle-rowband-size:0;
  	mso-tstyle-colband-size:0;
  	mso-style-noshow:yes;
  	mso-style-parent:"";
! 	mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
! 	mso-para-margin:0pt;
  	mso-para-margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:10.0pt;
! 	font-family:"Times New Roman";
! 	mso-ansi-language:#0400;
! 	mso-fareast-language:#0400;
! 	mso-bidi-language:#0400;}
  </style>
  <![endif]-->
+ <link rel=themeData href="relnotes-frames_files/themedata.thmx">
+ <link rel=colorSchemeMapping href="relnotes-frames_files/colorschememapping.xml">
  </head>
  
! <frameset cols="30%,1*">
!  <frameset rows="16%,1*">
    <frame name=logo src=logo.htm>
!   <frame name=toc src=toc.htm>
   </frameset>
   <frame name=body src=relnotes.htm>
   <noframes>
!   <body lang=EN-US style='tab-interval:36.0pt'>
    <div class=Section1>
    <p class=MsoNormal>This page uses frames, but your browser doesn't support
    them.</p>
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm:1.6.4.37.2.2 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm:1.6.4.40
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm:1.6.4.37.2.2	Mon Jun 23 00:09:21 2008
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes.htm	Wed Jul 16 01:34:56 2008
***************
*** 1,15 ****
  <html xmlns:v="urn:schemas-microsoft-com:vml"
  xmlns:o="urn:schemas-microsoft-com:office:office"
  xmlns:w="urn:schemas-microsoft-com:office:word"
- xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
  xmlns:st1="urn:schemas-microsoft-com:office:smarttags"
! xmlns="http://www.w3.org/TR/REC-html40">
  
  <head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
  <meta name=ProgId content=Word.Document>
! <meta name=Generator content="Microsoft Word 12">
! <meta name=Originator content="Microsoft Word 12">
  <base target="_self">
  <link rel=File-List href="relnotes_files/filelist.xml">
  <link rel=Edit-Time-Data href="relnotes_files/editdata.mso">
--- 1,15 ----
  <html xmlns:v="urn:schemas-microsoft-com:vml"
  xmlns:o="urn:schemas-microsoft-com:office:office"
  xmlns:w="urn:schemas-microsoft-com:office:word"
  xmlns:st1="urn:schemas-microsoft-com:office:smarttags"
! xmlns="http://www.w3.org/TR/REC-html40"
! xmlns:ns0="http://schemas.microsoft.com/office/2004/12/omml">
  
  <head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
  <meta name=ProgId content=Word.Document>
! <meta name=Generator content="Microsoft Word 11">
! <meta name=Originator content="Microsoft Word 11">
  <base target="_self">
  <link rel=File-List href="relnotes_files/filelist.xml">
  <link rel=Edit-Time-Data href="relnotes_files/editdata.mso">
***************
*** 21,27 ****
  .shape {behavior:url(#default#VML);}
  </style>
  <![endif]-->
! <title>OpenAFS for Windows 1.5.39 Release Notes</title>
  <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
   name="PostalCode"/>
  <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
--- 21,27 ----
  .shape {behavior:url(#default#VML);}
  </style>
  <![endif]-->
! <title>OpenAFS for Windows 1.5.50 Release Notes</title>
  <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
   name="PostalCode"/>
  <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
***************
*** 44,78 ****
   <o:DocumentProperties>
    <o:LastAuthor>Jeffrey Altman</o:LastAuthor>
    <o:Revision>4</o:Revision>
!   <o:TotalTime>1686</o:TotalTime>
    <o:Created>2006-11-29T17:26:00Z</o:Created>
    <o:LastSaved>2008-01-08T16:12:00Z</o:LastSaved>
!   <o:Pages>35</o:Pages>
!   <o:Words>19451</o:Words>
!   <o:Characters>110874</o:Characters>
    <o:Company>Secure Endpoints Inc.</o:Company>
!   <o:Lines>923</o:Lines>
!   <o:Paragraphs>260</o:Paragraphs>
!   <o:CharactersWithSpaces>130065</o:CharactersWithSpaces>
!   <o:Version>12.00</o:Version>
   </o:DocumentProperties>
! </xml><![endif]-->
! <link rel=dataStoreItem href="relnotes_files/item0008.xml"
! target="relnotes_files/props0009.xml">
! <link rel=themeData href="relnotes_files/themedata.thmx">
! <link rel=colorSchemeMapping href="relnotes_files/colorschememapping.xml">
! <!--[if gte mso 9]><xml>
   <w:WordDocument>
!   <w:TrackMoves>false</w:TrackMoves>
!   <w:TrackFormatting/>
    <w:ValidateAgainstSchemas/>
    <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
    <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
    <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
-   <w:DoNotPromoteQF/>
-   <w:LidThemeOther>EN-US</w:LidThemeOther>
-   <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
-   <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
    <w:Compatibility>
     <w:BreakWrappedTables/>
     <w:SnapToGridInCell/>
--- 44,68 ----
   <o:DocumentProperties>
    <o:LastAuthor>Jeffrey Altman</o:LastAuthor>
    <o:Revision>4</o:Revision>
!   <o:TotalTime>1733</o:TotalTime>
    <o:Created>2006-11-29T17:26:00Z</o:Created>
    <o:LastSaved>2008-01-08T16:12:00Z</o:LastSaved>
!   <o:Pages>1</o:Pages>
!   <o:Words>19895</o:Words>
!   <o:Characters>113403</o:Characters>
    <o:Company>Secure Endpoints Inc.</o:Company>
!   <o:Lines>945</o:Lines>
!   <o:Paragraphs>266</o:Paragraphs>
!   <o:CharactersWithSpaces>133032</o:CharactersWithSpaces>
!   <o:Version>11.9999</o:Version>
   </o:DocumentProperties>
! </xml><![endif]--><!--[if gte mso 9]><xml>
   <w:WordDocument>
!   <w:Zoom>0</w:Zoom>
    <w:ValidateAgainstSchemas/>
    <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
    <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
    <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
    <w:Compatibility>
     <w:BreakWrappedTables/>
     <w:SnapToGridInCell/>
***************
*** 87,96 ****
     <w:CachedColBalance/>
    </w:Compatibility>
    <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
    <m:mathPr>
     <m:mathFont m:val="Cambria Math"/>
     <m:brkBin m:val="before"/>
!    <m:brkBinSub m:val="&#45;-"/>
     <m:smallFrac m:val="off"/>
     <m:dispDef/>
     <m:lMargin m:val="0"/>
--- 77,92 ----
     <w:CachedColBalance/>
    </w:Compatibility>
    <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+   <w:TrackMoves>false</w:TrackMoves>
+   <w:TrackFormatting/>
+   <w:DoNotPromoteQF/>
+   <w:LidThemeOther>EN-US</w:LidThemeOther>
+   <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
+   <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
    <m:mathPr>
     <m:mathFont m:val="Cambria Math"/>
     <m:brkBin m:val="before"/>
!    <m:brkBinSub m:val="--"/>
     <m:smallFrac m:val="off"/>
     <m:dispDef/>
     <m:lMargin m:val="0"/>
***************
*** 99,259 ****
     <m:wrapIndent m:val="1440"/>
     <m:intLim m:val="subSup"/>
     <m:naryLim m:val="undOvr"/>
!   </m:mathPr></w:WordDocument>
  </xml><![endif]--><!--[if gte mso 9]><xml>
!  <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
!   DefSemiHidden="false" DefQFormat="false" LatentStyleCount="267">
!   <w:LsdException Locked="false" QFormat="true" Name="Normal"/>
!   <w:LsdException Locked="false" QFormat="true" Name="heading 1"/>
!   <w:LsdException Locked="false" QFormat="true" Name="heading 2"/>
!   <w:LsdException Locked="false" QFormat="true" Name="heading 3"/>
!   <w:LsdException Locked="false" QFormat="true" Name="heading 4"/>
!   <w:LsdException Locked="false" QFormat="true" Name="heading 5"/>
!   <w:LsdException Locked="false" QFormat="true" Name="heading 6"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 7"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 8"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 9"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="caption"/>
!   <w:LsdException Locked="false" QFormat="true" Name="Title"/>
!   <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
!   <w:LsdException Locked="false" QFormat="true" Name="Subtitle"/>
!   <w:LsdException Locked="false" Priority="99" Name="Hyperlink"/>
!   <w:LsdException Locked="false" QFormat="true" Name="Strong"/>
!   <w:LsdException Locked="false" QFormat="true" Name="Emphasis"/>
!   <w:LsdException Locked="false" Priority="99" Name="No List"/>
!   <w:LsdException Locked="false" Priority="99" SemiHidden="true"
!    Name="Placeholder Text"/>
!   <w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
!   <w:LsdException Locked="false" Priority="99" SemiHidden="true" Name="Revision"/>
!   <w:LsdException Locked="false" Priority="34" QFormat="true"
!    Name="List Paragraph"/>
!   <w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
!   <w:LsdException Locked="false" Priority="30" QFormat="true"
!    Name="Intense Quote"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
!   <w:LsdException Locked="false" Priority="19" QFormat="true"
!    Name="Subtle Emphasis"/>
!   <w:LsdException Locked="false" Priority="21" QFormat="true"
!    Name="Intense Emphasis"/>
!   <w:LsdException Locked="false" Priority="31" QFormat="true"
!    Name="Subtle Reference"/>
!   <w:LsdException Locked="false" Priority="32" QFormat="true"
!    Name="Intense Reference"/>
!   <w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
!   <w:LsdException Locked="false" Priority="37" SemiHidden="true"
!    UnhideWhenUsed="true" Name="Bibliography"/>
!   <w:LsdException Locked="false" Priority="39" SemiHidden="true"
!    UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
   </w:LatentStyles>
  </xml><![endif]--><!--[if !mso]><object
   classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object>
--- 95,104 ----
     <m:wrapIndent m:val="1440"/>
     <m:intLim m:val="subSup"/>
     <m:naryLim m:val="undOvr"/>
!   </m:mathPr>
!  </w:WordDocument>
  </xml><![endif]--><!--[if gte mso 9]><xml>
!  <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
   </w:LatentStyles>
  </xml><![endif]--><!--[if !mso]><object
   classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object>
***************
*** 262,268 ****
  </style>
  <![endif]-->
  <style>
! <!--
   /* Font Definitions */
   @font-face
  	{font-family:"MS Mincho";
--- 107,535 ----
  </style>
  <![endif]-->
  <style>
! <!--p.MSONORMAL
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;}
! li.MSONORMAL
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;}
! div.MSONORMAL
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;}
! h1
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-fareast-theme-font:minor-fareast;}
! h2
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-fareast-theme-font:minor-fareast;}
! h3
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-fareast-theme-font:minor-fareast;}
! h4
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-fareast-theme-font:minor-fareast;}
! h5
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-fareast-theme-font:minor-fareast;}
! h6
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-fareast-theme-font:minor-fareast;}
! p.MSOTOC1
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! li.MSOTOC1
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! div.MSOTOC1
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! p.MSOTOC2
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! li.MSOTOC2
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! div.MSOTOC2
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! p.MSOTOC3
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! li.MSOTOC3
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! div.MSOTOC3
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! p.MSOTOC4
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! li.MSOTOC4
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! div.MSOTOC4
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! p.MSOTOC5
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! li.MSOTOC5
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! div.MSOTOC5
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! p.MSOTOC6
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! li.MSOTOC6
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! div.MSOTOC6
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! p.MSOTOC7
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! li.MSOTOC7
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! div.MSOTOC7
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! p.MSOTOC8
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! li.MSOTOC8
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! div.MSOTOC8
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! p.MSOTOC9
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! li.MSOTOC9
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! div.MSOTOC9
! 	{mso-style-priority:39;
! 	mso-ascii-theme-font:minor-latin;
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-theme-font:minor-bidi;}
! p.MSOFOOTNOTETEXT
! 	{mso-style-unhide:no;}
! li.MSOFOOTNOTETEXT
! 	{mso-style-unhide:no;}
! div.MSOFOOTNOTETEXT
! 	{mso-style-unhide:no;}
! p.MSOHEADER
! 	{mso-style-unhide:no;}
! li.MSOHEADER
! 	{mso-style-unhide:no;}
! div.MSOHEADER
! 	{mso-style-unhide:no;}
! p.MSOFOOTER
! 	{mso-style-unhide:no;}
! li.MSOFOOTER
! 	{mso-style-unhide:no;}
! div.MSOFOOTER
! 	{mso-style-unhide:no;}
! p.MSOENVELOPEADDRESS
! 	{mso-style-unhide:no;}
! li.MSOENVELOPEADDRESS
! 	{mso-style-unhide:no;}
! div.MSOENVELOPEADDRESS
! 	{mso-style-unhide:no;}
! span.MSOFOOTNOTEREFERENCE
! 	{mso-style-unhide:no;}
! p.MSOLIST
! 	{mso-style-unhide:no;}
! li.MSOLIST
! 	{mso-style-unhide:no;}
! div.MSOLIST
! 	{mso-style-unhide:no;}
! p.MSOTITLE
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;}
! li.MSOTITLE
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;}
! div.MSOTITLE
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;}
! p.MSOBODYTEXT
! 	{mso-style-unhide:no;}
! li.MSOBODYTEXT
! 	{mso-style-unhide:no;}
! div.MSOBODYTEXT
! 	{mso-style-unhide:no;}
! p.MSOBODYTEXTINDENT
! 	{mso-style-unhide:no;}
! li.MSOBODYTEXTINDENT
! 	{mso-style-unhide:no;}
! div.MSOBODYTEXTINDENT
! 	{mso-style-unhide:no;}
! p.MSOSUBTITLE
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;}
! li.MSOSUBTITLE
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;}
! div.MSOSUBTITLE
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;}
! a:link
! 	{mso-style-priority:99;
! 	mso-style-unhide:no;}
! span.MSOHYPERLINK
! 	{mso-style-priority:99;
! 	mso-style-unhide:no;}
! a:visited
! 	{mso-style-unhide:no;}
! span.MSOHYPERLINKFOLLOWED
! 	{mso-style-unhide:no;}
! p
! 	{mso-style-unhide:no;
! 	mso-fareast-theme-font:minor-fareast;}
! pre
! 	{mso-style-unhide:no;}
! p.MSOACETATE
! 	{mso-style-unhide:no;}
! li.MSOACETATE
! 	{mso-style-unhide:no;}
! div.MSOACETATE
! 	{mso-style-unhide:no;}
! p.MSOTOCHEADING
! 	{mso-style-priority:39;
! 	mso-style-qformat:yes;
! 	mso-ascii-theme-font:major-latin;
! 	mso-fareast-theme-font:major-fareast;
! 	mso-hansi-theme-font:major-latin;
! 	mso-bidi-theme-font:major-bidi;
! 	mso-themecolor:accent1;
! 	mso-themeshade:191;}
! li.MSOTOCHEADING
! 	{mso-style-priority:39;
! 	mso-style-qformat:yes;
! 	mso-ascii-theme-font:major-latin;
! 	mso-fareast-theme-font:major-fareast;
! 	mso-hansi-theme-font:major-latin;
! 	mso-bidi-theme-font:major-bidi;
! 	mso-themecolor:accent1;
! 	mso-themeshade:191;}
! div.MSOTOCHEADING
! 	{mso-style-priority:39;
! 	mso-style-qformat:yes;
! 	mso-ascii-theme-font:major-latin;
! 	mso-fareast-theme-font:major-fareast;
! 	mso-hansi-theme-font:major-latin;
! 	mso-bidi-theme-font:major-bidi;
! 	mso-themecolor:accent1;
! 	mso-themeshade:191;}
! span.HEADING1CHAR
! 	{mso-style-unhide:no;
! 	mso-ascii-theme-font:major-latin;
! 	mso-fareast-theme-font:major-fareast;
! 	mso-hansi-theme-font:major-latin;
! 	mso-bidi-theme-font:major-bidi;
! 	mso-themecolor:accent1;
! 	mso-themeshade:191;}
! span.HEADING2CHAR
! 	{mso-style-unhide:no;}
! span.HEADING3CHAR
! 	{mso-style-unhide:no;
! 	mso-ascii-theme-font:major-latin;
! 	mso-fareast-theme-font:major-fareast;
! 	mso-hansi-theme-font:major-latin;
! 	mso-bidi-theme-font:major-bidi;
! 	mso-themecolor:accent1;}
! span.HEADING4CHAR
! 	{mso-style-unhide:no;
! 	mso-ascii-theme-font:major-latin;
! 	mso-fareast-theme-font:major-fareast;
! 	mso-hansi-theme-font:major-latin;
! 	mso-bidi-theme-font:major-bidi;
! 	mso-themecolor:accent1;}
! span.HEADING5CHAR
! 	{mso-style-unhide:no;
! 	mso-ascii-theme-font:major-latin;
! 	mso-fareast-theme-font:major-fareast;
! 	mso-hansi-theme-font:major-latin;
! 	mso-bidi-theme-font:major-bidi;
! 	mso-themecolor:accent1;
! 	mso-themeshade:127;}
! span.HEADING6CHAR
! 	{mso-style-unhide:no;
! 	mso-ascii-theme-font:major-latin;
! 	mso-fareast-theme-font:major-fareast;
! 	mso-hansi-theme-font:major-latin;
! 	mso-bidi-theme-font:major-bidi;
! 	mso-themecolor:accent1;
! 	mso-themeshade:127;}
! span.HTMLPREFORMATTEDCHAR
! 	{mso-style-unhide:no;}
! span.FOOTNOTETEXTCHAR
! 	{mso-style-unhide:no;}
! span.HEADERCHAR
! 	{mso-style-unhide:no;}
! span.FOOTERCHAR
! 	{mso-style-unhide:no;}
! span.TITLECHAR
! 	{mso-style-unhide:no;
! 	mso-ascii-theme-font:major-latin;
! 	mso-fareast-theme-font:major-fareast;
! 	mso-hansi-theme-font:major-latin;
! 	mso-bidi-theme-font:major-bidi;
! 	mso-themecolor:text2;
! 	mso-themeshade:191;}
! span.BODYTEXTCHAR
! 	{mso-style-unhide:no;}
! span.BODYTEXTINDENTCHAR
! 	{mso-style-unhide:no;}
! span.SUBTITLECHAR
! 	{mso-style-unhide:no;
! 	mso-ascii-theme-font:major-latin;
! 	mso-fareast-theme-font:major-fareast;
! 	mso-hansi-theme-font:major-latin;
! 	mso-bidi-theme-font:major-bidi;
! 	mso-themecolor:accent1;}
! span.BALLOONTEXTCHAR
! 	{mso-style-unhide:no;}
! p.HEADING
! 	{mso-style-unhide:no;}
! li.HEADING
! 	{mso-style-unhide:no;}
! div.HEADING
! 	{mso-style-unhide:no;}
! p.CAPTION1
! 	{mso-style-unhide:no;}
! li.CAPTION1
! 	{mso-style-unhide:no;}
! div.CAPTION1
! 	{mso-style-unhide:no;}
! p.INDEX
! 	{mso-style-unhide:no;}
! li.INDEX
! 	{mso-style-unhide:no;}
! div.INDEX
! 	{mso-style-unhide:no;}
! p.CONTENTSHEADING
! 	{mso-style-unhide:no;}
! li.CONTENTSHEADING
! 	{mso-style-unhide:no;}
! div.CONTENTSHEADING
! 	{mso-style-unhide:no;}
! p.PREFORMATTEDTEXT
! 	{mso-style-unhide:no;}
! li.PREFORMATTEDTEXT
! 	{mso-style-unhide:no;}
! div.PREFORMATTEDTEXT
! 	{mso-style-unhide:no;}
! p.LISTCONTENTS
! 	{mso-style-unhide:no;}
! li.LISTCONTENTS
! 	{mso-style-unhide:no;}
! div.LISTCONTENTS
! 	{mso-style-unhide:no;}
! p.LISTHEADING
! 	{mso-style-unhide:no;}
! li.LISTHEADING
! 	{mso-style-unhide:no;}
! div.LISTHEADING
! 	{mso-style-unhide:no;}
! p.HEADER5
! 	{mso-style-unhide:no;}
! li.HEADER5
! 	{mso-style-unhide:no;}
! div.HEADER5
! 	{mso-style-unhide:no;}
! p.HEADING3
! 	{mso-style-unhide:no;}
! li.HEADING3
! 	{mso-style-unhide:no;}
! div.HEADING3
! 	{mso-style-unhide:no;}
! p.DEFAULT
! 	{mso-style-unhide:no;}
! li.DEFAULT
! 	{mso-style-unhide:no;}
! div.DEFAULT
! 	{mso-style-unhide:no;}
! span.BULLETS
! 	{mso-style-unhide:no;}
! span.HEADINGCHAR
! 	{mso-style-unhide:no;}
! span.HEADING3CHAR0
! 	{mso-style-unhide:no;}
! span.HEADING4CHAR0
! 	{mso-style-unhide:no;}
! span.BODYTEXTCHAR0
! 	{mso-style-unhide:no;}
! .MSOCHPDEFAULT
! 	{mso-default-props:yes;}
! table.MSONORMALTABLE
! 	{mso-style-priority:99;
! 	mso-style-qformat:yes;}
! 
   /* Font Definitions */
   @font-face
  	{font-family:"MS Mincho";
***************
*** 271,298 ****
  	mso-font-charset:128;
  	mso-generic-font-family:modern;
  	mso-font-pitch:fixed;
! 	mso-font-signature:-536870145 1791491579 18 0 131231 0;}
! @font-face
! 	{font-family:"Cambria Math";
! 	panose-1:2 4 5 3 5 4 6 3 2 4;
! 	mso-font-charset:0;
! 	mso-generic-font-family:roman;
! 	mso-font-pitch:variable;
! 	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
! @font-face
! 	{font-family:Cambria;
! 	panose-1:2 4 5 3 5 4 6 3 2 4;
! 	mso-font-charset:0;
! 	mso-generic-font-family:roman;
! 	mso-font-pitch:variable;
! 	mso-font-signature:-1610611985 1073741899 0 0 159 0;}
  @font-face
  	{font-family:Tahoma;
  	panose-1:2 11 6 4 3 5 4 4 2 4;
  	mso-font-charset:0;
  	mso-generic-font-family:swiss;
  	mso-font-pitch:variable;
! 	mso-font-signature:-520082689 -1073717157 41 0 66047 0;}
  @font-face
  	{font-family:"\@MS Mincho";
  	panose-1:2 2 6 9 4 2 5 8 3 4;
--- 538,551 ----
  	mso-font-charset:128;
  	mso-generic-font-family:modern;
  	mso-font-pitch:fixed;
! 	mso-font-signature:-1610612033 1757936891 16 0 131231 0;}
  @font-face
  	{font-family:Tahoma;
  	panose-1:2 11 6 4 3 5 4 4 2 4;
  	mso-font-charset:0;
  	mso-generic-font-family:swiss;
  	mso-font-pitch:variable;
! 	mso-font-signature:1627421319 -2147483648 8 0 66047 0;}
  @font-face
  	{font-family:"\@MS Mincho";
  	panose-1:2 2 6 9 4 2 5 8 3 4;
***************
*** 301,306 ****
--- 554,573 ----
  	mso-font-pitch:fixed;
  	mso-font-signature:-536870145 1791491579 18 0 131231 0;}
  @font-face
+ 	{font-family:Calibri;
+ 	panose-1:2 15 5 2 2 2 4 3 2 4;
+ 	mso-font-charset:0;
+ 	mso-generic-font-family:swiss;
+ 	mso-font-pitch:variable;
+ 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
+ @font-face
+ 	{font-family:Cambria;
+ 	panose-1:2 4 5 3 5 4 6 3 2 4;
+ 	mso-font-charset:0;
+ 	mso-generic-font-family:roman;
+ 	mso-font-pitch:variable;
+ 	mso-font-signature:-1610611985 1073741899 0 0 159 0;}
+ @font-face
  	{font-family:Albany;
  	panose-1:2 11 6 4 2 2 2 2 2 4;
  	mso-font-charset:0;
***************
*** 309,325 ****
  	mso-font-signature:647 0 0 0 159 0;}
  @font-face
  	{font-family:StarSymbol;
  	mso-font-charset:0;
  	mso-generic-font-family:auto;
  	mso-font-pitch:variable;
  	mso-font-signature:3 268468224 0 0 1 0;}
  @font-face
  	{font-family:Thorndale;
  	mso-font-alt:"Times New Roman";
  	mso-font-charset:0;
  	mso-generic-font-family:roman;
  	mso-font-pitch:variable;
! 	mso-font-signature:1 0 0 0 159 0;}
  @font-face
  	{font-family:Cumberland;
  	panose-1:2 7 3 9 2 2 5 2 4 4;
--- 576,594 ----
  	mso-font-signature:647 0 0 0 159 0;}
  @font-face
  	{font-family:StarSymbol;
+ 	panose-1:5 0 0 0 0 0 0 0 0 0;
  	mso-font-charset:0;
  	mso-generic-font-family:auto;
  	mso-font-pitch:variable;
  	mso-font-signature:3 268468224 0 0 1 0;}
  @font-face
  	{font-family:Thorndale;
+ 	panose-1:2 2 6 3 5 4 5 2 3 4;
  	mso-font-alt:"Times New Roman";
  	mso-font-charset:0;
  	mso-generic-font-family:roman;
  	mso-font-pitch:variable;
! 	mso-font-signature:647 0 0 0 159 0;}
  @font-face
  	{font-family:Cumberland;
  	panose-1:2 7 3 9 2 2 5 2 4 4;
***************
*** 343,757 ****
  	mso-font-signature:-1610611985 1073750091 0 0 159 0;}
   /* Style Definitions */
   p.MsoNormal, li.MsoNormal, div.MsoNormal
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-style-parent:"";
! 	margin-top:.1in;
! 	margin-right:0in;
! 	margin-bottom:.1in;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  h1
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-style-link:"Heading 1 Char";
  	margin-top:12.0pt;
! 	margin-right:0in;
  	margin-bottom:6.0pt;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	mso-outline-level:1;
  	font-size:16.0pt;
! 	font-family:"Albany","sans-serif";
! 	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;
  	font-weight:bold;}
  h2
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-style-link:"Heading 2 Char";
  	margin-top:12.0pt;
! 	margin-right:0in;
  	margin-bottom:6.0pt;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	mso-outline-level:2;
  	font-size:14.0pt;
! 	font-family:"Albany","sans-serif";
! 	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;
  	font-weight:bold;
  	font-style:italic;}
  h3
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-style-link:"Heading 3 Char";
  	margin-top:12.0pt;
! 	margin-right:0in;
  	margin-bottom:6.0pt;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	mso-outline-level:3;
  	font-size:14.0pt;
! 	font-family:"Albany","sans-serif";
! 	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;
  	font-weight:bold;}
  h4
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-style-link:"Heading 4 Char";
  	margin-top:12.0pt;
! 	margin-right:0in;
  	margin-bottom:3.0pt;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	mso-outline-level:4;
  	font-size:14.0pt;
! 	font-family:"Times New Roman","serif";
! 	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;
  	font-weight:bold;}
  h5
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-style-link:"Heading 5 Char";
  	margin-top:12.0pt;
! 	margin-right:0in;
  	margin-bottom:3.0pt;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	mso-outline-level:5;
  	font-size:13.0pt;
! 	font-family:"Thorndale","serif";
! 	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;
  	font-weight:bold;
  	font-style:italic;}
  h6
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-style-link:"Heading 6 Char";
  	margin-top:12.0pt;
! 	margin-right:0in;
  	margin-bottom:3.0pt;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	mso-outline-level:6;
  	font-size:11.0pt;
! 	font-family:"Times New Roman","serif";
! 	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;
  	font-weight:bold;}
  p.MsoToc1, li.MsoToc1, div.MsoToc1
  	{mso-style-update:auto;
! 	mso-style-priority:39;
! 	mso-style-unhide:no;
! 	margin-top:.1in;
! 	margin-right:0in;
! 	margin-bottom:.1in;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoToc2, li.MsoToc2, div.MsoToc2
  	{mso-style-update:auto;
! 	mso-style-priority:39;
! 	mso-style-unhide:no;
! 	margin-top:.1in;
! 	margin-right:0in;
! 	margin-bottom:.1in;
  	margin-left:14.15pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoToc3, li.MsoToc3, div.MsoToc3
  	{mso-style-update:auto;
! 	mso-style-priority:39;
! 	mso-style-unhide:no;
! 	margin-top:.1in;
! 	margin-right:0in;
! 	margin-bottom:.1in;
  	margin-left:28.3pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoToc4, li.MsoToc4, div.MsoToc4
  	{mso-style-update:auto;
- 	mso-style-priority:39;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
  	margin-bottom:5.0pt;
  	margin-left:33.0pt;
  	line-height:115%;
  	mso-pagination:widow-orphan;
  	font-size:11.0pt;
! 	font-family:"Calibri","sans-serif";
! 	mso-ascii-font-family:Calibri;
! 	mso-ascii-theme-font:minor-latin;
  	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-font-family:Calibri;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-font-family:"Times New Roman";
! 	mso-bidi-theme-font:minor-bidi;}
  p.MsoToc5, li.MsoToc5, div.MsoToc5
  	{mso-style-update:auto;
- 	mso-style-priority:39;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
  	margin-bottom:5.0pt;
  	margin-left:44.0pt;
  	line-height:115%;
  	mso-pagination:widow-orphan;
  	font-size:11.0pt;
! 	font-family:"Calibri","sans-serif";
! 	mso-ascii-font-family:Calibri;
! 	mso-ascii-theme-font:minor-latin;
  	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-font-family:Calibri;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-font-family:"Times New Roman";
! 	mso-bidi-theme-font:minor-bidi;}
  p.MsoToc6, li.MsoToc6, div.MsoToc6
  	{mso-style-update:auto;
- 	mso-style-priority:39;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
  	margin-bottom:5.0pt;
  	margin-left:55.0pt;
  	line-height:115%;
  	mso-pagination:widow-orphan;
  	font-size:11.0pt;
! 	font-family:"Calibri","sans-serif";
! 	mso-ascii-font-family:Calibri;
! 	mso-ascii-theme-font:minor-latin;
  	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-font-family:Calibri;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-font-family:"Times New Roman";
! 	mso-bidi-theme-font:minor-bidi;}
  p.MsoToc7, li.MsoToc7, div.MsoToc7
  	{mso-style-update:auto;
- 	mso-style-priority:39;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
  	margin-bottom:5.0pt;
  	margin-left:66.0pt;
  	line-height:115%;
  	mso-pagination:widow-orphan;
  	font-size:11.0pt;
! 	font-family:"Calibri","sans-serif";
! 	mso-ascii-font-family:Calibri;
! 	mso-ascii-theme-font:minor-latin;
  	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-font-family:Calibri;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-font-family:"Times New Roman";
! 	mso-bidi-theme-font:minor-bidi;}
  p.MsoToc8, li.MsoToc8, div.MsoToc8
  	{mso-style-update:auto;
- 	mso-style-priority:39;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
  	margin-bottom:5.0pt;
  	margin-left:77.0pt;
  	line-height:115%;
  	mso-pagination:widow-orphan;
  	font-size:11.0pt;
! 	font-family:"Calibri","sans-serif";
! 	mso-ascii-font-family:Calibri;
! 	mso-ascii-theme-font:minor-latin;
  	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-font-family:Calibri;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-font-family:"Times New Roman";
! 	mso-bidi-theme-font:minor-bidi;}
  p.MsoToc9, li.MsoToc9, div.MsoToc9
  	{mso-style-update:auto;
- 	mso-style-priority:39;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
  	margin-bottom:5.0pt;
  	margin-left:88.0pt;
  	line-height:115%;
  	mso-pagination:widow-orphan;
  	font-size:11.0pt;
! 	font-family:"Calibri","sans-serif";
! 	mso-ascii-font-family:Calibri;
! 	mso-ascii-theme-font:minor-latin;
  	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;
! 	mso-hansi-font-family:Calibri;
! 	mso-hansi-theme-font:minor-latin;
! 	mso-bidi-font-family:"Times New Roman";
! 	mso-bidi-theme-font:minor-bidi;}
  p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText
! 	{mso-style-unhide:no;
! 	mso-style-link:"Footnote Text Char";
! 	margin-top:.1in;
! 	margin-right:0in;
! 	margin-bottom:.1in;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:10.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoHeader, li.MsoHeader, div.MsoHeader
! 	{mso-style-unhide:no;
! 	mso-style-link:"Header Char";
! 	margin-top:.1in;
! 	margin-right:0in;
! 	margin-bottom:.1in;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoFooter, li.MsoFooter, div.MsoFooter
! 	{mso-style-unhide:no;
! 	mso-style-link:"Footer Char";
! 	margin-top:.1in;
! 	margin-right:0in;
! 	margin-bottom:.1in;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoEnvelopeAddress, li.MsoEnvelopeAddress, div.MsoEnvelopeAddress
! 	{mso-style-unhide:no;
! 	margin-top:.1in;
! 	margin-right:0in;
! 	margin-bottom:.1in;
! 	margin-left:2.0in;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Arial","sans-serif";
  	mso-fareast-font-family:"MS Mincho";}
  span.MsoFootnoteReference
! 	{mso-style-unhide:no;
! 	vertical-align:super;}
  p.MsoList, li.MsoList, div.MsoList
! 	{mso-style-unhide:no;
! 	margin-top:0in;
! 	margin-right:0in;
  	margin-bottom:6.0pt;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoTitle, li.MsoTitle, div.MsoTitle
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-style-link:"Title Char";
  	margin-top:12.0pt;
! 	margin-right:0in;
  	margin-bottom:6.0pt;
! 	margin-left:0in;
  	text-align:center;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	font-size:18.0pt;
! 	font-family:"Albany","sans-serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";
  	font-weight:bold;}
  p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
! 	{mso-style-unhide:no;
! 	mso-style-link:"Body Text Char";
! 	margin-top:0in;
! 	margin-right:0in;
  	margin-bottom:6.0pt;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoBodyTextIndent, li.MsoBodyTextIndent, div.MsoBodyTextIndent
! 	{mso-style-unhide:no;
! 	mso-style-link:"Body Text Indent Char";
! 	margin-top:0in;
! 	margin-right:0in;
  	margin-bottom:6.0pt;
  	margin-left:14.15pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoSubtitle, li.MsoSubtitle, div.MsoSubtitle
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-style-link:"Subtitle Char";
  	margin-top:12.0pt;
! 	margin-right:0in;
  	margin-bottom:6.0pt;
! 	margin-left:0in;
  	text-align:center;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	font-size:14.0pt;
! 	font-family:"Albany","sans-serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";
  	font-style:italic;}
  a:link, span.MsoHyperlink
! 	{mso-style-priority:99;
! 	mso-style-unhide:no;
! 	color:navy;
  	text-decoration:underline;
  	text-underline:single;}
  a:visited, span.MsoHyperlinkFollowed
! 	{mso-style-unhide:no;
! 	color:maroon;
  	text-decoration:underline;
  	text-underline:single;}
  p
! 	{mso-style-unhide:no;
! 	mso-margin-top-alt:auto;
! 	margin-right:0in;
  	mso-margin-bottom-alt:auto;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman","serif";
! 	mso-fareast-font-family:"Times New Roman";
! 	mso-fareast-theme-font:minor-fareast;}
  pre
! 	{mso-style-unhide:no;
! 	mso-style-link:"HTML Preformatted Char";
! 	margin:0in;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
--- 612,934 ----
  	mso-font-signature:-1610611985 1073750091 0 0 159 0;}
   /* Style Definitions */
   p.MsoNormal, li.MsoNormal, div.MsoNormal
! 	{mso-style-parent:"";
! 	margin-top:7.2pt;
! 	margin-right:0pt;
! 	margin-bottom:7.2pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  h1
! 	{mso-style-link:"Heading 1 Char";
  	margin-top:12.0pt;
! 	margin-right:0pt;
  	margin-bottom:6.0pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	mso-outline-level:1;
  	font-size:16.0pt;
! 	font-family:Albany;
  	font-weight:bold;}
  h2
! 	{mso-style-link:"Heading 2 Char";
  	margin-top:12.0pt;
! 	margin-right:0pt;
  	margin-bottom:6.0pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	mso-outline-level:2;
  	font-size:14.0pt;
! 	font-family:Albany;
  	font-weight:bold;
  	font-style:italic;}
  h3
! 	{mso-style-link:"Heading 3 Char";
  	margin-top:12.0pt;
! 	margin-right:0pt;
  	margin-bottom:6.0pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	mso-outline-level:3;
  	font-size:14.0pt;
! 	font-family:Albany;
  	font-weight:bold;}
  h4
! 	{mso-style-link:"Heading 4 Char";
  	margin-top:12.0pt;
! 	margin-right:0pt;
  	margin-bottom:3.0pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	mso-outline-level:4;
  	font-size:14.0pt;
! 	font-family:"Times New Roman";
  	font-weight:bold;}
  h5
! 	{mso-style-link:"Heading 5 Char";
  	margin-top:12.0pt;
! 	margin-right:0pt;
  	margin-bottom:3.0pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	mso-outline-level:5;
  	font-size:13.0pt;
! 	font-family:Thorndale;
  	font-weight:bold;
  	font-style:italic;}
  h6
! 	{mso-style-link:"Heading 6 Char";
  	margin-top:12.0pt;
! 	margin-right:0pt;
  	margin-bottom:3.0pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	mso-outline-level:6;
  	font-size:11.0pt;
! 	font-family:"Times New Roman";
  	font-weight:bold;}
  p.MsoToc1, li.MsoToc1, div.MsoToc1
  	{mso-style-update:auto;
! 	margin-top:7.2pt;
! 	margin-right:0pt;
! 	margin-bottom:7.2pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoToc2, li.MsoToc2, div.MsoToc2
  	{mso-style-update:auto;
! 	margin-top:7.2pt;
! 	margin-right:0pt;
! 	margin-bottom:7.2pt;
  	margin-left:14.15pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoToc3, li.MsoToc3, div.MsoToc3
  	{mso-style-update:auto;
! 	margin-top:7.2pt;
! 	margin-right:0pt;
! 	margin-bottom:7.2pt;
  	margin-left:28.3pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoToc4, li.MsoToc4, div.MsoToc4
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
  	margin-bottom:5.0pt;
  	margin-left:33.0pt;
  	line-height:115%;
  	mso-pagination:widow-orphan;
  	font-size:11.0pt;
! 	font-family:Calibri;
  	mso-fareast-font-family:"Times New Roman";
! 	mso-bidi-font-family:"Times New Roman";}
  p.MsoToc5, li.MsoToc5, div.MsoToc5
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
  	margin-bottom:5.0pt;
  	margin-left:44.0pt;
  	line-height:115%;
  	mso-pagination:widow-orphan;
  	font-size:11.0pt;
! 	font-family:Calibri;
  	mso-fareast-font-family:"Times New Roman";
! 	mso-bidi-font-family:"Times New Roman";}
  p.MsoToc6, li.MsoToc6, div.MsoToc6
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
  	margin-bottom:5.0pt;
  	margin-left:55.0pt;
  	line-height:115%;
  	mso-pagination:widow-orphan;
  	font-size:11.0pt;
! 	font-family:Calibri;
  	mso-fareast-font-family:"Times New Roman";
! 	mso-bidi-font-family:"Times New Roman";}
  p.MsoToc7, li.MsoToc7, div.MsoToc7
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
  	margin-bottom:5.0pt;
  	margin-left:66.0pt;
  	line-height:115%;
  	mso-pagination:widow-orphan;
  	font-size:11.0pt;
! 	font-family:Calibri;
  	mso-fareast-font-family:"Times New Roman";
! 	mso-bidi-font-family:"Times New Roman";}
  p.MsoToc8, li.MsoToc8, div.MsoToc8
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
  	margin-bottom:5.0pt;
  	margin-left:77.0pt;
  	line-height:115%;
  	mso-pagination:widow-orphan;
  	font-size:11.0pt;
! 	font-family:Calibri;
  	mso-fareast-font-family:"Times New Roman";
! 	mso-bidi-font-family:"Times New Roman";}
  p.MsoToc9, li.MsoToc9, div.MsoToc9
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
  	margin-bottom:5.0pt;
  	margin-left:88.0pt;
  	line-height:115%;
  	mso-pagination:widow-orphan;
  	font-size:11.0pt;
! 	font-family:Calibri;
  	mso-fareast-font-family:"Times New Roman";
! 	mso-bidi-font-family:"Times New Roman";}
  p.MsoFootnoteText, li.MsoFootnoteText, div.MsoFootnoteText
! 	{mso-style-link:"Footnote Text Char";
! 	margin-top:7.2pt;
! 	margin-right:0pt;
! 	margin-bottom:7.2pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:10.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoHeader, li.MsoHeader, div.MsoHeader
! 	{mso-style-link:"Header Char";
! 	margin-top:7.2pt;
! 	margin-right:0pt;
! 	margin-bottom:7.2pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoFooter, li.MsoFooter, div.MsoFooter
! 	{mso-style-link:"Footer Char";
! 	margin-top:7.2pt;
! 	margin-right:0pt;
! 	margin-bottom:7.2pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoEnvelopeAddress, li.MsoEnvelopeAddress, div.MsoEnvelopeAddress
! 	{margin-top:7.2pt;
! 	margin-right:0pt;
! 	margin-bottom:7.2pt;
! 	margin-left:144.0pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Arial;
  	mso-fareast-font-family:"MS Mincho";}
  span.MsoFootnoteReference
! 	{vertical-align:super;}
  p.MsoList, li.MsoList, div.MsoList
! 	{margin-top:0pt;
! 	margin-right:0pt;
  	margin-bottom:6.0pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoTitle, li.MsoTitle, div.MsoTitle
! 	{mso-style-link:"Title Char";
  	margin-top:12.0pt;
! 	margin-right:0pt;
  	margin-bottom:6.0pt;
! 	margin-left:0pt;
  	text-align:center;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	font-size:18.0pt;
! 	font-family:Albany;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";
  	font-weight:bold;}
  p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
! 	{mso-style-link:"Body Text Char";
! 	margin-top:0pt;
! 	margin-right:0pt;
  	margin-bottom:6.0pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoBodyTextIndent, li.MsoBodyTextIndent, div.MsoBodyTextIndent
! 	{mso-style-link:"Body Text Indent Char";
! 	margin-top:0pt;
! 	margin-right:0pt;
  	margin-bottom:6.0pt;
  	margin-left:14.15pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.MsoSubtitle, li.MsoSubtitle, div.MsoSubtitle
! 	{mso-style-link:"Subtitle Char";
  	margin-top:12.0pt;
! 	margin-right:0pt;
  	margin-bottom:6.0pt;
! 	margin-left:0pt;
  	text-align:center;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	font-size:14.0pt;
! 	font-family:Albany;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";
  	font-style:italic;}
  a:link, span.MsoHyperlink
! 	{color:navy;
  	text-decoration:underline;
  	text-underline:single;}
  a:visited, span.MsoHyperlinkFollowed
! 	{color:maroon;
  	text-decoration:underline;
  	text-underline:single;}
  p
! 	{mso-margin-top-alt:auto;
! 	margin-right:0pt;
  	mso-margin-bottom-alt:auto;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";
! 	mso-fareast-font-family:"Times New Roman";}
  pre
! 	{mso-style-link:"HTML Preformatted Char";
! 	margin:0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
***************
*** 759,828 ****
  	font-family:"Courier New";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
! 	{mso-style-unhide:no;
! 	mso-style-link:"Balloon Text Char";
! 	margin:0in;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:8.0pt;
! 	font-family:"Tahoma","sans-serif";
  	mso-fareast-font-family:"MS Mincho";}
- p.MsoTocHeading, li.MsoTocHeading, div.MsoTocHeading
- 	{mso-style-noshow:yes;
- 	mso-style-priority:39;
- 	mso-style-qformat:yes;
- 	mso-style-parent:"Heading 1";
- 	mso-style-next:Normal;
- 	margin-top:24.0pt;
- 	margin-right:0in;
- 	margin-bottom:0in;
- 	margin-left:0in;
- 	margin-bottom:.0001pt;
- 	line-height:115%;
- 	mso-pagination:widow-orphan lines-together;
- 	page-break-after:avoid;
- 	font-size:14.0pt;
- 	font-family:"Cambria","serif";
- 	mso-ascii-font-family:Cambria;
- 	mso-ascii-theme-font:major-latin;
- 	mso-fareast-font-family:"Times New Roman";
- 	mso-fareast-theme-font:major-fareast;
- 	mso-hansi-font-family:Cambria;
- 	mso-hansi-theme-font:major-latin;
- 	mso-bidi-font-family:"Times New Roman";
- 	mso-bidi-theme-font:major-bidi;
- 	color:#365F91;
- 	mso-themecolor:accent1;
- 	mso-themeshade:191;
- 	font-weight:bold;}
  span.Heading1Char
  	{mso-style-name:"Heading 1 Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:"Heading 1";
  	mso-ansi-font-size:14.0pt;
  	mso-bidi-font-size:14.0pt;
! 	font-family:"Cambria","serif";
  	mso-ascii-font-family:Cambria;
- 	mso-ascii-theme-font:major-latin;
  	mso-fareast-font-family:"Times New Roman";
- 	mso-fareast-theme-font:major-fareast;
  	mso-hansi-font-family:Cambria;
- 	mso-hansi-theme-font:major-latin;
  	mso-bidi-font-family:"Times New Roman";
- 	mso-bidi-theme-font:major-bidi;
  	color:#365F91;
- 	mso-themecolor:accent1;
- 	mso-themeshade:191;
  	font-weight:bold;}
  span.Heading2Char
  	{mso-style-name:"Heading 2 Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:"Heading 2";
  	mso-ansi-font-size:14.0pt;
  	mso-bidi-font-size:14.0pt;
! 	font-family:"Albany","sans-serif";
  	mso-ascii-font-family:Albany;
  	mso-hansi-font-family:Albany;
  	mso-ansi-language:EN-US;
--- 936,968 ----
  	font-family:"Courier New";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
! 	{mso-style-link:"Balloon Text Char";
! 	margin:0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:8.0pt;
! 	font-family:Tahoma;
  	mso-fareast-font-family:"MS Mincho";}
  span.Heading1Char
  	{mso-style-name:"Heading 1 Char";
  	mso-style-locked:yes;
  	mso-style-link:"Heading 1";
  	mso-ansi-font-size:14.0pt;
  	mso-bidi-font-size:14.0pt;
! 	font-family:Cambria;
  	mso-ascii-font-family:Cambria;
  	mso-fareast-font-family:"Times New Roman";
  	mso-hansi-font-family:Cambria;
  	mso-bidi-font-family:"Times New Roman";
  	color:#365F91;
  	font-weight:bold;}
  span.Heading2Char
  	{mso-style-name:"Heading 2 Char";
  	mso-style-locked:yes;
  	mso-style-link:"Heading 2";
  	mso-ansi-font-size:14.0pt;
  	mso-bidi-font-size:14.0pt;
! 	font-family:Albany;
  	mso-ascii-font-family:Albany;
  	mso-hansi-font-family:Albany;
  	mso-ansi-language:EN-US;
***************
*** 832,916 ****
  	font-style:italic;}
  span.Heading3Char
  	{mso-style-name:"Heading 3 Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:"Heading 3";
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:"Cambria","serif";
  	mso-ascii-font-family:Cambria;
- 	mso-ascii-theme-font:major-latin;
  	mso-fareast-font-family:"Times New Roman";
- 	mso-fareast-theme-font:major-fareast;
  	mso-hansi-font-family:Cambria;
- 	mso-hansi-theme-font:major-latin;
  	mso-bidi-font-family:"Times New Roman";
- 	mso-bidi-theme-font:major-bidi;
  	color:#4F81BD;
- 	mso-themecolor:accent1;
  	font-weight:bold;}
  span.Heading4Char
  	{mso-style-name:"Heading 4 Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:"Heading 4";
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:"Cambria","serif";
  	mso-ascii-font-family:Cambria;
- 	mso-ascii-theme-font:major-latin;
  	mso-fareast-font-family:"Times New Roman";
- 	mso-fareast-theme-font:major-fareast;
  	mso-hansi-font-family:Cambria;
- 	mso-hansi-theme-font:major-latin;
  	mso-bidi-font-family:"Times New Roman";
- 	mso-bidi-theme-font:major-bidi;
  	color:#4F81BD;
- 	mso-themecolor:accent1;
  	font-weight:bold;
  	font-style:italic;}
  span.Heading5Char
  	{mso-style-name:"Heading 5 Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:"Heading 5";
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:"Cambria","serif";
  	mso-ascii-font-family:Cambria;
- 	mso-ascii-theme-font:major-latin;
  	mso-fareast-font-family:"Times New Roman";
- 	mso-fareast-theme-font:major-fareast;
  	mso-hansi-font-family:Cambria;
- 	mso-hansi-theme-font:major-latin;
  	mso-bidi-font-family:"Times New Roman";
! 	mso-bidi-theme-font:major-bidi;
! 	color:#243F60;
! 	mso-themecolor:accent1;
! 	mso-themeshade:127;}
  span.Heading6Char
  	{mso-style-name:"Heading 6 Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:"Heading 6";
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:"Cambria","serif";
  	mso-ascii-font-family:Cambria;
- 	mso-ascii-theme-font:major-latin;
  	mso-fareast-font-family:"Times New Roman";
- 	mso-fareast-theme-font:major-fareast;
  	mso-hansi-font-family:Cambria;
- 	mso-hansi-theme-font:major-latin;
  	mso-bidi-font-family:"Times New Roman";
- 	mso-bidi-theme-font:major-bidi;
  	color:#243F60;
- 	mso-themecolor:accent1;
- 	mso-themeshade:127;
  	font-style:italic;}
  span.HTMLPreformattedChar
  	{mso-style-name:"HTML Preformatted Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:"HTML Preformatted";
  	font-family:Consolas;
--- 972,1029 ----
  	font-style:italic;}
  span.Heading3Char
  	{mso-style-name:"Heading 3 Char";
  	mso-style-locked:yes;
  	mso-style-link:"Heading 3";
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:Cambria;
  	mso-ascii-font-family:Cambria;
  	mso-fareast-font-family:"Times New Roman";
  	mso-hansi-font-family:Cambria;
  	mso-bidi-font-family:"Times New Roman";
  	color:#4F81BD;
  	font-weight:bold;}
  span.Heading4Char
  	{mso-style-name:"Heading 4 Char";
  	mso-style-locked:yes;
  	mso-style-link:"Heading 4";
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:Cambria;
  	mso-ascii-font-family:Cambria;
  	mso-fareast-font-family:"Times New Roman";
  	mso-hansi-font-family:Cambria;
  	mso-bidi-font-family:"Times New Roman";
  	color:#4F81BD;
  	font-weight:bold;
  	font-style:italic;}
  span.Heading5Char
  	{mso-style-name:"Heading 5 Char";
  	mso-style-locked:yes;
  	mso-style-link:"Heading 5";
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:Cambria;
  	mso-ascii-font-family:Cambria;
  	mso-fareast-font-family:"Times New Roman";
  	mso-hansi-font-family:Cambria;
  	mso-bidi-font-family:"Times New Roman";
! 	color:#243F60;}
  span.Heading6Char
  	{mso-style-name:"Heading 6 Char";
  	mso-style-locked:yes;
  	mso-style-link:"Heading 6";
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:Cambria;
  	mso-ascii-font-family:Cambria;
  	mso-fareast-font-family:"Times New Roman";
  	mso-hansi-font-family:Cambria;
  	mso-bidi-font-family:"Times New Roman";
  	color:#243F60;
  	font-style:italic;}
  span.HTMLPreformattedChar
  	{mso-style-name:"HTML Preformatted Char";
  	mso-style-locked:yes;
  	mso-style-link:"HTML Preformatted";
  	font-family:Consolas;
***************
*** 919,1084 ****
  	mso-hansi-font-family:Consolas;}
  span.FootnoteTextChar
  	{mso-style-name:"Footnote Text Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:"Footnote Text";
! 	font-family:"Thorndale","serif";
  	mso-ascii-font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-hansi-font-family:Thorndale;}
  span.HeaderChar
  	{mso-style-name:"Header Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:Header;
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-ascii-font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-hansi-font-family:Thorndale;}
  span.FooterChar
  	{mso-style-name:"Footer Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:Footer;
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-ascii-font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-hansi-font-family:Thorndale;}
  span.TitleChar
  	{mso-style-name:"Title Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:Title;
  	mso-ansi-font-size:26.0pt;
  	mso-bidi-font-size:26.0pt;
! 	font-family:"Cambria","serif";
  	mso-ascii-font-family:Cambria;
- 	mso-ascii-theme-font:major-latin;
  	mso-fareast-font-family:"Times New Roman";
- 	mso-fareast-theme-font:major-fareast;
  	mso-hansi-font-family:Cambria;
- 	mso-hansi-theme-font:major-latin;
  	mso-bidi-font-family:"Times New Roman";
- 	mso-bidi-theme-font:major-bidi;
  	color:#17365D;
- 	mso-themecolor:text2;
- 	mso-themeshade:191;
  	letter-spacing:.25pt;
  	mso-font-kerning:14.0pt;}
  span.BodyTextChar
  	{mso-style-name:"Body Text Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:"Body Text";
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-ascii-font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-hansi-font-family:Thorndale;}
  span.BodyTextIndentChar
  	{mso-style-name:"Body Text Indent Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:"Body Text Indent";
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-ascii-font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-hansi-font-family:Thorndale;}
  span.SubtitleChar
  	{mso-style-name:"Subtitle Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:Subtitle;
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:"Cambria","serif";
  	mso-ascii-font-family:Cambria;
- 	mso-ascii-theme-font:major-latin;
  	mso-fareast-font-family:"Times New Roman";
- 	mso-fareast-theme-font:major-fareast;
  	mso-hansi-font-family:Cambria;
- 	mso-hansi-theme-font:major-latin;
  	mso-bidi-font-family:"Times New Roman";
- 	mso-bidi-theme-font:major-bidi;
  	color:#4F81BD;
- 	mso-themecolor:accent1;
  	letter-spacing:.75pt;
  	font-style:italic;}
  span.BalloonTextChar
  	{mso-style-name:"Balloon Text Char";
- 	mso-style-unhide:no;
  	mso-style-locked:yes;
  	mso-style-link:"Balloon Text";
  	mso-ansi-font-size:8.0pt;
  	mso-bidi-font-size:8.0pt;
! 	font-family:"Tahoma","sans-serif";
  	mso-ascii-font-family:Tahoma;
  	mso-fareast-font-family:"MS Mincho";
  	mso-hansi-font-family:Tahoma;
  	mso-bidi-font-family:Tahoma;}
  p.heading, li.heading, div.heading
  	{mso-style-name:heading;
- 	mso-style-unhide:no;
  	margin-top:12.0pt;
! 	margin-right:0in;
  	margin-bottom:6.0pt;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	font-size:14.0pt;
! 	font-family:"Albany","sans-serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.caption1, li.caption1, div.caption1
  	{mso-style-name:caption1;
- 	mso-style-unhide:no;
  	margin-top:6.0pt;
! 	margin-right:0in;
  	margin-bottom:6.0pt;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:10.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";
  	font-style:italic;}
  p.index, li.index, div.index
  	{mso-style-name:index;
! 	mso-style-unhide:no;
! 	margin-top:.1in;
! 	margin-right:0in;
! 	margin-bottom:.1in;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.contentsheading, li.contentsheading, div.contentsheading
  	{mso-style-name:contentsheading;
- 	mso-style-unhide:no;
  	margin-top:12.0pt;
! 	margin-right:0in;
  	margin-bottom:6.0pt;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	font-size:16.0pt;
! 	font-family:"Albany","sans-serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";
  	font-weight:bold;}
  p.preformattedtext, li.preformattedtext, div.preformattedtext
  	{mso-style-name:preformattedtext;
! 	mso-style-unhide:no;
! 	margin:0in;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:10.0pt;
--- 1032,1192 ----
  	mso-hansi-font-family:Consolas;}
  span.FootnoteTextChar
  	{mso-style-name:"Footnote Text Char";
  	mso-style-locked:yes;
  	mso-style-link:"Footnote Text";
! 	font-family:Thorndale;
  	mso-ascii-font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-hansi-font-family:Thorndale;}
  span.HeaderChar
  	{mso-style-name:"Header Char";
  	mso-style-locked:yes;
  	mso-style-link:Header;
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-ascii-font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-hansi-font-family:Thorndale;}
  span.FooterChar
  	{mso-style-name:"Footer Char";
  	mso-style-locked:yes;
  	mso-style-link:Footer;
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-ascii-font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-hansi-font-family:Thorndale;}
  span.TitleChar
  	{mso-style-name:"Title Char";
  	mso-style-locked:yes;
  	mso-style-link:Title;
  	mso-ansi-font-size:26.0pt;
  	mso-bidi-font-size:26.0pt;
! 	font-family:Cambria;
  	mso-ascii-font-family:Cambria;
  	mso-fareast-font-family:"Times New Roman";
  	mso-hansi-font-family:Cambria;
  	mso-bidi-font-family:"Times New Roman";
  	color:#17365D;
  	letter-spacing:.25pt;
  	mso-font-kerning:14.0pt;}
  span.BodyTextChar
  	{mso-style-name:"Body Text Char";
  	mso-style-locked:yes;
  	mso-style-link:"Body Text";
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-ascii-font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-hansi-font-family:Thorndale;}
  span.BodyTextIndentChar
  	{mso-style-name:"Body Text Indent Char";
  	mso-style-locked:yes;
  	mso-style-link:"Body Text Indent";
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-ascii-font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-hansi-font-family:Thorndale;}
  span.SubtitleChar
  	{mso-style-name:"Subtitle Char";
  	mso-style-locked:yes;
  	mso-style-link:Subtitle;
  	mso-ansi-font-size:12.0pt;
  	mso-bidi-font-size:12.0pt;
! 	font-family:Cambria;
  	mso-ascii-font-family:Cambria;
  	mso-fareast-font-family:"Times New Roman";
  	mso-hansi-font-family:Cambria;
  	mso-bidi-font-family:"Times New Roman";
  	color:#4F81BD;
  	letter-spacing:.75pt;
  	font-style:italic;}
  span.BalloonTextChar
  	{mso-style-name:"Balloon Text Char";
  	mso-style-locked:yes;
  	mso-style-link:"Balloon Text";
  	mso-ansi-font-size:8.0pt;
  	mso-bidi-font-size:8.0pt;
! 	font-family:Tahoma;
  	mso-ascii-font-family:Tahoma;
  	mso-fareast-font-family:"MS Mincho";
  	mso-hansi-font-family:Tahoma;
  	mso-bidi-font-family:Tahoma;}
+ p.msotocheading, li.msotocheading, div.msotocheading
+ 	{mso-style-name:msotocheading;
+ 	mso-style-noshow:yes;
+ 	mso-style-parent:"Heading 1";
+ 	mso-style-next:Normal;
+ 	margin-top:24.0pt;
+ 	margin-right:0pt;
+ 	margin-bottom:0pt;
+ 	margin-left:0pt;
+ 	margin-bottom:.0001pt;
+ 	line-height:115%;
+ 	mso-pagination:widow-orphan lines-together;
+ 	page-break-after:avoid;
+ 	font-size:14.0pt;
+ 	font-family:Cambria;
+ 	mso-fareast-font-family:"Times New Roman";
+ 	mso-bidi-font-family:"Times New Roman";
+ 	color:#365F91;
+ 	font-weight:bold;}
  p.heading, li.heading, div.heading
  	{mso-style-name:heading;
  	margin-top:12.0pt;
! 	margin-right:0pt;
  	margin-bottom:6.0pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	font-size:14.0pt;
! 	font-family:Albany;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.caption1, li.caption1, div.caption1
  	{mso-style-name:caption1;
  	margin-top:6.0pt;
! 	margin-right:0pt;
  	margin-bottom:6.0pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:10.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";
  	font-style:italic;}
  p.index, li.index, div.index
  	{mso-style-name:index;
! 	margin-top:7.2pt;
! 	margin-right:0pt;
! 	margin-bottom:7.2pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.contentsheading, li.contentsheading, div.contentsheading
  	{mso-style-name:contentsheading;
  	margin-top:12.0pt;
! 	margin-right:0pt;
  	margin-bottom:6.0pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	page-break-after:avoid;
  	font-size:16.0pt;
! 	font-family:Albany;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";
  	font-weight:bold;}
  p.preformattedtext, li.preformattedtext, div.preformattedtext
  	{mso-style-name:preformattedtext;
! 	margin:0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:10.0pt;
***************
*** 1087,1205 ****
  	mso-bidi-font-family:"Times New Roman";}
  p.listcontents, li.listcontents, div.listcontents
  	{mso-style-name:listcontents;
! 	mso-style-unhide:no;
! 	margin-top:.1in;
! 	margin-right:0in;
! 	margin-bottom:.1in;
  	margin-left:28.35pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.listheading, li.listheading, div.listheading
  	{mso-style-name:listheading;
- 	mso-style-unhide:no;
  	margin-top:4.3pt;
! 	margin-right:0in;
  	margin-bottom:4.3pt;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.header5, li.header5, div.header5
  	{mso-style-name:header5;
! 	mso-style-unhide:no;
! 	margin-top:.1in;
! 	margin-right:0in;
! 	margin-bottom:.1in;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.heading3, li.heading3, div.heading3
  	{mso-style-name:heading3;
! 	mso-style-unhide:no;
! 	margin-top:.1in;
! 	margin-right:0in;
! 	margin-bottom:.1in;
! 	margin-left:0in;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Thorndale","serif";
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.default, li.default, div.default
  	{mso-style-name:default;
! 	mso-style-unhide:no;
! 	margin:0in;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	text-autospace:none;
  	font-size:12.0pt;
! 	font-family:"Arial","sans-serif";
  	mso-fareast-font-family:"MS Mincho";
  	color:black;}
  span.bullets
  	{mso-style-name:bullets;
- 	mso-style-unhide:no;
  	font-family:StarSymbol;
  	mso-ascii-font-family:StarSymbol;
  	mso-hansi-font-family:StarSymbol;}
  span.headingchar
  	{mso-style-name:headingchar;
! 	mso-style-unhide:no;
! 	font-family:"Albany","sans-serif";
  	mso-ascii-font-family:Albany;
  	mso-hansi-font-family:Albany;}
  span.heading3char0
  	{mso-style-name:heading3char;
! 	mso-style-unhide:no;
! 	font-family:"Albany","sans-serif";
  	mso-ascii-font-family:Albany;
  	mso-hansi-font-family:Albany;
  	font-weight:bold;}
  span.heading4char0
  	{mso-style-name:heading4char;
! 	mso-style-unhide:no;
! 	font-family:"Andale Sans UI","sans-serif";
  	mso-ascii-font-family:"Andale Sans UI";
  	mso-hansi-font-family:"Andale Sans UI";
  	font-weight:bold;}
  span.bodytextchar0
  	{mso-style-name:bodytextchar;
! 	mso-style-unhide:no;
! 	font-family:"Thorndale","serif";
  	mso-ascii-font-family:Thorndale;
  	mso-hansi-font-family:Thorndale;}
- .MsoChpDefault
- 	{mso-style-type:export-only;
- 	mso-default-props:yes;
- 	font-size:10.0pt;
- 	mso-ansi-font-size:10.0pt;
- 	mso-bidi-font-size:10.0pt;}
  @page Section1
! 	{size:8.5in 11.0in;
! 	margin:1.0in 1.25in 1.0in 1.25in;
! 	mso-header-margin:.5in;
! 	mso-footer-margin:.5in;
  	mso-paper-source:0;}
  div.Section1
  	{page:Section1;}
   /* List Definitions */
   @list l0
! 	{mso-list-id:558320498;
! 	mso-list-template-ids:-1221952136;}
  @list l0:level1
  	{mso-level-number-format:bullet;
  	mso-level-text:\F0B7;
! 	mso-level-tab-stop:.5in;
  	mso-level-number-position:left;
! 	text-indent:-.25in;
  	mso-ansi-font-size:10.0pt;
  	font-family:Symbol;}
  @list l1
--- 1195,1297 ----
  	mso-bidi-font-family:"Times New Roman";}
  p.listcontents, li.listcontents, div.listcontents
  	{mso-style-name:listcontents;
! 	margin-top:7.2pt;
! 	margin-right:0pt;
! 	margin-bottom:7.2pt;
  	margin-left:28.35pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.listheading, li.listheading, div.listheading
  	{mso-style-name:listheading;
  	margin-top:4.3pt;
! 	margin-right:0pt;
  	margin-bottom:4.3pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.header5, li.header5, div.header5
  	{mso-style-name:header5;
! 	margin-top:7.2pt;
! 	margin-right:0pt;
! 	margin-bottom:7.2pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.heading3, li.heading3, div.heading3
  	{mso-style-name:heading3;
! 	margin-top:7.2pt;
! 	margin-right:0pt;
! 	margin-bottom:7.2pt;
! 	margin-left:0pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:Thorndale;
  	mso-fareast-font-family:"MS Mincho";
  	mso-bidi-font-family:"Times New Roman";}
  p.default, li.default, div.default
  	{mso-style-name:default;
! 	margin:0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	text-autospace:none;
  	font-size:12.0pt;
! 	font-family:Arial;
  	mso-fareast-font-family:"MS Mincho";
  	color:black;}
  span.bullets
  	{mso-style-name:bullets;
  	font-family:StarSymbol;
  	mso-ascii-font-family:StarSymbol;
  	mso-hansi-font-family:StarSymbol;}
  span.headingchar
  	{mso-style-name:headingchar;
! 	font-family:Albany;
  	mso-ascii-font-family:Albany;
  	mso-hansi-font-family:Albany;}
  span.heading3char0
  	{mso-style-name:heading3char;
! 	font-family:Albany;
  	mso-ascii-font-family:Albany;
  	mso-hansi-font-family:Albany;
  	font-weight:bold;}
  span.heading4char0
  	{mso-style-name:heading4char;
! 	font-family:"Andale Sans UI";
  	mso-ascii-font-family:"Andale Sans UI";
  	mso-hansi-font-family:"Andale Sans UI";
  	font-weight:bold;}
  span.bodytextchar0
  	{mso-style-name:bodytextchar;
! 	font-family:Thorndale;
  	mso-ascii-font-family:Thorndale;
  	mso-hansi-font-family:Thorndale;}
  @page Section1
! 	{size:612.0pt 792.0pt;
! 	margin:72.0pt 90.0pt 72.0pt 90.0pt;
! 	mso-header-margin:36.0pt;
! 	mso-footer-margin:36.0pt;
  	mso-paper-source:0;}
  div.Section1
  	{page:Section1;}
   /* List Definitions */
   @list l0
! 	{mso-list-id:997148670;
! 	mso-list-template-ids:1538407134;}
  @list l0:level1
  	{mso-level-number-format:bullet;
  	mso-level-text:\F0B7;
! 	mso-level-tab-stop:36.0pt;
  	mso-level-number-position:left;
! 	text-indent:-18.0pt;
  	mso-ansi-font-size:10.0pt;
  	font-family:Symbol;}
  @list l1
***************
*** 1208,1254 ****
  @list l1:level1
  	{mso-level-number-format:bullet;
  	mso-level-text:\F0B7;
! 	mso-level-tab-stop:.5in;
  	mso-level-number-position:left;
! 	text-indent:-.25in;
  	mso-ansi-font-size:10.0pt;
  	font-family:Symbol;}
  @list l1:level2
! 	{mso-level-tab-stop:1.0in;
  	mso-level-number-position:left;
! 	text-indent:-.25in;}
  @list l1:level3
! 	{mso-level-tab-stop:1.5in;
  	mso-level-number-position:left;
! 	text-indent:-.25in;}
  @list l1:level4
! 	{mso-level-tab-stop:2.0in;
  	mso-level-number-position:left;
! 	text-indent:-.25in;}
  @list l1:level5
! 	{mso-level-tab-stop:2.5in;
  	mso-level-number-position:left;
! 	text-indent:-.25in;}
  @list l1:level6
! 	{mso-level-tab-stop:3.0in;
  	mso-level-number-position:left;
! 	text-indent:-.25in;}
  @list l1:level7
! 	{mso-level-tab-stop:3.5in;
  	mso-level-number-position:left;
! 	text-indent:-.25in;}
  @list l1:level8
! 	{mso-level-tab-stop:4.0in;
  	mso-level-number-position:left;
! 	text-indent:-.25in;}
  @list l1:level9
! 	{mso-level-tab-stop:4.5in;
  	mso-level-number-position:left;
! 	text-indent:-.25in;}
  ol
! 	{margin-bottom:0in;}
  ul
! 	{margin-bottom:0in;}
  -->
  </style>
  <!--[if gte mso 10]>
--- 1300,1346 ----
  @list l1:level1
  	{mso-level-number-format:bullet;
  	mso-level-text:\F0B7;
! 	mso-level-tab-stop:36.0pt;
  	mso-level-number-position:left;
! 	text-indent:-18.0pt;
  	mso-ansi-font-size:10.0pt;
  	font-family:Symbol;}
  @list l1:level2
! 	{mso-level-tab-stop:72.0pt;
  	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
  @list l1:level3
! 	{mso-level-tab-stop:108.0pt;
  	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
  @list l1:level4
! 	{mso-level-tab-stop:144.0pt;
  	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
  @list l1:level5
! 	{mso-level-tab-stop:180.0pt;
  	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
  @list l1:level6
! 	{mso-level-tab-stop:216.0pt;
  	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
  @list l1:level7
! 	{mso-level-tab-stop:252.0pt;
  	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
  @list l1:level8
! 	{mso-level-tab-stop:288.0pt;
  	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
  @list l1:level9
! 	{mso-level-tab-stop:324.0pt;
  	mso-level-number-position:left;
! 	text-indent:-18.0pt;}
  ol
! 	{margin-bottom:0pt;}
  ul
! 	{margin-bottom:0pt;}
  -->
  </style>
  <!--[if gte mso 10]>
***************
*** 1259,1288 ****
  	mso-tstyle-rowband-size:0;
  	mso-tstyle-colband-size:0;
  	mso-style-noshow:yes;
- 	mso-style-priority:99;
- 	mso-style-qformat:yes;
  	mso-style-parent:"";
! 	mso-padding-alt:0in 5.4pt 0in 5.4pt;
! 	mso-para-margin:0in;
  	mso-para-margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:10.0pt;
! 	font-family:"Times New Roman","serif";}
  </style>
! <![endif]--><!--[if gte mso 9]><xml>
!  <o:shapedefaults v:ext="edit" spidmax="2050"/>
  </xml><![endif]--><!--[if gte mso 9]><xml>
   <o:shapelayout v:ext="edit">
    <o:idmap v:ext="edit" data="1"/>
   </o:shapelayout></xml><![endif]-->
  </head>
  
! <body lang=EN-US link=navy vlink=maroon style='tab-interval:.5in;line-break:
  strict'>
  
  <div class=Section1>
  
! <p class=MsoTitle>OpenAFS for Windows 1.5.39<br>
  Release Notes</p>
  
  <p class=MsoBodyText>The Andrew File System (AFS) is a location-independent
--- 1351,1386 ----
  	mso-tstyle-rowband-size:0;
  	mso-tstyle-colband-size:0;
  	mso-style-noshow:yes;
  	mso-style-parent:"";
! 	mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
! 	mso-para-margin:0pt;
  	mso-para-margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:10.0pt;
! 	font-family:"Times New Roman";
! 	mso-ansi-language:#0400;
! 	mso-fareast-language:#0400;
! 	mso-bidi-language:#0400;}
  </style>
! <![endif]-->
! <link rel=dataStoreItem href="relnotes_files/item0008.xml"
! target="relnotes_files/props0009.xml">
! <link rel=themeData href="relnotes_files/themedata.thmx">
! <link rel=colorSchemeMapping href="relnotes_files/colorschememapping.xml">
! <!--[if gte mso 9]><xml>
!  <o:shapedefaults v:ext="edit" spidmax="5122"/>
  </xml><![endif]--><!--[if gte mso 9]><xml>
   <o:shapelayout v:ext="edit">
    <o:idmap v:ext="edit" data="1"/>
   </o:shapelayout></xml><![endif]-->
  </head>
  
! <body lang=EN-US link=navy vlink=maroon style='tab-interval:36.0pt;line-break:
  strict'>
  
  <div class=Section1>
  
! <p class=MsoTitle>OpenAFS for Windows 1.5.50 (with Unicode Support)<br>
  Release Notes</p>
  
  <p class=MsoBodyText>The Andrew File System (AFS) is a location-independent
***************
*** 1294,1318 ****
  authentication is managed by a much larger organization.&nbsp; AFS clients and
  servers take advantage of Kerberos cross realm authentication to enable
  authenticated access by entities located outside the local realm.&nbsp;
! Authorization is enforced by the use of directory level access control lists which
! can consist of individual or group identities.&nbsp; </p>
  
! <p class=MsoBodyText>The AFS volume is a tree of files and
! sub-directories.&nbsp; AFS volumes are created by administrators and are joined
! to an AFS cell via the use of a mount point.&nbsp;&nbsp; Once a volume is
! created, users can create files and directories as well as mount points and
! symlinks within the volume without regard for the physical location of the
! volume.&nbsp; Administrators can move the volume to another server as necessary
! without the need to notify users.&nbsp;&nbsp; In fact, the volume move can occur
! while files in the volume are in use.&nbsp; </p>
! 
! <p class=MsoBodyText>AFS volumes can be replicated to read-only
! copies.&nbsp;&nbsp; When accessing files from a read-only replica, clients will
! read all of the data from a single replica.&nbsp;&nbsp; If that replica becomes
! unavailable, the clients will failover to any replica that is reachable.&nbsp;
! Users of the data are unaware of where the replicas are stored or which one is
! being accessed.&nbsp;&nbsp; The contents of the replicas can be updated at any
! time by <i>releasing</i> the current contents of the source volume.</p>
  
  <p class=MsoBodyText>OpenAFS for Windows (OAFW) provides AFS client access
  Microsoft Windows operating systems.&nbsp; It strives to maintain transparency
--- 1392,1416 ----
  authentication is managed by a much larger organization.&nbsp; AFS clients and
  servers take advantage of Kerberos cross realm authentication to enable
  authenticated access by entities located outside the local realm.&nbsp;
! Authorization is enforced by the use of directory level access control lists
! which can consist of individual or group identities.&nbsp; </p>
  
! <p class=MsoBodyText>The AFS volume is a tree of files and sub-directories.&nbsp;
! AFS volumes are created by administrators and are joined to an AFS cell via the
! use of a mount point.&nbsp;&nbsp; Once a volume is created, users can create
! files and directories as well as mount points and symlinks within the volume
! without regard for the physical location of the volume.&nbsp; Administrators
! can move the volume to another server as necessary without the need to notify
! users.&nbsp;&nbsp; In fact, the volume move can occur while files in the volume
! are in use.&nbsp; </p>
! 
! <p class=MsoBodyText>AFS volumes can be replicated to read-only copies.&nbsp;&nbsp;
! When accessing files from a read-only replica, clients will read all of the
! data from a single replica.&nbsp;&nbsp; If that replica becomes unavailable,
! the clients will failover to any replica that is reachable.&nbsp; Users of the
! data are unaware of where the replicas are stored or which one is being
! accessed.&nbsp;&nbsp; The contents of the replicas can be updated at any time
! by <i>releasing</i> the current contents of the source volume.</p>
  
  <p class=MsoBodyText>OpenAFS for Windows (OAFW) provides AFS client access
  Microsoft Windows operating systems.&nbsp; It strives to maintain transparency
***************
*** 1323,1330 ****
  cells.&nbsp;&nbsp; Although OAFW is implemented as a locally installed SMB to
  AFS gateway, OAFW maintains the portability of file paths by its use of the <a
  href="file:///\\AFS"><span class=Heading1Char><span style='font-size:14.0pt;
! text-decoration:none;text-underline:none'>\\AFS</span></span></a> UNC server
! name.</p>
  
  <p class=MsoBodyText>OpenAFS is the product of an open source development
  effort begun on October 31 2000.&nbsp; OpenAFS is maintained and developed by a
--- 1421,1428 ----
  cells.&nbsp;&nbsp; Although OAFW is implemented as a locally installed SMB to
  AFS gateway, OAFW maintains the portability of file paths by its use of the <a
  href="file:///\\AFS"><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho";text-decoration:none;text-underline:none'>\\AFS</span></span></a>
! UNC server name.</p>
  
  <p class=MsoBodyText>OpenAFS is the product of an open source development
  effort begun on October 31 2000.&nbsp; OpenAFS is maintained and developed by a
***************
*** 1332,1410 ****
  use OpenAFS as part of your computing infrastructure please contribute to its
  continued growth.</p>
  
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt'><a
! href="#_1._Installer_Options"><span style='mso-bookmark:_Toc193871617'><span
! style='mso-bookmark:_Toc193871372'><span style='color:#365F91;mso-themecolor:
! accent1;mso-themeshade:191;text-decoration:none;text-underline:none'>1.
! Installer Options</span></span></span><span style='mso-bookmark:_Toc193871372'></span><span
! style='mso-bookmark:_Toc193871617'></span><span style='color:windowtext;
! display:none;mso-hide:all;text-decoration:none;text-underline:none'>. 1</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871372"></a><a name="_Toc193871617"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt'><a
! href="#_2._System_Requirements"><span style='mso-bookmark:_Toc193871618'><span
! style='mso-bookmark:_Toc193871373'><span style='color:#365F91;mso-themecolor:
! accent1;mso-themeshade:191;text-decoration:none;text-underline:none'>2. System
! Requirements</span></span></span><span style='mso-bookmark:_Toc193871373'></span><span
! style='mso-bookmark:_Toc193871618'></span><span style='color:windowtext;
! display:none;mso-hide:all;text-decoration:none;text-underline:none'>. 2</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871373"></a><a name="_Toc193871618"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt'><a
! href="#_3._Operational_Notes"><span style='mso-bookmark:_Toc193871619'><span
! style='mso-bookmark:_Toc193871374'><span style='color:#365F91;mso-themecolor:
! accent1;mso-themeshade:191;text-decoration:none;text-underline:none'>3.
! Operational Notes</span></span></span><span style='mso-bookmark:_Toc193871374'></span><span
! style='mso-bookmark:_Toc193871619'></span><span style='color:windowtext;
! display:none;mso-hide:all;text-decoration:none;text-underline:none'>. 2</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871374"></a><a name="_Toc193871619"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt'><a
! href="#_4._How_to"><span style='mso-bookmark:_Toc193871620'><span
! style='mso-bookmark:_Toc193871375'><span style='color:#365F91;mso-themecolor:
! accent1;mso-themeshade:191;text-decoration:none;text-underline:none'>4. How to
! Debug Problems with OpenAFS for Windows</span></span></span><span
! style='mso-bookmark:_Toc193871375'></span><span style='mso-bookmark:_Toc193871620'></span><span
! style='color:windowtext;display:none;mso-hide:all;text-decoration:none;
! text-underline:none'> 11</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871375"></a><a name="_Toc193871620"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt'><a
! href="#_Toc139993143"><span style='mso-bookmark:_Toc193871621'><span
! style='mso-bookmark:_Toc193871376'><span style='color:#365F91;mso-themecolor:
! accent1;mso-themeshade:191;text-decoration:none;text-underline:none'>5.
! Reporting Bugs</span></span></span><span style='mso-bookmark:_Toc193871376'></span><span
! style='mso-bookmark:_Toc193871621'></span><span style='color:windowtext;
! display:none;mso-hide:all;text-decoration:none;text-underline:none'> 13</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871376"></a><a name="_Toc193871621"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt'><a
! href="#_6._How_to"><span style='mso-bookmark:_Toc193871622'><span
! style='mso-bookmark:_Toc193871377'><span style='color:#365F91;mso-themecolor:
! accent1;mso-themeshade:191;text-decoration:none;text-underline:none'>6. How to
! Contribute to the Development of OpenAFS for Windows</span></span></span><span
! style='mso-bookmark:_Toc193871377'></span><span style='mso-bookmark:_Toc193871622'></span><span
! style='color:windowtext;display:none;mso-hide:all;text-decoration:none;
! text-underline:none'>. 14</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871377"></a><a name="_Toc193871622"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt'><a
! href="#_7._MSI_Deployment"><span style='mso-bookmark:_Toc193871623'><span
! style='mso-bookmark:_Toc193871378'><span style='color:#365F91;mso-themecolor:
! accent1;mso-themeshade:191;text-decoration:none;text-underline:none'>7. MSI
! Deployment Guide</span></span></span><span style='mso-bookmark:_Toc193871378'></span><span
! style='mso-bookmark:_Toc193871623'></span><span style='color:windowtext;
! display:none;mso-hide:all;text-decoration:none;text-underline:none'>. 15</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871378"></a><a name="_Toc193871623"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt'><a
! href="#_Appendix_A:_Registry"><span style='mso-bookmark:_Toc193871624'><span
! style='mso-bookmark:_Toc193871379'><span style='color:#365F91;mso-themecolor:
! accent1;mso-themeshade:191;text-decoration:none;text-underline:none'>Appendix
! A: Registry Values</span></span></span><span style='mso-bookmark:_Toc193871379'></span><span
! style='mso-bookmark:_Toc193871624'></span><span style='color:windowtext;
! display:none;mso-hide:all;text-decoration:none;text-underline:none'>. 26</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871379"></a><a name="_Toc193871624"></a><![endif]></span></span></p>
  
  <h1><a name="_Toc193871625"></a><a name="_Toc193871380"></a><a
  name="_Toc191662062"></a><a name="_Toc152605032"></a><a name="_Toc115416098"></a><a
--- 1430,1554 ----
  use OpenAFS as part of your computing infrastructure please contribute to its
  continued growth.</p>
  
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho"'><a href="#_1._Installer_Options"><span
! style='mso-fareast-font-family:"Times New Roman";color:#365F91;text-decoration:
! none;text-underline:none'><span style='mso-themecolor:
! accent1;mso-themeshade:191'>1.
! Installer Opti</span><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>o</span></span><span
! style='mso-bookmark:_Toc193871372'><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>n<span
! style='mso-bookmark:_Toc193871617'>s</span></span></span><span
! style='mso-bookmark:_Toc193871617'></span><span style='mso-bookmark:_Toc193871372'></span><span
! style='mso-fareast-font-family:"Times New Roman";color:windowtext;display:none;
! mso-hide:all;text-decoration:none;text-underline:none'>. 1</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871617"></a><a name="_Toc193871372"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho"'><a href="#_2._System_Requirements"><span
! style='mso-fareast-font-family:"Times New Roman";color:#365F91;text-decoration:
! none;text-underline:none'><span style='mso-themecolor:
! accent1;mso-themeshade:191'>2.
! System Requireme</span><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>n</span></span><span
! style='mso-bookmark:_Toc193871373'><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>t<span
! style='mso-bookmark:_Toc193871618'>s</span></span></span><span
! style='mso-bookmark:_Toc193871618'></span><span style='mso-bookmark:_Toc193871373'></span><span
! style='mso-fareast-font-family:"Times New Roman";color:windowtext;display:none;
! mso-hide:all;text-decoration:none;text-underline:none'>. 2</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871618"></a><a name="_Toc193871373"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho"'><a href="#_3._Operational_Notes"><span
! style='mso-fareast-font-family:"Times New Roman";color:#365F91;text-decoration:
! none;text-underline:none'><span style='mso-themecolor:
! accent1;mso-themeshade:191'>3.
! Operational No</span><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>t</span></span><span
! style='mso-bookmark:_Toc193871374'><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>e<span
! style='mso-bookmark:_Toc193871619'>s</span></span></span><span
! style='mso-bookmark:_Toc193871619'></span><span style='mso-bookmark:_Toc193871374'></span><span
! style='mso-fareast-font-family:"Times New Roman";color:windowtext;display:none;
! mso-hide:all;text-decoration:none;text-underline:none'>. 2</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871619"></a><a name="_Toc193871374"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho"'><a href="#_4._How_to"><span
! style='mso-fareast-font-family:"Times New Roman";color:#365F91;text-decoration:
! none;text-underline:none'><span style='mso-themecolor:
! accent1;mso-themeshade:191'>4.
! How to Debug Problems with OpenAFS for Wind</span><span style='mso-fareast-font-family:
! "Times New Roman";color:#365F91;text-decoration:none;text-underline:none'>o</span></span><span
! style='mso-bookmark:_Toc193871375'><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>w<span
! style='mso-bookmark:_Toc193871620'>s</span></span></span><span
! style='mso-bookmark:_Toc193871620'></span><span style='mso-bookmark:_Toc193871375'></span><span
! style='mso-fareast-font-family:"Times New Roman";color:windowtext;display:none;
! mso-hide:all;text-decoration:none;text-underline:none'> 11</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871620"></a><a name="_Toc193871375"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho"'><a href="#_Toc139993143"><span
! style='mso-fareast-font-family:"Times New Roman";color:#365F91;text-decoration:
! none;text-underline:none'><span style='mso-themecolor:
! accent1;mso-themeshade:191'>5.
! Reporting B</span><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>u</span></span><span
! style='mso-bookmark:_Toc193871376'><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>g<span
! style='mso-bookmark:_Toc193871621'>s</span></span></span><span
! style='mso-bookmark:_Toc193871621'></span><span style='mso-bookmark:_Toc193871376'></span><span
! style='mso-fareast-font-family:"Times New Roman";color:windowtext;display:none;
! mso-hide:all;text-decoration:none;text-underline:none'> 13</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871621"></a><a name="_Toc193871376"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho"'><a href="#_6._How_to"><span
! style='mso-fareast-font-family:"Times New Roman";color:#365F91;text-decoration:
! none;text-underline:none'><span style='mso-themecolor:
! accent1;mso-themeshade:191'>6.
! How to Contribute to the Development of OpenAFS for Wind</span><span
! style='mso-fareast-font-family:"Times New Roman";color:#365F91;text-decoration:
! none;text-underline:none'>o</span></span><span style='mso-bookmark:_Toc193871377'><span
! style='mso-fareast-font-family:"Times New Roman";color:#365F91;text-decoration:
! none;text-underline:none'>w<span style='mso-bookmark:_Toc193871622'>s</span></span></span><span
! style='mso-bookmark:_Toc193871622'></span><span style='mso-bookmark:_Toc193871377'></span><span
! style='mso-fareast-font-family:"Times New Roman";color:windowtext;display:none;
! mso-hide:all;text-decoration:none;text-underline:none'>. 14</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871622"></a><a name="_Toc193871377"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho"'><a href="#_7._MSI_Deployment"><span
! style='mso-fareast-font-family:"Times New Roman";color:#365F91;text-decoration:
! none;text-underline:none'><span style='mso-themecolor:
! accent1;mso-themeshade:191'>7.
! MSI Deployment Gu</span><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>i</span></span><span
! style='mso-bookmark:_Toc193871378'><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>d<span
! style='mso-bookmark:_Toc193871623'>e</span></span></span><span
! style='mso-bookmark:_Toc193871623'></span><span style='mso-bookmark:_Toc193871378'></span><span
! style='mso-fareast-font-family:"Times New Roman";color:windowtext;display:none;
! mso-hide:all;text-decoration:none;text-underline:none'>. 15</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871623"></a><a name="_Toc193871378"></a><![endif]></span></span></p>
! 
! <p class=MsoToc1><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho"'><a href="#_Appendix_A:_Registry"><span
! style='mso-fareast-font-family:"Times New Roman";color:#365F91;text-decoration:
! none;text-underline:none'><span style='mso-themecolor:
! accent1;mso-themeshade:191'>Appendix
! A: Registry Val</span><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>u</span></span><span
! style='mso-bookmark:_Toc193871379'><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'>e<span
! style='mso-bookmark:_Toc193871624'>s</span></span></span><span
! style='mso-bookmark:_Toc193871624'></span><span style='mso-bookmark:_Toc193871379'></span><span
! style='mso-fareast-font-family:"Times New Roman";color:windowtext;display:none;
! mso-hide:all;text-decoration:none;text-underline:none'>. 26</span></a><![if !supportNestedAnchors]><a
! name="_Toc193871624"></a><a name="_Toc193871379"></a><![endif]></span></span></p>
  
  <h1><a name="_Toc193871625"></a><a name="_Toc193871380"></a><a
  name="_Toc191662062"></a><a name="_Toc152605032"></a><a name="_Toc115416098"></a><a
***************
*** 1412,1436 ****
  name="_Toc115417037"></a><a name="_1._Installer_Options"></a><span
  style='mso-bookmark:_Toc193871625'><span style='mso-bookmark:_Toc193871380'><span
  style='mso-bookmark:_Toc191662062'><span style='mso-bookmark:_Toc152605032'><span
! style='mso-bookmark:_Toc115416098'><span style='mso-fareast-font-family:"Times New Roman"'>1.
! Installer Options</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h1>
  
  <p class=MsoNormal>It can be installed either as a new installation or an
  upgrade from previous versions of OpenAFS for Windows or IBM AFS for
  Windows.&nbsp; Installers are provided in two forms:</p>
  
! <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in'><span
! style='font-size:9.0pt'>1.</span><span style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>an executable (.exe) that is built using the Nullsoft Scriptable
  Installation System, or</p>
  
! <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in'><span
! style='font-size:9.0pt'>2.</span><span style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>a Windows Installer package (.msi) that is built using WiX and can be
  customized for organizations via the use of MSI Transforms (see <a
  href="#_MSI_Deployment_Guide"><span class=Heading1Char><span style='font-size:
! 14.0pt;text-decoration:none;text-underline:none'>MSI Deployment Guide</span></span></a>)</p>
  
  <h1><a name="_Toc193871626"></a><a name="_Toc193871381"></a><a
  name="_Toc191662063"></a><a name="_Toc152605033"></a><a name="_Toc115416099"></a><a
--- 1556,1579 ----
  name="_Toc115417037"></a><a name="_1._Installer_Options"></a><span
  style='mso-bookmark:_Toc193871625'><span style='mso-bookmark:_Toc193871380'><span
  style='mso-bookmark:_Toc191662062'><span style='mso-bookmark:_Toc152605032'><span
! style='mso-bookmark:_Toc115416098'>1. Installer Options</span></span></span></span></span></h1>
  
  <p class=MsoNormal>It can be installed either as a new installation or an
  upgrade from previous versions of OpenAFS for Windows or IBM AFS for
  Windows.&nbsp; Installers are provided in two forms:</p>
  
! <p class=MsoNormal style='margin-left:18.0pt;text-indent:-18.0pt'><span
! style='font-size:9.0pt'>1.</span><span style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>an executable (.exe) that is built using the Nullsoft Scriptable
  Installation System, or</p>
  
! <p class=MsoNormal style='margin-left:18.0pt;text-indent:-18.0pt'><span
! style='font-size:9.0pt'>2.</span><span style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>a Windows Installer package (.msi) that is built using WiX and can be
  customized for organizations via the use of MSI Transforms (see <a
  href="#_MSI_Deployment_Guide"><span class=Heading1Char><span style='font-size:
! 14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:none;text-underline:
! none'>MSI Deployment Guide</span></span></a>)</p>
  
  <h1><a name="_Toc193871626"></a><a name="_Toc193871381"></a><a
  name="_Toc191662063"></a><a name="_Toc152605033"></a><a name="_Toc115416099"></a><a
***************
*** 1438,1499 ****
  name="_Toc115417038"></a><a name="_2._System_Requirements"></a><span
  style='mso-bookmark:_Toc193871626'><span style='mso-bookmark:_Toc193871381'><span
  style='mso-bookmark:_Toc191662063'><span style='mso-bookmark:_Toc152605033'><span
! style='mso-bookmark:_Toc115416099'><span style='mso-fareast-font-family:"Times New Roman"'>2.
! System Requirements</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h1>
  
  <h2><a name="_Toc193871627"></a><a name="_Toc193871382"></a><a
  name="_Toc191662064"></a><a name="_Toc152605034"></a><a name="_Toc115416100"></a><a
  name="_Toc139993084"></a><a name="_Toc126872165"></a><a name="_Toc115417039"></a><span
  style='mso-bookmark:_Toc193871627'><span style='mso-bookmark:_Toc193871382'><span
  style='mso-bookmark:_Toc191662064'><span style='mso-bookmark:_Toc152605034'><span
! style='mso-bookmark:_Toc115416100'><span style='mso-fareast-font-family:"Times New Roman"'>2.1
! Supported Operating Systems</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 2000 Workstation</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 2000 Server </p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows XP Home</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows XP Professional</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows XP 64</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 2003 Server (32-bit and 64-bit Intel)</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 2003 R2 Server (32-bit and 64-bit Intel)</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows <st1:place w:st="on">Vista</st1:place> (32-bit and 64-bit Intel)</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 2008 Server (32-bit and 64-bit Intel)</p>
  
  <h3><a name="_Toc193871628"></a><a name="_Toc193871383"></a><a
--- 1581,1638 ----
  name="_Toc115417038"></a><a name="_2._System_Requirements"></a><span
  style='mso-bookmark:_Toc193871626'><span style='mso-bookmark:_Toc193871381'><span
  style='mso-bookmark:_Toc191662063'><span style='mso-bookmark:_Toc152605033'><span
! style='mso-bookmark:_Toc115416099'>2. System Requirements</span></span></span></span></span></h1>
  
  <h2><a name="_Toc193871627"></a><a name="_Toc193871382"></a><a
  name="_Toc191662064"></a><a name="_Toc152605034"></a><a name="_Toc115416100"></a><a
  name="_Toc139993084"></a><a name="_Toc126872165"></a><a name="_Toc115417039"></a><span
  style='mso-bookmark:_Toc193871627'><span style='mso-bookmark:_Toc193871382'><span
  style='mso-bookmark:_Toc191662064'><span style='mso-bookmark:_Toc152605034'><span
! style='mso-bookmark:_Toc115416100'>2.1 Supported Operating Systems</span></span></span></span></span></h2>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 2000 Workstation</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 2000 Server </p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows XP Home</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows XP Professional</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows XP 64</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 2003 Server (32-bit and 64-bit Intel)</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 2003 R2 Server (32-bit and 64-bit Intel)</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows <st1:place w:st="on">Vista</st1:place> (32-bit and 64-bit Intel)</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 2008 Server (32-bit and 64-bit Intel)</p>
  
  <h3><a name="_Toc193871628"></a><a name="_Toc193871383"></a><a
***************
*** 1501,1533 ****
  name="_Toc139993085"></a><a name="_Toc126872166"></a><span style='mso-bookmark:
  _Toc193871628'><span style='mso-bookmark:_Toc193871383'><span style='mso-bookmark:
  _Toc191662065'><span style='mso-bookmark:_Toc152605035'><span style='mso-bookmark:
! _Toc115416101'><span style='mso-fareast-font-family:"Times New Roman"'>2.1.1
! Unsupported Operating Systems</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 95</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 98</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 98 OSR2</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows ME</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  NT</p>
  
  <p class=MsoNormal>Older releases of OpenAFS are available for download if
--- 1640,1670 ----
  name="_Toc139993085"></a><a name="_Toc126872166"></a><span style='mso-bookmark:
  _Toc193871628'><span style='mso-bookmark:_Toc193871383'><span style='mso-bookmark:
  _Toc191662065'><span style='mso-bookmark:_Toc152605035'><span style='mso-bookmark:
! _Toc115416101'>2.1.1 Unsupported Operating Systems</span></span></span></span></span></h3>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 95</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 98</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows 98 OSR2</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  Windows ME</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Microsoft
  NT</p>
  
  <p class=MsoNormal>Older releases of OpenAFS are available for download if
***************
*** 1540,1574 ****
  name="_Toc139993086"></a><a name="_Toc126872167"></a><a name="_Toc115417040"></a><span
  style='mso-bookmark:_Toc193871629'><span style='mso-bookmark:_Toc193871384'><span
  style='mso-bookmark:_Toc191662066'><span style='mso-bookmark:_Toc152605036'><span
! style='mso-bookmark:_Toc115416102'><span style='mso-fareast-font-family:"Times New Roman"'>2.2
! Disk Space</span></span></span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>Up to 60mb required for the OpenAFS binaries plus 100MB for
! the default AFSCache file.&nbsp;&nbsp; (The size of the AFSCache file may be
! adjusted via the Registry after installation.)</p>
  
  <h2><a name="_Toc193871630"></a><a name="_Toc193871385"></a><a
  name="_Toc191662067"></a><a name="_Toc152605037"></a><a name="_Toc115416103"></a><a
  name="_Toc139993087"></a><a name="_Toc126872168"></a><a name="_Toc115417041"></a><span
  style='mso-bookmark:_Toc193871630'><span style='mso-bookmark:_Toc193871385'><span
  style='mso-bookmark:_Toc191662067'><span style='mso-bookmark:_Toc152605037'><span
! style='mso-bookmark:_Toc115416103'><span style='mso-fareast-font-family:"Times New Roman"'>2.3
! Additional Software</span></span></span></span></span></span><span
! style='mso-bookmark:_Toc193871630'><span style='mso-bookmark:_Toc193871385'><span
! style='mso-bookmark:_Toc191662067'><span style='mso-bookmark:_Toc152605037'><span
! style='mso-fareast-font-family:"Times New Roman"'> Packages</span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal><a href="http://web.mit.edu/kerberos/dist/index.html"><span
  style='mso-bookmark:_Toc193871631'><span style='mso-bookmark:_Toc193871386'><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>MIT Kerberos for Windows</span></span></span></span><span
  style='mso-bookmark:_Toc193871386'></span><span style='mso-bookmark:_Toc193871631'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871386"></a><a name="_Toc193871631"></a><![endif]> 2.6.x or 3.x.x
  if Kerberos v5 authentication support is desired.<span
  style='mso-spacerun:yes'>  </span>The recommended release is version
! 3.2.2.<span style='mso-spacerun:yes'>  </span></p>
  
  <h1><a name="_Toc193871632"></a><a name="_Toc193871387"></a><a
  name="_Toc191662068"></a><a name="_Toc152605038"></a><a name="_Toc115416104"></a><a
--- 1677,1710 ----
  name="_Toc139993086"></a><a name="_Toc126872167"></a><a name="_Toc115417040"></a><span
  style='mso-bookmark:_Toc193871629'><span style='mso-bookmark:_Toc193871384'><span
  style='mso-bookmark:_Toc191662066'><span style='mso-bookmark:_Toc152605036'><span
! style='mso-bookmark:_Toc115416102'>2.2 Disk Space</span></span></span></span></span></h2>
  
  <p class=MsoNormal>Up to 60mb required for the OpenAFS binaries plus 100MB for
! the default AFSCache file.&nbsp;&nbsp; The size of the AFSCache file may be
! adjusted via the Registry after installation.<span style='mso-spacerun:yes'> 
! </span>The maximum cache size for 32-bit Windows is approximately 1.2GB.<span
! style='mso-spacerun:yes'>  </span>On 64-bit Windows there is no practical limit
! on the cache size.</p>
  
  <h2><a name="_Toc193871630"></a><a name="_Toc193871385"></a><a
  name="_Toc191662067"></a><a name="_Toc152605037"></a><a name="_Toc115416103"></a><a
  name="_Toc139993087"></a><a name="_Toc126872168"></a><a name="_Toc115417041"></a><span
  style='mso-bookmark:_Toc193871630'><span style='mso-bookmark:_Toc193871385'><span
  style='mso-bookmark:_Toc191662067'><span style='mso-bookmark:_Toc152605037'><span
! style='mso-bookmark:_Toc115416103'>2.3 Additional Software</span> Packages</span></span></span></span></h2>
  
  <p class=MsoNormal><a href="http://web.mit.edu/kerberos/dist/index.html"><span
  style='mso-bookmark:_Toc193871631'><span style='mso-bookmark:_Toc193871386'><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>MIT Kerberos for Windows</span></span></span></span><span
  style='mso-bookmark:_Toc193871386'></span><span style='mso-bookmark:_Toc193871631'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871386"></a><a name="_Toc193871631"></a><![endif]> 2.6.x or 3.x.x
  if Kerberos v5 authentication support is desired.<span
  style='mso-spacerun:yes'>  </span>The recommended release is version
! 3.2.2.<span style='mso-spacerun:yes'>  </span>For 64-bit Windows installations,
! the 64-bit version of Kerberos for Windows is required.<span
! style='mso-spacerun:yes'>  </span>For 32-bit Windows installations, the 32-bit
! version of Kerberos for Windows is required.</p>
  
  <h1><a name="_Toc193871632"></a><a name="_Toc193871387"></a><a
  name="_Toc191662068"></a><a name="_Toc152605038"></a><a name="_Toc115416104"></a><a
***************
*** 1576,1622 ****
  name="_Toc115417042"></a><a name="_3._Operational_Notes"></a><span
  style='mso-bookmark:_Toc193871632'><span style='mso-bookmark:_Toc193871387'><span
  style='mso-bookmark:_Toc191662068'><span style='mso-bookmark:_Toc152605038'><span
! style='mso-bookmark:_Toc115416104'><span style='mso-fareast-font-family:"Times New Roman"'>3.
! Operational Notes</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h1>
  
! <h2><a name="_Toc193871633"></a><a name="_Toc193871388"></a><a
  name="_Toc191662069"></a><a name="_Toc152605039"></a><a name="_Toc115416105"></a><a
  name="_Toc139993089"></a><a name="_Toc126872170"></a><a name="_Toc115417043"></a><span
! style='mso-bookmark:_Toc193871633'><span style='mso-bookmark:_Toc193871388'><span
! style='mso-bookmark:_Toc191662069'><span style='mso-bookmark:_Toc152605039'><span
! style='mso-bookmark:_Toc115416105'><span style='mso-fareast-font-family:"Times New Roman"'>3.1.
! Requirements for Kerberos v5 Authentication</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The Kerberos v4 infrastructure on which the OpenAFS 1.2
  series is reliant is no longer secure.&nbsp; Cross-realm Kerberos is very
  important in the AFS context and most sites have or are migrating to Kerberos
  v5 environments.&nbsp; The OpenAFS 1.4 series (and later) integrates with <a
  href="http://web.mit.edu/kerberos/"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>MIT Kerberos
! for Windows</span></span></a> 2.6.5 and above to support Kerberos v5
! authentication including automatic renewal of AFS tokens and single sign-on via
! the Microsoft Windows Kerberos Logon Service.<span style='mso-spacerun:yes'>  
! </span></p>
  
  <p class=MsoNormal>The recommended version of <a
  href="http://web.mit.edu/kerberos/"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>MIT Kerberos
! for Windows</span></span></a> is 3.2.2.<span style='mso-spacerun:yes'> 
! </span>KFW 3.2.2 includes Network Identity Manager 1.3.1 which integrates with
! the <a href="#_3.1.3._Network_Identity"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>AFS Provider</span></span></a>
! installed as part of OpenAFS for Windows.<span style='mso-spacerun:yes'> 
! </span></p>
  
  <p class=MsoNormal>When KFW is installed, the OpenAFS for Windows client will
  obtain Kerberos v5 tickets and use them as tokens without modification.&nbsp;
  The OpenAFS client requires that all of the AFS Servers with which it
  communicates support the use of Kerberos v5 tickets as tokens. If Kerberos v5
  based tokens are presented to an AFS server that does not support them, the
! server will be unable to communicate with the client when tokens are present. Kerberos
! v5 based tokens are supported by OpenAFS release 1.2.8 or later.<span
  style='mso-spacerun:yes'>  </span>IBM Transarc servers do not support Kerberos
  v5.</p>
  
--- 1712,1815 ----
  name="_Toc115417042"></a><a name="_3._Operational_Notes"></a><span
  style='mso-bookmark:_Toc193871632'><span style='mso-bookmark:_Toc193871387'><span
  style='mso-bookmark:_Toc191662068'><span style='mso-bookmark:_Toc152605038'><span
! style='mso-bookmark:_Toc115416104'>3. Operational Notes</span></span></span></span></span></h1>
! 
! <h2><a name="_Toc193871633">3.0. Unicode Support</a></h2>
! 
! <p class=MsoNormal><span style='mso-bookmark:_Toc193871633'>Starting with the
! 1.5.50 release of OpenAFS for Windows, each of the AFS Client Service, the AFS
! Explorer Shell Extension, and the command-line tools are Unicode enabled.<span
! style='mso-spacerun:yes'>  </span>No longer is OpenAFS restricted to accessing
! file system objects whose names can be represented in the locale specific OEM
! code page.<span style='mso-spacerun:yes'>  </span>This has significant benefits
! for end users.<span style='mso-spacerun:yes'>  </span>Most importantly it
! permits non-Western languages to now be used for file system object names in
! AFS from Microsoft Windows operating systems.<span style='mso-spacerun:yes'> 
! </span>Now that Unicode names are supported, </span><a
! href="http://en.wikipedia.org/wiki/Roaming_user_profile"><span
! style='mso-bookmark:_Toc193871633'>Roaming User Profiles</span><span
! style='mso-bookmark:_Toc193871633'></span></a><span style='mso-bookmark:_Toc193871633'>
! and </span><a href="http://en.wikipedia.org/wiki/Folder_redirection"><span
! style='mso-bookmark:_Toc193871633'>Folder Redirection</span><span
! style='mso-bookmark:_Toc193871633'></span></a><span style='mso-bookmark:_Toc193871633'>
! will no longer fail when a user attempts to store an object with a name that
! cannot be represented in the OEM code page.<span style='mso-spacerun:yes'> 
! </span></span></p>
! 
! <p class=MsoNormal><span style='mso-bookmark:_Toc193871633'>Unicode names are
! stored in AFS using UTF-8 encoding.<span style='mso-spacerun:yes'>  </span>UTF-8
! is supported as a locale on MacOS X, Linux, Solaris, and most other operating
! systems.<span style='mso-spacerun:yes'>  </span>This permits non-Western object
! names to be exchanged between Microsoft Windows and other operating systems.<span
! style='mso-spacerun:yes'>  </span>The OpenAFS for Windows client also
! implements </span><a href="http://en.wikipedia.org/wiki/Unicode_normalization"><span
! style='mso-bookmark:_Toc193871633'>Unicode Normalization</span><span
! style='mso-bookmark:_Toc193871633'></span></a><span style='mso-bookmark:_Toc193871633'>
! as part of the name lookup algorithm.<span style='mso-spacerun:yes'> 
! </span>This is necessary because Unicode does not provide a unique
! representation for each input string.<span style='mso-spacerun:yes'> 
! </span>The use of normalization permits a file system object name created on
! MacOS X to be matched with the same string entered on Microsoft Windows even
! though the operating system’s choice of representation may be different.</span></p>
! 
! <p class=MsoNormal><span style='mso-bookmark:_Toc193871633'>It is important to
! note that AFS file servers are not character set agnostic.<span
! style='mso-spacerun:yes'>  </span>All file system object names are stored as
! octet strings without any character set tagging.<span
! style='mso-spacerun:yes'>  </span>If a file system object is created using OEM
! Code Page 858 and then interpreted as UTF-8 it is likely that the object name
! will appear to be gibberish.<span style='mso-spacerun:yes'>  </span>OpenAFS for
! Windows goes to great lengths to ensure that the object name is converted to a
! form that will permit the user to rename the object using Unicode.<span
! style='mso-spacerun:yes'>  </span>Accessing UTF-8 names on UNIX systems that
! have the locale set to one of the ISO Latin character sets will result in the
! UTF-8 strings appearing to be gibberish.<span style='mso-spacerun:yes'> 
! </span></span></p>
! 
! <p class=MsoNormal><span style='mso-bookmark:_Toc193871633'>Neither UNIX AFS
! nor Microsoft Windows 2000 systems can perform Unicode Normalization for string
! comparisons.<span style='mso-spacerun:yes'>  </span>Although it is possible to
! store and read Unicode object names, it is possible that a user may not be able
! to open an object by typing the name of the object at the keyboard.<span
! style='mso-spacerun:yes'>  </span>GUI point and click operations should permit
! any object to be accessed.</span></p>
  
! <h2><span style='mso-bookmark:_Toc193871633'><a name="_Toc193871388"></a><a
  name="_Toc191662069"></a><a name="_Toc152605039"></a><a name="_Toc115416105"></a><a
  name="_Toc139993089"></a><a name="_Toc126872170"></a><a name="_Toc115417043"></a><span
! style='mso-bookmark:_Toc193871388'><span style='mso-bookmark:_Toc191662069'><span
! style='mso-bookmark:_Toc152605039'><span style='mso-bookmark:_Toc115416105'>3.1.
! Requirements for Kerberos v5 Authentication</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The Kerberos v4 infrastructure on which the OpenAFS 1.2
  series is reliant is no longer secure.&nbsp; Cross-realm Kerberos is very
  important in the AFS context and most sites have or are migrating to Kerberos
  v5 environments.&nbsp; The OpenAFS 1.4 series (and later) integrates with <a
  href="http://web.mit.edu/kerberos/"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>MIT Kerberos for Windows</span></span></a> 2.6.5 and
! above to support Kerberos v5 authentication including automatic renewal of AFS
! tokens and single sign-on via the Microsoft Windows Kerberos Logon
! Service.<span style='mso-spacerun:yes'>   </span></p>
  
  <p class=MsoNormal>The recommended version of <a
  href="http://web.mit.edu/kerberos/"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>MIT Kerberos for Windows</span></span></a> is
! 3.2.2.<span style='mso-spacerun:yes'>  </span>KFW 3.2.2 includes Network
! Identity Manager 1.3.1 which integrates with the <a
! href="#_3.1.3._Network_Identity"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>AFS Provider</span></span></a> installed as part of
! OpenAFS for Windows.<span style='mso-spacerun:yes'>  </span></p>
  
  <p class=MsoNormal>When KFW is installed, the OpenAFS for Windows client will
  obtain Kerberos v5 tickets and use them as tokens without modification.&nbsp;
  The OpenAFS client requires that all of the AFS Servers with which it
  communicates support the use of Kerberos v5 tickets as tokens. If Kerberos v5
  based tokens are presented to an AFS server that does not support them, the
! server will be unable to communicate with the client when tokens are present.
! Kerberos v5 based tokens are supported by OpenAFS release 1.2.8 or later.<span
  style='mso-spacerun:yes'>  </span>IBM Transarc servers do not support Kerberos
  v5.</p>
  
***************
*** 1625,1633 ****
  name="_Toc139993090"></a><a name="_Toc126872171"></a><span style='mso-bookmark:
  _Toc193871634'><span style='mso-bookmark:_Toc193871389'><span style='mso-bookmark:
  _Toc191662070'><span style='mso-bookmark:_Toc152605040'><span style='mso-bookmark:
! _Toc115416106'><span style='mso-fareast-font-family:"Times New Roman"'>3.1.1.
! Active Directory</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal>Microsoft Windows Active Directory can be used as a Kerberos
  v5 KDC in conjunction with OpenAFS.<span style='mso-spacerun:yes'> 
--- 1818,1824 ----
  name="_Toc139993090"></a><a name="_Toc126872171"></a><span style='mso-bookmark:
  _Toc193871634'><span style='mso-bookmark:_Toc193871389'><span style='mso-bookmark:
  _Toc191662070'><span style='mso-bookmark:_Toc152605040'><span style='mso-bookmark:
! _Toc115416106'>3.1.1. Active Directory</span></span></span></span></span></h3>
  
  <p class=MsoNormal>Microsoft Windows Active Directory can be used as a Kerberos
  v5 KDC in conjunction with OpenAFS.<span style='mso-spacerun:yes'> 
***************
*** 1649,1662 ****
  
  <p class=MsoNormal>Microsoft has documented in <a
  href="http://support.microsoft.com/kb/832572/"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>Knowledge
! Base article 832572</span></span></a> a new NO_AUTH_REQUIRED flag that can be
! set on the account mapped to the AFS service principal.<span
! style='mso-spacerun:yes'>  </span>When this flag is set, the PAC authorization
! data will not be included in the ticket.<span style='mso-spacerun:yes'> 
! </span>Setting this flag is recommended for all accounts that are associated
! with non-Windows services and that do not understand the authorization data
! stored in the <st1:place w:st="on">PAC.</st1:place><span
  style='mso-spacerun:yes'>  </span>This flag cannot be used if AFS service
  tickets are obtained via cross-realm using an Active Directory user principal.</p>
  
--- 1840,1853 ----
  
  <p class=MsoNormal>Microsoft has documented in <a
  href="http://support.microsoft.com/kb/832572/"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>Knowledge Base article 832572</span></span></a> a new
! NO_AUTH_REQUIRED flag that can be set on the account mapped to the AFS service
! principal.<span style='mso-spacerun:yes'>  </span>When this flag is set, the
! PAC authorization data will not be included in the ticket.<span
! style='mso-spacerun:yes'>  </span>Setting this flag is recommended for all
! accounts that are associated with non-Windows services and that do not
! understand the authorization data stored in the <st1:place w:st="on">PAC.</st1:place><span
  style='mso-spacerun:yes'>  </span>This flag cannot be used if AFS service
  tickets are obtained via cross-realm using an Active Directory user principal.</p>
  
***************
*** 1668,1676 ****
  name="_Toc139993091"></a><a name="_Toc126872172"></a><span style='mso-bookmark:
  _Toc193871635'><span style='mso-bookmark:_Toc193871390'><span style='mso-bookmark:
  _Toc191662071'><span style='mso-bookmark:_Toc152605041'><span style='mso-bookmark:
! _Toc115416107'><span style='mso-fareast-font-family:"Times New Roman"'>3.1.2.
! Using the krb524 service</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal>Some organizations have AFS cell names and Kerberos realm
  names which differ by more then just lower and upper case and rely on a
--- 1859,1865 ----
  name="_Toc139993091"></a><a name="_Toc126872172"></a><span style='mso-bookmark:
  _Toc193871635'><span style='mso-bookmark:_Toc193871390'><span style='mso-bookmark:
  _Toc191662071'><span style='mso-bookmark:_Toc152605041'><span style='mso-bookmark:
! _Toc115416107'>3.1.2. Using the krb524 service</span></span></span></span></span></h3>
  
  <p class=MsoNormal>Some organizations have AFS cell names and Kerberos realm
  names which differ by more then just lower and upper case and rely on a
***************
*** 1695,1705 ****
  name and the principal names placed into the ACL’s are not the principal names
  from the Kerberos v5 ticket.&nbsp; To support this transition, OpenAFS for
  Windows 1.4 adds a new registry value, <i><a href="#_Value___:_Use524"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>Use524</span></span></a></i>, to force the use of
! krb524d.&nbsp; However, the availability of this option should only be used by
! individuals until such time as their organizations can provide a more permanent
! solution.</p>
  
  <p class=MsoNormal>Note that the OpenAFS 1.4.x servers permit the use of a
  secondary realm name that can be treated as equivalent to the cell name for
--- 1884,1894 ----
  name and the principal names placed into the ACL’s are not the principal names
  from the Kerberos v5 ticket.&nbsp; To support this transition, OpenAFS for
  Windows 1.4 adds a new registry value, <i><a href="#_Value___:_Use524"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>Use524</span></span></a></i>, to
! force the use of krb524d.&nbsp; However, the availability of this option should
! only be used by individuals until such time as their organizations can provide
! a more permanent solution.</p>
  
  <p class=MsoNormal>Note that the OpenAFS 1.4.x servers permit the use of a
  secondary realm name that can be treated as equivalent to the cell name for
***************
*** 1709,1736 ****
  name="_Toc191662072"></a><a name="_Toc152605042"></a><a
  name="_3.1.3._Network_Identity"></a><span style='mso-bookmark:_Toc193871636'><span
  style='mso-bookmark:_Toc193871391'><span style='mso-bookmark:_Toc191662072'><span
! style='mso-bookmark:_Toc152605042'><span style='mso-fareast-font-family:"Times New Roman"'>3.1.3.
! Network Identity Manager P</span></span></span></span></span><span
! style='mso-bookmark:_Toc193871636'><span style='mso-bookmark:_Toc193871391'><span
! style='mso-bookmark:_Toc191662072'><span style='mso-fareast-font-family:"Times New Roman"'>rovider</span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal>As of release 1.5.9, OpenAFS for Windows includes a Network
  Identity Manager Provider for obtaining AFS tokens.<span
  style='mso-spacerun:yes'>  </span>This plug-in is a contribution from <a
  href="https://www.secure-endpoints.com/"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>Secure
! Endpoints Inc.</span></span></a><span style='mso-spacerun:yes'>  </span>Network
! Identity Manager is a multiple identity credential management tool that ships
! with <a href="http://web.mit.edu/kerberos/"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>MIT Kerberos
! for Windows</span></span></a> version 3.0 and above.<span
! style='mso-spacerun:yes'>  </span>The OpenAFS plug-in requires <a
  href="http://web.mit.edu/kerberos/"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>MIT Kerberos
! for Windows</span></span></a> version 3.1 or above.<span
! style='mso-spacerun:yes'>  </span>Version 3.2.2 is recommended for the best
! user experience.</p>
  
  <p class=MsoNormal align=center style='text-align:center'><span
  style='mso-no-proof:yes'><!--[if gte vml 1]><v:shapetype id="_x0000_t75"
--- 1898,1922 ----
  name="_Toc191662072"></a><a name="_Toc152605042"></a><a
  name="_3.1.3._Network_Identity"></a><span style='mso-bookmark:_Toc193871636'><span
  style='mso-bookmark:_Toc193871391'><span style='mso-bookmark:_Toc191662072'><span
! style='mso-bookmark:_Toc152605042'>3.1.3. Network Identity Manager P</span>rovider</span></span></span></h3>
  
  <p class=MsoNormal>As of release 1.5.9, OpenAFS for Windows includes a Network
  Identity Manager Provider for obtaining AFS tokens.<span
  style='mso-spacerun:yes'>  </span>This plug-in is a contribution from <a
  href="https://www.secure-endpoints.com/"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>Secure Endpoints Inc.</span></span></a><span
! style='mso-spacerun:yes'>  </span>Network Identity Manager is a multiple
! identity credential management tool that ships with <a
  href="http://web.mit.edu/kerberos/"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>MIT Kerberos for Windows</span></span></a> version
! 3.0 and above.<span style='mso-spacerun:yes'>  </span>The OpenAFS plug-in
! requires <a href="http://web.mit.edu/kerberos/"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>MIT Kerberos for Windows</span></span></a> version 3.1
! or above.<span style='mso-spacerun:yes'>  </span>Version 3.2.2 is recommended
! for the best user experience.</p>
  
  <p class=MsoNormal align=center style='text-align:center'><span
  style='mso-no-proof:yes'><!--[if gte vml 1]><v:shapetype id="_x0000_t75"
***************
*** 1753,1759 ****
   </v:formulas>
   <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
   <o:lock v:ext="edit" aspectratio="t"/>
! </v:shapetype><v:shape id="Picture_x0020_1" o:spid="_x0000_i1027" type="#_x0000_t75"
   alt="netidmgr_main" style='width:417pt;height:509.25pt;visibility:visible;
   mso-wrap-style:square'>
   <v:imagedata src="relnotes_files/image001.png" o:title="netidmgr_main"/>
--- 1939,1945 ----
   </v:formulas>
   <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
   <o:lock v:ext="edit" aspectratio="t"/>
! </v:shapetype><v:shape id="Picture_x0020_1" o:spid="_x0000_i1025" type="#_x0000_t75"
   alt="netidmgr_main" style='width:417pt;height:509.25pt;visibility:visible;
   mso-wrap-style:square'>
   <v:imagedata src="relnotes_files/image001.png" o:title="netidmgr_main"/>
***************
*** 1763,1771 ****
  <p class=MsoNormal>The Network Identity Manager replaces the former KFW ticket
  manager, Leash”, and when combined with the OpenAFS Provider, it is intended to
  be used as a replacement for the AFS System Tray Tool (afscreds.exe).<span
! style='mso-spacerun:yes'>  </span>Unlike both Leash and the AFS System Tray Tool,
! Network Identity Manager with the OpenAFS Provider can easily manage AFS tokens
! for multiple cells from one or more Kerberos v5 identities.</p>
  
  <p class=MsoNormal align=center style='text-align:center'><span
  style='mso-no-proof:yes'><!--[if gte vml 1]><v:shape id="Picture_x0020_2"
--- 1949,1957 ----
  <p class=MsoNormal>The Network Identity Manager replaces the former KFW ticket
  manager, Leash”, and when combined with the OpenAFS Provider, it is intended to
  be used as a replacement for the AFS System Tray Tool (afscreds.exe).<span
! style='mso-spacerun:yes'>  </span>Unlike both Leash and the AFS System Tray
! Tool, Network Identity Manager with the OpenAFS Provider can easily manage AFS
! tokens for multiple cells from one or more Kerberos v5 identities.</p>
  
  <p class=MsoNormal align=center style='text-align:center'><span
  style='mso-no-proof:yes'><!--[if gte vml 1]><v:shape id="Picture_x0020_2"
***************
*** 1773,1779 ****
   height:294.75pt;visibility:visible;mso-wrap-style:square'>
   <v:imagedata src="relnotes_files/image003.png" o:title="netidmgr_afs_opt"/>
  </v:shape><![endif]--><![if !vml]><img border=0 width=542 height=393
! src="relnotes_files/image008.jpg" alt="netidmgr_afs_opt" v:shapes="Picture_x0020_2"><![endif]></span></p>
  
  <p class=MsoNormal>The AFS configuration panel for each Kerberos v5 identity is
  used to configure which cells credentials should be obtained for and how they
--- 1959,1965 ----
   height:294.75pt;visibility:visible;mso-wrap-style:square'>
   <v:imagedata src="relnotes_files/image003.png" o:title="netidmgr_afs_opt"/>
  </v:shape><![endif]--><![if !vml]><img border=0 width=542 height=393
! src="relnotes_files/image002.jpg" alt="netidmgr_afs_opt" v:shapes="Picture_x0020_2"><![endif]></span></p>
  
  <p class=MsoNormal>The AFS configuration panel for each Kerberos v5 identity is
  used to configure which cells credentials should be obtained for and how they
***************
*** 1784,1794 ****
  
  <p class=MsoNormal align=center style='text-align:center'><span
  style='mso-no-proof:yes'><!--[if gte vml 1]><v:shape id="Picture_x0020_3"
!  o:spid="_x0000_i1025" type="#_x0000_t75" alt="netidmgr_afs_cfg" style='width:406.5pt;
   height:294.75pt;visibility:visible;mso-wrap-style:square'>
   <v:imagedata src="relnotes_files/image005.png" o:title="netidmgr_afs_cfg"/>
  </v:shape><![endif]--><![if !vml]><img border=0 width=542 height=393
! src="relnotes_files/image009.jpg" alt="netidmgr_afs_cfg" v:shapes="Picture_x0020_3"><![endif]></span></p>
  
  <p class=MsoNormal>The OpenAFS Provider configuration panel can be used to
  check the status of the AFS Client Service and its version.<span
--- 1970,1980 ----
  
  <p class=MsoNormal align=center style='text-align:center'><span
  style='mso-no-proof:yes'><!--[if gte vml 1]><v:shape id="Picture_x0020_3"
!  o:spid="_x0000_i1027" type="#_x0000_t75" alt="netidmgr_afs_cfg" style='width:406.5pt;
   height:294.75pt;visibility:visible;mso-wrap-style:square'>
   <v:imagedata src="relnotes_files/image005.png" o:title="netidmgr_afs_cfg"/>
  </v:shape><![endif]--><![if !vml]><img border=0 width=542 height=393
! src="relnotes_files/image004.jpg" alt="netidmgr_afs_cfg" v:shapes="Picture_x0020_3"><![endif]></span></p>
  
  <p class=MsoNormal>The OpenAFS Provider configuration panel can be used to
  check the status of the AFS Client Service and its version.<span
***************
*** 1802,1822 ****
  name="_Toc139993092"></a><a name="_Toc126872173"></a><a name="_Toc115417044"></a><span
  style='mso-bookmark:_Toc193871637'><span style='mso-bookmark:_Toc193871392'><span
  style='mso-bookmark:_Toc191662073'><span style='mso-bookmark:_Toc152605043'><span
! style='mso-bookmark:_Toc115416108'><span style='mso-fareast-font-family:"Times New Roman"'>3.2.
! Use of the Microsoft Loopback Adapter</span></span></span></span></span></span><span
! style='mso-bookmark:_Toc193871637'><span style='mso-bookmark:_Toc193871392'><span
! style='mso-bookmark:_Toc191662073'><span style='mso-bookmark:_Toc152605043'><span
! style='mso-fareast-font-family:"Times New Roman"'> by the AFS Client Service</span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>By itself the OpenAFS Client Service does not provide robust
  behavior in a plug-n-play network environment.&nbsp; Changes to the number of
  network adapters or their assigned IP addresses will cause the service to
! terminate unexpectedly.&nbsp; To avoid this behavior OpenAFS for Windows
! installs a single instance of the Microsoft Loopback Adapter (MLA) on the
! machine.&nbsp; With the MLA installed, the OpenAFS Client Service will not be
! affected by the configuration changes of other network adapters installed on
! the system.&nbsp; </p>
  
  <p class=MsoNormal>The MLA is installed with a name of &quot;AFS&quot; and a
  pre-assigned IP address in the 10.x.x.x range.&nbsp; The MLA is bound to the
--- 1988,2003 ----
  name="_Toc139993092"></a><a name="_Toc126872173"></a><a name="_Toc115417044"></a><span
  style='mso-bookmark:_Toc193871637'><span style='mso-bookmark:_Toc193871392'><span
  style='mso-bookmark:_Toc191662073'><span style='mso-bookmark:_Toc152605043'><span
! style='mso-bookmark:_Toc115416108'>3.2. Use of the Microsoft Loopback Adapter</span>
! by the AFS Client Service</span></span></span></span></h2>
  
  <p class=MsoNormal>By itself the OpenAFS Client Service does not provide robust
  behavior in a plug-n-play network environment.&nbsp; Changes to the number of
  network adapters or their assigned IP addresses will cause the service to
! terminate unexpectedly.&nbsp; To avoid this behavior OpenAFS for Windows installs
! a single instance of the Microsoft Loopback Adapter (MLA) on the machine.&nbsp;
! With the MLA installed, the OpenAFS Client Service will not be affected by the
! configuration changes of other network adapters installed on the system.&nbsp; </p>
  
  <p class=MsoNormal>The MLA is installed with a name of &quot;AFS&quot; and a
  pre-assigned IP address in the 10.x.x.x range.&nbsp; The MLA is bound to the
***************
*** 1832,1858 ****
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;stop
  the AFS Client Service</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;bind
  the &quot;Client for Microsoft Networks&quot; to the MLA</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;unbind
  &quot;File and Printer Sharing for Microsoft Networks&quot; from the MLA</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;Disable
  and then re-enable the MLA</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;start
  the AFS Client Service</p>
  
  <p class=MsoNormal>When the MLA is not installed the unique NETBIOS name
--- 2013,2039 ----
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;stop
  the AFS Client Service</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;bind
  the &quot;Client for Microsoft Networks&quot; to the MLA</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;unbind
  &quot;File and Printer Sharing for Microsoft Networks&quot; from the MLA</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;Disable
  and then re-enable the MLA</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;start
  the AFS Client Service</p>
  
  <p class=MsoNormal>When the MLA is not installed the unique NETBIOS name
***************
*** 1868,1876 ****
  name="_Toc139993093"></a><a name="_Toc126872174"></a><a name="_Toc115417045"></a><span
  style='mso-bookmark:_Toc193871638'><span style='mso-bookmark:_Toc193871393'><span
  style='mso-bookmark:_Toc191662074'><span style='mso-bookmark:_Toc152605044'><span
! style='mso-bookmark:_Toc115416109'><span style='mso-fareast-font-family:"Times New Roman"'>3.3.
! Using Freelance (Dynamic Root) Mode to Improve Mobility</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>Traditionally, when the OpenAFS Client Service starts it
  must be able to access the &quot;root.afs&quot; volume of the default
--- 2049,2056 ----
  name="_Toc139993093"></a><a name="_Toc126872174"></a><a name="_Toc115417045"></a><span
  style='mso-bookmark:_Toc193871638'><span style='mso-bookmark:_Toc193871393'><span
  style='mso-bookmark:_Toc191662074'><span style='mso-bookmark:_Toc152605044'><span
! style='mso-bookmark:_Toc115416109'>3.3. Using Freelance (Dynamic Root) Mode to
! Improve Mobility</span></span></span></span></span></h2>
  
  <p class=MsoNormal>Traditionally, when the OpenAFS Client Service starts it
  must be able to access the &quot;root.afs&quot; volume of the default
***************
*** 1902,1908 ****
  <p class=preformattedtext style='margin-left:35.45pt'><a
  href="#_Regkey:_[HKLMSOFTWAREOpenAFSClie"><span style='mso-bookmark:_Toc193871639'><span
  style='mso-bookmark:_Toc193871394'><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>HKLM\SOFTWARE\OpenAFS\Client\Freelance</span></span></span></span><span
  style='mso-bookmark:_Toc193871394'></span><span style='mso-bookmark:_Toc193871639'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871394"></a><a name="_Toc193871639"></a><![endif]></p>
  
--- 2082,2089 ----
  <p class=preformattedtext style='margin-left:35.45pt'><a
  href="#_Regkey:_[HKLMSOFTWAREOpenAFSClie"><span style='mso-bookmark:_Toc193871639'><span
  style='mso-bookmark:_Toc193871394'><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>HKLM\SOFTWARE\OpenAFS\Client\Freelance</span></span></span></span><span
  style='mso-bookmark:_Toc193871394'></span><span style='mso-bookmark:_Toc193871639'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871394"></a><a name="_Toc193871639"></a><![endif]></p>
  
***************
*** 1928,1934 ****
  <p class=preformattedtext style='margin-left:35.45pt'>&gt;symlink make
  \\afs\link \\afs\athena.mit.edu\user\j\a\jaltman</p>
  
! <p class=preformattedtext>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;symlink list \\afs\link</p>
  
  <p class=preformattedtext>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '\\afs\link' is a
  symlink to 'athena.mit.edu\user\j\a\jaltman'</p>
--- 2109,2116 ----
  <p class=preformattedtext style='margin-left:35.45pt'>&gt;symlink make
  \\afs\link \\afs\athena.mit.edu\user\j\a\jaltman</p>
  
! <p class=preformattedtext>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;symlink list
! \\afs\link</p>
  
  <p class=preformattedtext>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '\\afs\link' is a
  symlink to 'athena.mit.edu\user\j\a\jaltman'</p>
***************
*** 1940,1946 ****
  <p class=preformattedtext style='margin-left:35.45pt'><a
  href="#_Regkey:_[HKLMSOFTWAREOpenAFSClie_1"><span style='mso-bookmark:_Toc193871640'><span
  style='mso-bookmark:_Toc193871395'><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>HKLM\SOFTWARE\OpenAFS\Client\Freelance\Symlinks</span></span></span></span><span
  style='mso-bookmark:_Toc193871395'></span><span style='mso-bookmark:_Toc193871640'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871395"></a><a name="_Toc193871640"></a><![endif]>&nbsp;</p>
  
--- 2122,2129 ----
  <p class=preformattedtext style='margin-left:35.45pt'><a
  href="#_Regkey:_[HKLMSOFTWAREOpenAFSClie_1"><span style='mso-bookmark:_Toc193871640'><span
  style='mso-bookmark:_Toc193871395'><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>HKLM\SOFTWARE\OpenAFS\Client\Freelance\Symlinks</span></span></span></span><span
  style='mso-bookmark:_Toc193871395'></span><span style='mso-bookmark:_Toc193871640'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871395"></a><a name="_Toc193871640"></a><![endif]>&nbsp;</p>
  
***************
*** 1949,1973 ****
  name="_Toc139993094"></a><a name="_Toc126872175"></a><a name="_Toc115417046"></a><span
  style='mso-bookmark:_Toc193871641'><span style='mso-bookmark:_Toc193871396'><span
  style='mso-bookmark:_Toc191662075'><span style='mso-bookmark:_Toc152605045'><span
! style='mso-bookmark:_Toc115416110'><span style='mso-fareast-font-family:"Times New Roman"'>3.4.
! Locating AFS Volume Database Servers</span></span></span></span></span></span><span
! style='mso-bookmark:_Toc193871641'><span style='mso-bookmark:_Toc193871396'><span
! style='mso-bookmark:_Toc191662075'><span style='mso-bookmark:_Toc152605045'><span
! style='mso-fareast-font-family:"Times New Roman"'> via DNS</span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'> <o:p></o:p></span></h2>
  
  <p class=MsoNormal>The OpenAFS for Windows client will use DNS AFSDB records to
  discover the location of AFS Volume Database servers when entries for the cell
! are not present in the client's CellServDB file (\%PROGRAMFILES%\OpenAFS\Client\CellServDB).</p>
  
  <h2><a name="_Toc193871642"></a><a name="_Toc193871397"></a><a
  name="_Toc191662076"></a><a name="_Toc152605046"></a><a name="_Toc115416111"></a><a
  name="_Toc139993095"></a><a name="_Toc126872176"></a><a name="_Toc115417047"></a><span
  style='mso-bookmark:_Toc193871642'><span style='mso-bookmark:_Toc193871397'><span
  style='mso-bookmark:_Toc191662076'><span style='mso-bookmark:_Toc152605046'><span
! style='mso-bookmark:_Toc115416111'><span style='mso-fareast-font-family:"Times New Roman"'>3.5.
! Obtaining AFS Tokens as a Integrated Part of Windows Logon</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>OpenAFS for Windows installs a WinLogon Network Provider to
  provide Single Sign-On functionality (aka Integrated Logon.)&nbsp; Integrated
--- 2132,2152 ----
  name="_Toc139993094"></a><a name="_Toc126872175"></a><a name="_Toc115417046"></a><span
  style='mso-bookmark:_Toc193871641'><span style='mso-bookmark:_Toc193871396'><span
  style='mso-bookmark:_Toc191662075'><span style='mso-bookmark:_Toc152605045'><span
! style='mso-bookmark:_Toc115416110'>3.4. Locating AFS Volume Database Servers</span>
! via DNS</span></span></span></span> </h2>
  
  <p class=MsoNormal>The OpenAFS for Windows client will use DNS AFSDB records to
  discover the location of AFS Volume Database servers when entries for the cell
! are not present in the client's CellServDB file
! (\%PROGRAMFILES%\OpenAFS\Client\CellServDB).</p>
  
  <h2><a name="_Toc193871642"></a><a name="_Toc193871397"></a><a
  name="_Toc191662076"></a><a name="_Toc152605046"></a><a name="_Toc115416111"></a><a
  name="_Toc139993095"></a><a name="_Toc126872176"></a><a name="_Toc115417047"></a><span
  style='mso-bookmark:_Toc193871642'><span style='mso-bookmark:_Toc193871397'><span
  style='mso-bookmark:_Toc191662076'><span style='mso-bookmark:_Toc152605046'><span
! style='mso-bookmark:_Toc115416111'>3.5. Obtaining AFS Tokens as a Integrated
! Part of Windows Logon</span></span></span></span></span></h2>
  
  <p class=MsoNormal>OpenAFS for Windows installs a WinLogon Network Provider to
  provide Single Sign-On functionality (aka Integrated Logon.)&nbsp; Integrated
***************
*** 1977,1983 ****
  &quot;athena.mit.edu&quot;, then Integrated Logon can be successfully used if
  the windows password matches the password assigned to the Kerberos principal
  &quot;<a href="mailto:jaltman@ATHENA.MIT.EDU"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>jaltman@ATHENA.MIT.EDU</span></span></a>&quot;.&nbsp;
  The realm “ATHENA.MIT.EDU” is obtained by performing a domain name to realm
  mapping on the hostname of one of the cell's Volume Database servers.</p>
  
--- 2156,2163 ----
  &quot;athena.mit.edu&quot;, then Integrated Logon can be successfully used if
  the windows password matches the password assigned to the Kerberos principal
  &quot;<a href="mailto:jaltman@ATHENA.MIT.EDU"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>jaltman@ATHENA.MIT.EDU</span></span></a>&quot;.&nbsp;
  The realm “ATHENA.MIT.EDU” is obtained by performing a domain name to realm
  mapping on the hostname of one of the cell's Volume Database servers.</p>
  
***************
*** 1989,1999 ****
  <p class=MsoNormal>When KFW is configured, Integrated Logon will use it to
  obtain tokens. Use of KFW for Integrated Logon can be disabled via the <a
  href="#_Value:_EnableKFW"><span class=Heading1Char><span style='font-size:14.0pt;
! text-decoration:none;text-underline:none'>EnableKFW</span></span></a> registry
! value.<span style='mso-spacerun:yes'>  </span>Use of the krb524 service can be
! configured via the <a href="#_Value:_Use524"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>Use524</span></span></a>
! registry value.</p>
  
  <p class=MsoNormal>Integrated Logon will not transfer Kerberos v5 tickets into
  the user’s logon session credential cache. KFW 3.1 and above provides that
--- 2169,2180 ----
  <p class=MsoNormal>When KFW is configured, Integrated Logon will use it to
  obtain tokens. Use of KFW for Integrated Logon can be disabled via the <a
  href="#_Value:_EnableKFW"><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho";text-decoration:none;text-underline:none'>EnableKFW</span></span></a>
! registry value.<span style='mso-spacerun:yes'>  </span>Use of the krb524
! service can be configured via the <a href="#_Value:_Use524"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>Use524</span></span></a> registry
! value.</p>
  
  <p class=MsoNormal>Integrated Logon will not transfer Kerberos v5 tickets into
  the user’s logon session credential cache. KFW 3.1 and above provides that
***************
*** 2004,2031 ****
  Kerberos KDC is inaccessible at logon time.</p>
  
  <p class=MsoNormal>Integrated Logon supports the ability to obtain tokens for
! multiple cells.&nbsp; For further information on how to configure this feature read
! about the <a href="#_Value:_TheseCells"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>TheseCells</span></span></a>
! value.</p>
  
! <p class=MsoToc2 style='margin-left:0in;tab-stops:right dotted 431.5pt'>Integrated
  Logon can be configured based upon the domain of the Windows account used to
  login to the machine.<span style='mso-spacerun:yes'>  </span>See <span
! class=Heading1Char><span style='font-size:14.0pt;mso-no-proof:yes'><a
! href="relnotes.htm#_Toc187554205"><span style='color:#365F91;mso-themecolor:
! accent1;mso-themeshade:191;text-decoration:none;text-underline:none'>A.2.1
! Domain specific configuration keys for the Network Provider</span></a>.</span></span><span
! style='mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <h2><a name="_Toc193871643"></a><a name="_Toc193871398"></a><a
  name="_Toc191662077"></a><a name="_Toc152605047"></a><a name="_Toc115416112"></a><a
  name="_Toc139993096"></a><a name="_Toc126872177"></a><a name="_Toc115417048"></a><span
  style='mso-bookmark:_Toc193871643'><span style='mso-bookmark:_Toc193871398'><span
  style='mso-bookmark:_Toc191662077'><span style='mso-bookmark:_Toc152605047'><span
! style='mso-bookmark:_Toc115416112'><span style='mso-fareast-font-family:"Times New Roman"'>3.6.
! AFS System Tray Command Line Options</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal><span style='color:red'>The AFS System Tray Tool
  (afscreds.exe) has been deprecated in favor of Network Identity Manager.<span
--- 2185,2215 ----
  Kerberos KDC is inaccessible at logon time.</p>
  
  <p class=MsoNormal>Integrated Logon supports the ability to obtain tokens for
! multiple cells.&nbsp; For further information on how to configure this feature
! read about the <a href="#_Value:_TheseCells"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>TheseCells</span></span></a> value.</p>
  
! <p class=MsoToc2 style='margin-left:0pt;tab-stops:right dotted 431.5pt'>Integrated
  Logon can be configured based upon the domain of the Windows account used to
  login to the machine.<span style='mso-spacerun:yes'>  </span>See <span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! mso-no-proof:yes'><a href="relnotes.htm#_Toc187554205"><span style='mso-fareast-font-family:
! "Times New Roman";color:#365F91;text-decoration:none;text-underline:none'><span
! style='mso-themecolor:
! accent1;mso-themeshade:191'>A.2.1 Domain specific
! configuration keys for the Network Provi</span><span style='mso-fareast-font-family:
! "Times New Roman";color:#365F91;text-decoration:none;text-underline:none'>d</span></span><span
! style='mso-fareast-font-family:"Times New Roman";color:#365F91;text-decoration:
! none;text-underline:none'>er</span></a>.</span></span><span style='mso-fareast-font-family:
! "Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <h2><a name="_Toc193871643"></a><a name="_Toc193871398"></a><a
  name="_Toc191662077"></a><a name="_Toc152605047"></a><a name="_Toc115416112"></a><a
  name="_Toc139993096"></a><a name="_Toc126872177"></a><a name="_Toc115417048"></a><span
  style='mso-bookmark:_Toc193871643'><span style='mso-bookmark:_Toc193871398'><span
  style='mso-bookmark:_Toc191662077'><span style='mso-bookmark:_Toc152605047'><span
! style='mso-bookmark:_Toc115416112'>3.6. AFS System Tray Command Line Options</span></span></span></span></span></h2>
  
  <p class=MsoNormal><span style='color:red'>The AFS System Tray Tool
  (afscreds.exe) has been deprecated in favor of Network Identity Manager.<span
***************
*** 2077,2095 ****
  no user interface to change this selection after install time although these
  options may be altered via the registry on either per machine or per user
  basis.&nbsp; See <a href="#_Value___:_AfscredsShortcutParams"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>AfscredsShortcutParams</span></span></a> in <a
! href="#_Appendix_A:_Registry_Values"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>Appendix A</span></span></a>.</p>
  
  <h2><a name="_Toc193871644"></a><a name="_Toc193871399"></a><a
  name="_Toc191662078"></a><a name="_Toc152605048"></a><a name="_Toc115416113"></a><a
  name="_Toc139993097"></a><a name="_Toc126872178"></a><a name="_Toc115417049"></a><span
  style='mso-bookmark:_Toc193871644'><span style='mso-bookmark:_Toc193871399'><span
  style='mso-bookmark:_Toc191662078'><span style='mso-bookmark:_Toc152605048'><span
! style='mso-bookmark:_Toc115416113'><span style='mso-fareast-font-family:"Times New Roman"'>3.7.
! The “AFS Client Admins” Authorization Group</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The OpenAFS for Windows client supports a local Windows
  authorization group named &quot;AFS Client Admins&quot;.&nbsp; This group is
--- 2261,2279 ----
  no user interface to change this selection after install time although these
  options may be altered via the registry on either per machine or per user
  basis.&nbsp; See <a href="#_Value___:_AfscredsShortcutParams"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>AfscredsShortcutParams</span></span></a>
! in <a href="#_Appendix_A:_Registry_Values"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>Appendix A</span></span></a>.</p>
  
  <h2><a name="_Toc193871644"></a><a name="_Toc193871399"></a><a
  name="_Toc191662078"></a><a name="_Toc152605048"></a><a name="_Toc115416113"></a><a
  name="_Toc139993097"></a><a name="_Toc126872178"></a><a name="_Toc115417049"></a><span
  style='mso-bookmark:_Toc193871644'><span style='mso-bookmark:_Toc193871399'><span
  style='mso-bookmark:_Toc191662078'><span style='mso-bookmark:_Toc152605048'><span
! style='mso-bookmark:_Toc115416113'>3.7. The “AFS Client Admins” Authorization
! Group</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The OpenAFS for Windows client supports a local Windows
  authorization group named &quot;AFS Client Admins&quot;.&nbsp; This group is
***************
*** 2101,2153 ****
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>checkservers
  with a non-zero timer value</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setcachesize</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>newcell</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sysname
  with a new sysname list</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>exportafs</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setcell</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setserverprefs</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>storebehind</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setcrypt</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cscpolicy</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>trace</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>minidump</p>
  
  <p class=MsoNormal>The creation or removal of mount points and symlinks in the
  Freelance “root.afs” volume are also restricted to members of the “AFS Client
--- 2285,2337 ----
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>checkservers
  with a non-zero timer value</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setcachesize</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>newcell</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sysname
  with a new sysname list</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>exportafs</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setcell</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setserverprefs</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>storebehind</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setcrypt</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cscpolicy</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>trace</p>
  
  <p class=preformattedtext style='margin-left:49.6pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>minidump</p>
  
  <p class=MsoNormal>The creation or removal of mount points and symlinks in the
  Freelance “root.afs” volume are also restricted to members of the “AFS Client
***************
*** 2164,2180 ****
  
  <p class=MsoNormal>Setting the default sysname for a machine should be done via
  the <a href="#_Value_:_SysName"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>registry</span></span></a>
! and not via &quot;fs sysname&quot;.</p>
  
  <h2><a name="_Toc193871645"></a><a name="_Toc193871400"></a><a
  name="_Toc191662079"></a><a name="_Toc152605049"></a><a name="_Toc115416114"></a><a
  name="_Toc139993098"></a><a name="_Toc126872179"></a><a name="_Toc115417050"></a><span
  style='mso-bookmark:_Toc193871645'><span style='mso-bookmark:_Toc193871400'><span
  style='mso-bookmark:_Toc191662079'><span style='mso-bookmark:_Toc152605049'><span
! style='mso-bookmark:_Toc115416114'><span style='mso-fareast-font-family:"Times New Roman"'>3.8.
! OpenAFS support for UNC paths</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'> <o:p></o:p></span></h2>
  
  <p class=MsoNormal>The OpenAFS client supports UNC paths everywhere.&nbsp; UNC
  paths provide a canonical name for resources stored within AFS.&nbsp; UNC paths
--- 2348,2364 ----
  
  <p class=MsoNormal>Setting the default sysname for a machine should be done via
  the <a href="#_Value_:_SysName"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>registry</span></span></a> and not via &quot;fs
! sysname&quot;.</p>
  
  <h2><a name="_Toc193871645"></a><a name="_Toc193871400"></a><a
  name="_Toc191662079"></a><a name="_Toc152605049"></a><a name="_Toc115416114"></a><a
  name="_Toc139993098"></a><a name="_Toc126872179"></a><a name="_Toc115417050"></a><span
  style='mso-bookmark:_Toc193871645'><span style='mso-bookmark:_Toc193871400'><span
  style='mso-bookmark:_Toc191662079'><span style='mso-bookmark:_Toc152605049'><span
! style='mso-bookmark:_Toc115416114'>3.8. OpenAFS support for UNC paths</span></span></span></span></span>
! </h2>
  
  <p class=MsoNormal>The OpenAFS client supports UNC paths everywhere.&nbsp; UNC
  paths provide a canonical name for resources stored within AFS.&nbsp; UNC paths
***************
*** 2189,2217 ****
  OpenAFS to its command shells, 4NT 7.0 and Take Command 7.0.&nbsp; AFS paths
  can be entered in UNIX notation (e.g., <a
  href="file:///\\afs\openafs.org\software"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>/afs/openafs.org/software</span></span></a>),
! space utilization reports the output of the volume status for the specified
! path, and many AFS specific functions and variables have been added to the
! command language.</p>
  
  <p class=MsoNormal>JPSoftware's web site is <span class=Heading1Char><span
! style='font-size:14.0pt'><a href="http://www.jpsoft.com/"><span
! style='color:#365F91;mso-themecolor:accent1;mso-themeshade:191;text-decoration:
! none;text-underline:none'>http://www.jpsoft.com</span></a></span></span>.</p>
  
  <h2><a name="_Toc193871646"></a><a name="_Toc193871401"></a><a
  name="_Toc191662080"></a><a name="_Toc152605050"></a><a name="_Toc115416115"></a><a
  name="_Toc139993099"></a><a name="_Toc126872180"></a><a name="_Toc115417051"></a><span
  style='mso-bookmark:_Toc193871646'><span style='mso-bookmark:_Toc193871401'><span
  style='mso-bookmark:_Toc191662080'><span style='mso-bookmark:_Toc152605050'><span
! style='mso-bookmark:_Toc115416115'><span style='mso-fareast-font-family:"Times New Roman"'>3.9.
! aklog.exe</span></span></span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client ships with its own version of aklog.exe
! which should be used in preference to those obtained by other sources.&nbsp;
! The OpenAFS aklog.exe supports Kerberos v5 as well as the ability to
! auto-generate AFS IDs within foreign PTS databases.</p>
  
  <p class=preformattedtext>Usage: aklog [-d] [[-cell | -c] cell [-k krb_realm]]</p>
  
--- 2373,2404 ----
  OpenAFS to its command shells, 4NT 7.0 and Take Command 7.0.&nbsp; AFS paths
  can be entered in UNIX notation (e.g., <a
  href="file:///\\afs\openafs.org\software"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>/afs/openafs.org/software</span></span></a>), space
! utilization reports the output of the volume status for the specified path, and
! many AFS specific functions and variables have been added to the command
! language.</p>
  
  <p class=MsoNormal>JPSoftware's web site is <span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho"'><a
! href="http://www.jpsoft.com/"><span style='mso-fareast-font-family:"Times New Roman";
! color:#365F91;text-decoration:none;text-underline:none'><span style='mso-themecolor:accent1;
! mso-themeshade:191'>http://www.jpsoft.</span><span style='mso-fareast-font-family:
! "Times New Roman";color:#365F91;text-decoration:none;text-underline:none'>c</span></span><span
! style='mso-fareast-font-family:"Times New Roman";color:#365F91;text-decoration:
! none;text-underline:none'>om</span></a></span></span>.</p>
  
  <h2><a name="_Toc193871646"></a><a name="_Toc193871401"></a><a
  name="_Toc191662080"></a><a name="_Toc152605050"></a><a name="_Toc115416115"></a><a
  name="_Toc139993099"></a><a name="_Toc126872180"></a><a name="_Toc115417051"></a><span
  style='mso-bookmark:_Toc193871646'><span style='mso-bookmark:_Toc193871401'><span
  style='mso-bookmark:_Toc191662080'><span style='mso-bookmark:_Toc152605050'><span
! style='mso-bookmark:_Toc115416115'>3.9. aklog.exe</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client ships with its own version of aklog.exe
! which should be used in preference to those obtained by other sources.&nbsp; The
! OpenAFS aklog.exe supports Kerberos v5 as well as the ability to auto-generate
! AFS IDs within foreign PTS databases.</p>
  
  <p class=preformattedtext>Usage: aklog [-d] [[-cell | -c] cell [-k krb_realm]]</p>
  
***************
*** 2250,2258 ****
  name="_Toc139993100"></a><a name="_Toc126872181"></a><a name="_Toc115417052"></a><span
  style='mso-bookmark:_Toc193871647'><span style='mso-bookmark:_Toc193871402'><span
  style='mso-bookmark:_Toc191662081'><span style='mso-bookmark:_Toc152605051'><span
! style='mso-bookmark:_Toc115416116'><span style='mso-fareast-font-family:"Times New Roman"'>3.10.
! OpenAFS Servers on Windows are Unsupported</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The AFS Server functionality provided as part of the OpenAFS
  install package might work but should be considered highly experimental.&nbsp;
--- 2437,2444 ----
  name="_Toc139993100"></a><a name="_Toc126872181"></a><a name="_Toc115417052"></a><span
  style='mso-bookmark:_Toc193871647'><span style='mso-bookmark:_Toc193871402'><span
  style='mso-bookmark:_Toc191662081'><span style='mso-bookmark:_Toc152605051'><span
! style='mso-bookmark:_Toc115416116'>3.10. OpenAFS Servers on Windows are
! Unsupported</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The AFS Server functionality provided as part of the OpenAFS
  install package might work but should be considered highly experimental.&nbsp;
***************
*** 2260,2273 ****
  lost should not be stored in an OpenAFS Server on Windows.</p>
  
  <p class=MsoNormal>Known issues include lack of support for power management
! and dynamic network configuration.<span style='mso-spacerun:yes'>  </span>Salvager
! is also known to crash.</p>
  
! <h3><a name="_Toc193871648"></a><a name="_Toc193871403"></a><a
! name="_Toc191662082"><span style='mso-bookmark:_Toc193871403'><span
! style='mso-bookmark:_Toc193871648'><span style='mso-fareast-font-family:"Times New Roman"'>3.10.1.
! OpenAFS Server Installation</span></span></span></a><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal>When the OpenAFS Server is installed, the TransarcAFSServer
  service (bosctlsvc.exe) will be installed and configured.<span
--- 2446,2457 ----
  lost should not be stored in an OpenAFS Server on Windows.</p>
  
  <p class=MsoNormal>Known issues include lack of support for power management
! and dynamic network configuration.<span style='mso-spacerun:yes'> 
! </span>Salvager is also known to crash.</p>
  
! <h3><a name="_Toc191662082"></a><a name="_Toc193871403"></a><a
! name="_Toc193871648"><span style='mso-bookmark:_Toc193871403'><span
! style='mso-bookmark:_Toc191662082'>3.10.1. OpenAFS Server Installation</span></span></a></h3>
  
  <p class=MsoNormal>When the OpenAFS Server is installed, the TransarcAFSServer
  service (bosctlsvc.exe) will be installed and configured.<span
***************
*** 2281,2304 ****
  configuration files, and log files are installed under %Program
  Files%\OpenAFS\Server.<span style='mso-spacerun:yes'>   </span><span
  style='color:red'><a href="http://www.openafs.org/no-more-des.html"><span
! class=Heading1Char><span style='font-size:14.0pt;color:red;text-decoration:
! none;text-underline:none'>kaserver has been deprecated and its use is strongly
! discouraged.</span></span></a></span><span style='mso-spacerun:yes'> 
! </span>Instead, Active Directory or some other Kerberos v5 KDC should be used
! in its place.</p>
! 
! <h3><a name="_Toc193871649"></a><a name="_Toc193871404"></a><a
! name="_Toc191662083"><span style='mso-bookmark:_Toc193871404'><span
! style='mso-bookmark:_Toc193871649'><span style='mso-fareast-font-family:"Times New Roman"'>3.10.2.
! Using the AFS Client Service when the Server is installed</span></span></span></a><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal>A few notes on the usage of the AFS Client Service if it is
  going to be used with the OpenAFS AFS Server:</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Freelance
  mode should be disabled when the AFS Client Service is installed on the same
  machine as the AFS Server,.&nbsp; Otherwise, you will be unable to manipulate
  the contents of the root.afs volume for the hosted cell without constructing an
--- 2465,2487 ----
  configuration files, and log files are installed under %Program
  Files%\OpenAFS\Server.<span style='mso-spacerun:yes'>   </span><span
  style='color:red'><a href="http://www.openafs.org/no-more-des.html"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! color:red;text-decoration:none;text-underline:none'>kaserver has been
! deprecated and its use is strongly discouraged.</span></span></a></span><span
! style='mso-spacerun:yes'>  </span>Instead, Active Directory or some other
! Kerberos v5 KDC should be used in its place.</p>
! 
! <h3><a name="_Toc191662083"></a><a name="_Toc193871404"></a><a
! name="_Toc193871649"><span style='mso-bookmark:_Toc193871404'><span
! style='mso-bookmark:_Toc191662083'>3.10.2. Using the AFS Client Service when
! the Server is installed</span></span></a></h3>
  
  <p class=MsoNormal>A few notes on the usage of the AFS Client Service if it is
  going to be used with the OpenAFS AFS Server:</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Freelance
  mode should be disabled when the AFS Client Service is installed on the same
  machine as the AFS Server,.&nbsp; Otherwise, you will be unable to manipulate
  the contents of the root.afs volume for the hosted cell without constructing an
***************
*** 2306,2323 ****
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>The
  AFS Server and related tools only support the built in kaserver (Kerberos
  IV).&nbsp; If kaserver is being used, <a href="http://web.mit.edu/kerberos/"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>MIT Kerberos for Windows</span></span></a> should not be
! installed or must be disabled via the <a href="#_Toc126872361"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>EnableKFW</span></span></a> registry value.</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>The
  AFS Servers are not aware of power management events nor are they aware of
  network configuration changes.<span style='mso-spacerun:yes'>  </span>It is
  strongly advised that the AFS servers be installed only on systems that will
--- 2489,2507 ----
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>The
  AFS Server and related tools only support the built in kaserver (Kerberos
  IV).&nbsp; If kaserver is being used, <a href="http://web.mit.edu/kerberos/"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>MIT Kerberos for Windows</span></span></a>
! should not be installed or must be disabled via the <a href="#_Toc126872361"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>EnableKFW</span></span></a> registry
! value.</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>The
  AFS Servers are not aware of power management events nor are they aware of
  network configuration changes.<span style='mso-spacerun:yes'>  </span>It is
  strongly advised that the AFS servers be installed only on systems that will
***************
*** 2329,2364 ****
  name="_Toc139993101"></a><a name="_Toc126872182"></a><a name="_Toc115417053"></a><span
  style='mso-bookmark:_Toc193871650'><span style='mso-bookmark:_Toc193871405'><span
  style='mso-bookmark:_Toc191662084'><span style='mso-bookmark:_Toc152605052'><span
! style='mso-bookmark:_Toc115416117'><span style='mso-fareast-font-family:"Times New Roman"'>3.11.
! OpenAFS Debugging Symbol files</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
! 
! <p class=MsoNormal>The OpenAFS for Windows installers include Debugging Symbol files
! which should be installed if you are experiencing problems and need to send
! crash reports.&nbsp; This is true for both the release and the debug versions
! of the installers.&nbsp; The difference between the release and debug versions
! are:</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>whether
  or not the binaries were compiled with optimization (release: yes, debug: no)</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>whether
  or not the debug symbols are installed by default (release: no, debug: yes)</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>whether
  or not <i style='mso-bidi-font-style:normal'>fs trace</i> logging is turned on
  by default (release: no, debug: yes)<span style='font-size:9.0pt;font-family:
  Symbol'><o:p></o:p></span></p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>whether
  or not additional debug statements were compiled into the binaries (release:
  no, debug: yes)</p>
  
--- 2513,2546 ----
  name="_Toc139993101"></a><a name="_Toc126872182"></a><a name="_Toc115417053"></a><span
  style='mso-bookmark:_Toc193871650'><span style='mso-bookmark:_Toc193871405'><span
  style='mso-bookmark:_Toc191662084'><span style='mso-bookmark:_Toc152605052'><span
! style='mso-bookmark:_Toc115416117'>3.11. OpenAFS Debugging Symbol files</span></span></span></span></span></h2>
! 
! <p class=MsoNormal>The OpenAFS for Windows installers include Debugging Symbol
! files which should be installed if you are experiencing problems and need to
! send crash reports.&nbsp; This is true for both the release and the debug
! versions of the installers.&nbsp; The difference between the release and debug
! versions are:</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>whether
  or not the binaries were compiled with optimization (release: yes, debug: no)</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>whether
  or not the debug symbols are installed by default (release: no, debug: yes)</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>whether
  or not <i style='mso-bidi-font-style:normal'>fs trace</i> logging is turned on
  by default (release: no, debug: yes)<span style='font-size:9.0pt;font-family:
  Symbol'><o:p></o:p></span></p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>whether
  or not additional debug statements were compiled into the binaries (release:
  no, debug: yes)</p>
  
***************
*** 2367,2378 ****
  name="_Toc139993102"></a><a name="_Toc126872183"></a><a name="_Toc115417054"></a><span
  style='mso-bookmark:_Toc193871651'><span style='mso-bookmark:_Toc193871406'><span
  style='mso-bookmark:_Toc191662085'><span style='mso-bookmark:_Toc152605053'><span
! style='mso-bookmark:_Toc115416118'><span style='mso-fareast-font-family:"Times New Roman"'>3.12.
! </span></span></span></span></span></span><span style='mso-bookmark:_Toc193871651'><span
! style='mso-bookmark:_Toc193871406'><span style='mso-bookmark:_Toc191662085'><span
! style='mso-bookmark:_Toc152605053'><span style='mso-fareast-font-family:"Times New Roman"'>Large
! File (64-bit) Support</span></span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>As of release 1.5.3, OpenAFS for Windows supports files
  larger than 2GB.&nbsp; The maximum file size is now 16777216 terabytes when the
--- 2549,2555 ----
  name="_Toc139993102"></a><a name="_Toc126872183"></a><a name="_Toc115417054"></a><span
  style='mso-bookmark:_Toc193871651'><span style='mso-bookmark:_Toc193871406'><span
  style='mso-bookmark:_Toc191662085'><span style='mso-bookmark:_Toc152605053'><span
! style='mso-bookmark:_Toc115416118'>3.12. </span>Large File (64-bit) Support</span></span></span></span></h2>
  
  <p class=MsoNormal>As of release 1.5.3, OpenAFS for Windows supports files
  larger than 2GB.&nbsp; The maximum file size is now 16777216 terabytes when the
***************
*** 2384,2408 ****
  name="_Toc139993103"></a><a name="_Toc126872184"></a><a name="_Toc115417055"></a><span
  style='mso-bookmark:_Toc193871652'><span style='mso-bookmark:_Toc193871407'><span
  style='mso-bookmark:_Toc191662086'><span style='mso-bookmark:_Toc152605054'><span
! style='mso-bookmark:_Toc115416119'><span style='mso-fareast-font-family:"Times New Roman"'>3.13.
! Encrypted AFS Network Communication</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The OpenAFS for Windows installer by default activates a
  weak form of encrypted data transfer between the AFS client and the AFS
  servers.&nbsp; This is often referred to as &quot;fcrypt&quot; mode.&nbsp;
! Encrypted data transfer can be turned on or off with the “fs crypt”
! command.&nbsp; Transitions between “crypt” and “non-crypt” modes are logged to
! the Windows Application Event Log. </p>
  
  <h2><a name="_Toc193871653"></a><a name="_Toc193871408"></a><a
  name="_Toc191662087"></a><a name="_Toc152605055"></a><a name="_Toc115416120"></a><a
  name="_Toc139993104"></a><a name="_Toc126872185"></a><a name="_Toc115417056"></a><span
  style='mso-bookmark:_Toc193871653'><span style='mso-bookmark:_Toc193871408'><span
  style='mso-bookmark:_Toc191662087'><span style='mso-bookmark:_Toc152605055'><span
! style='mso-bookmark:_Toc115416120'><span style='mso-fareast-font-family:"Times New Roman"'>3.14.
! Authenticated Access to the OpenAFS Client Service</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>OpenAFS authenticates SMB connections using either NTLM or
  GSS SPNEGO (NTLM).&nbsp; In previous versions of OpenAFS, the SMB connections
--- 2561,2582 ----
  name="_Toc139993103"></a><a name="_Toc126872184"></a><a name="_Toc115417055"></a><span
  style='mso-bookmark:_Toc193871652'><span style='mso-bookmark:_Toc193871407'><span
  style='mso-bookmark:_Toc191662086'><span style='mso-bookmark:_Toc152605054'><span
! style='mso-bookmark:_Toc115416119'>3.13. Encrypted AFS Network Communication</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The OpenAFS for Windows installer by default activates a
  weak form of encrypted data transfer between the AFS client and the AFS
  servers.&nbsp; This is often referred to as &quot;fcrypt&quot; mode.&nbsp;
! Encrypted data transfer can be turned on or off with the “fs crypt” command.&nbsp;
! Transitions between “crypt” and “non-crypt” modes are logged to the Windows
! Application Event Log. </p>
  
  <h2><a name="_Toc193871653"></a><a name="_Toc193871408"></a><a
  name="_Toc191662087"></a><a name="_Toc152605055"></a><a name="_Toc115416120"></a><a
  name="_Toc139993104"></a><a name="_Toc126872185"></a><a name="_Toc115417056"></a><span
  style='mso-bookmark:_Toc193871653'><span style='mso-bookmark:_Toc193871408'><span
  style='mso-bookmark:_Toc191662087'><span style='mso-bookmark:_Toc152605055'><span
! style='mso-bookmark:_Toc115416120'>3.14. Authenticated Access to the OpenAFS
! Client Service</span></span></span></span></span></h2>
  
  <p class=MsoNormal>OpenAFS authenticates SMB connections using either NTLM or
  GSS SPNEGO (NTLM).&nbsp; In previous versions of OpenAFS, the SMB connections
***************
*** 2426,2447 ****
  name="_Toc139993105"></a><a name="_Toc126872186"></a><a name="_Toc115417057"></a><span
  style='mso-bookmark:_Toc193871654'><span style='mso-bookmark:_Toc193871409'><span
  style='mso-bookmark:_Toc191662088'><span style='mso-bookmark:_Toc152605056'><span
! style='mso-bookmark:_Toc115416121'><span style='mso-fareast-font-family:"Times New Roman"'>3.15.
! No More INI Files</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>Previous AFS clients for Windows stored configuration data
  in Windows .INI files. &nbsp;&nbsp;The OpenAFS client does not use Windows .INI
  files for the storage of configuration data.&nbsp;&nbsp; All settings are
  stored in the registry (see <a href="#_Appendix_A:_Registry_Values"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>Appendix A</span></span></a>).&nbsp; The CellServDB file
! is now stored in either the %ALLUSERSPROFILE%\Application Data\OpenAFS\Client
! directory or the %PROGRAMFILES%\OpenAFS\Client directory.&nbsp;&nbsp; The <i><a
! href="#_Value___:_CellServDBDir"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>CellServDBDir</span></span></a></i>
! registry value or the AFSCONF environment variable can be used to specify an
! alternative location.</p>
  
  <p class=MsoNormal>For users converting from IBM AFS clients, during
  installation OpenAFS will relocate the contents of the “afsdcell.ini” file to
--- 2600,2620 ----
  name="_Toc139993105"></a><a name="_Toc126872186"></a><a name="_Toc115417057"></a><span
  style='mso-bookmark:_Toc193871654'><span style='mso-bookmark:_Toc193871409'><span
  style='mso-bookmark:_Toc191662088'><span style='mso-bookmark:_Toc152605056'><span
! style='mso-bookmark:_Toc115416121'>3.15. No More INI Files</span></span></span></span></span></h2>
  
  <p class=MsoNormal>Previous AFS clients for Windows stored configuration data
  in Windows .INI files. &nbsp;&nbsp;The OpenAFS client does not use Windows .INI
  files for the storage of configuration data.&nbsp;&nbsp; All settings are
  stored in the registry (see <a href="#_Appendix_A:_Registry_Values"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>Appendix A</span></span></a>).&nbsp;
! The CellServDB file is now stored in either the %ALLUSERSPROFILE%\Application
! Data\OpenAFS\Client directory or the %PROGRAMFILES%\OpenAFS\Client directory.&nbsp;&nbsp;
! The <i><a href="#_Value___:_CellServDBDir"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>CellServDBDir</span></span></a></i> registry value or
! the AFSCONF environment variable can be used to specify an alternative
! location.</p>
  
  <p class=MsoNormal>For users converting from IBM AFS clients, during
  installation OpenAFS will relocate the contents of the “afsdcell.ini” file to
***************
*** 2454,2462 ****
  name="_Toc139993106"></a><a name="_Toc126872187"></a><a name="_Toc115417058"></a><span
  style='mso-bookmark:_Toc193871655'><span style='mso-bookmark:_Toc193871410'><span
  style='mso-bookmark:_Toc191662089'><span style='mso-bookmark:_Toc152605057'><span
! style='mso-bookmark:_Toc115416122'><span style='mso-fareast-font-family:"Times New Roman"'>3.16.
! Microsoft Windows Internet Connection Firewall</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client is compatible with the Internet
  Connection Firewall that debuted with Windows XP SP2 and Windows 2003
--- 2627,2634 ----
  name="_Toc139993106"></a><a name="_Toc126872187"></a><a name="_Toc115417058"></a><span
  style='mso-bookmark:_Toc193871655'><span style='mso-bookmark:_Toc193871410'><span
  style='mso-bookmark:_Toc191662089'><span style='mso-bookmark:_Toc152605057'><span
! style='mso-bookmark:_Toc115416122'>3.16. Microsoft Windows Internet Connection
! Firewall</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client is compatible with the Internet
  Connection Firewall that debuted with Windows XP SP2 and Windows 2003
***************
*** 2471,2479 ****
  name="_Toc139993107"></a><a name="_Toc126872188"></a><a name="_Toc115417059"></a><span
  style='mso-bookmark:_Toc193871656'><span style='mso-bookmark:_Toc193871411'><span
  style='mso-bookmark:_Toc191662090'><span style='mso-bookmark:_Toc152605058'><span
! style='mso-bookmark:_Toc115416123'><span style='mso-fareast-font-family:"Times New Roman"'>3.17.
! Browsing AFS from the Explorer Shell and Office</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client Service implements the CIFS Remote Admin
  Protocol which allows Explorer to browse server and share information. This
--- 2643,2650 ----
  name="_Toc139993107"></a><a name="_Toc126872188"></a><a name="_Toc115417059"></a><span
  style='mso-bookmark:_Toc193871656'><span style='mso-bookmark:_Toc193871411'><span
  style='mso-bookmark:_Toc191662090'><span style='mso-bookmark:_Toc152605058'><span
! style='mso-bookmark:_Toc115416123'>3.17. Browsing AFS from the Explorer Shell
! and Office</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client Service implements the CIFS Remote Admin
  Protocol which allows Explorer to browse server and share information. This
***************
*** 2485,2496 ****
  name="_Toc139993108"></a><a name="_Toc126872189"></a><a name="_Toc115417060"></a><span
  style='mso-bookmark:_Toc193871657'><span style='mso-bookmark:_Toc193871412'><span
  style='mso-bookmark:_Toc191662091'><span style='mso-bookmark:_Toc152605059'><span
! style='mso-bookmark:_Toc115416124'><span style='mso-fareast-font-family:"Times New Roman"'>3.18.
! </span></span><st1:place w:st="on"><st1:PlaceName w:st="on"><span
!   style='mso-fareast-font-family:"Times New Roman"'>Byte</span></st1:PlaceName><span
!  style='mso-fareast-font-family:"Times New Roman"'> <st1:PlaceType w:st="on">Range</st1:PlaceType></span></st1:place><span
! style='mso-fareast-font-family:"Times New Roman"'> Locking</span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>Many applications on Windows (e.g. Microsoft Office) require
  the use of byte range locks applied to a file either to protect against
--- 2656,2664 ----
  name="_Toc139993108"></a><a name="_Toc126872189"></a><a name="_Toc115417060"></a><span
  style='mso-bookmark:_Toc193871657'><span style='mso-bookmark:_Toc193871412'><span
  style='mso-bookmark:_Toc191662091'><span style='mso-bookmark:_Toc152605059'><span
! style='mso-bookmark:_Toc115416124'>3.18. </span><st1:place w:st="on"><st1:PlaceName
!  w:st="on">Byte</st1:PlaceName> <st1:PlaceType w:st="on">Range</st1:PlaceType></st1:place>
! Locking</span></span></span></span></h2>
  
  <p class=MsoNormal>Many applications on Windows (e.g. Microsoft Office) require
  the use of byte range locks applied to a file either to protect against
***************
*** 2534,2554 ****
  CIFS-AFS gateway implements the following semantics in order to reduce the
  inconvenience on end users.&nbsp; </p>
  
! <ul style='margin-top:0in' type=disc>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>If the
!      file is located on a read-only volume and the application requests a
       shared lock, the CIFS-AFS server will grant the lock request without
       asking the AFS file server.</li>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>If the
!      file is located on a read-only volume and the application opens the file
!      with write access and requests an exclusive lock, the CIFS-AFS server will
!      refuse the lock request and return a read only error.</li>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>If the
!      file is located on a read-only volume and the application opens the file
!      with only read access and requests an exclusive lock, the CIFS-AFS server
!      will fulfill the lock request with a read lock.</li>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>If the
!      file is located on a read-write volume and the application requests an
       exclusive lock, the CIFS-AFS server will request a write lock from the AFS
       file server.&nbsp; If granted by the file server, then the CIFS-AFS server
       will grant the lock request.&nbsp; If the request is denied due to an
--- 2702,2722 ----
  CIFS-AFS gateway implements the following semantics in order to reduce the
  inconvenience on end users.&nbsp; </p>
  
! <ul style='margin-top:0pt' type=disc>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list 36.0pt'>If
!      the file is located on a read-only volume and the application requests a
       shared lock, the CIFS-AFS server will grant the lock request without
       asking the AFS file server.</li>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list 36.0pt'>If
!      the file is located on a read-only volume and the application opens the
!      file with write access and requests an exclusive lock, the CIFS-AFS server
!      will refuse the lock request and return a read only error.</li>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list 36.0pt'>If
!      the file is located on a read-only volume and the application opens the
!      file with only read access and requests an exclusive lock, the CIFS-AFS
!      server will fulfill the lock request with a read lock.</li>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list 36.0pt'>If
!      the file is located on a read-write volume and the application requests an
       exclusive lock, the CIFS-AFS server will request a write lock from the AFS
       file server.&nbsp; If granted by the file server, then the CIFS-AFS server
       will grant the lock request.&nbsp; If the request is denied due to an
***************
*** 2560,2567 ****
       the request even though the AFS file server said ‘no’.&nbsp; If the user
       does not have at least those permissions, the CIFS-AFS server will deny
       the request.</li>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>If the
!      file is located on a read-write volume and the application requests a
       shared lock, the CIFS-AFS server will request a read lock from the AFS
       file server.&nbsp; If granted by the file server, then the CIFS-AFS server
       grants the lock request.&nbsp; If the request is denied due to an access
--- 2728,2735 ----
       the request even though the AFS file server said ‘no’.&nbsp; If the user
       does not have at least those permissions, the CIFS-AFS server will deny
       the request.</li>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list 36.0pt'>If
!      the file is located on a read-write volume and the application requests a
       shared lock, the CIFS-AFS server will request a read lock from the AFS
       file server.&nbsp; If granted by the file server, then the CIFS-AFS server
       grants the lock request.&nbsp; If the request is denied due to an access
***************
*** 2569,2600 ****
       lock privilege, then the CIFS-AFS server will grant the request even
       though the AFS file server said ‘no’.&nbsp; If the user does not have at
       least those permissions, the CIFS-AFS server will deny the request.</li>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>If
       multiple processes on the same machine attempt to access the same file
       simultaneously, the CIFS-AFS server will locally manage the granted locks
       and all processes will share a single lock on the AFS file server.</li>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>If the
!      CIFS-AFS server is unable to renew the AFS file server locks, then it will
!      invalidate the associated file handles.&nbsp; This is the same behavior
!      that an application will experience if it was using a Windows File Share
!      and the connection was broken.&nbsp;&nbsp; Invalidating the file handles
!      prevents subsequent data corruption from taking place.</li>
  </ul>
  
  <p class=MsoNormal>If you wish to disable the acquisition of locks from the
  file server, this can be performed using the <a
  href="#_Value:_EnableServerLocks"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>EnableServerLocks</span></span></a>
! registry value.</p>
  
  <h2><a name="_Toc193871658"></a><a name="_Toc193871413"></a><a
  name="_Toc191662092"></a><a name="_Toc152605060"></a><a name="_Toc115416125"></a><a
  name="_Toc139993109"></a><a name="_Toc126872190"></a><a name="_Toc115417061"></a><span
  style='mso-bookmark:_Toc193871658'><span style='mso-bookmark:_Toc193871413'><span
  style='mso-bookmark:_Toc191662092'><span style='mso-bookmark:_Toc152605060'><span
! style='mso-bookmark:_Toc115416125'><span style='mso-fareast-font-family:"Times New Roman"'>3.19.
! Automatic Discarding of AFS Tokens at Logoff</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client will automatically forget a user's tokens
  upon Logoff unless the user's profile was loaded from an AFS volume.&nbsp; In
--- 2737,2767 ----
       lock privilege, then the CIFS-AFS server will grant the request even
       though the AFS file server said ‘no’.&nbsp; If the user does not have at
       least those permissions, the CIFS-AFS server will deny the request.</li>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list 36.0pt'>If
       multiple processes on the same machine attempt to access the same file
       simultaneously, the CIFS-AFS server will locally manage the granted locks
       and all processes will share a single lock on the AFS file server.</li>
!  <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list 36.0pt'>If
!      the CIFS-AFS server is unable to renew the AFS file server locks, then it
!      will invalidate the associated file handles.&nbsp; This is the same
!      behavior that an application will experience if it was using a Windows
!      File Share and the connection was broken.&nbsp;&nbsp; Invalidating the
!      file handles prevents subsequent data corruption from taking place.</li>
  </ul>
  
  <p class=MsoNormal>If you wish to disable the acquisition of locks from the
  file server, this can be performed using the <a
  href="#_Value:_EnableServerLocks"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>EnableServerLocks</span></span></a> registry value.</p>
  
  <h2><a name="_Toc193871658"></a><a name="_Toc193871413"></a><a
  name="_Toc191662092"></a><a name="_Toc152605060"></a><a name="_Toc115416125"></a><a
  name="_Toc139993109"></a><a name="_Toc126872190"></a><a name="_Toc115417061"></a><span
  style='mso-bookmark:_Toc193871658'><span style='mso-bookmark:_Toc193871413'><span
  style='mso-bookmark:_Toc191662092'><span style='mso-bookmark:_Toc152605060'><span
! style='mso-bookmark:_Toc115416125'>3.19. Automatic Discarding of AFS Tokens at
! Logoff</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client will automatically forget a user's tokens
  upon Logoff unless the user's profile was loaded from an AFS volume.&nbsp; In
***************
*** 2606,2624 ****
  
  <p class=MsoNormal>If there is a need to disable this functionality, the <a
  href="#_Value_:_LogoffPreserveTokens"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>LogoffPreserveTokens</span></span></a>
! registry value can be used. (see <a href="#_Appendix_A:_Registry_Values"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>Appendix A</span></span></a>.)</p>
  
  <h2><a name="_Toc193871659"></a><a name="_Toc193871414"></a><a
  name="_Toc191662093"></a><a name="_Toc152605061"></a><a name="_Toc115416126"></a><a
  name="_Toc139993110"></a><a name="_Toc126872191"></a><a name="_Toc115417062"></a><span
  style='mso-bookmark:_Toc193871659'><span style='mso-bookmark:_Toc193871414'><span
  style='mso-bookmark:_Toc191662093'><span style='mso-bookmark:_Toc152605061'><span
! style='mso-bookmark:_Toc115416126'><span style='mso-fareast-font-family:"Times New Roman"'>3.20.
! Windows Terminal Server installations</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>When installing the NSIS (.exe) installer under Terminal
  Server, you must execute it from within the Add/Remove Programs Control
--- 2773,2790 ----
  
  <p class=MsoNormal>If there is a need to disable this functionality, the <a
  href="#_Value_:_LogoffPreserveTokens"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>LogoffPreserveTokens</span></span></a> registry value
! can be used. (see <a href="#_Appendix_A:_Registry_Values"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>Appendix A</span></span></a>.)</p>
  
  <h2><a name="_Toc193871659"></a><a name="_Toc193871414"></a><a
  name="_Toc191662093"></a><a name="_Toc152605061"></a><a name="_Toc115416126"></a><a
  name="_Toc139993110"></a><a name="_Toc126872191"></a><a name="_Toc115417062"></a><span
  style='mso-bookmark:_Toc193871659'><span style='mso-bookmark:_Toc193871414'><span
  style='mso-bookmark:_Toc191662093'><span style='mso-bookmark:_Toc152605061'><span
! style='mso-bookmark:_Toc115416126'>3.20. Windows Terminal Server installations</span></span></span></span></span></h2>
  
  <p class=MsoNormal>When installing the NSIS (.exe) installer under Terminal
  Server, you must execute it from within the Add/Remove Programs Control
***************
*** 2631,2639 ****
  name="_Toc139993111"></a><a name="_Toc126872192"></a><a name="_Toc115417063"></a><span
  style='mso-bookmark:_Toc193871660'><span style='mso-bookmark:_Toc193871415'><span
  style='mso-bookmark:_Toc191662094'><span style='mso-bookmark:_Toc152605062'><span
! style='mso-bookmark:_Toc115416127'><span style='mso-fareast-font-family:"Times New Roman"'>3.21.
! Hidden Dot Files</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>AFS is a UNIX native file system.&nbsp; The OpenAFS client
  attempts to treat the files stored in AFS as they would be on UNIX.&nbsp; File
--- 2797,2803 ----
  name="_Toc139993111"></a><a name="_Toc126872192"></a><a name="_Toc115417063"></a><span
  style='mso-bookmark:_Toc193871660'><span style='mso-bookmark:_Toc193871415'><span
  style='mso-bookmark:_Toc191662094'><span style='mso-bookmark:_Toc152605062'><span
! style='mso-bookmark:_Toc115416127'>3.21. Hidden Dot Files</span></span></span></span></span></h2>
  
  <p class=MsoNormal>AFS is a UNIX native file system.&nbsp; The OpenAFS client
  attempts to treat the files stored in AFS as they would be on UNIX.&nbsp; File
***************
*** 2641,2684 ****
  Hidden attribute so they will not normally be displayed.<span
  style='mso-spacerun:yes'>  </span>This behavior can be altered via the <a
  href="#_Value:_HideDotFiles"><span class=Heading1Char><span style='font-size:
! 14.0pt;text-decoration:none;text-underline:none'>HideDotFiles</span></span></a>
! registry value.</p>
  
  <h2><a name="_Toc193871661"></a><a name="_Toc193871416"></a><a
  name="_Toc191662095"></a><a name="_Toc152605063"></a><a name="_Toc115416128"></a><a
  name="_Toc139993112"></a><a name="_Toc126872193"></a><a name="_Toc115417064"></a><span
  style='mso-bookmark:_Toc193871661'><span style='mso-bookmark:_Toc193871416'><span
  style='mso-bookmark:_Toc191662095'><span style='mso-bookmark:_Toc152605063'><span
! style='mso-bookmark:_Toc115416128'><span style='mso-fareast-font-family:"Times New Roman"'>3.22.
! Status Cache Limits</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The Status Cache (AFS Configuration Control Panel: Advanced
! Page) is defined to have a maximum number of entries.&nbsp; Each entry
! represents a single file or directory entry accessed within the AFS file
! system.&nbsp; When the maximum number of entries are allocated, entries will
! begin to be reused according to a least recently used (LRU) algorithm.&nbsp; If
! the number of files or directories being accessed repeatedly by your
! applications is greater then the maximum number of entries, your host will begin
! to experience thrashing of the Status Cache and all requests will result in
! network operations.</p>
  
  <p class=MsoNormal>If you are experiencing poor performance try increasing the
  maximum number of Status Cache entries.&nbsp; Each entry requires approximately
  1.2K.&nbsp; The default number of Status Cache entries is 10,000.<span
  style='mso-spacerun:yes'>  </span>This can be adjusted using the <a
  href="#_Value:_Stats"><span class=Heading1Char><span style='font-size:14.0pt;
! text-decoration:none;text-underline:none'>Stats</span></span></a> registry
! value.</p>
  
  <h2><a name="_Toc193871662"></a><a name="_Toc193871417"></a><a
  name="_Toc191662096"></a><a name="_Toc152605064"></a><a name="_Toc115416129"></a><a
  name="_Toc139993113"></a><a name="_Toc126872194"></a><a name="_Toc115417065"></a><span
  style='mso-bookmark:_Toc193871662'><span style='mso-bookmark:_Toc193871417'><span
  style='mso-bookmark:_Toc191662096'><span style='mso-bookmark:_Toc152605064'><span
! style='mso-bookmark:_Toc115416129'><span style='mso-fareast-font-family:"Times New Roman"'>3.23.
! NETBIOS over TCP/IP must be enabled</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>&quot;Netbios over TCP/IP&quot; must be active on the
  machine in order for communication with the AFS Client Service to
--- 2805,2844 ----
  Hidden attribute so they will not normally be displayed.<span
  style='mso-spacerun:yes'>  </span>This behavior can be altered via the <a
  href="#_Value:_HideDotFiles"><span class=Heading1Char><span style='font-size:
! 14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:none;text-underline:
! none'>HideDotFiles</span></span></a> registry value.</p>
  
  <h2><a name="_Toc193871661"></a><a name="_Toc193871416"></a><a
  name="_Toc191662095"></a><a name="_Toc152605063"></a><a name="_Toc115416128"></a><a
  name="_Toc139993112"></a><a name="_Toc126872193"></a><a name="_Toc115417064"></a><span
  style='mso-bookmark:_Toc193871661'><span style='mso-bookmark:_Toc193871416'><span
  style='mso-bookmark:_Toc191662095'><span style='mso-bookmark:_Toc152605063'><span
! style='mso-bookmark:_Toc115416128'>3.22. Status Cache Limits</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The Status Cache (AFS Configuration Control Panel: Advanced
! Page) is defined to have a maximum number of entries.&nbsp; Each entry represents
! a single file or directory entry accessed within the AFS file system.&nbsp;
! When the maximum number of entries are allocated, entries will begin to be
! reused according to a least recently used (LRU) algorithm.&nbsp; If the number
! of files or directories being accessed repeatedly by your applications is
! greater then the maximum number of entries, your host will begin to experience
! thrashing of the Status Cache and all requests will result in network
! operations.</p>
  
  <p class=MsoNormal>If you are experiencing poor performance try increasing the
  maximum number of Status Cache entries.&nbsp; Each entry requires approximately
  1.2K.&nbsp; The default number of Status Cache entries is 10,000.<span
  style='mso-spacerun:yes'>  </span>This can be adjusted using the <a
  href="#_Value:_Stats"><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho";text-decoration:none;text-underline:none'>Stats</span></span></a>
! registry value.</p>
  
  <h2><a name="_Toc193871662"></a><a name="_Toc193871417"></a><a
  name="_Toc191662096"></a><a name="_Toc152605064"></a><a name="_Toc115416129"></a><a
  name="_Toc139993113"></a><a name="_Toc126872194"></a><a name="_Toc115417065"></a><span
  style='mso-bookmark:_Toc193871662'><span style='mso-bookmark:_Toc193871417'><span
  style='mso-bookmark:_Toc191662096'><span style='mso-bookmark:_Toc152605064'><span
! style='mso-bookmark:_Toc115416129'>3.23. NETBIOS over TCP/IP must be enabled</span></span></span></span></span></h2>
  
  <p class=MsoNormal>&quot;Netbios over TCP/IP&quot; must be active on the
  machine in order for communication with the AFS Client Service to
***************
*** 2692,2700 ****
  name="_Toc139993114"></a><a name="_Toc126872195"></a><a name="_Toc115417066"></a><span
  style='mso-bookmark:_Toc193871663'><span style='mso-bookmark:_Toc193871418'><span
  style='mso-bookmark:_Toc191662097'><span style='mso-bookmark:_Toc152605065'><span
! style='mso-bookmark:_Toc115416130'><span style='mso-fareast-font-family:"Times New Roman"'>3.24.
! OpenAFS binaries are digitally signed</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client Service and related binaries distributed
  by OpenAFS.org are digitally signed by &quot;Secure Endpoints Inc.&quot;.&nbsp;
--- 2852,2858 ----
  name="_Toc139993114"></a><a name="_Toc126872195"></a><a name="_Toc115417066"></a><span
  style='mso-bookmark:_Toc193871663'><span style='mso-bookmark:_Toc193871418'><span
  style='mso-bookmark:_Toc191662097'><span style='mso-bookmark:_Toc152605065'><span
! style='mso-bookmark:_Toc115416130'>3.24. OpenAFS binaries are digitally signed</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client Service and related binaries distributed
  by OpenAFS.org are digitally signed by &quot;Secure Endpoints Inc.&quot;.&nbsp;
***************
*** 2708,2719 ****
  
  <p class=MsoNormal><a href="#_Appendix_A:_Registry_Values"><span
  style='mso-bookmark:_Toc193871664'><span style='mso-bookmark:_Toc193871419'><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>Appendix A</span></span></span></span><span
  style='mso-bookmark:_Toc193871419'></span><span style='mso-bookmark:_Toc193871664'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871419"></a><a name="_Toc193871664"></a><![endif]> documents the
  &quot;<a href="#_Value___:_VerifyServiceSignature"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>VerifyServiceSignature</span></span></a>&quot;
  registry value which can be used to disable the signature check.&nbsp; The file
  version check cannot be disabled.</p>
  
--- 2866,2878 ----
  
  <p class=MsoNormal><a href="#_Appendix_A:_Registry_Values"><span
  style='mso-bookmark:_Toc193871664'><span style='mso-bookmark:_Toc193871419'><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>Appendix A</span></span></span></span><span
  style='mso-bookmark:_Toc193871419'></span><span style='mso-bookmark:_Toc193871664'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871419"></a><a name="_Toc193871664"></a><![endif]> documents the
  &quot;<a href="#_Value___:_VerifyServiceSignature"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>VerifyServiceSignature</span></span></a>&quot;
  registry value which can be used to disable the signature check.&nbsp; The file
  version check cannot be disabled.</p>
  
***************
*** 2722,2748 ****
  name="_Toc139993115"></a><a name="_Toc126872196"></a><a name="_Toc115417067"></a><span
  style='mso-bookmark:_Toc193871665'><span style='mso-bookmark:_Toc193871420'><span
  style='mso-bookmark:_Toc191662098'><span style='mso-bookmark:_Toc152605066'><span
! style='mso-bookmark:_Toc115416131'><span style='mso-fareast-font-family:"Times New Roman"'>3.25.
! Maximum Size of the AFSCache File</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The maximum cache size on 32-bit Windows is approximately
  1.3GB.&nbsp; This is the largest contiguous block of memory in the 2GB process
  address space which can be used for constructing a memory mapped file.&nbsp;
! Due to fragmentation of the process space caused by the loading of libraries required
! by the digital signature verification code, any attempt to specify a cache size
! greater then 700MB will result in the automatic disabling of the signature
! check.<span style='mso-spacerun:yes'>  </span>Significantly larger cache sizes
! can be used on 64-bit Windows.</p>
  
  <h2><a name="_Toc193871666"></a><a name="_Toc193871421"></a><a
  name="_Toc191662099"></a><a name="_Toc152605067"></a><a name="_Toc115416132"></a><a
  name="_Toc139993116"></a><a name="_Toc126872197"></a><a name="_Toc115417068"></a><span
  style='mso-bookmark:_Toc193871666'><span style='mso-bookmark:_Toc193871421'><span
  style='mso-bookmark:_Toc191662099'><span style='mso-bookmark:_Toc152605067'><span
! style='mso-bookmark:_Toc115416132'><span style='mso-fareast-font-family:"Times New Roman"'>3.26.
! Filename Character Sets</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>OpenAFS for Windows implements an SMB server which is used
  as a gateway to the AFS filesystem.&nbsp; Because of limitations of the SMB
--- 2881,2903 ----
  name="_Toc139993115"></a><a name="_Toc126872196"></a><a name="_Toc115417067"></a><span
  style='mso-bookmark:_Toc193871665'><span style='mso-bookmark:_Toc193871420'><span
  style='mso-bookmark:_Toc191662098'><span style='mso-bookmark:_Toc152605066'><span
! style='mso-bookmark:_Toc115416131'>3.25. Maximum Size of the AFSCache File</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The maximum cache size on 32-bit Windows is approximately
  1.3GB.&nbsp; This is the largest contiguous block of memory in the 2GB process
  address space which can be used for constructing a memory mapped file.&nbsp;
! Due to fragmentation of the process space caused by the loading of libraries
! required by the digital signature verification code, any attempt to specify a
! cache size greater then 700MB will result in the automatic disabling of the
! signature check.<span style='mso-spacerun:yes'>  </span>Significantly larger
! cache sizes can be used on 64-bit Windows.</p>
  
  <h2><a name="_Toc193871666"></a><a name="_Toc193871421"></a><a
  name="_Toc191662099"></a><a name="_Toc152605067"></a><a name="_Toc115416132"></a><a
  name="_Toc139993116"></a><a name="_Toc126872197"></a><a name="_Toc115417068"></a><span
  style='mso-bookmark:_Toc193871666'><span style='mso-bookmark:_Toc193871421'><span
  style='mso-bookmark:_Toc191662099'><span style='mso-bookmark:_Toc152605067'><span
! style='mso-bookmark:_Toc115416132'>3.26. Filename Character Sets</span></span></span></span></span></h2>
  
  <p class=MsoNormal>OpenAFS for Windows implements an SMB server which is used
  as a gateway to the AFS filesystem.&nbsp; Because of limitations of the SMB
***************
*** 2755,2765 ****
  any of the following characters:</p>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
!  style='border-collapse:collapse;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:399.5pt'>
!   <td width=590 valign=top style='width:6.15in;border:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt;height:399.5pt'>
    <p class=preformattedtext>&nbsp;&nbsp;&nbsp;&nbsp; <span lang=IT
    style='mso-ansi-language:IT'>[Ç]&nbsp; 128&nbsp; 08/00&nbsp; 200&nbsp;
    80&nbsp; C cedilla<o:p></o:p></span></p>
--- 2910,2920 ----
  any of the following characters:</p>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
!  style='border-collapse:collapse;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:399.5pt'>
!   <td width=590 valign=top style='width:442.8pt;border:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt;height:399.5pt'>
    <p class=preformattedtext>&nbsp;&nbsp;&nbsp;&nbsp; <span lang=IT
    style='mso-ansi-language:IT'>[Ç]&nbsp; 128&nbsp; 08/00&nbsp; 200&nbsp;
    80&nbsp; C cedilla<o:p></o:p></span></p>
***************
*** 2837,2846 ****
  
  <p class=MsoNormal>The OpenAFS Client provides an optional registry value, <i><a
  href="#_Value___:_StoreAnsiFilenames"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>StoreAnsiFilenames</span></span></a></i>,
! that can be set to instruct OpenAFS to store filenames using the ANSI Code Page
! instead of the OEM Code Page.&nbsp; The ANSI Code Page is a compatible superset
! of Latin-1.&nbsp; This setting is not the default setting because making this
  change would prevent OpenAFS for Windows from being able to access filenames
  containing the above characters which were created without this setting.</p>
  
--- 2992,3002 ----
  
  <p class=MsoNormal>The OpenAFS Client provides an optional registry value, <i><a
  href="#_Value___:_StoreAnsiFilenames"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>StoreAnsiFilenames</span></span></a></i>, that can be
! set to instruct OpenAFS to store filenames using the ANSI Code Page instead of
! the OEM Code Page.&nbsp; The ANSI Code Page is a compatible superset of
! Latin-1.&nbsp; This setting is not the default setting because making this
  change would prevent OpenAFS for Windows from being able to access filenames
  containing the above characters which were created without this setting.</p>
  
***************
*** 2849,2857 ****
  name="_Toc139993117"></a><a name="_Toc126872198"></a><a name="_Toc115417069"></a><span
  style='mso-bookmark:_Toc193871667'><span style='mso-bookmark:_Toc193871422'><span
  style='mso-bookmark:_Toc191662100'><span style='mso-bookmark:_Toc152605068'><span
! style='mso-bookmark:_Toc115416133'><span style='mso-fareast-font-family:"Times New Roman"'>3.27.
! Known Character Set Issues with Roaming Profiles</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>There is a known issue with storing Windows Roaming Profiles
  when the profile contains either directories or files with names which cannot
--- 3005,3012 ----
  name="_Toc139993117"></a><a name="_Toc126872198"></a><a name="_Toc115417069"></a><span
  style='mso-bookmark:_Toc193871667'><span style='mso-bookmark:_Toc193871422'><span
  style='mso-bookmark:_Toc191662100'><span style='mso-bookmark:_Toc152605068'><span
! style='mso-bookmark:_Toc115416133'>3.27. Known Character Set Issues with
! Roaming Profiles</span></span></span></span></span></h2>
  
  <p class=MsoNormal>There is a known issue with storing Windows Roaming Profiles
  when the profile contains either directories or files with names which cannot
***************
*** 2867,2875 ****
  name="_Toc139993118"></a><a name="_Toc126872199"></a><a name="_Toc115417070"></a><span
  style='mso-bookmark:_Toc193871668'><span style='mso-bookmark:_Toc193871423'><span
  style='mso-bookmark:_Toc191662101'><span style='mso-bookmark:_Toc152605069'><span
! style='mso-bookmark:_Toc115416134'><span style='mso-fareast-font-family:"Times New Roman"'>3.28.
! The AFSCache File</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The AFS Cache file is stored by default at %TEMP%\AFSCache
  in a persistent file marked with the Hidden and System attributes.&nbsp; The
--- 3022,3028 ----
  name="_Toc139993118"></a><a name="_Toc126872199"></a><a name="_Toc115417070"></a><span
  style='mso-bookmark:_Toc193871668'><span style='mso-bookmark:_Toc193871423'><span
  style='mso-bookmark:_Toc191662101'><span style='mso-bookmark:_Toc152605069'><span
! style='mso-bookmark:_Toc115416134'>3.28. The AFSCache File</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The AFS Cache file is stored by default at %TEMP%\AFSCache
  in a persistent file marked with the Hidden and System attributes.&nbsp; The
***************
*** 2890,2898 ****
  name="_Toc139993119"></a><a name="_Toc126872200"></a><a name="_Toc115417071"></a><span
  style='mso-bookmark:_Toc193871669'><span style='mso-bookmark:_Toc193871424'><span
  style='mso-bookmark:_Toc191662102'><span style='mso-bookmark:_Toc152605070'><span
! style='mso-bookmark:_Toc115416135'><span style='mso-fareast-font-family:"Times New Roman"'>3.29.
! Restricting OpenAFS Client Service Start and Stop</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>A new command line tool, afsdacl.exe, can be used to
  restrict the ability to start and stop the OpenAFS Client Service.</p>
--- 3043,3050 ----
  name="_Toc139993119"></a><a name="_Toc126872200"></a><a name="_Toc115417071"></a><span
  style='mso-bookmark:_Toc193871669'><span style='mso-bookmark:_Toc193871424'><span
  style='mso-bookmark:_Toc191662102'><span style='mso-bookmark:_Toc152605070'><span
! style='mso-bookmark:_Toc115416135'>3.29. Restricting OpenAFS Client Service
! Start and Stop</span></span></span></span></span></h2>
  
  <p class=MsoNormal>A new command line tool, afsdacl.exe, can be used to
  restrict the ability to start and stop the OpenAFS Client Service.</p>
***************
*** 2922,2930 ****
  name="_Toc139993120"></a><a name="_Toc126872201"></a><a name="_Toc115417072"></a><span
  style='mso-bookmark:_Toc193871670'><span style='mso-bookmark:_Toc193871425'><span
  style='mso-bookmark:_Toc191662103'><span style='mso-bookmark:_Toc152605071'><span
! style='mso-bookmark:_Toc115416136'><span style='mso-fareast-font-family:"Times New Roman"'>3.30.
! The @sys Name List</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The default @sys name list in the OpenAFS Client is set to
  &quot;x86_win32 i386_w2k i386_nt40&quot; for 32-bit x86 systems.&nbsp; The
--- 3074,3080 ----
  name="_Toc139993120"></a><a name="_Toc126872201"></a><a name="_Toc115417072"></a><span
  style='mso-bookmark:_Toc193871670'><span style='mso-bookmark:_Toc193871425'><span
  style='mso-bookmark:_Toc191662103'><span style='mso-bookmark:_Toc152605071'><span
! style='mso-bookmark:_Toc115416136'>3.30. The @sys Name List</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The default @sys name list in the OpenAFS Client is set to
  &quot;x86_win32 i386_w2k i386_nt40&quot; for 32-bit x86 systems.&nbsp; The
***************
*** 2935,2956 ****
  name="_Toc139993121"></a><a name="_Toc126872202"></a><a name="_Toc115417073"></a><span
  style='mso-bookmark:_Toc193871671'><span style='mso-bookmark:_Toc193871426'><span
  style='mso-bookmark:_Toc191662104'><span style='mso-bookmark:_Toc152605072'><span
! style='mso-bookmark:_Toc115416137'><span style='mso-fareast-font-family:"Times New Roman"'>3.31.
! Symlinks to AFS UNC paths</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>In OpenAFS, symlinks to AFS UNC paths, \\AFS[\all]\..., are
! treated the same as symlinks to /afs/...&nbsp; However, please use /afs/... as the
! Windows UNC form will not work on UNIX client.</p>
  
  <h2><a name="_Toc193871672"></a><a name="_Toc193871427"></a><a
  name="_Toc191662105"></a><a name="_Toc152605073"></a><a name="_Toc115416138"></a><a
  name="_Toc139993122"></a><a name="_Toc126872203"></a><a name="_Toc115417074"></a><span
  style='mso-bookmark:_Toc193871672'><span style='mso-bookmark:_Toc193871427'><span
  style='mso-bookmark:_Toc191662105'><span style='mso-bookmark:_Toc152605073'><span
! style='mso-bookmark:_Toc115416138'><span style='mso-fareast-font-family:"Times New Roman"'>3.32.
! Cache Manager Debugging</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client implements the Cache Manager Debugging
  RPC Interface.&nbsp; The CM debugger can be queried with cmdebug.exe.<span
--- 3085,3102 ----
  name="_Toc139993121"></a><a name="_Toc126872202"></a><a name="_Toc115417073"></a><span
  style='mso-bookmark:_Toc193871671'><span style='mso-bookmark:_Toc193871426'><span
  style='mso-bookmark:_Toc191662104'><span style='mso-bookmark:_Toc152605072'><span
! style='mso-bookmark:_Toc115416137'>3.31. Symlinks to AFS UNC paths</span></span></span></span></span></h2>
  
  <p class=MsoNormal>In OpenAFS, symlinks to AFS UNC paths, \\AFS[\all]\..., are
! treated the same as symlinks to /afs/...&nbsp; However, please use /afs/... as
! the Windows UNC form will not work on UNIX client.</p>
  
  <h2><a name="_Toc193871672"></a><a name="_Toc193871427"></a><a
  name="_Toc191662105"></a><a name="_Toc152605073"></a><a name="_Toc115416138"></a><a
  name="_Toc139993122"></a><a name="_Toc126872203"></a><a name="_Toc115417074"></a><span
  style='mso-bookmark:_Toc193871672'><span style='mso-bookmark:_Toc193871427'><span
  style='mso-bookmark:_Toc191662105'><span style='mso-bookmark:_Toc152605073'><span
! style='mso-bookmark:_Toc115416138'>3.32. Cache Manager Debugging</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client implements the Cache Manager Debugging
  RPC Interface.&nbsp; The CM debugger can be queried with cmdebug.exe.<span
***************
*** 2966,2977 ****
  </span>print all info</p>
  
  <p class=preformattedtext><span style='mso-spacerun:yes'>      
! </span>-refcounts<span style='mso-spacerun:yes'>   </span>print only cache
! entries with positive reference counts</p>
  
  <p class=preformattedtext><span style='mso-spacerun:yes'>      
! </span>-callbacks<span style='mso-spacerun:yes'>   </span>print only cache entries
! with callbacks</p>
  
  <p class=preformattedtext><span style='mso-spacerun:yes'>      
  </span>-ctime<span style='mso-spacerun:yes'>       </span>print human readable
--- 3112,3123 ----
  </span>print all info</p>
  
  <p class=preformattedtext><span style='mso-spacerun:yes'>      
! </span>-refcounts<span style='mso-spacerun:yes'>   </span>print only cache entries
! with positive reference counts</p>
  
  <p class=preformattedtext><span style='mso-spacerun:yes'>      
! </span>-callbacks<span style='mso-spacerun:yes'>   </span>print only cache
! entries with callbacks</p>
  
  <p class=preformattedtext><span style='mso-spacerun:yes'>      
  </span>-ctime<span style='mso-spacerun:yes'>       </span>print human readable
***************
*** 2985,3002 ****
  </span>-cache<span style='mso-spacerun:yes'>       </span>print only cache
  configuration</p>
  
! <p class=preformattedtext><span style='mso-spacerun:yes'>      
! </span>-cellservdb<span style='mso-spacerun:yes'>  </span>print only cellservdb
! info</p>
  
  <h2><a name="_Toc193871673"></a><a name="_Toc193871428"></a><a
  name="_Toc191662106"></a><a name="_Toc152605074"></a><a name="_Toc115416139"></a><a
  name="_Toc139993123"></a><a name="_Toc126872204"></a><a name="_Toc115417075"></a><span
  style='mso-bookmark:_Toc193871673'><span style='mso-bookmark:_Toc193871428'><span
  style='mso-bookmark:_Toc191662106'><span style='mso-bookmark:_Toc152605074'><span
! style='mso-bookmark:_Toc115416139'><span style='mso-fareast-font-family:"Times New Roman"'>3.33.
! Windows Logon Caching vs. Kerberos Logons</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>If you are a site which utilizes MIT/Heimdal Kerberos
  principals to logon to Windows via a cross-realm relationship with a
--- 3131,3147 ----
  </span>-cache<span style='mso-spacerun:yes'>       </span>print only cache
  configuration</p>
  
! <p class=preformattedtext><span style='mso-spacerun:yes'>  </span><span
! style='mso-spacerun:yes'>     </span>-cellservdb<span
! style='mso-spacerun:yes'>  </span>print only cellservdb info</p>
  
  <h2><a name="_Toc193871673"></a><a name="_Toc193871428"></a><a
  name="_Toc191662106"></a><a name="_Toc152605074"></a><a name="_Toc115416139"></a><a
  name="_Toc139993123"></a><a name="_Toc126872204"></a><a name="_Toc115417075"></a><span
  style='mso-bookmark:_Toc193871673'><span style='mso-bookmark:_Toc193871428'><span
  style='mso-bookmark:_Toc191662106'><span style='mso-bookmark:_Toc152605074'><span
! style='mso-bookmark:_Toc115416139'>3.33. Windows Logon Caching vs. Kerberos
! Logons</span></span></span></span></span></h2>
  
  <p class=MsoNormal>If you are a site which utilizes MIT/Heimdal Kerberos
  principals to logon to Windows via a cross-realm relationship with a
***************
*** 3008,3061 ****
  name="_Toc139993124"></a><a name="_Toc126872205"></a><a name="_Toc115417076"></a><span
  style='mso-bookmark:_Toc193871674'><span style='mso-bookmark:_Toc193871429'><span
  style='mso-bookmark:_Toc191662107'><span style='mso-bookmark:_Toc152605075'><span
! style='mso-bookmark:_Toc115416140'><span style='mso-fareast-font-family:"Times New Roman"'>3.34.
! Initial Server Preferences</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>VLDB and File Server Preferences can now be provided initial
  values using registry keys.&nbsp; This is useful for managed machines in a
  Windows domain which are centrally located (e.g., in a computing lab.)&nbsp;
  See <a href="#_Appendix_A:_Registry_Values"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>Appendix A</span></span></a>
! for details on the &quot;<a href="#_Regkey:_[HKLMSOFTWAREOpenAFSClie_2"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>Server Preferences</span></span></a>&quot; keys.</p>
  
  <h2><a name="_Toc193871675"></a><a name="_Toc193871430"></a><a
  name="_Toc191662108"></a><a name="_Toc152605076"></a><a name="_Toc115416141"></a><a
  name="_Toc139993125"></a><a name="_Toc126872206"></a><a name="_Toc115417077"></a><span
  style='mso-bookmark:_Toc193871675'><span style='mso-bookmark:_Toc193871430'><span
  style='mso-bookmark:_Toc191662108'><span style='mso-bookmark:_Toc152605076'><span
! style='mso-bookmark:_Toc115416141'><span style='mso-fareast-font-family:"Times New Roman"'>3.35.
! File Timestamps</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client reports timestamps on files stored in AFS
  in UTC all year round.&nbsp; In locales with daylight savings time, previous
  versions of AFS for Windows reported the time when DST is active as
! UTC+1.&nbsp; This was done to preserve the relative local time for the
! user.&nbsp; A file stored at 11:00am EST in January would be reported as having
! been stored at 11:00am EDT in June.&nbsp; Unfortunately, this has the negative
! side effect of changing the reported timestamp from 16:00UTC to 15:00UTC.&nbsp;
! Since Windows treats all file times in UTC, data synchronization applications
! which rely on the timestamp would believe that all files stored in AFS had
! changed.</p>
  
  <p class=MsoNormal>It should be noted that UNIX based operating systems (such
! as Solaris) do not appear to report file times to applications in UTC.&nbsp;
! They do preserve the relative local time.&nbsp; This may confuse some users who
! are used to being able to compare the timestamp in an UNIX shell with the
! timestamp from the Windows explorer.&nbsp; During DST, these two times will no
! longer agree even though they are in fact representing the same moment in time.</p>
  
  <h2><a name="_Toc193871676"></a><a name="_Toc193871431"></a><a
  name="_Toc191662109"></a><a name="_Toc152605077"></a><a name="_Toc115416142"></a><a
  name="_Toc139993126"></a><a name="_Toc126872207"></a><a name="_Toc115417078"></a><span
  style='mso-bookmark:_Toc193871676'><span style='mso-bookmark:_Toc193871431'><span
  style='mso-bookmark:_Toc191662109'><span style='mso-bookmark:_Toc152605077'><span
! style='mso-bookmark:_Toc115416142'><span style='mso-fareast-font-family:"Times New Roman"'>3.36.
! Windows RPC client support must be installed</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'> <o:p></o:p></span></h2>
  
  <p class=MsoNormal>If the installer refuses to install and complains about an
  RPC configuration error, check to ensure that the following registry entries
--- 3153,3201 ----
  name="_Toc139993124"></a><a name="_Toc126872205"></a><a name="_Toc115417076"></a><span
  style='mso-bookmark:_Toc193871674'><span style='mso-bookmark:_Toc193871429'><span
  style='mso-bookmark:_Toc191662107'><span style='mso-bookmark:_Toc152605075'><span
! style='mso-bookmark:_Toc115416140'>3.34. Initial Server Preferences</span></span></span></span></span></h2>
  
  <p class=MsoNormal>VLDB and File Server Preferences can now be provided initial
  values using registry keys.&nbsp; This is useful for managed machines in a
  Windows domain which are centrally located (e.g., in a computing lab.)&nbsp;
  See <a href="#_Appendix_A:_Registry_Values"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>Appendix A</span></span></a> for details on the
! &quot;<a href="#_Regkey:_[HKLMSOFTWAREOpenAFSClie_2"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>Server Preferences</span></span></a>&quot; keys.</p>
  
  <h2><a name="_Toc193871675"></a><a name="_Toc193871430"></a><a
  name="_Toc191662108"></a><a name="_Toc152605076"></a><a name="_Toc115416141"></a><a
  name="_Toc139993125"></a><a name="_Toc126872206"></a><a name="_Toc115417077"></a><span
  style='mso-bookmark:_Toc193871675'><span style='mso-bookmark:_Toc193871430'><span
  style='mso-bookmark:_Toc191662108'><span style='mso-bookmark:_Toc152605076'><span
! style='mso-bookmark:_Toc115416141'>3.35. File Timestamps</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client reports timestamps on files stored in AFS
  in UTC all year round.&nbsp; In locales with daylight savings time, previous
  versions of AFS for Windows reported the time when DST is active as
! UTC+1.&nbsp; This was done to preserve the relative local time for the user.&nbsp;
! A file stored at 11:00am EST in January would be reported as having been stored
! at 11:00am EDT in June.&nbsp; Unfortunately, this has the negative side effect
! of changing the reported timestamp from 16:00UTC to 15:00UTC.&nbsp; Since
! Windows treats all file times in UTC, data synchronization applications which
! rely on the timestamp would believe that all files stored in AFS had changed.</p>
  
  <p class=MsoNormal>It should be noted that UNIX based operating systems (such
! as Solaris) do not appear to report file times to applications in UTC.&nbsp; They
! do preserve the relative local time.&nbsp; This may confuse some users who are
! used to being able to compare the timestamp in an UNIX shell with the timestamp
! from the Windows explorer.&nbsp; During DST, these two times will no longer
! agree even though they are in fact representing the same moment in time.</p>
  
  <h2><a name="_Toc193871676"></a><a name="_Toc193871431"></a><a
  name="_Toc191662109"></a><a name="_Toc152605077"></a><a name="_Toc115416142"></a><a
  name="_Toc139993126"></a><a name="_Toc126872207"></a><a name="_Toc115417078"></a><span
  style='mso-bookmark:_Toc193871676'><span style='mso-bookmark:_Toc193871431'><span
  style='mso-bookmark:_Toc191662109'><span style='mso-bookmark:_Toc152605077'><span
! style='mso-bookmark:_Toc115416142'>3.36. Windows RPC client support must be
! installed</span></span></span></span></span> </h2>
  
  <p class=MsoNormal>If the installer refuses to install and complains about an
  RPC configuration error, check to ensure that the following registry entries
***************
*** 3070,3111 ****
  <p class=preformattedtext>&nbsp;&nbsp; HKLM
  &quot;SOFTWARE\Microsoft\RPC\ClientProtocols&quot; &quot;ncadg_ip_udp&quot;</p>
  
! <p class=preformattedtext>&nbsp;&nbsp; HKLM
! &quot;SOFTWARE\Microsoft\RPC\ClientProtocols&quot; &quot;ncacn_http&quot;</p>
  
  <h2><a name="_Toc193871677"></a><a name="_Toc193871432"></a><a
  name="_Toc191662110"></a><a name="_Toc152605078"></a><a name="_Toc115416143"></a><a
  name="_Toc139993127"></a><a name="_Toc126872208"></a><a name="_Toc115417079"></a><span
  style='mso-bookmark:_Toc193871677'><span style='mso-bookmark:_Toc193871432'><span
  style='mso-bookmark:_Toc191662110'><span style='mso-bookmark:_Toc152605078'><span
! style='mso-bookmark:_Toc115416143'><span style='mso-fareast-font-family:"Times New Roman"'>3.37.
! Generating Minidumps of the OpenAFS Client Service</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>OpenAFS 1.4 added a new command, &quot;fs
  minidump&quot;.&nbsp; This command can be used at any time to generate a mini
! dump file containing the current stack of the afsd_service.exe
! process.&nbsp;&nbsp; This output can be very helpful when debugging the AFS
! Client Service when it is unresponsive to SMB/CIFS requests.</p>
  
  <h2><a name="_Toc193871678"></a><a name="_Toc193871433"></a><a
  name="_Toc191662111"></a><a name="_Toc152605079"></a><a name="_Toc115416144"></a><a
  name="_Toc139993128"></a><a name="_Toc126872209"></a><a name="_Toc115417080"></a><span
  style='mso-bookmark:_Toc193871678'><span style='mso-bookmark:_Toc193871433'><span
  style='mso-bookmark:_Toc191662111'><span style='mso-bookmark:_Toc152605079'><span
! style='mso-bookmark:_Toc115416144'><span style='mso-fareast-font-family:"Times New Roman"'>3.38.
! AFS Client Universally Unique Identifiers (UUIDs) vs. System Cloning</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client implements Universally Unique Identifiers
! (UUIDs).&nbsp; They are used to provide the AFS file server with a method of identifying
! the client that is independent of IP address.&nbsp; This permits the AFS file
! server to track mobile clients or those behind Network Address Translators when
! they move from address to address or port to port. Tracking the client improves
! client performance by permitting callback state to be maintained across
! location changes. The UUID is generated when the AFSCache file is created and
! is maintained as long as the contents of the AFSCache file are valid.&nbsp; The
! UUID is stored in the AFSCache file.&nbsp;</p>
  
  <p class=MsoNormal>When cloning machines that have Windows AFS client installed
  it is necessary to generate a new UUID for each client. This will be done
--- 3210,3249 ----
  <p class=preformattedtext>&nbsp;&nbsp; HKLM
  &quot;SOFTWARE\Microsoft\RPC\ClientProtocols&quot; &quot;ncadg_ip_udp&quot;</p>
  
! <p class=preformattedtext>&nbsp;&nbsp; HKLM &quot;SOFTWARE\Microsoft\RPC\ClientProtocols&quot;
! &quot;ncacn_http&quot;</p>
  
  <h2><a name="_Toc193871677"></a><a name="_Toc193871432"></a><a
  name="_Toc191662110"></a><a name="_Toc152605078"></a><a name="_Toc115416143"></a><a
  name="_Toc139993127"></a><a name="_Toc126872208"></a><a name="_Toc115417079"></a><span
  style='mso-bookmark:_Toc193871677'><span style='mso-bookmark:_Toc193871432'><span
  style='mso-bookmark:_Toc191662110'><span style='mso-bookmark:_Toc152605078'><span
! style='mso-bookmark:_Toc115416143'>3.37. Generating Minidumps of the OpenAFS
! Client Service</span></span></span></span></span></h2>
  
  <p class=MsoNormal>OpenAFS 1.4 added a new command, &quot;fs
  minidump&quot;.&nbsp; This command can be used at any time to generate a mini
! dump file containing the current stack of the afsd_service.exe process.&nbsp;&nbsp;
! This output can be very helpful when debugging the AFS Client Service when it
! is unresponsive to SMB/CIFS requests.</p>
  
  <h2><a name="_Toc193871678"></a><a name="_Toc193871433"></a><a
  name="_Toc191662111"></a><a name="_Toc152605079"></a><a name="_Toc115416144"></a><a
  name="_Toc139993128"></a><a name="_Toc126872209"></a><a name="_Toc115417080"></a><span
  style='mso-bookmark:_Toc193871678'><span style='mso-bookmark:_Toc193871433'><span
  style='mso-bookmark:_Toc191662111'><span style='mso-bookmark:_Toc152605079'><span
! style='mso-bookmark:_Toc115416144'>3.38. AFS Client Universally Unique
! Identifiers (UUIDs) vs. System Cloning</span></span></span></span></span></h2>
  
  <p class=MsoNormal>The OpenAFS Client implements Universally Unique Identifiers
! (UUIDs).&nbsp; They are used to provide the AFS file server with a method of
! identifying the client that is independent of IP address.&nbsp; This permits
! the AFS file server to track mobile clients or those behind Network Address
! Translators when they move from address to address or port to port. Tracking
! the client improves client performance by permitting callback state to be
! maintained across location changes. The UUID is generated when the AFSCache
! file is created and is maintained as long as the contents of the AFSCache file
! are valid.&nbsp; The UUID is stored in the AFSCache file.&nbsp;</p>
  
  <p class=MsoNormal>When cloning machines that have Windows AFS client installed
  it is necessary to generate a new UUID for each client. This will be done
***************
*** 3118,3126 ****
  
  <p class=MsoNormal>For lab environments that wish to erase all cached data on
  each restart, the <a href="#_Toc170268938"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>NonPersistentCaching</span></span></a>
! option will disable the use of the persistent cache file. As a side effect, a
! new UUID will be generated for the AFS client service on each restart.</p>
  
  <p class=MsoNormal>When a Windows system is cloned, the Microsoft Loopback
  Adapter will be disabled in the cloned system.<span style='mso-spacerun:yes'> 
--- 3256,3265 ----
  
  <p class=MsoNormal>For lab environments that wish to erase all cached data on
  each restart, the <a href="#_Toc170268938"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>NonPersistentCaching</span></span></a> option will
! disable the use of the persistent cache file. As a side effect, a new UUID will
! be generated for the AFS client service on each restart.</p>
  
  <p class=MsoNormal>When a Windows system is cloned, the Microsoft Loopback
  Adapter will be disabled in the cloned system.<span style='mso-spacerun:yes'> 
***************
*** 3132,3150 ****
  installer by performing an administrative install via <i style='mso-bidi-font-style:
  normal'>msiexec.exe /a</i>.</p>
  
! <h2><a name="_Toc193871679"></a><a name="_Toc193871434"></a><a
! name="_Toc139993129"></a><a name="_Toc152605080"></a><a name="_Toc191662112"><span
! style='mso-bookmark:_Toc152605080'><span style='mso-bookmark:_Toc139993129'><span
! style='mso-bookmark:_Toc193871434'><span style='mso-bookmark:_Toc193871679'><span
! style='mso-fareast-font-family:"Times New Roman"'>3.39. Delayed Write Errors
! with Microsoft Office Applications</span></span></span></span></span></a><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoBodyText>Microsoft Office makes heavy use of asynchronous
! input/output methods for reading and writing to file streams.&nbsp; This can
! result in hundreds of requests being simultaneously queued for service by the
! CIFS client with a fixed timeout period.&nbsp; As the AFS CIFS server is local
! to the machine the Windows CIFS client believes that it can respond almost
  instantaneously to write requests as the actual writing to the AFS file server
  is performed by a background daemon thread.&nbsp; When the actual network
  bandwidth to the AFS file server is slow and the file size is large it is
--- 3271,3287 ----
  installer by performing an administrative install via <i style='mso-bidi-font-style:
  normal'>msiexec.exe /a</i>.</p>
  
! <h2><a name="_Toc191662112"></a><a name="_Toc152605080"></a><a
! name="_Toc139993129"></a><a name="_Toc193871434"></a><a name="_Toc193871679"><span
! style='mso-bookmark:_Toc193871434'><span style='mso-bookmark:_Toc139993129'><span
! style='mso-bookmark:_Toc152605080'><span style='mso-bookmark:_Toc191662112'>3.39.
! Delayed Write Errors with Microsoft Office Applications</span></span></span></span></a></h2>
  
  <p class=MsoBodyText>Microsoft Office makes heavy use of asynchronous
! input/output methods for reading and writing to file streams.&nbsp; This can result
! in hundreds of requests being simultaneously queued for service by the CIFS
! client with a fixed timeout period.&nbsp; As the AFS CIFS server is local to
! the machine the Windows CIFS client believes that it can respond almost
  instantaneously to write requests as the actual writing to the AFS file server
  is performed by a background daemon thread.&nbsp; When the actual network
  bandwidth to the AFS file server is slow and the file size is large it is
***************
*** 3156,3203 ****
  
  <p class=MsoBodyText>The CIFS session timeout defaults to 45 seconds and can be
  increased by modifying the <a href="#_Value:_ConnDeadTimeout"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>registry</span></span></a>. </p>
  
  <p class=MsoBodyText>Beginning with the 1.5.33 release, the performance
  characteristics of SMB Write Data operations can be adjusted.<span
! style='mso-spacerun:yes'>  </span>In prior releases all writes were performed using
! a restricted asynchronous store model in which only one asynchronous store
! operation per file can be performed at a time.<span style='mso-spacerun:yes'> 
! </span>The reason for this restriction is limit the amount of data the cache
! manager will accept without it having been written to the file server.<span
! style='mso-spacerun:yes'>  </span>If too much unwritten data is accepted, the
! file close operation will block until all of the unwritten data is output and
! this could trigger a CIFS client disconnect.<span style='mso-spacerun:yes'> 
! </span></p>
  
  <p class=MsoBodyText>Prior to 1.5.33 the size of the asynchronous store was
  always equal to the chunk size which was often too large for low bandwidth
  connections.<span style='mso-spacerun:yes'>  </span>The asynchronous store size
  now defaults to 32KB and is configurable using the <a
  href="#_Value:_SMBAsyncStoreSize"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>SMBAsyncStoreSize</span></span></a>
! registry value.<span style='mso-spacerun:yes'>  </span>Asynchronous store operations
! can also be disabled using the <a href="#_Value:_EnableSMBAsyncStore"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>EnableSMBAsyncStore</span></span></a> registry value in
! which case all writes received by the cache manager block until the Rx
! StoreData operation completes.</p>
  
  <h2><a name="_Toc193871680"></a><a name="_Toc193871435"></a><a
  name="_Toc191662113"></a><a name="_Toc152605081"></a><a name="_Toc139993130"><span
  style='mso-bookmark:_Toc152605081'><span style='mso-bookmark:_Toc191662113'><span
! style='mso-bookmark:_Toc193871435'><span style='mso-bookmark:_Toc193871680'><span
! style='mso-fareast-font-family:"Times New Roman"'>3.40. Global Drives (aka </span></span></span></span></span></a><st1:Street
! w:st="on"><st1:address w:st="on"><span style='mso-bookmark:_Toc193871680'><span
!   style='mso-bookmark:_Toc193871435'><span style='mso-bookmark:_Toc191662113'><span
!   style='mso-bookmark:_Toc152605081'><span style='mso-fareast-font-family:"Times New Roman"'>Service
!   Drive</span></span></span></span></span></st1:address></st1:Street><span
  style='mso-bookmark:_Toc193871680'><span style='mso-bookmark:_Toc193871435'><span
! style='mso-bookmark:_Toc191662113'><span style='mso-bookmark:_Toc152605081'><span
! style='mso-fareast-font-family:"Times New Roman"'> Letters) are no longer
! supported by Microsoft</span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoBodyText>The Global DriveAuto-mount feature has been deprecated due
  to the following Microsoft KB article.</p>
--- 3293,3338 ----
  
  <p class=MsoBodyText>The CIFS session timeout defaults to 45 seconds and can be
  increased by modifying the <a href="#_Value:_ConnDeadTimeout"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>registry</span></span></a>. </p>
  
  <p class=MsoBodyText>Beginning with the 1.5.33 release, the performance
  characteristics of SMB Write Data operations can be adjusted.<span
! style='mso-spacerun:yes'>  </span>In prior releases all writes were performed
! using a restricted asynchronous store model in which only one asynchronous
! store operation per file can be performed at a time.<span
! style='mso-spacerun:yes'>  </span>The reason for this restriction is limit the
! amount of data the cache manager will accept without it having been written to
! the file server.<span style='mso-spacerun:yes'>  </span>If too much unwritten
! data is accepted, the file close operation will block until all of the
! unwritten data is output and this could trigger a CIFS client disconnect.<span
! style='mso-spacerun:yes'>  </span></p>
  
  <p class=MsoBodyText>Prior to 1.5.33 the size of the asynchronous store was
  always equal to the chunk size which was often too large for low bandwidth
  connections.<span style='mso-spacerun:yes'>  </span>The asynchronous store size
  now defaults to 32KB and is configurable using the <a
  href="#_Value:_SMBAsyncStoreSize"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>SMBAsyncStoreSize</span></span></a> registry
! value.<span style='mso-spacerun:yes'>  </span>Asynchronous store operations can
! also be disabled using the <a href="#_Value:_EnableSMBAsyncStore"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>EnableSMBAsyncStore</span></span></a>
! registry value in which case all writes received by the cache manager block
! until the Rx StoreData operation completes.</p>
  
  <h2><a name="_Toc193871680"></a><a name="_Toc193871435"></a><a
  name="_Toc191662113"></a><a name="_Toc152605081"></a><a name="_Toc139993130"><span
  style='mso-bookmark:_Toc152605081'><span style='mso-bookmark:_Toc191662113'><span
! style='mso-bookmark:_Toc193871435'><span style='mso-bookmark:_Toc193871680'>3.40.
! Global Drives (aka </span></span></span></span></a><st1:Street w:st="on"><st1:address
!  w:st="on"><span style='mso-bookmark:_Toc193871680'><span style='mso-bookmark:
!   _Toc193871435'><span style='mso-bookmark:_Toc191662113'><span
!   style='mso-bookmark:_Toc152605081'>Service Drive</span></span></span></span></st1:address></st1:Street><span
  style='mso-bookmark:_Toc193871680'><span style='mso-bookmark:_Toc193871435'><span
! style='mso-bookmark:_Toc191662113'><span style='mso-bookmark:_Toc152605081'>
! Letters) are no longer supported by Microsoft</span></span></span></span></h2>
  
  <p class=MsoBodyText>The Global DriveAuto-mount feature has been deprecated due
  to the following Microsoft KB article.</p>
***************
*** 3205,3212 ****
  <p class=MsoBodyText style='text-indent:35.45pt'><a
  href="http://msdn.microsoft.com/library/en-us/dllproc/base/services_and_redirected_drives.asp"><span
  style='mso-bookmark:_Toc193871681'><span style='mso-bookmark:_Toc193871436'><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>http://msdn.microsoft.com/library/en-us/dllproc/base/services_and_redirected_drives.asp</span></span></span></span><span
  style='mso-bookmark:_Toc193871436'></span><span style='mso-bookmark:_Toc193871681'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871436"></a><a name="_Toc193871681"></a><![endif]></p>
  
--- 3340,3347 ----
  <p class=MsoBodyText style='text-indent:35.45pt'><a
  href="http://msdn.microsoft.com/library/en-us/dllproc/base/services_and_redirected_drives.asp"><span
  style='mso-bookmark:_Toc193871681'><span style='mso-bookmark:_Toc193871436'><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>http://msdn.microsoft.com/library/en-us/dllproc/base/services_and_redirected_drives.asp</span></span></span></span><span
  style='mso-bookmark:_Toc193871436'></span><span style='mso-bookmark:_Toc193871681'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871436"></a><a name="_Toc193871681"></a><![endif]></p>
  
***************
*** 3220,3232 ****
  applications should be modified to use of \\AFS\&lt;cellname&gt;\&lt;path&gt;
  instead of drive letters.</p>
  
! <h2><a name="_Toc193871682"></a><a name="_Toc193871437"></a><a
! name="_Toc139993131"></a><a name="_Toc152605082"></a><a name="_Toc191662114"><span
! style='mso-bookmark:_Toc152605082'><span style='mso-bookmark:_Toc139993131'><span
! style='mso-bookmark:_Toc193871437'><span style='mso-bookmark:_Toc193871682'><span
! style='mso-fareast-font-family:"Times New Roman"'>3.41. 64-bit Microsoft
! Windows Installations</span></span></span></span></span></a><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoBodyText>Although 64-bit Windows platforms support both 64-bit and
  32-bit applications, the OpenAFS Service installed on the machine must be
--- 3355,3365 ----
  applications should be modified to use of \\AFS\&lt;cellname&gt;\&lt;path&gt;
  instead of drive letters.</p>
  
! <h2><a name="_Toc191662114"></a><a name="_Toc152605082"></a><a
! name="_Toc139993131"></a><a name="_Toc193871437"></a><a name="_Toc193871682"><span
! style='mso-bookmark:_Toc193871437'><span style='mso-bookmark:_Toc139993131'><span
! style='mso-bookmark:_Toc152605082'><span style='mso-bookmark:_Toc191662114'>3.41.
! 64-bit Microsoft Windows Installations</span></span></span></span></a></h2>
  
  <p class=MsoBodyText>Although 64-bit Windows platforms support both 64-bit and
  32-bit applications, the OpenAFS Service installed on the machine must be
***************
*** 3244,3264 ****
  <h2><a name="_Toc193871683"></a><a name="_Toc193871438"></a><a
  name="_Toc191662115"></a><a name="_Toc152605083"></a><a name="_Toc139993132"><span
  style='mso-bookmark:_Toc152605083'><span style='mso-bookmark:_Toc191662115'><span
! style='mso-bookmark:_Toc193871438'><span style='mso-bookmark:_Toc193871683'><span
! style='mso-fareast-font-family:"Times New Roman"'>3.42. Known Issues with
! Microsoft Windows </span></span></span></span></span></a><st1:place w:st="on"><span
!  style='mso-bookmark:_Toc193871683'><span style='mso-bookmark:_Toc193871438'><span
!  style='mso-bookmark:_Toc191662115'><span style='mso-bookmark:_Toc152605083'><span
!  style='mso-fareast-font-family:"Times New Roman"'>Vista</span></span></span></span></span></st1:place><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoBodyText>OpenAFS for Windows works with Microsoft Windows Vista
  from both the command prompt and the Explorer Shell.<span
  style='mso-spacerun:yes'>  </span>When performing an upgrade from earlier
  versions of Microsoft Windows the Microsoft Loopback Adapter (MSLA) will be
  uninstalled.<span style='mso-spacerun:yes'>   </span>OpenAFS should be
! re-installed after the Microsoft Vista installation to restore the MSLA
! configuration.</p>
  
  <p class=MsoBodyText>Due to a feature change in Windows Vista’s Plug-n-Play
  network stack, during a standby/hibernate operation the MSLA is disabled just
--- 3377,3394 ----
  <h2><a name="_Toc193871683"></a><a name="_Toc193871438"></a><a
  name="_Toc191662115"></a><a name="_Toc152605083"></a><a name="_Toc139993132"><span
  style='mso-bookmark:_Toc152605083'><span style='mso-bookmark:_Toc191662115'><span
! style='mso-bookmark:_Toc193871438'><span style='mso-bookmark:_Toc193871683'>3.42.
! Known Issues with Microsoft Windows </span></span></span></span></a><st1:place
! w:st="on"><span style='mso-bookmark:_Toc193871683'><span style='mso-bookmark:
!  _Toc193871438'><span style='mso-bookmark:_Toc191662115'><span
!  style='mso-bookmark:_Toc152605083'>Vista</span></span></span></span></st1:place></h2>
  
  <p class=MsoBodyText>OpenAFS for Windows works with Microsoft Windows Vista
  from both the command prompt and the Explorer Shell.<span
  style='mso-spacerun:yes'>  </span>When performing an upgrade from earlier
  versions of Microsoft Windows the Microsoft Loopback Adapter (MSLA) will be
  uninstalled.<span style='mso-spacerun:yes'>   </span>OpenAFS should be
! re-installed after the Microsoft Vista installation to restore the MSLA configuration.</p>
  
  <p class=MsoBodyText>Due to a feature change in Windows Vista’s Plug-n-Play
  network stack, during a standby/hibernate operation the MSLA is disabled just
***************
*** 3272,3286 ****
  
  <p class=MsoBodyText>Windows Vista implements <a
  href="http://www.microsoft.com/technet/windowsvista/library/0d75f774-8514-4c9e-ac08-4c21f5c6c2d9.mspx"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>User Account Control</span></span></a> (UAC), a new
! security feature that implements least user privilege.<span
  style='mso-spacerun:yes'>  </span>With UAC, applications only run with the
  minimum required privileges.<span style='mso-spacerun:yes'>  </span>Even
  Administrator accounts run applications without the “Administrator” access
  control credentials.<span style='mso-spacerun:yes'>  </span>One side effect of
! this is that existing applications that mix user and system configuration
! capabilities must be re-written to separate those functions that require “Administrator”
  privileges into a separate process space.<span style='mso-spacerun:yes'> 
  </span>Future updates to OpenAFS will incorporate the necessary privilege
  separation, until that time some functions such as the Start and Stop Service
--- 3402,3416 ----
  
  <p class=MsoBodyText>Windows Vista implements <a
  href="http://www.microsoft.com/technet/windowsvista/library/0d75f774-8514-4c9e-ac08-4c21f5c6c2d9.mspx"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>User Account Control</span></span></a>
! (UAC), a new security feature that implements least user privilege.<span
  style='mso-spacerun:yes'>  </span>With UAC, applications only run with the
  minimum required privileges.<span style='mso-spacerun:yes'>  </span>Even
  Administrator accounts run applications without the “Administrator” access
  control credentials.<span style='mso-spacerun:yes'>  </span>One side effect of
! this is that existing applications that mix user and system configuration capabilities
! must be re-written to separate those functions that require “Administrator”
  privileges into a separate process space.<span style='mso-spacerun:yes'> 
  </span>Future updates to OpenAFS will incorporate the necessary privilege
  separation, until that time some functions such as the Start and Stop Service
***************
*** 3295,3317 ****
  
  <p class=MsoBodyText>The help files provided with OpenAFS are in .HLP format. <a
  href="http://support.microsoft.com/kb/917607"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>Windows Vista
! does not include a help engine for this format.</span></span></a> </p>
  
  <h2><a name="_Toc115416145"></a><a name="_Toc193871684"></a><a
  name="_Toc193871439"></a><a name="_Toc191662116"></a><a name="_Toc139993133"></a><a
  name="_Toc126872210"></a><a name="_Toc115417081"></a><span style='mso-bookmark:
  _Toc115416145'><span style='mso-bookmark:_Toc193871684'><span style='mso-bookmark:
! _Toc193871439'><span style='mso-bookmark:_Toc191662116'><span style='mso-fareast-font-family:
! "Times New Roman"'>3.43. New AFS Share Name Syntax Provides Direct Access to
! Volumes</span></span></span></span></span><span style='mso-bookmark:_Toc115416145'><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></span></h2>
  
  <p class=MsoBodyText><span style='mso-bookmark:_Toc115416145'>Starting with the
  1.5.21 release of OpenAFS for Windows, the following syntax can be used to
  access any volume in any cell without requiring the creation of a mount point.</span></p>
  
! <p class=MsoBodyText style='margin-left:.5in'><span style='mso-bookmark:_Toc115416145'>\\AFS\&lt;cell&gt;&lt;mount
  point type&gt;&lt;volume&gt;\</span></p>
  
  <p class=MsoBodyText><span style='mso-bookmark:_Toc115416145'>Where
--- 3425,3446 ----
  
  <p class=MsoBodyText>The help files provided with OpenAFS are in .HLP format. <a
  href="http://support.microsoft.com/kb/917607"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>Windows Vista does not include a help engine for this
! format.</span></span></a> </p>
  
  <h2><a name="_Toc115416145"></a><a name="_Toc193871684"></a><a
  name="_Toc193871439"></a><a name="_Toc191662116"></a><a name="_Toc139993133"></a><a
  name="_Toc126872210"></a><a name="_Toc115417081"></a><span style='mso-bookmark:
  _Toc115416145'><span style='mso-bookmark:_Toc193871684'><span style='mso-bookmark:
! _Toc193871439'><span style='mso-bookmark:_Toc191662116'>3.43. New AFS Share
! Name Syntax Provides Direct Access to Volumes</span></span></span></span></h2>
  
  <p class=MsoBodyText><span style='mso-bookmark:_Toc115416145'>Starting with the
  1.5.21 release of OpenAFS for Windows, the following syntax can be used to
  access any volume in any cell without requiring the creation of a mount point.</span></p>
  
! <p class=MsoBodyText style='margin-left:36.0pt'><span style='mso-bookmark:_Toc115416145'>\\AFS\&lt;cell&gt;&lt;mount
  point type&gt;&lt;volume&gt;\</span></p>
  
  <p class=MsoBodyText><span style='mso-bookmark:_Toc115416145'>Where
***************
*** 3331,3349 ****
  <p class=MsoBodyText><span style='mso-bookmark:_Toc115416145'><span
  style='mso-tab-count:1'>            </span>\\AFS\athena.mit.edu# 537235559\</span></p>
  
! <h2><span style='mso-bookmark:_Toc115416145'><a name="_Toc193871685"></a><a
! name="_Toc193871440"></a><a name="_Toc191662117"><span style='mso-bookmark:
! _Toc193871440'><span style='mso-bookmark:_Toc193871685'><span style='mso-fareast-font-family:
! "Times New Roman"'>3.44. Differences between Windows and UNIX “fs examine”</span></span></span></a></span><span
! style='mso-bookmark:_Toc115416145'><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></span></h2>
  
  <p class=MsoBodyText><span style='mso-bookmark:_Toc115416145'>The OpenAFS for
  Windows version of “fs examine” provide two additional lines of output when
! compared to the UNIX implementation.<span style='mso-spacerun:yes'> 
! </span>These lines include the owner and group information for the file as well
! as the volume status.<span style='mso-spacerun:yes'>  </span>The Windows output
! will also indicate the type of object {File, Directory, Mountpoint, Symlink, …}
! that was examined.</span></p>
  
  <pre><span style='mso-bookmark:_Toc115416145'>[C:\]fs examine \\afs\athena#user.jaltman</span></pre><pre><span
  style='mso-bookmark:_Toc115416145'>Directory \\afs\athena#user.jaltman (537235559.1.1) contained in cell athena.mit.edu</span></pre><pre><span
--- 3460,3477 ----
  <p class=MsoBodyText><span style='mso-bookmark:_Toc115416145'><span
  style='mso-tab-count:1'>            </span>\\AFS\athena.mit.edu# 537235559\</span></p>
  
! <h2><span style='mso-bookmark:_Toc115416145'><a name="_Toc191662117"></a><a
! name="_Toc193871440"></a><a name="_Toc193871685"><span style='mso-bookmark:
! _Toc193871440'><span style='mso-bookmark:_Toc191662117'>3.44. Differences
! between Windows and UNIX “fs examine”</span></span></a></span></h2>
  
  <p class=MsoBodyText><span style='mso-bookmark:_Toc115416145'>The OpenAFS for
  Windows version of “fs examine” provide two additional lines of output when
! compared to the UNIX implementation.<span style='mso-spacerun:yes'>  </span>These
! lines include the owner and group information for the file as well as the
! volume status.<span style='mso-spacerun:yes'>  </span>The Windows output will
! also indicate the type of object {File, Directory, Mountpoint, Symlink, …} that
! was examined.</span></p>
  
  <pre><span style='mso-bookmark:_Toc115416145'>[C:\]fs examine \\afs\athena#user.jaltman</span></pre><pre><span
  style='mso-bookmark:_Toc115416145'>Directory \\afs\athena#user.jaltman (537235559.1.1) contained in cell athena.mit.edu</span></pre><pre><span
***************
*** 3356,3366 ****
  normal'><o:p></o:p></b></span></pre>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='mso-bookmark:_Toc115416145'><a name="_Toc193871686"></a><a
! name="_Toc193871441"></a><a name="_Toc191662118"><span style='mso-bookmark:
! _Toc193871441'><span style='mso-bookmark:_Toc193871686'><span style='mso-fareast-font-family:
! "Times New Roman"'>3.45. Literal evaluation of AFS objects via fs commands</span></span></span></a></span><span
! style='mso-bookmark:_Toc115416145'><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='mso-bookmark:_Toc115416145'>Beginning with the 1.5.31 release, the fs
--- 3484,3493 ----
  normal'><o:p></o:p></b></span></pre>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='mso-bookmark:_Toc115416145'><a name="_Toc191662118"></a><a
! name="_Toc193871441"></a><a name="_Toc193871686"><span style='mso-bookmark:
! _Toc193871441'><span style='mso-bookmark:_Toc191662118'>3.45. Literal
! evaluation of AFS objects via fs commands</span></span></a></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='mso-bookmark:_Toc115416145'>Beginning with the 1.5.31 release, the fs
***************
*** 3373,3383 ****
  and not the object that is the target of the symlink or mountpoint.</span></p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='mso-bookmark:_Toc115416145'><a name="_Toc193871687"></a><a
! name="_Toc193871442"></a><a name="_Toc191662119"><span style='mso-bookmark:
! _Toc193871442'><span style='mso-bookmark:_Toc193871687'><span style='mso-fareast-font-family:
! "Times New Roman"'>3.46. Out of Quota errors</span></span></span></a></span><span
! style='mso-bookmark:_Toc115416145'><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='mso-bookmark:_Toc115416145'>Prior to the 1.5.31 release, out of quota
--- 3500,3509 ----
  and not the object that is the target of the symlink or mountpoint.</span></p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='mso-bookmark:_Toc115416145'><a name="_Toc191662119"></a><a
! name="_Toc193871442"></a><a name="_Toc193871687"><span style='mso-bookmark:
! _Toc193871442'><span style='mso-bookmark:_Toc191662119'>3.46. Out of Quota
! errors</span></span></a></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='mso-bookmark:_Toc115416145'>Prior to the 1.5.31 release, out of quota
***************
*** 3391,3399 ****
  style='mso-bookmark:_Toc115416145'><a name="_Toc193871688"></a><a
  name="_Toc193871443"></a><a name="_Toc191662120"></a><a name="_4._How_to"></a><span
  style='mso-bookmark:_Toc193871688'><span style='mso-bookmark:_Toc193871443'><span
! style='mso-bookmark:_Toc191662120'><span style='mso-fareast-font-family:"Times New Roman"'>4.
! How to Debug Problems with OpenAFS for Windows</span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h1>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>OpenAFS
  for Windows provides a wide range of tools to assist you in debugging
--- 3517,3524 ----
  style='mso-bookmark:_Toc115416145'><a name="_Toc193871688"></a><a
  name="_Toc193871443"></a><a name="_Toc191662120"></a><a name="_4._How_to"></a><span
  style='mso-bookmark:_Toc193871688'><span style='mso-bookmark:_Toc193871443'><span
! style='mso-bookmark:_Toc191662120'>4. How to Debug Problems with OpenAFS for
! Windows</span></span></span></span></h1>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>OpenAFS
  for Windows provides a wide range of tools to assist you in debugging
***************
*** 3404,3421 ****
  name="_Toc193871689"></a><a name="_Toc193871444"></a><a name="_Toc191662121"></a><a
  name="_Toc139993134"></a><a name="_Toc126872211"></a><a name="_Toc115417082"></a><span
  style='mso-bookmark:_Toc193871689'><span style='mso-bookmark:_Toc193871444'><span
! style='mso-bookmark:_Toc191662121'><span style='mso-fareast-font-family:"Times New Roman"'>4.1.
! pioctl debugging (</span></span></span></span><a href="#_Value:_IoctlDebug"><span
! style='mso-bookmark:_Toc193871689'><span style='mso-bookmark:_Toc193871444'><span
! style='mso-bookmark:_Toc191662121'><span class=Heading1Char><span
! style='mso-fareast-font-family:"Times New Roman";font-weight:normal;text-decoration:
! none;text-underline:none'>IoctlDebug</span></span></span></span></span><span
  style='mso-bookmark:_Toc193871689'><span style='mso-bookmark:_Toc193871444'><span
  style='mso-bookmark:_Toc191662121'></span></span></span></a><span
  style='mso-bookmark:_Toc193871689'><span style='mso-bookmark:_Toc193871444'><span
! style='mso-bookmark:_Toc191662121'><span style='mso-fareast-font-family:"Times New Roman"'>
! registry key)</span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>pioctl
  (path-based ioctl) calls are used by various tools to communicate with the AFS
--- 3529,3543 ----
  name="_Toc193871689"></a><a name="_Toc193871444"></a><a name="_Toc191662121"></a><a
  name="_Toc139993134"></a><a name="_Toc126872211"></a><a name="_Toc115417082"></a><span
  style='mso-bookmark:_Toc193871689'><span style='mso-bookmark:_Toc193871444'><span
! style='mso-bookmark:_Toc191662121'>4.1. pioctl debugging (</span></span></span><a
! href="#_Value:_IoctlDebug"><span style='mso-bookmark:_Toc193871689'><span
! style='mso-bookmark:_Toc193871444'><span style='mso-bookmark:_Toc191662121'><span
! class=Heading1Char><span style='font-weight:normal;text-decoration:none;
! text-underline:none'>IoctlDebug</span></span></span></span></span><span
  style='mso-bookmark:_Toc193871689'><span style='mso-bookmark:_Toc193871444'><span
  style='mso-bookmark:_Toc191662121'></span></span></span></a><span
  style='mso-bookmark:_Toc193871689'><span style='mso-bookmark:_Toc193871444'><span
! style='mso-bookmark:_Toc191662121'> registry key)</span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>pioctl
  (path-based ioctl) calls are used by various tools to communicate with the AFS
***************
*** 3424,3472 ****
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setting/querying
  tokens&nbsp; (tokens.exe, aklog.exe, afscreds.exe)</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setting/querying
  ACLs </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setting/querying
  cache parameters</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>flushing
  files or volumes</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setting/querying
  server preferences</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>querying
  path location</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>checking
  the status of servers and volumes</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setting/querying
  the sysname list</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>pioctl
--- 3546,3594 ----
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setting/querying
  tokens&nbsp; (tokens.exe, aklog.exe, afscreds.exe)</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setting/querying
  ACLs </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setting/querying
  cache parameters</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>flushing
  files or volumes</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setting/querying
  server preferences</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>querying
  path location</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>checking
  the status of servers and volumes</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setting/querying
  the sysname list</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>pioctl
***************
*** 3488,3504 ****
  be set.&nbsp; Then any of the commands that perform pioctl calls should be
  executed from the command prompt.&nbsp; With this key set the pioctl library
  will generate debugging output to stderr.&nbsp; The output will contain the
! Win32 API calls executed along with their most important parameters and their return
! code.&nbsp;&nbsp; The MSDN Library and the Microsoft KnowledgeBase can be used
! as a reference to help you determine the configuration probem with your system.</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871690"></a><a name="_Toc193871445"></a><a name="_Toc191662122"></a><a
  name="_Toc139993135"></a><a name="_Toc126872212"></a><a name="_Toc115417083"></a><span
  style='mso-bookmark:_Toc193871690'><span style='mso-bookmark:_Toc193871445'><span
! style='mso-bookmark:_Toc191662122'><span style='mso-fareast-font-family:"Times New Roman"'>4.2.
! afsd_service initialization log (%WinDir%\TEMP\afsd_init.log)</span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Every
  time the AFS Client Service starts it appends data about its progress and
--- 3610,3625 ----
  be set.&nbsp; Then any of the commands that perform pioctl calls should be
  executed from the command prompt.&nbsp; With this key set the pioctl library
  will generate debugging output to stderr.&nbsp; The output will contain the
! Win32 API calls executed along with their most important parameters and their
! return code.&nbsp;&nbsp; The MSDN Library and the Microsoft KnowledgeBase can
! be used as a reference to help you determine the configuration probem with your
! system.</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871690"></a><a name="_Toc193871445"></a><a name="_Toc191662122"></a><a
  name="_Toc139993135"></a><a name="_Toc126872212"></a><a name="_Toc115417083"></a><span
  style='mso-bookmark:_Toc193871690'><span style='mso-bookmark:_Toc193871445'><span
! style='mso-bookmark:_Toc191662122'>4.2. afsd_service initialization log (%WinDir%\TEMP\afsd_init.log)</span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Every
  time the AFS Client Service starts it appends data about its progress and
***************
*** 3513,3532 ****
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  <i><a href="#_Value___:_MaxLogSize"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>MaxLogSize</span></span></a></i>
! registry value determines the maximum size of the %WINDIR%\TEMP\afsd_init.log
! file.&nbsp; If the file is larger than this value when OpenAFS Client Service
! starts, the file will be reset to 0 bytes.&nbsp; If value is set to 0, the file
! will be allowed to grow indefinitely.</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871691"></a><a name="_Toc193871446"></a><a name="_Toc191662123"></a><a
  name="_Toc139993136"></a><a name="_Toc126872213"></a><a name="_Toc115417084"></a><span
  style='mso-bookmark:_Toc193871691'><span style='mso-bookmark:_Toc193871446'><span
! style='mso-bookmark:_Toc191662123'><span style='mso-fareast-font-family:"Times New Roman"'>4.3.
! afsd_service debug logs (fs trace {-on, -off, -dump}
! -&gt;%WinDir%\TEMP\afsd.log)</span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>When
  attempting to debug the behavior of the SMB/CIFS Server and the Cache Manager
--- 3634,3652 ----
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  <i><a href="#_Value___:_MaxLogSize"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>MaxLogSize</span></span></a></i> registry value
! determines the maximum size of the %WINDIR%\TEMP\afsd_init.log file.&nbsp; If
! the file is larger than this value when OpenAFS Client Service starts, the file
! will be reset to 0 bytes.&nbsp; If value is set to 0, the file will be allowed
! to grow indefinitely.</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871691"></a><a name="_Toc193871446"></a><a name="_Toc191662123"></a><a
  name="_Toc139993136"></a><a name="_Toc126872213"></a><a name="_Toc115417084"></a><span
  style='mso-bookmark:_Toc193871691'><span style='mso-bookmark:_Toc193871446'><span
! style='mso-bookmark:_Toc191662123'>4.3. afsd_service debug logs (fs trace {-on,
! -off, -dump} -&gt;%WinDir%\TEMP\afsd.log)</span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>When
  attempting to debug the behavior of the SMB/CIFS Server and the Cache Manager
***************
*** 3534,3541 ****
  While running the AFS Client Service keeps an in memory log of many of its
  actions.&nbsp;&nbsp; The default number of actions preserved at any one time is
  5000.&nbsp; This can be adjusted with the <a href="#_Value_:_TraceBufferSize"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>registry value</span></span></a>:</p>
  
  <p class=preformattedtext style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
--- 3654,3661 ----
  While running the AFS Client Service keeps an in memory log of many of its
  actions.&nbsp;&nbsp; The default number of actions preserved at any one time is
  5000.&nbsp; This can be adjusted with the <a href="#_Value_:_TraceBufferSize"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>registry value</span></span></a>:</p>
  
  <p class=preformattedtext style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
***************
*** 3544,3572 ****
  REG_DWORD&nbsp; TraceBufferSize </p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>A
! restart of the service is necessary when adjusting this value.&nbsp;&nbsp; Execute
! &quot;fs trace -on&quot; to clear to the log and &quot;fs trace -dump&quot; to
! output the contents of the log to the file.</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871692"></a><a name="_Toc193871447"></a><a name="_Toc191662124"></a><a
  name="_Toc139993137"></a><a name="_Toc126872214"></a><a name="_Toc115417085"></a><span
  style='mso-bookmark:_Toc193871692'><span style='mso-bookmark:_Toc193871447'><span
! style='mso-bookmark:_Toc191662124'><span style='mso-fareast-font-family:"Times New Roman"'>4.4.
! Using SysInternal’s Debug Viewer, Process Monitor and Process Explorer Tools</span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>An
  alternatve option to the use of &quot;fs trace -dump&quot; to capture internal
  OpenAFS Client Service events is to use a tool such as Sysinternal's <a
  href="http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>Debug Viewer</span></span></a> to capture real-time
! debugging output.&nbsp; When the OpenAFS Client Service starts and Bit 2 of the
! <a href="#_Value__:_TraceOption"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>TraceOption</span></span></a>
! value in the registry is set, all trace log events are output using the Windows
! Debug Monitor interface (OutputDebugString).&nbsp; </p>
  
  <p class=preformattedtext style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
--- 3664,3692 ----
  REG_DWORD&nbsp; TraceBufferSize </p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>A
! restart of the service is necessary when adjusting this value.&nbsp;&nbsp;
! Execute &quot;fs trace -on&quot; to clear to the log and &quot;fs trace
! -dump&quot; to output the contents of the log to the file.</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871692"></a><a name="_Toc193871447"></a><a name="_Toc191662124"></a><a
  name="_Toc139993137"></a><a name="_Toc126872214"></a><a name="_Toc115417085"></a><span
  style='mso-bookmark:_Toc193871692'><span style='mso-bookmark:_Toc193871447'><span
! style='mso-bookmark:_Toc191662124'>4.4. Using SysInternal’s Debug Viewer,
! Process Monitor and Process Explorer Tools</span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>An
  alternatve option to the use of &quot;fs trace -dump&quot; to capture internal
  OpenAFS Client Service events is to use a tool such as Sysinternal's <a
  href="http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>Debug Viewer</span></span></a> to
! capture real-time debugging output.&nbsp; When the OpenAFS Client Service
! starts and Bit 2 of the <a href="#_Value__:_TraceOption"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>TraceOption</span></span></a> value
! in the registry is set, all trace log events are output using the Windows Debug
! Monitor interface (OutputDebugString).&nbsp; </p>
  
  <p class=preformattedtext style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
***************
*** 3582,3591 ****
  style='mso-bookmark:_Toc115416150'>Sysinternal’s </span><a
  href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx"><span
  style='mso-bookmark:_Toc115416150'><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>Process
! Monitor</span></span></span><span style='mso-bookmark:_Toc115416150'></span></a><span
! style='mso-bookmark:_Toc115416150'> can be use to monitor the file operations
! requested by applications and their success or failure.&nbsp;&nbsp; </span></p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>In
  Process Monitor, set a filter to include only events on file paths that refer
--- 3702,3712 ----
  style='mso-bookmark:_Toc115416150'>Sysinternal’s </span><a
  href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx"><span
  style='mso-bookmark:_Toc115416150'><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>Process Monitor</span></span></span><span
! style='mso-bookmark:_Toc115416150'></span></a><span style='mso-bookmark:_Toc115416150'>
! can be use to monitor the file operations requested by applications and their
! success or failure.&nbsp;&nbsp; </span></p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>In
  Process Monitor, set a filter to include only events on file paths that refer
***************
*** 3594,3614 ****
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Turn
  on the <i>Clock Time</i> and <i>Show Milliseconds</i> options in both tools to
! make it easier to synchronize the application requests and the resulting
! OpenAFS Client Service operations.&nbsp;&nbsp; The captured data can be stored
! to files for inclusion in <a href="#_5._Reporting_Bugs:"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>bug reports</span></span></a>.</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Sysinternal's
  <a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>Process Explorer</span></span></a> is a replacement for
! the Windows Task Manager and so much more.&nbsp; Process Explorer can be
! configured to use the DbgHelp.dll from &quot;<a
  href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>Microsoft Debugging Tools for Windows</span></span></a>&quot;
  as well as the debug symbols shipped as an optional component of the OpenAFS
  for Windows installer.&nbsp; (Options-&gt;Configure Symbols)&nbsp;&nbsp; Once
  configured the &quot;Threads&quot; tab of the process properties dialog will
--- 3715,3735 ----
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Turn
  on the <i>Clock Time</i> and <i>Show Milliseconds</i> options in both tools to
! make it easier to synchronize the application requests and the resulting OpenAFS
! Client Service operations.&nbsp;&nbsp; The captured data can be stored to files
! for inclusion in <a href="#_5._Reporting_Bugs:"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>bug reports</span></span></a>.</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Sysinternal's
  <a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>Process Explorer</span></span></a> is
! a replacement for the Windows Task Manager and so much more.&nbsp; Process
! Explorer can be configured to use the DbgHelp.dll from &quot;<a
  href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>Microsoft Debugging Tools for Windows</span></span></a>&quot;
  as well as the debug symbols shipped as an optional component of the OpenAFS
  for Windows installer.&nbsp; (Options-&gt;Configure Symbols)&nbsp;&nbsp; Once
  configured the &quot;Threads&quot; tab of the process properties dialog will
***************
*** 3617,3627 ****
  will be stuck in a call to osi_TWait().</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
! name="_Toc193871693"></a><a name="_Toc193871448"></a><a name="_Toc191662125"><span
! style='mso-bookmark:_Toc193871448'><span style='mso-bookmark:_Toc193871693'><span
! style='mso-fareast-font-family:"Times New Roman"'>4.5. Microsoft MiniDumps <br>
! (fs minidump -&gt; %WinDir%\TEMP\afsd.dmp)</span></span></span></a><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  the AFS Client Service become unresponsive to any form of communication there
--- 3738,3747 ----
  will be stuck in a call to osi_TWait().</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
! name="_Toc191662125"></a><a name="_Toc193871448"></a><a name="_Toc193871693"><span
! style='mso-bookmark:_Toc193871448'><span style='mso-bookmark:_Toc191662125'>4.5.
! Microsoft MiniDumps <br>
! (fs minidump -&gt; %WinDir%\TEMP\afsd.dmp)</span></span></a></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  the AFS Client Service become unresponsive to any form of communication there
***************
*** 3631,3642 ****
  of the threads in the AFS Client Service process.&nbsp; The most accurate
  MiniDump files will be produced after installing &quot;<a
  href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>Microsoft Debugging Tools for Windows</span></span></a>&quot;.</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  <a href="#_Toc190064189"><span class=Heading1Char><span style='font-size:14.0pt;
! text-decoration:none;text-underline:none'>MiniDumpType</span></span></a>
  registry value can be used to adjust the scope of the process information
  included within the dump file.&nbsp; By default the MiniDump only contains the
  stacks of all threads and the values of all global variables.&nbsp; A much more
--- 3751,3762 ----
  of the threads in the AFS Client Service process.&nbsp; The most accurate
  MiniDump files will be produced after installing &quot;<a
  href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>Microsoft Debugging Tools for Windows</span></span></a>&quot;.</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  <a href="#_Toc190064189"><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho";text-decoration:none;text-underline:none'>MiniDumpType</span></span></a>
  registry value can be used to adjust the scope of the process information
  included within the dump file.&nbsp; By default the MiniDump only contains the
  stacks of all threads and the values of all global variables.&nbsp; A much more
***************
*** 3649,3664 ****
  name="_Toc193871694"></a><a name="_Toc193871449"></a><a name="_Toc191662126"></a><a
  name="_Toc139993139"></a><a name="_Toc126872216"></a><a name="_Toc115417087"></a><span
  style='mso-bookmark:_Toc193871694'><span style='mso-bookmark:_Toc193871449'><span
! style='mso-bookmark:_Toc191662126'><span style='mso-fareast-font-family:"Times New Roman"'>4.6.
! Single Sign-on (Integrated Logon) debugging</span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  you are having trouble with the Integrated Logon operations it is often useful
  to be able to obtain a log of what it is attempting to do.&nbsp;&nbsp; Setting
  Bit 0 of the <a href="#_Value__:_TraceOption"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>TraceOption</span></span></a>
! registry value:</p>
  
  <p class=preformattedtext style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
--- 3769,3783 ----
  name="_Toc193871694"></a><a name="_Toc193871449"></a><a name="_Toc191662126"></a><a
  name="_Toc139993139"></a><a name="_Toc126872216"></a><a name="_Toc115417087"></a><span
  style='mso-bookmark:_Toc193871694'><span style='mso-bookmark:_Toc193871449'><span
! style='mso-bookmark:_Toc191662126'>4.6. Single Sign-on (Integrated Logon)
! debugging</span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  you are having trouble with the Integrated Logon operations it is often useful
  to be able to obtain a log of what it is attempting to do.&nbsp;&nbsp; Setting
  Bit 0 of the <a href="#_Value__:_TraceOption"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>TraceOption</span></span></a> registry value:</p>
  
  <p class=preformattedtext style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
***************
*** 3675,3683 ****
  name="_Toc193871695"></a><a name="_Toc193871450"></a><a name="_Toc191662127"></a><a
  name="_Toc139993140"></a><a name="_Toc126872217"></a><a name="_Toc115417088"></a><span
  style='mso-bookmark:_Toc193871695'><span style='mso-bookmark:_Toc193871450'><span
! style='mso-bookmark:_Toc191662127'><span style='mso-fareast-font-family:"Times New Roman"'>4.7.
! RX (AFS RPC) debugging (rxdebug)</span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  rxdebug.exe tool can be used to query a variety of information about the AFS
--- 3794,3800 ----
  name="_Toc193871695"></a><a name="_Toc193871450"></a><a name="_Toc191662127"></a><a
  name="_Toc139993140"></a><a name="_Toc126872217"></a><a name="_Toc115417088"></a><span
  style='mso-bookmark:_Toc193871695'><span style='mso-bookmark:_Toc193871450'><span
! style='mso-bookmark:_Toc191662127'>4.7. RX (AFS RPC) debugging (rxdebug)</span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  rxdebug.exe tool can be used to query a variety of information about the AFS
***************
*** 3732,3740 ****
  name="_Toc193871696"></a><a name="_Toc193871451"></a><a name="_Toc191662128"></a><a
  name="_Toc139993141"></a><a name="_Toc126872218"></a><a name="_Toc115417089"></a><span
  style='mso-bookmark:_Toc193871696'><span style='mso-bookmark:_Toc193871451'><span
! style='mso-bookmark:_Toc191662128'><span style='mso-fareast-font-family:"Times New Roman"'>4.8.
! Cache Manager debugging (cmdebug)</span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  cmdebug.exe tool can be used to query the state of the AFS Cache Manager on a
--- 3849,3855 ----
  name="_Toc193871696"></a><a name="_Toc193871451"></a><a name="_Toc191662128"></a><a
  name="_Toc139993141"></a><a name="_Toc126872218"></a><a name="_Toc115417089"></a><span
  style='mso-bookmark:_Toc193871696'><span style='mso-bookmark:_Toc193871451'><span
! style='mso-bookmark:_Toc191662128'>4.8. Cache Manager debugging (cmdebug)</span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  cmdebug.exe tool can be used to query the state of the AFS Cache Manager on a
***************
*** 3773,3789 ****
  style='mso-spacerun:yes'>       </span>print only cache configuration</p>
  
  <p class=preformattedtext style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='mso-spacerun:yes'>       </span><span lang=FR style='mso-ansi-language:
! FR'>-cellservdb<span style='mso-spacerun:yes'>  </span>print only cellservdb
! info<o:p></o:p></span></p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871697"></a><a name="_Toc193871452"></a><a name="_Toc191662129"></a><a
  name="_Toc139993142"></a><a name="_Toc126872219"></a><a name="_Toc115417090"></a><span
  style='mso-bookmark:_Toc193871697'><span style='mso-bookmark:_Toc193871452'><span
! style='mso-bookmark:_Toc191662129'><span style='mso-fareast-font-family:"Times New Roman"'>4.9.
! Persistent Cache consistency check</span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  persistent cache is stored in a Hidden System file at
--- 3888,3901 ----
  style='mso-spacerun:yes'>       </span>print only cache configuration</p>
  
  <p class=preformattedtext style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='mso-spacerun:yes'>       </span>-cellservdb<span
! style='mso-spacerun:yes'>  </span>print only cellservdb info</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871697"></a><a name="_Toc193871452"></a><a name="_Toc191662129"></a><a
  name="_Toc139993142"></a><a name="_Toc126872219"></a><a name="_Toc115417090"></a><span
  style='mso-bookmark:_Toc193871697'><span style='mso-bookmark:_Toc193871452'><span
! style='mso-bookmark:_Toc191662129'>4.9. Persistent Cache consistency check</span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  persistent cache is stored in a Hidden System file at
***************
*** 3795,3804 ****
  afsd_service.exe --validate-cache &lt;cache-path&gt;</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
! name="_Toc193871698"></a><a name="_Toc193871453"></a><a name="_Toc191662130"><span
! style='mso-bookmark:_Toc193871453'><span style='mso-bookmark:_Toc193871698'><span
! style='mso-fareast-font-family:"Times New Roman"'>4.10. Token Acquisition
! Debugging</span></span></span></a><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  you are having trouble obtaining tokens with the Network Identity Manager AFS
--- 3907,3915 ----
  afsd_service.exe --validate-cache &lt;cache-path&gt;</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
! name="_Toc191662130"></a><a name="_Toc193871453"></a><a name="_Toc193871698"><span
! style='mso-bookmark:_Toc193871453'><span style='mso-bookmark:_Toc191662130'>4.10.
! Token Acquisition Debugging</span></span></a></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  you are having trouble obtaining tokens with the Network Identity Manager AFS
***************
*** 3807,3831 ****
  (if you are using kaserver) or <i style='mso-bidi-font-style:normal'>kinit.exe</i>
  and <i style='mso-bidi-font-style:normal'>aklog.exe</i> (if you are using
  Kerberos v5.)<span style='mso-spacerun:yes'>  </span>The aklog.exe <i
! style='mso-bidi-font-style:normal'>–d</i> option will be quite helpful in
! diagnosing Kerberos v5 related problems. </p>
  
  <h1 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871699"></a><a name="_Toc193871454"></a><a name="_Toc191662131"></a><a
  name="_Toc139993143"></a><a name="_Toc126872220"></a><a name="_Toc115417113"></a><a
  name="_Toc115417091"></a><a name="_5._Reporting_Bugs"></a><span
  style='mso-bookmark:_Toc193871699'><span style='mso-bookmark:_Toc193871454'><span
! style='mso-bookmark:_Toc191662131'><span style='mso-fareast-font-family:"Times New Roman"'>5.
! Reporting Bugs</span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h1>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Bug
  reports should be sent to <a
  href="mailto:openafs-bugs@openafs.org?subject=Bug%20Report"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>openafs-bugs@openafs.org</span></span></a>.&nbsp; Please
! include as much information as possible about the issue.&nbsp; If you are
! reporting a crash, please install the debugging symbols by re-running the
  installer.&nbsp; If a dump file is available for the problem,
  %WINDIR%\TEMP\afsd.dmp, include it along with the AFS Client Trace file&nbsp;
  %WINDIR%\TEMP\afsd.log.&nbsp; The AFS Client startup log is
--- 3918,3940 ----
  (if you are using kaserver) or <i style='mso-bidi-font-style:normal'>kinit.exe</i>
  and <i style='mso-bidi-font-style:normal'>aklog.exe</i> (if you are using
  Kerberos v5.)<span style='mso-spacerun:yes'>  </span>The aklog.exe <i
! style='mso-bidi-font-style:normal'>–d</i> option will be quite helpful in diagnosing
! Kerberos v5 related problems. </p>
  
  <h1 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871699"></a><a name="_Toc193871454"></a><a name="_Toc191662131"></a><a
  name="_Toc139993143"></a><a name="_Toc126872220"></a><a name="_Toc115417113"></a><a
  name="_Toc115417091"></a><a name="_5._Reporting_Bugs"></a><span
  style='mso-bookmark:_Toc193871699'><span style='mso-bookmark:_Toc193871454'><span
! style='mso-bookmark:_Toc191662131'>5. Reporting Bugs</span></span></span></h1>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Bug
  reports should be sent to <a
  href="mailto:openafs-bugs@openafs.org?subject=Bug%20Report"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>openafs-bugs@openafs.org</span></span></a>.&nbsp;
! Please include as much information as possible about the issue.&nbsp; If you
! are reporting a crash, please install the debugging symbols by re-running the
  installer.&nbsp; If a dump file is available for the problem,
  %WINDIR%\TEMP\afsd.dmp, include it along with the AFS Client Trace file&nbsp;
  %WINDIR%\TEMP\afsd.log.&nbsp; The AFS Client startup log is
***************
*** 3838,3911 ****
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Run
  drwtsn32.exe to configure or to identify where the log and the crash dump files
  are created: </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>click
  Start &gt; Run...&nbsp; </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>type
  drwtsn32 &lt;enter&gt;. </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Select
  either a Crash Dump Type: Mini or Full. </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Clear
  Dump Symbol Table</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Clear
  Append to Existing Log file. </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Check
  Dump All Thread Contexts.</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Check
  Create Crash Dump File</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Next
  run the monitoring module of Dr. Watson: </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>click
  Start &gt; Run...</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>type
  drwatson &lt;enter&gt;. </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Once
  a crash happens, Dr. Watson generates a dump file and a report in the log file,
  including the address of the crash and the stack dump.</p>
  
--- 3947,4020 ----
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Run
  drwtsn32.exe to configure or to identify where the log and the crash dump files
  are created: </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>click
  Start &gt; Run...&nbsp; </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>type
  drwtsn32 &lt;enter&gt;. </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Select
  either a Crash Dump Type: Mini or Full. </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Clear
  Dump Symbol Table</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Clear
  Append to Existing Log file. </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Check
  Dump All Thread Contexts.</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Check
  Create Crash Dump File</p>
  
  <p class=MsoNormal style='margin-left:14.15pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Next
  run the monitoring module of Dr. Watson: </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>click
  Start &gt; Run...</p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>type
  drwatson &lt;enter&gt;. </p>
  
  <p class=MsoNormal style='margin-left:49.6pt;text-indent:-14.15pt;tab-stops:
  45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
  style='font-size:9.0pt;font-family:Symbol'>·</span><span style='font-size:7.0pt;
! font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Once
  a crash happens, Dr. Watson generates a dump file and a report in the log file,
  including the address of the crash and the stack dump.</p>
  
***************
*** 3922,3931 ****
  name="_Toc126872221"></a><a name="_Toc115417114"></a><a name="_Toc115417092"></a><a
  name="_6._How_to"></a><span style='mso-bookmark:_Toc193871700'><span
  style='mso-bookmark:_Toc193871455'><span style='mso-bookmark:_Toc191662132'><span
! style='mso-bookmark:_Toc152605095'><span style='mso-bookmark:_Toc115416156'><span
! style='mso-fareast-font-family:"Times New Roman"'>6. How to Contribute to the
! Development of OpenAFS for Windows</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h1>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Contributions
  to the development of OpenAFS for Windows are continuously needed.&nbsp;
--- 4031,4038 ----
  name="_Toc126872221"></a><a name="_Toc115417114"></a><a name="_Toc115417092"></a><a
  name="_6._How_to"></a><span style='mso-bookmark:_Toc193871700'><span
  style='mso-bookmark:_Toc193871455'><span style='mso-bookmark:_Toc191662132'><span
! style='mso-bookmark:_Toc152605095'><span style='mso-bookmark:_Toc115416156'>6.
! How to Contribute to the Development of OpenAFS for Windows</span></span></span></span></span></h1>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Contributions
  to the development of OpenAFS for Windows are continuously needed.&nbsp;
***************
*** 3938,3951 ****
  name="_Toc126872222"></a><a name="_Toc115417093"></a><span style='mso-bookmark:
  _Toc193871701'><span style='mso-bookmark:_Toc193871456'><span style='mso-bookmark:
  _Toc191662133'><span style='mso-bookmark:_Toc152605096'><span style='mso-bookmark:
! _Toc115416157'><span style='mso-fareast-font-family:"Times New Roman"'>6.1. The
! USENIX OpenAFS Fund</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'> <o:p></o:p></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  href="http://www.usenix.org/"><span style='mso-bookmark:_Toc193871702'><span
  style='mso-bookmark:_Toc193871457'><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>USENIX</span></span></span></span><span
  style='mso-bookmark:_Toc193871457'></span><span style='mso-bookmark:_Toc193871702'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871457"></a><a name="_Toc193871702"></a><![endif]>, a 501c3
  non-profit corporation, has formed the USENIX OpenAFS Fund in order to accept
--- 4045,4057 ----
  name="_Toc126872222"></a><a name="_Toc115417093"></a><span style='mso-bookmark:
  _Toc193871701'><span style='mso-bookmark:_Toc193871456'><span style='mso-bookmark:
  _Toc191662133'><span style='mso-bookmark:_Toc152605096'><span style='mso-bookmark:
! _Toc115416157'>6.1. The USENIX OpenAFS Fund</span></span></span></span></span> </h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  href="http://www.usenix.org/"><span style='mso-bookmark:_Toc193871702'><span
  style='mso-bookmark:_Toc193871457'><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>USENIX</span></span></span></span><span
  style='mso-bookmark:_Toc193871457'></span><span style='mso-bookmark:_Toc193871702'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871457"></a><a name="_Toc193871702"></a><![endif]>, a 501c3
  non-profit corporation, has formed the USENIX OpenAFS Fund in order to accept
***************
*** 3956,3966 ****
  <div>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=540
!  style='width:405.0pt;mso-cellspacing:0in;mso-yfti-tbllook:1184;mso-padding-alt:
!  0in 0in 0in 0in' hspace=0 vspace=0 height=88>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:66.0pt'>
!   <td valign=top style='padding:0in 9.0pt 0in 9.0pt;height:66.0pt'>
    <p class=MsoEnvelopeAddress>USENIX OpenAFS Fund<br>
    USENIX Association <br>
  <st1:address w:st="on"><st1:Street w:st="on">2560 Ninth St., Suite 215</st1:Street>
--- 4062,4072 ----
  <div>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=540
!  style='width:405.0pt;mso-cellspacing:0pt;mso-yfti-tbllook:1184;mso-padding-alt:
!  0pt 0pt 0pt 0pt' hspace=0 vspace=0 height=88>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:66.0pt'>
!   <td valign=top style='padding:0pt 9.0pt 0pt 9.0pt;height:66.0pt'>
    <p class=MsoEnvelopeAddress>USENIX OpenAFS Fund<br>
    USENIX Association <br>
  <st1:address w:st="on"><st1:Street w:st="on">2560 Ninth St., Suite 215</st1:Street>
***************
*** 3977,4009 ****
  can be made by sending a check, drawn on a U.S. bank, made out to the USENIX
  OpenAFS Fund or by making a <a
  href="https://db.usenix.org/cgi-bin/openafs/openafs.cgi"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>donation online</span></span></a>.</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871703"></a><a name="_Toc193871458"></a><a name="_Toc191662134"></a><a
  name="_Toc152605097"></a><a name="_Toc115417094"></a><a name="_Toc139993146"></a><a
  name="_Toc126872223"></a><span style='mso-bookmark:_Toc193871703'><span
  style='mso-bookmark:_Toc193871458'><span style='mso-bookmark:_Toc191662134'><span
! style='mso-bookmark:_Toc152605097'><span style='mso-bookmark:_Toc115417094'><span
! style='mso-fareast-font-family:"Times New Roman"'>6.2. Secure Endpoints Inc.</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'> <o:p></o:p></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  href="http://www.secure-endpoints.com/"><span style='mso-bookmark:_Toc193871704'><span
  style='mso-bookmark:_Toc193871459'><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>Secure
! Endpoints Inc.</span></span></span></span><span style='mso-bookmark:_Toc193871459'></span><span
! style='mso-bookmark:_Toc193871704'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871459"></a><a name="_Toc193871704"></a><![endif]> provides
  development and support services for OpenAFS for Windows and <a
  href="http://web.mit.edu/kerberos/"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>MIT Kerberos
! for Windows</span></span></a>. &nbsp;Donations provided to Secure Endpoints
! Inc. for the development of OpenAFS are used to cover the OpenAFS gatekeeper
! responsibilities; providing support to the OpenAFS community via the OpenAFS
! mailing lists; and furthering development of desired features that are either
! too small to be financed by development contracts.</p>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Secure
  Endpoints Inc. accepts software development agreements from organizations who
--- 4083,4115 ----
  can be made by sending a check, drawn on a U.S. bank, made out to the USENIX
  OpenAFS Fund or by making a <a
  href="https://db.usenix.org/cgi-bin/openafs/openafs.cgi"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>donation online</span></span></a>.</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871703"></a><a name="_Toc193871458"></a><a name="_Toc191662134"></a><a
  name="_Toc152605097"></a><a name="_Toc115417094"></a><a name="_Toc139993146"></a><a
  name="_Toc126872223"></a><span style='mso-bookmark:_Toc193871703'><span
  style='mso-bookmark:_Toc193871458'><span style='mso-bookmark:_Toc191662134'><span
! style='mso-bookmark:_Toc152605097'><span style='mso-bookmark:_Toc115417094'>6.2.
! Secure Endpoints Inc.</span></span></span></span></span> </h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  href="http://www.secure-endpoints.com/"><span style='mso-bookmark:_Toc193871704'><span
  style='mso-bookmark:_Toc193871459'><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>Secure Endpoints Inc.</span></span></span></span><span
! style='mso-bookmark:_Toc193871459'></span><span style='mso-bookmark:_Toc193871704'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871459"></a><a name="_Toc193871704"></a><![endif]> provides
  development and support services for OpenAFS for Windows and <a
  href="http://web.mit.edu/kerberos/"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>MIT Kerberos for Windows</span></span></a>.
! &nbsp;Donations provided to Secure Endpoints Inc. for the development of
! OpenAFS are used to cover the OpenAFS gatekeeper responsibilities; providing
! support to the OpenAFS community via the OpenAFS mailing lists; and furthering
! development of desired features that are either too small to be financed by
! development contracts.</p>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Secure
  Endpoints Inc. accepts software development agreements from organizations who
***************
*** 4012,4019 ****
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Secure
  Endpoints Inc. provides contract based support for the OpenAFS for Windows and
  the <a href="http://web.mit.edu/kerberos/"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>MIT Kerberos
! for Windows</span></span></a> products. </p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871705"></a><a name="_Toc193871460"></a><a name="_Toc191662135"></a><a
--- 4118,4125 ----
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Secure
  Endpoints Inc. provides contract based support for the OpenAFS for Windows and
  the <a href="http://web.mit.edu/kerberos/"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>MIT Kerberos for Windows</span></span></a> products. </p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871705"></a><a name="_Toc193871460"></a><a name="_Toc191662135"></a><a
***************
*** 4021,4029 ****
  name="_Toc126872224"></a><a name="_Toc139993148"></a><a name="_Toc126872225"></a><span
  style='mso-bookmark:_Toc193871705'><span style='mso-bookmark:_Toc193871460'><span
  style='mso-bookmark:_Toc191662135'><span style='mso-bookmark:_Toc152605098'><span
! style='mso-bookmark:_Toc115417096'><span style='mso-fareast-font-family:"Times New Roman"'>6.3.
! Direct contributions of code and/or documentation</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'> <o:p></o:p></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Organizations
  that use OpenAFS in house and have development staffs are encouraged to
--- 4127,4134 ----
  name="_Toc126872224"></a><a name="_Toc139993148"></a><a name="_Toc126872225"></a><span
  style='mso-bookmark:_Toc193871705'><span style='mso-bookmark:_Toc193871460'><span
  style='mso-bookmark:_Toc191662135'><span style='mso-bookmark:_Toc152605098'><span
! style='mso-bookmark:_Toc115417096'>6.3. Direct contributions of code and/or
! documentation</span></span></span></span></span> </h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Organizations
  that use OpenAFS in house and have development staffs are encouraged to
***************
*** 4036,4067 ****
  name="_Toc152605099"></a><a name="_Toc115417097"></a><a name="_Toc139993149"></a><a
  name="_Toc126872226"></a><span style='mso-bookmark:_Toc193871706'><span
  style='mso-bookmark:_Toc193871461'><span style='mso-bookmark:_Toc191662136'><span
! style='mso-bookmark:_Toc152605099'><span style='mso-bookmark:_Toc115417097'><span
! style='mso-fareast-font-family:"Times New Roman"'>6.4. OpenAFS for Windows Mailing
! Lists</span></span></span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  you wish to participate in OpenAFS for Windows development please join the <i><a
  href="mailto:openafs-win32-devel@openafs.org?subject=OpenAFS%20for%20Windows%20Development%20Contribution"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>openafs-win32-devel@openafs.org</span></span></a></i>
  mailing list.</p>
  
  <p class=MsoNormal style='margin-left:35.45pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
! name="_Toc193871707"></a><a name="_Toc193871462"><span style='mso-bookmark:
! _Toc193871707'><span class=Heading1Char><span style='font-size:14.0pt'>https://lists.openafs.org/mailman/listinfo/openafs-win32-devel</span></span></span></a></p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>User
  questions should be sent to the <a
  href="mailto:openafs-info@openafs.org?subject=OpenAFS%20for%20Windows%20User%20Question"><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>openafs-info@openafs.org</span></span></a> mailing
! list.&nbsp; </p>
  
  <p class=MsoNormal style='margin-left:35.45pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
! name="_Toc193871708"></a><a name="_Toc193871463"><span style='mso-bookmark:
! _Toc193871708'><span class=Heading1Char><span style='font-size:14.0pt'>https://lists.openafs.org/mailman/listinfo/openafs-info</span></span></span></a></p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>You
  must join the mailing lists if you wish to post to the list without incurring a
--- 4141,4172 ----
  name="_Toc152605099"></a><a name="_Toc115417097"></a><a name="_Toc139993149"></a><a
  name="_Toc126872226"></a><span style='mso-bookmark:_Toc193871706'><span
  style='mso-bookmark:_Toc193871461'><span style='mso-bookmark:_Toc191662136'><span
! style='mso-bookmark:_Toc152605099'><span style='mso-bookmark:_Toc115417097'>6.4.
! OpenAFS for Windows Mailing Lists</span></span></span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  you wish to participate in OpenAFS for Windows development please join the <i><a
  href="mailto:openafs-win32-devel@openafs.org?subject=OpenAFS%20for%20Windows%20Development%20Contribution"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>openafs-win32-devel@openafs.org</span></span></a></i>
  mailing list.</p>
  
  <p class=MsoNormal style='margin-left:35.45pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
! name="_Toc193871462"></a><a name="_Toc193871707"><span style='mso-bookmark:
! _Toc193871462'><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho"'>https://lists.openafs.org/mailman/listinfo/openafs-win32-devel</span></span></span></a></p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>User
  questions should be sent to the <a
  href="mailto:openafs-info@openafs.org?subject=OpenAFS%20for%20Windows%20User%20Question"><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>openafs-info@openafs.org</span></span></a>
! mailing list.&nbsp; </p>
  
  <p class=MsoNormal style='margin-left:35.45pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
! name="_Toc193871463"></a><a name="_Toc193871708"><span style='mso-bookmark:
! _Toc193871463'><span class=Heading1Char><span style='font-size:14.0pt;
! mso-fareast-font-family:"MS Mincho"'>https://lists.openafs.org/mailman/listinfo/openafs-info</span></span></span></a></p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>You
  must join the mailing lists if you wish to post to the list without incurring a
***************
*** 4073,4087 ****
  name="_Toc115417115"></a><a name="_Toc115417098"></a><a name="_Toc115416158"></a><a
  name="_MSI_Deployment_Guide"></a><a name="_7._MSI_Deployment"></a><span
  style='mso-bookmark:_Toc193871709'><span style='mso-bookmark:_Toc193871464'><span
! style='mso-bookmark:_Toc191662137'><span style='mso-bookmark:_Toc152605100'><span
! style='mso-fareast-font-family:"Times New Roman"'>7. MSI Deployment Guide</span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h1>
  
! <b><span style='font-size:16.0pt;font-family:"Albany","sans-serif";mso-fareast-font-family:
  "Times New Roman";mso-bidi-font-family:"Times New Roman";mso-ansi-language:
  EN-US;mso-fareast-language:JA;mso-bidi-language:AR-SA'><br clear=all
  style='page-break-before:always'>
! </span></b>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871710"></a><a name="_Toc193871465"></a><a name="_Toc191662138"></a><a
--- 4178,4191 ----
  name="_Toc115417115"></a><a name="_Toc115417098"></a><a name="_Toc115416158"></a><a
  name="_MSI_Deployment_Guide"></a><a name="_7._MSI_Deployment"></a><span
  style='mso-bookmark:_Toc193871709'><span style='mso-bookmark:_Toc193871464'><span
! style='mso-bookmark:_Toc191662137'><span style='mso-bookmark:_Toc152605100'>7.
! MSI Deployment Guide</span></span></span></span></h1>
  
! <i><span style='font-size:16.0pt;font-family:Albany;mso-fareast-font-family:
  "Times New Roman";mso-bidi-font-family:"Times New Roman";mso-ansi-language:
  EN-US;mso-fareast-language:JA;mso-bidi-language:AR-SA'><br clear=all
  style='page-break-before:always'>
! </span></i>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871710"></a><a name="_Toc193871465"></a><a name="_Toc191662138"></a><a
***************
*** 4089,4097 ****
  name="_Toc126872228"></a><a name="_Toc115417099"></a><span style='mso-bookmark:
  _Toc193871710'><span style='mso-bookmark:_Toc193871465'><span style='mso-bookmark:
  _Toc191662138'><span style='mso-bookmark:_Toc152605101'><span style='mso-bookmark:
! _Toc115416159'><span style='mso-fareast-font-family:"Times New Roman"'>7.1.
! Introduction</span></span></span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>A
  MSI installer option is available for those who wish to use Windows Installer
--- 4193,4199 ----
  name="_Toc126872228"></a><a name="_Toc115417099"></a><span style='mso-bookmark:
  _Toc193871710'><span style='mso-bookmark:_Toc193871465'><span style='mso-bookmark:
  _Toc191662138'><span style='mso-bookmark:_Toc152605101'><span style='mso-bookmark:
! _Toc115416159'>7.1. Introduction</span></span></span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>A
  MSI installer option is available for those who wish to use Windows Installer
***************
*** 4112,4120 ****
  name="_Toc152605102"></a><a name="_Toc115416160"></a><a name="_Toc139993152"></a><a
  name="_Toc126872229"></a><span style='mso-bookmark:_Toc193871711'><span
  style='mso-bookmark:_Toc193871466'><span style='mso-bookmark:_Toc191662139'><span
! style='mso-bookmark:_Toc152605102'><span style='mso-bookmark:_Toc115416160'><span
! style='mso-fareast-font-family:"Times New Roman"'>7.1.1 Requirements</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  information in this document applies to MSI packages distributed with OpenAFS
--- 4214,4221 ----
  name="_Toc152605102"></a><a name="_Toc115416160"></a><a name="_Toc139993152"></a><a
  name="_Toc126872229"></a><span style='mso-bookmark:_Toc193871711'><span
  style='mso-bookmark:_Toc193871466'><span style='mso-bookmark:_Toc191662139'><span
! style='mso-bookmark:_Toc152605102'><span style='mso-bookmark:_Toc115416160'>7.1.1
! Requirements</span></span></span></span></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  information in this document applies to MSI packages distributed with OpenAFS
***************
*** 4139,4146 ****
  <a
  href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp"><span
  style='mso-bookmark:_Toc193871712'><span style='mso-bookmark:_Toc193871467'><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp</span></span></span></span><span
  style='mso-bookmark:_Toc193871467'></span><span style='mso-bookmark:_Toc193871712'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871467"></a><a name="_Toc193871712"></a><![endif]></p>
  
--- 4240,4247 ----
  <a
  href="http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp"><span
  style='mso-bookmark:_Toc193871712'><span style='mso-bookmark:_Toc193871467'><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp</span></span></span></span><span
  style='mso-bookmark:_Toc193871467'></span><span style='mso-bookmark:_Toc193871712'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871467"></a><a name="_Toc193871712"></a><![endif]></p>
  
***************
*** 4150,4157 ****
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;&nbsp;&nbsp;
  <a href="http://msdn.microsoft.com/library/en-us/msi/setup/transforms.asp"><span
  style='mso-bookmark:_Toc193871713'><span style='mso-bookmark:_Toc193871468'><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>http://msdn.microsoft.com/library/en-us/msi/setup/transforms.asp</span></span></span></span><span
  style='mso-bookmark:_Toc193871468'></span><span style='mso-bookmark:_Toc193871713'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871468"></a><a name="_Toc193871713"></a><![endif]></p>
  
--- 4251,4258 ----
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;&nbsp;&nbsp;
  <a href="http://msdn.microsoft.com/library/en-us/msi/setup/transforms.asp"><span
  style='mso-bookmark:_Toc193871713'><span style='mso-bookmark:_Toc193871468'><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>http://msdn.microsoft.com/library/en-us/msi/setup/transforms.asp</span></span></span></span><span
  style='mso-bookmark:_Toc193871468'></span><span style='mso-bookmark:_Toc193871713'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871468"></a><a name="_Toc193871713"></a><![endif]></p>
  
***************
*** 4166,4173 ****
  <a
  href="http://msdn.microsoft.com/library/en-us/msi/setup/a_customization_transform_example.asp"><span
  style='mso-bookmark:_Toc193871714'><span style='mso-bookmark:_Toc193871469'><span
! class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
! text-underline:none'>http://msdn.microsoft.com/library/en-us/msi/setup/a_customization_transform_example.asp</span></span></span></span><span
  style='mso-bookmark:_Toc193871469'></span><span style='mso-bookmark:_Toc193871714'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871469"></a><a name="_Toc193871714"></a><![endif]></p>
  
--- 4267,4274 ----
  <a
  href="http://msdn.microsoft.com/library/en-us/msi/setup/a_customization_transform_example.asp"><span
  style='mso-bookmark:_Toc193871714'><span style='mso-bookmark:_Toc193871469'><span
! class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";
! text-decoration:none;text-underline:none'>http://msdn.microsoft.com/library/en-us/msi/setup/a_customization_transform_example.asp</span></span></span></span><span
  style='mso-bookmark:_Toc193871469'></span><span style='mso-bookmark:_Toc193871714'></span></a><![if !supportNestedAnchors]><a
  name="_Toc193871469"></a><a name="_Toc193871714"></a><![endif]></p>
  
***************
*** 4176,4210 ****
  name="_Toc152605103"></a><a name="_Toc115416161"></a><a name="_Toc139993153"></a><a
  name="_Toc126872230"></a><span style='mso-bookmark:_Toc193871715'><span
  style='mso-bookmark:_Toc193871470'><span style='mso-bookmark:_Toc191662140'><span
! style='mso-bookmark:_Toc152605103'><span style='mso-bookmark:_Toc115416161'><span
! style='mso-fareast-font-family:"Times New Roman"'>7.1.2 Authoring a Transform</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Transforms
! describe a set of modifications to be performed on an existing MSI for the
! purpose of customizing it.&nbsp; This is ordinarily done by making a copy of
! the MSI to be customized, modifying the copy and then using the old and the new
! MSI to generate a transform.&nbsp; For example:</p>
  
! <p class=preformattedtext style='margin-left:.5in;text-indent:-.25in;
  tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;
! </span>copy openafs.msi openafs-modified.msi</p>
  
! <p class=preformattedtext style='margin-left:.5in;text-indent:-.25in;
  tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;
! </span>(edit the openafs-modified.msi to include the necessary changes)</p>
  
! <p class=preformattedtext style='margin-left:.5in;text-indent:-.25in;
  tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>3.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;
! </span>msitran -g openafs.msi openafs-modified.msi openafs-transform.mst</p>
  
! <p class=preformattedtext style='margin-left:.5in;text-indent:-.25in;
  tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>4.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;
! </span>(generates openafs-transform.mst, which is the transform)</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Transforms
  have an extension of .mst.&nbsp; 'msitran' is a tool distributed as part of the
--- 4277,4310 ----
  name="_Toc152605103"></a><a name="_Toc115416161"></a><a name="_Toc139993153"></a><a
  name="_Toc126872230"></a><span style='mso-bookmark:_Toc193871715'><span
  style='mso-bookmark:_Toc193871470'><span style='mso-bookmark:_Toc191662140'><span
! style='mso-bookmark:_Toc152605103'><span style='mso-bookmark:_Toc115416161'>7.1.2
! Authoring a Transform</span></span></span></span></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Transforms
! describe a set of modifications to be performed on an existing MSI for the purpose
! of customizing it.&nbsp; This is ordinarily done by making a copy of the MSI to
! be customized, modifying the copy and then using the old and the new MSI to
! generate a transform.&nbsp; For example:</p>
  
! <p class=preformattedtext style='margin-left:36.0pt;text-indent:-18.0pt;
  tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp; </span>copy
! openafs.msi openafs-modified.msi</p>
  
! <p class=preformattedtext style='margin-left:36.0pt;text-indent:-18.0pt;
  tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp; </span>(edit
! the openafs-modified.msi to include the necessary changes)</p>
  
! <p class=preformattedtext style='margin-left:36.0pt;text-indent:-18.0pt;
  tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>3.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp; </span>msitran
! -g openafs.msi openafs-modified.msi openafs-transform.mst</p>
  
! <p class=preformattedtext style='margin-left:36.0pt;text-indent:-18.0pt;
  tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>4.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp; </span>(generates
! openafs-transform.mst, which is the transform)</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Transforms
  have an extension of .mst.&nbsp; 'msitran' is a tool distributed as part of the
***************
*** 4213,4227 ****
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>You
  can test a transform by:</p>
  
! <p class=preformattedtext style='margin-left:.5in;text-indent:-.25in;
  tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;
! </span>copy openafs.msi openafs-test.msi</p>
  
! <p class=preformattedtext style='margin-left:.5in;text-indent:-.25in;
  tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;
! </span>msitran -a openafs-transform.mst openafs-test.msi</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>and
  then checking the resulting openafs-test.msi to see if all changes you have
--- 4313,4327 ----
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>You
  can test a transform by:</p>
  
! <p class=preformattedtext style='margin-left:36.0pt;text-indent:-18.0pt;
  tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp; </span>copy
! openafs.msi openafs-test.msi</p>
  
! <p class=preformattedtext style='margin-left:36.0pt;text-indent:-18.0pt;
  tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp; </span>msitran
! -a openafs-transform.mst openafs-test.msi</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>and
  then checking the resulting openafs-test.msi to see if all changes you have
***************
*** 4239,4266 ****
  name="_Toc126872231"></a><a name="_Toc115417100"></a><span style='mso-bookmark:
  _Toc193871716'><span style='mso-bookmark:_Toc193871471'><span style='mso-bookmark:
  _Toc191662141'><span style='mso-bookmark:_Toc152605104'><span style='mso-bookmark:
! _Toc115416162'><span style='mso-fareast-font-family:"Times New Roman"'>7.2.
! Configuration Options</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  logic necessary to implement many of the settings described in <a
  href="#_Appendix_A:_Registry_Values"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>Appendix A</span></span></a>
! are present in the MSI.&nbsp; Most of these can be controlled by setting the
! corresponding properties to the desired value.&nbsp; Some settings may require
! modifying existing registry entries (though not recommended) or adding new
! resources (like files or registry keys).&nbsp; Instructions for performing
! these tasks are below.</p>
  
  <h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871717"></a><a name="_Toc193871472"></a><a name="_Toc191662142"></a><a
  name="_Toc152605105"></a><a name="_Toc115416163"></a><a name="_Toc139993155"></a><a
  name="_Toc126872232"></a><span style='mso-bookmark:_Toc193871717'><span
  style='mso-bookmark:_Toc193871472'><span style='mso-bookmark:_Toc191662142'><span
! style='mso-bookmark:_Toc152605105'><span style='mso-bookmark:_Toc115416163'><span
! style='mso-fareast-font-family:"Times New Roman"'>7.2.1 Configurable Properties</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Most
  configurable properties correspond to registry keys or values.&nbsp; Due to the
--- 4339,4364 ----
  name="_Toc126872231"></a><a name="_Toc115417100"></a><span style='mso-bookmark:
  _Toc193871716'><span style='mso-bookmark:_Toc193871471'><span style='mso-bookmark:
  _Toc191662141'><span style='mso-bookmark:_Toc152605104'><span style='mso-bookmark:
! _Toc115416162'>7.2. Configuration Options</span></span></span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  logic necessary to implement many of the settings described in <a
  href="#_Appendix_A:_Registry_Values"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>Appendix A</span></span></a> are present in the
! MSI.&nbsp; Most of these can be controlled by setting the corresponding
! properties to the desired value.&nbsp; Some settings may require modifying
! existing registry entries (though not recommended) or adding new resources
! (like files or registry keys).&nbsp; Instructions for performing these tasks
! are below.</p>
  
  <h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871717"></a><a name="_Toc193871472"></a><a name="_Toc191662142"></a><a
  name="_Toc152605105"></a><a name="_Toc115416163"></a><a name="_Toc139993155"></a><a
  name="_Toc126872232"></a><span style='mso-bookmark:_Toc193871717'><span
  style='mso-bookmark:_Toc193871472'><span style='mso-bookmark:_Toc191662142'><span
! style='mso-bookmark:_Toc152605105'><span style='mso-bookmark:_Toc115416163'>7.2.1
! Configurable Properties</span></span></span></span></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Most
  configurable properties correspond to registry keys or values.&nbsp; Due to the
***************
*** 4279,4285 ****
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>For
  each property, the associated registry setting is referenced by the same text
  used in <a href="#_Appendix_A:_Registry_Values"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>Appendix A</span></span></a>.</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Strings
  are quoted using single quotes (e.g. 'a string'). An empty string is denoted as
--- 4377,4384 ----
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>For
  each property, the associated registry setting is referenced by the same text
  used in <a href="#_Appendix_A:_Registry_Values"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>Appendix A</span></span></a>.</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Strings
  are quoted using single quotes (e.g. 'a string'). An empty string is denoted as
***************
*** 4292,4323 ****
  name="_Toc191662143"></a><a name="_Toc152605106"></a><a name="_Toc115416164"></a><a
  name="_Toc139993156"></a><a name="_Toc126872233"></a><span style='mso-bookmark:
  _Toc191662143'><span style='mso-bookmark:_Toc152605106'><span style='mso-bookmark:
! _Toc115416164'><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1.1
! Setting Properties</span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h4>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>In
  order to set a property,</p>
  
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0in;margin-bottom:4.3pt;
! margin-left:.25in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='font-size:9.0pt'>1.</span><span style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Open the MSI in ORCA.EXE</p>
  
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0in;margin-bottom:4.3pt;
! margin-left:.25in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='font-size:9.0pt'>2.</span><span style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Select the 'Property' table from the list of tables on the left.</p>
  
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0in;margin-bottom:4.3pt;
! margin-left:.25in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='font-size:9.0pt'>3.</span><span style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span>Find the property in the list of properties on the right, double click the
! value and type the new value.</p>
! 
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0in;margin-bottom:4.3pt;
! margin-left:.25in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='font-size:9.0pt'>4.</span><span style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>If the property does not exist in the property list, right click the
  list and select 'Add Row', type the property name and the desired value.</p>
  
--- 4391,4420 ----
  name="_Toc191662143"></a><a name="_Toc152605106"></a><a name="_Toc115416164"></a><a
  name="_Toc139993156"></a><a name="_Toc126872233"></a><span style='mso-bookmark:
  _Toc191662143'><span style='mso-bookmark:_Toc152605106'><span style='mso-bookmark:
! _Toc115416164'>7.2.1.1 Setting Properties</span></span></span></h4>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>In
  order to set a property,</p>
  
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0pt;margin-bottom:4.3pt;
! margin-left:18.0pt;text-indent:-18.0pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='font-size:9.0pt'>1.</span><span style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Open the MSI in ORCA.EXE</p>
  
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0pt;margin-bottom:4.3pt;
! margin-left:18.0pt;text-indent:-18.0pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='font-size:9.0pt'>2.</span><span style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Select the 'Property' table from the list of tables on the left.</p>
  
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0pt;margin-bottom:4.3pt;
! margin-left:18.0pt;text-indent:-18.0pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='font-size:9.0pt'>3.</span><span style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
! </span>Find the property in the list of properties on the right, double click
! the value and type the new value.</p>
! 
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0pt;margin-bottom:4.3pt;
! margin-left:18.0pt;text-indent:-18.0pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='font-size:9.0pt'>4.</span><span style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>If the property does not exist in the property list, right click the
  list and select 'Add Row', type the property name and the desired value.</p>
  
***************
*** 4325,4364 ****
  name="_Toc191662144"></a><a name="_Toc152605107"></a><a name="_Toc115416165"></a><a
  name="_Toc139993157"></a><a name="_Toc126872234"></a><span style='mso-bookmark:
  _Toc191662144'><span style='mso-bookmark:_Toc152605107'><span style='mso-bookmark:
! _Toc115416165'><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1.2
! OpenAFS for Windows Properties</span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h4>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h5><a name="_Toc191662145"></a><a name="_Toc152605108"></a><a
!   name="_Toc139993158"></a><a name="_Toc126872235"></a><a name="_Toc115416166"></a><a
!   name="_(Service_parameters):"></a><span style='mso-bookmark:_Toc191662145'><span
!   style='mso-bookmark:_Toc152605108'><span style='mso-fareast-font-family:"Times New Roman"'>(Service
!   parameters):</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
!   <p class=listcontents style='margin-left:0in'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h5><a name="_Toc191662146"></a><a name="_Toc152605109"></a><a
!   name="_Toc139993159"></a><a name="_Toc126872236"></a><a name="_Toc115416167"></a><a
!   name="_(Network_provider):"></a><span style='mso-bookmark:_Toc191662146'><span
!   style='mso-bookmark:_Toc152605109'><span style='mso-fareast-font-family:"Times New Roman"'>(Network
!   provider):</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
!   <p class=listcontents style='margin-left:0in'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:2;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h5><a name="_Toc191662147"></a><a name="_Toc152605110"></a><a
!   name="_Toc139993160"></a><a name="_Toc126872237"></a><a name="_Toc115416168"></a><a
!   name="_(OpenAFS_Client):"></a><span style='mso-bookmark:_Toc191662147'><span
!   style='mso-bookmark:_Toc152605110'><span style='mso-fareast-font-family:"Times New Roman"'>(OpenAFS
!   Client):</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
!   <p class=listcontents style='margin-left:0in'>[HKLM\SOFTWARE\OpenAFS\Client]</p>
    </td>
   </tr>
  </table>
--- 4422,4456 ----
  name="_Toc191662144"></a><a name="_Toc152605107"></a><a name="_Toc115416165"></a><a
  name="_Toc139993157"></a><a name="_Toc126872234"></a><span style='mso-bookmark:
  _Toc191662144'><span style='mso-bookmark:_Toc152605107'><span style='mso-bookmark:
! _Toc115416165'>7.2.1.2 OpenAFS for Windows Properties</span></span></span></h4>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h5><a name="_Toc191662145"></a><a name="_Toc152605108"></a><a
!   name="_(Service_parameters):"></a><a name="_Toc115416166"></a><a
!   name="_Toc126872235"></a><a name="_Toc139993158"></a><span style='mso-bookmark:
!   _Toc191662145'><span style='mso-bookmark:_Toc152605108'>(Service parameters):</span></span></h5>
!   <p class=listcontents style='margin-left:0pt'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h5><a name="_Toc191662146"></a><a name="_Toc152605109"></a><a
!   name="_(Network_provider):"></a><a name="_Toc115416167"></a><a
!   name="_Toc126872236"></a><a name="_Toc139993159"></a><span style='mso-bookmark:
!   _Toc191662146'><span style='mso-bookmark:_Toc152605109'>(Network provider):</span></span></h5>
!   <p class=listcontents style='margin-left:0pt'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:2;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h5><a name="_Toc191662147"></a><a name="_Toc152605110"></a><a
!   name="_(OpenAFS_Client):"></a><a name="_Toc115416168"></a><a
!   name="_Toc126872237"></a><a name="_Toc139993160"></a><span style='mso-bookmark:
!   _Toc191662147'><span style='mso-bookmark:_Toc152605110'>(OpenAFS Client):</span></span></h5>
!   <p class=listcontents style='margin-left:0pt'>[HKLM\SOFTWARE\OpenAFS\Client]</p>
    </td>
   </tr>
  </table>
***************
*** 4367,4622 ****
  name="_Toc191662148"></a><a name="_Toc152605111"></a><a name="_Toc115416169"></a><a
  name="_Toc139993161"></a><a name="_Toc126872238"></a><span style='mso-bookmark:
  _Toc191662148'><span style='mso-bookmark:_Toc152605111'><span style='mso-bookmark:
! _Toc115416169'><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1.2.1
! Registry Properties</span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h5>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>These
  properties are used to set the values of registry entries associated with
  OpenAFS for Windows.</p>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662149"></a><a name="_Toc152605112"></a><a
!   name="_Toc115416170"></a><a name="_Toc139993162"></a><a name="_Toc126872239"></a><span
    style='mso-bookmark:_Toc191662149'><span style='mso-bookmark:_Toc152605112'><span
!   style='mso-bookmark:_Toc115416170'><span style='mso-fareast-font-family:"Times New Roman"'>AFSCACHEPATH</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>(Service
!   parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_CachePath"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>CachePath</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : string .</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662150"></a><a name="_Toc152605113"></a><a
!   name="_Toc115416171"></a><a name="_Toc139993163"></a><a name="_Toc126872240"></a><span
    style='mso-bookmark:_Toc191662150'><span style='mso-bookmark:_Toc152605113'><span
!   style='mso-bookmark:_Toc115416171'><span style='mso-fareast-font-family:"Times New Roman"'>AFSCACHESIZE</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>(Service
!   parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value___:_CacheSize"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>CacheSize</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : numeric</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662151"></a><a name="_Toc152605114"></a><a
!   name="_Toc115416172"></a><a name="_Toc139993164"></a><a name="_Toc126872241"></a><span
    style='mso-bookmark:_Toc191662151'><span style='mso-bookmark:_Toc152605114'><span
!   style='mso-bookmark:_Toc115416172'><span style='mso-fareast-font-family:"Times New Roman"'>AFSCELLNAME</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>(Service
!   parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_Cell"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>Cell</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : string</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662152"></a><a name="_Toc152605115"></a><a
!   name="_Toc115416173"></a><a name="_Toc139993165"></a><a name="_Toc126872242"></a><span
    style='mso-bookmark:_Toc191662152'><span style='mso-bookmark:_Toc152605115'><span
!   style='mso-bookmark:_Toc115416173'><span style='mso-fareast-font-family:"Times New Roman"'>FREELANCEMODE</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_FreelanceClient"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>FreelanceClient</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '1' or '0'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662153"></a><a name="_Toc152605116"></a><a
!   name="_Toc115416174"></a><a name="_Toc139993166"></a><a name="_Toc126872243"></a><span
    style='mso-bookmark:_Toc191662153'><span style='mso-bookmark:_Toc152605116'><span
!   style='mso-bookmark:_Toc115416174'><span style='mso-fareast-font-family:"Times New Roman"'>HIDEDOTFILES</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>(Service
!   parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_HideDotFiles"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>HideDotFiles</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '1' or '0'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662154"></a><a name="_Toc152605117"></a><a
!   name="_Toc115416175"></a><a name="_Toc139993167"></a><a name="_Toc126872244"></a><span
    style='mso-bookmark:_Toc191662154'><span style='mso-bookmark:_Toc152605117'><span
!   style='mso-bookmark:_Toc115416175'><span style='mso-fareast-font-family:"Times New Roman"'>LOGONOPTIONS</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Network_provider):"><span class=Heading1Char><span style='font-size:
!   14.0pt;text-decoration:none;text-underline:none'>(Network provider)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value___:_LogonOptions"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>LogonOptions</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '0', '1' or '3'</p>
    <p class=MsoNormal>See <a href="#_Appendix_A:_Registry_Values"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>Appendix A</span></span></a> <a
!   href="#_A.2.1_Domain_specific_configuration"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>section 2.1
!   (Domain specific configuration keys for Network Provider)</span></span></a>
!   for more details.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:6'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662155"></a><a name="_Toc152605118"></a><a
!   name="_Toc115416176"></a><a name="_Toc139993168"></a><a name="_Toc126872245"></a><span
    style='mso-bookmark:_Toc191662155'><span style='mso-bookmark:_Toc152605118'><span
!   style='mso-bookmark:_Toc115416176'><span style='mso-fareast-font-family:"Times New Roman"'>MOUNTROOT</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>(Service
!   parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_Mountroot"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>Mountroot</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : string</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:7'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662156"></a><a name="_Toc152605119"></a><a
!   name="_Toc115416177"></a><a name="_Toc139993169"></a><a name="_Toc126872246"></a><span
    style='mso-bookmark:_Toc191662156'><span style='mso-bookmark:_Toc152605119'><span
!   style='mso-bookmark:_Toc115416177'><span style='mso-fareast-font-family:"Times New Roman"'>NETBIOSNAME</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>(Service
!   parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value___:_NetbiosName"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>NetbiosName</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : string (at most 15
    characters)</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:8'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662157"></a><a name="_Toc152605120"></a><a
!   name="_Toc115416178"></a><a name="_Toc139993170"></a><a name="_Toc126872247"></a><span
    style='mso-bookmark:_Toc191662157'><span style='mso-bookmark:_Toc152605120'><span
!   style='mso-bookmark:_Toc115416178'><span style='mso-fareast-font-family:"Times New Roman"'>NOFINDLANABYNAME</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>(Service
!   parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value___:_NoFindLanaByName"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>NoFindLanaByName</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '1' or '0'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:9'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662158"></a><a name="_Toc152605121"></a><a
!   name="_Toc115416179"></a><a name="_Toc139993171"></a><a name="_Toc126872248"></a><span
    style='mso-bookmark:_Toc191662158'><span style='mso-bookmark:_Toc152605121'><span
!   style='mso-bookmark:_Toc115416179'><span style='mso-fareast-font-family:"Times New Roman"'>RXMAXMTU</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>(Service
!   parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_RxMaxMTU"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>RxMaxMTU</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : numeric</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:10'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662159"></a><a name="_Toc152605122"></a><a
!   name="_Toc115416180"></a><a name="_Toc139993172"></a><a name="_Toc126872249"></a><span
    style='mso-bookmark:_Toc191662159'><span style='mso-bookmark:_Toc152605122'><span
!   style='mso-bookmark:_Toc115416180'><span style='mso-fareast-font-family:"Times New Roman"'>SECURITYLEVEL</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>(Service
!   parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_SecurityLevel"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>SecurityLevel</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '1' or '0'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:11'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662160"></a><a name="_Toc152605123"></a><a
!   name="_Toc115416181"></a><a name="_Toc139993173"></a><a name="_Toc126872250"></a><span
    style='mso-bookmark:_Toc191662160'><span style='mso-bookmark:_Toc152605123'><span
!   style='mso-bookmark:_Toc115416181'><span style='mso-fareast-font-family:"Times New Roman"'>SMBAUTHTYPE</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>(Service
!   parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value___:_smbAuthType"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>SMBAuthType</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '0','1' or '2'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:12'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662161"></a><a name="_Toc152605124"></a><a
!   name="_Toc115416182"></a><a name="_Toc139993174"></a><a name="_Toc126872251"></a><span
    style='mso-bookmark:_Toc191662161'><span style='mso-bookmark:_Toc152605124'><span
!   style='mso-bookmark:_Toc115416182'><span style='mso-fareast-font-family:"Times New Roman"'>STOREANSIFILENAMES</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(OpenAFS_Client):"><span class=Heading1Char><span style='font-size:
!   14.0pt;text-decoration:none;text-underline:none'>(OpenAFS Client)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value___:_StoreAnsiFilenames"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>StoreAnsiFilenames</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '0' or '1'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:13;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662162"></a><a name="_Toc152605125"></a><a
!   name="_Toc115416183"></a><a name="_Toc139993175"></a><a name="_Toc126872252"></a><span
    style='mso-bookmark:_Toc191662162'><span style='mso-bookmark:_Toc152605125'><span
!   style='mso-bookmark:_Toc115416183'><span style='mso-fareast-font-family:"Times New Roman"'>USEDNS</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>(Service
!   parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_UseDNS"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>UseDNS</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '1' or '0'</p>
    </td>
   </tr>
--- 4459,4701 ----
  name="_Toc191662148"></a><a name="_Toc152605111"></a><a name="_Toc115416169"></a><a
  name="_Toc139993161"></a><a name="_Toc126872238"></a><span style='mso-bookmark:
  _Toc191662148'><span style='mso-bookmark:_Toc152605111'><span style='mso-bookmark:
! _Toc115416169'>7.2.1.2.1 Registry Properties</span></span></span></h5>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>These
  properties are used to set the values of registry entries associated with
  OpenAFS for Windows.</p>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662149"></a><a name="_Toc152605112"></a><a
!   name="_Toc115416170"></a><a name="_Toc126872239"></a><a name="_Toc139993162"></a><span
    style='mso-bookmark:_Toc191662149'><span style='mso-bookmark:_Toc152605112'><span
!   style='mso-bookmark:_Toc115416170'>AFSCACHEPATH</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_CachePath"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>CachePath</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : string .</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662150"></a><a name="_Toc152605113"></a><a
!   name="_Toc115416171"></a><a name="_Toc126872240"></a><a name="_Toc139993163"></a><span
    style='mso-bookmark:_Toc191662150'><span style='mso-bookmark:_Toc152605113'><span
!   style='mso-bookmark:_Toc115416171'>AFSCACHESIZE</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value___:_CacheSize"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>CacheSize</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : numeric</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662151"></a><a name="_Toc152605114"></a><a
!   name="_Toc115416172"></a><a name="_Toc126872241"></a><a name="_Toc139993164"></a><span
    style='mso-bookmark:_Toc191662151'><span style='mso-bookmark:_Toc152605114'><span
!   style='mso-bookmark:_Toc115416172'>AFSCELLNAME</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_Cell"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>Cell</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : string</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662152"></a><a name="_Toc152605115"></a><a
!   name="_Toc115416173"></a><a name="_Toc126872242"></a><a name="_Toc139993165"></a><span
    style='mso-bookmark:_Toc191662152'><span style='mso-bookmark:_Toc152605115'><span
!   style='mso-bookmark:_Toc115416173'>FREELANCEMODE</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_FreelanceClient"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>FreelanceClient</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '1' or '0'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662153"></a><a name="_Toc152605116"></a><a
!   name="_Toc115416174"></a><a name="_Toc126872243"></a><a name="_Toc139993166"></a><span
    style='mso-bookmark:_Toc191662153'><span style='mso-bookmark:_Toc152605116'><span
!   style='mso-bookmark:_Toc115416174'>HIDEDOTFILES</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_HideDotFiles"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>HideDotFiles</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '1' or '0'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662154"></a><a name="_Toc152605117"></a><a
!   name="_Toc115416175"></a><a name="_Toc126872244"></a><a name="_Toc139993167"></a><span
    style='mso-bookmark:_Toc191662154'><span style='mso-bookmark:_Toc152605117'><span
!   style='mso-bookmark:_Toc115416175'>LOGONOPTIONS</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Network_provider):"><span class=Heading1Char><span style='font-size:
!   14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:none;text-underline:
!   none'>(Network provider)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value___:_LogonOptions"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>LogonOptions</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '0', '1' or '3'</p>
    <p class=MsoNormal>See <a href="#_Appendix_A:_Registry_Values"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>Appendix A</span></span></a>
!   <a href="#_A.2.1_Domain_specific_configuration"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>section 2.1 (Domain specific configuration keys for
!   Network Provider)</span></span></a> for more details.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:6'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662155"></a><a name="_Toc152605118"></a><a
!   name="_Toc115416176"></a><a name="_Toc126872245"></a><a name="_Toc139993168"></a><span
    style='mso-bookmark:_Toc191662155'><span style='mso-bookmark:_Toc152605118'><span
!   style='mso-bookmark:_Toc115416176'>MOUNTROOT</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_Mountroot"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>Mountroot</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : string</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:7'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662156"></a><a name="_Toc152605119"></a><a
!   name="_Toc115416177"></a><a name="_Toc126872246"></a><a name="_Toc139993169"></a><span
    style='mso-bookmark:_Toc191662156'><span style='mso-bookmark:_Toc152605119'><span
!   style='mso-bookmark:_Toc115416177'>NETBIOSNAME</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value___:_NetbiosName"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>NetbiosName</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : string (at most 15
    characters)</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:8'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662157"></a><a name="_Toc152605120"></a><a
!   name="_Toc115416178"></a><a name="_Toc126872247"></a><a name="_Toc139993170"></a><span
    style='mso-bookmark:_Toc191662157'><span style='mso-bookmark:_Toc152605120'><span
!   style='mso-bookmark:_Toc115416178'>NOFINDLANABYNAME</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value___:_NoFindLanaByName"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>NoFindLanaByName</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '1' or '0'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:9'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662158"></a><a name="_Toc152605121"></a><a
!   name="_Toc115416179"></a><a name="_Toc126872248"></a><a name="_Toc139993171"></a><span
    style='mso-bookmark:_Toc191662158'><span style='mso-bookmark:_Toc152605121'><span
!   style='mso-bookmark:_Toc115416179'>RXMAXMTU</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_RxMaxMTU"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>RxMaxMTU</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : numeric</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:10'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662159"></a><a name="_Toc152605122"></a><a
!   name="_Toc115416180"></a><a name="_Toc126872249"></a><a name="_Toc139993172"></a><span
    style='mso-bookmark:_Toc191662159'><span style='mso-bookmark:_Toc152605122'><span
!   style='mso-bookmark:_Toc115416180'>SECURITYLEVEL</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_SecurityLevel"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>SecurityLevel</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '1' or '0'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:11'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662160"></a><a name="_Toc152605123"></a><a
!   name="_Toc115416181"></a><a name="_Toc126872250"></a><a name="_Toc139993173"></a><span
    style='mso-bookmark:_Toc191662160'><span style='mso-bookmark:_Toc152605123'><span
!   style='mso-bookmark:_Toc115416181'>SMBAUTHTYPE</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value___:_smbAuthType"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>SMBAuthType</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '0','1' or '2'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:12'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662161"></a><a name="_Toc152605124"></a><a
!   name="_Toc115416182"></a><a name="_Toc126872251"></a><a name="_Toc139993174"></a><span
    style='mso-bookmark:_Toc191662161'><span style='mso-bookmark:_Toc152605124'><span
!   style='mso-bookmark:_Toc115416182'>STOREANSIFILENAMES</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(OpenAFS_Client):"><span class=Heading1Char><span style='font-size:
!   14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:none;text-underline:
!   none'>(OpenAFS Client)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value___:_StoreAnsiFilenames"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>StoreAnsiFilenames</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '0' or '1'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:13;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662162"></a><a name="_Toc152605125"></a><a
!   name="_Toc115416183"></a><a name="_Toc126872252"></a><a name="_Toc139993175"></a><span
    style='mso-bookmark:_Toc191662162'><span style='mso-bookmark:_Toc152605125'><span
!   style='mso-bookmark:_Toc115416183'>USEDNS</span></span></span></h6>
    <p class=MsoList>Registry key&nbsp;&nbsp;&nbsp; : <a
    href="#_(Service_parameters):"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>(Service parameters)</span></span></a></p>
    <p class=MsoList>Registry value : <a href="#_Value_:_UseDNS"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>UseDNS</span></span></a></p>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '1' or '0'</p>
    </td>
   </tr>
***************
*** 4626,4653 ****
  name="_Toc191662163"></a><a name="_Toc152605126"></a><a name="_Toc139993176"></a><a
  name="_Toc126872253"></a><a name="_Toc115416184"></a><a
  name="_7.2.1.2.2_AFSCreds.exe_Properties"></a><span style='mso-bookmark:_Toc191662163'><span
! style='mso-bookmark:_Toc152605126'><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1.2.2
! AFSCreds.exe Properties</span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h5>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>These
  properties are combined to add a command line option to the shortcut that will
  be created in the Start:Programs:OpenAFS and Start:Programs:Startup folders
  (see CREDSSTARTUP). &nbsp;The method of specifying the option was chosen for
! easy integration with the Windows Installer user interface.&nbsp; Although other
! methods can be used to specify options to AFSCREDS.EXE, it is advised that they
! be avoided as transforms including such options may not apply to future
! releases of OpenAFS.</p>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662164"></a><a name="_Toc152605127"></a><a
!   name="_Toc115416185"></a><a name="_Toc139993177"></a><a name="_Toc126872254"></a><span
    style='mso-bookmark:_Toc191662164'><span style='mso-bookmark:_Toc152605127'><span
!   style='mso-bookmark:_Toc115416185'><span style='mso-fareast-font-family:"Times New Roman"'>CREDSSTARTUP</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '1' or '0'</p>
    <p class=MsoList>Controls whether AFSCreds.exe starts up automatically when
    the user logs on.&nbsp; When CREDSSTARTUP is '1' a shortcut is added to the
--- 4705,4729 ----
  name="_Toc191662163"></a><a name="_Toc152605126"></a><a name="_Toc139993176"></a><a
  name="_Toc126872253"></a><a name="_Toc115416184"></a><a
  name="_7.2.1.2.2_AFSCreds.exe_Properties"></a><span style='mso-bookmark:_Toc191662163'><span
! style='mso-bookmark:_Toc152605126'>7.2.1.2.2 AFSCreds.exe Properties</span></span></h5>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>These
  properties are combined to add a command line option to the shortcut that will
  be created in the Start:Programs:OpenAFS and Start:Programs:Startup folders
  (see CREDSSTARTUP). &nbsp;The method of specifying the option was chosen for
! easy integration with the Windows Installer user interface.&nbsp; Although
! other methods can be used to specify options to AFSCREDS.EXE, it is advised
! that they be avoided as transforms including such options may not apply to
! future releases of OpenAFS.</p>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662164"></a><a name="_Toc152605127"></a><a
!   name="_Toc115416185"></a><a name="_Toc126872254"></a><a name="_Toc139993177"></a><span
    style='mso-bookmark:_Toc191662164'><span style='mso-bookmark:_Toc152605127'><span
!   style='mso-bookmark:_Toc115416185'>CREDSSTARTUP</span></span></span></h6>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '1' or '0'</p>
    <p class=MsoList>Controls whether AFSCreds.exe starts up automatically when
    the user logs on.&nbsp; When CREDSSTARTUP is '1' a shortcut is added to the
***************
*** 4656,4711 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662165"></a><a name="_Toc152605128"></a><a
!   name="_Toc115416186"></a><a name="_Toc139993178"></a><a name="_Toc126872255"></a><span
    style='mso-bookmark:_Toc191662165'><span style='mso-bookmark:_Toc152605128'><span
!   style='mso-bookmark:_Toc115416186'><span style='mso-fareast-font-family:"Times New Roman"'>CREDSAUTOINIT</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '-a' or ''</p>
    <p class=MsoList>Enables automatic initialization.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662166"></a><a name="_Toc152605129"></a><a
!   name="_Toc115416187"></a><a name="_Toc139993179"></a><a name="_Toc126872256"></a><span
    style='mso-bookmark:_Toc191662166'><span style='mso-bookmark:_Toc152605129'><span
!   style='mso-bookmark:_Toc115416187'><span style='mso-fareast-font-family:"Times New Roman"'>CREDSIPCHDET</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '-n' or ''</p>
    <p class=MsoList>Enables IP address change detection.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662167"></a><a name="_Toc152605130"></a><a
!   name="_Toc115416188"></a><a name="_Toc139993180"></a><a name="_Toc126872257"></a><span
    style='mso-bookmark:_Toc191662167'><span style='mso-bookmark:_Toc152605130'><span
!   style='mso-bookmark:_Toc115416188'><span style='mso-fareast-font-family:"Times New Roman"'>CREDSQUIET</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '-q' or ''</p>
    <p class=MsoList>Enables quiet mode.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662168"></a><a name="_Toc152605131"></a><a
!   name="_Toc115416189"></a><a name="_Toc139993181"></a><a name="_Toc126872258"></a><span
    style='mso-bookmark:_Toc191662168'><span style='mso-bookmark:_Toc152605131'><span
!   style='mso-bookmark:_Toc115416189'><span style='mso-fareast-font-family:"Times New Roman"'>CREDSRENEWDRMAP</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '-m' or '’</p>
    <p class=MsoList>Enables renewing drive map at startup.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h6><a name="_Toc191662169"></a><a name="_Toc152605132"></a><a
!   name="_Toc115416190"></a><a name="_Toc139993182"></a><a name="_Toc126872259"></a><span
    style='mso-bookmark:_Toc191662169'><span style='mso-bookmark:_Toc152605132'><span
!   style='mso-bookmark:_Toc115416190'><span style='mso-fareast-font-family:"Times New Roman"'>CREDSSHOW</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h6>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '-s' or ''</p>
    <p class=MsoList>Enables displaying the credential manager window when
    AFSCREDS starts up.</p>
--- 4732,4782 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662165"></a><a name="_Toc152605128"></a><a
!   name="_Toc115416186"></a><a name="_Toc126872255"></a><a name="_Toc139993178"></a><span
    style='mso-bookmark:_Toc191662165'><span style='mso-bookmark:_Toc152605128'><span
!   style='mso-bookmark:_Toc115416186'>CREDSAUTOINIT</span></span></span></h6>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '-a' or ''</p>
    <p class=MsoList>Enables automatic initialization.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662166"></a><a name="_Toc152605129"></a><a
!   name="_Toc115416187"></a><a name="_Toc126872256"></a><a name="_Toc139993179"></a><span
    style='mso-bookmark:_Toc191662166'><span style='mso-bookmark:_Toc152605129'><span
!   style='mso-bookmark:_Toc115416187'>CREDSIPCHDET</span></span></span></h6>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '-n' or ''</p>
    <p class=MsoList>Enables IP address change detection.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662167"></a><a name="_Toc152605130"></a><a
!   name="_Toc115416188"></a><a name="_Toc126872257"></a><a name="_Toc139993180"></a><span
    style='mso-bookmark:_Toc191662167'><span style='mso-bookmark:_Toc152605130'><span
!   style='mso-bookmark:_Toc115416188'>CREDSQUIET</span></span></span></h6>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '-q' or ''</p>
    <p class=MsoList>Enables quiet mode.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662168"></a><a name="_Toc152605131"></a><a
!   name="_Toc115416189"></a><a name="_Toc126872258"></a><a name="_Toc139993181"></a><span
    style='mso-bookmark:_Toc191662168'><span style='mso-bookmark:_Toc152605131'><span
!   style='mso-bookmark:_Toc115416189'>CREDSRENEWDRMAP</span></span></span></h6>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '-m' or '’</p>
    <p class=MsoList>Enables renewing drive map at startup.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h6><a name="_Toc191662169"></a><a name="_Toc152605132"></a><a
!   name="_Toc115416190"></a><a name="_Toc126872259"></a><a name="_Toc139993182"></a><span
    style='mso-bookmark:_Toc191662169'><span style='mso-bookmark:_Toc152605132'><span
!   style='mso-bookmark:_Toc115416190'>CREDSSHOW</span></span></span></h6>
    <p class=MsoList>Valid values&nbsp;&nbsp;&nbsp; : '-s' or ''</p>
    <p class=MsoList>Enables displaying the credential manager window when
    AFSCREDS starts up.</p>
***************
*** 4718,4727 ****
  name="_Toc152605133"></a><a name="_Toc115416191"></a><a name="_Toc139993183"></a><a
  name="_Toc126872260"></a><span style='mso-bookmark:_Toc193871718'><span
  style='mso-bookmark:_Toc193871473'><span style='mso-bookmark:_Toc191662170'><span
! style='mso-bookmark:_Toc152605133'><span style='mso-bookmark:_Toc115416191'><span
! style='mso-fareast-font-family:"Times New Roman"'>7.2.2 Existing Registry
! Entries</span></span></span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>You
  can change existing registry values subject to the restrictions mentioned in
--- 4789,4796 ----
  name="_Toc152605133"></a><a name="_Toc115416191"></a><a name="_Toc139993183"></a><a
  name="_Toc126872260"></a><span style='mso-bookmark:_Toc193871718'><span
  style='mso-bookmark:_Toc193871473'><span style='mso-bookmark:_Toc191662170'><span
! style='mso-bookmark:_Toc152605133'><span style='mso-bookmark:_Toc115416191'>7.2.2
! Existing Registry Entries</span></span></span></span></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>You
  can change existing registry values subject to the restrictions mentioned in
***************
*** 4735,4744 ****
  name="_Toc152605134"></a><a name="_Toc115416192"></a><a name="_Toc139993184"></a><a
  name="_Toc126872261"></a><span style='mso-bookmark:_Toc193871719'><span
  style='mso-bookmark:_Toc193871474'><span style='mso-bookmark:_Toc191662171'><span
! style='mso-bookmark:_Toc152605134'><span style='mso-bookmark:_Toc115416192'><span
! style='mso-fareast-font-family:"Times New Roman"'>7.2.3 Replacing Configuration
! Files</span></span></span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  OpenAFS configuration files (CellServDB) can be replaced by your own
--- 4804,4811 ----
  name="_Toc152605134"></a><a name="_Toc115416192"></a><a name="_Toc139993184"></a><a
  name="_Toc126872261"></a><span style='mso-bookmark:_Toc193871719'><span
  style='mso-bookmark:_Toc193871474'><span style='mso-bookmark:_Toc191662171'><span
! style='mso-bookmark:_Toc152605134'><span style='mso-bookmark:_Toc115416192'>7.2.3
! Replacing Configuration Files</span></span></span></span></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  OpenAFS configuration files (CellServDB) can be replaced by your own
***************
*** 4759,4792 ****
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  walkthrough below is to add a custom 'CellServDB' file.</p>
  
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0in;margin-bottom:4.3pt;
! margin-left:.25in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Disable the component that contains the configuration file that you want
  to replace.</p>
  
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0in;margin-bottom:4.3pt;
! margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.1.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Locate
  and select the 'Component' table in the 'Tables' list.</p>
  
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0in;margin-bottom:4.3pt;
! margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.2.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>In
  the Component table, locate the component you need to change ( Ctrl-F invokes
  the 'Find' dialog).&nbsp; The component names are listed below in section <a
  href="#_2.3.1_Components_for_Configuration_"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>7.2.3.1</span></span></a>.&nbsp;
! For this example, the component name is 'elf_CellServDB'.</p>
! 
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0in;margin-bottom:4.3pt;
! margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.3.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Go
! to the 'Condition' column of the component.</p>
! 
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0in;margin-bottom:4.3pt;
! margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.4.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Enter
  a condition that evaluates to false. I.e. 'DONOTINSTALL'. (Note that an
  undefined property always evaluates to false).</p>
  
--- 4826,4860 ----
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  walkthrough below is to add a custom 'CellServDB' file.</p>
  
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0pt;margin-bottom:4.3pt;
! margin-left:18.0pt;text-indent:-18.0pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Disable the component that contains the configuration file that you want
  to replace.</p>
  
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0pt;margin-bottom:4.3pt;
! margin-left:39.6pt;text-indent:-21.6pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.1.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Locate
  and select the 'Component' table in the 'Tables' list.</p>
  
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0pt;margin-bottom:4.3pt;
! margin-left:39.6pt;text-indent:-21.6pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.2.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>In
  the Component table, locate the component you need to change ( Ctrl-F invokes
  the 'Find' dialog).&nbsp; The component names are listed below in section <a
  href="#_2.3.1_Components_for_Configuration_"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>7.2.3.1</span></span></a>.&nbsp; For this example,
! the component name is 'elf_CellServDB'.</p>
! 
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0pt;margin-bottom:4.3pt;
! margin-left:39.6pt;text-indent:-21.6pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.3.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Go to
! the 'Condition' column of the component.</p>
! 
! <p class=MsoNormal style='margin-top:4.3pt;margin-right:0pt;margin-bottom:4.3pt;
! margin-left:39.6pt;text-indent:-21.6pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.4.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Enter
  a condition that evaluates to false. I.e. 'DONOTINSTALL'. (Note that an
  undefined property always evaluates to false).</p>
  
***************
*** 4794,4880 ****
  that you can also use this step to disable other configuration files without
  providing replacements.</p>
  
! <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Add a new component containing the new configuration file.</p>
  
! <p class=MsoNormal style='margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.1.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Select
  the 'Component' table in the 'Tables' list.</p>
  
! <p class=MsoNormal style='margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.2.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Select
  'Tables'-&gt;'Add Row' (Ctrl-R).</p>
  
! <p class=MsoNormal style='margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.3.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Enter
  the following :</p>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
   style='margin-left:39.35pt;border-collapse:collapse;mso-yfti-tbllook:1184;
!  mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:23.35pt'>
    <td width=115 valign=top style='width:86.25pt;border:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt;height:23.35pt'>
    <p class=preformattedtext>Component</p>
    </td>
    <td width=475 valign=top style='width:356.55pt;border:solid windowtext 1.0pt;
!   border-left:none;padding:0in 5.4pt 0in 5.4pt;height:23.35pt'>
    <p class=preformattedtext>cmf_my_CellServDB</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
    <td width=115 valign=top style='width:86.25pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>ComponentID</p>
    </td>
    <td width=475 valign=top style='width:356.55pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>{7019836F-BB2C-4AF6-9463-0D6EC9035CF1}</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
    <td width=115 valign=top style='width:86.25pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Directory_</p>
    </td>
    <td width=475 valign=top style='width:356.55pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>dirClient</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
    <td width=115 valign=top style='width:86.25pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Attributes</p>
    </td>
    <td width=475 valign=top style='width:356.55pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>144</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
    <td width=115 valign=top style='width:86.25pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Condition</p>
    </td>
    <td width=475 valign=top style='width:356.55pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>&nbsp;</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;mso-yfti-lastrow:yes'>
    <td width=115 valign=top style='width:86.25pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>KeyPath</p>
    </td>
    <td width=475 valign=top style='width:356.55pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>fil_my_CellServDB</p>
    </td>
   </tr>
--- 4862,4952 ----
  that you can also use this step to disable other configuration files without
  providing replacements.</p>
  
! <p class=MsoNormal style='margin-left:18.0pt;text-indent:-18.0pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Add a new component containing the new configuration file.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.1.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Select
  the 'Component' table in the 'Tables' list.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.2.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Select
  'Tables'-&gt;'Add Row' (Ctrl-R).</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.3.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Enter
  the following :</p>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
   style='margin-left:39.35pt;border-collapse:collapse;mso-yfti-tbllook:1184;
!  mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:23.35pt'>
    <td width=115 valign=top style='width:86.25pt;border:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt;height:23.35pt'>
    <p class=preformattedtext>Component</p>
    </td>
    <td width=475 valign=top style='width:356.55pt;border:solid windowtext 1.0pt;
!   border-left:none;padding:0pt 5.4pt 0pt 5.4pt;height:23.35pt'>
    <p class=preformattedtext>cmf_my_CellServDB</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
    <td width=115 valign=top style='width:86.25pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>ComponentID</p>
    </td>
    <td width=475 valign=top style='width:356.55pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>{7019836F-BB2C-4AF6-9463-0D6EC9035CF1}</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
    <td width=115 valign=top style='width:86.25pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Directory_</p>
    </td>
    <td width=475 valign=top style='width:356.55pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>dirClient</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
    <td width=115 valign=top style='width:86.25pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Attributes</p>
    </td>
    <td width=475 valign=top style='width:356.55pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>144</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
    <td width=115 valign=top style='width:86.25pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Condition</p>
    </td>
    <td width=475 valign=top style='width:356.55pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>&nbsp;</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;mso-yfti-lastrow:yes'>
    <td width=115 valign=top style='width:86.25pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>KeyPath</p>
    </td>
    <td width=475 valign=top style='width:356.55pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>fil_my_CellServDB</p>
    </td>
   </tr>
***************
*** 4894,4998 ****
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  'fil_my_CellServDB' is a key into the 'File' table which we will fill later.</p>
  
! <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>3.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Add a new feature to hold the new component.</p>
  
! <p class=MsoNormal style='margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>3.1.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Select
  the 'Feature' table.</p>
  
! <p class=MsoNormal style='margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>3.2.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Add
! a new row (Ctrl-R or 'Tables'-&gt;'Add Row') with the following values:</p>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
   style='margin-left:40.1pt;border-collapse:collapse;mso-yfti-tbllook:1184;
!  mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Feature</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border:solid windowtext 1.0pt;
!   border-left:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>fea_my_CellServDB</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Feature_Parent</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>feaClient</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Title</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>&nbsp;</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Description</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>&nbsp;</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Display</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>0</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Level</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>30</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:6'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Directory_</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>&nbsp;</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:7;mso-yfti-lastrow:yes'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Attributes</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>8</p>
    </td>
   </tr>
--- 4966,5073 ----
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  'fil_my_CellServDB' is a key into the 'File' table which we will fill later.</p>
  
! <p class=MsoNormal style='margin-left:18.0pt;text-indent:-18.0pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>3.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Add a new feature to hold the new component.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>3.1.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Select
  the 'Feature' table.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>3.2.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Add a
! new row (Ctrl-R or 'Tables'-&gt;'Add Row') with the following values:</p>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
   style='margin-left:40.1pt;border-collapse:collapse;mso-yfti-tbllook:1184;
!  mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Feature</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border:solid windowtext 1.0pt;
!   border-left:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>fea_my_CellServDB</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Feature_Parent</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>feaClient</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Title</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>&nbsp;</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Description</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>&nbsp;</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Display</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>0</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Level</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>30</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:6'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Directory_</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>&nbsp;</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:7;mso-yfti-lastrow:yes'>
    <td width=126 valign=top style='width:94.8pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Attributes</p>
    </td>
    <td width=462 valign=top style='width:346.2pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>8</p>
    </td>
   </tr>
***************
*** 5013,5133 ****
  on all features in the OpenAFS MSI.&nbsp; The OpenAFS MSI is not designed for
  an advertised installation.</p>
  
! <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>4.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Join the component and the feature.</p>
  
! <p class=MsoNormal style='margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>4.1.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Select
  the 'FeatureComponents' table.</p>
  
! <p class=MsoNormal style='margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>4.2.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Add
! a new row with the following values:</p>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
   style='margin-left:40.1pt;border-collapse:collapse;mso-yfti-tbllook:1184;
!  mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Feature</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border:solid windowtext 1.0pt;
!   border-left:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>fea_my_CellServDB</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Component</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>cmf_my_CellServDB</p>
    </td>
   </tr>
  </table>
  
! <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>5.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Add an entry to the 'File' table.</p>
  
! <p class=MsoNormal style='margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>5.1.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Select
  the 'File' table.</p>
  
! <p class=MsoNormal style='margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>5.2.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Add
! a new row with the following values:</p>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
   style='margin-left:40.1pt;border-collapse:collapse;mso-yfti-tbllook:1184;
!  mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>File</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border:solid windowtext 1.0pt;
!   border-left:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>fil_my_CellServDB</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Component_</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>cmf_my_CellServDB</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>FileName</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>CellServDB</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>FileSize</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>(enter file size here)</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Attributes</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>8192</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;mso-yfti-lastrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>Sequence</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>1000</p>
    </td>
   </tr>
--- 5088,5214 ----
  on all features in the OpenAFS MSI.&nbsp; The OpenAFS MSI is not designed for
  an advertised installation.</p>
  
! <p class=MsoNormal style='margin-left:18.0pt;text-indent:-18.0pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>4.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Join the component and the feature.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>4.1.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Select
  the 'FeatureComponents' table.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>4.2.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Add a
! new row with the following values:</p>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
   style='margin-left:40.1pt;border-collapse:collapse;mso-yfti-tbllook:1184;
!  mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Feature</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border:solid windowtext 1.0pt;
!   border-left:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>fea_my_CellServDB</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Component</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>cmf_my_CellServDB</p>
    </td>
   </tr>
  </table>
  
! <p class=MsoNormal style='margin-left:18.0pt;text-indent:-18.0pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>5.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Add an entry to the 'File' table.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>5.1.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Select
  the 'File' table.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>5.2.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Add a
! new row with the following values:</p>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
   style='margin-left:40.1pt;border-collapse:collapse;mso-yfti-tbllook:1184;
!  mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>File</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border:solid windowtext 1.0pt;
!   border-left:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>fil_my_CellServDB</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Component_</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>cmf_my_CellServDB</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>FileName</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>CellServDB</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>FileSize</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>(enter file size here)</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Attributes</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>8192</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;mso-yfti-lastrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>Sequence</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>1000</p>
    </td>
   </tr>
***************
*** 5139,5184 ****
  <p class=MsoNormal style='margin-left:35.45pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  'Attributes' value is msidbFileAttributesNonCompressed (8192).&nbsp; This is
  because we will be placing this file in the same directory as the MSI instead
! of embedding the file in it.&nbsp; Transforms do not support updating
! compressed sources or adding new cabinet streams.</p>
  
  <p class=MsoNormal style='margin-left:35.45pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Finally,
  the 'Sequence' value of 1000 will be used later to distinguish the file as
  being in a separate source location than the other files in the MSI.</p>
  
! <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>6.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Set a media source for the file.</p>
  
! <p class=MsoNormal style='margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>6.1.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Select
  the 'Media' table.</p>
  
! <p class=MsoNormal style='margin-left:.55in;text-indent:-.3in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>6.2.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp; </span>Add
! a row with the following values :</p>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
   style='margin-left:40.1pt;border-collapse:collapse;mso-yfti-tbllook:1184;
!  mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>DiskId</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border:solid windowtext 1.0pt;
!   border-left:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>2</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>LastSequence</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0in 5.4pt 0in 5.4pt'>
    <p class=preformattedtext>1000</p>
    </td>
   </tr>
--- 5220,5268 ----
  <p class=MsoNormal style='margin-left:35.45pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  'Attributes' value is msidbFileAttributesNonCompressed (8192).&nbsp; This is
  because we will be placing this file in the same directory as the MSI instead
! of embedding the file in it.&nbsp; Transforms do not support updating compressed
! sources or adding new cabinet streams.</p>
  
  <p class=MsoNormal style='margin-left:35.45pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Finally,
  the 'Sequence' value of 1000 will be used later to distinguish the file as
  being in a separate source location than the other files in the MSI.</p>
  
! <p class=MsoNormal style='margin-left:18.0pt;text-indent:-18.0pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>6.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Set a media source for the file.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>6.1.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Select
  the 'Media' table.</p>
  
! <p class=MsoNormal style='margin-left:39.6pt;text-indent:-21.6pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>6.2.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp; </span>Add a
! row with the following values :</p>
  
  <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
   style='margin-left:40.1pt;border-collapse:collapse;mso-yfti-tbllook:1184;
!  mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>DiskId</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border:solid windowtext 1.0pt;
!   border-left:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>2</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
    <td width=126 valign=top style='width:94.5pt;border:solid windowtext 1.0pt;
!   border-top:none;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>LastSequence</p>
    </td>
    <td width=462 valign=top style='width:346.5pt;border-top:none;border-left:
    none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
!   padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=preformattedtext>1000</p>
    </td>
   </tr>
***************
*** 5195,5203 ****
  name="_Toc191662172"></a><a name="_Toc152605135"></a><a name="_Toc139993185"></a><a
  name="_Toc126872262"></a><a name="_Toc115416193"></a><a
  name="_2.3.1_Components_for_Configuration_"></a><span style='mso-bookmark:_Toc191662172'><span
! style='mso-bookmark:_Toc152605135'><span style='mso-fareast-font-family:"Times New Roman"'>7.2.3.1
! Components for Configuration Files</span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h4>
  
  <p class=preformattedtext style='text-indent:35.45pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>CellServDB:
  'cpf_CellServDB' (ID {D5BA4C15-DBEC-4292-91FC-B54C30F24F2A})</p>
--- 5279,5285 ----
  name="_Toc191662172"></a><a name="_Toc152605135"></a><a name="_Toc139993185"></a><a
  name="_Toc126872262"></a><a name="_Toc115416193"></a><a
  name="_2.3.1_Components_for_Configuration_"></a><span style='mso-bookmark:_Toc191662172'><span
! style='mso-bookmark:_Toc152605135'>7.2.3.1 Components for Configuration Files</span></span></h4>
  
  <p class=preformattedtext style='text-indent:35.45pt;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>CellServDB:
  'cpf_CellServDB' (ID {D5BA4C15-DBEC-4292-91FC-B54C30F24F2A})</p>
***************
*** 5207,5224 ****
  name="_Toc152605136"></a><a name="_Toc115416194"></a><a name="_Toc139993186"></a><a
  name="_Toc126872263"></a><span style='mso-bookmark:_Toc193871720'><span
  style='mso-bookmark:_Toc193871475'><span style='mso-bookmark:_Toc191662173'><span
! style='mso-bookmark:_Toc152605136'><span style='mso-bookmark:_Toc115416194'><span
! style='mso-fareast-font-family:"Times New Roman"'>7.2.4 Adding Domain Specific
! Registry Keys</span></span></span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Following
  is an example for adding domain specific registry keys.</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;&nbsp;&nbsp;
  Refer to <a href="#_Appendix_A:_Registry_Values"><span class=Heading1Char><span
! style='font-size:14.0pt;text-decoration:none;text-underline:none'>Appendix A</span></span></a>
! section 2.1 for more information.</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;&nbsp;&nbsp;
  Columns that are unspecified should be left empty.</p>
--- 5289,5305 ----
  name="_Toc152605136"></a><a name="_Toc115416194"></a><a name="_Toc139993186"></a><a
  name="_Toc126872263"></a><span style='mso-bookmark:_Toc193871720'><span
  style='mso-bookmark:_Toc193871475'><span style='mso-bookmark:_Toc191662173'><span
! style='mso-bookmark:_Toc152605136'><span style='mso-bookmark:_Toc115416194'>7.2.4
! Adding Domain Specific Registry Keys</span></span></span></span></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Following
  is an example for adding domain specific registry keys.</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;&nbsp;&nbsp;
  Refer to <a href="#_Appendix_A:_Registry_Values"><span class=Heading1Char><span
! style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
! none;text-underline:none'>Appendix A</span></span></a> section 2.1 for more
! information.</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;&nbsp;&nbsp;
  Columns that are unspecified should be left empty.</p>
***************
*** 5227,5240 ****
  We create a new feature and component to hold the new registry keys.</p>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'Feature' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5308,5321 ----
  We create a new feature and component to hold the new registry keys.</p>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'Feature' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5252,5263 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'Component' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new row)<br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5333,5344 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'Component' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new row)<br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5266,5284 ****
    ComponentId&nbsp; : '{4E3FCBF4-8BE7-40B2-A108-C47CF743C627}'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 'TARGETDIR'<br>
!   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attributes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!   : 4<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    KeyPath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 'reg_domkey0'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'FeatureComponents' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5347,5365 ----
    ComponentId&nbsp; : '{4E3FCBF4-8BE7-40B2-A108-C47CF743C627}'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 'TARGETDIR'<br>
!   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!   Attributes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 4<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    KeyPath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 'reg_domkey0'</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'FeatureComponents' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5289,5300 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:6'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'Registry' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:7'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5370,5381 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:6'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'Registry' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:7'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5312,5318 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:8'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5393,5399 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:8'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5333,5344 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:9'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!   Registry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :
!   'reg_domkey2'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    : 2<br>
--- 5414,5424 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:9'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!   Registry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 'reg_domkey2'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    : 2<br>
***************
*** 5354,5360 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:10'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5434,5440 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:10'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5365,5371 ****
    : 2<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!   : 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\ATHENA.MIT.EDU'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    : 'LogonOptions'<br>
--- 5445,5452 ----
    : 2<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!   :
!   'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\ATHENA.MIT.EDU'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    : 'LogonOptions'<br>
***************
*** 5377,5383 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:11'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5458,5464 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:11'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5398,5411 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:12'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Registry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :
    'reg_domkey5'<br>
!   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!   Root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    : 2<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5479,5491 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:12'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Registry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :
    'reg_domkey5'<br>
!   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    : 2<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5422,5428 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:13;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal style='margin-bottom:12.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5502,5508 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:13;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal style='margin-bottom:12.0pt'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5433,5441 ****
    : 2<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!   : 'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST'<br>
!   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!   Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    : 'FailLoginsSilently'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5513,5521 ----
    : 2<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!   :
!   'SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST'<br>
!   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    : 'FailLoginsSilently'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    Value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5457,5466 ****
  name="_Toc152605137"></a><a name="_Toc115416195"></a><a name="_Toc139993187"></a><a
  name="_Toc126872264"></a><span style='mso-bookmark:_Toc193871721'><span
  style='mso-bookmark:_Toc193871476'><span style='mso-bookmark:_Toc191662174'><span
! style='mso-bookmark:_Toc152605137'><span style='mso-bookmark:_Toc115416195'><span
! style='mso-fareast-font-family:"Times New Roman"'>7.2.5 Adding Site Specific
! Freelance Registry Keys</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Following
  is an example for adding site specific Freelance registry keys to pre-populate
--- 5537,5544 ----
  name="_Toc152605137"></a><a name="_Toc115416195"></a><a name="_Toc139993187"></a><a
  name="_Toc126872264"></a><span style='mso-bookmark:_Toc193871721'><span
  style='mso-bookmark:_Toc193871476'><span style='mso-bookmark:_Toc191662174'><span
! style='mso-bookmark:_Toc152605137'><span style='mso-bookmark:_Toc115416195'>7.2.5
! Adding Site Specific Freelance Registry Keys</span></span></span></span></span></h3>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Following
  is an example for adding site specific Freelance registry keys to pre-populate
***************
*** 5473,5490 ****
  We create a new feature and component to hold the new registry keys.</p>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'Feature' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!   Feature&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 'feaFreelanceKeys'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Feature
    Parent : 'feaClient'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5551,5569 ----
  We create a new feature and component to hold the new registry keys.</p>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'Feature' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
!   Feature&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :
!   'feaFreelanceKeys'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Feature
    Parent : 'feaClient'<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5497,5508 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'Component' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new row)<br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5576,5587 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:2'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'Component' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new row)<br>
    &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5519,5530 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'FeatureComponents' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5598,5609 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:4'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'FeatureComponents' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5535,5546 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:6'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'Registry' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:7'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5614,5625 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:6'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp; 'Registry' table:</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:7'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5557,5563 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:8'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5636,5642 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:8'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5580,5586 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:9'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5659,5665 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:9'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5602,5608 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:10'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5681,5687 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:10'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5619,5625 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:11'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5698,5704 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:11'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5642,5648 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:12;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 5721,5727 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:12;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    (new row)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
***************
*** 5677,5685 ****
  name="_Toc126872265"></a><a name="_Toc115417101"></a><a name="_Toc115416196"></a><span
  style='mso-bookmark:_Toc193871722'><span style='mso-bookmark:_Toc193871477'><span
  style='mso-bookmark:_Toc191662175'><span style='mso-bookmark:_Toc152605138'><span
! style='mso-bookmark:_Ref115275867'><span style='mso-fareast-font-family:"Times New Roman"'>7.3
! Additional Resources</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  you want to add registry keys or files you need to create new components and
--- 5756,5762 ----
  name="_Toc126872265"></a><a name="_Toc115417101"></a><a name="_Toc115416196"></a><span
  style='mso-bookmark:_Toc193871722'><span style='mso-bookmark:_Toc193871477'><span
  style='mso-bookmark:_Toc191662175'><span style='mso-bookmark:_Toc152605138'><span
! style='mso-bookmark:_Ref115275867'>7.3 Additional Resources</span></span></span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  you want to add registry keys or files you need to create new components and
***************
*** 5701,5709 ****
  'Level' column for those features to equal the 'Level' for their parent
  features for consistency.&nbsp; Note that none of the features in the OpenAFS
  for Windows MSI package are designed to be installed to run from 'source' or
! 'advertised'.&nbsp; It is recommended that you set 'msidbFeatureAttributesFavorLocal'
! (0), 'msidbFeatureAttributesFollowParent' (2) and
! 'msidbFeatureAttributesDisallowAdvertise' (8) attributes for new features.</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  you are creating new components, retain the same component GUID when creating
--- 5778,5787 ----
  'Level' column for those features to equal the 'Level' for their parent
  features for consistency.&nbsp; Note that none of the features in the OpenAFS
  for Windows MSI package are designed to be installed to run from 'source' or
! 'advertised'.&nbsp; It is recommended that you set
! 'msidbFeatureAttributesFavorLocal' (0), 'msidbFeatureAttributesFollowParent'
! (2) and 'msidbFeatureAttributesDisallowAdvertise' (8) attributes for new
! features.</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  you are creating new components, retain the same component GUID when creating
***************
*** 5718,5725 ****
  'openafs-en_US.msi'.&nbsp; Generates transform 'openafs-transform.mst')</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;&nbsp;&nbsp;
! &gt; msitran.exe -g openafs-en_US.msi openafs-en_US_new.msi
! openafs-transform.mst</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>See
  the Platform SDK documentation for information on command line options for
--- 5796,5802 ----
  'openafs-en_US.msi'.&nbsp; Generates transform 'openafs-transform.mst')</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;&nbsp;&nbsp;
! &gt; msitran.exe -g openafs-en_US.msi openafs-en_US_new.msi openafs-transform.mst</p>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>See
  the Platform SDK documentation for information on command line options for
***************
*** 5731,5739 ****
  name="_Toc126872266"></a><a name="_Toc115417102"></a><span style='mso-bookmark:
  _Toc193871723'><span style='mso-bookmark:_Toc193871478'><span style='mso-bookmark:
  _Toc191662176'><span style='mso-bookmark:_Toc152605139'><span style='mso-bookmark:
! _Toc115416197'><span style='mso-fareast-font-family:"Times New Roman"'>7.4.
! Upgrades</span></span></span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  MSI package is designed to uninstall previous versions of OpenAFS for Windows
--- 5808,5814 ----
  name="_Toc126872266"></a><a name="_Toc115417102"></a><span style='mso-bookmark:
  _Toc193871723'><span style='mso-bookmark:_Toc193871478'><span style='mso-bookmark:
  _Toc191662176'><span style='mso-bookmark:_Toc152605139'><span style='mso-bookmark:
! _Toc115416197'>7.4. Upgrades</span></span></span></span></span></h2>
  
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  MSI package is designed to uninstall previous versions of OpenAFS for Windows
***************
*** 5744,5763 ****
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Versions
  of OpenAFS that are upgraded by the MSI package are:</p>
  
! <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1)<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>OpenAFS MSI package<br>
  Upgrade code {6823EEDD-84FC-4204-ABB3-A80D25779833}<br>
  Up to current release</p>
  
! <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2)<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>MIT's Transarc AFS MSI package<br>
  Upgrade code {5332B94F-DE38-4927-9EAB-51F4A64193A7}<br>
  Up to version 3.6.2</p>
  
! <p class=MsoNormal style='margin-left:.5in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>3)<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>OpenAFS NSIS package<br>
  All versions</p>
  
--- 5819,5841 ----
  <p class=MsoNormal style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Versions
  of OpenAFS that are upgraded by the MSI package are:</p>
  
! <p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1)<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>OpenAFS MSI package<br>
  Upgrade code {6823EEDD-84FC-4204-ABB3-A80D25779833}<br>
  Up to current release</p>
  
! <p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2)<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>MIT's Transarc AFS MSI package<br>
  Upgrade code {5332B94F-DE38-4927-9EAB-51F4A64193A7}<br>
  Up to version 3.6.2</p>
  
! <p class=MsoNormal style='margin-left:36.0pt;text-indent:-18.0pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>3)<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>OpenAFS NSIS package<br>
  All versions</p>
  
***************
*** 5782,5790 ****
  name="_Toc115417116"></a><a name="_Toc115417103"></a><a name="_Toc115416198"></a><a
  name="_Appendix_A:_Registry_Values"></a><a name="_Appendix_A:_Registry"></a><span
  style='mso-bookmark:_Toc193871724'><span style='mso-bookmark:_Toc193871479'><span
! style='mso-bookmark:_Toc191662177'><span style='mso-bookmark:_Toc152605140'><span
! style='mso-fareast-font-family:"Times New Roman"'>Appendix A: Registry Values</span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h1>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871725"></a><a name="_Toc193871480"></a><a name="_Toc191662178"></a><a
--- 5860,5867 ----
  name="_Toc115417116"></a><a name="_Toc115417103"></a><a name="_Toc115416198"></a><a
  name="_Appendix_A:_Registry_Values"></a><a name="_Appendix_A:_Registry"></a><span
  style='mso-bookmark:_Toc193871724'><span style='mso-bookmark:_Toc193871479'><span
! style='mso-bookmark:_Toc191662177'><span style='mso-bookmark:_Toc152605140'>Appendix
! A: Registry Values</span></span></span></span></h1>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871725"></a><a name="_Toc193871480"></a><a name="_Toc191662178"></a><a
***************
*** 5792,5800 ****
  name="_Toc126872268"></a><a name="_Toc115417104"></a><span style='mso-bookmark:
  _Toc193871725'><span style='mso-bookmark:_Toc193871480'><span style='mso-bookmark:
  _Toc191662178'><span style='mso-bookmark:_Toc152605141'><span style='mso-bookmark:
! _Toc115416199'><span style='mso-fareast-font-family:"Times New Roman"'>A.1.
! Service parameters</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  service parameters primarily affect the behavior of the AFS client service
--- 5869,5875 ----
  name="_Toc126872268"></a><a name="_Toc115417104"></a><span style='mso-bookmark:
  _Toc193871725'><span style='mso-bookmark:_Toc193871480'><span style='mso-bookmark:
  _Toc191662178'><span style='mso-bookmark:_Toc152605141'><span style='mso-bookmark:
! _Toc115416199'>A.1. Service parameters</span></span></span></span></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  service parameters primarily affect the behavior of the AFS client service
***************
*** 5805,5832 ****
  name="_Toc152605142"></a><a name="_Toc115416200"></a><a name="_Toc139993192"></a><a
  name="_Toc126872269"></a><span style='mso-bookmark:_Toc193871726'><span
  style='mso-bookmark:_Toc193871481'><span style='mso-bookmark:_Toc191662179'><span
! style='mso-bookmark:_Toc152605142'><span style='mso-bookmark:_Toc115416200'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:145.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:145.25pt'>
    <h5><a name="_Toc191662180"></a><a name="_Toc152605143"></a><a
!   name="_Toc115416201"></a><a name="_Toc139993193"></a><a name="_Toc126872270"></a><span
    style='mso-bookmark:_Toc191662180'><span style='mso-bookmark:_Toc152605143'><span
!   style='mso-bookmark:_Toc115416201'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   LANadapter</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: -1<br>
    Variable: LANadapter</p>
    <p class=MsoBodyText>LAN adapter number to use.&nbsp; This is the lana number
!   of the LAN adapter that the SMB server should bind to.&nbsp; If unspecified
!   or set to -1, a LAN adapter with named 'AFS' or a loopback adapter will be
    selected.&nbsp; If neither are present, then all available adapters will be
    bound to.&nbsp; When binding to a non-loopback adapter, the NetBIOS name
    hostname%-AFS' will be used (where %hostname% is the NetBIOS name of the host
--- 5880,5903 ----
  name="_Toc152605142"></a><a name="_Toc115416200"></a><a name="_Toc139993192"></a><a
  name="_Toc126872269"></a><span style='mso-bookmark:_Toc193871726'><span
  style='mso-bookmark:_Toc193871481'><span style='mso-bookmark:_Toc191662179'><span
! style='mso-bookmark:_Toc152605142'><span style='mso-bookmark:_Toc115416200'>Regkey:<br>
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:145.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:145.25pt'>
    <h5><a name="_Toc191662180"></a><a name="_Toc152605143"></a><a
!   name="_Toc115416201"></a><a name="_Toc126872270"></a><a name="_Toc139993193"></a><span
    style='mso-bookmark:_Toc191662180'><span style='mso-bookmark:_Toc152605143'><span
!   style='mso-bookmark:_Toc115416201'>Value: LANadapter</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: -1<br>
    Variable: LANadapter</p>
    <p class=MsoBodyText>LAN adapter number to use.&nbsp; This is the lana number
!   of the LAN adapter that the SMB server should bind to.&nbsp; If unspecified or
!   set to -1, a LAN adapter with named 'AFS' or a loopback adapter will be
    selected.&nbsp; If neither are present, then all available adapters will be
    bound to.&nbsp; When binding to a non-loopback adapter, the NetBIOS name
    hostname%-AFS' will be used (where %hostname% is the NetBIOS name of the host
***************
*** 5834,5846 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662181"></a><a name="_Toc152605144"></a><a
!   name="_Toc139993194"></a><a name="_Toc126872271"></a><a name="_Toc115416202"></a><a
!   name="_Value___:_CacheSize"></a><span style='mso-bookmark:_Toc191662181'><span
!   style='mso-bookmark:_Toc152605144'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   CacheSize</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 98304 (CM_CONFIGDEFAULT_CACHESIZE)<br>
    Variable: cm_initParams.cacheSize</p>
--- 5905,5916 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662181"></a><a name="_Toc152605144"></a><a
!   name="_Value___:_CacheSize"></a><a name="_Toc115416202"></a><a
!   name="_Toc126872271"></a><a name="_Toc139993194"></a><span style='mso-bookmark:
!   _Toc191662181'><span style='mso-bookmark:_Toc152605144'>Value: CacheSize</span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 98304 (CM_CONFIGDEFAULT_CACHESIZE)<br>
    Variable: cm_initParams.cacheSize</p>
***************
*** 5848,5861 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:2;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662182"></a><a name="_Toc152605145"></a><a
!   name="_Toc115416203"></a><a name="_Toc139993195"></a><a name="_Toc126872272"></a><span
    style='mso-bookmark:_Toc191662182'><span style='mso-bookmark:_Toc152605145'><span
!   style='mso-bookmark:_Toc115416203'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   ChunkSize</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 20 (CM_CONFIGDEFAULT_CHUNKSIZE)<br>
    Variable: cm_logChunkSize (cm_chunkSize = 1 &lt;&lt; cm_logChunkSize)</p>
--- 5918,5929 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:2;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662182"></a><a name="_Toc152605145"></a><a
!   name="_Toc115416203"></a><a name="_Toc126872272"></a><a name="_Toc139993195"></a><span
    style='mso-bookmark:_Toc191662182'><span style='mso-bookmark:_Toc152605145'><span
!   style='mso-bookmark:_Toc115416203'>Value: ChunkSize</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 20 (CM_CONFIGDEFAULT_CHUNKSIZE)<br>
    Variable: cm_logChunkSize (cm_chunkSize = 1 &lt;&lt; cm_logChunkSize)</p>
***************
*** 5864,5876 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:3;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662183"></a><a name="_Toc152605146"></a><a
!   name="_Toc115416204"></a><a name="_Toc139993196"></a><a name="_Toc126872273"></a><span
    style='mso-bookmark:_Toc191662183'><span style='mso-bookmark:_Toc152605146'><span
!   style='mso-bookmark:_Toc115416204'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   Daemons</span></span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 4 (CM_CONFIGDEFAULT_DAEMONS)<br>
    Variable: numBkgD</p>
--- 5932,5943 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:3;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662183"></a><a name="_Toc152605146"></a><a
!   name="_Toc115416204"></a><a name="_Toc126872273"></a><a name="_Toc139993196"></a><span
    style='mso-bookmark:_Toc191662183'><span style='mso-bookmark:_Toc152605146'><span
!   style='mso-bookmark:_Toc115416204'>Value: Daemons</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 4 (CM_CONFIGDEFAULT_DAEMONS)<br>
    Variable: numBkgD</p>
***************
*** 5879,5908 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:4;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662184"></a><a name="_Toc152605147"></a><a
!   name="_Toc115416205"></a><a name="_Toc139993197"></a><a name="_Toc126872274"></a><span
    style='mso-bookmark:_Toc191662184'><span style='mso-bookmark:_Toc152605147'><span
!   style='mso-bookmark:_Toc115416205'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   ServerThreads</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 25 (CM_CONFIGDEFAULT_SVTHREADS)<br>
    Variable: numSvThreads</p>
!   <p class=MsoBodyText>Number of SMB server threads (number of threads of smb_Server).
!   (see smb_Server in smb.c).</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662185"></a><a name="_Toc152605148"></a><a
!   name="_Toc115416206"></a><a name="_Value:_Stats"></a><a name="_Toc139993198"></a><a
!   name="_Toc126872275"></a><span style='mso-bookmark:_Toc191662185'><span
!   style='mso-bookmark:_Toc152605148'><span style='mso-bookmark:_Toc115416206'><span
!   style='mso-fareast-font-family:"Times New Roman"'>Value: Stats</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 10000 (CM_CONFIGDEFAULT_STATS)<br>
    Variable: cm_initParams.nStatCaches</p>
--- 5946,5972 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:4;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662184"></a><a name="_Toc152605147"></a><a
!   name="_Toc115416205"></a><a name="_Toc126872274"></a><a name="_Toc139993197"></a><span
    style='mso-bookmark:_Toc191662184'><span style='mso-bookmark:_Toc152605147'><span
!   style='mso-bookmark:_Toc115416205'>Value: ServerThreads</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 25 (CM_CONFIGDEFAULT_SVTHREADS)<br>
    Variable: numSvThreads</p>
!   <p class=MsoBodyText>Number of SMB server threads (number of threads of
!   smb_Server). (see smb_Server in smb.c).</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662185"></a><a name="_Toc152605148"></a><a
!   name="_Toc115416206"></a><a name="_Toc126872275"></a><a name="_Toc139993198"></a><a
!   name="_Value:_Stats"></a><span style='mso-bookmark:_Toc191662185'><span
!   style='mso-bookmark:_Toc152605148'><span style='mso-bookmark:_Toc115416206'>Value:
!   Stats</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 10000 (CM_CONFIGDEFAULT_STATS)<br>
    Variable: cm_initParams.nStatCaches</p>
***************
*** 5910,5946 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:6;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
!   <h5><span style='mso-fareast-font-family:"Times New Roman"'>Value: Volumes<o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
!   Default: <span style='mso-spacerun:yes'> </span>3333 (CM_CONFIGDEFAULT_STATS/3)<br>
    Variable: cm_initParams.nVolumes</p>
    <h5><span style='font-weight:normal;mso-bidi-font-weight:bold'>Cache
    configuration.<o:p></o:p></span></h5>
    </td>
   </tr>
   <tr style='mso-yfti-irow:7;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
!   <h5><span style='mso-fareast-font-family:"Times New Roman"'>Value: Cells<o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 1024 (CM_CONFIGDEFAULT_CELLS)<br>
    Variable: cm_initParams.nCells</p>
!   <h5><span style='font-weight:normal;mso-bidi-font-weight:bold'>Cache
!   configuration.</span><span style='mso-fareast-font-family:"Times New Roman";
!   font-weight:normal;mso-bidi-font-weight:bold'><o:p></o:p></span></h5>
    </td>
   </tr>
   <tr style='mso-yfti-irow:8;height:78.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:78.5pt'>
    <h5><a name="_Toc191662186"></a><a name="_Toc152605149"></a><a
!   name="_Toc139993199"></a><a name="_Toc126872276"></a><a name="_Toc115416207"></a><a
!   name="_Value_:_LogoffPreserveTokens"></a><span style='mso-bookmark:_Toc191662186'><span
!   style='mso-bookmark:_Toc152605149'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   LogoffPreserveTokens</span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default : 0</p>
    <p class=MsoBodyText>If enabled (set to 1), the Logoff Event handler will not
--- 5974,6008 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:6;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
!   <h5>Value: Volumes</h5>
    <p class=MsoBodyText>Type: DWORD<br>
!   Default:<span style='mso-spacerun:yes'>  </span>3333
!   (CM_CONFIGDEFAULT_STATS/3)<br>
    Variable: cm_initParams.nVolumes</p>
    <h5><span style='font-weight:normal;mso-bidi-font-weight:bold'>Cache
    configuration.<o:p></o:p></span></h5>
    </td>
   </tr>
   <tr style='mso-yfti-irow:7;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
!   <h5>Value: Cells</h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 1024 (CM_CONFIGDEFAULT_CELLS)<br>
    Variable: cm_initParams.nCells</p>
!   <h5><span style='font-weight:normal;mso-bidi-font-weight:bold'>Cache configuration.<o:p></o:p></span></h5>
    </td>
   </tr>
   <tr style='mso-yfti-irow:8;height:78.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:78.5pt'>
    <h5><a name="_Toc191662186"></a><a name="_Toc152605149"></a><a
!   name="_Value_:_LogoffPreserveTokens"></a><a name="_Toc115416207"></a><a
!   name="_Toc126872276"></a><a name="_Toc139993199"></a><span style='mso-bookmark:
!   _Toc191662186'><span style='mso-bookmark:_Toc152605149'>Value:
!   LogoffPreserveTokens</span></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default : 0</p>
    <p class=MsoBodyText>If enabled (set to 1), the Logoff Event handler will not
***************
*** 5949,5962 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:9;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662187"></a><a name="_Toc152605150"></a><a
!   name="_Toc115416208"></a><a name="_Toc139993200"></a><a name="_Toc126872277"></a><span
    style='mso-bookmark:_Toc191662187'><span style='mso-bookmark:_Toc152605150'><span
!   style='mso-bookmark:_Toc115416208'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   RootVolume</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;root.afs&quot;<br>
    Variable: cm_rootVolumeName</p>
--- 6011,6022 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:9;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662187"></a><a name="_Toc152605150"></a><a
!   name="_Toc115416208"></a><a name="_Toc126872277"></a><a name="_Toc139993200"></a><span
    style='mso-bookmark:_Toc191662187'><span style='mso-bookmark:_Toc152605150'><span
!   style='mso-bookmark:_Toc115416208'>Value: RootVolume</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;root.afs&quot;<br>
    Variable: cm_rootVolumeName</p>
***************
*** 5964,5976 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:10;height:145.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:145.25pt'>
    <h5><a name="_Toc191662188"></a><a name="_Toc152605151"></a><a
!   name="_Toc139993201"></a><a name="_Toc126872278"></a><a name="_Toc115416209"></a><a
!   name="_Value_:_Mountroot"></a><span style='mso-bookmark:_Toc191662188'><span
!   style='mso-bookmark:_Toc152605151'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   MountRoot</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;/afs&quot;<br>
    Variable: cm_mountRoot</p>
--- 6024,6035 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:10;height:145.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:145.25pt'>
    <h5><a name="_Toc191662188"></a><a name="_Toc152605151"></a><a
!   name="_Value_:_Mountroot"></a><a name="_Toc115416209"></a><a
!   name="_Toc126872278"></a><a name="_Toc139993201"></a><span style='mso-bookmark:
!   _Toc191662188'><span style='mso-bookmark:_Toc152605151'>Value: MountRoot</span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;/afs&quot;<br>
    Variable: cm_mountRoot</p>
***************
*** 5985,5997 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:11;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662189"></a><a name="_Toc152605152"></a><a
!   name="_Toc139993202"></a><a name="_Toc126872279"></a><a name="_Toc115416210"></a><a
!   name="_Value_:_CachePath"></a><span style='mso-bookmark:_Toc191662189'><span
!   style='mso-bookmark:_Toc152605152'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   CachePath</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ or REG_EXPAND_SZ<br>
    Default: &quot;%TEMP%\AFSCache&quot;<br>
    Variable: cm_CachePath</p>
--- 6044,6055 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:11;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662189"></a><a name="_Toc152605152"></a><a
!   name="_Value_:_CachePath"></a><a name="_Toc115416210"></a><a
!   name="_Toc126872279"></a><a name="_Toc139993202"></a><span style='mso-bookmark:
!   _Toc191662189'><span style='mso-bookmark:_Toc152605152'>Value: CachePath</span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ or REG_EXPAND_SZ<br>
    Default: &quot;%TEMP%\AFSCache&quot;<br>
    Variable: cm_CachePath</p>
***************
*** 6001,6014 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:12;height:119.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:119.0pt'>
    <h5><a name="_Toc191662190"></a><a name="_Toc152605153"></a><a
!   name="_Toc115416211"></a><a name="_Toc139993203"></a><a name="_Toc126872280"></a><span
    style='mso-bookmark:_Toc191662190'><span style='mso-bookmark:_Toc152605153'><span
!   style='mso-bookmark:_Toc115416211'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   NonPersistentCaching</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD [0..1]<br>
    Default: 0<br>
    Variable: buf_CacheType</p>
--- 6059,6070 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:12;height:119.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:119.0pt'>
    <h5><a name="_Toc191662190"></a><a name="_Toc152605153"></a><a
!   name="_Toc115416211"></a><a name="_Toc126872280"></a><a name="_Toc139993203"></a><span
    style='mso-bookmark:_Toc191662190'><span style='mso-bookmark:_Toc152605153'><span
!   style='mso-bookmark:_Toc115416211'>Value: NonPersistentCaching</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD [0..1]<br>
    Default: 0<br>
    Variable: buf_CacheType</p>
***************
*** 6019,6032 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:13;height:125.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:125.5pt'>
    <h5><a name="_Toc191662191"></a><a name="_Toc152605154"></a><a
!   name="_Toc115416212"></a><a name="_Toc139993204"></a><a name="_Toc126872281"></a><span
    style='mso-bookmark:_Toc191662191'><span style='mso-bookmark:_Toc152605154'><span
!   style='mso-bookmark:_Toc115416212'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   ValidateCache</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD [0..2]<br>
    Default: 1<br>
    Variable: buf_CacheType</p>
--- 6075,6086 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:13;height:125.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:125.5pt'>
    <h5><a name="_Toc191662191"></a><a name="_Toc152605154"></a><a
!   name="_Toc115416212"></a><a name="_Toc126872281"></a><a name="_Toc139993204"></a><span
    style='mso-bookmark:_Toc191662191'><span style='mso-bookmark:_Toc152605154'><span
!   style='mso-bookmark:_Toc115416212'>Value: ValidateCache</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD [0..2]<br>
    Default: 1<br>
    Variable: buf_CacheType</p>
***************
*** 6038,6051 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:14;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662192"></a><a name="_Toc152605155"></a><a
!   name="_Toc115416213"></a><a name="_Toc139993205"></a><a name="_Toc126872282"></a><span
    style='mso-bookmark:_Toc191662192'><span style='mso-bookmark:_Toc152605155'><span
!   style='mso-bookmark:_Toc115416213'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   TrapOnPanic</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: traceOnPanic</p>
--- 6092,6103 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:14;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662192"></a><a name="_Toc152605155"></a><a
!   name="_Toc115416213"></a><a name="_Toc126872282"></a><a name="_Toc139993205"></a><span
    style='mso-bookmark:_Toc191662192'><span style='mso-bookmark:_Toc152605155'><span
!   style='mso-bookmark:_Toc115416213'>Value: TrapOnPanic</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: traceOnPanic</p>
***************
*** 6054,6066 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:15;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662193"></a><a name="_Toc152605156"></a><a
!   name="_Toc139993206"></a><a name="_Toc126872283"></a><a name="_Toc115416214"></a><a
!   name="_Value___:_NetbiosName"></a><span style='mso-bookmark:_Toc191662193'><span
!   style='mso-bookmark:_Toc152605156'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   NetbiosName</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_EXPAND_SZ<br>
    Default: &quot;AFS&quot;<br>
    Variable: cm_NetbiosName</p>
--- 6106,6117 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:15;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662193"></a><a name="_Toc152605156"></a><a
!   name="_Value___:_NetbiosName"></a><a name="_Toc115416214"></a><a
!   name="_Toc126872283"></a><a name="_Toc139993206"></a><span style='mso-bookmark:
!   _Toc191662193'><span style='mso-bookmark:_Toc152605156'>Value: NetbiosName</span></span></h5>
    <p class=MsoBodyText>Type: REG_EXPAND_SZ<br>
    Default: &quot;AFS&quot;<br>
    Variable: cm_NetbiosName</p>
***************
*** 6070,6083 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:16;height:152.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:152.0pt'>
    <h5><a name="_Toc191662194"></a><a name="_Toc152605157"></a><a
!   name="_Toc115416215"></a><a name="_Toc139993207"></a><a name="_Toc126872284"></a><span
    style='mso-bookmark:_Toc191662194'><span style='mso-bookmark:_Toc152605157'><span
!   style='mso-bookmark:_Toc115416215'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   IsGateway</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: isGateway</p>
--- 6121,6132 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:16;height:152.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:152.0pt'>
    <h5><a name="_Toc191662194"></a><a name="_Toc152605157"></a><a
!   name="_Toc115416215"></a><a name="_Toc126872284"></a><a name="_Toc139993207"></a><span
    style='mso-bookmark:_Toc191662194'><span style='mso-bookmark:_Toc152605157'><span
!   style='mso-bookmark:_Toc115416215'>Value: IsGateway</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: isGateway</p>
***************
*** 6092,6105 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:17;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662195"></a><a name="_Toc152605158"></a><a
!   name="_Toc115416216"></a><a name="_Toc139993208"></a><a name="_Toc126872285"></a><span
    style='mso-bookmark:_Toc191662195'><span style='mso-bookmark:_Toc152605158'><span
!   style='mso-bookmark:_Toc115416216'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   ReportSessionStartups</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: reportSessionStartups</p>
--- 6141,6152 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:17;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662195"></a><a name="_Toc152605158"></a><a
!   name="_Toc115416216"></a><a name="_Toc126872285"></a><a name="_Toc139993208"></a><span
    style='mso-bookmark:_Toc191662195'><span style='mso-bookmark:_Toc152605158'><span
!   style='mso-bookmark:_Toc115416216'>Value: ReportSessionStartups</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: reportSessionStartups</p>
***************
*** 6109,6122 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:18;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662196"></a><a name="_Toc152605159"></a><a
!   name="_Toc139993209"></a><a name="_Toc126872286"></a><a name="_Toc115416217"></a><a
!   name="_Value_:_TraceBufferSize"></a><span style='mso-bookmark:_Toc191662196'><span
!   style='mso-bookmark:_Toc152605159'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   TraceBufferSize</span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 10000 (CM_CONFIGDEFAULT_TRACEBUFSIZE)<br>
    Variable: traceBufSize</p>
--- 6156,6168 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:18;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662196"></a><a name="_Toc152605159"></a><a
!   name="_Value_:_TraceBufferSize"></a><a name="_Toc115416217"></a><a
!   name="_Toc126872286"></a><a name="_Toc139993209"></a><span style='mso-bookmark:
!   _Toc191662196'><span style='mso-bookmark:_Toc152605159'>Value:
!   TraceBufferSize</span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 10000 (CM_CONFIGDEFAULT_TRACEBUFSIZE)<br>
    Variable: traceBufSize</p>
***************
*** 6124,6136 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:19;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662197"></a><a name="_Toc152605160"></a><a
!   name="_Toc139993210"></a><a name="_Toc126872287"></a><a name="_Toc115416218"></a><a
!   name="_Value_:_SysName"></a><span style='mso-bookmark:_Toc191662197'><span
!   style='mso-bookmark:_Toc152605160'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   SysName</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;x86_win32 i386_w2k i386_nt40&quot; (X86) <br>
    “amd64_win64 x86_win32 i386_w2k” (AMD64)<br>
--- 6170,6181 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:19;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662197"></a><a name="_Toc152605160"></a><a
!   name="_Value_:_SysName"></a><a name="_Toc115416218"></a><a
!   name="_Toc126872287"></a><a name="_Toc139993210"></a><span style='mso-bookmark:
!   _Toc191662197'><span style='mso-bookmark:_Toc152605160'>Value: SysName</span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;x86_win32 i386_w2k i386_nt40&quot; (X86) <br>
    “amd64_win64 x86_win32 i386_w2k” (AMD64)<br>
***************
*** 6141,6153 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:20;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662198"></a><a name="_Toc152605161"></a><a
!   name="_Toc139993211"></a><a name="_Toc126872288"></a><a name="_Toc115416219"></a><a
!   name="_Value_:_SecurityLevel"></a><span style='mso-bookmark:_Toc191662198'><span
!   style='mso-bookmark:_Toc152605161'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   SecurityLevel</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: cryptall</p>
--- 6186,6197 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:20;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662198"></a><a name="_Toc152605161"></a><a
!   name="_Value_:_SecurityLevel"></a><a name="_Toc115416219"></a><a
!   name="_Toc126872288"></a><a name="_Toc139993211"></a><span style='mso-bookmark:
!   _Toc191662198'><span style='mso-bookmark:_Toc152605161'>Value: SecurityLevel</span></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: cryptall</p>
***************
*** 6155,6167 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:21;height:112.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:112.25pt'>
    <h5><a name="_Toc191662199"></a><a name="_Toc152605162"></a><a
!   name="_Toc139993212"></a><a name="_Toc126872289"></a><a name="_Toc115416220"></a><a
!   name="_Value_:_UseDNS"></a><span style='mso-bookmark:_Toc191662199'><span
!   style='mso-bookmark:_Toc152605162'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   UseDNS</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 1<br>
    Variable: cm_dnsEnabled</p>
--- 6199,6210 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:21;height:112.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:112.25pt'>
    <h5><a name="_Toc191662199"></a><a name="_Toc152605162"></a><a
!   name="_Value_:_UseDNS"></a><a name="_Toc115416220"></a><a name="_Toc126872289"></a><a
!   name="_Toc139993212"></a><span style='mso-bookmark:_Toc191662199'><span
!   style='mso-bookmark:_Toc152605162'>Value: UseDNS</span></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 1<br>
    Variable: cm_dnsEnabled</p>
***************
*** 6172,6185 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:22;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662200"></a><a name="_Toc152605163"></a><a
!   name="_Toc139993213"></a><a name="_Toc126872290"></a><a name="_Toc115416221"></a><a
!   name="_Value_:_FreelanceClient"></a><span style='mso-bookmark:_Toc191662200'><span
!   style='mso-bookmark:_Toc152605163'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   FreelanceClient</span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: cm_freelanceEnabled</p>
--- 6215,6227 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:22;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662200"></a><a name="_Toc152605163"></a><a
!   name="_Value_:_FreelanceClient"></a><a name="_Toc115416221"></a><a
!   name="_Toc126872290"></a><a name="_Toc139993213"></a><span style='mso-bookmark:
!   _Toc191662200'><span style='mso-bookmark:_Toc152605163'>Value:
!   FreelanceClient</span></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 0<br>
    Variable: cm_freelanceEnabled</p>
***************
*** 6187,6200 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:23;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662201"></a><a name="_Toc152605164"></a><a
!   name="_Value:_HideDotFiles"></a><a name="_Toc139993214"></a><a
!   name="_Toc126872291"></a><a name="_Toc115416222"></a><a
!   name="_Value_:_HideDotFiles"></a><span style='mso-bookmark:_Toc191662201'><span
!   style='mso-bookmark:_Toc152605164'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   HideDotFiles</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 1<br>
    Variable: smb_hideDotFiles</p>
--- 6229,6241 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:23;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662201"></a><a name="_Toc152605164"></a><a
!   name="_Value_:_HideDotFiles"></a><a name="_Toc115416222"></a><a
!   name="_Toc126872291"></a><a name="_Toc139993214"></a><a
!   name="_Value:_HideDotFiles"></a><span style='mso-bookmark:_Toc191662201'><span
!   style='mso-bookmark:_Toc152605164'>Value: HideDotFiles</span></span></h5>
    <p class=MsoBodyText>Type: DWORD {1,0}<br>
    Default: 1<br>
    Variable: smb_hideDotFiles</p>
***************
*** 6204,6217 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:24;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662202"></a><a name="_Toc152605165"></a><a
!   name="_Toc115416223"></a><a name="_Toc139993215"></a><a name="_Toc126872292"></a><span
    style='mso-bookmark:_Toc191662202'><span style='mso-bookmark:_Toc152605165'><span
!   style='mso-bookmark:_Toc115416223'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   MaxMpxRequests</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 50<br>
    Variable: smb_maxMpxRequests</p>
--- 6245,6256 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:24;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662202"></a><a name="_Toc152605165"></a><a
!   name="_Toc115416223"></a><a name="_Toc126872292"></a><a name="_Toc139993215"></a><span
    style='mso-bookmark:_Toc191662202'><span style='mso-bookmark:_Toc152605165'><span
!   style='mso-bookmark:_Toc115416223'>Value: MaxMpxRequests</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 50<br>
    Variable: smb_maxMpxRequests</p>
***************
*** 6220,6233 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:25;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662203"></a><a name="_Toc152605166"></a><a
!   name="_Toc115416224"></a><a name="_Toc139993216"></a><a name="_Toc126872293"></a><span
    style='mso-bookmark:_Toc191662203'><span style='mso-bookmark:_Toc152605166'><span
!   style='mso-bookmark:_Toc115416224'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   MaxVCPerServer</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 100<br>
    Variable: smb_maxVCPerServer</p>
--- 6259,6270 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:25;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662203"></a><a name="_Toc152605166"></a><a
!   name="_Toc115416224"></a><a name="_Toc126872293"></a><a name="_Toc139993216"></a><span
    style='mso-bookmark:_Toc191662203'><span style='mso-bookmark:_Toc152605166'><span
!   style='mso-bookmark:_Toc115416224'>Value: MaxVCPerServer</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 100<br>
    Variable: smb_maxVCPerServer</p>
***************
*** 6235,6247 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:26;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662204"></a><a name="_Toc152605167"></a><a
!   name="_Toc139993217"></a><a name="_Toc126872294"></a><a name="_Toc115416225"></a><a
!   name="_Value_:_Cell"></a><span style='mso-bookmark:_Toc191662204'><span
!   style='mso-bookmark:_Toc152605167'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   Cell</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;<br>
    Variable: rootCellName</p>
--- 6272,6283 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:26;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662204"></a><a name="_Toc152605167"></a><a
!   name="_Value_:_Cell"></a><a name="_Toc115416225"></a><a name="_Toc126872294"></a><a
!   name="_Toc139993217"></a><span style='mso-bookmark:_Toc191662204'><span
!   style='mso-bookmark:_Toc152605167'>Value: Cell</span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;<br>
    Variable: rootCellName</p>
***************
*** 6250,6328 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:27;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
!   <h5><a name="_Toc115416226"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   RxEnablePeerStats</span></a></h5>
!   <p class=MsoBodyText><span style='mso-bookmark:_Toc115416226'>Type: DWORD {0,
!   1}<br>
    Default: 1<br>
!   Variable: rx_enable_peer_stats</span></p>
!   <p class=MsoBodyText><span style='mso-bookmark:_Toc115416226'>When set to 1,
!   the Rx library collects peer statistics.</span></p>
!   <p><span style='mso-bookmark:_Toc115416226'>&nbsp;</span></p>
    </td>
-   <span style='mso-bookmark:_Toc115416226'></span>
   </tr>
   <tr style='mso-yfti-irow:28;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
!   <h5><span style='mso-bookmark:_Toc115416226'><span style='mso-fareast-font-family:
!   "Times New Roman"'>Value: Rx</span>EnableProcessStats</span><span
!   style='mso-bookmark:_Toc115416226'><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></span></h5>
!   <p class=MsoBodyText><span style='mso-bookmark:_Toc115416226'>Type: DWORD {0,
!   1}<br>
    Default: 1<br>
!   Variable: rx_extra_process_stats</span></p>
!   <p class=MsoBodyText><span style='mso-bookmark:_Toc115416226'>When set to 1,
!   the Rx library collects process statistics.</span></p>
!   <p class=MsoNormal style='margin:0in;margin-bottom:.0001pt'><span
!   style='mso-bookmark:_Toc115416226'><span style='font-size:10.0pt;font-family:
!   "Times New Roman","serif";mso-fareast-font-family:"Times New Roman"'>&nbsp;<o:p></o:p></span></span></p>
    </td>
-   <span style='mso-bookmark:_Toc115416226'></span>
   </tr>
   <tr style='mso-yfti-irow:29;height:124.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:124.75pt'>
!   <h5><span style='mso-bookmark:_Toc115416226'><span style='mso-fareast-font-family:
!   "Times New Roman"'>Value: RxExtraPackets<o:p></o:p></span></span></h5>
!   <p class=MsoBodyText><span style='mso-bookmark:_Toc115416226'>Type: DWORD <br>
    Default: 120<br>
!   Variable: rx_extraPackets</span></p>
!   <p class=MsoBodyText><span style='mso-bookmark:_Toc115416226'>When set, this
!   number of extra Rx packets are allocated at startup.</span></p>
    </td>
-   <span style='mso-bookmark:_Toc115416226'></span>
   </tr>
   <tr style='mso-yfti-irow:30;height:124.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:124.75pt'>
!   <h5><span style='mso-bookmark:_Toc115416226'><a name="_Toc191662206"></a><a
!   name="_Toc152605169"></a><a name="_Toc139993219"></a><a name="_Toc126872296"></a><a
!   name="_Toc115416227"></a><a name="_Value_:_RxMaxMTU"></a><span
!   style='mso-bookmark:_Toc191662206'><span style='mso-bookmark:_Toc152605169'><span
!   style='mso-fareast-font-family:"Times New Roman"'>Value: RxMaxMTU</span></span></span></span><span
!   style='mso-bookmark:_Toc115416226'><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></span></h5>
!   <p class=MsoBodyText><span style='mso-bookmark:_Toc115416226'>Type: DWORD<br>
    Default: 0<br>
!   Variable: rx_mtu</span></p>
!   <p class=MsoBodyText><span style='mso-bookmark:_Toc115416226'>If set to
!   anything other than 0, that value is used as the maximum send and receive MTU
!   supported by the RX interface.</span></p>
!   <p class=MsoBodyText><span style='mso-bookmark:_Toc115416226'>In order to
!   enable OpenAFS to operate across releases of the Cisco IPSec VPN client prior
!   than 5.0, this value must be set to 1264 or smaller.</span></p>
    </td>
-   <span style='mso-bookmark:_Toc115416226'></span>
   </tr>
   <tr style='mso-yfti-irow:31;height:101.65pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:101.65pt'>
!   <h5><span style='mso-bookmark:_Toc115416226'><a name="_Toc139993218"></a><a
!   name="_Toc126872295"></a><a name="_Toc152605168"></a><a name="_Toc191662205"></a><span
!   style='mso-fareast-font-family:"Times New Roman"'>Value: RxNoJumbo</span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0,1}<br>
    Default: 0<br>
    Variable: rx_nojumbo</p>
--- 6286,6348 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:27;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
!   <h5>Value: RxEnablePeerStats</h5>
!   <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1<br>
!   Variable: rx_enable_peer_stats</p>
!   <p class=MsoBodyText>When set to 1, the Rx library collects peer statistics.</p>
!   <p>&nbsp;</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:28;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
!   <h5>Value: RxEnableProcessStats</h5>
!   <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1<br>
!   Variable: rx_extra_process_stats</p>
!   <p class=MsoBodyText>When set to 1, the Rx library collects process
!   statistics.</p>
!   <p class=MsoNormal style='margin:0pt;margin-bottom:.0001pt'><span
!   style='font-size:10.0pt;font-family:"Times New Roman";mso-fareast-font-family:
!   "Times New Roman"'>&nbsp;<o:p></o:p></span></p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:29;height:124.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:124.75pt'>
!   <h5>Value: RxExtraPackets</h5>
!   <p class=MsoBodyText>Type: DWORD <br>
    Default: 120<br>
!   Variable: rx_extraPackets</p>
!   <p class=MsoBodyText>When set, this number of extra Rx packets are allocated
!   at startup.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:30;height:124.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:124.75pt'>
!   <h5><a name="_Toc191662206"></a><a name="_Toc152605169"></a><a
!   name="_Value_:_RxMaxMTU"></a><a name="_Toc115416227"></a><a
!   name="_Toc126872296"></a><a name="_Toc139993219"></a><span style='mso-bookmark:
!   _Toc191662206'><span style='mso-bookmark:_Toc152605169'>Value: RxMaxMTU</span></span></h5>
!   <p class=MsoBodyText>Type: DWORD<br>
    Default: 0<br>
!   Variable: rx_mtu</p>
!   <p class=MsoBodyText>If set to anything other than 0, that value is used as
!   the maximum send and receive MTU supported by the RX interface.</p>
!   <p class=MsoBodyText>In order to enable OpenAFS to operate across releases of
!   the Cisco IPSec VPN client prior than 5.0, this value must be set to 1264 or
!   smaller.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:31;height:101.65pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:101.65pt'>
!   <h5><a name="_Toc191662205"></a><a name="_Toc152605168"></a><a
!   name="_Toc126872295"></a><a name="_Toc139993218"></a>Value: RxNoJumbo</h5>
    <p class=MsoBodyText>Type: DWORD {0,1}<br>
    Default: 0<br>
    Variable: rx_nojumbo</p>
***************
*** 6331,6367 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:32;height:151.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:151.75pt'>
    <h5><a name="_Toc191662207"></a><a name="_Toc152605170"></a><a
!   name="_Toc139993220"></a><a name="_Toc126872297"></a><a name="_Toc115416228"></a><a
!   name="_Value:_ConnDeadTimeout"></a><span style='mso-bookmark:_Toc191662207'><span
!   style='mso-bookmark:_Toc152605170'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   ConnDeadTimeout</span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 60 (seconds)<br>
    Variable: ConnDeadtimeout</p>
    <p class=MsoBodyText>The Connection Dead Time is enforced to be at a minimum
!   15 seconds longer than the minimum SMB timeout as specified by
!   [HKLM\SYSTEM\CurrentControlSet\Services\lanmanworkstation\parameters]
    SessTimeout</p>
    <p class=MsoBodyText>If the minimum SMB timeout is not specified the value is
    45 seconds.&nbsp; See <a
    href="http://support.microsoft.com/support/kb/articles/Q102/0/67.asp"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>http://support.microsoft.com:80/support/kb/articles/Q102/0/67.asp</span></span></a></p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:33;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662208"></a><a name="_Toc152605171"></a><a
!   name="_Toc115416229"></a><a name="_Toc139993221"></a><a name="_Toc126872298"></a><span
    style='mso-bookmark:_Toc191662208'><span style='mso-bookmark:_Toc152605171'><span
!   style='mso-bookmark:_Toc115416229'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   HardDeadTimeout</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 120 (seconds)<br>
    Variable: HardDeadtimeout</p>
--- 6351,6383 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:32;height:151.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:151.75pt'>
    <h5><a name="_Toc191662207"></a><a name="_Toc152605170"></a><a
!   name="_Value:_ConnDeadTimeout"></a><a name="_Toc115416228"></a><a
!   name="_Toc126872297"></a><a name="_Toc139993220"></a><span style='mso-bookmark:
!   _Toc191662207'><span style='mso-bookmark:_Toc152605170'>Value:
!   ConnDeadTimeout</span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 60 (seconds)<br>
    Variable: ConnDeadtimeout</p>
    <p class=MsoBodyText>The Connection Dead Time is enforced to be at a minimum
!   15 seconds longer than the minimum SMB timeout as specified by [HKLM\SYSTEM\CurrentControlSet\Services\lanmanworkstation\parameters]
    SessTimeout</p>
    <p class=MsoBodyText>If the minimum SMB timeout is not specified the value is
    45 seconds.&nbsp; See <a
    href="http://support.microsoft.com/support/kb/articles/Q102/0/67.asp"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>http://support.microsoft.com:80/support/kb/articles/Q102/0/67.asp</span></span></a></p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:33;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662208"></a><a name="_Toc152605171"></a><a
!   name="_Toc115416229"></a><a name="_Toc126872298"></a><a name="_Toc139993221"></a><span
    style='mso-bookmark:_Toc191662208'><span style='mso-bookmark:_Toc152605171'><span
!   style='mso-bookmark:_Toc115416229'>Value: HardDeadTimeout</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 120 (seconds)<br>
    Variable: HardDeadtimeout</p>
***************
*** 6370,6385 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:34;height:158.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:158.5pt'>
    <h5><a name="_Toc191662209"></a><a name="_Toc152605172"></a><a
!   name="_Toc139993222"></a><a name="_Toc126872299"></a><a name="_Toc115416230"></a><a
!   name="_Value__:_TraceOption"></a><span style='mso-bookmark:_Toc191662209'><span
!   style='mso-bookmark:_Toc152605172'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   TraceOption</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0-15}<br>
    Default: 0</p>
!   <p class=MsoBodyText>Enables logging of debug output to the Windows Event Log.</p>
    <p class=MsoBodyText>Bit 0 enables logging of &quot;Logon Events&quot;
    processed by the Network Provider and Winlogon Event Notification
    Handler.&nbsp; </p>
--- 6386,6401 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:34;height:158.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:158.5pt'>
    <h5><a name="_Toc191662209"></a><a name="_Toc152605172"></a><a
!   name="_Value__:_TraceOption"></a><a name="_Toc115416230"></a><a
!   name="_Toc126872299"></a><a name="_Toc139993222"></a><span style='mso-bookmark:
!   _Toc191662209'><span style='mso-bookmark:_Toc152605172'>Value: TraceOption</span></span></h5>
    <p class=MsoBodyText>Type: DWORD {0-15}<br>
    Default: 0</p>
!   <p class=MsoBodyText>Enables logging of debug output to the Windows Event
!   Log.</p>
    <p class=MsoBodyText>Bit 0 enables logging of &quot;Logon Events&quot;
    processed by the Network Provider and Winlogon Event Notification
    Handler.&nbsp; </p>
***************
*** 6391,6404 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:35;height:98.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:98.5pt'>
    <h5><a name="_Toc191662210"></a><a name="_Toc152605173"></a><a
!   name="_Toc115416231"></a><a name="_Toc139993223"></a><a name="_Toc126872300"></a><span
    style='mso-bookmark:_Toc191662210'><span style='mso-bookmark:_Toc152605173'><span
!   style='mso-bookmark:_Toc115416231'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   AllSubmount</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1</p>
    <p class=MsoBodyText>Variable: allSubmount (smb.c)</p>
--- 6407,6418 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:35;height:98.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:98.5pt'>
    <h5><a name="_Toc191662210"></a><a name="_Toc152605173"></a><a
!   name="_Toc115416231"></a><a name="_Toc126872300"></a><a name="_Toc139993223"></a><span
    style='mso-bookmark:_Toc191662210'><span style='mso-bookmark:_Toc152605173'><span
!   style='mso-bookmark:_Toc115416231'>Value: AllSubmount</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1</p>
    <p class=MsoBodyText>Variable: allSubmount (smb.c)</p>
***************
*** 6408,6421 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:36;height:78.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:78.5pt'>
    <h5><a name="_Toc191662211"></a><a name="_Toc152605174"></a><a
!   name="_Toc139993224"></a><a name="_Toc126872301"></a><a name="_Toc115416232"></a><a
!   name="_Value___:_NoFindLanaByName"></a><span style='mso-bookmark:_Toc191662211'><span
!   style='mso-bookmark:_Toc152605174'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   NoFindLanaByName</span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0</p>
    <p class=MsoBodyText>Disables the attempt to identity the network adapter to
--- 6422,6434 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:36;height:78.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:78.5pt'>
    <h5><a name="_Toc191662211"></a><a name="_Toc152605174"></a><a
!   name="_Value___:_NoFindLanaByName"></a><a name="_Toc115416232"></a><a
!   name="_Toc126872301"></a><a name="_Toc139993224"></a><span style='mso-bookmark:
!   _Toc191662211'><span style='mso-bookmark:_Toc152605174'>Value:
!   NoFindLanaByName</span></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0</p>
    <p class=MsoBodyText>Disables the attempt to identity the network adapter to
***************
*** 6423,6435 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:37;height:78.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:78.5pt'>
    <h5><a name="_Toc191662212"></a><a name="_Toc152605175"></a><a
!   name="_Toc115416233"></a><a name="_Toc139993225"></a><a name="_Toc126872302"></a><span
    style='mso-bookmark:_Toc191662212'><span style='mso-bookmark:_Toc152605175'><span
!   style='mso-bookmark:_Toc115416233'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   MaxCPUs</span></span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {1..32} or {1..64} depending on the
    architecture<br>
    Default: &lt;no default&gt;</p>
--- 6436,6447 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:37;height:78.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:78.5pt'>
    <h5><a name="_Toc191662212"></a><a name="_Toc152605175"></a><a
!   name="_Toc115416233"></a><a name="_Toc126872302"></a><a name="_Toc139993225"></a><span
    style='mso-bookmark:_Toc191662212'><span style='mso-bookmark:_Toc152605175'><span
!   style='mso-bookmark:_Toc115416233'>Value: MaxCPUs</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD {1..32} or {1..64} depending on the
    architecture<br>
    Default: &lt;no default&gt;</p>
***************
*** 6439,6451 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:38;height:151.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:151.75pt'>
    <h5><a name="_Toc191662213"></a><a name="_Toc152605176"></a><a
!   name="_Toc139993226"></a><a name="_Toc126872303"></a><a name="_Toc115416234"></a><a
!   name="_Value___:_smbAuthType"></a><span style='mso-bookmark:_Toc191662213'><span
!   style='mso-bookmark:_Toc152605176'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   smbAuthType</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0..2}<br>
    Default: 2</p>
    <p class=MsoBodyText>If this value is specified, it defines the type of SMB
--- 6451,6462 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:38;height:151.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:151.75pt'>
    <h5><a name="_Toc191662213"></a><a name="_Toc152605176"></a><a
!   name="_Value___:_smbAuthType"></a><a name="_Toc115416234"></a><a
!   name="_Toc126872303"></a><a name="_Toc139993226"></a><span style='mso-bookmark:
!   _Toc191662213'><span style='mso-bookmark:_Toc152605176'>Value: smbAuthType</span></span></h5>
    <p class=MsoBodyText>Type: DWORD {0..2}<br>
    Default: 2</p>
    <p class=MsoBodyText>If this value is specified, it defines the type of SMB
***************
*** 6458,6487 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:39;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662214"></a><a name="_Toc152605177"></a><a
!   name="_Toc139993227"></a><a name="_Toc126872304"></a><a name="_Toc115416235"></a><a
!   name="_Value___:_MaxLogSize"></a><span style='mso-bookmark:_Toc191662214'><span
!   style='mso-bookmark:_Toc152605177'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   MaxLogSize</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0 .. MAXDWORD}<br>
    Default: 100K</p>
!   <p class=MsoBodyText>This entry determines the maximum size of the %WINDIR%\TEMP\afsd_init.log
!   file.&nbsp; If the file is larger than this value when afsd_service.exe
!   starts the file will be reset to 0 bytes.&nbsp; If this value is 0, it means
!   the file should be allowed to grow indefinitely.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:40;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662215"></a><a name="_Toc152605178"></a><a
!   name="_Toc115416236"></a><a name="_Toc139993228"></a><a name="_Toc126872305"></a><span
    style='mso-bookmark:_Toc191662215'><span style='mso-bookmark:_Toc152605178'><span
!   style='mso-bookmark:_Toc115416236'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   FlushOnHibernate</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0,1}<br>
    Default: 1</p>
    <p class=MsoBodyText>If set, flushes all volumes before the machine goes on
--- 6469,6495 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:39;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662214"></a><a name="_Toc152605177"></a><a
!   name="_Value___:_MaxLogSize"></a><a name="_Toc115416235"></a><a
!   name="_Toc126872304"></a><a name="_Toc139993227"></a><span style='mso-bookmark:
!   _Toc191662214'><span style='mso-bookmark:_Toc152605177'>Value: MaxLogSize</span></span></h5>
    <p class=MsoBodyText>Type: DWORD {0 .. MAXDWORD}<br>
    Default: 100K</p>
!   <p class=MsoBodyText>This entry determines the maximum size of the
!   %WINDIR%\TEMP\afsd_init.log file.&nbsp; If the file is larger than this value
!   when afsd_service.exe starts the file will be reset to 0 bytes.&nbsp; If this
!   value is 0, it means the file should be allowed to grow indefinitely.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:40;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662215"></a><a name="_Toc152605178"></a><a
!   name="_Toc115416236"></a><a name="_Toc126872305"></a><a name="_Toc139993228"></a><span
    style='mso-bookmark:_Toc191662215'><span style='mso-bookmark:_Toc152605178'><span
!   style='mso-bookmark:_Toc115416236'>Value: FlushOnHibernate</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD {0,1}<br>
    Default: 1</p>
    <p class=MsoBodyText>If set, flushes all volumes before the machine goes on
***************
*** 6489,6500 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:41;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662216"></a><a name="_Toc152605179"><span
!   style='mso-bookmark:_Toc191662216'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   daemonCheckDownInterval</span></span></a><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 180</p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>This
--- 6497,6506 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:41;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662216"></a><a name="_Toc152605179"><span
!   style='mso-bookmark:_Toc191662216'>Value: daemonCheckDownInterval</span></a></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 180</p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>This
***************
*** 6503,6514 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:42;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662217"></a><a name="_Toc152605180"><span
!   style='mso-bookmark:_Toc191662217'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   daemonCheckUpInterval</span></span></a><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 600</p>
    <p class=MsoBodyText>This value controls how frequently the AFS cache manager
--- 6509,6518 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:42;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662217"></a><a name="_Toc152605180"><span
!   style='mso-bookmark:_Toc191662217'>Value: daemonCheckUpInterval</span></a></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 600</p>
    <p class=MsoBodyText>This value controls how frequently the AFS cache manager
***************
*** 6516,6527 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:43;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662218"></a><a name="_Toc152605181"><span
!   style='mso-bookmark:_Toc191662218'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   daemonCheckVolInterval</span></span></a><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 3600</p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>This
--- 6520,6529 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:43;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662218"></a><a name="_Toc152605181"><span
!   style='mso-bookmark:_Toc191662218'>Value: daemonCheckVolInterval</span></a></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 3600</p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>This
***************
*** 6530,6541 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:44;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662219"></a><a name="_Toc152605182"><span
!   style='mso-bookmark:_Toc191662219'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   daemonCheckCBInterval</span></span></a><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 60</p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>This
--- 6532,6541 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:44;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662219"></a><a name="_Toc152605182"><span
!   style='mso-bookmark:_Toc191662219'>Value: daemonCheckCBInterval</span></a></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 60</p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>This
***************
*** 6544,6555 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:45;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662220"></a><a name="_Toc152605183"><span
!   style='mso-bookmark:_Toc191662220'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   daemonCheckLockInterval</span></span></a><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 60</p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>This
--- 6544,6553 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:45;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662220"></a><a name="_Toc152605183"><span
!   style='mso-bookmark:_Toc191662220'>Value: daemonCheckLockInterval</span></a></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 60</p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>This
***************
*** 6558,6569 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:46;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662221"></a><a name="_Toc152605184"><span
!   style='mso-bookmark:_Toc191662221'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   daemonCheckTokenInterval</span></span></a><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 180</p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>This
--- 6556,6565 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:46;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662221"></a><a name="_Toc152605184"><span
!   style='mso-bookmark:_Toc191662221'>Value: daemonCheckTokenInterval</span></a></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 180</p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>This
***************
*** 6572,6582 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:47;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662222"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   daemonCheckOfflineVolInterval</span></a><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 600</p>
    <p class=MsoBodyText>This value controls how frequently the AFS cache manager
--- 6568,6576 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:47;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662222">Value: daemonCheckOfflineVolInterval</a></h5>
    <p class=MsoBodyText>Type: DWORD (seconds)<br>
    Default: 600</p>
    <p class=MsoBodyText>This value controls how frequently the AFS cache manager
***************
*** 6586,6596 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:48;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662223"></a><a name="_Toc152605185"><span
!   style='mso-bookmark:_Toc191662223'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   CallBackPort</span></span></a><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 7001</p>
    <p class=MsoBodyText>This value specifies which port number should be used
--- 6580,6589 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:48;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662223"></a><a name="_Toc152605185"><span
!   style='mso-bookmark:_Toc191662223'>Value: CallBackPort</span></a></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 7001</p>
    <p class=MsoBodyText>This value specifies which port number should be used
***************
*** 6602,6618 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:49;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662224"></a><a name="_Toc152605186"></a><a
    name="_Value:_EnableServerLocks"></a><span style='mso-bookmark:_Toc191662224'><span
!   style='mso-bookmark:_Toc152605186'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   EnableServerLocks</span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1, 2}<br>
    Default: 1</p>
!   <p class=MsoBodyText>Determines whether or not the AFS file server is contacted
!   for </p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>0:
    never obtain server locks<o:p></o:p></span></p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>1:
--- 6595,6609 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:49;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662224"></a><a name="_Toc152605186"></a><a
    name="_Value:_EnableServerLocks"></a><span style='mso-bookmark:_Toc191662224'><span
!   style='mso-bookmark:_Toc152605186'>Value: EnableServerLocks</span></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1, 2}<br>
    Default: 1</p>
!   <p class=MsoBodyText>Determines whether or not the AFS file server is
!   contacted for </p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>0:
    never obtain server locks<o:p></o:p></span></p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>1:
***************
*** 6622,6637 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:50;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662225"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   DeleteReadOnly</span></a><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0</p>
!   <p class=MsoBodyText>Determines whether or not the AFS Cache Manager will
!   permit files marked with the “Read Only” DOS attribute to be deleted or
!   not.<span style='mso-spacerun:yes'>  </span>For compatibility with Explorer,
!   the default is ‘no’.</p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>0:
    do not permit “Read Only” files to be deleted.<o:p></o:p></span></p>
    <p class=MsoBodyText>1: delete files that have the “Read Only” attribute set
--- 6613,6627 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:50;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662225">Value: DeleteReadOnly</a></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0</p>
!   <p class=MsoBodyText>Determines whether or not the AFS Cache Manager will permit
!   files marked with the “Read Only” DOS attribute to be deleted or not.<span
!   style='mso-spacerun:yes'>  </span>For compatibility with Explorer, the
!   default is ‘no’.</p>
    <p class=MsoBodyText><span style='mso-fareast-font-family:"Times New Roman"'>0:
    do not permit “Read Only” files to be deleted.<o:p></o:p></span></p>
    <p class=MsoBodyText>1: delete files that have the “Read Only” attribute set
***************
*** 6639,6648 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:51;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662226"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   BPlusTrees</span></a><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1</p>
    <p class=MsoBodyText>Determines whether or not the AFS Cache Manager uses
--- 6629,6637 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:51;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662226">Value: BPlusTrees</a></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1</p>
    <p class=MsoBodyText>Determines whether or not the AFS Cache Manager uses
***************
*** 6654,6664 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:52;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662227"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   PrefetchExecutableExtensions</span></a><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: MULTI_SZ <br>
    Default: none specified</p>
    <p class=MsoNormal>The AFS Cache Manager will pre-fetch the entire contents
--- 6643,6651 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:52;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662227">Value: PrefetchExecutableExtensions</a></h5>
    <p class=MsoBodyText>Type: MULTI_SZ <br>
    Default: none specified</p>
    <p class=MsoNormal>The AFS Cache Manager will pre-fetch the entire contents
***************
*** 6669,6678 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:53;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662228"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   OfflineReadOnlyIsValid</span></a><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0</p>
    <p class=MsoBodyText>Determines whether or not cached data from .readonly
--- 6656,6664 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:53;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662228">Value: OfflineReadOnlyIsValid</a></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0</p>
    <p class=MsoBodyText>Determines whether or not cached data from .readonly
***************
*** 6685,6694 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:54;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662229"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   GiveUpAllCallBacks</span></a><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0</p>
    <p class=MsoNormal>Determines whether or not the AFS Cache Manager will give
--- 6671,6679 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:54;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662229">Value: GiveUpAllCallBacks</a></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0</p>
    <p class=MsoNormal>Determines whether or not the AFS Cache Manager will give
***************
*** 6702,6711 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:55;mso-yfti-lastrow:yes;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662230"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   FollowBackupPath</span></a><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0</p>
    <p class=MsoNormal>Determines whether or not the AFS Cache Manager will give
--- 6687,6695 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:55;mso-yfti-lastrow:yes;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
!   <h5><a name="_Toc191662230">Value: FollowBackupPath</a></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0</p>
    <p class=MsoNormal>Determines whether or not the AFS Cache Manager will give
***************
*** 6724,6746 ****
  name="_Toc152605187"></a><a name="_Toc115416237"></a><a name="_Toc139993229"></a><a
  name="_Toc126872306"></a><span style='mso-bookmark:_Toc193871727'><span
  style='mso-bookmark:_Toc193871482'><span style='mso-bookmark:_Toc191662231'><span
! style='mso-bookmark:_Toc152605187'><span style='mso-bookmark:_Toc115416237'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters\GlobalAutoMapper]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:65.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.0pt'>
    <h5><a name="_Toc191662232"></a><a name="_Toc152605188"></a><a
!   name="_Toc115416238"></a><a name="_Toc139993230"></a><a name="_Toc126872307"></a><span
    style='mso-bookmark:_Toc191662232'><span style='mso-bookmark:_Toc152605188'><span
!   style='mso-bookmark:_Toc115416238'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   &lt;Drive Letter:&gt; for example &quot;G:&quot;</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ</p>
    <p class=MsoBodyText>Specifies the submount name to be mapped by
    afsd_service.exe at startup to the provided drive letter.</p>
--- 6708,6727 ----
  name="_Toc152605187"></a><a name="_Toc115416237"></a><a name="_Toc139993229"></a><a
  name="_Toc126872306"></a><span style='mso-bookmark:_Toc193871727'><span
  style='mso-bookmark:_Toc193871482'><span style='mso-bookmark:_Toc191662231'><span
! style='mso-bookmark:_Toc152605187'><span style='mso-bookmark:_Toc115416237'>Regkey:<br>
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters\GlobalAutoMapper]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:65.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.0pt'>
    <h5><a name="_Toc191662232"></a><a name="_Toc152605188"></a><a
!   name="_Toc115416238"></a><a name="_Toc126872307"></a><a name="_Toc139993230"></a><span
    style='mso-bookmark:_Toc191662232'><span style='mso-bookmark:_Toc152605188'><span
!   style='mso-bookmark:_Toc115416238'>Value: &lt;Drive Letter:&gt; for example
!   &quot;G:&quot;</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ</p>
    <p class=MsoBodyText>Specifies the submount name to be mapped by
    afsd_service.exe at startup to the provided drive letter.</p>
***************
*** 6755,6792 ****
  name="_Toc152605189"></a><a name="_Toc115416239"></a><a name="_Toc139993231"></a><a
  name="_Toc126872308"></a><span style='mso-bookmark:_Toc193871728'><span
  style='mso-bookmark:_Toc193871483'><span style='mso-bookmark:_Toc191662233'><span
! style='mso-bookmark:_Toc152605189'><span style='mso-bookmark:_Toc115416239'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:78.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:78.5pt'>
    <h5><a name="_Toc191662234"></a><a name="_Toc152605190"></a><a
!   name="_Toc139993232"></a><a name="_Toc126872309"></a><a name="_Toc115416240"></a><a
!   name="_Value___:_CellServDBDir"></a><span style='mso-bookmark:_Toc191662234'><span
!   style='mso-bookmark:_Toc152605190'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   CellServDBDir</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;not defined&gt;</p>
    <p class=MsoBodyText>Specifies the directory containing the CellServDB
!   file.&nbsp; When this value is not specified, the ProgramData directory is
!   searched and if the CellServDB file is not found, the AFS Client install
!   directory is used.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;height:145.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:145.25pt'>
    <h5><a name="_Toc191662235"></a><a name="_Toc152605191"></a><a
!   name="_Toc139993233"></a><a name="_Toc126872310"></a><a name="_Toc115416241"></a><a
!   name="_Value___:_VerifyServiceSignature"></a><span style='mso-bookmark:_Toc191662235'><span
!   style='mso-bookmark:_Toc152605191'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   VerifyServiceSignature</span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x1</p>
    <p class=MsoBodyText>This value can be used to disable the runtime
--- 6736,6769 ----
  name="_Toc152605189"></a><a name="_Toc115416239"></a><a name="_Toc139993231"></a><a
  name="_Toc126872308"></a><span style='mso-bookmark:_Toc193871728'><span
  style='mso-bookmark:_Toc193871483'><span style='mso-bookmark:_Toc191662233'><span
! style='mso-bookmark:_Toc152605189'><span style='mso-bookmark:_Toc115416239'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:78.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:78.5pt'>
    <h5><a name="_Toc191662234"></a><a name="_Toc152605190"></a><a
!   name="_Value___:_CellServDBDir"></a><a name="_Toc115416240"></a><a
!   name="_Toc126872309"></a><a name="_Toc139993232"></a><span style='mso-bookmark:
!   _Toc191662234'><span style='mso-bookmark:_Toc152605190'>Value: CellServDBDir</span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;not defined&gt;</p>
    <p class=MsoBodyText>Specifies the directory containing the CellServDB
!   file.&nbsp; When this value is not specified, the ProgramData directory is searched
!   and if the CellServDB file is not found, the AFS Client install directory is
!   used.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;height:145.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:145.25pt'>
    <h5><a name="_Toc191662235"></a><a name="_Toc152605191"></a><a
!   name="_Value___:_VerifyServiceSignature"></a><a name="_Toc115416241"></a><a
!   name="_Toc126872310"></a><a name="_Toc139993233"></a><span style='mso-bookmark:
!   _Toc191662235'><span style='mso-bookmark:_Toc152605191'>Value:
!   VerifyServiceSignature</span></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x1</p>
    <p class=MsoBodyText>This value can be used to disable the runtime
***************
*** 6801,6814 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:2;height:105.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:105.5pt'>
    <h5><a name="_Toc191662236"></a><a name="_Toc152605192"></a><a
!   name="_Value:_IoctlDebug"></a><a name="_Toc139993234"></a><a
!   name="_Toc126872311"></a><a name="_Toc115416242"></a><a
!   name="_Value___:_IoctlDebug"></a><span style='mso-bookmark:_Toc191662236'><span
!   style='mso-bookmark:_Toc152605192'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   IoctlDebug</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x0</p>
    <p class=MsoBodyText>This value can be used to debug the cause of pioctl()
--- 6778,6790 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:2;height:105.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:105.5pt'>
    <h5><a name="_Toc191662236"></a><a name="_Toc152605192"></a><a
!   name="_Value___:_IoctlDebug"></a><a name="_Toc115416242"></a><a
!   name="_Toc126872311"></a><a name="_Toc139993234"></a><a
!   name="_Value:_IoctlDebug"></a><span style='mso-bookmark:_Toc191662236'><span
!   style='mso-bookmark:_Toc152605192'>Value: IoctlDebug</span></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x0</p>
    <p class=MsoBodyText>This value can be used to debug the cause of pioctl()
***************
*** 6819,6832 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:3;height:330.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:330.75pt'>
    <h5><a name="_Toc191662237"></a><a name="_Toc152605193"></a><a
!   name="_Toc115416243"></a><a name="_Toc139993235"></a><a name="_Toc126872312"></a><span
    style='mso-bookmark:_Toc191662237'><span style='mso-bookmark:_Toc152605193'><span
!   style='mso-bookmark:_Toc115416243'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   MiniDumpType</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x0 (MiniDumpNormal)</p>
    <p class=MsoBodyText>This value is used to specify the type of minidump
--- 6795,6806 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:3;height:330.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:330.75pt'>
    <h5><a name="_Toc191662237"></a><a name="_Toc152605193"></a><a
!   name="_Toc115416243"></a><a name="_Toc126872312"></a><a name="_Toc139993235"></a><span
    style='mso-bookmark:_Toc191662237'><span style='mso-bookmark:_Toc152605193'><span
!   style='mso-bookmark:_Toc115416243'>Value: MiniDumpType</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x0 (MiniDumpNormal)</p>
    <p class=MsoBodyText>This value is used to specify the type of minidump
***************
*** 6838,6846 ****
    that comes with the operating system but the version that is included in the
    most recent release of &quot;<a
    href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"><span
!   class=Heading1Char><span style='font-size:14.0pt;text-decoration:none;
!   text-underline:none'>Microsoft Debugging Tools for Windows</span></span></a>&quot;.&nbsp;
!   See the Microsoft Developer Library for further information.</p>
    <p class=MsoBodyText>MiniDumpNormal = 0x00000000,<br>
    MiniDumpWithDataSegs = 0x00000001,<br>
    MiniDumpWithFullMemory = 0x00000002,<br>
--- 6812,6821 ----
    that comes with the operating system but the version that is included in the
    most recent release of &quot;<a
    href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"><span
!   class=Heading1Char><span style='font-size:14.0pt;mso-fareast-font-family:
!   "MS Mincho";text-decoration:none;text-underline:none'>Microsoft Debugging
!   Tools for Windows</span></span></a>&quot;.&nbsp; See the Microsoft Developer
!   Library for further information.</p>
    <p class=MsoBodyText>MiniDumpNormal = 0x00000000,<br>
    MiniDumpWithDataSegs = 0x00000001,<br>
    MiniDumpWithFullMemory = 0x00000002,<br>
***************
*** 6859,6871 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:4;height:138.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:138.25pt'>
!   <h5><a name="_Toc191662238"></a><a name="_Value:_EnableSMBAsyncStore"></a><a
!   name="_Toc139993236"></a><a name="_Toc126872313"></a><a name="_Toc115416244"></a><a
!   name="_Value___:_StoreAnsiFilenames"></a><span style='mso-bookmark:_Toc191662238'><span
!   style='mso-fareast-font-family:"Times New Roman"'>Value: EnableSMBAsyncStore</span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x1</p>
    <p class=MsoBodyText>This value can be used to disable the use of SMB
--- 6834,6845 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:4;height:138.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:138.25pt'>
!   <h5><a name="_Toc191662238"></a><a name="_Value___:_StoreAnsiFilenames"></a><a
!   name="_Toc115416244"></a><a name="_Toc126872313"></a><a name="_Toc139993236"></a><a
!   name="_Value:_EnableSMBAsyncStore"></a><span style='mso-bookmark:_Toc191662238'>Value:
!   EnableSMBAsyncStore</span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x1</p>
    <p class=MsoBodyText>This value can be used to disable the use of SMB
***************
*** 6873,6917 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;height:138.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:138.25pt'>
    <h5><a name="_Toc191662239"></a><a name="_Value:_SMBAsyncStoreSize"></a><span
!   style='mso-bookmark:_Toc191662239'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   SMBAsyncStoreSize</span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 32</p>
    <p class=MsoBodyText>This value determines the size of SMB Asynchronous Store
    operations.&nbsp;This value can be used to increase the write performance on
    higher speed networks by increasing the value.<span
    style='mso-spacerun:yes'>  </span>The value must be a multiple of the cache
!   buffer block size and cannot be larger than the cache manager chunk
!   size.<span style='mso-spacerun:yes'>  </span>The specified value will be
!   adjusted to enforce its compliance with these restrictions.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:6;mso-yfti-lastrow:yes;height:138.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:138.25pt'>
    <h5><a name="_Toc191662240"></a><a name="_Toc152605194"><span
!   style='mso-bookmark:_Toc191662240'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   StoreAnsiFilenames</span></span></a><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x0</p>
    <p class=MsoBodyText>This value can be used to force the AFS Client Service
!   to store filenames using the Windows system's ANSI character set instead of
!   the OEM Code Page character set which has traditionally been used by SMB file
    systems.&nbsp; </p>
    <h3><a name="_Toc193871729"></a><a name="_Toc193871484"></a><a
    name="_Toc191662241"><span style='mso-bookmark:_Toc193871484'><span
    style='mso-bookmark:_Toc193871729'><span style='font-size:12.0pt;font-family:
!   "Thorndale","serif";font-weight:normal;mso-bidi-font-weight:bold'>Note: The
!   use of ANSI characters will render access to files with 8-bit OEM file names
!   inaccessible from Windows.&nbsp; This option is of use primarily when you
!   wish to allow file names produced on Windows to be accessible from Latin-1
!   UNIX systems and vice versa.</span></span></span></a><span style='font-size:
!   12.0pt;font-family:"Thorndale","serif";mso-fareast-font-family:"Times New Roman";
!   font-weight:normal;mso-bidi-font-weight:bold'><o:p></o:p></span></h3>
    </td>
   </tr>
  </table>
--- 6847,6887 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;height:138.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:138.25pt'>
    <h5><a name="_Toc191662239"></a><a name="_Value:_SMBAsyncStoreSize"></a><span
!   style='mso-bookmark:_Toc191662239'>Value: SMBAsyncStoreSize</span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 32</p>
    <p class=MsoBodyText>This value determines the size of SMB Asynchronous Store
    operations.&nbsp;This value can be used to increase the write performance on
    higher speed networks by increasing the value.<span
    style='mso-spacerun:yes'>  </span>The value must be a multiple of the cache
!   buffer block size and cannot be larger than the cache manager chunk size.<span
!   style='mso-spacerun:yes'>  </span>The specified value will be adjusted to enforce
!   its compliance with these restrictions.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:6;mso-yfti-lastrow:yes;height:138.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:138.25pt'>
    <h5><a name="_Toc191662240"></a><a name="_Toc152605194"><span
!   style='mso-bookmark:_Toc191662240'>Value: StoreAnsiFilenames</span></a></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x0</p>
    <p class=MsoBodyText>This value can be used to force the AFS Client Service
!   to store filenames using the Windows system's ANSI character set instead of the
!   OEM Code Page character set which has traditionally been used by SMB file
    systems.&nbsp; </p>
    <h3><a name="_Toc193871729"></a><a name="_Toc193871484"></a><a
    name="_Toc191662241"><span style='mso-bookmark:_Toc193871484'><span
    style='mso-bookmark:_Toc193871729'><span style='font-size:12.0pt;font-family:
!   Thorndale;font-weight:normal;mso-bidi-font-weight:bold'>Note: The use of ANSI
!   characters will render access to files with 8-bit OEM file names inaccessible
!   from Windows.&nbsp; This option is of use primarily when you wish to allow
!   file names produced on Windows to be accessible from Latin-1 UNIX systems and
!   vice versa.</span></span></span></a><span style='font-size:12.0pt;font-family:
!   Thorndale;font-weight:normal;mso-bidi-font-weight:bold'><o:p></o:p></span></h3>
    </td>
   </tr>
  </table>
***************
*** 6921,6943 ****
  name="_Toc152605195"></a><a name="_Toc115416245"></a><a name="_Toc139993237"></a><a
  name="_Toc126872314"></a><span style='mso-bookmark:_Toc193871730'><span
  style='mso-bookmark:_Toc193871485'><span style='mso-bookmark:_Toc191662242'><span
! style='mso-bookmark:_Toc152605195'><span style='mso-bookmark:_Toc115416245'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\CSCPolicy]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:112.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:112.0pt'>
    <h5><a name="_Toc191662243"></a><a name="_Toc152605196"></a><a
!   name="_Toc115416246"></a><a name="_Toc139993238"></a><a name="_Toc126872315"></a><span
    style='mso-bookmark:_Toc191662243'><span style='mso-bookmark:_Toc152605196'><span
!   style='mso-bookmark:_Toc115416246'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   &quot;smb/cifs share name&quot;</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;</p>
    <p class=MsoBodyText>This key is used to map SMB/CIFS shares to Client Side
--- 6891,6909 ----
  name="_Toc152605195"></a><a name="_Toc115416245"></a><a name="_Toc139993237"></a><a
  name="_Toc126872314"></a><span style='mso-bookmark:_Toc193871730'><span
  style='mso-bookmark:_Toc193871485'><span style='mso-bookmark:_Toc191662242'><span
! style='mso-bookmark:_Toc152605195'><span style='mso-bookmark:_Toc115416245'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\CSCPolicy]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:112.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:112.0pt'>
    <h5><a name="_Toc191662243"></a><a name="_Toc152605196"></a><a
!   name="_Toc115416246"></a><a name="_Toc126872315"></a><a name="_Toc139993238"></a><span
    style='mso-bookmark:_Toc191662243'><span style='mso-bookmark:_Toc152605196'><span
!   style='mso-bookmark:_Toc115416246'>Value: &quot;smb/cifs share name&quot;</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;</p>
    <p class=MsoBodyText>This key is used to map SMB/CIFS shares to Client Side
***************
*** 6954,6976 ****
  name="_Toc152605197"></a><a name="_Toc139993239"></a><a name="_Toc126872316"></a><a
  name="_Toc115416247"></a><a name="_Regkey:_[HKLM\SOFTWARE\OpenAFS\Clie"></a><span
  style='mso-bookmark:_Toc193871731'><span style='mso-bookmark:_Toc193871486'><span
! style='mso-bookmark:_Toc191662244'><span style='mso-bookmark:_Toc152605197'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Freelance]</span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:138.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:138.5pt'>
    <h5><a name="_Toc191662245"></a><a name="_Toc152605198"></a><a
!   name="_Toc115416248"></a><a name="_Toc139993240"></a><a name="_Toc126872317"></a><span
    style='mso-bookmark:_Toc191662245'><span style='mso-bookmark:_Toc152605198'><span
!   style='mso-bookmark:_Toc115416248'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   &quot;numeric value&quot;</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;</p>
    <p class=MsoBodyText>This key is used to store dot terminated mount point
--- 6920,6938 ----
  name="_Toc152605197"></a><a name="_Toc139993239"></a><a name="_Toc126872316"></a><a
  name="_Toc115416247"></a><a name="_Regkey:_[HKLM\SOFTWARE\OpenAFS\Clie"></a><span
  style='mso-bookmark:_Toc193871731'><span style='mso-bookmark:_Toc193871486'><span
! style='mso-bookmark:_Toc191662244'><span style='mso-bookmark:_Toc152605197'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Freelance]</span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:138.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:138.5pt'>
    <h5><a name="_Toc191662245"></a><a name="_Toc152605198"></a><a
!   name="_Toc115416248"></a><a name="_Toc126872317"></a><a name="_Toc139993240"></a><span
    style='mso-bookmark:_Toc191662245'><span style='mso-bookmark:_Toc152605198'><span
!   style='mso-bookmark:_Toc115416248'>Value: &quot;numeric value&quot;</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;</p>
    <p class=MsoBodyText>This key is used to store dot terminated mount point
***************
*** 6988,7010 ****
  name="_Toc152605199"></a><a name="_Toc139993241"></a><a name="_Toc126872318"></a><a
  name="_Toc115416249"></a><a name="_Regkey:_[HKLM\SOFTWARE\OpenAFS\Clie_1"></a><span
  style='mso-bookmark:_Toc193871732'><span style='mso-bookmark:_Toc193871487'><span
! style='mso-bookmark:_Toc191662246'><span style='mso-bookmark:_Toc152605199'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Freelance\Symlinks]</span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:145.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:145.0pt'>
    <h5><a name="_Toc191662247"></a><a name="_Toc152605200"></a><a
!   name="_Toc115416250"></a><a name="_Toc139993242"></a><a name="_Toc126872319"></a><span
    style='mso-bookmark:_Toc191662247'><span style='mso-bookmark:_Toc152605200'><span
!   style='mso-bookmark:_Toc115416250'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   &quot;numeric value&quot;</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;</p>
    <p class=MsoBodyText>This key is used to store a dot terminated symlink
--- 6950,6968 ----
  name="_Toc152605199"></a><a name="_Toc139993241"></a><a name="_Toc126872318"></a><a
  name="_Toc115416249"></a><a name="_Regkey:_[HKLM\SOFTWARE\OpenAFS\Clie_1"></a><span
  style='mso-bookmark:_Toc193871732'><span style='mso-bookmark:_Toc193871487'><span
! style='mso-bookmark:_Toc191662246'><span style='mso-bookmark:_Toc152605199'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Freelance\Symlinks]</span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:145.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:145.0pt'>
    <h5><a name="_Toc191662247"></a><a name="_Toc152605200"></a><a
!   name="_Toc115416250"></a><a name="_Toc126872319"></a><a name="_Toc139993242"></a><span
    style='mso-bookmark:_Toc191662247'><span style='mso-bookmark:_Toc152605200'><span
!   style='mso-bookmark:_Toc115416250'>Value: &quot;numeric value&quot;</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;</p>
    <p class=MsoBodyText>This key is used to store a dot terminated symlink
***************
*** 7023,7047 ****
  name="_Toc152605201"></a><a name="_Toc115416251"></a><a name="_Toc139993243"></a><a
  name="_Toc126872320"></a><span style='mso-bookmark:_Toc193871733'><span
  style='mso-bookmark:_Toc193871488'><span style='mso-bookmark:_Toc191662248'><span
! style='mso-bookmark:_Toc152605201'><span style='mso-bookmark:_Toc115416251'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Realms]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  Realms key is used to provide initialization data to be used when new
  identities are added to the Network Identity Manager.<span
! style='mso-spacerun:yes'>  </span>The AFS Provider will search for a subkey
! that matches the realm of the identity.<span style='mso-spacerun:yes'> 
! </span>If such a key exists, its values will be used to populate the AFS
! configuration for the identity.</p>
  
  <h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
! name="_Toc193871734"></a><a name="_Toc193871489"></a><a name="_Toc191662249"><span
! style='mso-bookmark:_Toc193871489'><span style='mso-bookmark:_Toc193871734'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client\Realms\<i style='mso-bidi-font-style:normal'>”Realm
! Name”</i>]</span></span></span></a><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>In
  addition to the optional values, this key contains one subkey for each cell
--- 6981,7002 ----
  name="_Toc152605201"></a><a name="_Toc115416251"></a><a name="_Toc139993243"></a><a
  name="_Toc126872320"></a><span style='mso-bookmark:_Toc193871733'><span
  style='mso-bookmark:_Toc193871488'><span style='mso-bookmark:_Toc191662248'><span
! style='mso-bookmark:_Toc152605201'><span style='mso-bookmark:_Toc115416251'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Realms]</span></span></span></span></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  Realms key is used to provide initialization data to be used when new
  identities are added to the Network Identity Manager.<span
! style='mso-spacerun:yes'>  </span>The AFS Provider will search for a subkey that
! matches the realm of the identity.<span style='mso-spacerun:yes'>  </span>If
! such a key exists, its values will be used to populate the AFS configuration
! for the identity.</p>
  
  <h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
! name="_Toc191662249"></a><a name="_Toc193871489"></a><a name="_Toc193871734"><span
! style='mso-bookmark:_Toc193871489'><span style='mso-bookmark:_Toc191662249'>Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client\Realms\<i style='mso-bidi-font-style:normal'>”Realm
! Name”</i>]</span></span></a></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>In
  addition to the optional values, this key contains one subkey for each cell
***************
*** 7049,7067 ****
  style='mso-spacerun:yes'>  </span></p>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:103.7pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:103.7pt'>
    <h5><a name="_Toc191662250"></a><a name="_Toc152605202"></a><a
!   name="_Toc115416252"></a><a name="_Toc139993244"></a><a name="_Toc126872321"></a><span
    style='mso-bookmark:_Toc191662250'><span style='mso-bookmark:_Toc152605202'><span
!   style='mso-bookmark:_Toc115416252'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   </span></span></span></span><span style='mso-bookmark:_Toc191662250'><span
!   style='mso-fareast-font-family:"Times New Roman";font-style:normal;
!   mso-bidi-font-style:italic'>AFSEnabled</span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x01</p>
    <p class=MsoBodyText>This key is used to specify whether the new identity
--- 7004,7020 ----
  style='mso-spacerun:yes'>  </span></p>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:103.7pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:103.7pt'>
    <h5><a name="_Toc191662250"></a><a name="_Toc152605202"></a><a
!   name="_Toc115416252"></a><a name="_Toc126872321"></a><a name="_Toc139993244"></a><span
    style='mso-bookmark:_Toc191662250'><span style='mso-bookmark:_Toc152605202'><span
!   style='mso-bookmark:_Toc115416252'>Value: </span></span></span><span
!   style='mso-bookmark:_Toc191662250'><span style='font-style:normal;mso-bidi-font-style:
!   italic'>AFSEnabled</span></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: 0x01</p>
    <p class=MsoBodyText>This key is used to specify whether the new identity
***************
*** 7078,7101 ****
  name="_Toc191662251"></a><a name="_Toc139993245"></a><a name="_Toc126872322"></a><a
  name="_Toc115416253"></a><a name="_Regkey:_[HKLM\SOFTWARE\OpenAFS\Clie_2"></a><span
  style='mso-bookmark:_Toc152605203'><span style='mso-bookmark:_Toc193871735'><span
! style='mso-bookmark:_Toc193871490'><span style='mso-bookmark:_Toc191662251'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client\Realms\<i style='mso-bidi-font-style:normal'>”Realm
! Name”</i>\<i style='mso-bidi-font-style:normal'>”Cell Name”</i>]</span></span></span></span></span><span
! style='mso-bookmark:_Toc152605203'><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:160.7pt'>
!   <td width=594 valign=top style='width:445.2pt;padding:0in 5.4pt 0in 5.4pt;
    height:160.7pt'>
!   <h5><span style='mso-bookmark:_Toc152605203'><a name="_Toc191662252"><span
!   style='mso-fareast-font-family:"Times New Roman"'>Value:</span></a></span><span
    style='mso-bookmark:_Toc152605203'><span style='mso-bookmark:_Toc191662252'><span
!   style='mso-fareast-font-family:"Times New Roman";font-style:normal;
!   mso-bidi-font-style:italic'> MethodName</span></span></span><span
!   style='mso-bookmark:_Toc152605203'><span style='mso-fareast-font-family:"Times New Roman";
!   font-style:normal;mso-bidi-font-style:italic'><o:p></o:p></span></span></h5>
    <p class=MsoBodyText><span style='mso-bookmark:_Toc152605203'>Type: REG_SZ<br>
    Default: &lt;none&gt;</span></p>
    <p class=MsoBodyText><span style='mso-bookmark:_Toc152605203'>This key is
--- 7031,7050 ----
  name="_Toc191662251"></a><a name="_Toc139993245"></a><a name="_Toc126872322"></a><a
  name="_Toc115416253"></a><a name="_Regkey:_[HKLM\SOFTWARE\OpenAFS\Clie_2"></a><span
  style='mso-bookmark:_Toc152605203'><span style='mso-bookmark:_Toc193871735'><span
! style='mso-bookmark:_Toc193871490'><span style='mso-bookmark:_Toc191662251'>Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client\Realms\<i style='mso-bidi-font-style:normal'>”Realm
! Name”</i>\<i style='mso-bidi-font-style:normal'>”Cell Name”</i>]</span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:160.7pt'>
!   <td width=594 valign=top style='width:445.2pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:160.7pt'>
!   <h5><span style='mso-bookmark:_Toc152605203'><a name="_Toc191662252">Value:</a></span><span
    style='mso-bookmark:_Toc152605203'><span style='mso-bookmark:_Toc191662252'><span
!   style='font-style:normal;mso-bidi-font-style:italic'> MethodName</span></span></span><span
!   style='mso-bookmark:_Toc152605203'><span style='font-style:normal;mso-bidi-font-style:
!   italic'><o:p></o:p></span></span></h5>
    <p class=MsoBodyText><span style='mso-bookmark:_Toc152605203'>Type: REG_SZ<br>
    Default: &lt;none&gt;</span></p>
    <p class=MsoBodyText><span style='mso-bookmark:_Toc152605203'>This key is
***************
*** 7110,7124 ****
    <span style='mso-bookmark:_Toc152605203'></span>
   </tr>
   <tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes;height:128.35pt'>
!   <td width=594 valign=top style='width:445.2pt;padding:0in 5.4pt 0in 5.4pt;
    height:128.35pt'>
!   <h5><span style='mso-bookmark:_Toc152605203'><a name="_Toc191662253"><span
!   style='mso-fareast-font-family:"Times New Roman"'>Value:</span></a></span><span
    style='mso-bookmark:_Toc152605203'><span style='mso-bookmark:_Toc191662253'><span
!   style='mso-fareast-font-family:"Times New Roman";font-style:normal;
!   mso-bidi-font-style:italic'> Realm</span></span></span><span
!   style='mso-bookmark:_Toc152605203'><span style='mso-fareast-font-family:"Times New Roman";
!   font-style:normal;mso-bidi-font-style:italic'><o:p></o:p></span></span></h5>
    <p class=MsoBodyText><span style='mso-bookmark:_Toc152605203'>Type: REG_SZ<br>
    Default: &lt;none&gt;</span></p>
    <p class=MsoBodyText><span style='mso-bookmark:_Toc152605203'>This key is
--- 7059,7071 ----
    <span style='mso-bookmark:_Toc152605203'></span>
   </tr>
   <tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes;height:128.35pt'>
!   <td width=594 valign=top style='width:445.2pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:128.35pt'>
!   <h5><span style='mso-bookmark:_Toc152605203'><a name="_Toc191662253">Value:</a></span><span
    style='mso-bookmark:_Toc152605203'><span style='mso-bookmark:_Toc191662253'><span
!   style='font-style:normal;mso-bidi-font-style:italic'> Realm</span></span></span><span
!   style='mso-bookmark:_Toc152605203'><span style='font-style:normal;mso-bidi-font-style:
!   italic'><o:p></o:p></span></span></h5>
    <p class=MsoBodyText><span style='mso-bookmark:_Toc152605203'>Type: REG_SZ<br>
    Default: &lt;none&gt;</span></p>
    <p class=MsoBodyText><span style='mso-bookmark:_Toc152605203'>This key is
***************
*** 7132,7154 ****
  </table>
  
  <h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='mso-bookmark:_Toc152605203'><a name="_Toc193871736"></a><a
! name="_Toc193871491"></a><a name="_Toc191662254"><span style='mso-bookmark:
! _Toc193871491'><span style='mso-bookmark:_Toc193871736'><span style='mso-fareast-font-family:
! "Times New Roman"'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Submounts]</span></span></span></a></span><span
! style='mso-bookmark:_Toc152605203'><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:171.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:171.75pt'>
!   <h5><span style='mso-bookmark:_Toc152605203'><a name="_Toc191662255"><span
!   style='mso-fareast-font-family:"Times New Roman"'>Value: &quot;submount
!   name&quot;</span></a></span><span style='mso-bookmark:_Toc152605203'><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></span></h5>
    <p class=MsoBodyText><span style='mso-bookmark:_Toc152605203'>Type:
    REG_EXPAND_SZ<br>
    Default: &lt;none&gt;</span></p>
--- 7079,7097 ----
  </table>
  
  <h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='mso-bookmark:_Toc152605203'><a name="_Toc191662254"></a><a
! name="_Toc193871491"></a><a name="_Toc193871736"><span style='mso-bookmark:
! _Toc193871491'><span style='mso-bookmark:_Toc191662254'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Submounts]</span></span></a></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:171.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:171.75pt'>
!   <h5><span style='mso-bookmark:_Toc152605203'><a name="_Toc191662255">Value:
!   &quot;submount name&quot;</a></span></h5>
    <p class=MsoBodyText><span style='mso-bookmark:_Toc152605203'>Type:
    REG_EXPAND_SZ<br>
    Default: &lt;none&gt;</span></p>
***************
*** 7169,7193 ****
  </table>
  
  <h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='mso-bookmark:_Toc152605203'><a name="_Toc193871737"></a><a
! name="_Toc193871492"></a><a name="_Toc191662256"><span style='mso-bookmark:
! _Toc193871492'><span style='mso-bookmark:_Toc193871737'><span style='mso-fareast-font-family:
! "Times New Roman"'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\VLDB]</span></span></span></a></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:105.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:105.5pt'>
    <h5><a name="_Toc191662257"></a><a name="_Toc152605204"></a><a
!   name="_Toc115416254"></a><a name="_Toc139993246"></a><a name="_Toc126872323"></a><span
    style='mso-bookmark:_Toc191662257'><span style='mso-bookmark:_Toc152605204'><span
!   style='mso-bookmark:_Toc115416254'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   &quot;hostname or ip address&quot;</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: &lt;none&gt;</p>
    <p class=MsoBodyText>This key is used to specify a default set of VLDB server
--- 7112,7132 ----
  </table>
  
  <h3 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
! style='mso-bookmark:_Toc152605203'><a name="_Toc191662256"></a><a
! name="_Toc193871492"></a><a name="_Toc193871737"><span style='mso-bookmark:
! _Toc193871492'><span style='mso-bookmark:_Toc191662256'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\VLDB]</span></span></a></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:105.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:105.5pt'>
    <h5><a name="_Toc191662257"></a><a name="_Toc152605204"></a><a
!   name="_Toc115416254"></a><a name="_Toc126872323"></a><a name="_Toc139993246"></a><span
    style='mso-bookmark:_Toc191662257'><span style='mso-bookmark:_Toc152605204'><span
!   style='mso-bookmark:_Toc115416254'>Value: &quot;hostname or ip address&quot;</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: &lt;none&gt;</p>
    <p class=MsoBodyText>This key is used to specify a default set of VLDB server
***************
*** 7204,7233 ****
  name="_Toc152605205"></a><a name="_Toc115416255"></a><a name="_Toc139993247"></a><a
  name="_Toc126872324"></a><span style='mso-bookmark:_Toc193871738'><span
  style='mso-bookmark:_Toc193871493'><span style='mso-bookmark:_Toc191662258'><span
! style='mso-bookmark:_Toc152605205'><span style='mso-bookmark:_Toc115416255'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\File]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:105.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:105.5pt'>
    <h5><a name="_Toc191662259"></a><a name="_Toc152605206"></a><a
!   name="_Toc115416256"></a><a name="_Toc139993248"></a><a name="_Toc126872325"></a><span
    style='mso-bookmark:_Toc191662259'><span style='mso-bookmark:_Toc152605206'><span
!   style='mso-bookmark:_Toc115416256'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   &quot;hostname or ip address&quot;</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: &lt;none&gt;</p>
    <p class=MsoBodyText>This key is used to specify a default set of File server
    preferences. For each entry the value name will be either the IP address of a
!   server or a fully qualified domain name.&nbsp; The value will be the
!   ranking.&nbsp; The ranking will be adjusted by a random value between 0 and
!   256 prior to the preference being set.</p>
    </td>
   </tr>
  </table>
--- 7143,7168 ----
  name="_Toc152605205"></a><a name="_Toc115416255"></a><a name="_Toc139993247"></a><a
  name="_Toc126872324"></a><span style='mso-bookmark:_Toc193871738'><span
  style='mso-bookmark:_Toc193871493'><span style='mso-bookmark:_Toc191662258'><span
! style='mso-bookmark:_Toc152605205'><span style='mso-bookmark:_Toc115416255'>Regkey:<br>
! [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\File]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:105.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:105.5pt'>
    <h5><a name="_Toc191662259"></a><a name="_Toc152605206"></a><a
!   name="_Toc115416256"></a><a name="_Toc126872325"></a><a name="_Toc139993248"></a><span
    style='mso-bookmark:_Toc191662259'><span style='mso-bookmark:_Toc152605206'><span
!   style='mso-bookmark:_Toc115416256'>Value: &quot;hostname or ip address&quot;</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_DWORD<br>
    Default: &lt;none&gt;</p>
    <p class=MsoBodyText>This key is used to specify a default set of File server
    preferences. For each entry the value name will be either the IP address of a
!   server or a fully qualified domain name.&nbsp; The value will be the ranking.&nbsp;
!   The ranking will be adjusted by a random value between 0 and 256 prior to the
!   preference being set.</p>
    </td>
   </tr>
  </table>
***************
*** 7238,7246 ****
  name="_Toc126872326"></a><a name="_Toc115417105"></a><span style='mso-bookmark:
  _Toc193871739'><span style='mso-bookmark:_Toc193871494'><span style='mso-bookmark:
  _Toc191662260'><span style='mso-bookmark:_Toc152605207'><span style='mso-bookmark:
! _Toc115416257'><span style='mso-fareast-font-family:"Times New Roman"'>A.2.
! Integrated Logon Network provider parameters</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Affects
  the network provider (afslogon.dll).</p>
--- 7173,7179 ----
  name="_Toc126872326"></a><a name="_Toc115417105"></a><span style='mso-bookmark:
  _Toc193871739'><span style='mso-bookmark:_Toc193871494'><span style='mso-bookmark:
  _Toc191662260'><span style='mso-bookmark:_Toc152605207'><span style='mso-bookmark:
! _Toc115416257'>A.2. Integrated Logon Network provider parameters</span></span></span></span></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Affects
  the network provider (afslogon.dll).</p>
***************
*** 7250,7272 ****
  name="_Toc152605208"></a><a name="_Toc115416258"></a><a name="_Toc139993250"></a><a
  name="_Toc126872327"></a><span style='mso-bookmark:_Toc193871740'><span
  style='mso-bookmark:_Toc193871495'><span style='mso-bookmark:_Toc191662261'><span
! style='mso-bookmark:_Toc152605208'><span style='mso-bookmark:_Toc115416258'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662262"></a><a name="_Toc152605209"></a><a
!   name="_Toc115416259"></a><a name="_Toc139993251"></a><a name="_Toc126872328"></a><span
    style='mso-bookmark:_Toc191662262'><span style='mso-bookmark:_Toc152605209'><span
!   style='mso-bookmark:_Toc115416259'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   FailLoginsSilently</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 0</p>
    <p class=MsoBodyText>Do not display message boxes if the login fails.</p>
--- 7183,7201 ----
  name="_Toc152605208"></a><a name="_Toc115416258"></a><a name="_Toc139993250"></a><a
  name="_Toc126872327"></a><span style='mso-bookmark:_Toc193871740'><span
  style='mso-bookmark:_Toc193871495'><span style='mso-bookmark:_Toc191662261'><span
! style='mso-bookmark:_Toc152605208'><span style='mso-bookmark:_Toc115416258'>Regkey:
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662262"></a><a name="_Toc152605209"></a><a
!   name="_Toc115416259"></a><a name="_Toc126872328"></a><a name="_Toc139993251"></a><span
    style='mso-bookmark:_Toc191662262'><span style='mso-bookmark:_Toc152605209'><span
!   style='mso-bookmark:_Toc115416259'>Value: FailLoginsSilently</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 0</p>
    <p class=MsoBodyText>Do not display message boxes if the login fails.</p>
***************
*** 7279,7314 ****
  name="_Toc152605210"></a><a name="_Toc115416260"></a><a name="_Toc139993252"></a><a
  name="_Toc126872329"></a><span style='mso-bookmark:_Toc193871741'><span
  style='mso-bookmark:_Toc193871496'><span style='mso-bookmark:_Toc191662263'><span
! style='mso-bookmark:_Toc152605210'><span style='mso-bookmark:_Toc115416260'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662264"></a><a name="_Toc152605211"></a><a
!   name="_Toc115416261"></a><a name="_Toc139993253"></a><a name="_Toc126872330"></a><span
    style='mso-bookmark:_Toc191662264'><span style='mso-bookmark:_Toc152605211'><span
!   style='mso-bookmark:_Toc115416261'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   NoWarnings</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 0</p>
    <p class=MsoBodyText>Disables visible warnings during logon.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662265"></a><a name="_Toc152605212"></a><a
!   name="_Toc115416262"></a><a name="_Toc139993254"></a><a name="_Toc126872331"></a><span
    style='mso-bookmark:_Toc191662265'><span style='mso-bookmark:_Toc152605212'><span
!   style='mso-bookmark:_Toc115416262'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   AuthentProviderPath</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    NSIS: %WINDIR%\SYSTEM32\afslogon.dll</p>
    <p class=MsoBodyText>Specifies the install location of the authentication
--- 7208,7237 ----
  name="_Toc152605210"></a><a name="_Toc115416260"></a><a name="_Toc139993252"></a><a
  name="_Toc126872329"></a><span style='mso-bookmark:_Toc193871741'><span
  style='mso-bookmark:_Toc193871496'><span style='mso-bookmark:_Toc191662263'><span
! style='mso-bookmark:_Toc152605210'><span style='mso-bookmark:_Toc115416260'>Regkey:<br>
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662264"></a><a name="_Toc152605211"></a><a
!   name="_Toc115416261"></a><a name="_Toc126872330"></a><a name="_Toc139993253"></a><span
    style='mso-bookmark:_Toc191662264'><span style='mso-bookmark:_Toc152605211'><span
!   style='mso-bookmark:_Toc115416261'>Value: NoWarnings</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 0</p>
    <p class=MsoBodyText>Disables visible warnings during logon.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662265"></a><a name="_Toc152605212"></a><a
!   name="_Toc115416262"></a><a name="_Toc126872331"></a><a name="_Toc139993254"></a><span
    style='mso-bookmark:_Toc191662265'><span style='mso-bookmark:_Toc152605212'><span
!   style='mso-bookmark:_Toc115416262'>Value: AuthentProviderPath</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    NSIS: %WINDIR%\SYSTEM32\afslogon.dll</p>
    <p class=MsoBodyText>Specifies the install location of the authentication
***************
*** 7316,7359 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:2;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662266"></a><a name="_Toc152605213"></a><a
!   name="_Toc115416263"></a><a name="_Toc139993255"></a><a name="_Toc126872332"></a><span
    style='mso-bookmark:_Toc191662266'><span style='mso-bookmark:_Toc152605213'><span
!   style='mso-bookmark:_Toc115416263'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   Class</span></span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    NSIS: 0x02</p>
    <p class=MsoBodyText>Specifies the class of network provider</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662267"></a><a name="_Toc152605214"></a><a
!   name="_Toc115416264"></a><a name="_Toc139993256"></a><a name="_Toc126872333"></a><span
    style='mso-bookmark:_Toc191662267'><span style='mso-bookmark:_Toc152605214'><span
!   style='mso-bookmark:_Toc115416264'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   DependOnGroup</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_MULTI_SZ<br>
    NSIS: PNP_TDI</p>
    <p class=MsoBodyText>Specifies the service groups upon which the AFS Client
!   Service depends.&nbsp; Windows should not attempt to start the AFS Client
!   Service until all of the services within these groups have successfully
!   started.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662268"></a><a name="_Toc152605215"></a><a
!   name="_Toc115416265"></a><a name="_Toc139993257"></a><a name="_Toc126872334"></a><span
    style='mso-bookmark:_Toc191662268'><span style='mso-bookmark:_Toc152605215'><span
!   style='mso-bookmark:_Toc115416265'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   DependOnService</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_MULTI_SZ<br>
    NSIS: Tcpip NETBIOS RpcSs</p>
    <p class=MsoBodyText>Specifies a list of services upon which the AFS Client
--- 7239,7276 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:2;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662266"></a><a name="_Toc152605213"></a><a
!   name="_Toc115416263"></a><a name="_Toc126872332"></a><a name="_Toc139993255"></a><span
    style='mso-bookmark:_Toc191662266'><span style='mso-bookmark:_Toc152605213'><span
!   style='mso-bookmark:_Toc115416263'>Value: Class</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    NSIS: 0x02</p>
    <p class=MsoBodyText>Specifies the class of network provider</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662267"></a><a name="_Toc152605214"></a><a
!   name="_Toc115416264"></a><a name="_Toc126872333"></a><a name="_Toc139993256"></a><span
    style='mso-bookmark:_Toc191662267'><span style='mso-bookmark:_Toc152605214'><span
!   style='mso-bookmark:_Toc115416264'>Value: DependOnGroup</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_MULTI_SZ<br>
    NSIS: PNP_TDI</p>
    <p class=MsoBodyText>Specifies the service groups upon which the AFS Client
!   Service depends.&nbsp; Windows should not attempt to start the AFS Client Service
!   until all of the services within these groups have successfully started.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:4;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662268"></a><a name="_Toc152605215"></a><a
!   name="_Toc115416265"></a><a name="_Toc126872334"></a><a name="_Toc139993257"></a><span
    style='mso-bookmark:_Toc191662268'><span style='mso-bookmark:_Toc152605215'><span
!   style='mso-bookmark:_Toc115416265'>Value: DependOnService</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_MULTI_SZ<br>
    NSIS: Tcpip NETBIOS RpcSs</p>
    <p class=MsoBodyText>Specifies a list of services upon which the AFS Client
***************
*** 7362,7388 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662269"></a><a name="_Toc152605216"></a><a
!   name="_Toc115416266"></a><a name="_Toc139993258"></a><a name="_Toc126872335"></a><span
    style='mso-bookmark:_Toc191662269'><span style='mso-bookmark:_Toc152605216'><span
!   style='mso-bookmark:_Toc115416266'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   Name</span></span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    NSIS: &quot;OpenAFSDaemon&quot;</p>
    <p class=MsoBodyText>Specifies the display name of the AFS Client Service</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:6;mso-yfti-lastrow:yes;height:65.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662270"></a><a name="_Toc152605217"></a><a
!   name="_Toc115416267"></a><a name="_Toc139993259"></a><a name="_Toc126872336"></a><span
    style='mso-bookmark:_Toc191662270'><span style='mso-bookmark:_Toc152605217'><span
!   style='mso-bookmark:_Toc115416267'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   ProviderPath</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    NSIS: %WINDIR%\SYSTEM32\afslogon.dll</p>
    <p class=MsoBodyText>Specifies the DLL to use for the network provider</p>
--- 7279,7302 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662269"></a><a name="_Toc152605216"></a><a
!   name="_Toc115416266"></a><a name="_Toc126872335"></a><a name="_Toc139993258"></a><span
    style='mso-bookmark:_Toc191662269'><span style='mso-bookmark:_Toc152605216'><span
!   style='mso-bookmark:_Toc115416266'>Value: Name</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    NSIS: &quot;OpenAFSDaemon&quot;</p>
    <p class=MsoBodyText>Specifies the display name of the AFS Client Service</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:6;mso-yfti-lastrow:yes;height:65.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:65.75pt'>
    <h5><a name="_Toc191662270"></a><a name="_Toc152605217"></a><a
!   name="_Toc115416267"></a><a name="_Toc126872336"></a><a name="_Toc139993259"></a><span
    style='mso-bookmark:_Toc191662270'><span style='mso-bookmark:_Toc152605217'><span
!   style='mso-bookmark:_Toc115416267'>Value: ProviderPath</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    NSIS: %WINDIR%\SYSTEM32\afslogon.dll</p>
    <p class=MsoBodyText>Specifies the DLL to use for the network provider</p>
***************
*** 7396,7413 ****
  name="_Toc115417106"></a><a name="_Toc115416268"></a><a
  name="_A.2.1_Domain_specific_configuration"></a><span style='mso-bookmark:_Toc193871742'><span
  style='mso-bookmark:_Toc193871497'><span style='mso-bookmark:_Toc191662271'><span
! style='mso-bookmark:_Toc152605218'><span style='mso-fareast-font-family:"Times New Roman"'>A.2.1
! Domain specific configuration keys for the Network Provider</span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  network provider can be configured to have different behavior depending on the
  domain that the user logs into.&nbsp; These settings are only relevant when
  using integrated login.&nbsp; A domain refers to an Active Directory (AD)
  domain, a trusted Kerberos (non-AD) realm or the local machine (i.e. local
! account logins).&nbsp; The domain name that is used for selecting the domain
! would be the domain that is passed into the NPLogonNotify function of the
! network provider.</p>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Domain
  specific registry keys are:</p>
--- 7310,7326 ----
  name="_Toc115417106"></a><a name="_Toc115416268"></a><a
  name="_A.2.1_Domain_specific_configuration"></a><span style='mso-bookmark:_Toc193871742'><span
  style='mso-bookmark:_Toc193871497'><span style='mso-bookmark:_Toc191662271'><span
! style='mso-bookmark:_Toc152605218'>A.2.1 Domain specific configuration keys for
! the Network Provider</span></span></span></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>The
  network provider can be configured to have different behavior depending on the
  domain that the user logs into.&nbsp; These settings are only relevant when
  using integrated login.&nbsp; A domain refers to an Active Directory (AD)
  domain, a trusted Kerberos (non-AD) realm or the local machine (i.e. local
! account logins).&nbsp; The domain name that is used for selecting the domain would
! be the domain that is passed into the NPLogonNotify function of the network
! provider.</p>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Domain
  specific registry keys are:</p>
***************
*** 7417,7425 ****
  name="_Toc152605219"></a><a name="_Toc115416269"></a><a name="_Toc139993261"></a><a
  name="_Toc126872338"></a><span style='mso-bookmark:_Toc193871743'><span
  style='mso-bookmark:_Toc193871498'><span style='mso-bookmark:_Toc191662272'><span
! style='mso-bookmark:_Toc152605219'><span style='mso-bookmark:_Toc115416269'><span
! style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  (NP key)</p>
--- 7330,7336 ----
  name="_Toc152605219"></a><a name="_Toc115416269"></a><a name="_Toc139993261"></a><a
  name="_Toc126872338"></a><span style='mso-bookmark:_Toc193871743'><span
  style='mso-bookmark:_Toc193871498'><span style='mso-bookmark:_Toc191662272'><span
! style='mso-bookmark:_Toc152605219'><span style='mso-bookmark:_Toc115416269'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</span></span></span></span></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  (NP key)</p>
***************
*** 7429,7437 ****
  name="_Toc152605220"></a><a name="_Toc115416270"></a><a name="_Toc139993262"></a><a
  name="_Toc126872339"></a><span style='mso-bookmark:_Toc193871744'><span
  style='mso-bookmark:_Toc193871499'><span style='mso-bookmark:_Toc191662273'><span
! style='mso-bookmark:_Toc152605220'><span style='mso-bookmark:_Toc115416270'><span
! style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  (Domains key)</p>
--- 7340,7346 ----
  name="_Toc152605220"></a><a name="_Toc115416270"></a><a name="_Toc139993262"></a><a
  name="_Toc126872339"></a><span style='mso-bookmark:_Toc193871744'><span
  style='mso-bookmark:_Toc193871499'><span style='mso-bookmark:_Toc191662273'><span
! style='mso-bookmark:_Toc152605220'><span style='mso-bookmark:_Toc115416270'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain]</span></span></span></span></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  (Domains key)</p>
***************
*** 7441,7450 ****
  name="_Toc152605221"></a><a name="_Toc115416271"></a><a name="_Toc139993263"></a><a
  name="_Toc126872340"></a><span style='mso-bookmark:_Toc193871745'><span
  style='mso-bookmark:_Toc193871500'><span style='mso-bookmark:_Toc191662274'><span
! style='mso-bookmark:_Toc152605221'><span style='mso-bookmark:_Toc115416271'><span
! style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\&quot;domain
! name&quot;]</span></span></span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  (Specific domain key. One per domain.)</p>
--- 7350,7357 ----
  name="_Toc152605221"></a><a name="_Toc115416271"></a><a name="_Toc139993263"></a><a
  name="_Toc126872340"></a><span style='mso-bookmark:_Toc193871745'><span
  style='mso-bookmark:_Toc193871500'><span style='mso-bookmark:_Toc191662274'><span
! style='mso-bookmark:_Toc152605221'><span style='mso-bookmark:_Toc115416271'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\&quot;domain
! name&quot;]</span></span></span></span></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  (Specific domain key. One per domain.)</p>
***************
*** 7454,7462 ****
  name="_Toc152605222"></a><a name="_Toc115416272"></a><a name="_Toc139993264"></a><a
  name="_Toc126872341"></a><span style='mso-bookmark:_Toc193871746'><span
  style='mso-bookmark:_Toc193871501'><span style='mso-bookmark:_Toc191662275'><span
! style='mso-bookmark:_Toc152605222'><span style='mso-bookmark:_Toc115416272'><span
! style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  (Localhost key)</p>
--- 7361,7367 ----
  name="_Toc152605222"></a><a name="_Toc115416272"></a><a name="_Toc139993264"></a><a
  name="_Toc126872341"></a><span style='mso-bookmark:_Toc193871746'><span
  style='mso-bookmark:_Toc193871501'><span style='mso-bookmark:_Toc191662275'><span
! style='mso-bookmark:_Toc152605222'><span style='mso-bookmark:_Toc115416272'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST]</span></span></span></span></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;
  (Localhost key)</p>
***************
*** 7466,7474 ****
  name="_Toc152605223"></a><a name="_Toc115416273"></a><a name="_Toc139993265"></a><a
  name="_Toc126872342"></a><span style='mso-bookmark:_Toc193871747'><span
  style='mso-bookmark:_Toc193871502'><span style='mso-bookmark:_Toc191662276'><span
! style='mso-bookmark:_Toc152605223'><span style='mso-bookmark:_Toc115416273'><span
! style='mso-fareast-font-family:"Times New Roman"'>Example:</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=preformattedtext style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider</p>
  
--- 7371,7377 ----
  name="_Toc152605223"></a><a name="_Toc115416273"></a><a name="_Toc139993265"></a><a
  name="_Toc126872342"></a><span style='mso-bookmark:_Toc193871747'><span
  style='mso-bookmark:_Toc193871502'><span style='mso-bookmark:_Toc191662276'><span
! style='mso-bookmark:_Toc152605223'><span style='mso-bookmark:_Toc115416273'>Example:</span></span></span></span></span></h3>
  
  <p class=preformattedtext style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>&nbsp;HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider</p>
  
***************
*** 7496,7527 ****
  name="_Toc152605224"></a><a name="_Toc115416274"></a><a name="_Toc139993266"></a><a
  name="_Toc126872343"></a><span style='mso-bookmark:_Toc193871748'><span
  style='mso-bookmark:_Toc193871503'><span style='mso-bookmark:_Toc191662277'><span
! style='mso-bookmark:_Toc152605224'><span style='mso-bookmark:_Toc115416274'><span
! style='mso-fareast-font-family:"Times New Roman"'>A.2.1.1 Domain specific
! configuration values</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <h4 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc191662278"></a><a name="_Toc152605225"></a><a name="_Toc115416275"></a><a
  name="_Toc139993267"></a><a name="_Toc126872344"></a><span style='mso-bookmark:
  _Toc191662278'><span style='mso-bookmark:_Toc152605225'><span style='mso-bookmark:
! _Toc115416275'><span style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]<br>
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain]<br>
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\&quot;domain
  name&quot;]<br>
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST]</span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h4>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:191.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:191.0pt'>
    <h5><a name="_Toc191662279"></a><a name="_Toc152605226"></a><a
!   name="_Toc139993268"></a><a name="_Toc126872345"></a><a name="_Toc115416276"></a><a
!   name="_Value___:_LogonOptions"></a><span style='mso-bookmark:_Toc191662279'><span
!   style='mso-bookmark:_Toc152605226'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   LogonOptions</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 0x01</p>
    <p class=MsoBodyText>NSIS/WiX: depends on user configuration</p>
--- 7399,7426 ----
  name="_Toc152605224"></a><a name="_Toc115416274"></a><a name="_Toc139993266"></a><a
  name="_Toc126872343"></a><span style='mso-bookmark:_Toc193871748'><span
  style='mso-bookmark:_Toc193871503'><span style='mso-bookmark:_Toc191662277'><span
! style='mso-bookmark:_Toc152605224'><span style='mso-bookmark:_Toc115416274'>A.2.1.1
! Domain specific configuration values</span></span></span></span></span></h3>
  
  <h4 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc191662278"></a><a name="_Toc152605225"></a><a name="_Toc115416275"></a><a
  name="_Toc139993267"></a><a name="_Toc126872344"></a><span style='mso-bookmark:
  _Toc191662278'><span style='mso-bookmark:_Toc152605225'><span style='mso-bookmark:
! _Toc115416275'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]<br>
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain]<br>
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\&quot;domain
  name&quot;]<br>
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST]</span></span></span></h4>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:191.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:191.0pt'>
    <h5><a name="_Toc191662279"></a><a name="_Toc152605226"></a><a
!   name="_Value___:_LogonOptions"></a><a name="_Toc115416276"></a><a
!   name="_Toc126872345"></a><a name="_Toc139993268"></a><span style='mso-bookmark:
!   _Toc191662279'><span style='mso-bookmark:_Toc152605226'>Value: LogonOptions</span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 0x01</p>
    <p class=MsoBodyText>NSIS/WiX: depends on user configuration</p>
***************
*** 7532,7551 ****
    <p class=MsoBodyText>High Security Mode generates random SMB names for the
    creation of Drive Mappings.&nbsp; This mode should not be used without
    Integrated Logon.</p>
!   <p class=MsoBodyText>As of 1.3.65 the SMB server supports SMB
!   authentication.&nbsp; The High Security Mode should not be used when using
!   SMB authentication (SMBAuthType setting is non zero).</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662280"></a><a name="_Toc152605227"></a><a
!   name="_Toc115416277"></a><a name="_Toc139993269"></a><a name="_Toc126872346"></a><span
    style='mso-bookmark:_Toc191662280'><span style='mso-bookmark:_Toc152605227'><span
!   style='mso-bookmark:_Toc115416277'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   FailLoginsSilentl</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD (1|0)<br>
    Default: 0<br>
    NSIS/WiX: (not set)</p>
--- 7431,7448 ----
    <p class=MsoBodyText>High Security Mode generates random SMB names for the
    creation of Drive Mappings.&nbsp; This mode should not be used without
    Integrated Logon.</p>
!   <p class=MsoBodyText>As of 1.3.65 the SMB server supports SMB authentication.&nbsp;
!   The High Security Mode should not be used when using SMB authentication
!   (SMBAuthType setting is non zero).</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662280"></a><a name="_Toc152605227"></a><a
!   name="_Toc115416277"></a><a name="_Toc126872346"></a><a name="_Toc139993269"></a><span
    style='mso-bookmark:_Toc191662280'><span style='mso-bookmark:_Toc152605227'><span
!   style='mso-bookmark:_Toc115416277'>Value: FailLoginsSilentl</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD (1|0)<br>
    Default: 0<br>
    NSIS/WiX: (not set)</p>
***************
*** 7554,7567 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:2;height:139.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:139.0pt'>
    <h5><a name="_Toc191662281"></a><a name="_Toc152605228"></a><a
!   name="_Toc115416278"></a><a name="_Toc139993270"></a><a name="_Toc126872347"></a><span
    style='mso-bookmark:_Toc191662281'><span style='mso-bookmark:_Toc152605228'><span
!   style='mso-bookmark:_Toc115416278'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   LogonScript</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ or REG_EXPAND_SZ<br>
    Default: (null)<br>
    NSIS/WiX: (only value under NP key) &lt;install path&gt;\afscreds.exe -:%s -x
--- 7451,7462 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:2;height:139.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:139.0pt'>
    <h5><a name="_Toc191662281"></a><a name="_Toc152605228"></a><a
!   name="_Toc115416278"></a><a name="_Toc126872347"></a><a name="_Toc139993270"></a><span
    style='mso-bookmark:_Toc191662281'><span style='mso-bookmark:_Toc152605228'><span
!   style='mso-bookmark:_Toc115416278'>Value: LogonScript</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ or REG_EXPAND_SZ<br>
    Default: (null)<br>
    NSIS/WiX: (only value under NP key) &lt;install path&gt;\afscreds.exe -:%s -x
***************
*** 7575,7588 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:3;height:105.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:105.5pt'>
    <h5><a name="_Toc191662282"></a><a name="_Toc152605229"></a><a
!   name="_Toc115416279"></a><a name="_Toc139993271"></a><a name="_Toc126872348"></a><span
    style='mso-bookmark:_Toc191662282'><span style='mso-bookmark:_Toc152605229'><span
!   style='mso-bookmark:_Toc115416279'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   LoginRetryInterval</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 30<br>
    NSIS/WiX: (not set)</p>
--- 7470,7481 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:3;height:105.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:105.5pt'>
    <h5><a name="_Toc191662282"></a><a name="_Toc152605229"></a><a
!   name="_Toc115416279"></a><a name="_Toc126872348"></a><a name="_Toc139993271"></a><span
    style='mso-bookmark:_Toc191662282'><span style='mso-bookmark:_Toc152605229'><span
!   style='mso-bookmark:_Toc115416279'>Value: LoginRetryInterval</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 30<br>
    NSIS/WiX: (not set)</p>
***************
*** 7593,7606 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:4;height:79.25pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662283"></a><a name="_Toc152605230"></a><a
!   name="_Toc115416280"></a><a name="_Toc139993272"></a><a name="_Toc126872349"></a><span
    style='mso-bookmark:_Toc191662283'><span style='mso-bookmark:_Toc152605230'><span
!   style='mso-bookmark:_Toc115416280'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   LoginSleepInterval</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 5<br>
    NSIS/WiX: (not set)</p>
--- 7486,7497 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:4;height:79.25pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:79.25pt'>
    <h5><a name="_Toc191662283"></a><a name="_Toc152605230"></a><a
!   name="_Toc115416280"></a><a name="_Toc126872349"></a><a name="_Toc139993272"></a><span
    style='mso-bookmark:_Toc191662283'><span style='mso-bookmark:_Toc152605230'><span
!   style='mso-bookmark:_Toc115416280'>Value: LoginSleepInterval</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD<br>
    Default: 5<br>
    NSIS/WiX: (not set)</p>
***************
*** 7608,7634 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;height:78.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:78.5pt'>
    <h5><a name="_Toc191662284"></a><a name="_Value:_Realm"></a><span
!   style='mso-bookmark:_Toc191662284'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   Realm</span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    NSIS: &lt;not set&gt;</p>
    <p class=MsoBodyText>When Kerberos v5 is being used, Realm specifies the
    Kerberos v5 realm that should be appended to the first component of the
!   Domain logon username to construct the Kerberos v5 principal for which AFS tokens
!   should be obtained.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:6;mso-yfti-lastrow:yes;height:78.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:78.5pt'>
    <h5><a name="_Toc191662285"></a><a name="_Toc152605231"></a><a
!   name="_Toc139993273"></a><a name="_Toc126872350"></a><a name="_Toc115416281"></a><a
!   name="_Value:_TheseCells"></a><span style='mso-bookmark:_Toc191662285'><span
!   style='mso-bookmark:_Toc152605231'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   TheseCells</span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_MULTI_SZ<br>
    NSIS: &lt;not set&gt;</p>
    <p class=MsoBodyText>When Kerberos v5 is being used, TheseCells provides a
--- 7499,7523 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:5;height:78.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:78.5pt'>
    <h5><a name="_Toc191662284"></a><a name="_Value:_Realm"></a><span
!   style='mso-bookmark:_Toc191662284'>Value: Realm</span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    NSIS: &lt;not set&gt;</p>
    <p class=MsoBodyText>When Kerberos v5 is being used, Realm specifies the
    Kerberos v5 realm that should be appended to the first component of the
!   Domain logon username to construct the Kerberos v5 principal for which AFS
!   tokens should be obtained.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:6;mso-yfti-lastrow:yes;height:78.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:78.5pt'>
    <h5><a name="_Toc191662285"></a><a name="_Toc152605231"></a><a
!   name="_Value:_TheseCells"></a><a name="_Toc115416281"></a><a
!   name="_Toc126872350"></a><a name="_Toc139993273"></a><span style='mso-bookmark:
!   _Toc191662285'><span style='mso-bookmark:_Toc152605231'>Value: TheseCells</span></span></h5>
    <p class=MsoBodyText>Type: REG_MULTI_SZ<br>
    NSIS: &lt;not set&gt;</p>
    <p class=MsoBodyText>When Kerberos v5 is being used, TheseCells provides a
***************
*** 7643,7652 ****
  name="_Toc152605232"></a><a name="_Toc115416282"></a><a name="_Toc139993274"></a><a
  name="_Toc126872351"></a><span style='mso-bookmark:_Toc193871749'><span
  style='mso-bookmark:_Toc193871504'><span style='mso-bookmark:_Toc191662286'><span
! style='mso-bookmark:_Toc152605232'><span style='mso-bookmark:_Toc115416282'><span
! style='mso-fareast-font-family:"Times New Roman"'>A.2.1.2 Selection of
! effective values for domain specific configuration</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>During
  login to domain X, where X is the domain passed into NPLogonNotify as
--- 7532,7539 ----
  name="_Toc152605232"></a><a name="_Toc115416282"></a><a name="_Toc139993274"></a><a
  name="_Toc126872351"></a><span style='mso-bookmark:_Toc193871749'><span
  style='mso-bookmark:_Toc193871504'><span style='mso-bookmark:_Toc191662286'><span
! style='mso-bookmark:_Toc152605232'><span style='mso-bookmark:_Toc115416282'>A.2.1.2
! Selection of effective values for domain specific configuration</span></span></span></span></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>During
  login to domain X, where X is the domain passed into NPLogonNotify as
***************
*** 7654,7670 ****
  lpAuthentInfo-&gt;LogonDomainName equals the name of the computer, the
  following keys will be looked up.</p>
  
! <p class=MsoBodyText style='margin-left:.5in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>NP key.
  (&quot;HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider&quot;)</p>
  
! <p class=MsoBodyText style='margin-left:.5in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Domains key. (NP key\&quot;Domain&quot;)</p>
  
! <p class=MsoBodyText style='margin-left:.5in;text-indent:-.25in;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>3.<span
! style='font-size:7.0pt;font-family:"Times New Roman","serif"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Specific domain key. (Domains key\X)</p>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
--- 7541,7560 ----
  lpAuthentInfo-&gt;LogonDomainName equals the name of the computer, the
  following keys will be looked up.</p>
  
! <p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>1.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>NP key.
  (&quot;HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider&quot;)</p>
  
! <p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>2.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Domains key. (NP key\&quot;Domain&quot;)</p>
  
! <p class=MsoBodyText style='margin-left:36.0pt;text-indent:-18.0pt;tab-stops:
! 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>3.<span
! style='font-size:7.0pt;font-family:"Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </span>Specific domain key. (Domains key\X)</p>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
***************
*** 7686,7694 ****
  name="_Toc152605233"></a><a name="_Toc115416283"></a><a name="_Toc139993275"></a><a
  name="_Toc126872352"></a><span style='mso-bookmark:_Toc193871750'><span
  style='mso-bookmark:_Toc193871505'><span style='mso-bookmark:_Toc191662287'><span
! style='mso-bookmark:_Toc152605233'><span style='mso-bookmark:_Toc115416283'><span
! style='mso-fareast-font-family:"Times New Roman"'>A.2.1.3 Exceptions to A.2.1.2</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>To
  retain backwards compatibility, the following exceptions are made to 2.1.2.</p>
--- 7576,7583 ----
  name="_Toc152605233"></a><a name="_Toc115416283"></a><a name="_Toc139993275"></a><a
  name="_Toc126872352"></a><span style='mso-bookmark:_Toc193871750'><span
  style='mso-bookmark:_Toc193871505'><span style='mso-bookmark:_Toc191662287'><span
! style='mso-bookmark:_Toc152605233'><span style='mso-bookmark:_Toc115416283'>A.2.1.3
! Exceptions to A.2.1.2</span></span></span></span></span></h3>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>To
  retain backwards compatibility, the following exceptions are made to 2.1.2.</p>
***************
*** 7697,7705 ****
  name="_Toc191662288"></a><a name="_Toc152605234"></a><a name="_Toc115416284"></a><a
  name="_Toc139993276"></a><a name="_Toc126872353"></a><span style='mso-bookmark:
  _Toc191662288'><span style='mso-bookmark:_Toc152605234'><span style='mso-bookmark:
! _Toc115416284'><span style='mso-fareast-font-family:"Times New Roman"'>2.1.3.1
! 'FailLoginsSilently'</span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h4>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Historically,
  the 'FailLoginsSilently' value was in
--- 7586,7592 ----
  name="_Toc191662288"></a><a name="_Toc152605234"></a><a name="_Toc115416284"></a><a
  name="_Toc139993276"></a><a name="_Toc126872353"></a><span style='mso-bookmark:
  _Toc191662288'><span style='mso-bookmark:_Toc152605234'><span style='mso-bookmark:
! _Toc115416284'>2.1.3.1 'FailLoginsSilently'</span></span></span></h4>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Historically,
  the 'FailLoginsSilently' value was in
***************
*** 7712,7728 ****
  name="_Toc191662289"></a><a name="_Toc152605235"></a><a name="_Toc115416285"></a><a
  name="_Toc139993277"></a><a name="_Toc126872354"></a><span style='mso-bookmark:
  _Toc191662289'><span style='mso-bookmark:_Toc152605235'><span style='mso-bookmark:
! _Toc115416285'><span style='mso-fareast-font-family:"Times New Roman"'>2.1.3.2
! 'LogonScript'</span></span></span></span><span style='mso-fareast-font-family:
! "Times New Roman"'><o:p></o:p></span></h4>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  a 'LogonScript' is not specified in the specific domain key nor in the domains
  key, the value in the NP key will only be checked if the effective
  'LogonOptions' specify a high security integrated login.&nbsp; If a logon
  script is specified in the specific domain key or the domains key, it will be
! used regardless of the high security setting.&nbsp; Please be aware of this
! when setting this value.</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871751"></a><a name="_Toc193871506"></a><a name="_Toc191662290"></a><a
--- 7599,7613 ----
  name="_Toc191662289"></a><a name="_Toc152605235"></a><a name="_Toc115416285"></a><a
  name="_Toc139993277"></a><a name="_Toc126872354"></a><span style='mso-bookmark:
  _Toc191662289'><span style='mso-bookmark:_Toc152605235'><span style='mso-bookmark:
! _Toc115416285'>2.1.3.2 'LogonScript'</span></span></span></h4>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>If
  a 'LogonScript' is not specified in the specific domain key nor in the domains
  key, the value in the NP key will only be checked if the effective
  'LogonOptions' specify a high security integrated login.&nbsp; If a logon
  script is specified in the specific domain key or the domains key, it will be
! used regardless of the high security setting.&nbsp; Please be aware of this when
! setting this value.</p>
  
  <h2 style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><a
  name="_Toc193871751"></a><a name="_Toc193871506"></a><a name="_Toc191662290"></a><a
***************
*** 7730,7738 ****
  name="_Toc126872355"></a><a name="_Toc115417107"></a><span style='mso-bookmark:
  _Toc193871751'><span style='mso-bookmark:_Toc193871506'><span style='mso-bookmark:
  _Toc191662290'><span style='mso-bookmark:_Toc152605236'><span style='mso-bookmark:
! _Toc115416286'><span style='mso-fareast-font-family:"Times New Roman"'>A.3. AFS
! Credentials System Tray Tool parameters</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Affects
  the behavior of afscreds.exe</p>
--- 7615,7621 ----
  name="_Toc126872355"></a><a name="_Toc115417107"></a><span style='mso-bookmark:
  _Toc193871751'><span style='mso-bookmark:_Toc193871506'><span style='mso-bookmark:
  _Toc191662290'><span style='mso-bookmark:_Toc152605236'><span style='mso-bookmark:
! _Toc115416286'>A.3. AFS Credentials System Tray Tool parameters</span></span></span></span></span></h2>
  
  <p class=MsoBodyText style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'>Affects
  the behavior of afscreds.exe</p>
***************
*** 7742,7762 ****
  name="_Toc152605237"></a><a name="_Toc115416287"></a><a name="_Toc139993279"></a><a
  name="_Toc126872356"></a><span style='mso-bookmark:_Toc193871752'><span
  style='mso-bookmark:_Toc193871507'><span style='mso-bookmark:_Toc191662291'><span
! style='mso-bookmark:_Toc152605237'><span style='mso-bookmark:_Toc115416287'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662292"></a><a name="_Toc152605238"></a><a
!   name="_Toc115416288"></a><a name="_Toc139993280"></a><a name="_Toc126872357"></a><span
    style='mso-bookmark:_Toc191662292'><span style='mso-bookmark:_Toc152605238'><span
!   style='mso-bookmark:_Toc115416288'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   Gateway</span></span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;&quot;<br>
    Function: GetGatewayName()</p>
--- 7625,7642 ----
  name="_Toc152605237"></a><a name="_Toc115416287"></a><a name="_Toc139993279"></a><a
  name="_Toc126872356"></a><span style='mso-bookmark:_Toc193871752'><span
  style='mso-bookmark:_Toc193871507'><span style='mso-bookmark:_Toc191662291'><span
! style='mso-bookmark:_Toc152605237'><span style='mso-bookmark:_Toc115416287'>Regkey:<br>
! [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662292"></a><a name="_Toc152605238"></a><a
!   name="_Toc115416288"></a><a name="_Toc126872357"></a><a name="_Toc139993280"></a><span
    style='mso-bookmark:_Toc191662292'><span style='mso-bookmark:_Toc152605238'><span
!   style='mso-bookmark:_Toc115416288'>Value: Gateway</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;&quot;<br>
    Function: GetGatewayName()</p>
***************
*** 7765,7777 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes;height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662293"></a><a name="_Toc152605239"></a><a
!   name="_Toc115416289"></a><a name="_Toc139993281"></a><a name="_Toc126872358"></a><span
    style='mso-bookmark:_Toc191662293'><span style='mso-bookmark:_Toc152605239'><span
!   style='mso-bookmark:_Toc115416289'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   Cell</span></span></span></span><span style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;<br>
    Variable: IsServiceConfigured()</p>
--- 7645,7656 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes;height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662293"></a><a name="_Toc152605239"></a><a
!   name="_Toc115416289"></a><a name="_Toc126872358"></a><a name="_Toc139993281"></a><span
    style='mso-bookmark:_Toc191662293'><span style='mso-bookmark:_Toc152605239'><span
!   style='mso-bookmark:_Toc115416289'>Value: Cell</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;<br>
    Variable: IsServiceConfigured()</p>
***************
*** 7786,7808 ****
  name="_Toc152605240"></a><a name="_Toc115416290"></a><a name="_Toc139993282"></a><a
  name="_Toc126872359"></a><span style='mso-bookmark:_Toc193871753'><span
  style='mso-bookmark:_Toc193871508'><span style='mso-bookmark:_Toc191662294'><span
! style='mso-bookmark:_Toc152605240'><span style='mso-bookmark:_Toc115416290'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client]<br>
! [HKCU\SOFTWARE\OpenAFS\Client]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:157.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:157.5pt'>
    <h5><a name="_Toc191662295"></a><a name="_Toc152605241"></a><a
!   name="_Toc115416291"></a><a name="_Toc139993283"></a><a name="_Toc126872360"></a><span
    style='mso-bookmark:_Toc191662295'><span style='mso-bookmark:_Toc152605241'><span
!   style='mso-bookmark:_Toc115416291'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   ShowTrayIcon</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1<br>
    Function: InitApp(), Main_OnCheckTerminate()</p>
--- 7665,7683 ----
  name="_Toc152605240"></a><a name="_Toc115416290"></a><a name="_Toc139993282"></a><a
  name="_Toc126872359"></a><span style='mso-bookmark:_Toc193871753'><span
  style='mso-bookmark:_Toc193871508'><span style='mso-bookmark:_Toc191662294'><span
! style='mso-bookmark:_Toc152605240'><span style='mso-bookmark:_Toc115416290'>Regkey:<br>
  [HKLM\SOFTWARE\OpenAFS\Client]<br>
! [HKCU\SOFTWARE\OpenAFS\Client]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:157.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:157.5pt'>
    <h5><a name="_Toc191662295"></a><a name="_Toc152605241"></a><a
!   name="_Toc115416291"></a><a name="_Toc126872360"></a><a name="_Toc139993283"></a><span
    style='mso-bookmark:_Toc191662295'><span style='mso-bookmark:_Toc152605241'><span
!   style='mso-bookmark:_Toc115416291'>Value: ShowTrayIcon</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1<br>
    Function: InitApp(), Main_OnCheckTerminate()</p>
***************
*** 7816,7830 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;height:119.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:119.0pt'>
    <h5><a name="_Toc191662296"></a><a name="_Toc152605242"></a><a
!   name="_Toc115416292"></a><a name="_Value:_EnableKFW"></a><a name=EnableKFW></a><a
!   name="_Toc139993284"></a><a name="_Toc126872361"></a><span style='mso-bookmark:
    _Toc191662296'><span style='mso-bookmark:_Toc152605242'><span
!   style='mso-bookmark:_Toc115416292'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   EnableKFW</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1<br>
    Function: KFW_is_available()</p>
--- 7691,7703 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;height:119.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:119.0pt'>
    <h5><a name="_Toc191662296"></a><a name="_Toc152605242"></a><a
!   name="_Toc115416292"></a><a name="_Toc126872361"></a><a name="_Toc139993284"></a><a
!   name=EnableKFW></a><a name="_Value:_EnableKFW"></a><span style='mso-bookmark:
    _Toc191662296'><span style='mso-bookmark:_Toc152605242'><span
!   style='mso-bookmark:_Toc115416292'>Value: EnableKFW</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1<br>
    Function: KFW_is_available()</p>
***************
*** 7836,7846 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:2;height:119.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:119.0pt'>
!   <h5><a name="_Toc191662297"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   AcceptDottedPrincipalNames</span></a><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1<br>
    Function: KFW_accept_dotted_usernames()</p>
--- 7709,7717 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:2;height:119.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:119.0pt'>
!   <h5><a name="_Toc191662297">Value: AcceptDottedPrincipalNames</a></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 1<br>
    Function: KFW_accept_dotted_usernames()</p>
***************
*** 7849,7870 ****
    Protection database.&nbsp; The mapping algorithm used permits collisions to
    occur.&nbsp; Both of the Kerberos v5 names, &quot;<a
    href="mailto:user.admin@REALM"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>user.admin@REALM</span></span></a>&quot;
!   and &quot;<a href="mailto:user/admin@REALM"><span class=Heading1Char><span
!   style='font-size:14.0pt;text-decoration:none;text-underline:none'>user/admin@REALM</span></span></a>&quot;
!   are interpreted as the same user identity within the cell.&nbsp; To enable
!   both names to be sent to the server by AFSCreds or Integrated Logon, set this
    value to 1.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3;height:119.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:119.0pt'>
!   <h5><a name="_Toc191662298"></a><a name="_Value:_Use524"></a><a name=Use524></a><a
!   name="_Toc139993285"></a><a name="_Toc126872362"></a><a
!   name="_Value___:_Use524"></a><span style='mso-bookmark:_Toc191662298'><span
!   style='mso-fareast-font-family:"Times New Roman"'>Value: Use524</span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0<br>
    Function: KFW_use_krb524()</p>
--- 7720,7742 ----
    Protection database.&nbsp; The mapping algorithm used permits collisions to
    occur.&nbsp; Both of the Kerberos v5 names, &quot;<a
    href="mailto:user.admin@REALM"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>user.admin@REALM</span></span></a>&quot; and &quot;<a
!   href="mailto:user/admin@REALM"><span class=Heading1Char><span
!   style='font-size:14.0pt;mso-fareast-font-family:"MS Mincho";text-decoration:
!   none;text-underline:none'>user/admin@REALM</span></span></a>&quot; are
!   interpreted as the same user identity within the cell.&nbsp; To enable both
!   names to be sent to the server by AFSCreds or Integrated Logon, set this
    value to 1.</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:3;height:119.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:119.0pt'>
!   <h5><a name="_Toc191662298"></a><a name="_Value___:_Use524"></a><a
!   name="_Toc126872362"></a><a name="_Toc139993285"></a><a name=Use524></a><a
!   name="_Value:_Use524"></a><span style='mso-bookmark:_Toc191662298'>Value:
!   Use524</span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: 0<br>
    Function: KFW_use_krb524()</p>
***************
*** 7876,7889 ****
    </td>
   </tr>
   <tr style='mso-yfti-irow:4;mso-yfti-lastrow:yes;height:251.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:251.5pt'>
    <h5><a name="_Toc191662299"></a><a name="_Toc152605244"></a><a
!   name="_Toc139993286"></a><a name="_Toc126872363"></a><a name="_Toc115416294"></a><a
!   name="_Value___:_AfscredsShortcutParams"></a><span style='mso-bookmark:_Toc191662299'><span
!   style='mso-bookmark:_Toc152605244'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   AfscredsShortcutParams</span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;-A -M -N -Q&quot;<br>
    Function: Shortcut_FixStartup</p>
--- 7748,7760 ----
    </td>
   </tr>
   <tr style='mso-yfti-irow:4;mso-yfti-lastrow:yes;height:251.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:251.5pt'>
    <h5><a name="_Toc191662299"></a><a name="_Toc152605244"></a><a
!   name="_Value___:_AfscredsShortcutParams"></a><a name="_Toc115416294"></a><a
!   name="_Toc126872363"></a><a name="_Toc139993286"></a><span style='mso-bookmark:
!   _Toc191662299'><span style='mso-bookmark:_Toc152605244'>Value:
!   AfscredsShortcutParams</span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &quot;-A -M -N -Q&quot;<br>
    Function: Shortcut_FixStartup</p>
***************
*** 7912,7934 ****
  name="_Toc152605245"></a><a name="_Toc115416295"></a><a name="_Toc139993287"></a><a
  name="_Toc126872364"></a><span style='mso-bookmark:_Toc193871754'><span
  style='mso-bookmark:_Toc193871509'><span style='mso-bookmark:_Toc191662300'><span
! style='mso-bookmark:_Toc152605245'><span style='mso-bookmark:_Toc115416295'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKCU\SOFTWARE\OpenAFS\Client]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:92.0pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662301"></a><a name="_Toc152605246"></a><a
!   name="_Toc115416296"></a><a name="_Toc139993288"></a><a name="_Toc126872365"></a><span
    style='mso-bookmark:_Toc191662301'><span style='mso-bookmark:_Toc152605246'><span
!   style='mso-bookmark:_Toc115416296'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   Authentication Cell</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;<br>
    Function: Afscreds.exe GetDefaultCell()</p>
--- 7783,7801 ----
  name="_Toc152605245"></a><a name="_Toc115416295"></a><a name="_Toc139993287"></a><a
  name="_Toc126872364"></a><span style='mso-bookmark:_Toc193871754'><span
  style='mso-bookmark:_Toc193871509'><span style='mso-bookmark:_Toc191662300'><span
! style='mso-bookmark:_Toc152605245'><span style='mso-bookmark:_Toc115416295'>Regkey:<br>
! [HKCU\SOFTWARE\OpenAFS\Client]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:92.0pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:92.0pt'>
    <h5><a name="_Toc191662301"></a><a name="_Toc152605246"></a><a
!   name="_Toc115416296"></a><a name="_Toc126872365"></a><a name="_Toc139993288"></a><span
    style='mso-bookmark:_Toc191662301'><span style='mso-bookmark:_Toc152605246'><span
!   style='mso-bookmark:_Toc115416296'>Value: Authentication Cell</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;<br>
    Function: Afscreds.exe GetDefaultCell()</p>
***************
*** 7943,7965 ****
  name="_Toc152605247"></a><a name="_Toc115416297"></a><a name="_Toc139993289"></a><a
  name="_Toc126872366"></a><span style='mso-bookmark:_Toc193871755'><span
  style='mso-bookmark:_Toc193871510'><span style='mso-bookmark:_Toc191662302'><span
! style='mso-bookmark:_Toc152605247'><span style='mso-bookmark:_Toc115416297'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKCU\SOFTWARE\OpenAFS\Client\Reminders]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:124.75pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:124.75pt'>
    <h5><a name="_Toc191662303"></a><a name="_Toc152605248"></a><a
!   name="_Toc115416298"></a><a name="_Toc139993290"></a><a name="_Toc126872367"></a><span
    style='mso-bookmark:_Toc191662303'><span style='mso-bookmark:_Toc152605248'><span
!   style='mso-bookmark:_Toc115416298'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   &quot;afs cell name&quot;</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: &lt;none&gt;<br>
    Function: LoadRemind(), SaveRemind()</p>
--- 7810,7828 ----
  name="_Toc152605247"></a><a name="_Toc115416297"></a><a name="_Toc139993289"></a><a
  name="_Toc126872366"></a><span style='mso-bookmark:_Toc193871755'><span
  style='mso-bookmark:_Toc193871510'><span style='mso-bookmark:_Toc191662302'><span
! style='mso-bookmark:_Toc152605247'><span style='mso-bookmark:_Toc115416297'>Regkey:<br>
! [HKCU\SOFTWARE\OpenAFS\Client\Reminders]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:124.75pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:124.75pt'>
    <h5><a name="_Toc191662303"></a><a name="_Toc152605248"></a><a
!   name="_Toc115416298"></a><a name="_Toc126872367"></a><a name="_Toc139993290"></a><span
    style='mso-bookmark:_Toc191662303'><span style='mso-bookmark:_Toc152605248'><span
!   style='mso-bookmark:_Toc115416298'>Value: &quot;afs cell name&quot;</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: &lt;none&gt;<br>
    Function: LoadRemind(), SaveRemind()</p>
***************
*** 7976,7998 ****
  name="_Toc152605249"></a><a name="_Toc115416299"></a><a name="_Toc139993291"></a><a
  name="_Toc126872368"></a><span style='mso-bookmark:_Toc193871756'><span
  style='mso-bookmark:_Toc193871511'><span style='mso-bookmark:_Toc191662304'><span
! style='mso-bookmark:_Toc152605249'><span style='mso-bookmark:_Toc115416299'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKCU\SOFTWARE\OpenAFS\Client\Active Maps]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:98.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:98.5pt'>
    <h5><a name="_Toc191662305"></a><a name="_Toc152605250"></a><a
!   name="_Toc115416300"></a><a name="_Toc139993292"></a><a name="_Toc126872369"></a><span
    style='mso-bookmark:_Toc191662305'><span style='mso-bookmark:_Toc152605250'><span
!   style='mso-bookmark:_Toc115416300'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   &quot;upper case drive letter&quot;</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: &lt;none&gt;</p>
    <p class=MsoBodyText>These values are used to store the persistence state of
--- 7839,7857 ----
  name="_Toc152605249"></a><a name="_Toc115416299"></a><a name="_Toc139993291"></a><a
  name="_Toc126872368"></a><span style='mso-bookmark:_Toc193871756'><span
  style='mso-bookmark:_Toc193871511'><span style='mso-bookmark:_Toc191662304'><span
! style='mso-bookmark:_Toc152605249'><span style='mso-bookmark:_Toc115416299'>Regkey:<br>
! [HKCU\SOFTWARE\OpenAFS\Client\Active Maps]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:98.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:98.5pt'>
    <h5><a name="_Toc191662305"></a><a name="_Toc152605250"></a><a
!   name="_Toc115416300"></a><a name="_Toc126872369"></a><a name="_Toc139993292"></a><span
    style='mso-bookmark:_Toc191662305'><span style='mso-bookmark:_Toc152605250'><span
!   style='mso-bookmark:_Toc115416300'>Value: &quot;upper case drive letter&quot;</span></span></span></h5>
    <p class=MsoBodyText>Type: DWORD {0, 1}<br>
    Default: &lt;none&gt;</p>
    <p class=MsoBodyText>These values are used to store the persistence state of
***************
*** 8007,8033 ****
  name="_Toc152605251"></a><a name="_Toc115416301"></a><a name="_Toc139993293"></a><a
  name="_Toc126872370"></a><span style='mso-bookmark:_Toc193871757'><span
  style='mso-bookmark:_Toc193871512'><span style='mso-bookmark:_Toc191662306'><span
! style='mso-bookmark:_Toc152605251'><span style='mso-bookmark:_Toc115416301'><span
! style='mso-fareast-font-family:"Times New Roman"'>Regkey:<br>
! [HKCU\SOFTWARE\OpenAFS\Client\Mappings]</span></span></span></span></span></span><span
! style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:98.5pt'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt;
    height:98.5pt'>
    <h5><a name="_Toc191662307"></a><a name="_Toc152605252"></a><a
!   name="_Toc115416302"></a><a name="_Toc139993294"></a><a name="_Toc126872371"></a><span
    style='mso-bookmark:_Toc191662307'><span style='mso-bookmark:_Toc152605252'><span
!   style='mso-bookmark:_Toc115416302'><span style='mso-fareast-font-family:"Times New Roman"'>Value:
!   &quot;upper case drive letter&quot;</span></span></span></span><span
!   style='mso-fareast-font-family:"Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;</p>
!   <p class=MsoBodyText>These values are used to store the AFS path in UNIX
!   notation to which the drive letter is to be mapped.</p>
    <p class=MsoBodyText>These values used to be stored in the afsdsbmt.ini file.</p>
    </td>
   </tr>
--- 7866,7888 ----
  name="_Toc152605251"></a><a name="_Toc115416301"></a><a name="_Toc139993293"></a><a
  name="_Toc126872370"></a><span style='mso-bookmark:_Toc193871757'><span
  style='mso-bookmark:_Toc193871512'><span style='mso-bookmark:_Toc191662306'><span
! style='mso-bookmark:_Toc152605251'><span style='mso-bookmark:_Toc115416301'>Regkey:<br>
! [HKCU\SOFTWARE\OpenAFS\Client\Mappings]</span></span></span></span></span></h3>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
    height:98.5pt'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt;
    height:98.5pt'>
    <h5><a name="_Toc191662307"></a><a name="_Toc152605252"></a><a
!   name="_Toc115416302"></a><a name="_Toc126872371"></a><a name="_Toc139993294"></a><span
    style='mso-bookmark:_Toc191662307'><span style='mso-bookmark:_Toc152605252'><span
!   style='mso-bookmark:_Toc115416302'>Value: &quot;upper case drive letter&quot;</span></span></span></h5>
    <p class=MsoBodyText>Type: REG_SZ<br>
    Default: &lt;none&gt;</p>
!   <p class=MsoBodyText>These values are used to store the AFS path in UNIX notation
!   to which the drive letter is to be mapped.</p>
    <p class=MsoBodyText>These values used to be stored in the afsdsbmt.ini file.</p>
    </td>
   </tr>
***************
*** 8039,8072 ****
  name="_Toc126872372"></a><a name="_Toc115417108"></a><span style='mso-bookmark:
  _Toc193871758'><span style='mso-bookmark:_Toc193871513'><span style='mso-bookmark:
  _Toc191662308'><span style='mso-bookmark:_Toc152605253'><span style='mso-bookmark:
! _Toc115416303'><span lang=FR style='mso-fareast-font-family:"Times New Roman";
! mso-ansi-language:FR'>A.4 OpenAFS Client Service Environment Variables</span></span></span></span></span></span><span
! lang=FR style='mso-fareast-font-family:"Times New Roman";mso-ansi-language:
! FR'><o:p></o:p></span></h2>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0in 0in 0in 0in'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h5><a name="_Toc191662309"></a><a name="_Toc152605254"></a><a
!   name="_Toc115416304"></a><a name="_Toc139993296"></a><a name="_Toc126872373"></a><span
    style='mso-bookmark:_Toc191662309'><span style='mso-bookmark:_Toc152605254'><span
!   style='mso-bookmark:_Toc115416304'><span style='mso-fareast-font-family:"Times New Roman"'>Variable:
!   AFS_RPC_ENCRYPT</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
!   <p class=MsoBodyText>Values:&nbsp;&nbsp; &quot;OFF&quot; disables the use of
!   RPC encryption any other value allows RPC encryption to be used<br>
    Default:&nbsp; RPC encryption is on</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:6.15in;padding:0in 5.4pt 0in 5.4pt'>
    <h5><a name="_Toc191662310"></a><a name="_Toc152605255"></a><a
!   name="_Toc115416305"></a><a name="_Toc139993297"></a><a name="_Toc126872374"></a><span
    style='mso-bookmark:_Toc191662310'><span style='mso-bookmark:_Toc152605255'><span
!   style='mso-bookmark:_Toc115416305'><span style='mso-fareast-font-family:"Times New Roman"'>Variable:
!   AFS_RPC_PROTSEQ</span></span></span></span><span style='mso-fareast-font-family:
!   "Times New Roman"'><o:p></o:p></span></h5>
    <p class=MsoBodyText>Values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    &quot;ncalrpc&quot;&nbsp; - local RPC<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
--- 7894,7922 ----
  name="_Toc126872372"></a><a name="_Toc115417108"></a><span style='mso-bookmark:
  _Toc193871758'><span style='mso-bookmark:_Toc193871513'><span style='mso-bookmark:
  _Toc191662308'><span style='mso-bookmark:_Toc152605253'><span style='mso-bookmark:
! _Toc115416303'><span lang=FR style='mso-ansi-language:FR'>A.4 OpenAFS Client
! Service Environment Variables</span></span></span></span></span></span><span
! lang=FR style='mso-ansi-language:FR'><o:p></o:p></span></h2>
  
  <table class=MsoNormalTable border=1 cellspacing=3 cellpadding=0
!  style='mso-cellspacing:2.2pt;mso-yfti-tbllook:1184;mso-padding-alt:0pt 0pt 0pt 0pt'>
   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h5><a name="_Toc191662309"></a><a name="_Toc152605254"></a><a
!   name="_Toc115416304"></a><a name="_Toc126872373"></a><a name="_Toc139993296"></a><span
    style='mso-bookmark:_Toc191662309'><span style='mso-bookmark:_Toc152605254'><span
!   style='mso-bookmark:_Toc115416304'>Variable: AFS_RPC_ENCRYPT</span></span></span></h5>
!   <p class=MsoBodyText>Values:&nbsp;&nbsp; &quot;OFF&quot; disables the use of RPC
!   encryption any other value allows RPC encryption to be used<br>
    Default:&nbsp; RPC encryption is on</p>
    </td>
   </tr>
   <tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>
!   <td width=590 valign=top style='width:442.8pt;padding:0pt 5.4pt 0pt 5.4pt'>
    <h5><a name="_Toc191662310"></a><a name="_Toc152605255"></a><a
!   name="_Toc115416305"></a><a name="_Toc126872374"></a><a name="_Toc139993297"></a><span
    style='mso-bookmark:_Toc191662310'><span style='mso-bookmark:_Toc152605255'><span
!   style='mso-bookmark:_Toc115416305'>Variable: AFS_RPC_PROTSEQ</span></span></span></h5>
    <p class=MsoBodyText>Values:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    &quot;ncalrpc&quot;&nbsp; - local RPC<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm:1.2.6.31.2.2 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm:1.2.6.34
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm:1.2.6.31.2.2	Mon Jun 23 00:09:22 2008
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/toc.htm	Wed Jul 16 01:34:58 2008
***************
*** 1,52 ****
  <html xmlns:v="urn:schemas-microsoft-com:vml"
  xmlns:o="urn:schemas-microsoft-com:office:office"
  xmlns:w="urn:schemas-microsoft-com:office:word"
! xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
! xmlns="http://www.w3.org/TR/REC-html40">
  
  <head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
  <meta name=ProgId content=Word.Document>
! <meta name=Generator content="Microsoft Word 12">
! <meta name=Originator content="Microsoft Word 12">
  <base target=body>
  <link rel=File-List href="toc_files/filelist.xml">
! <title>OpenAFS for Windows 1.5.39 Table of Contents</title>
  <!--[if gte mso 9]><xml>
   <o:DocumentProperties>
    <o:Author>Jeffrey Altman</o:Author>
    <o:LastAuthor>Jeffrey Altman</o:LastAuthor>
    <o:Revision>1</o:Revision>
!   <o:TotalTime>11</o:TotalTime>
    <o:Created>2006-11-30T04:12:00Z</o:Created>
    <o:LastSaved>2006-11-30T04:14:00Z</o:LastSaved>
!   <o:Pages>5</o:Pages>
!   <o:Words>7045</o:Words>
!   <o:Characters>40162</o:Characters>
    <o:Company>Secure Endpoints Inc.</o:Company>
!   <o:Lines>334</o:Lines>
!   <o:Paragraphs>94</o:Paragraphs>
!   <o:CharactersWithSpaces>47113</o:CharactersWithSpaces>
!   <o:Version>12.00</o:Version>
   </o:DocumentProperties>
! </xml><![endif]-->
! <link rel=themeData href="toc_files/themedata.thmx">
! <link rel=colorSchemeMapping href="toc_files/colorschememapping.xml">
! <!--[if gte mso 9]><xml>
   <w:WordDocument>
    <w:Zoom>0</w:Zoom>
-   <w:SpellingState>Clean</w:SpellingState>
-   <w:GrammarState>Clean</w:GrammarState>
-   <w:TrackMoves>false</w:TrackMoves>
-   <w:TrackFormatting/>
    <w:ValidateAgainstSchemas/>
    <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
    <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
    <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
-   <w:DoNotPromoteQF/>
-   <w:LidThemeOther>EN-US</w:LidThemeOther>
-   <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
-   <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
    <w:Compatibility>
     <w:BreakWrappedTables/>
     <w:SnapToGridInCell/>
--- 1,41 ----
  <html xmlns:v="urn:schemas-microsoft-com:vml"
  xmlns:o="urn:schemas-microsoft-com:office:office"
  xmlns:w="urn:schemas-microsoft-com:office:word"
! xmlns="http://www.w3.org/TR/REC-html40"
! xmlns:ns0="http://schemas.microsoft.com/office/2004/12/omml">
  
  <head>
  <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
  <meta name=ProgId content=Word.Document>
! <meta name=Generator content="Microsoft Word 11">
! <meta name=Originator content="Microsoft Word 11">
  <base target=body>
  <link rel=File-List href="toc_files/filelist.xml">
! <title>OpenAFS for Windows 1.5.50 Table of Contents</title>
  <!--[if gte mso 9]><xml>
   <o:DocumentProperties>
    <o:Author>Jeffrey Altman</o:Author>
    <o:LastAuthor>Jeffrey Altman</o:LastAuthor>
    <o:Revision>1</o:Revision>
!   <o:TotalTime>14</o:TotalTime>
    <o:Created>2006-11-30T04:12:00Z</o:Created>
    <o:LastSaved>2006-11-30T04:14:00Z</o:LastSaved>
!   <o:Pages>1</o:Pages>
!   <o:Words>3125</o:Words>
!   <o:Characters>17817</o:Characters>
    <o:Company>Secure Endpoints Inc.</o:Company>
!   <o:Lines>148</o:Lines>
!   <o:Paragraphs>41</o:Paragraphs>
!   <o:CharactersWithSpaces>20901</o:CharactersWithSpaces>
!   <o:Version>11.9999</o:Version>
   </o:DocumentProperties>
! </xml><![endif]--><!--[if gte mso 9]><xml>
   <w:WordDocument>
    <w:Zoom>0</w:Zoom>
    <w:ValidateAgainstSchemas/>
    <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
    <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
    <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
    <w:Compatibility>
     <w:BreakWrappedTables/>
     <w:SnapToGridInCell/>
***************
*** 61,70 ****
     <w:CachedColBalance/>
    </w:Compatibility>
    <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
    <m:mathPr>
     <m:mathFont m:val="Cambria Math"/>
     <m:brkBin m:val="before"/>
!    <m:brkBinSub m:val="&#45;-"/>
     <m:smallFrac m:val="off"/>
     <m:dispDef/>
     <m:lMargin m:val="0"/>
--- 50,65 ----
     <w:CachedColBalance/>
    </w:Compatibility>
    <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+   <w:TrackMoves>false</w:TrackMoves>
+   <w:TrackFormatting/>
+   <w:DoNotPromoteQF/>
+   <w:LidThemeOther>EN-US</w:LidThemeOther>
+   <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
+   <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
    <m:mathPr>
     <m:mathFont m:val="Cambria Math"/>
     <m:brkBin m:val="before"/>
!    <m:brkBinSub m:val="--"/>
     <m:smallFrac m:val="off"/>
     <m:dispDef/>
     <m:lMargin m:val="0"/>
***************
*** 73,242 ****
     <m:wrapIndent m:val="1440"/>
     <m:intLim m:val="subSup"/>
     <m:naryLim m:val="undOvr"/>
!   </m:mathPr></w:WordDocument>
  </xml><![endif]--><!--[if gte mso 9]><xml>
!  <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
!   DefSemiHidden="false" DefQFormat="false" LatentStyleCount="267">
!   <w:LsdException Locked="false" QFormat="true" Name="Normal"/>
!   <w:LsdException Locked="false" QFormat="true" Name="heading 1"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 2"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 3"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 4"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 5"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 6"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 7"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 8"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="heading 9"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
!   <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
!   <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
!    QFormat="true" Name="caption"/>
!   <w:LsdException Locked="false" QFormat="true" Name="Title"/>
!   <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
!   <w:LsdException Locked="false" QFormat="true" Name="Subtitle"/>
!   <w:LsdException Locked="false" Priority="99" Name="Hyperlink"/>
!   <w:LsdException Locked="false" QFormat="true" Name="Strong"/>
!   <w:LsdException Locked="false" QFormat="true" Name="Emphasis"/>
!   <w:LsdException Locked="false" Priority="99" Name="No List"/>
!   <w:LsdException Locked="false" Priority="99" SemiHidden="true"
!    Name="Placeholder Text"/>
!   <w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
!   <w:LsdException Locked="false" Priority="99" SemiHidden="true" Name="Revision"/>
!   <w:LsdException Locked="false" Priority="34" QFormat="true"
!    Name="List Paragraph"/>
!   <w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
!   <w:LsdException Locked="false" Priority="30" QFormat="true"
!    Name="Intense Quote"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
!   <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
!   <w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
!   <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
!   <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
!   <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
!   <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
!   <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
!   <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
!   <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
!   <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
!   <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
!   <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
!   <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
!   <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
!   <w:LsdException Locked="false" Priority="19" QFormat="true"
!    Name="Subtle Emphasis"/>
!   <w:LsdException Locked="false" Priority="21" QFormat="true"
!    Name="Intense Emphasis"/>
!   <w:LsdException Locked="false" Priority="31" QFormat="true"
!    Name="Subtle Reference"/>
!   <w:LsdException Locked="false" Priority="32" QFormat="true"
!    Name="Intense Reference"/>
!   <w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
!   <w:LsdException Locked="false" Priority="37" SemiHidden="true"
!    UnhideWhenUsed="true" Name="Bibliography"/>
!   <w:LsdException Locked="false" Priority="39" SemiHidden="true"
!    UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
   </w:LatentStyles>
  </xml><![endif]-->
  <style>
! <!--
   /* Font Definitions */
   @font-face
  	{font-family:"MS Mincho";
--- 68,186 ----
     <m:wrapIndent m:val="1440"/>
     <m:intLim m:val="subSup"/>
     <m:naryLim m:val="undOvr"/>
!   </m:mathPr>
!  </w:WordDocument>
  </xml><![endif]--><!--[if gte mso 9]><xml>
!  <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
   </w:LatentStyles>
  </xml><![endif]-->
  <style>
! <!--p.MSONORMAL
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;}
! li.MSONORMAL
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;}
! div.MSONORMAL
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;}
! p.MSOTOC1
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! li.MSOTOC1
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! div.MSOTOC1
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! p.MSOTOC2
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! li.MSOTOC2
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! div.MSOTOC2
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! p.MSOTOC3
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! li.MSOTOC3
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! div.MSOTOC3
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! p.MSOTOC4
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! li.MSOTOC4
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! div.MSOTOC4
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! p.MSOTOC5
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! li.MSOTOC5
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! div.MSOTOC5
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! p.MSOTOC6
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! li.MSOTOC6
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! div.MSOTOC6
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! p.MSOTOC7
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! li.MSOTOC7
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! div.MSOTOC7
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! p.MSOTOC8
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! li.MSOTOC8
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! div.MSOTOC8
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! p.MSOTOC9
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! li.MSOTOC9
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! div.MSOTOC9
! 	{mso-style-priority:39;
! 	mso-style-unhide:no;}
! a:link
! 	{mso-style-priority:99;
! 	mso-style-unhide:no;}
! span.MSOHYPERLINK
! 	{mso-style-priority:99;
! 	mso-style-unhide:no;}
! a:visited
! 	{mso-style-unhide:no;}
! span.MSOHYPERLINKFOLLOWED
! 	{mso-style-unhide:no;}
! .MSOCHPDEFAULT
! 	{mso-default-props:yes;}
! table.MSONORMALTABLE
! 	{mso-style-priority:99;
! 	mso-style-qformat:yes;}
! 
   /* Font Definitions */
   @font-face
  	{font-family:"MS Mincho";
***************
*** 245,258 ****
  	mso-font-charset:128;
  	mso-generic-font-family:modern;
  	mso-font-pitch:fixed;
! 	mso-font-signature:-536870145 1791491579 18 0 131231 0;}
  @font-face
! 	{font-family:"Cambria Math";
! 	panose-1:2 4 5 3 5 4 6 3 2 4;
! 	mso-font-charset:0;
! 	mso-generic-font-family:roman;
! 	mso-font-pitch:variable;
! 	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
  @font-face
  	{font-family:Calibri;
  	panose-1:2 15 5 2 2 2 4 3 2 4;
--- 189,202 ----
  	mso-font-charset:128;
  	mso-generic-font-family:modern;
  	mso-font-pitch:fixed;
! 	mso-font-signature:-1610612033 1757936891 16 0 131231 0;}
  @font-face
! 	{font-family:"\@MS Mincho";
! 	panose-1:2 2 6 9 4 2 5 8 3 4;
! 	mso-font-charset:128;
! 	mso-generic-font-family:modern;
! 	mso-font-pitch:fixed;
! 	mso-font-signature:-536870145 1791491579 18 0 131231 0;}
  @font-face
  	{font-family:Calibri;
  	panose-1:2 15 5 2 2 2 4 3 2 4;
***************
*** 260,428 ****
  	mso-generic-font-family:swiss;
  	mso-font-pitch:variable;
  	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
- @font-face
- 	{font-family:"\@MS Mincho";
- 	panose-1:2 2 6 9 4 2 5 8 3 4;
- 	mso-font-charset:128;
- 	mso-generic-font-family:modern;
- 	mso-font-pitch:fixed;
- 	mso-font-signature:-536870145 1791491579 18 0 131231 0;}
   /* Style Definitions */
   p.MsoNormal, li.MsoNormal, div.MsoNormal
! 	{mso-style-unhide:no;
! 	mso-style-qformat:yes;
! 	mso-style-parent:"";
! 	margin:0in;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman","serif";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc1, li.MsoToc1, div.MsoToc1
  	{mso-style-update:auto;
- 	mso-style-priority:39;
- 	mso-style-unhide:no;
  	mso-style-next:Normal;
! 	margin:0in;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman","serif";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc2, li.MsoToc2, div.MsoToc2
  	{mso-style-update:auto;
- 	mso-style-priority:39;
- 	mso-style-unhide:no;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
! 	margin-bottom:0in;
  	margin-left:12.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman","serif";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc3, li.MsoToc3, div.MsoToc3
  	{mso-style-update:auto;
- 	mso-style-priority:39;
- 	mso-style-unhide:no;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
! 	margin-bottom:0in;
  	margin-left:24.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman","serif";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc4, li.MsoToc4, div.MsoToc4
  	{mso-style-update:auto;
- 	mso-style-priority:39;
- 	mso-style-unhide:no;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
! 	margin-bottom:0in;
! 	margin-left:.5in;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman","serif";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc5, li.MsoToc5, div.MsoToc5
  	{mso-style-update:auto;
- 	mso-style-priority:39;
- 	mso-style-unhide:no;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
! 	margin-bottom:0in;
  	margin-left:48.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman","serif";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc6, li.MsoToc6, div.MsoToc6
  	{mso-style-update:auto;
- 	mso-style-priority:39;
- 	mso-style-unhide:no;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
! 	margin-bottom:0in;
  	margin-left:60.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman","serif";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc7, li.MsoToc7, div.MsoToc7
  	{mso-style-update:auto;
- 	mso-style-priority:39;
- 	mso-style-unhide:no;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
! 	margin-bottom:0in;
! 	margin-left:1.0in;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman","serif";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc8, li.MsoToc8, div.MsoToc8
  	{mso-style-update:auto;
- 	mso-style-priority:39;
- 	mso-style-unhide:no;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
! 	margin-bottom:0in;
  	margin-left:84.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman","serif";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc9, li.MsoToc9, div.MsoToc9
  	{mso-style-update:auto;
- 	mso-style-priority:39;
- 	mso-style-unhide:no;
  	mso-style-next:Normal;
! 	margin-top:0in;
! 	margin-right:0in;
! 	margin-bottom:0in;
  	margin-left:96.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman","serif";
  	mso-fareast-font-family:"MS Mincho";}
  a:link, span.MsoHyperlink
! 	{mso-style-priority:99;
! 	mso-style-unhide:no;
! 	color:blue;
  	text-decoration:underline;
  	text-underline:single;}
  a:visited, span.MsoHyperlinkFollowed
! 	{mso-style-unhide:no;
! 	color:purple;
  	text-decoration:underline;
  	text-underline:single;}
- .MsoChpDefault
- 	{mso-style-type:export-only;
- 	mso-default-props:yes;
- 	font-size:10.0pt;
- 	mso-ansi-font-size:10.0pt;
- 	mso-bidi-font-size:10.0pt;}
  @page Section1
! 	{size:8.5in 11.0in;
! 	margin:1.0in 1.25in 1.0in 1.25in;
! 	mso-header-margin:.5in;
! 	mso-footer-margin:.5in;
  	mso-paper-source:0;}
  div.Section1
  	{page:Section1;}
--- 204,336 ----
  	mso-generic-font-family:swiss;
  	mso-font-pitch:variable;
  	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
   /* Style Definitions */
   p.MsoNormal, li.MsoNormal, div.MsoNormal
! 	{mso-style-parent:"";
! 	margin:0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc1, li.MsoToc1, div.MsoToc1
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin:0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc2, li.MsoToc2, div.MsoToc2
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
! 	margin-bottom:0pt;
  	margin-left:12.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc3, li.MsoToc3, div.MsoToc3
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
! 	margin-bottom:0pt;
  	margin-left:24.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc4, li.MsoToc4, div.MsoToc4
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
! 	margin-bottom:0pt;
! 	margin-left:36.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc5, li.MsoToc5, div.MsoToc5
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
! 	margin-bottom:0pt;
  	margin-left:48.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc6, li.MsoToc6, div.MsoToc6
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
! 	margin-bottom:0pt;
  	margin-left:60.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc7, li.MsoToc7, div.MsoToc7
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
! 	margin-bottom:0pt;
! 	margin-left:72.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc8, li.MsoToc8, div.MsoToc8
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
! 	margin-bottom:0pt;
  	margin-left:84.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";
  	mso-fareast-font-family:"MS Mincho";}
  p.MsoToc9, li.MsoToc9, div.MsoToc9
  	{mso-style-update:auto;
  	mso-style-next:Normal;
! 	margin-top:0pt;
! 	margin-right:0pt;
! 	margin-bottom:0pt;
  	margin-left:96.0pt;
  	margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:12.0pt;
! 	font-family:"Times New Roman";
  	mso-fareast-font-family:"MS Mincho";}
  a:link, span.MsoHyperlink
! 	{color:blue;
  	text-decoration:underline;
  	text-underline:single;}
  a:visited, span.MsoHyperlinkFollowed
! 	{color:purple;
  	text-decoration:underline;
  	text-underline:single;}
  @page Section1
! 	{size:612.0pt 792.0pt;
! 	margin:72.0pt 90.0pt 72.0pt 90.0pt;
! 	mso-header-margin:36.0pt;
! 	mso-footer-margin:36.0pt;
  	mso-paper-source:0;}
  div.Section1
  	{page:Section1;}
***************
*** 436,2687 ****
  	mso-tstyle-rowband-size:0;
  	mso-tstyle-colband-size:0;
  	mso-style-noshow:yes;
- 	mso-style-priority:99;
- 	mso-style-qformat:yes;
  	mso-style-parent:"";
! 	mso-padding-alt:0in 5.4pt 0in 5.4pt;
! 	mso-para-margin:0in;
  	mso-para-margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:10.0pt;
! 	font-family:"Times New Roman","serif";}
  </style>
! <![endif]--><!--[if gte mso 9]><xml>
   <o:shapelayout v:ext="edit">
    <o:idmap v:ext="edit" data="1"/>
   </o:shapelayout></xml><![endif]-->
- <!--[if !mso]>
- <style>
- v\:*         { behavior: url(#default#VML) }
- o\:*         { behavior: url(#default#VML) }
- w\:*         { behavior: url(#default#VML) }
- .shape       { behavior: url(#default#VML) }
- </style>
- <![endif]-->
  </head>
  
! <body lang=EN-US link=blue vlink=purple style='tab-interval:.5in'>
  
  <div class=Section1>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
  class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662062"><span style='mso-fareast-font-family:"Times New Roman"'>1.
! Installer Options</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662063"><span style='mso-fareast-font-family:"Times New Roman"'>2.
! System Requirements</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662064"><span style='mso-fareast-font-family:"Times New Roman"'>2.1
! Supported Operating Systems</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662065"><span style='mso-fareast-font-family:"Times New Roman"'>2.1.1
! Unsupported Operating Systems</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662066"><span style='mso-fareast-font-family:"Times New Roman"'>2.2
! Disk Space</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662067"><span style='mso-fareast-font-family:"Times New Roman"'>2.3
! Additional Software Packages</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662068"><span style='mso-fareast-font-family:"Times New Roman"'>3.
! Operational Notes</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662069"><span style='mso-fareast-font-family:"Times New Roman"'>3.1.
  Requirements for Kerberos v5 Authentication</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662070"><span style='mso-fareast-font-family:"Times New Roman"'>3.1.1.
! Active Directory</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662071"><span style='mso-fareast-font-family:"Times New Roman"'>3.1.2.
! Using the krb524 service</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662072"><span style='mso-fareast-font-family:"Times New Roman"'>3.1.3.
  Network Identity Manager Provider</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662073"><span style='mso-fareast-font-family:"Times New Roman"'>3.2.
  Use of the Microsoft Loopback Adapter by the AFS Client Service</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662074"><span style='mso-fareast-font-family:"Times New Roman"'>3.3.
  Using Freelance (Dynamic Root) Mode to Improve Mobility</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662075"><span style='mso-fareast-font-family:"Times New Roman"'>3.4.
  Locating AFS Volume Database Servers via DNS</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662076"><span style='mso-fareast-font-family:"Times New Roman"'>3.5.
  Obtaining AFS Tokens as a Integrated Part of Windows Logon</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662077"><span style='mso-fareast-font-family:"Times New Roman"'>3.6.
  AFS System Tray Command Line Options</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662078"><span style='mso-fareast-font-family:"Times New Roman"'>3.7.
  The “AFS Client Admins” Authorization Group</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662079"><span style='mso-fareast-font-family:"Times New Roman"'>3.8.
! OpenAFS support for UNC paths</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662080"><span style='mso-fareast-font-family:"Times New Roman"'>3.9.
! aklog.exe</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662081"><span style='mso-fareast-font-family:"Times New Roman"'>3.10.
  OpenAFS Servers on Windows are Unsupported</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662082"><span style='mso-fareast-font-family:"Times New Roman"'>3.10.1.
! OpenAFS Server Installation</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662083"><span style='mso-fareast-font-family:"Times New Roman"'>3.10.2.
  Using the AFS Client Service when the Server is installed</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662084"><span style='mso-fareast-font-family:"Times New Roman"'>3.11.
! OpenAFS Debugging Symbol files</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662085"><span style='mso-fareast-font-family:"Times New Roman"'>3.12.
! Large File (64-bit) Support</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662086"><span style='mso-fareast-font-family:"Times New Roman"'>3.13.
  Encrypted AFS Network Communication</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662087"><span style='mso-fareast-font-family:"Times New Roman"'>3.14.
  Authenticated Access to the OpenAFS Client Service</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662088"><span style='mso-fareast-font-family:"Times New Roman"'>3.15.
! No More INI Files</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662089"><span style='mso-fareast-font-family:"Times New Roman"'>3.16.
  Microsoft Windows Internet Connection Firewall</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662090"><span style='mso-fareast-font-family:"Times New Roman"'>3.17.
  Browsing AFS from the Explorer Shell and Office</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662091"><span style='mso-fareast-font-family:"Times New Roman"'>3.18.
! Byte Range Locking</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662092"><span style='mso-fareast-font-family:"Times New Roman"'>3.19.
  Automatic Discarding of AFS Tokens at Logoff</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662093"><span style='mso-fareast-font-family:"Times New Roman"'>3.20.
  Windows Terminal Server installations</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662094"><span style='mso-fareast-font-family:"Times New Roman"'>3.21.
! Hidden Dot Files</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662095"><span style='mso-fareast-font-family:"Times New Roman"'>3.22.
! Status Cache Limits</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662096"><span style='mso-fareast-font-family:"Times New Roman"'>3.23.
  NETBIOS over TCP/IP must be enabled</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662097"><span style='mso-fareast-font-family:"Times New Roman"'>3.24.
  OpenAFS binaries are digitally signed</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662098"><span style='mso-fareast-font-family:"Times New Roman"'>3.25.
  Maximum Size of the AFSCache File</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662099"><span style='mso-fareast-font-family:"Times New Roman"'>3.26.
! Filename Character Sets</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662100"><span style='mso-fareast-font-family:"Times New Roman"'>3.27.
  Known Character Set Issues with Roaming Profiles</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662101"><span style='mso-fareast-font-family:"Times New Roman"'>3.28.
! The AFSCache File</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662102"><span style='mso-fareast-font-family:"Times New Roman"'>3.29.
  Restricting OpenAFS Client Service Start and Stop</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662103"><span style='mso-fareast-font-family:"Times New Roman"'>3.30.
! The @sys Name List</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662104"><span style='mso-fareast-font-family:"Times New Roman"'>3.31.
! Symlinks to AFS UNC paths</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662105"><span style='mso-fareast-font-family:"Times New Roman"'>3.32.
! Cache Manager Debugging</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662106"><span style='mso-fareast-font-family:"Times New Roman"'>3.33.
  Windows Logon Caching vs. Kerberos Logons</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662107"><span style='mso-fareast-font-family:"Times New Roman"'>3.34.
! Initial Server Preferences</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662108"><span style='mso-fareast-font-family:"Times New Roman"'>3.35.
! File Timestamps</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662109"><span style='mso-fareast-font-family:"Times New Roman"'>3.36.
  Windows RPC client support must be installed</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662110"><span style='mso-fareast-font-family:"Times New Roman"'>3.37.
  Generating Minidumps of the OpenAFS Client Service</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662111"><span style='mso-fareast-font-family:"Times New Roman"'>3.38.
  AFS Client Universally Unique Identifiers (UUIDs) vs. System Cloning</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662112"><span style='mso-fareast-font-family:"Times New Roman"'>3.39.
  Delayed Write Errors with Microsoft Office Applications</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662113"><span style='mso-fareast-font-family:"Times New Roman"'>3.40.
  Global Drives (aka Service Drive Letters) are no longer supported by Microsoft</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662114"><span style='mso-fareast-font-family:"Times New Roman"'>3.41.
  64-bit Microsoft Windows Installations</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662115"><span style='mso-fareast-font-family:"Times New Roman"'>3.42.
  Known Issues with Microsoft Windows Vista</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662116"><span style='mso-fareast-font-family:"Times New Roman"'>3.43.
  New AFS Share Name Syntax Provides Direct Access to Volumes</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662117"><span style='mso-fareast-font-family:"Times New Roman"'>3.44.
  Differences between Windows and UNIX “fs examine”</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662118"><span style='mso-fareast-font-family:"Times New Roman"'>3.45.
  Literal evaluation of AFS objects via fs commands</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662119"><span style='mso-fareast-font-family:"Times New Roman"'>3.46.
! Out of Quota errors</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662120"><span style='mso-fareast-font-family:"Times New Roman"'>4.
  How to Debug Problems with OpenAFS for Windows</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662121"><span style='mso-fareast-font-family:"Times New Roman"'>4.1.
  pioctl debugging (IoctlDebug registry key)</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662122"><span style='mso-fareast-font-family:"Times New Roman"'>4.2.
  afsd_service initialization log (%WinDir%\TEMP\afsd_init.log)</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662123"><span style='mso-fareast-font-family:"Times New Roman"'>4.3.
  afsd_service debug logs (fs trace {-on, -off, -dump}
! -&gt;%WinDir%\TEMP\afsd.log)</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662124"><span style='mso-fareast-font-family:"Times New Roman"'>4.4.
  Using SysInternal’s DbgView and ProcMon or FileMon Tools</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662125"><span style='mso-fareast-font-family:"Times New Roman"'>4.5.
  Microsoft MiniDumps<span style='mso-spacerun:yes'>  </span>(fs minidump -&gt;
! %WinDir%\TEMP\afsd.dmp)</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662126"><span style='mso-fareast-font-family:"Times New Roman"'>4.6.
  Single Sign-on (Integrated Logon) debugging</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662127"><span style='mso-fareast-font-family:"Times New Roman"'>4.7.
  RX (AFS RPC) debugging (rxdebug)</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662128"><span style='mso-fareast-font-family:"Times New Roman"'>4.8.
  Cache Manager debugging (cmdebug)</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662129"><span style='mso-fareast-font-family:"Times New Roman"'>4.9.
  Persistent Cache consistency check</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662130"><span style='mso-fareast-font-family:"Times New Roman"'>4.10.
! Token Acquisition Debugging</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662131"><span style='mso-fareast-font-family:"Times New Roman"'>5.
! Reporting Bugs</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662132"><span style='mso-fareast-font-family:"Times New Roman"'>6.
  How to Contribute to the Development of OpenAFS for Windows</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662133"><span style='mso-fareast-font-family:"Times New Roman"'>6.1.
! The USENIX OpenAFS Fund</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662134"><span style='mso-fareast-font-family:"Times New Roman"'>6.2.
! Secure Endpoints Inc.</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662135"><span style='mso-fareast-font-family:"Times New Roman"'>6.3.
  Direct contributions of code and/or documentation</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662136"><span style='mso-fareast-font-family:"Times New Roman"'>6.4.
  OpenAFS for Windows Mailing Lists</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662137"><span style='mso-fareast-font-family:"Times New Roman"'>7.
! MSI Deployment Guide</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662138"><span style='mso-fareast-font-family:"Times New Roman"'>7.1.
! Introduction</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662139"><span style='mso-fareast-font-family:"Times New Roman"'>7.1.1
! Requirements</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662140"><span style='mso-fareast-font-family:"Times New Roman"'>7.1.2
! Authoring a Transform</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662141"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.
! Configuration Options</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662142"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1
! Configurable Properties</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc4 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662143"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1.1
! Setting Properties</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc4 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662144"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1.2
! OpenAFS for Windows Properties</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662145"><span style='mso-fareast-font-family:"Times New Roman"'>(Service
! parameters):</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662146"><span style='mso-fareast-font-family:"Times New Roman"'>(Network
! provider):</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662147"><span style='mso-fareast-font-family:"Times New Roman"'>(OpenAFS
! Client):</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662148"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1.2.1
! Registry Properties</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662149"><span style='mso-fareast-font-family:"Times New Roman"'>AFSCACHEPATH</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662150"><span style='mso-fareast-font-family:"Times New Roman"'>AFSCACHESIZE</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662151"><span style='mso-fareast-font-family:"Times New Roman"'>AFSCELLNAME</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662152"><span style='mso-fareast-font-family:"Times New Roman"'>FREELANCEMODE</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662153"><span style='mso-fareast-font-family:"Times New Roman"'>HIDEDOTFILES</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662154"><span style='mso-fareast-font-family:"Times New Roman"'>LOGONOPTIONS</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662155"><span style='mso-fareast-font-family:"Times New Roman"'>MOUNTROOT</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662156"><span style='mso-fareast-font-family:"Times New Roman"'>NETBIOSNAME</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662157"><span style='mso-fareast-font-family:"Times New Roman"'>NOFINDLANABYNAME</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662158"><span style='mso-fareast-font-family:"Times New Roman"'>RXMAXMTU</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662159"><span style='mso-fareast-font-family:"Times New Roman"'>SECURITYLEVEL</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662160"><span style='mso-fareast-font-family:"Times New Roman"'>SMBAUTHTYPE</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662161"><span style='mso-fareast-font-family:"Times New Roman"'>STOREANSIFILENAMES</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662162"><span style='mso-fareast-font-family:"Times New Roman"'>USEDNS</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662163"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1.2.2
! AFSCreds.exe Properties</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662164"><span style='mso-fareast-font-family:"Times New Roman"'>CREDSSTARTUP</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662165"><span style='mso-fareast-font-family:"Times New Roman"'>CREDSAUTOINIT</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662166"><span style='mso-fareast-font-family:"Times New Roman"'>CREDSIPCHDET</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662167"><span style='mso-fareast-font-family:"Times New Roman"'>CREDSQUIET</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662168"><span style='mso-fareast-font-family:"Times New Roman"'>CREDSRENEWDRMAP</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662169"><span style='mso-fareast-font-family:"Times New Roman"'>CREDSSHOW</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662170"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.2
! Existing Registry Entries</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662171"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.3
! Replacing Configuration Files</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc4 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662172"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.3.1
  Components for Configuration Files</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662173"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.4
  Adding Domain Specific Registry Keys</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662174"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.5
  Adding Site Specific Freelance Registry Keys</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662175"><span style='mso-fareast-font-family:"Times New Roman"'>7.3
! Additional Resources</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662176"><span style='mso-fareast-font-family:"Times New Roman"'>7.4.
! Upgrades</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662177"><span style='mso-fareast-font-family:"Times New Roman"'>Appendix
! A: Registry Values</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662178"><span style='mso-fareast-font-family:"Times New Roman"'>A.1.
! Service parameters</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662179"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662180"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! LANadapter</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662181"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! CacheSize</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662182"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ChunkSize</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662183"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Daemons</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662184"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ServerThreads</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662185"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Stats</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662186"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! LogoffPreserveTokens</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662187"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! RootVolume</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662188"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MountRoot</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662189"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! CachePath</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662190"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! NonPersistentCaching</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662191"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ValidateCache</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662192"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! TrapOnPanic</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662193"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! NetbiosName</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662194"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! IsGateway</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662195"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ReportSessionStartups</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662196"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! TraceBufferSize</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662197"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! SysName</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662198"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! SecurityLevel</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662199"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! UseDNS</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662200"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! FreelanceClient</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662201"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! HideDotFiles</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662202"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MaxMpxRequests</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662203"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MaxVCPerServer</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662204"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Cell</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662205"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! RxNoJumbo</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662206"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! RxMaxMTU</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662207"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ConnDeadTimeout</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662208"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! HardDeadTimeout</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662209"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! TraceOption</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662210"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! AllSubmount</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662211"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! NoFindLanaByName</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662212"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MaxCPUs</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662213"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! smbAuthType</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662214"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MaxLogSize</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662215"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! FlushOnHibernate</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662216"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckDownInterval</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662217"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckUpInterval</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662218"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckVolInterval</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662219"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckCBInterval</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662220"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckLockInterval</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662221"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckTokenInterval</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662222"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckOfflineVolInterval</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662223"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! CallBackPort</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662224"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! EnableServerLocks</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662225"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! DeleteReadOnly</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662226"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! BPlusTrees</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662227"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! PrefetchExecutableExtensions</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662228"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! OfflineReadOnlyIsValid</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662229"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! GiveUpAllCallBacks</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662230"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! FollowBackupPath</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662231"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters\GlobalAutoMapper]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662232"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
  &lt;Drive Letter:&gt; for example &quot;G:&quot;</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662233"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
! [HKLM\SOFTWARE\OpenAFS\Client]</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662234"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! CellServDBDir</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662235"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! VerifyServiceSignature</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662236"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! IoctlDebug</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662237"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MiniDumpType</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662238"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! EnableSMBAsyncStore</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662239"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! SMBAsyncStoreSize</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662240"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! StoreAnsiFilenames</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662242"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\CSCPolicy]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662243"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! &quot;smb/cifs share name&quot;</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662244"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Freelance]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662245"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! &quot;numeric value&quot;</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662246"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Freelance\Symlinks]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662247"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! &quot;numeric value&quot;</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662248"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Realms]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662249"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Realms<i style='mso-bidi-font-style:normal'>”Realm
! Name”</i>]</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662250"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! AFSEnabled</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662251"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Realms<i style='mso-bidi-font-style:normal'>”Realm
! Name””Cell Name”</i>]</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662252"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MethodName</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662253"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Realm</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662254"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Submounts]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662255"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! &quot;submount name&quot;</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662256"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\VLDB]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662257"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
  &quot;hostname or ip address&quot;</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662258"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\File]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662259"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
  &quot;hostname or ip address&quot;</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662260"><span style='mso-fareast-font-family:"Times New Roman"'>A.2.
  Integrated Logon Network provider parameters</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662261"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662262"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! FailLoginsSilently</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662263"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662264"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! NoWarnings</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662265"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! AuthentProviderPath</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662266"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Class</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662267"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! DependOnGroup</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662268"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! DependOnService</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662269"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Name</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662270"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ProviderPath</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662271"><span style='mso-fareast-font-family:"Times New Roman"'>A.2.1
  Domain specific configuration keys for the Network Provider</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662272"><span style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662273"><span style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662274"><span style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain&quot;domain
! name&quot;]</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662275"><span style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662276"><span style='mso-fareast-font-family:"Times New Roman"'>Example:</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662277"><span style='mso-fareast-font-family:"Times New Roman"'>A.2.1.1
  Domain specific configuration values</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc4 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662278"><span style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain]
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain&quot;domain
  name&quot;]
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662279"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! LogonOptions</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662280"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! FailLoginsSilentl</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662281"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! LogonScript</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662282"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! LoginRetryInterval</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662283"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! LoginSleepInterval</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662284"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Realm</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662285"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! TheseCells</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662286"><span style='mso-fareast-font-family:"Times New Roman"'>A.2.1.2
  Selection of effective values for domain specific configuration</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662287"><span style='mso-fareast-font-family:"Times New Roman"'>A.2.1.3
! Exceptions to A.2.1.2</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc4 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662288"><span style='mso-fareast-font-family:"Times New Roman"'>2.1.3.1
! 'FailLoginsSilently'</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc4 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662289"><span style='mso-fareast-font-family:"Times New Roman"'>2.1.3.2
! 'LogonScript'</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662290"><span style='mso-fareast-font-family:"Times New Roman"'>A.3.
  AFS Credentials System Tray Tool parameters</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662291"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662292"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Gateway</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662293"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Cell</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662294"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client] [HKCU\SOFTWARE\OpenAFS\Client]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662295"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ShowTrayIcon</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662296"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! EnableKFW</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662297"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! AcceptDottedPrincipalNames</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662298"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Use524</span></a></span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
! mso-ascii-theme-font:minor-latin;mso-fareast-font-family:"Times New Roman";
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662299"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! AfscredsShortcutParams</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662300"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
! [HKCU\SOFTWARE\OpenAFS\Client]</span></a></span></span><span style='font-size:
! 11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;
! mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662301"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Authentication Cell</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662302"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKCU\SOFTWARE\OpenAFS\Client\Reminders]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662303"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! &quot;afs cell name&quot;</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662304"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKCU\SOFTWARE\OpenAFS\Client\Active Maps]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662305"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
  &quot;upper case drive letter&quot;</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662306"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKCU\SOFTWARE\OpenAFS\Client\Mappings]</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662307"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
  &quot;upper case drive letter&quot;</span></a></span></span><span
! style='font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-theme-font:
! minor-latin;mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";
! mso-bidi-theme-font:minor-bidi;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662308"><span lang=FR style='mso-fareast-font-family:
  "Times New Roman";mso-ansi-language:FR'>A.4 OpenAFS Client Service Environment
! Variables</span></a></span></span><span style='font-size:11.0pt;font-family:
! "Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662309"><span style='mso-fareast-font-family:"Times New Roman"'>Variable:
! AFS_RPC_ENCRYPT</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662310"><span style='mso-fareast-font-family:"Times New Roman"'>Variable:
! AFS_RPC_PROTSEQ</span></a></span></span><span style='font-size:11.0pt;
! font-family:"Calibri","sans-serif";mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
! "Times New Roman";mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;
! mso-no-proof:yes'><o:p></o:p></span></p>
  
! <p class=MsoNormal><!--[if supportFields]><span style='mso-element:field-end'></span>
! <![endif]--><o:p>&nbsp;</o:p></p>
  
  <p class=MsoNormal><o:p>&nbsp;</o:p></p>
  
--- 344,2770 ----
  	mso-tstyle-rowband-size:0;
  	mso-tstyle-colband-size:0;
  	mso-style-noshow:yes;
  	mso-style-parent:"";
! 	mso-padding-alt:0pt 5.4pt 0pt 5.4pt;
! 	mso-para-margin:0pt;
  	mso-para-margin-bottom:.0001pt;
  	mso-pagination:widow-orphan;
  	font-size:10.0pt;
! 	font-family:"Times New Roman";
! 	mso-ansi-language:#0400;
! 	mso-fareast-language:#0400;
! 	mso-bidi-language:#0400;}
  </style>
! <![endif]-->
! <link rel=themeData href="toc_files/themedata.thmx">
! <link rel=colorSchemeMapping href="toc_files/colorschememapping.xml">
! <!--[if gte mso 9]><xml>
!  <o:shapedefaults v:ext="edit" spidmax="2050"/>
! </xml><![endif]--><!--[if gte mso 9]><xml>
   <o:shapelayout v:ext="edit">
    <o:idmap v:ext="edit" data="1"/>
   </o:shapelayout></xml><![endif]-->
  </head>
  
! <body lang=EN-US link=blue vlink=purple style='tab-interval:36.0pt'>
  
  <div class=Section1>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
  class=MsoHyperlink><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662062"><span style='mso-fareast-font-family:"Times New Roman"'>1.
! Installer Options</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662063"><span style='mso-fareast-font-family:"Times New Roman"'>2.
! System Requirements</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662064"><span style='mso-fareast-font-family:"Times New Roman"'>2.1
! Supported Operating Systems</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662065"><span style='mso-fareast-font-family:"Times New Roman"'>2.1.1
! Unsupported Operating Systems</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662066"><span style='mso-fareast-font-family:"Times New Roman"'>2.2
! Disk Space</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662067"><span style='mso-fareast-font-family:"Times New Roman"'>2.3
! Additional Software Packages</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662068"><span style='mso-fareast-font-family:"Times New Roman"'>3.
! Operational Notes</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
! 
! <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
! href="relnotes.htm#_Toc193871633"><span style='mso-fareast-font-family:"Times New Roman"'>3.0.Unicode
! Support</span></a></span></span><span style='mso-ascii-theme-font:
! minor-latin;
! mso-fareast-theme-font:
! minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662069"><span style='mso-fareast-font-family:"Times New Roman"'>3.1.
  Requirements for Kerberos v5 Authentication</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662070"><span style='mso-fareast-font-family:"Times New Roman"'>3.1.1.
! Active Directory</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662071"><span style='mso-fareast-font-family:"Times New Roman"'>3.1.2.
! Using the krb524 service</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662072"><span style='mso-fareast-font-family:"Times New Roman"'>3.1.3.
  Network Identity Manager Provider</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662073"><span style='mso-fareast-font-family:"Times New Roman"'>3.2.
  Use of the Microsoft Loopback Adapter by the AFS Client Service</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662074"><span style='mso-fareast-font-family:"Times New Roman"'>3.3.
  Using Freelance (Dynamic Root) Mode to Improve Mobility</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662075"><span style='mso-fareast-font-family:"Times New Roman"'>3.4.
  Locating AFS Volume Database Servers via DNS</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662076"><span style='mso-fareast-font-family:"Times New Roman"'>3.5.
  Obtaining AFS Tokens as a Integrated Part of Windows Logon</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662077"><span style='mso-fareast-font-family:"Times New Roman"'>3.6.
  AFS System Tray Command Line Options</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662078"><span style='mso-fareast-font-family:"Times New Roman"'>3.7.
  The “AFS Client Admins” Authorization Group</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662079"><span style='mso-fareast-font-family:"Times New Roman"'>3.8.
! OpenAFS support for UNC paths</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662080"><span style='mso-fareast-font-family:"Times New Roman"'>3.9.
! aklog.exe</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662081"><span style='mso-fareast-font-family:"Times New Roman"'>3.10.
  OpenAFS Servers on Windows are Unsupported</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662082"><span style='mso-fareast-font-family:"Times New Roman"'>3.10.1.
! OpenAFS Server Installation</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662083"><span style='mso-fareast-font-family:"Times New Roman"'>3.10.2.
  Using the AFS Client Service when the Server is installed</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662084"><span style='mso-fareast-font-family:"Times New Roman"'>3.11.
! OpenAFS Debugging Symbol files</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662085"><span style='mso-fareast-font-family:"Times New Roman"'>3.12.
! Large File (64-bit) Support</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662086"><span style='mso-fareast-font-family:"Times New Roman"'>3.13.
  Encrypted AFS Network Communication</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662087"><span style='mso-fareast-font-family:"Times New Roman"'>3.14.
  Authenticated Access to the OpenAFS Client Service</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662088"><span style='mso-fareast-font-family:"Times New Roman"'>3.15.
! No More INI Files</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662089"><span style='mso-fareast-font-family:"Times New Roman"'>3.16.
  Microsoft Windows Internet Connection Firewall</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662090"><span style='mso-fareast-font-family:"Times New Roman"'>3.17.
  Browsing AFS from the Explorer Shell and Office</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662091"><span style='mso-fareast-font-family:"Times New Roman"'>3.18.
! Byte Range Locking</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662092"><span style='mso-fareast-font-family:"Times New Roman"'>3.19.
  Automatic Discarding of AFS Tokens at Logoff</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662093"><span style='mso-fareast-font-family:"Times New Roman"'>3.20.
  Windows Terminal Server installations</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662094"><span style='mso-fareast-font-family:"Times New Roman"'>3.21.
! Hidden Dot Files</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662095"><span style='mso-fareast-font-family:"Times New Roman"'>3.22.
! Status Cache Limits</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662096"><span style='mso-fareast-font-family:"Times New Roman"'>3.23.
  NETBIOS over TCP/IP must be enabled</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662097"><span style='mso-fareast-font-family:"Times New Roman"'>3.24.
  OpenAFS binaries are digitally signed</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662098"><span style='mso-fareast-font-family:"Times New Roman"'>3.25.
  Maximum Size of the AFSCache File</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662099"><span style='mso-fareast-font-family:"Times New Roman"'>3.26.
! Filename Character Sets</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662100"><span style='mso-fareast-font-family:"Times New Roman"'>3.27.
  Known Character Set Issues with Roaming Profiles</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662101"><span style='mso-fareast-font-family:"Times New Roman"'>3.28.
! The AFSCache File</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662102"><span style='mso-fareast-font-family:"Times New Roman"'>3.29.
  Restricting OpenAFS Client Service Start and Stop</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662103"><span style='mso-fareast-font-family:"Times New Roman"'>3.30.
! The @sys Name List</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662104"><span style='mso-fareast-font-family:"Times New Roman"'>3.31.
! Symlinks to AFS UNC paths</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662105"><span style='mso-fareast-font-family:"Times New Roman"'>3.32.
! Cache Manager Debugging</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662106"><span style='mso-fareast-font-family:"Times New Roman"'>3.33.
  Windows Logon Caching vs. Kerberos Logons</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662107"><span style='mso-fareast-font-family:"Times New Roman"'>3.34.
! Initial Server Preferences</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662108"><span style='mso-fareast-font-family:"Times New Roman"'>3.35.
! File Timestamps</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662109"><span style='mso-fareast-font-family:"Times New Roman"'>3.36.
  Windows RPC client support must be installed</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662110"><span style='mso-fareast-font-family:"Times New Roman"'>3.37.
  Generating Minidumps of the OpenAFS Client Service</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662111"><span style='mso-fareast-font-family:"Times New Roman"'>3.38.
  AFS Client Universally Unique Identifiers (UUIDs) vs. System Cloning</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662112"><span style='mso-fareast-font-family:"Times New Roman"'>3.39.
  Delayed Write Errors with Microsoft Office Applications</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662113"><span style='mso-fareast-font-family:"Times New Roman"'>3.40.
  Global Drives (aka Service Drive Letters) are no longer supported by Microsoft</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662114"><span style='mso-fareast-font-family:"Times New Roman"'>3.41.
  64-bit Microsoft Windows Installations</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662115"><span style='mso-fareast-font-family:"Times New Roman"'>3.42.
  Known Issues with Microsoft Windows Vista</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662116"><span style='mso-fareast-font-family:"Times New Roman"'>3.43.
  New AFS Share Name Syntax Provides Direct Access to Volumes</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662117"><span style='mso-fareast-font-family:"Times New Roman"'>3.44.
  Differences between Windows and UNIX “fs examine”</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662118"><span style='mso-fareast-font-family:"Times New Roman"'>3.45.
  Literal evaluation of AFS objects via fs commands</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662119"><span style='mso-fareast-font-family:"Times New Roman"'>3.46.
! Out of Quota errors</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662120"><span style='mso-fareast-font-family:"Times New Roman"'>4.
  How to Debug Problems with OpenAFS for Windows</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662121"><span style='mso-fareast-font-family:"Times New Roman"'>4.1.
  pioctl debugging (IoctlDebug registry key)</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662122"><span style='mso-fareast-font-family:"Times New Roman"'>4.2.
  afsd_service initialization log (%WinDir%\TEMP\afsd_init.log)</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662123"><span style='mso-fareast-font-family:"Times New Roman"'>4.3.
  afsd_service debug logs (fs trace {-on, -off, -dump}
! -&gt;%WinDir%\TEMP\afsd.log)</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662124"><span style='mso-fareast-font-family:"Times New Roman"'>4.4.
  Using SysInternal’s DbgView and ProcMon or FileMon Tools</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662125"><span style='mso-fareast-font-family:"Times New Roman"'>4.5.
  Microsoft MiniDumps<span style='mso-spacerun:yes'>  </span>(fs minidump -&gt;
! %WinDir%\TEMP\afsd.dmp)</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662126"><span style='mso-fareast-font-family:"Times New Roman"'>4.6.
  Single Sign-on (Integrated Logon) debugging</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662127"><span style='mso-fareast-font-family:"Times New Roman"'>4.7.
  RX (AFS RPC) debugging (rxdebug)</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662128"><span style='mso-fareast-font-family:"Times New Roman"'>4.8.
  Cache Manager debugging (cmdebug)</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662129"><span style='mso-fareast-font-family:"Times New Roman"'>4.9.
  Persistent Cache consistency check</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662130"><span style='mso-fareast-font-family:"Times New Roman"'>4.10.
! Token Acquisition Debugging</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662131"><span style='mso-fareast-font-family:"Times New Roman"'>5.
! Reporting Bugs</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662132"><span style='mso-fareast-font-family:"Times New Roman"'>6.
  How to Contribute to the Development of OpenAFS for Windows</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662133"><span style='mso-fareast-font-family:"Times New Roman"'>6.1.
! The USENIX OpenAFS Fund</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662134"><span style='mso-fareast-font-family:"Times New Roman"'>6.2.
! Secure Endpoints Inc.</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662135"><span style='mso-fareast-font-family:"Times New Roman"'>6.3.
  Direct contributions of code and/or documentation</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662136"><span style='mso-fareast-font-family:"Times New Roman"'>6.4.
  OpenAFS for Windows Mailing Lists</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662137"><span style='mso-fareast-font-family:"Times New Roman"'>7.
! MSI Deployment Guide</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662138"><span style='mso-fareast-font-family:"Times New Roman"'>7.1.
! Introduction</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662139"><span style='mso-fareast-font-family:"Times New Roman"'>7.1.1
! Requirements</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662140"><span style='mso-fareast-font-family:"Times New Roman"'>7.1.2
! Authoring a Transform</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662141"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.
! Configuration Options</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662142"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1
! Configurable Properties</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc4 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662143"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1.1
! Setting Properties</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc4 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662144"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1.2
! OpenAFS for Windows Properties</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662145"><span style='mso-fareast-font-family:"Times New Roman"'>(Service
! parameters):</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662146"><span style='mso-fareast-font-family:"Times New Roman"'>(Network
! provider):</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662147"><span style='mso-fareast-font-family:"Times New Roman"'>(OpenAFS
! Client):</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662148"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1.2.1
! Registry Properties</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662149"><span style='mso-fareast-font-family:"Times New Roman"'>AFSCACHEPATH</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662150"><span style='mso-fareast-font-family:"Times New Roman"'>AFSCACHESIZE</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662151"><span style='mso-fareast-font-family:"Times New Roman"'>AFSCELLNAME</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662152"><span style='mso-fareast-font-family:"Times New Roman"'>FREELANCEMODE</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662153"><span style='mso-fareast-font-family:"Times New Roman"'>HIDEDOTFILES</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662154"><span style='mso-fareast-font-family:"Times New Roman"'>LOGONOPTIONS</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662155"><span style='mso-fareast-font-family:"Times New Roman"'>MOUNTROOT</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662156"><span style='mso-fareast-font-family:"Times New Roman"'>NETBIOSNAME</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662157"><span style='mso-fareast-font-family:"Times New Roman"'>NOFINDLANABYNAME</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662158"><span style='mso-fareast-font-family:"Times New Roman"'>RXMAXMTU</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662159"><span style='mso-fareast-font-family:"Times New Roman"'>SECURITYLEVEL</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662160"><span style='mso-fareast-font-family:"Times New Roman"'>SMBAUTHTYPE</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662161"><span style='mso-fareast-font-family:"Times New Roman"'>STOREANSIFILENAMES</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662162"><span style='mso-fareast-font-family:"Times New Roman"'>USEDNS</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662163"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.1.2.2
! AFSCreds.exe Properties</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662164"><span style='mso-fareast-font-family:"Times New Roman"'>CREDSSTARTUP</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662165"><span style='mso-fareast-font-family:"Times New Roman"'>CREDSAUTOINIT</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662166"><span style='mso-fareast-font-family:"Times New Roman"'>CREDSIPCHDET</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662167"><span style='mso-fareast-font-family:"Times New Roman"'>CREDSQUIET</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662168"><span style='mso-fareast-font-family:"Times New Roman"'>CREDSRENEWDRMAP</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc6 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662169"><span style='mso-fareast-font-family:"Times New Roman"'>CREDSSHOW</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662170"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.2
! Existing Registry Entries</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662171"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.3
! Replacing Configuration Files</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc4 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662172"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.3.1
  Components for Configuration Files</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662173"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.4
  Adding Domain Specific Registry Keys</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662174"><span style='mso-fareast-font-family:"Times New Roman"'>7.2.5
  Adding Site Specific Freelance Registry Keys</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662175"><span style='mso-fareast-font-family:"Times New Roman"'>7.3
! Additional Resources</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662176"><span style='mso-fareast-font-family:"Times New Roman"'>7.4.
! Upgrades</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc1 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662177"><span style='mso-fareast-font-family:"Times New Roman"'>Appendix
! A: Registry Values</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662178"><span style='mso-fareast-font-family:"Times New Roman"'>A.1.
! Service parameters</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662179"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662180"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! LANadapter</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662181"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! CacheSize</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662182"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ChunkSize</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662183"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Daemons</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662184"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ServerThreads</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662185"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Stats</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662186"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! LogoffPreserveTokens</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662187"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! RootVolume</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662188"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MountRoot</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662189"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! CachePath</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662190"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! NonPersistentCaching</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662191"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ValidateCache</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662192"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! TrapOnPanic</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662193"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! NetbiosName</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662194"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! IsGateway</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662195"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ReportSessionStartups</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662196"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! TraceBufferSize</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662197"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! SysName</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662198"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! SecurityLevel</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662199"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! UseDNS</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662200"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! FreelanceClient</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662201"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! HideDotFiles</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662202"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MaxMpxRequests</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662203"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MaxVCPerServer</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662204"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Cell</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662205"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! RxNoJumbo</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662206"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! RxMaxMTU</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662207"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ConnDeadTimeout</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662208"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! HardDeadTimeout</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662209"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! TraceOption</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662210"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! AllSubmount</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662211"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! NoFindLanaByName</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662212"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MaxCPUs</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662213"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! smbAuthType</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662214"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MaxLogSize</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662215"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! FlushOnHibernate</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662216"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckDownInterval</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662217"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckUpInterval</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662218"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckVolInterval</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662219"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckCBInterval</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662220"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckLockInterval</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662221"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckTokenInterval</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662222"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! daemonCheckOfflineVolInterval</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662223"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! CallBackPort</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662224"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! EnableServerLocks</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662225"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! DeleteReadOnly</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662226"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! BPlusTrees</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662227"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! PrefetchExecutableExtensions</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662228"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! OfflineReadOnlyIsValid</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662229"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! GiveUpAllCallBacks</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662230"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! FollowBackupPath</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662231"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters\GlobalAutoMapper]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662232"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
  &lt;Drive Letter:&gt; for example &quot;G:&quot;</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662233"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
! [HKLM\SOFTWARE\OpenAFS\Client]</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662234"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! CellServDBDir</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662235"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! VerifyServiceSignature</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662236"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! IoctlDebug</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662237"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MiniDumpType</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662238"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! EnableSMBAsyncStore</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662239"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! SMBAsyncStoreSize</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662240"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! StoreAnsiFilenames</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662242"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\CSCPolicy]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662243"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! &quot;smb/cifs share name&quot;</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662244"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Freelance]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662245"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! &quot;numeric value&quot;</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662246"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Freelance\Symlinks]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662247"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! &quot;numeric value&quot;</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662248"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Realms]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662249"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Realms<i style='mso-bidi-font-style:normal'>”Realm
! Name”</i>]</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662250"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! AFSEnabled</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662251"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Realms<i style='mso-bidi-font-style:normal'>”Realm
! Name””Cell Name”</i>]</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662252"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! MethodName</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662253"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Realm</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662254"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Submounts]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662255"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! &quot;submount name&quot;</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662256"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\VLDB]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662257"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
  &quot;hostname or ip address&quot;</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662258"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client\Server Preferences\File]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662259"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
  &quot;hostname or ip address&quot;</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662260"><span style='mso-fareast-font-family:"Times New Roman"'>A.2.
  Integrated Logon Network provider parameters</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662261"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662262"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! FailLoginsSilently</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662263"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662264"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! NoWarnings</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662265"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! AuthentProviderPath</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662266"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Class</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662267"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! DependOnGroup</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662268"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! DependOnService</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662269"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Name</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662270"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ProviderPath</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662271"><span style='mso-fareast-font-family:"Times New Roman"'>A.2.1
  Domain specific configuration keys for the Network Provider</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662272"><span style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662273"><span style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662274"><span style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain&quot;domain
! name&quot;]</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662275"><span style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662276"><span style='mso-fareast-font-family:"Times New Roman"'>Example:</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662277"><span style='mso-fareast-font-family:"Times New Roman"'>A.2.1.1
  Domain specific configuration values</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc4 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662278"><span style='mso-fareast-font-family:"Times New Roman"'>[HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider]
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain]
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain&quot;domain
  name&quot;]
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider\Domain\LOCALHOST]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662279"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! LogonOptions</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662280"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! FailLoginsSilentl</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662281"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! LogonScript</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662282"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! LoginRetryInterval</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662283"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! LoginSleepInterval</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662284"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Realm</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662285"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! TheseCells</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662286"><span style='mso-fareast-font-family:"Times New Roman"'>A.2.1.2
  Selection of effective values for domain specific configuration</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662287"><span style='mso-fareast-font-family:"Times New Roman"'>A.2.1.3
! Exceptions to A.2.1.2</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc4 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662288"><span style='mso-fareast-font-family:"Times New Roman"'>2.1.3.1
! 'FailLoginsSilently'</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc4 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662289"><span style='mso-fareast-font-family:"Times New Roman"'>2.1.3.2
! 'LogonScript'</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662290"><span style='mso-fareast-font-family:"Times New Roman"'>A.3.
  AFS Credentials System Tray Tool parameters</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662291"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662292"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Gateway</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662293"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Cell</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662294"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKLM\SOFTWARE\OpenAFS\Client] [HKCU\SOFTWARE\OpenAFS\Client]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662295"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! ShowTrayIcon</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662296"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! EnableKFW</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662297"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! AcceptDottedPrincipalNames</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662298"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Use524</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
  mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662299"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! AfscredsShortcutParams</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662300"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
! [HKCU\SOFTWARE\OpenAFS\Client]</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662301"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! Authentication Cell</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662302"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKCU\SOFTWARE\OpenAFS\Client\Reminders]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662303"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
! &quot;afs cell name&quot;</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662304"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKCU\SOFTWARE\OpenAFS\Client\Active Maps]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662305"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
  &quot;upper case drive letter&quot;</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc3 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662306"><span style='mso-fareast-font-family:"Times New Roman"'>Regkey:
  [HKCU\SOFTWARE\OpenAFS\Client\Mappings]</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662307"><span style='mso-fareast-font-family:"Times New Roman"'>Value:
  &quot;upper case drive letter&quot;</span></a></span></span><span
! style='mso-ascii-theme-font:
! minor-latin;mso-fareast-theme-font:
! minor-fareast;
! mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi'><span
! style='font-size:11.0pt;font-family:Calibri;mso-fareast-font-family:"Times New Roman";
! mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc2 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662308"><span lang=FR style='mso-fareast-font-family:
  "Times New Roman";mso-ansi-language:FR'>A.4 OpenAFS Client Service Environment
! Variables</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span lang=FR style='font-size:11.0pt;
! font-family:Calibri;mso-fareast-font-family:"Times New Roman";mso-ansi-language:
! FR;mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662309"><span style='mso-fareast-font-family:"Times New Roman"'>Variable:
! AFS_RPC_ENCRYPT</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
  
  <p class=MsoToc5 style='tab-stops:right dotted 431.5pt'><span
! class=MsoHyperlink></span><span style='mso-no-proof:yes'><a
  href="relnotes.htm#_Toc191662310"><span style='mso-fareast-font-family:"Times New Roman"'>Variable:
! AFS_RPC_PROTSEQ</span></a></span></span><span style='mso-ascii-theme-font:minor-latin;
! mso-fareast-theme-font:minor-fareast;mso-hansi-theme-font:
! minor-latin;
! mso-bidi-theme-font:minor-bidi'><span style='font-size:11.0pt;font-family:Calibri;
! mso-fareast-font-family:"Times New Roman";mso-no-proof:yes'><o:p></o:p></span></p>
! 
! <p class=MsoNormal><o:p>&nbsp;</o:p></p>
  
! </span>
  
  <p class=MsoNormal><o:p>&nbsp;</o:p></p>
  
Index: openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/filelist.xml
diff -c openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/filelist.xml:1.1.6.3 openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/filelist.xml:1.1.6.4
*** openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/filelist.xml:1.1.6.3	Mon Jan 15 15:03:17 2007
--- openafs/src/WINNT/doc/install/Documentation/en_US/html/ReleaseNotes/relnotes_files/filelist.xml	Wed Jul 16 01:34:59 2008
***************
*** 1,10 ****
  <xml xmlns:o="urn:schemas-microsoft-com:office:office">
   <o:MainFile HRef="../relnotes.htm"/>
   <o:File HRef="image001.png"/>
!  <o:File HRef="image002.jpg"/>
   <o:File HRef="image003.png"/>
!  <o:File HRef="image004.jpg"/>
   <o:File HRef="image005.png"/>
!  <o:File HRef="image006.jpg"/>
   <o:File HRef="filelist.xml"/>
  </xml>
\ No newline at end of file
--- 1,10 ----
  <xml xmlns:o="urn:schemas-microsoft-com:office:office">
   <o:MainFile HRef="../relnotes.htm"/>
   <o:File HRef="image001.png"/>
!  <o:File HRef="image007.jpg"/>
   <o:File HRef="image003.png"/>
!  <o:File HRef="image002.jpg"/>
   <o:File HRef="image005.png"/>
!  <o:File HRef="image004.jpg"/>
   <o:File HRef="filelist.xml"/>
  </xml>
\ No newline at end of file
Index: openafs/src/WINNT/eventlog/lang/NTMakefile
diff -c openafs/src/WINNT/eventlog/lang/NTMakefile:1.6.14.2 openafs/src/WINNT/eventlog/lang/NTMakefile:1.6.14.3
*** openafs/src/WINNT/eventlog/lang/NTMakefile:1.6.14.2	Wed Oct 10 11:44:53 2007
--- openafs/src/WINNT/eventlog/lang/NTMakefile	Wed Jul  2 08:48:58 2008
***************
*** 43,48 ****
--- 43,49 ----
  $(DLLFILE): $(DLLOBJS)
  	$(DLLRESLINK)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # Generate versioninfo resources
Index: openafs/src/WINNT/eventlog/test/NTMakefile
diff -c openafs/src/WINNT/eventlog/test/NTMakefile:1.5 openafs/src/WINNT/eventlog/test/NTMakefile:1.5.4.1
*** openafs/src/WINNT/eventlog/test/NTMakefile:1.5	Sun Nov 20 20:56:23 2005
--- openafs/src/WINNT/eventlog/test/NTMakefile	Wed Jul  2 08:48:59 2008
***************
*** 14,19 ****
--- 14,20 ----
  	$(DESTDIR)\lib\afs\afseventlog.lib $(DESTDIR)\lib\afs\afsreg.lib
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  mkdir:
  	
Index: openafs/src/WINNT/install/NSIS/NTMakefile
diff -c openafs/src/WINNT/install/NSIS/NTMakefile:1.18.4.4 openafs/src/WINNT/install/NSIS/NTMakefile:1.18.4.7
*** openafs/src/WINNT/install/NSIS/NTMakefile:1.18.4.4	Wed Apr  9 00:36:53 2008
--- openafs/src/WINNT/install/NSIS/NTMakefile	Tue Jul 15 19:59:33 2008
***************
*** 10,15 ****
--- 10,20 ----
  
  LOOPBACK_LIBS = wbemuuid.lib setupapi.lib msi.lib ole32.lib shell32.lib oleaut32.lib user32.lib
  
+ !IFNDEF MSIDNNLS
+ !ERROR Please set IDNMREDISTDIR to the directory where Microsoft IDN Mitigation APIs Redistributables are to be found.
+ # $(MSIDNNLS)\REDIST\idndl.(platform).exe should exist.
+ !ENDIF
+ 
  $(OUT)\Service.obj: Service.cpp
  	   $(C2OBJ) Service.cpp
  
***************
*** 18,23 ****
--- 23,29 ----
  $(EXEDIR)\Service.exe: $(OUT)\Service.obj $(OUT)\Service.res
        $(EXECONLINK) 
        $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\Killer.res: Killer.rc AFS_component_version_number.h
  
***************
*** 27,32 ****
--- 33,39 ----
  $(EXEDIR)\Killer.exe: $(OUT)\Killer.obj $(OUT)\Killer.res
        $(EXECONLINK) 
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\AdminGroup.res: AdminGroup.rc AFS_component_version_number.h
  
***************
*** 36,41 ****
--- 43,49 ----
  $(EXEDIR)\AdminGroup.exe: $(OUT)\AdminGroup.obj $(OUT)\AdminGroup.res
        $(EXECONLINK) 
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  !IF ("$(AFSDEV_BUILDTYPE)"=="FREE")
  !IF ("$(CPU)" == "i386")
***************
*** 55,60 ****
--- 63,93 ----
  !ENDIF
  !ENDIF
  
+ !IF ("$(CPU)" == "i386")
+ IDNMREDIST=$(MSIDNNLS)\REDIST\idndl.x86.exe
+ !ELSE IF ("$(CPU)" == "amd64")
+ IDNMREDIST=$(MSIDNNLS)\REDIST\idndl.amd64.exe
+ !ELSE
+ ! error Unknown CPU value
+ !ENDIF
+ 
+ !if ("$(AFSVER_CL)"=="1400") || ("$(AFSVER_CL)"=="1500")
+ MSVCMSI=$(EXEDIR)\vcruntime-$(AFSVER_CL)$(AFSDEV_BUILDTYPE).msi
+ 
+ $(MSVCMSI): $(OUT)\vcruntime.wixobj
+ 	light -out $@ $**
+ 	$(CODESIGN_USERLAND)
+ 
+ $(OUT)\vcruntime.wixobj: vcruntime.wxs
+ 	candle -out $@ $** -dPlatform=$(ARCH) -dConfig=Debug -dVCVer=$(AFSVER_CL)
+ 
+ !else
+ MSVCMSI=
+ !endif
+ 
+ runtime: $(MSVCMSI)
+ 
+ 
  prebuild:
  !IF ("$(AFSDEV_BUILDTYPE)" == "FREE")
  !IF ("$(AFSVER_CL)"=="1400")
***************
*** 73,79 ****
  !ERROR Unknown Compiler Version
  !ENDIF
  !ELSE # NOT FREE - CHECKED
! !IF ("$(AFSVER_CL)"=="1400")
  # Do nothing.
  !ELSE IF ("$(AFSVER_CL)"=="1310")
     $(COPY) %SystemRoot%\System32\Msvcr71d.dll $(EXEDIR)
--- 106,114 ----
  !ERROR Unknown Compiler Version
  !ENDIF
  !ELSE # NOT FREE - CHECKED
! !IF ("$(AFSVER_CL)"=="1500")
! # Do nothing
! !ELSE IF ("$(AFSVER_CL)"=="1400")
  # Do nothing.
  !ELSE IF ("$(AFSVER_CL)"=="1310")
     $(COPY) %SystemRoot%\System32\Msvcr71d.dll $(EXEDIR)
***************
*** 102,113 ****
     echo !define AFS_MAJORVERSION $(AFSPRODUCT_VER_MAJOR) >>$(OUT)\nsi-includes.nsi
     echo !define AFS_MINORVERSION $(AFSPRODUCT_VER_MINOR) >>$(OUT)\nsi-includes.nsi
     echo !define AFS_PATCHLEVEL $(AFSPRODUCT_VER_PATCH) >>$(OUT)\nsi-includes.nsi
     $(DESTDIR)\bin\util_cr.exe _echo "!define " >>$(OUT)\nsi-includes.nsi 
     "$(NSISDIR)\makensis.exe" /VERSION >>$(OUT)\nsi-includes.nsi          
     echo. >>$(OUT)\nsi-includes.nsi                                       
! !if ("$(AFSVER_CL)" == "1400")
     echo !define CL_1400 1 >> $(OUT)\nsi-includes.nsi
!    echo !define VCREDISTNAME vcredist_$(ARCH).exe >> $(OUT)\nsi-includes.nsi
  !else if ("$(AFSVER_CL)" == "1310")
     echo !define CL_1310 1 >> $(OUT)\nsi-includes.nsi
  !else if ("$(AFSVER_CL)" == "1300")
--- 137,152 ----
     echo !define AFS_MAJORVERSION $(AFSPRODUCT_VER_MAJOR) >>$(OUT)\nsi-includes.nsi
     echo !define AFS_MINORVERSION $(AFSPRODUCT_VER_MINOR) >>$(OUT)\nsi-includes.nsi
     echo !define AFS_PATCHLEVEL $(AFSPRODUCT_VER_PATCH) >>$(OUT)\nsi-includes.nsi
+    echo !define IDNMREDIST "$(IDNMREDIST)" >>$(OUT)\nsi-includes.nsi
     $(DESTDIR)\bin\util_cr.exe _echo "!define " >>$(OUT)\nsi-includes.nsi 
     "$(NSISDIR)\makensis.exe" /VERSION >>$(OUT)\nsi-includes.nsi          
     echo. >>$(OUT)\nsi-includes.nsi                                       
! !if ("$(AFSVER_CL)" == "1500")
!    echo !define CL_1500 1 >> $(OUT)\nsi-includes.nsi
!    echo !define MSVCMSI "$(MSVCMSI)" >> $(OUT)\nsi-includes.nsi
! !else if ("$(AFSVER_CL)" == "1400")
     echo !define CL_1400 1 >> $(OUT)\nsi-includes.nsi
!    echo !define MSVCMSI "$(MSVCMSI)" >> $(OUT)\nsi-includes.nsi
  !else if ("$(AFSVER_CL)" == "1310")
     echo !define CL_1310 1 >> $(OUT)\nsi-includes.nsi
  !else if ("$(AFSVER_CL)" == "1300")
***************
*** 120,144 ****
     echo !define DEBUG 1 >>$(OUT)\nsi-includes.nsi
  !endif
  
! !if ("$(AFSVER_CL)"=="1400") && ("$(AFSDEV_BUILDTYPE)"!="FREE")
! MSVCMSI=$(EXEDIR)\vcruntime.msi
! 
! $(MSVCMSI): $(OUT)\vcruntime.wixobj
! 	light -out $@ $**
! 
! $(OUT)\vcruntime.wixobj: vcruntime.wxs
! 	candle -out $@ $** -dPlatform=$(ARCH) -dConfig=Debug
! 
  !else
! MSVCMSI=
  !endif
  
! runtime: $(MSVCMSI)
! 
! build: prebuild
!    "$(NSISDIR)\makensis.exe" /DINCLUDEDIR=$(OUT) OpenAFS.nsi
  
! install: $(OUT)\Service.obj $(EXEDIR)\Service.exe $(OUT)\Killer.obj $(EXEDIR)\Killer.exe $(EXEDIR)\AdminGroup.exe runtime build
  
  clean::
     $(DEL) $(OUT)\Service.obj
--- 159,175 ----
     echo !define DEBUG 1 >>$(OUT)\nsi-includes.nsi
  !endif
  
! !if ("$(AFSDEV_BUILDTYPE)" == "CHECKED")
! NSISEXE=$(DESTDIR)\WinInstall\OpenAFSforWindows-DEBUG.exe
  !else
! NSISEXE=$(DESTDIR)\WinInstall\OpenAFSforWindows.exe
  !endif
  
! $(NSISEXE): prebuild $(MSVCMSI)
! 	"$(NSISDIR)\makensis.exe" /DINCLUDEDIR=$(OUT) OpenAFS.nsi
! 	$(CODESIGN_USERLAND)
  
! install: $(OUT)\Service.obj $(EXEDIR)\Service.exe $(OUT)\Killer.obj $(EXEDIR)\Killer.exe $(EXEDIR)\AdminGroup.exe runtime $(NSISEXE)
  
  clean::
     $(DEL) $(OUT)\Service.obj
***************
*** 154,161 ****
     $(DEL) AFS_component_version_number.h
  #   $(DEL) $(EXEDIR)\Msvcr71.dll
  #   $(DEL) $(EXEDIR)\MFC42.DLL
- #   $(DEL) OpenAFSforWindows.exe
  !if ("$(AFSVER_CL)"=="1400") && ("$(AFSDEV_BUILDTYPE)"!="FREE")
     $(DEL) $(OUT)\vcruntime.wixobj
     $(DEL) $(MSVCMSI)
  !endif
--- 185,192 ----
     $(DEL) AFS_component_version_number.h
  #   $(DEL) $(EXEDIR)\Msvcr71.dll
  #   $(DEL) $(EXEDIR)\MFC42.DLL
  !if ("$(AFSVER_CL)"=="1400") && ("$(AFSDEV_BUILDTYPE)"!="FREE")
     $(DEL) $(OUT)\vcruntime.wixobj
     $(DEL) $(MSVCMSI)
  !endif
+    $(DEL) $(NSISEXE)
Index: openafs/src/WINNT/install/NSIS/OpenAFS.nsi
diff -c openafs/src/WINNT/install/NSIS/OpenAFS.nsi:1.88.4.14 openafs/src/WINNT/install/NSIS/OpenAFS.nsi:1.88.4.20
*** openafs/src/WINNT/install/NSIS/OpenAFS.nsi:1.88.4.14	Wed Apr  9 00:36:53 2008
--- openafs/src/WINNT/install/NSIS/OpenAFS.nsi	Tue Jul 15 19:59:33 2008
***************
*** 531,536 ****
--- 531,547 ----
    nsExec::Exec "net stop TransarcAFSDaemon"
    nsExec::Exec "net stop TransarcAFSServer"
    
+   ; Install the Microsoft IDNM Redistributable
+   Call GetWindowsVersion
+   Pop $R1
+   StrCmp $R1 "XP" installIDN +1
+   StrCmp $R1 "2003" installIDN skipIDN
+   installIDN:
+   GetTempFileName $R0
+   File /oname=$R0 "${IDNMREDIST}"
+   nsExec::Exec '$R0 /quiet /norestart'
+   skipIDN:  
+ 
     ; Do client components
    SetOutPath "$INSTDIR\Client\Program"
    File "${AFS_CLIENT_BUILDDIR}\afsshare.exe"
***************
*** 1016,1022 ****
     
  DoEnglish:
     SetOutPath "$INSTDIR\Documentation\html\CmdRef"
!    File "..\..\doc\install\Documentation\en_US\html\CmdRef\*"
     SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
     File "..\..\doc\install\Documentation\en_US\html\SysAdminGd\*"
     goto DoneLanguage
--- 1027,1039 ----
     
  DoEnglish:
     SetOutPath "$INSTDIR\Documentation\html\CmdRef"
!    File "..\..\..\..\doc\man-pages\html\*"
!    SetOutPath "$INSTDIR\Documentation\html\CmdRef\1"
!    File "..\..\..\..\doc\man-pages\html\1\*"
!    SetOutPath "$INSTDIR\Documentation\html\CmdRef\5"
!    File "..\..\..\..\doc\man-pages\html\5\*"
!    SetOutPath "$INSTDIR\Documentation\html\CmdRef\8"
!    File "..\..\..\..\doc\man-pages\html\8\*"
     SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
     File "..\..\doc\install\Documentation\en_US\html\SysAdminGd\*"
     goto DoneLanguage
***************
*** 1222,1227 ****
--- 1239,1247 ----
  
  DoCommon:
    SetOutPath "$INSTDIR\Common"
+ !IFDEF CL_1500
+   ; Do nothing
+ !ELSE
  !IFDEF CL_1400
    ; Do nothing
  !ELSE
***************
*** 1241,1246 ****
--- 1261,1267 ----
  !ENDIF
  !ENDIF
  !ENDIF
+ !ENDIF
    
  ; Common Areas
     SetOutPath "$INSTDIR\Common"
***************
*** 1663,1673 ****
    Delete "$INSTDIR\Documentation\README.TXT"
    Delete "$INSTDIR\Documentation\html\*"
    Delete "$INSTDIR\Documentation\html\index_files\*"
    Delete "$INSTDIR\Documentation\html\CmdRef\*"
-   Delete "$INSTDIR\Documentation\html\InstallGd\*"
-   Delete "$INSTDIR\Documentation\html\ReleaseNotes\*"
    Delete "$INSTDIR\Documentation\html\ReleaseNotes\logo_files\*"
    Delete "$INSTDIR\Documentation\html\ReleaseNotes\relnotes_files\*"
    Delete "$INSTDIR\Documentation\html\SysAdminGd\*"
  
     Delete /REBOOTOK "$INSTDIR\Common\afs_config.exe"
--- 1684,1696 ----
    Delete "$INSTDIR\Documentation\README.TXT"
    Delete "$INSTDIR\Documentation\html\*"
    Delete "$INSTDIR\Documentation\html\index_files\*"
+   Delete "$INSTDIR\Documentation\html\CmdRef\1\*"
+   Delete "$INSTDIR\Documentation\html\CmdRef\5\*"
+   Delete "$INSTDIR\Documentation\html\CmdRef\8\*"
    Delete "$INSTDIR\Documentation\html\CmdRef\*"
    Delete "$INSTDIR\Documentation\html\ReleaseNotes\logo_files\*"
    Delete "$INSTDIR\Documentation\html\ReleaseNotes\relnotes_files\*"
+   Delete "$INSTDIR\Documentation\html\ReleaseNotes\*"
    Delete "$INSTDIR\Documentation\html\SysAdminGd\*"
  
     Delete /REBOOTOK "$INSTDIR\Common\afs_config.exe"
***************
*** 1702,1773 ****
     Delete /REBOOTOK "$INSTDIR\Common\afskasadmin.pdb"
     Delete /REBOOTOK "$INSTDIR\Common\afsptsadmin.pdb"
  !IFDEF DEBUG
  !IFDEF CL_1400
!    SetOutPath "$INSTDIR\bin"
!    File "${AFS_WININSTALL_DIR}\vcruntime.msi"
!    nsExec::Exec 'msiexec /x "$INSTDIR\bin\vcruntime.msi" /passive'
!    Delete "$INSTDIR\bin\vcruntime.msi"
  !ELSE
  !IFDEF CL_1310
!    Delete /REBOOTOK "$INSTDIR\bin\msvcr71d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcr71d.pdb"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp71d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp71d.pdb"
!    Delete /REBOOTOK "$INSTDIR\bin\mfc71d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\mfc71d.pdb"
  !ELSE
  !IFDEF CL_1300
!    Delete /REBOOTOK "$INSTDIR\bin\msvcr70d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcr70d.pdb"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp70d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp70d.pdb"
!    Delete /REBOOTOK "$INSTDIR\bin\mfc70d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\mfc70d.pdb"
! !ELSE
!    Delete /REBOOTOK "$INSTDIR\bin\mfc42d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\mfc42d.pdb"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp60d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp60d.pdb"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.pdb"
  !ENDIF
  !ENDIF
  !ENDIF
  !ELSE
  !IFDEF CL_1400
!    ; Do nothing
  !ELSE
  !IFDEF CL_1310
!    Delete /REBOOTOK "$INSTDIR\bin\mfc71.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcr71.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp71.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71CHS.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71CHT.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71DEU.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71ENU.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71ESP.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71FRA.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71ITA.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71JPN.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71KOR.DLL"
  !ELSE
  !IFDEF CL_1300
!    Delete /REBOOTOK "$INSTDIR\bin\mfc70.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcr70.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp70.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70CHS.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70CHT.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70DEU.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70ENU.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70ESP.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70FRA.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70ITA.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70JPN.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70KOR.DLL"
! !ELSE
!    Delete /REBOOTOK "$INSTDIR\bin\mfc42.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp60.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcrt.dll"
  !ENDIF
  !ENDIF
  !ENDIF
--- 1725,1813 ----
     Delete /REBOOTOK "$INSTDIR\Common\afskasadmin.pdb"
     Delete /REBOOTOK "$INSTDIR\Common\afsptsadmin.pdb"
  !IFDEF DEBUG
+ !IFDEF CL_1500
+    SetOutPath "$INSTDIR\Common"
+    File /oname=vcruntime.msi "${MSVCMSI}"
+    nsExec::Exec 'msiexec /x "$INSTDIR\Common\vcruntime.msi" /passive /norestart'
+    Delete "$INSTDIR\Common\vcruntime.msi"
+ !ELSE
  !IFDEF CL_1400
!    SetOutPath "$INSTDIR\Common"
!    File /oname=vcruntime.msi "${MSVCMSI}"
!    nsExec::Exec 'msiexec /x "$INSTDIR\Common\vcruntime.msi" /passive /norestart'
!    Delete "$INSTDIR\Common\vcruntime.msi"
  !ELSE
  !IFDEF CL_1310
!    Delete /REBOOTOK "$INSTDIR\Common\msvcr71d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcr71d.pdb"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp71d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp71d.pdb"
!    Delete /REBOOTOK "$INSTDIR\Common\mfc71d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\mfc71d.pdb"
  !ELSE
  !IFDEF CL_1300
!    Delete /REBOOTOK "$INSTDIR\Common\msvcr70d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcr70d.pdb"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp70d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp70d.pdb"
!    Delete /REBOOTOK "$INSTDIR\Common\mfc70d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\mfc70d.pdb"
! !ELSE
!    Delete /REBOOTOK "$INSTDIR\Common\mfc42d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\mfc42d.pdb"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp60d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp60d.pdb"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcrtd.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcrtd.pdb"
  !ENDIF
  !ENDIF
  !ENDIF
+ !ENDIF
+ !ELSE
+ !IFDEF CL_1500
+    SetOutPath "$INSTDIR\Common"
+    File /oname=vcruntime.msi "${MSVCMSI}"
+    nsExec::Exec 'msiexec /x "$INSTDIR\Common\vcruntime.msi" /passive /norestart'
+    Delete "$INSTDIR\Common\vcruntime.msi"
  !ELSE
  !IFDEF CL_1400
!    SetOutPath "$INSTDIR\Common"
!    File /oname=vcruntime.msi "${MSVCMSI}"
!    nsExec::Exec 'msiexec /x "$INSTDIR\Common\vcruntime.msi" /passive /norestart'
!    Delete "$INSTDIR\Common\vcruntime.msi"
  !ELSE
  !IFDEF CL_1310
!    Delete /REBOOTOK "$INSTDIR\Common\mfc71.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcr71.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp71.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71CHS.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71CHT.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71DEU.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71ENU.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71ESP.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71FRA.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71ITA.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71JPN.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71KOR.DLL"
  !ELSE
  !IFDEF CL_1300
!    Delete /REBOOTOK "$INSTDIR\Common\mfc70.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcr70.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp70.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70CHS.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70CHT.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70DEU.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70ENU.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70ESP.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70FRA.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70ITA.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70JPN.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70KOR.DLL"
! !ELSE
!    Delete /REBOOTOK "$INSTDIR\Common\mfc42.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp60.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcrt.dll"
! !ENDIF
  !ENDIF
  !ENDIF
  !ENDIF
***************
*** 1850,1856 ****
    Delete /REBOOTOK "$INSTDIR\Client\Program\afscpcc.pdb"
  
    RMDir /r "$INSTDIR\Documentation\html\CmdRef"
-   RMDir /r "$INSTDIR\Documentation\html\InstallGd"
    RMDir /r "$INSTDIR\Documentation\html\ReleaseNotes"
    RMDir /r "$INSTDIR\Documentation\html\SysAdminGd"
    RMDIr /r "$INSTDIR\Documentation\html"
--- 1890,1895 ----
***************
*** 1879,1947 ****
    RMDir  "$INSTDIR\Client"
  
  !IFDEF DEBUG  
  !IFDEF CL_1400
!    ; Do nothing
  !ELSE
  !IFDEF CL_1310
!    Delete /REBOOTOK "$INSTDIR\bin\msvcr71d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcr71d.pdb"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp71d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp71d.pdb"
!    Delete /REBOOTOK "$INSTDIR\bin\mfc71d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\mfc71d.pdb"
  !ELSE
  !IFDEF CL_1300
!    Delete /REBOOTOK "$INSTDIR\bin\msvcr70d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcr70d.pdb"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp70d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp70d.pdb"
!    Delete /REBOOTOK "$INSTDIR\bin\mfc70d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\mfc70d.pdb"
! !ELSE
!    Delete /REBOOTOK "$INSTDIR\bin\mfc42d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\mfc42d.pdb"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp60d.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp60d.pdb"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.pdb"
  !ENDIF
  !ENDIF
  !ENDIF
  !ELSE
  !IFDEF CL_1400
!    ; Do nothing
  !ELSE
  !IFDEF CL_1310
!    Delete /REBOOTOK "$INSTDIR\bin\mfc71.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcr71.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp71.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71CHS.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71CHT.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71DEU.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71ENU.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71ESP.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71FRA.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71ITA.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71JPN.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC71KOR.DLL"
  !ELSE
  !IFDEF CL_1300
!    Delete /REBOOTOK "$INSTDIR\bin\mfc70.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcr70.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp70.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70CHS.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70CHT.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70DEU.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70ENU.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70ESP.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70FRA.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70ITA.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70JPN.DLL"
!    Delete /REBOOTOK "$INSTDIR\bin\MFC70KOR.DLL"
! !ELSE
!    Delete /REBOOTOK "$INSTDIR\bin\mfc42.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcp60.dll"
!    Delete /REBOOTOK "$INSTDIR\bin\msvcrt.dll"
  !ENDIF
  !ENDIF
  !ENDIF
--- 1918,2006 ----
    RMDir  "$INSTDIR\Client"
  
  !IFDEF DEBUG  
+ !IFDEF CL_1500
+    SetOutPath "$INSTDIR\Common"
+    File /oname=vcruntime.msi "${MSVCMSI}"
+    nsExec::Exec 'msiexec /x "$INSTDIR\Common\vcruntime.msi" /passive /norestart'
+    Delete "$INSTDIR\Common\vcruntime.msi"
+ !ELSE
  !IFDEF CL_1400
!    SetOutPath "$INSTDIR\Common"
!    File /oname=vcruntime.msi "${MSVCMSI}"
!    nsExec::Exec 'msiexec /x "$INSTDIR\Common\vcruntime.msi" /passive /norestart'
!    Delete "$INSTDIR\Common\vcruntime.msi"
  !ELSE
  !IFDEF CL_1310
!    Delete /REBOOTOK "$INSTDIR\Common\msvcr71d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcr71d.pdb"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp71d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp71d.pdb"
!    Delete /REBOOTOK "$INSTDIR\Common\mfc71d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\mfc71d.pdb"
  !ELSE
  !IFDEF CL_1300
!    Delete /REBOOTOK "$INSTDIR\Common\msvcr70d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcr70d.pdb"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp70d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp70d.pdb"
!    Delete /REBOOTOK "$INSTDIR\Common\mfc70d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\mfc70d.pdb"
! !ELSE
!    Delete /REBOOTOK "$INSTDIR\Common\mfc42d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\mfc42d.pdb"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp60d.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp60d.pdb"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcrtd.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcrtd.pdb"
! !ENDIF
  !ENDIF
  !ENDIF
  !ENDIF
  !ELSE
+ !IFDEF CL_1500
+    SetOutPath "$INSTDIR\Common"
+    File /oname=vcruntime.msi "${MSVCMSI}"
+    nsExec::Exec 'msiexec /x "$INSTDIR\Common\vcruntime.msi" /passive /norestart'
+    Delete "$INSTDIR\Common\vcruntime.msi"
+ !ELSE
  !IFDEF CL_1400
!    SetOutPath "$INSTDIR\Common"
!    File /oname=vcruntime.msi "${MSVCMSI}"
!    nsExec::Exec 'msiexec /x "$INSTDIR\Common\vcruntime.msi" /passive /norestart'
!    Delete "$INSTDIR\Common\vcruntime.msi"
  !ELSE
  !IFDEF CL_1310
!    Delete /REBOOTOK "$INSTDIR\Common\mfc71.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcr71.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp71.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71CHS.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71CHT.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71DEU.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71ENU.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71ESP.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71FRA.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71ITA.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71JPN.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC71KOR.DLL"
  !ELSE
  !IFDEF CL_1300
!    Delete /REBOOTOK "$INSTDIR\Common\mfc70.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcr70.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp70.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70CHS.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70CHT.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70DEU.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70ENU.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70ESP.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70FRA.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70ITA.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70JPN.DLL"
!    Delete /REBOOTOK "$INSTDIR\Common\MFC70KOR.DLL"
! !ELSE
!    Delete /REBOOTOK "$INSTDIR\Common\mfc42.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcp60.dll"
!    Delete /REBOOTOK "$INSTDIR\Common\msvcrt.dll"
! !ENDIF
  !ENDIF
  !ENDIF
  !ENDIF
***************
*** 2733,2741 ****
   SetOutPath "$INSTDIR\Common"
  
  !IFDEF DEBUG
  !IFDEF CL_1400
!    File "${AFS_WININSTALL_DIR}\vcruntime.msi"
!    nsExec::Exec 'msiexec /i "$INSTDIR\Common\vcruntime.msi" /passive'
     Delete "$INSTDIR\Common\vcruntime.msi"
  !ELSE
  !IFDEF CL_1310
--- 2792,2805 ----
   SetOutPath "$INSTDIR\Common"
  
  !IFDEF DEBUG
+ !IFDEF CL_1500
+    File /oname=vcruntime.msi "${MSVCMSI}"
+    nsExec::Exec 'msiexec /i "$INSTDIR\Common\vcruntime.msi" /passive /norestart'
+    Delete "$INSTDIR\Common\vcruntime.msi"
+ !ELSE
  !IFDEF CL_1400
!    File /oname=vcruntime.msi "${MSVCMSI}"
!    nsExec::Exec 'msiexec /i "$INSTDIR\Common\vcruntime.msi" /passive /norestart'
     Delete "$INSTDIR\Common\vcruntime.msi"
  !ELSE
  !IFDEF CL_1310
***************
*** 2772,2782 ****
  !ENDIF
  !ENDIF
  !ENDIF
  !ELSE
  !IFDEF CL_1400
!   File "${AFS_WININSTALL_DIR}\${VCREDISTNAME}"
!   nsExec::Exec '"$INSTDIR\Common\${VCREDISTNAME}" /Q'
!   Delete "$INSTDIR\Common\${VCREDISTNAME}"
  !ELSE
  !IFDEF CL_1310
     !insertmacro ReplaceDLL "${SYSTEMDIR}\mfc71.dll" "$INSTDIR\Common\mfc71.dll" "$INSTDIR"
--- 2836,2852 ----
  !ENDIF
  !ENDIF
  !ENDIF
+ !ENDIF
+ !ELSE
+ !IFDEF CL_1500
+    File /oname=vcruntime.msi "${MSVCMSI}"
+    nsExec::Exec 'msiexec /i "$INSTDIR\Common\vcruntime.msi" /passive /norestart'
+    Delete "$INSTDIR\Common\vcruntime.msi"
  !ELSE
  !IFDEF CL_1400
!    File /oname=vcruntime.msi "${MSVCMSI}"
!    nsExec::Exec 'msiexec /i "$INSTDIR\Common\vcruntime.msi" /passive /norestart'
!    Delete "$INSTDIR\Common\vcruntime.msi"
  !ELSE
  !IFDEF CL_1310
     !insertmacro ReplaceDLL "${SYSTEMDIR}\mfc71.dll" "$INSTDIR\Common\mfc71.dll" "$INSTDIR"
***************
*** 2813,2818 ****
--- 2883,2889 ----
  !ENDIF
  !ENDIF   
  !ENDIF
+ !ENDIF
  
     StrCmp $LANGUAGE ${LANG_ENGLISH} DoEnglish
     StrCmp $LANGUAGE ${LANG_GERMAN} DoGerman
***************
*** 2831,2838 ****
     File "..\..\doc\install\Documentation\en_US\html\*"
     SetOutPath "$INSTDIR\Documentation\html\index_files"
     File "..\..\doc\install\Documentation\en_US\html\index_files\*"
-    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
-    File "..\..\doc\install\Documentation\en_US\html\InstallGd\*"
     SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
     File "..\..\doc\install\Documentation\en_US\html\ReleaseNotes\*"
     SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes\logo_files"
--- 2902,2907 ----
***************
*** 3627,3633 ****
  ;
  ; Returns on top of stack
  ;
! ; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003, Vista)
  ; or
  ; '' (Unknown Windows Version)
  ;
--- 3696,3702 ----
  ;
  ; Returns on top of stack
  ;
! ; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003, Vista/2008)
  ; or
  ; '' (Unknown Windows Version)
  ;
Index: openafs/src/WINNT/install/NSIS/vcruntime.wxs
diff -c openafs/src/WINNT/install/NSIS/vcruntime.wxs:1.1.2.2 openafs/src/WINNT/install/NSIS/vcruntime.wxs:1.1.2.3
*** openafs/src/WINNT/install/NSIS/vcruntime.wxs:1.1.2.2	Wed Apr  9 00:36:53 2008
--- openafs/src/WINNT/install/NSIS/vcruntime.wxs	Tue Jul 15 19:59:33 2008
***************
*** 1,16 ****
  <?xml version="1.0" ?>
  <Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'>
  
    <?ifndef Config?>
      <?define Config=Debug?>
    <?endif?>
  
      <Product
         Id="????????-????-????-????-????????????"
         Codepage="1252"
         Language="1033"
         Manufacturer="Microsoft Corporation"
!        Name="Visual C++ 8.0 $(var.Config) ($(var.Platform)) Runtime"
         UpgradeCode="1184DE9F-813A-4DB3-8533-BB7D4E51D695"
         Version="0.1.0.0"
         >
--- 1,42 ----
  <?xml version="1.0" ?>
  <Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'>
  
+   <!--
+ 
+       External defines:
+ 
+       Platform : Must be set to Intel, x64 or Intel64 to indicate the target architecture.
+       VCVer : 14 or 15.  Corresponds to the version of the VC compiler.
+       Config : Retail or Debug.
+ 
+       -->
+ 
    <?ifndef Config?>
      <?define Config=Debug?>
    <?endif?>
  
+   <?ifndef VCVer?>
+     <?define VCVer=14?>
+   <?endif?>
+ 
+   <?if $(var.VCVer) = "1400"?>
+     <?define VString=8.0?>
+     <?define VCU=8_0?>
+     <?define VCV=VC80?>
+   <?elseif $(var.VCVer) = "1500"?>
+     <?define VString=9.0?>
+     <?define VCU=9_0?>
+     <?define VCV=VC90?>
+   <?else?>
+     <?error Unknown VCVer value?>
+   <?endif?>
+ 
      <Product
         Id="????????-????-????-????-????????????"
         Codepage="1252"
         Language="1033"
         Manufacturer="Microsoft Corporation"
!        Name="Visual Studio $(var.VString) $(var.Config) ($(var.Platform)) Runtime"
         UpgradeCode="1184DE9F-813A-4DB3-8533-BB7D4E51D695"
         Version="0.1.0.0"
         >
***************
*** 19,25 ****
           AdminImage="no"
           Comments="Copyright (C) Microsoft Corporation, All rights reserved."
           Compressed="yes"
!          Description="Visual C++ 8.0 $(var.Config) ($(var.Platform)) WinSXS MSM"
           InstallerVersion="300"
           Keywords="Installer,VC,$(var.Config),Runtime"
           Manufacturer="Microsoft Corporation"
--- 45,51 ----
           AdminImage="no"
           Comments="Copyright (C) Microsoft Corporation, All rights reserved."
           Compressed="yes"
!          Description="Visual C++ $(var.VString) $(var.Config) ($(var.Platform)) WinSXS MSM"
           InstallerVersion="300"
           Keywords="Installer,VC,$(var.Config),Runtime"
           Manufacturer="Microsoft Corporation"
***************
*** 37,84 ****
  
  	<?if $(var.Platform) = "x64" ?>
  	  <?if $(var.Config) = "Retail" ?>
! 	    <Merge Id="MSVCRT8MEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_CRT_x86_x64.msm"/>
! 	    <Merge Id="MSVCRT8POL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_CRT_x86_x64.msm"/>
! 	    <Merge Id="MSVCRT8MFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_MFC_x86_x64.msm"/>
! 	    <Merge Id="MSVCRT8PFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_MFC_x86_x64.msm"/>
! 	    <Merge Id="MSVCRT8MFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_MFCLOC_x86_x64.msm"/>
! 	    <Merge Id="MSVCRT8PFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_MFCLOC_x86_x64.msm"/>
   	  <?else?>
! 	    <Merge Id="MSVCRT8MEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_DebugCRT_x86_x64.msm"/>
! 	    <Merge Id="MSVCRT8POL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_DebugCRT_x86_x64.msm"/>
! 	    <Merge Id="MSVCRT8MFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_DebugMFC_x86_x64.msm"/>
! 	    <Merge Id="MSVCRT8PFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_DebugMFC_x86_x64.msm"/>
! 	    <Merge Id="MSVCRT8MFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_MFCLOC_x86_x64.msm"/>
! 	    <Merge Id="MSVCRT8PFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_MFCLOC_x86_x64.msm"/>
  	  <?endif?>
          <?else?>
  	  <?if $(var.Config) = "Retail" ?>
! 	    <Merge Id="MSVCRT8MEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_CRT_x86.msm"/>
! 	    <Merge Id="MSVCRT8POL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_CRT_x86.msm"/>
! 	    <Merge Id="MSVCRT8MFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_MFC_x86.msm"/>
! 	    <Merge Id="MSVCRT8PFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_MFC_x86.msm"/>
! 	    <Merge Id="MSVCRT8MFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_MFCLOC_x86.msm"/>
! 	    <Merge Id="MSVCRT8PFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_MFCLOC_x86.msm"/>
  	  <?else?>
! 	    <Merge Id="MSVCRT8MEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_DebugCRT_x86.msm"/>
! 	    <Merge Id="MSVCRT8POL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_DebugCRT_x86.msm"/>
! 	    <Merge Id="MSVCRT8MFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_DebugMFC_x86.msm"/>
! 	    <Merge Id="MSVCRT8PFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_DebugMFC_x86.msm"/>
! 	    <Merge Id="MSVCRT8MFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_VC80_MFCLOC_x86.msm"/>
! 	    <Merge Id="MSVCRT8PFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_8_0_Microsoft_VC80_MFCLOC_x86.msm"/>
  	  <?endif?>
  	<?endif?>
        </Directory>
  
        <Feature Id="FeatureAll" AllowAdvertise="no" Absent="disallow"
!                Description="Install VC ++ 8.0 Runtime" Display="expand" InstallDefault="local" Level="3"
                 Title="All">
! 	<MergeRef Id="MSVCRT8MEM"/>
! 	<MergeRef Id="MSVCRT8POL"/>
! 	<MergeRef Id="MSVCRT8MFC"/>
! 	<MergeRef Id="MSVCRT8PFC"/>
! 	<MergeRef Id="MSVCRT8MFL"/>
! 	<MergeRef Id="MSVCRT8PFL"/>
        </Feature>  
  
        <Media Id="1" Cabinet="disk1.cab" CompressionLevel="high" EmbedCab="yes" />
--- 63,110 ----
  
  	<?if $(var.Platform) = "x64" ?>
  	  <?if $(var.Config) = "Retail" ?>
! 	    <Merge Id="MSVCRTMEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_$(var.VCV)_CRT_x86_x64.msm"/>
! 	    <Merge Id="MSVCRTPOL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_$(var.VCU)_Microsoft_$(var.VCV)_CRT_x86_x64.msm"/>
! 	    <Merge Id="MSVCRTMFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_$(var.VCV)_MFC_x86_x64.msm"/>
! 	    <Merge Id="MSVCRTPFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_$(var.VCU)_Microsoft_$(var.VCV)_MFC_x86_x64.msm"/>
! 	    <Merge Id="MSVCRTMFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_$(var.VCV)_MFCLOC_x86_x64.msm"/>
! 	    <Merge Id="MSVCRTPFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_$(var.VCU)_Microsoft_$(var.VCV)_MFCLOC_x86_x64.msm"/>
   	  <?else?>
! 	    <Merge Id="MSVCRTMEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_$(var.VCV)_DebugCRT_x86_x64.msm"/>
! 	    <Merge Id="MSVCRTPOL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_$(var.VCU)_Microsoft_$(var.VCV)_DebugCRT_x86_x64.msm"/>
! 	    <Merge Id="MSVCRTMFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_$(var.VCV)_DebugMFC_x86_x64.msm"/>
! 	    <Merge Id="MSVCRTPFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_$(var.VCU)_Microsoft_$(var.VCV)_DebugMFC_x86_x64.msm"/>
! 	    <Merge Id="MSVCRTMFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_$(var.VCV)_MFCLOC_x86_x64.msm"/>
! 	    <Merge Id="MSVCRTPFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_$(var.VCU)_Microsoft_$(var.VCV)_MFCLOC_x86_x64.msm"/>
  	  <?endif?>
          <?else?>
  	  <?if $(var.Config) = "Retail" ?>
! 	    <Merge Id="MSVCRTMEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_$(var.VCV)_CRT_x86.msm"/>
! 	    <Merge Id="MSVCRTPOL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_$(var.VCU)_Microsoft_$(var.VCV)_CRT_x86.msm"/>
! 	    <Merge Id="MSVCRTMFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_$(var.VCV)_MFC_x86.msm"/>
! 	    <Merge Id="MSVCRTPFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_$(var.VCU)_Microsoft_$(var.VCV)_MFC_x86.msm"/>
! 	    <Merge Id="MSVCRTMFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_$(var.VCV)_MFCLOC_x86.msm"/>
! 	    <Merge Id="MSVCRTPFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_$(var.VCU)_Microsoft_$(var.VCV)_MFCLOC_x86.msm"/>
  	  <?else?>
! 	    <Merge Id="MSVCRTMEM" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_$(var.VCV)_DebugCRT_x86.msm"/>
! 	    <Merge Id="MSVCRTPOL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_$(var.VCU)_Microsoft_$(var.VCV)_DebugCRT_x86.msm"/>
! 	    <Merge Id="MSVCRTMFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_$(var.VCV)_DebugMFC_x86.msm"/>
! 	    <Merge Id="MSVCRTPFC" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_$(var.VCU)_Microsoft_$(var.VCV)_DebugMFC_x86.msm"/>
! 	    <Merge Id="MSVCRTMFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\Microsoft_$(var.VCV)_MFCLOC_x86.msm"/>
! 	    <Merge Id="MSVCRTPFL" DiskId="1" Language="0" src="$(var.CPF)\Merge Modules\policy_$(var.VCU)_Microsoft_$(var.VCV)_MFCLOC_x86.msm"/>
  	  <?endif?>
  	<?endif?>
        </Directory>
  
        <Feature Id="FeatureAll" AllowAdvertise="no" Absent="disallow"
!                Description="Install VC ++ $(var.VString) Runtime" Display="expand" InstallDefault="local" Level="3"
                 Title="All">
! 	<MergeRef Id="MSVCRTMEM"/>
! 	<MergeRef Id="MSVCRTPOL"/>
! 	<MergeRef Id="MSVCRTMFC"/>
! 	<MergeRef Id="MSVCRTPFC"/>
! 	<MergeRef Id="MSVCRTMFL"/>
! 	<MergeRef Id="MSVCRTPFL"/>
        </Feature>  
  
        <Media Id="1" Cabinet="disk1.cab" CompressionLevel="high" EmbedCab="yes" />
Index: openafs/src/WINNT/install/loopback/NTMakefile
diff -c openafs/src/WINNT/install/loopback/NTMakefile:1.5.4.2 openafs/src/WINNT/install/loopback/NTMakefile:1.5.4.4
*** openafs/src/WINNT/install/loopback/NTMakefile:1.5.4.2	Wed Sep 19 13:58:47 2007
--- openafs/src/WINNT/install/loopback/NTMakefile	Thu Jul 10 14:28:26 2008
***************
*** 1,4 ****
! # rcsid : $Id: NTMakefile,v 1.5.4.2 2007/09/19 17:58:47 jaltman Exp $
  
  RELDIR=WINNT\install\loopback
  !INCLUDE ..\..\..\config\NTMakefile.$(SYS_NAME)
--- 1,4 ----
! # rcsid : $Id: NTMakefile,v 1.5.4.4 2008/07/10 18:28:26 jaltman Exp $
  
  RELDIR=WINNT\install\loopback
  !INCLUDE ..\..\..\config\NTMakefile.$(SYS_NAME)
***************
*** 28,33 ****
--- 28,44 ----
  
  LINK=link
  
+ # Figure out which DDK include path we require
+ !IF EXIST ($(NTDDKDIR)\netcfgx.h)
+ DDK_INCL = $(NTDDKDIR)
+ !ELSEIF EXIST ($(NTDDKDIR)\INC\WNET\netcfgx.h)
+ DDK_INCL = $(NTDDKDIR)\INC\WNET
+ !ELSEIF EXIST ($(NTDDKDIR)\INC\API\netcfgx.h)
+ DDK_INCL = $(NTDDKDIR)\INC\API
+ !ELSE
+ !ERROR netcfgx.h header file cannot be found.  DDK improperly configured.
+ !ENDIF
+ 
  # afsloopback.dll
  
  DLLSOURCEFILES = loopbackutils.cpp renameconnection.cpp wmi.cpp
***************
*** 46,56 ****
  	$(STATICC2OBJ) -c -DUNICODE -D_UNICODE /Fo$@ $**
  
  $(OUT)\wmi.obj: wmi.cpp
! 	$(STATICC2OBJ)  -I$(NTDDKDIR) -c -DUNICODE -D_UNICODE /Fo$@ $**
  
  $(DLLFILE): $(DLLOBJFILES) $(DLLRES)
  	$(LINK) -DLL $(DLLEXPORTS) -OUT:$@ $** $(DLLLIBFILES)
          $(_VC_MANIFEST_EMBED_DLL)
  
  # instloop.exe
  
--- 57,68 ----
  	$(STATICC2OBJ) -c -DUNICODE -D_UNICODE /Fo$@ $**
  
  $(OUT)\wmi.obj: wmi.cpp
! 	$(STATICC2OBJ)  -I$(DDK_INCL) -c -DUNICODE -D_UNICODE /Fo$@ $**
  
  $(DLLFILE): $(DLLOBJFILES) $(DLLRES)
  	$(LINK) -DLL $(DLLEXPORTS) -OUT:$@ $** $(DLLLIBFILES)
          $(_VC_MANIFEST_EMBED_DLL)
+         $(CODESIGN_USERLAND)
  
  # instloop.exe
  
***************
*** 61,68 ****
        $(STATICC2OBJ) -c -DUNICODE -D_UNICODE /Fo$@ $**
  
  $(EXEFILE): $(EXEOBJFILES) $(EXERES)
!       $(LINK) /OUT:$@ $** $(DLLLIBFILES)
!       $(_VC_MANIFEST_EMBED_EXE)
  
  install:  $(DLLFILE) $(EXEFILE)
  
--- 73,81 ----
        $(STATICC2OBJ) -c -DUNICODE -D_UNICODE /Fo$@ $**
  
  $(EXEFILE): $(EXEOBJFILES) $(EXERES)
!         $(LINK) /OUT:$@ $** $(DLLLIBFILES)
!         $(_VC_MANIFEST_EMBED_EXE)
!         $(CODESIGN_USERLAND)
  
  install:  $(DLLFILE) $(EXEFILE)
  
Index: openafs/src/WINNT/install/wix/NTMakefile
diff -c openafs/src/WINNT/install/wix/NTMakefile:1.9.2.2 openafs/src/WINNT/install/wix/NTMakefile:1.9.2.4
*** openafs/src/WINNT/install/wix/NTMakefile:1.9.2.2	Sun Jul  2 21:46:33 2006
--- openafs/src/WINNT/install/wix/NTMakefile	Wed Jul  2 08:49:01 2008
***************
*** 17,22 ****
--- 17,27 ----
  BINMSIFILE = $(MEDIADIR)\openafs-32bit-tools-$(LANG).msi
  !ENDIF
  
+ !IFNDEF MSIDNNLS
+ !ERROR Please set MSIDNNLS to the directory where Microsoft IDN Mitigation APIs are installed.
+ # $(MSIDNNLS)\REDIST\idndl.(platform).exe should exist.
+ !ENDIF
+ 
  WIXINCLUDES = \
  	config.wxi \
  	feature.wxi \
***************
*** 62,67 ****
--- 67,73 ----
  	light -nologo -out $(MSIFILE) \
  		-loc lang\$(LANG)\strings.wxl \
  		$(WIXOBJ)
+ 	$(CODESIGN_USERLAND)
  	dir $(MSIFILE)
  
  $(WIXOBJ): openafs.wxs $(WIXINCLUDES)
***************
*** 74,79 ****
--- 80,86 ----
  		-dVersionPatch=$(AFSPRODUCT_VER_PATCH)	\
  		"-dDestDir=$(DESTDIR)\\" \
  		-dCellDbFile=CellServDB \
+ 		-dIDNMRedistDir=$(MSIDNNLS)\\REDIST 	\
  		-v0 \
  		-w0 \
          $(AFSDEV_AUXWIXDEFINES)	openafs.wxs
***************
*** 97,102 ****
--- 104,110 ----
  	light -nologo -out $(BINMSIFILE) \
  		-loc lang\en_US\strings.wxl \
  		$(BINWIXOBJ)
+ 	$(CODESIGN_USERLAND)
  	dir $(BINMSIFILE)
  !ENDIF
  
***************
*** 118,120 ****
--- 126,131 ----
  	-$(DEL) $(BINWIXOBJ)
  	-$(DEL) $(BINMSIFILE)
  !ENDIF
+ 
+ 
+ 
Index: openafs/src/WINNT/install/wix/config.wxi
diff -c openafs/src/WINNT/install/wix/config.wxi:1.11.2.2 openafs/src/WINNT/install/wix/config.wxi:1.11.2.4
*** openafs/src/WINNT/install/wix/config.wxi:1.11.2.2	Sat Mar  8 18:39:26 2008
--- openafs/src/WINNT/install/wix/config.wxi	Sat Jun 28 21:22:31 2008
***************
*** 23,28 ****
--- 23,29 ----
         MediaDllDir    : Installer Dlls
         MediaBinDir    : Installer Exes
         SrcDir         : openafs\src\
+        DocDir         : openafs\doc\
         DestDir        : $(DEST)\
         BinDir         : $(DEST)\bin\
         LibDir         : $(DEST)\lib\
***************
*** 125,134 ****
--- 126,137 ----
  	<?define InstallerVersion="110"?>
  	<?define Platform="Intel"?>
  	<?define Win64="no"?>
+         <?define Arch="x86"?>
      <?elseif $(env.CPU) = "AMD64"?>
  	<?define InstallerVersion="200"?>
  	<?define Platform="x64"?>
  	<?define Win64="yes"?>
+         <?define Arch="amd64"?>
      <?else?>
          <?error Unknown build type?>
      <?endif?>
***************
*** 149,154 ****
--- 152,160 ----
      <?ifndef SrcDir?>
          <?define SrcDir="$(env.AFSROOT)\src\"?>
      <?endif?>
+     <?ifndef DocDir?>
+         <?define DocDir="$(env.AFSROOT)\doc\"?>
+     <?endif?>
      <?ifndef MediaDllDir?>
          <?define MediaDllDir="$(var.DestDir)WinInstall\Dll\"?>
      <?endif?>
Index: openafs/src/WINNT/install/wix/feature.wxi
diff -c openafs/src/WINNT/install/wix/feature.wxi:1.14.2.9 openafs/src/WINNT/install/wix/feature.wxi:1.14.2.11
*** openafs/src/WINNT/install/wix/feature.wxi:1.14.2.9	Tue Feb  5 20:14:52 2008
--- openafs/src/WINNT/install/wix/feature.wxi	Sun Jun 29 01:07:12 2008
***************
*** 261,272 ****
              <Feature Id="feaDocumentation" AllowAdvertise="no" Description="$(loc.StrAFSDocLongDesc)"
                  Display="expand" InstallDefault="followParent" Level="130" Title="$(loc.StrAFSDocDesc)">
  
! 				<ComponentRef Id="rcm_Documentation" />
                  
                  <ComponentRef Id="efl_Readme_TXT_$(var.Language)" />                
                  <ComponentRef Id="efl_DocHtml_en_US" />
                  <ComponentRef Id="cmp_Cmd_Ref_en_US" />
!                 <ComponentRef Id="cmp_Install_Guide_en_US" />
                  <ComponentRef Id="cmp_Sys_Admin_Guide_en_US" />
  
                  <ComponentRef Id="cmf_afs_nt_HLP_en_US" />
--- 261,274 ----
              <Feature Id="feaDocumentation" AllowAdvertise="no" Description="$(loc.StrAFSDocLongDesc)"
                  Display="expand" InstallDefault="followParent" Level="130" Title="$(loc.StrAFSDocDesc)">
  
!         	<ComponentRef Id="rcm_Documentation" />
                  
                  <ComponentRef Id="efl_Readme_TXT_$(var.Language)" />                
                  <ComponentRef Id="efl_DocHtml_en_US" />
                  <ComponentRef Id="cmp_Cmd_Ref_en_US" />
!                 <ComponentRef Id="cmp_Cmd_Ref_1_en_US" />
!                 <ComponentRef Id="cmp_Cmd_Ref_5_en_US" />
!                 <ComponentRef Id="cmp_Cmd_Ref_8_en_US" />
                  <ComponentRef Id="cmp_Sys_Admin_Guide_en_US" />
  
                  <ComponentRef Id="cmf_afs_nt_HLP_en_US" />
Index: openafs/src/WINNT/install/wix/files.wxi
diff -c openafs/src/WINNT/install/wix/files.wxi:1.22.2.20 openafs/src/WINNT/install/wix/files.wxi:1.22.2.24
*** openafs/src/WINNT/install/wix/files.wxi:1.22.2.20	Tue Feb  5 20:14:52 2008
--- openafs/src/WINNT/install/wix/files.wxi	Tue Jul 15 17:19:34 2008
***************
*** 389,394 ****
--- 389,712 ----
                                  <File Id="fileimage002_JPG_$(var.Language)" Name="image002.jpg" LongName="image002.jpg" DiskId="1" />
                              </Component>
                          </Directory>
+                     <?if $(var.Language) = "en_US"?>
+                         <Directory Id="dirCmdRef_en_US" Name="CmdRef" src="$(var.DocDir)\man-pages\html\">
+                             <Component Id="cmp_Cmd_Ref_en_US" Guid="$(var.DocHtmlCmdRefGuid)">
+                                 <File Id="file_CmdRef_Index_HTM_en_US" Name="index.htm" LongName="index.html" KeyPath="yes" DiskId="1" />
+                                 <File Id="file_CmdRef_Style_CSS_en_US" Name="style.css" LongName="style.css" DiskId="1" />
+                             </Component>
+                         <Directory Id="dirCmdRef1_en_US" Name="1" src="$(var.DocDir)\man-pages\html\1\">
+                             <Component Id="cmp_Cmd_Ref_1_en_US" Guid="$(var.DocHtmlCmdRef1Guid)">
+                             <File Id="file_CmdRef_1_afs_html" Name="afs.htm" LongName="afs.html" KeyPath="yes" DiskId="1" />
+                             <File Id="file_CmdRef_1_afsmonitor_html" Name="afsmonit.htm" LongName="afsmonitor.html" DiskId="1" />
+                             <File Id="file_CmdRef_1_aklog_html" Name="aklog.htm" LongName="aklog.html" DiskId="1" />
+                             <File Id="file_CmdRef_1_cmdebug_html" Name="cmdebug.htm" LongName="cmdebug.html" DiskId="1" />
+                             <File Id="file_CmdRef_1_dlog_html" Name="dlog.htm" LongName="dlog.html" DiskId="1" />
+                             <File Id="file_CmdRef_1_dpass_html"  Name="dpass.htm"  LongName="dpass.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_html"  Name="fs.htm"  LongName="fs.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_apropos_html"  Name="fs_aprop.htm"  LongName="fs_apropos.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_checkservers_html"  Name="fs_chsrv.htm"  LongName="fs_checkservers.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_checkvolumes_html"  Name="fs_chvol.htm"  LongName="fs_checkvolumes.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_cleanacl_html"  Name="fs_clean.htm"  LongName="fs_cleanacl.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_copyacl_html"  Name="fs_copya.htm"  LongName="fs_copyacl.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_diskfree_html"  Name="fs_diskf.htm"  LongName="fs_diskfree.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_examine_html"  Name="fs_exami.htm"  LongName="fs_examine.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_exportafs_html"  Name="fs_expor.htm"  LongName="fs_exportafs.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_flush_html"  Name="fs_flush.htm"  LongName="fs_flush.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_flushall_html"  Name="fs_flall.htm"  LongName="fs_flushall.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_flushmount_html"  Name="fs_flmnt.htm"  LongName="fs_flushmount.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_flushvolume_html"  Name="fs_flvol.htm"  LongName="fs_flushvolume.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_getcacheparms_html"  Name="fs_getcp.htm"  LongName="fs_getcacheparms.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_getcalleraccess_html"  Name="fs_getca.htm"  LongName="fs_getcalleraccess.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_getcellstatus_html"  Name="fs_getce.htm"  LongName="fs_getcellstatus.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_getclientaddrs_html"  Name="fs_getcl.htm"  LongName="fs_getclientaddrs.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_getcrypt_html"  Name="fs_getcr.htm"  LongName="fs_getcrypt.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_getserverprefs_html"  Name="fs_getse.htm"  LongName="fs_getserverprefs.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_help_html"  Name="fs_help.htm"  LongName="fs_help.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_listacl_html"  Name="fs_lista.htm"  LongName="fs_listacl.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_listaliases_html"  Name="fs_listl.htm"  LongName="fs_listaliases.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_listcells_html"  Name="fs_listc.htm"  LongName="fs_listcells.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_listquota_html"  Name="fs_listq.htm"  LongName="fs_listquota.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_lsmount_html"  Name="fs_lsmou.htm"  LongName="fs_lsmount.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_messages_html"  Name="fs_messa.htm"  LongName="fs_messages.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_minidump_html"  Name="fs_minid.htm"  LongName="fs_minidump.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_mkmount_html"  Name="fs_mkmou.htm"  LongName="fs_mkmount.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_newalias_html"  Name="fs_newal.htm"  LongName="fs_newalias.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_newcell_html"  Name="fs_newce.htm"  LongName="fs_newcell.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_quota_html"  Name="fs_quota.htm"  LongName="fs_quota.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_rmmount_html"  Name="fs_rmmou.htm"  LongName="fs_rmmount.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_rxstatpeer_html"  Name="fs_rxsta.htm"  LongName="fs_rxstatpeer.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_setacl_html"  Name="fs_setac.htm"  LongName="fs_setacl.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_setcachesize_html"  Name="fs_setca.htm"  LongName="fs_setcachesize.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_setcell_html"  Name="fs_setce.htm"  LongName="fs_setcell.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_setclientaddrs_html"  Name="fs_setcl.htm"  LongName="fs_setclientaddrs.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_setcrypt_html"  Name="fs_setcr.htm"  LongName="fs_setcrypt.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_setquota_html"  Name="fs_setqu.htm"  LongName="fs_setquota.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_setserverprefs_html"  Name="fs_setse.htm"  LongName="fs_setserverprefs.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_setvol_html"  Name="fs_setvo.htm"  LongName="fs_setvol.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_storebehind_html"  Name="fs_store.htm"  LongName="fs_storebehind.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_sysname_html"  Name="fs_sysna.htm"  LongName="fs_sysname.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_uuid_html"  Name="fs_uuid.htm"  LongName="fs_uuid.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_whereis_html"  Name="fs_where.htm"  LongName="fs_whereis.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_whichcell_html"  Name="fs_which.htm"  LongName="fs_whichcell.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_fs_wscell_html"  Name="fs_wscel.htm"  LongName="fs_wscell.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_klog_html"  Name="klog.htm"  LongName="klog.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_klog__krb5_html"  Name="klogkrb5.htm"  LongName="klog.krb5.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_knfs_html"  Name="knfs.htm"  LongName="knfs.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_kpasswd_html"  Name="kpasswd.htm"  LongName="kpasswd.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_livesys_html"  Name="livesys.htm"  LongName="livesys.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_package_test_html"  Name="pack_tst.htm"  LongName="package_test.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pagsh_html"  Name="pagsh.htm"  LongName="pagsh.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_html"  Name="pts.htm"  LongName="pts.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_adduser_html"  Name="pts_addu.htm"  LongName="pts_adduser.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_apropos_html"  Name="pts_apro.htm"  LongName="pts_apropos.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_chown_html"  Name="pts_chow.htm"  LongName="pts_chown.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_creategroup_html"  Name="pts_crgr.htm"  LongName="pts_creategroup.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_createuser_html"  Name="pts_crus.htm"  LongName="pts_createuser.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_delete_html"  Name="pts_dele.htm"  LongName="pts_delete.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_examine_html"  Name="pts_exam.htm"  LongName="pts_examine.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_help_html"  Name="pts_help.htm"  LongName="pts_help.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_interactive_html"  Name="pts_inte.htm"  LongName="pts_interactive.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_listentries_html"  Name="pts_lent.htm"  LongName="pts_listentries.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_listmax_html"  Name="pts_lmax.htm"  LongName="pts_listmax.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_listowned_html"  Name="pts_lown.htm"  LongName="pts_listowned.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_membership_html"  Name="pts_memb.htm"  LongName="pts_membership.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_quit_html"  Name="pts_quit.htm"  LongName="pts_quit.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_removeuser_html"  Name="pts_remo.htm"  LongName="pts_removeuser.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_rename_html"  Name="pts_rena.htm"  LongName="pts_rename.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_setfields_html"  Name="pts_setf.htm"  LongName="pts_setfields.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_setmax_html"  Name="pts_setm.htm"  LongName="pts_setmax.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_sleep_html"  Name="pts_slee.htm"  LongName="pts_sleep.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_pts_source_html"  Name="pts_sour.htm"  LongName="pts_source.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_rxdebug_html"  Name="rxdebug.htm"  LongName="rxdebug.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_rxgen_html"  Name="rxgen.htm"  LongName="rxgen.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_scout_html"  Name="scout.htm"  LongName="scout.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_symlink_html"  Name="symlink.htm"  LongName="symlink.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_symlink_list_html"  Name="sym_list.htm"  LongName="symlink_list.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_symlink_make_html"  Name="sym_make.htm"  LongName="symlink_make.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_symlink_remove_html"  Name="symremov.htm"  LongName="symlink_remove.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_sys_html"  Name="sys.htm"  LongName="sys.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_tokens_html"  Name="tokens.htm"  LongName="tokens.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_translate_et_html"  Name="translat.htm"  LongName="translate_et.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_udebug_html"  Name="udebug.htm"  LongName="udebug.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_unlog_html"  Name="unlog.htm"  LongName="unlog.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_up_html"  Name="up.htm"  LongName="up.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_html"  Name="vos.htm"  LongName="vos.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_addsite_html"  Name="vos_adds.htm"  LongName="vos_addsite.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_apropos_html"  Name="vos_apro.htm"  LongName="vos_apropos.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_backup_html"  Name="vos_back.htm"  LongName="vos_backup.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_backupsys_html"  Name="vos_bsys.htm"  LongName="vos_backupsys.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_changeaddr_html"  Name="vos_chad.htm"  LongName="vos_changeaddr.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_changeloc_html"  Name="vos_chan.htm"  LongName="vos_changeloc.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_clone_html"  Name="vos_clon.htm"  LongName="vos_clone.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_convertROtoRW_html"  Name="vos_conv.htm"  LongName="vos_convertROtoRW.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_copy_html"  Name="vos_copy.htm"  LongName="vos_copy.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_create_html"  Name="vos_crea.htm"  LongName="vos_create.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_delentry_html"  Name="vos_dele.htm"  LongName="vos_delentry.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_dump_html"  Name="vos_dump.htm"  LongName="vos_dump.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_examine_html"  Name="vos_exam.htm"  LongName="vos_examine.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_help_html"  Name="vos_help.htm"  LongName="vos_help.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_listaddrs_html"  Name="vos_ladd.htm"  LongName="vos_listaddrs.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_listpart_html"  Name="vos_lpar.htm"  LongName="vos_listpart.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_listvldb_html"  Name="vos_lvld.htm"  LongName="vos_listvldb.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_listvol_html"  Name="vos_lvol.htm"  LongName="vos_listvol.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_lock_html"  Name="vos_lock.htm"  LongName="vos_lock.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_move_html"  Name="vos_move.htm"  LongName="vos_move.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_offline_html"  Name="vos_offl.htm"  LongName="vos_offline.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_online_html"  Name="vos_onli.htm"  LongName="vos_online.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_partinfo_html"  Name="vos_part.htm"  LongName="vos_partinfo.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_release_html"  Name="vos_rele.htm"  LongName="vos_release.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_remove_html"  Name="vos_remo.htm"  LongName="vos_remove.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_remsite_html"  Name="vos_rems.htm"  LongName="vos_remsite.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_rename_html"  Name="vos_rena.htm"  LongName="vos_rename.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_restore_html"  Name="vos_rest.htm"  LongName="vos_restore.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_shadow_html"  Name="vos_shad.htm"  LongName="vos_shadow.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_size_html"  Name="vos_size.htm"  LongName="vos_size.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_status_html"  Name="vos_stat.htm"  LongName="vos_status.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_syncserv_html"  Name="vos_syse.htm"  LongName="vos_syncserv.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_syncvldb_html"  Name="vos_syvl.htm"  LongName="vos_syncvldb.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_unlock_html"  Name="vos_unlo.htm"  LongName="vos_unlock.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_unlockvldb_html"  Name="vos_unvl.htm"  LongName="vos_unlockvldb.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_vos_zap_html"  Name="vos_zap.htm"  LongName="vos_zap.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_xstat_cm_test_html"  Name="xstat_cm.htm"  LongName="xstat_cm_test.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_1_xstat_fs_test_html"  Name="xstat_fs.htm"  LongName="xstat_fs_test.html"  DiskId="1"  />
+                             </Component>
+                         </Directory> <!-- CmdRef_1 -->
+                         <Directory Id="dirCmdRef5_en_US" Name="5" src="$(var.DocDir)\man-pages\html\5\">
+                             <Component Id="cmp_Cmd_Ref_5_en_US" Guid="$(var.DocHtmlCmdRef5Guid)">
+                             <File Id="file_CmdRef_5_afs_html"  Name="afs.htm"  LongName="afs.html"  KeyPath="yes"  DiskId="1"  />
+                             <File Id="file_CmdRef_5_afsmonitor_html"  Name="afsmonit.htm"  LongName="afsmonitor.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_afszcm_cat_html"  Name="afszcm.htm"  LongName="afszcm.cat.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_afs_cache_html"  Name="afs_cach.htm"  LongName="afs_cache.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_afs_volume_header_html"  Name="afs_volu.htm"  LongName="afs_volume_header.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_AuthLog_dir_html"  Name="AuthLogD.htm"  LongName="AuthLog.dir.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_AuthLog_html"  Name="AuthLog.htm"  LongName="AuthLog.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_BackupLog_html"  Name="BackupLo.htm"  LongName="BackupLog.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_bdb_DB0_html"  Name="bdb_DB0.htm"  LongName="bdb.DB0.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_BosConfig_html"  Name="BosConfi.htm"  LongName="BosConfig.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_BosLog_html"  Name="BosLog.htm"  LongName="BosLog.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_butc_html"  Name="butc.htm"  LongName="butc.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_butc_logs_html"  Name="butc_log.htm"  LongName="butc_logs.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_cacheinfo_html"  Name="cacheinf.htm"  LongName="cacheinfo.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_CellAlias_html"  Name="CellAlia.htm"  LongName="CellAlias.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_CellServDB_html"  Name="CellServ.htm"  LongName="CellServDB.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_FileLog_html"  Name="FileLog.htm"  LongName="FileLog.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_fms_log_html"  Name="fms_log.htm"  LongName="fms.log.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_ForceSalvage_html"  Name="ForceSal.htm"  LongName="ForceSalvage.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_kaserver_DB0_html"  Name="kaserved.htm"  LongName="kaserver.DB0.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_kaserverauxdb_html"  Name="kaserver.htm"  LongName="kaserverauxdb.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_KeyFile_html"  Name="KeyFile.htm"  LongName="KeyFile.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_krb_conf_html"  Name="krb_conf.htm"  LongName="krb.conf.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_NetInfo_html"  Name="NetInfo.htm"  LongName="NetInfo.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_NetRestrict_html"  Name="NetRestr.htm"  LongName="NetRestrict.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_NoAuth_html"  Name="NoAuth.htm"  LongName="NoAuth.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_package_html"  Name="package.htm"  LongName="package.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_prdb_DB0_html"  Name="prdb_DB0.htm"  LongName="prdb.DB0.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_Salvage_fs_html"  Name="SalvageF.htm"  LongName="Salvage.fs.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_Salvage_lock_html"  Name="SalvageL.htm"  LongName="Salvage.lock.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_SalvageLog_html"  Name="SalvageL.htm"  LongName="SalvageLog.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_sysid_html"  Name="sysid.htm"  LongName="sysid.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_tapeconfig_html"  Name="tapeconf.htm"  LongName="tapeconfig.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_ThisCell_html"  Name="ThisCell.htm"  LongName="ThisCell.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_UserList_html"  Name="UserList.htm"  LongName="UserList.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_uss_html"  Name="uss.htm"  LongName="uss.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_uss_bulk_html"  Name="uss_bulk.htm"  LongName="uss_bulk.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_vldb_DB0_html"  Name="vldb_DB0.htm"  LongName="vldb.DB0.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_VLLog_html"  Name="VLLog.htm"  LongName="VLLog.html"    DiskId="1"  />
+                             <File Id="file_CmdRef_5_VolserLog_html"  Name="VolserLo.htm"  LongName="VolserLog.html"    DiskId="1"  />
+                             </Component>
+                         </Directory> <!-- CmdRef_5 -->
+                         <Directory Id="dirCmdRef8_en_US" Name="8" src="$(var.DocDir)\man-pages\html\8\">
+                             <Component Id="cmp_Cmd_Ref_8_en_US" Guid="$(var.DocHtmlCmdRef8Guid)">
+                             <File Id="file_CmdRef_8_afsd_html"  Name="afsd.htm"  LongName="afsd.html"  KeyPath="yes"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_asetkey_html"  Name="asetkey.htm"  LongName="asetkey.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_html"  Name="backup.htm"  LongName="backup.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_adddump_html"  Name="bk_adddu.htm"  LongName="backup_adddump.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_addhost_html"  Name="bk_addho.htm"  LongName="backup_addhost.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_addvolentry_html"  Name="bk_avole.htm"  LongName="backup_addvolentry.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_addvolset_html"  Name="bk_avols.htm"  LongName="backup_addvolset.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_apropos_html"  Name="bk_aprop.htm"  LongName="backup_apropos.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_dbverify_html"  Name="bk_dbver.htm"  LongName="backup_dbverify.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_deldump_html"  Name="bk_deldu.htm"  LongName="backup_deldump.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_deletedump_html"  Name="bk_deldu.htm"  LongName="backup_deletedump.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_delhost_html"  Name="bk_delho.htm"  LongName="backup_delhost.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_delvolentry_html"  Name="bk_delve.htm"  LongName="backup_delvolentry.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_delvolset_html"  Name="bk_delvo.htm"  LongName="backup_delvolset.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_diskrestore_html"  Name="bk_diskr.htm"  LongName="backup_diskrestore.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_dump_html"  Name="bk_dump.htm"  LongName="backup_dump.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_dumpinfo_html"  Name="bk_dumpi.htm"  LongName="backup_dumpinfo.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_help_html"  Name="bk_help.htm"  LongName="backup_help.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_interactive_html"  Name="bk_inter.htm"  LongName="backup_interactive.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_jobs_html"  Name="bk_jobs.htm"  LongName="backup_jobs.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_kill_html"  Name="bk_kill.htm"  LongName="backup_kill.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_labeltape_html"  Name="bk_label.htm"  LongName="backup_labeltape.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_listdumps_html"  Name="bk_lsdum.htm"  LongName="backup_listdumps.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_listhosts_html"  Name="bk_listh.htm"  LongName="backup_listhosts.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_listvolsets_html"  Name="bk_listv.htm"  LongName="backup_listvolsets.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_quit_html"  Name="bk_quit.htm"  LongName="backup_quit.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_readlabel_html"  Name="bk_readl.htm"  LongName="backup_readlabel.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_restoredb_html"  Name="bk_resto.htm"  LongName="backup_restoredb.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_savedb_html"  Name="bk_saved.htm"  LongName="backup_savedb.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_scantape_html"  Name="bk_scant.htm"  LongName="backup_scantape.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_setexp_html"  Name="bk_setex.htm"  LongName="backup_setexp.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_status_html"  Name="bk_statu.htm"  LongName="backup_status.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_volinfo_html"  Name="bk_volin.htm"  LongName="backup_volinfo.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_volrestore_html"  Name="bk_volre.htm"  LongName="backup_volrestore.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_backup_volsetrestore_html"  Name="bk_volse.htm"  LongName="backup_volsetrestore.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_html"  Name="bos.htm"  LongName="bos.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bosserver_html"  Name="bosserve.htm"  LongName="bosserver.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_addhost_html"  Name="bos_addh.htm"  LongName="bos_addhost.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_addkey_html"  Name="bos_addk.htm"  LongName="bos_addkey.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_adduser_html"  Name="bos_addu.htm"  LongName="bos_adduser.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_apropos_html"  Name="bos_apro.htm"  LongName="bos_apropos.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_create_html"  Name="bos_crea.htm"  LongName="bos_create.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_delete_html"  Name="bos_dele.htm"  LongName="bos_delete.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_exec_html"  Name="bos_exec.htm"  LongName="bos_exec.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_getdate_html"  Name="bos_getd.htm"  LongName="bos_getdate.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_getlog_html"  Name="bos_getl.htm"  LongName="bos_getlog.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_getrestart_html"  Name="bos_getr.htm"  LongName="bos_getrestart.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_help_html"  Name="bos_help.htm"  LongName="bos_help.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_install_html"  Name="bos_inst.htm"  LongName="bos_install.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_listhosts_html"  Name="bos_lsho.htm"  LongName="bos_listhosts.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_listkeys_html"  Name="bos_lsky.htm"  LongName="bos_listkeys.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_listusers_html"  Name="bos_lsus.htm"  LongName="bos_listusers.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_prune_html"  Name="bos_prun.htm"  LongName="bos_prune.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_removehost_html"  Name="bos_rmho.htm"  LongName="bos_removehost.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_removekey_html"  Name="bos_rmky.htm"  LongName="bos_removekey.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_removeuser_html"  Name="bos_rmus.htm"  LongName="bos_removeuser.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_restart_html"  Name="bos_rest.htm"  LongName="bos_restart.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_salvage_html"  Name="bos_salv.htm"  LongName="bos_salvage.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_setauth_html"  Name="bos_seta.htm"  LongName="bos_setauth.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_setcellname_html"  Name="bos_setc.htm"  LongName="bos_setcellname.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_setrestart_html"  Name="bos_setr.htm"  LongName="bos_setrestart.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_shutdown_html"  Name="bos_shut.htm"  LongName="bos_shutdown.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_start_html"  Name="bos_star.htm"  LongName="bos_start.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_startup_html"  Name="bos_stup.htm"  LongName="bos_startup.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_status_html"  Name="bos_stat.htm"  LongName="bos_status.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_stop_html"  Name="bos_stop.htm"  LongName="bos_stop.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_uninstall_html"  Name="bos_unin.htm"  LongName="bos_uninstall.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_bos_util_html"  Name="bos_util.htm"  LongName="bos_util.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_buserver_html"  Name="buserver.htm"  LongName="buserver.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_butc_html"  Name="butc.htm"  LongName="butc.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_fileserver_html"  Name="fileserv.htm"  LongName="fileserver.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_fms_html"  Name="fms.htm"  LongName="fms.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_fstrace_html"  Name="fstrace.htm"  LongName="fstrace.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_fstrace_apropos_html"  Name="fst_apro.htm"  LongName="fstrace_apropos.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_fstrace_clear_html"  Name="fst_clea.htm"  LongName="fstrace_clear.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_fstrace_dump_html"  Name="fst_dump.htm"  LongName="fstrace_dump.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_fstrace_help_html"  Name="fst_help.htm"  LongName="fstrace_help.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_fstrace_lslog_html"  Name="fst_lslo.htm"  LongName="fstrace_lslog.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_fstrace_lsset_html"  Name="fst_lsse.htm"  LongName="fstrace_lsset.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_fstrace_setlog_html"  Name="fst_setl.htm"  LongName="fstrace_setlog.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_fstrace_setset_html"  Name="fst_sets.htm"  LongName="fstrace_setset.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_ka_forwarder_html"  Name="ka-forwa.htm"  LongName="ka-forwarder.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kadb_check_html"  Name="kadb_che.htm"  LongName="kadb_check.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_html"  Name="kas.htm"  LongName="kas.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kaserver_html"  Name="kaserver.htm"  LongName="kaserver.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_apropos_html"  Name="kas_apro.htm"  LongName="kas_apropos.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_create_html"  Name="kas_crea.htm"  LongName="kas_create.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_delete_html"  Name="kas_dele.htm"  LongName="kas_delete.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_examine_html"  Name="kas_exam.htm"  LongName="kas_examine.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_forgetticket_html"  Name="kas_forg.htm"  LongName="kas_forgetticket.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_help_html"  Name="kas_help.htm"  LongName="kas_help.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_interactive_html"  Name="kas_inte.htm"  LongName="kas_interactive.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_list_html"  Name="kas_list.htm"  LongName="kas_list.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_listtickets_html"  Name="kas_ltkt.htm"  LongName="kas_listtickets.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_noauthentication_html"  Name="kas_noau.htm"  LongName="kas_noauthentication.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_quit_html"  Name="kas_quit.htm"  LongName="kas_quit.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_setfields_html"  Name="kas_setf.htm"  LongName="kas_setfields.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_setpassword_html"  Name="kas_setp.htm"  LongName="kas_setpassword.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_statistics_html"  Name="kas_stat.htm"  LongName="kas_statistics.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_stringtokey_html"  Name="kas_stri.htm"  LongName="kas_stringtokey.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kas_unlock_html"  Name="kas_unlo.htm"  LongName="kas_unlock.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kdb_html"  Name="kdb.htm"  LongName="kdb.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_kpwvalid_html"  Name="kpwvalid.htm"  LongName="kpwvalid.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_package_html"  Name="package.htm"  LongName="package.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_prdb_check_html"  Name="prdb_che.htm"  LongName="prdb_check.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_ptserver_html"  Name="ptserver.htm"  LongName="ptserver.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_pt_util_html"  Name="pt_util.htm"  LongName="pt_util.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_read_tape_html"  Name="read_tap.htm"  LongName="read_tape.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_salvager_html"  Name="salvager.htm"  LongName="salvager.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_salvageserver_html"  Name="salvages.htm"  LongName="salvageserver.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_upclient_html"  Name="upclient.htm"  LongName="upclient.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_upserver_html"  Name="upserver.htm"  LongName="upserver.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_uss_html"  Name="uss.htm"  LongName="uss.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_uss_add_html"  Name="uss_add.htm"  LongName="uss_add.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_uss_apropos_html"  Name="uss_apro.htm"  LongName="uss_apropos.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_uss_bulk_html"  Name="uss_bulk.htm"  LongName="uss_bulk.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_uss_delete_html"  Name="uss_dele.htm"  LongName="uss_delete.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_uss_help_html"  Name="uss_help.htm"  LongName="uss_help.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_vldb_check_html"  Name="vldb_che.htm"  LongName="vldb_check.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_vldb_convert_html"  Name="vldb_con.htm"  LongName="vldb_convert.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_vlserver_html"  Name="vlserver.htm"  LongName="vlserver.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_voldump_html"  Name="voldump.htm"  LongName="voldump.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_volinfo_html"  Name="volinfo.htm"  LongName="volinfo.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_volserver_html"  Name="volserve.htm"  LongName="volserver.html"  DiskId="1"  />
+                             <File Id="file_CmdRef_8_xfs_size_check_html"  Name="xfs_size.htm"  LongName="xfs_size_check.html"  DiskId="1"  />
+                             </Component>
+                         </Directory> <!-- CmdRef_8 -->
+                         </Directory> <!-- CmdRef -->
+                     <?else?>
                          <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" />
***************
*** 685,690 ****
--- 1003,1009 ----
                                  <File Id="fileawqbg004_HTM_$(var.Language)" Name="awqbg004.htm" LongName="awqbg004.htm" DiskId="1" />
                              </Component>
                          </Directory> <!-- InstallGd -->
+                     <?endif?>
                          <Directory Id="dirSysAdminGd_$(var.Language)" Name="SysAd" LongName="SysAdminGd" SourceName="SysAdm" LongSource="SysAdminGd" src="$(var.SrcDir)\WINNT\doc\install\Documentation\$(var.Language)\html\SysAdminGd\">
                              <Component Id="cmp_Sys_Admin_Guide_$(var.Language)" Guid="$(var.DocHtmlSysAdminGuid)">
                                  <File Id="fileauagd000_HTM_$(var.Language)" Name="auagd.htm" LongName="auagd000.htm" KeyPath="yes" DiskId="1" />
***************
*** 726,738 ****
                          </Directory> <!-- Sys Admin guide -->
                          <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" />
-                                 <File Id="fileawrns003_HTM_$(var.Language)" Name="awrns~3.htm" LongName="awrns003.htm" DiskId="1" />
-                                 <File Id="fileawrns004_HTM_$(var.Language)" Name="awrns~4.htm" LongName="awrns004.htm" DiskId="1" />
-                                 <File Id="fileawrns005_HTM_$(var.Language)" Name="awrns~5.htm" LongName="awrns005.htm" DiskId="1" />
-                                 <File Id="fileawrns006_HTM_$(var.Language)" Name="awrns~6.htm" LongName="awrns006.htm" DiskId="1" />
-                                 <File Id="fileawrns007_HTM_$(var.Language)" Name="awrns~7.htm" LongName="awrns007.htm" DiskId="1" />
                                  <File Id="fileframes_HTM_$(var.Language)" Name="relnot~2.htm" LongName="relnotes-frames.htm" DiskId="1" />
                                  <File Id="filelogo_HTM_$(var.Language)" Name="logo.htm" LongName="logo.htm" DiskId="1" />
                                  <File Id="filerelnotes_HTM_$(var.Language)" Name="relnotes.htm" LongName="relnotes.htm" DiskId="1" />
--- 1045,1050 ----
Index: openafs/src/WINNT/install/wix/language_config.wxi
diff -c openafs/src/WINNT/install/wix/language_config.wxi:1.5 openafs/src/WINNT/install/wix/language_config.wxi:1.5.2.1
*** openafs/src/WINNT/install/wix/language_config.wxi:1.5	Mon Mar 20 12:20:01 2006
--- openafs/src/WINNT/install/wix/language_config.wxi	Sat Jun 28 21:22:31 2008
***************
*** 61,66 ****
--- 61,69 ----
      <?define DocHtmlIndexGuid="B656CA5A-5179-42D8-8972-2F128AEDE751"?>
      <?define DocHtmlGuid="C9595172-72DF-4F30-8C43-C16583CFB8B1"?>
      <?define DocHtmlCmdRefGuid="94168F07-82F6-442A-BE10-21EF72CB741D"?>
+     <?define DocHtmlCmdRef1Guid="440BC8BA-93ED-4202-9684-D893B8A3B2E3"?>
+     <?define DocHtmlCmdRef5Guid="034AF6E4-2295-4107-8D78-A49AB3BC74A8"?>
+     <?define DocHtmlCmdRef8Guid="CCD33334-20E3-4b2d-AD14-097961BFF0F6"?>
      <?define DocHtmlInstallGuid="921E151E-9FD2-49A8-B297-0222E22ECAC7"?>
      <?define DocHtmlSysAdminGuid="F82AD828-C412-4211-88D7-DF18D5C79DBA"?>
      <?define DocHtmlRelNotesGuid="CC369D09-B786-412F-B832-720AC06CC3BC"?>
Index: openafs/src/WINNT/install/wix/openafs.wxs
diff -c openafs/src/WINNT/install/wix/openafs.wxs:1.13.4.2 openafs/src/WINNT/install/wix/openafs.wxs:1.13.4.4
*** openafs/src/WINNT/install/wix/openafs.wxs:1.13.4.2	Thu May  3 19:13:31 2007
--- openafs/src/WINNT/install/wix/openafs.wxs	Mon Jun 30 09:40:22 2008
***************
*** 87,92 ****
--- 87,103 ----
          <Binary
  		 Id="BIN_afsCustom"
  		 src="$(var.MediaDllDir)afscustom.dll"/>
+     <Binary
+        Id="BIN_idndl.exe"
+        src="$(var.IDNMRedistDir)\idndl.$(var.Arch).exe" />
+     <CustomAction
+        Id="InstallIDNMRedistributable"
+        BinaryKey="BIN_idndl.exe"
+        ExeCommand="/quiet /norestart"
+        Execute="deferred"
+        Impersonate="no"
+        />
+ 
  	<?ifdef UseDllLoopbackInstaller?>
          <CustomAction
           Id="InstallLoopback"
***************
*** 224,229 ****
--- 235,241 ----
              <Custom Action="RollbackNetProvider" After="WriteRegistryValues">&amp;feaClient=3</Custom>
  			<Custom Action="InstallNetProvider" After="RollbackNetProvider">&amp;feaClient=3</Custom>
  			<Custom Action="RemoveNetProvider" After="InstallNetProvider">&amp;feaClient=2</Custom>
+       <Custom Action="InstallIDNMRedistributable" After="WriteRegistryValues">!feaClient=2 And &amp;feaClient=3 And (VersionNT=501 Or VersionNT=502)</Custom>
  			<Custom Action="ConfigureClient" After="InstallServices">&amp;feaClient=3</Custom>
  			<Custom Action="ConfigureServer" After="ConfigureClient">&amp;feaServer=3</Custom>
  			<!-- <Custom Action="RemoveAFSAdminGroup" Before="">&amp;feaClient=2</Custom> -->
Index: openafs/src/WINNT/install/wix/runtime.wxi
diff -c openafs/src/WINNT/install/wix/runtime.wxi:1.2 openafs/src/WINNT/install/wix/runtime.wxi:1.2.4.1
*** openafs/src/WINNT/install/wix/runtime.wxi:1.2	Sun Nov 20 20:56:27 2005
--- openafs/src/WINNT/install/wix/runtime.wxi	Thu Jun 26 22:06:21 2008
***************
*** 1,4 ****
! ï»¿<?xml version="1.0"?> 
  <Include>
      <?if $(env.AFSVER_CL) = "1400" ?>
  		<MergeRef Id="MSVCRT8MEM"/>
--- 1,4 ----
! <?xml version="1.0"?> 
  <Include>
      <?if $(env.AFSVER_CL) = "1400" ?>
  		<MergeRef Id="MSVCRT8MEM"/>
Index: openafs/src/WINNT/install/wix/custom/NTMakefile
diff -c openafs/src/WINNT/install/wix/custom/NTMakefile:1.5.4.1 openafs/src/WINNT/install/wix/custom/NTMakefile:1.5.4.2
*** openafs/src/WINNT/install/wix/custom/NTMakefile:1.5.4.1	Wed Sep 19 13:58:47 2007
--- openafs/src/WINNT/install/wix/custom/NTMakefile	Wed Jul  2 08:49:02 2008
***************
*** 1,4 ****
! # rcsid : $Id: NTMakefile,v 1.5.4.1 2007/09/19 17:58:47 jaltman Exp $
  
  RELDIR=WINNT\install\wix\custom
  !INCLUDE ..\..\..\..\config\NTMakefile.$(SYS_NAME)
--- 1,4 ----
! # rcsid : $Id: NTMakefile,v 1.5.4.2 2008/07/02 12:49:02 jaltman Exp $
  
  RELDIR=WINNT\install\wix\custom
  !INCLUDE ..\..\..\..\config\NTMakefile.$(SYS_NAME)
***************
*** 36,41 ****
--- 36,42 ----
  	$(LINK) -DLL $(DLLEXPORTS) \
  	  -OUT:$@ $** $(DLLLIBFILES)
          $(_VC_MANIFEST_EMBED_DLL)
+         $(CODESIGN_USERLAND)
  
  install: $(DLLFILE)
  
Index: openafs/src/WINNT/install/wix/lang/en_US/strings.wxl
diff -c openafs/src/WINNT/install/wix/lang/en_US/strings.wxl:1.6.2.2 openafs/src/WINNT/install/wix/lang/en_US/strings.wxl:1.6.2.3
*** openafs/src/WINNT/install/wix/lang/en_US/strings.wxl:1.6.2.2	Fri Aug 10 08:37:59 2007
--- openafs/src/WINNT/install/wix/lang/en_US/strings.wxl	Thu Jun 26 22:06:22 2008
***************
*** 61,66 ****
--- 61,67 ----
  	<String Id="ActConfigureClient">Configuring the AFS client service</String>
  	<String Id="ActConfigureServer">Configuring the AFS server service</String>
  	<String Id="ActRemoveNsisInstallation">Removing existing installation of OpenAFS</String>
+         <String Id="ActInstallIDNMRedistributable">Installing Microsoft Internationalized Domain Name Mitigation APIs</String>
  	
  	<String Id="StrNsisAbortReason">Installation of OpenAFS for Windows was prematurely terminated because OpenAFS [NSISVERSION] was already installed.</String>
  	<String Id="StrUninstallDesc">Uninstall OpenAFS from the local machine.</String>
Index: openafs/src/WINNT/install/wix/lang/en_US/ui.wxi
diff -c openafs/src/WINNT/install/wix/lang/en_US/ui.wxi:1.10.4.2 openafs/src/WINNT/install/wix/lang/en_US/ui.wxi:1.10.4.3
*** openafs/src/WINNT/install/wix/lang/en_US/ui.wxi:1.10.4.2	Wed Sep  6 01:10:49 2006
--- openafs/src/WINNT/install/wix/lang/en_US/ui.wxi	Thu Jun 26 22:06:22 2008
***************
*** 1046,1052 ****
  	  <ProgressText Action="ConfigureClient">$(loc.ActConfigureClient)</ProgressText>
  	  <ProgressText Action="ConfigureServer">$(loc.ActConfigureServer)</ProgressText>
  	  <ProgressText Action="RemoveNsisInstallation">$(loc.ActRemoveNsisInstallation)</ProgressText>
! 	  
  	  
        <AdminUISequence>
          <Show Dialog="FatalError" OnExit="error" />
--- 1046,1052 ----
  	  <ProgressText Action="ConfigureClient">$(loc.ActConfigureClient)</ProgressText>
  	  <ProgressText Action="ConfigureServer">$(loc.ActConfigureServer)</ProgressText>
  	  <ProgressText Action="RemoveNsisInstallation">$(loc.ActRemoveNsisInstallation)</ProgressText>
! 	  <ProgressText Action="InstallIDNMRedistributable">$(loc.ActInstallIDNMRedistributable)</ProgressText>
  	  
        <AdminUISequence>
          <Show Dialog="FatalError" OnExit="error" />
Index: openafs/src/WINNT/install/wix/uninstall/NTMakefile
diff -c openafs/src/WINNT/install/wix/uninstall/NTMakefile:1.3 openafs/src/WINNT/install/wix/uninstall/NTMakefile:1.3.4.1
*** openafs/src/WINNT/install/wix/uninstall/NTMakefile:1.3	Sun Nov 20 20:56:31 2005
--- openafs/src/WINNT/install/wix/uninstall/NTMakefile	Wed Jul  2 08:49:03 2008
***************
*** 19,27 ****
  $(OUT)\uninstall.res: uninstall.rc AFS_component_version_number.h
  
  $(UNINSTALL): $(OBJECTS) $(OUT)\uninstall.res
!   $(EXECONLINK) msi.lib
          $(_VC_MANIFEST_EMBED_EXE)
!   $(EXEPREP)
  
  install: $(UNINSTALL)
  
--- 19,28 ----
  $(OUT)\uninstall.res: uninstall.rc AFS_component_version_number.h
  
  $(UNINSTALL): $(OBJECTS) $(OUT)\uninstall.res
!         $(EXECONLINK) msi.lib
          $(_VC_MANIFEST_EMBED_EXE)
!         $(EXEPREP)
!         $(CODESIGN_USERLAND)
  
  install: $(UNINSTALL)
  
Index: openafs/src/WINNT/license/NTMakefile
diff -c openafs/src/WINNT/license/NTMakefile:1.5.4.2 openafs/src/WINNT/license/NTMakefile:1.5.4.3
*** openafs/src/WINNT/license/NTMakefile:1.5.4.2	Wed Sep 19 13:58:48 2007
--- openafs/src/WINNT/license/NTMakefile	Wed Jul  2 08:49:03 2008
***************
*** 32,37 ****
--- 32,38 ----
  	$(EXECONLINK) $(EXELIBS)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  install : $(EXEFILE) lang
Index: openafs/src/WINNT/netidmgr_plugin/NTMakefile
diff -c openafs/src/WINNT/netidmgr_plugin/NTMakefile:1.1.2.7 openafs/src/WINNT/netidmgr_plugin/NTMakefile:1.1.2.8
*** openafs/src/WINNT/netidmgr_plugin/NTMakefile:1.1.2.7	Tue Feb 12 09:02:35 2008
--- openafs/src/WINNT/netidmgr_plugin/NTMakefile	Wed Jul  2 08:49:04 2008
***************
*** 148,153 ****
--- 148,154 ----
  	$(DLLGUILINK) $(LIBFILES) $(SDKLIBFILES)
  	$(_VC_MANIFEST_EMBED_DLL)
  	$(_VC_MANIFEST_CLEAN)
+         $(CODESIGN_USERLAND)
  
  dummy:
  
Index: openafs/src/WINNT/pthread/NTMakefile
diff -c openafs/src/WINNT/pthread/NTMakefile:1.10 openafs/src/WINNT/pthread/NTMakefile:1.10.4.1
*** openafs/src/WINNT/pthread/NTMakefile:1.10	Sun Nov 20 20:56:33 2005
--- openafs/src/WINNT/pthread/NTMakefile	Wed Jul  2 08:49:04 2008
***************
*** 31,36 ****
--- 31,37 ----
  	$(DLLCONLINK) /DEF:pthread.def
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # Build Windows 95 version of afspthread.dll
Index: openafs/src/WINNT/pthread/test/NTMakefile
diff -c openafs/src/WINNT/pthread/test/NTMakefile:1.6 openafs/src/WINNT/pthread/test/NTMakefile:1.6.4.1
*** openafs/src/WINNT/pthread/test/NTMakefile:1.6	Sun Nov 20 20:56:34 2005
--- openafs/src/WINNT/pthread/test/NTMakefile	Wed Jul  2 08:49:05 2008
***************
*** 14,27 ****
--- 14,30 ----
  $(OUT)\ptest.exe: $(OUT)\ptest.obj $(DESTDIR)/lib/afspthread.lib $(DESTDIR)/lib/afs/afsutil.lib
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\tsd.exe: $(OUT)\tsd.obj $(DESTDIR)/lib/afspthread.lib $(DESTDIR)/lib/afs/afsutil.lib
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\native.exe: $(OUT)\native.obj $(DESTDIR)/lib/afspthread.lib $(DESTDIR)/lib/afs/afsutil.lib
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  clean::
  	$(DEL) $(DESTDIR)/lib/afspthread.lib
Index: openafs/src/afs/afs_analyze.c
diff -c openafs/src/afs/afs_analyze.c:1.22.14.6.2.1 openafs/src/afs/afs_analyze.c:1.22.14.8
*** openafs/src/afs/afs_analyze.c:1.22.14.6.2.1	Fri May 23 10:25:34 2008
--- openafs/src/afs/afs_analyze.c	Sat Jun 28 23:39:12 2008
***************
*** 14,20 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_analyze.c,v 1.22.14.6.2.1 2008/05/23 14:25:34 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
--- 14,20 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_analyze.c,v 1.22.14.8 2008/06/29 03:39:12 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
***************
*** 247,266 ****
      afs_int32 i;
      afs_int32 serversleft = 0;
  
!     if (afid)
  	tvp = afs_FindVolume(afid, READ_LOCK);
!     if (tvp) {
! 	for (i = 0; i < MAXHOSTS; i++) {
! 	    if (tvp->serverHost[i] == tsp) {
! 		areq->skipserver[i] = 1;
! 	    }
! 	    if (tvp->serverHost[i] &&
! 		!(tvp->serverHost[i]->addr->sa_flags & 
! 		  SRVR_ISDOWN)) {
! 		areq->skipserver[i] = 1;
  	    }
  	}
- 	afs_PutVolume(tvp, READ_LOCK);
      }
      for (i = 0; i < MAXHOSTS; i++) {
  	if (areq->skipserver[i] == 0) {
--- 247,267 ----
      afs_int32 i;
      afs_int32 serversleft = 0;
  
!     if (afid) {
  	tvp = afs_FindVolume(afid, READ_LOCK);
! 	if (tvp) {
! 	    for (i = 0; i < MAXHOSTS; i++) {
! 		if (tvp->serverHost[i] == tsp) {
! 		    areq->skipserver[i] = 1;
! 		}
! 		if (tvp->serverHost[i] &&
! 		    !(tvp->serverHost[i]->addr->sa_flags & 
! 		      SRVR_ISDOWN)) {
! 		    areq->skipserver[i] = 1;
! 		}
  	    }
+ 	    afs_PutVolume(tvp, READ_LOCK);
  	}
      }
      for (i = 0; i < MAXHOSTS; i++) {
  	if (areq->skipserver[i] == 0) {
Index: openafs/src/afs/afs_conn.c
diff -c openafs/src/afs/afs_conn.c:1.14.8.2.2.1 openafs/src/afs/afs_conn.c:1.14.8.3
*** openafs/src/afs/afs_conn.c:1.14.8.2.2.1	Fri May 23 10:25:34 2008
--- openafs/src/afs/afs_conn.c	Fri May 23 10:25:15 2008
***************
*** 14,20 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_conn.c,v 1.14.8.2.2.1 2008/05/23 14:25:34 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
--- 14,20 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_conn.c,v 1.14.8.3 2008/05/23 14:25:15 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
Index: openafs/src/afs/afs_daemons.c
diff -c openafs/src/afs/afs_daemons.c:1.43.2.2.2.3 openafs/src/afs/afs_daemons.c:1.43.2.5
*** openafs/src/afs/afs_daemons.c:1.43.2.2.2.3	Fri May 23 10:25:34 2008
--- openafs/src/afs/afs_daemons.c	Fri May 23 10:25:15 2008
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_daemons.c,v 1.43.2.2.2.3 2008/05/23 14:25:34 shadow Exp $");
  
  #ifdef AFS_AIX51_ENV
  #define __FULL_PROTO
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_daemons.c,v 1.43.2.5 2008/05/23 14:25:15 shadow Exp $");
  
  #ifdef AFS_AIX51_ENV
  #define __FULL_PROTO
Index: openafs/src/afs/afs_dcache.c
diff -c openafs/src/afs/afs_dcache.c:1.64.4.7.2.1 openafs/src/afs/afs_dcache.c:1.64.4.8
*** openafs/src/afs/afs_dcache.c:1.64.4.7.2.1	Fri May 23 10:25:34 2008
--- openafs/src/afs/afs_dcache.c	Fri May 23 10:25:15 2008
***************
*** 14,20 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_dcache.c,v 1.64.4.7.2.1 2008/05/23 14:25:34 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
--- 14,20 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_dcache.c,v 1.64.4.8 2008/05/23 14:25:15 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
Index: openafs/src/afs/afs_disconnected.c
diff -c openafs/src/afs/afs_disconnected.c:1.2.4.2 openafs/src/afs/afs_disconnected.c:1.2.2.2
*** openafs/src/afs/afs_disconnected.c:1.2.4.2	Fri May 23 10:25:34 2008
--- openafs/src/afs/afs_disconnected.c	Fri May 23 10:25:15 2008
***************
*** 7,13 ****
  #include <afsconfig.h>
  #include "afs/param.h"
   
! RCSID("$Header: /cvs/openafs/src/afs/afs_disconnected.c,v 1.2.4.2 2008/05/23 14:25:34 shadow Exp $");
   
  #include "afs/sysincludes.h"
  #include "afsincludes.h"
--- 7,13 ----
  #include <afsconfig.h>
  #include "afs/param.h"
   
! RCSID("$Header: /cvs/openafs/src/afs/afs_disconnected.c,v 1.2.2.2 2008/05/23 14:25:15 shadow Exp $");
   
  #include "afs/sysincludes.h"
  #include "afsincludes.h"
Index: openafs/src/afs/afs_icl.c
diff -c openafs/src/afs/afs_icl.c:1.1.2.3.4.1 openafs/src/afs/afs_icl.c:1.1.2.4
*** openafs/src/afs/afs_icl.c:1.1.2.3.4.1	Tue May 20 15:52:29 2008
--- openafs/src/afs/afs_icl.c	Tue May 20 15:50:41 2008
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_icl.c,v 1.1.2.3.4.1 2008/05/20 19:52:29 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_icl.c,v 1.1.2.4 2008/05/20 19:50:41 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/afs_init.c
diff -c openafs/src/afs/afs_init.c:1.37.4.5.2.2 openafs/src/afs/afs_init.c:1.37.4.7
*** openafs/src/afs/afs_init.c:1.37.4.5.2.2	Thu Jun 12 13:24:51 2008
--- openafs/src/afs/afs_init.c	Thu Jun 12 13:24:38 2008
***************
*** 17,23 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_init.c,v 1.37.4.5.2.2 2008/06/12 17:24:51 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
--- 17,23 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_init.c,v 1.37.4.7 2008/06/12 17:24:38 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
Index: openafs/src/afs/afs_osi.h
diff -c openafs/src/afs/afs_osi.h:1.42.4.5 openafs/src/afs/afs_osi.h:1.42.4.6
*** openafs/src/afs/afs_osi.h:1.42.4.5	Thu Feb  8 17:39:29 2007
--- openafs/src/afs/afs_osi.h	Tue Jul  1 16:56:35 2008
***************
*** 150,164 ****
  #endif
  #endif
  
- #ifdef AFS_SGI65_ENV
- #define	gop_lookupname(fnamep,segflg,followlink,compvpp) \
-              lookupname((fnamep),(segflg),(followlink),NULL,(compvpp),\
- 			NULL)
- #else
- #define	gop_lookupname(fnamep,segflg,followlink,compvpp) \
-              lookupname((fnamep),(segflg),(followlink),NULL,(compvpp))
- #endif
- 
  /*
   * In IRIX 6.5 we cannot have DEBUG turned on since certain
   * system-defined structures are a different size with DEBUG on, the
--- 150,155 ----
Index: openafs/src/afs/afs_osi_alloc.c
diff -c openafs/src/afs/afs_osi_alloc.c:1.11.6.5.2.1 openafs/src/afs/afs_osi_alloc.c:1.11.6.6
*** openafs/src/afs/afs_osi_alloc.c:1.11.6.5.2.1	Tue May 20 15:52:29 2008
--- openafs/src/afs/afs_osi_alloc.c	Tue May 20 15:50:41 2008
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_osi_alloc.c,v 1.11.6.5.2.1 2008/05/20 19:52:29 shadow Exp $");
  
  
  
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_osi_alloc.c,v 1.11.6.6 2008/05/20 19:50:41 shadow Exp $");
  
  
  
Index: openafs/src/afs/afs_pag_call.c
diff -c openafs/src/afs/afs_pag_call.c:1.1.2.2 openafs/src/afs/afs_pag_call.c:1.1.2.3
*** openafs/src/afs/afs_pag_call.c:1.1.2.2	Mon Jul 31 17:27:38 2006
--- openafs/src/afs/afs_pag_call.c	Mon Jun 30 23:35:23 2008
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_pag_call.c,v 1.1.2.2 2006/07/31 21:27:38 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_pag_call.c,v 1.1.2.3 2008/07/01 03:35:23 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 50,55 ****
--- 50,56 ----
  char *afs_sysnamelist[MAXNUMSYSNAMES];
  int afs_sysnamecount = 0;
  int afs_sysnamegen = 0;
+ afs_int32 afs_showflags = GAGUSER | GAGCONSOLE; /* show all messages */
  
  
  void afs_Daemon(void)
Index: openafs/src/afs/afs_pioctl.c
diff -c openafs/src/afs/afs_pioctl.c:1.110.2.15.2.3 openafs/src/afs/afs_pioctl.c:1.110.2.18
*** openafs/src/afs/afs_pioctl.c:1.110.2.15.2.3	Fri May 23 10:25:34 2008
--- openafs/src/afs/afs_pioctl.c	Fri May 23 10:25:15 2008
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_pioctl.c,v 1.110.2.15.2.3 2008/05/23 14:25:34 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #ifdef AFS_OBSD_ENV
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_pioctl.c,v 1.110.2.18 2008/05/23 14:25:15 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #ifdef AFS_OBSD_ENV
Index: openafs/src/afs/afs_prototypes.h
diff -c openafs/src/afs/afs_prototypes.h:1.74.2.14.2.2 openafs/src/afs/afs_prototypes.h:1.74.2.17
*** openafs/src/afs/afs_prototypes.h:1.74.2.14.2.2	Fri May 23 10:25:34 2008
--- openafs/src/afs/afs_prototypes.h	Fri Jul 18 10:54:34 2008
***************
*** 268,274 ****
  extern int afs_WriteDCache(register struct dcache *adc, int atime);
  extern int afs_wakeup(register struct vcache *avc);
  extern int afs_InitCacheFile(char *afile, ino_t ainode);
! extern int afs_DCacheHasAllChunks(struct vcache *avc);
  
  /* afs_disconnected.c */
  
--- 268,274 ----
  extern int afs_WriteDCache(register struct dcache *adc, int atime);
  extern int afs_wakeup(register struct vcache *avc);
  extern int afs_InitCacheFile(char *afile, ino_t ainode);
! extern int afs_DCacheMissingChunks(struct vcache *avc);
  
  /* afs_disconnected.c */
  
Index: openafs/src/afs/afs_segments.c
diff -c openafs/src/afs/afs_segments.c:1.22.8.1.2.1 openafs/src/afs/afs_segments.c:1.22.8.2
*** openafs/src/afs/afs_segments.c:1.22.8.1.2.1	Fri May 23 10:25:34 2008
--- openafs/src/afs/afs_segments.c	Fri May 23 10:25:16 2008
***************
*** 14,20 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_segments.c,v 1.22.8.1.2.1 2008/05/23 14:25:34 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
--- 14,20 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_segments.c,v 1.22.8.2 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
Index: openafs/src/afs/afs_server.c
diff -c openafs/src/afs/afs_server.c:1.43.4.6.2.1 openafs/src/afs/afs_server.c:1.43.4.7
*** openafs/src/afs/afs_server.c:1.43.4.6.2.1	Fri May 23 10:25:34 2008
--- openafs/src/afs/afs_server.c	Fri May 23 10:25:16 2008
***************
*** 33,39 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_server.c,v 1.43.4.6.2.1 2008/05/23 14:25:34 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
--- 33,39 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_server.c,v 1.43.4.7 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
Index: openafs/src/afs/afs_util.c
diff -c openafs/src/afs/afs_util.c:1.28.2.7 openafs/src/afs/afs_util.c:1.28.2.8
*** openafs/src/afs/afs_util.c:1.28.2.7	Sun Feb 10 23:00:47 2008
--- openafs/src/afs/afs_util.c	Mon Jun 30 23:35:23 2008
***************
*** 16,22 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_util.c,v 1.28.2.7 2008/02/11 04:00:47 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
--- 16,22 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_util.c,v 1.28.2.8 2008/07/01 03:35:23 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
***************
*** 197,275 ****
  
  
  
- /* * * * * * *
-  * this code badly needs to be cleaned up...  too many ugly ifdefs.
-  * XXX
-  */
- #if 0
- void
- afs_warn(char *a, long b, long c, long d, long e, long f, long g, long h,
- 	 long i, long j)
- #else
- void
- afs_warn(a, b, c, d, e, f, g, h, i, j)
-      char *a;
- #if defined( AFS_USE_VOID_PTR)
-      void *b, *c, *d, *e, *f, *g, *h, *i, *j;
- #else
-      long b, c, d, e, f, g, h, i, j;
- #endif
- #endif
- {
-     AFS_STATCNT(afs_warn);
- 
-     if (afs_showflags & GAGCONSOLE) {
- #if defined(AFS_AIX_ENV)
- 	struct file *fd;
- 
- 	/* cf. console_printf() in oncplus/kernext/nfs/serv/shared.c */
- 	if (fp_open
- 	    ("/dev/console", O_WRONLY | O_NOCTTY | O_NDELAY, 0666, 0, FP_SYS,
- 	     &fd) == 0) {
- 	    char buf[1024];
- 	    ssize_t len;
- 	    ssize_t count;
- 
- 	    sprintf(buf, a, b, c, d, e, f, g, h, i, j);
- 	    len = strlen(buf);
- 	    fp_write(fd, buf, len, 0, UIO_SYSSPACE, &count);
- 	    fp_close(fd);
- 	}
- #else
- 	printf(a, b, c, d, e, f, g, h, i, j);
- #endif
-     }
- }
- 
- #if 0
- void
- afs_warnuser(char *a, long b, long c, long d, long e, long f, long g, long h,
- 	     long i, long j)
- #else
- void
- afs_warnuser(a, b, c, d, e, f, g, h, i, j)
-      char *a;
-      long b, c, d, e, f, g, h, i, j;
- #endif
- {
-     AFS_STATCNT(afs_warnuser);
-     if (afs_showflags & GAGUSER) {
- #ifdef AFS_GLOBAL_SUNLOCK
- 	int haveGlock = ISAFS_GLOCK();
- 	if (haveGlock)
- 	    AFS_GUNLOCK();
- #endif /* AFS_GLOBAL_SUNLOCK */
- 
- 	uprintf(a, b, c, d, e, f, g, h, i, j);
- 
- #ifdef AFS_GLOBAL_SUNLOCK
- 	if (haveGlock)
- 	    AFS_GLOCK();
- #endif /* AFS_GLOBAL_SUNLOCK */
-     }
- }
- 
- 
  /* run everywhere, checking locks */
  void
  afs_CheckLocks(void)
--- 197,202 ----
Index: openafs/src/afs/afs_vcache.c
diff -c openafs/src/afs/afs_vcache.c:1.114.2.7.2.2 openafs/src/afs/afs_vcache.c:1.114.2.9
*** openafs/src/afs/afs_vcache.c:1.114.2.7.2.2	Fri May 23 10:25:34 2008
--- openafs/src/afs/afs_vcache.c	Fri May 23 10:25:16 2008
***************
*** 39,45 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_vcache.c,v 1.114.2.7.2.2 2008/05/23 14:25:34 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
--- 39,45 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_vcache.c,v 1.114.2.9 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/*Standard vendor system headers */
  #include "afsincludes.h"	/*AFS-based standard headers */
Index: openafs/src/afs/afs_volume.c
diff -c openafs/src/afs/afs_volume.c:1.31.2.5.2.1 openafs/src/afs/afs_volume.c:1.31.2.6
*** openafs/src/afs/afs_volume.c:1.31.2.5.2.1	Fri May 23 10:25:34 2008
--- openafs/src/afs/afs_volume.c	Fri May 23 10:25:16 2008
***************
*** 19,25 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_volume.c,v 1.31.2.5.2.1 2008/05/23 14:25:34 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
--- 19,25 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/afs_volume.c,v 1.31.2.6 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/stds.h"
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
Index: openafs/src/afs/afs_warn.c
diff -c /dev/null openafs/src/afs/afs_warn.c:1.1.2.2
*** /dev/null	Fri Jul 18 12:43:15 2008
--- openafs/src/afs/afs_warn.c	Mon Jun 30 23:35:23 2008
***************
*** 0 ****
--- 1,126 ----
+ /*
+  * Copyright 2000, International Business Machines Corporation and others.
+  * All Rights Reserved.
+  * 
+  * This software has been released under the terms of the IBM Public
+  * License.  For details, see the LICENSE file in the top-level source
+  * directory or online at http://www.openafs.org/dl/license10.html
+  */
+ 
+ /*
+  * afs_warn.c - afs_warn
+  *
+  * Implements: afs_warn, afs_warnuser
+  */
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/afs_warn.c,v 1.1.2.2 2008/07/01 03:35:23 shadow Exp $");
+ 
+ #include "afs/stds.h"
+ #include "afs/sysincludes.h"	/* Standard vendor system headers */
+ 
+ #if !defined(UKERNEL)
+ #if !defined(AFS_LINUX20_ENV)
+ #include <net/if.h>
+ #endif
+ #include <netinet/in.h>
+ 
+ #ifdef AFS_SGI62_ENV
+ #include "h/hashing.h"
+ #endif
+ #if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV)
+ #include <netinet/in_var.h>
+ #endif /* ! AFS_HPUX110_ENV */
+ #endif /* !defined(UKERNEL) */
+ 
+ #include "afsincludes.h"	/* Afs-based standard headers */
+ #include "afs/afs_stats.h"	/* afs statistics */
+ 
+ #if	defined(AFS_SUN56_ENV)
+ #include <inet/led.h>
+ #include <inet/common.h>
+ #if     defined(AFS_SUN58_ENV)
+ #include <netinet/ip6.h>
+ #endif
+ #include <inet/ip.h>
+ #endif
+ 
+ #if	defined(AFS_AIX_ENV)
+ #include <sys/fp_io.h>
+ #endif
+ 
+ 
+ 
+ /* * * * * * *
+  * this code badly needs to be cleaned up...  too many ugly ifdefs.
+  * XXX
+  */
+ #if 0
+ void
+ afs_warn(char *a, long b, long c, long d, long e, long f, long g, long h,
+ 	 long i, long j)
+ #else
+ void
+ afs_warn(a, b, c, d, e, f, g, h, i, j)
+      char *a;
+ #if defined( AFS_USE_VOID_PTR)
+      void *b, *c, *d, *e, *f, *g, *h, *i, *j;
+ #else
+      long b, c, d, e, f, g, h, i, j;
+ #endif
+ #endif
+ {
+     AFS_STATCNT(afs_warn);
+ 
+     if (afs_showflags & GAGCONSOLE) {
+ #if defined(AFS_AIX_ENV)
+ 	struct file *fd;
+ 
+ 	/* cf. console_printf() in oncplus/kernext/nfs/serv/shared.c */
+ 	if (fp_open
+ 	    ("/dev/console", O_WRONLY | O_NOCTTY | O_NDELAY, 0666, 0, FP_SYS,
+ 	     &fd) == 0) {
+ 	    char buf[1024];
+ 	    ssize_t len;
+ 	    ssize_t count;
+ 
+ 	    sprintf(buf, a, b, c, d, e, f, g, h, i, j);
+ 	    len = strlen(buf);
+ 	    fp_write(fd, buf, len, 0, UIO_SYSSPACE, &count);
+ 	    fp_close(fd);
+ 	}
+ #else
+ 	printf(a, b, c, d, e, f, g, h, i, j);
+ #endif
+     }
+ }
+ 
+ #if 0
+ void
+ afs_warnuser(char *a, long b, long c, long d, long e, long f, long g, long h,
+ 	     long i, long j)
+ #else
+ void
+ afs_warnuser(a, b, c, d, e, f, g, h, i, j)
+      char *a;
+      long b, c, d, e, f, g, h, i, j;
+ #endif
+ {
+     AFS_STATCNT(afs_warnuser);
+     if (afs_showflags & GAGUSER) {
+ #ifdef AFS_GLOBAL_SUNLOCK
+ 	int haveGlock = ISAFS_GLOCK();
+ 	if (haveGlock)
+ 	    AFS_GUNLOCK();
+ #endif /* AFS_GLOBAL_SUNLOCK */
+ 
+ 	uprintf(a, b, c, d, e, f, g, h, i, j);
+ 
+ #ifdef AFS_GLOBAL_SUNLOCK
+ 	if (haveGlock)
+ 	    AFS_GLOCK();
+ #endif /* AFS_GLOBAL_SUNLOCK */
+     }
+ }
Index: openafs/src/afs/IRIX/osi_machdep.h
diff -c openafs/src/afs/IRIX/osi_machdep.h:1.10.2.2 openafs/src/afs/IRIX/osi_machdep.h:1.10.2.3
*** openafs/src/afs/IRIX/osi_machdep.h:1.10.2.2	Thu Nov  9 19:11:06 2006
--- openafs/src/afs/IRIX/osi_machdep.h	Tue Jul  1 16:56:37 2008
***************
*** 29,34 ****
--- 29,37 ----
  /* This gets redefined from ucred to cred in osi_vfs.h, just do it right */
  #define	AFS_UCRED	cred
  
+ #undef gop_lookupname
+ #define gop_lookupname(fnamep,segflg,followlink,compvpp) lookupname((fnamep),(segflg),(followlink),NULL,(compvpp), NULL)
+ 
  #define osi_vnhold(avc, r)  do { VN_HOLD(AFSTOV(avc)); } while(0)
  
  #undef afs_osi_Alloc_NoSleep
Index: openafs/src/afs/LINUX/osi_export.c
diff -c openafs/src/afs/LINUX/osi_export.c:1.1.2.3 openafs/src/afs/LINUX/osi_export.c:1.1.2.4
*** openafs/src/afs/LINUX/osi_export.c:1.1.2.3	Wed Oct 24 11:45:04 2007
--- openafs/src/afs/LINUX/osi_export.c	Mon Jun 30 23:35:23 2008
***************
*** 15,21 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_export.c,v 1.1.2.3 2007/10/24 15:45:04 shadow Exp $");
  
  #include <linux/module.h> /* early to avoid printf->printk mapping */
  #include <linux/fs.h>
--- 15,21 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_export.c,v 1.1.2.4 2008/07/01 03:35:23 shadow Exp $");
  
  #include <linux/module.h> /* early to avoid printf->printk mapping */
  #include <linux/fs.h>
***************
*** 30,35 ****
--- 30,39 ----
  /* #define OSI_EXPORT_DEBUG */
  
  extern struct dentry_operations afs_dentry_operations;
+ #if defined(NEW_EXPORT_OPS)
+ static struct dentry *afs_export_get_dentry(struct super_block *sb,
+ 					    void *inump);
+ #endif
  
  struct get_name_data {
      char *name;
***************
*** 154,167 ****
--- 158,180 ----
      return AFSFH_NET_CELLFID;
  }
  
+ #if defined(NEW_EXPORT_OPS)
+ static struct dentry *afs_fh_to_dentry(struct super_block *sb, struct fid *fh_fid,
+ 				    int fh_len, int fh_type)
+ #else
  static struct dentry *afs_decode_fh(struct super_block *sb, __u32 *fh,
  				    int fh_len, int fh_type,
  				    int (*acceptable)(void *, struct dentry *),
  				    void *context)
+ #endif
  {
      struct VenusFid fid;
      struct cell *tc;
      struct dentry *result;
+ #if defined(NEW_EXPORT_OPS)
+     __u32 *fh = (__u32 *)fh_fid->raw;
+ #endif
+ 
  
      switch (fh_type) {
  	case AFSFH_VENUSFID:
***************
*** 191,198 ****
  	    break;
  
  	case AFSFH_NET_VENUSFID:
- 	    if (fh_len != 4)
- 		return NULL;
  	    fid.Cell       = ntohl(fh[0]);
  	    fid.Fid.Volume = ntohl(fh[1]);
  	    fid.Fid.Vnode  = ntohl(fh[2]);
--- 204,209 ----
***************
*** 275,282 ****
--- 286,299 ----
  	    return NULL;
      }
  
+ #if defined(NEW_EXPORT_OPS)
+     result = afs_export_get_dentry(sb, &fid);
+ #else
      result = sb->s_export_op->find_exported_dentry(sb, &fid, 0,
  						   acceptable, context);
+ 
+ #endif
+ 
  #ifdef OSI_EXPORT_DEBUG
      if (!result) {
  	printk("afs: decode_fh(0x%08x/%d/%d.%d): no dentry\n",
***************
*** 930,937 ****
--- 947,958 ----
  
  struct export_operations afs_export_ops = {
      .encode_fh  = afs_encode_fh,
+ #if defined(NEW_EXPORT_OPS)
+     .fh_to_dentry  = afs_fh_to_dentry,
+ #else
      .decode_fh  = afs_decode_fh,
      .get_dentry = afs_export_get_dentry,
+ #endif
      .get_name   = afs_export_get_name,
      .get_parent = afs_export_get_parent,
  };
Index: openafs/src/afs/LINUX/osi_groups.c
diff -c openafs/src/afs/LINUX/osi_groups.c:1.28.4.13.2.1 openafs/src/afs/LINUX/osi_groups.c:1.28.4.14
*** openafs/src/afs/LINUX/osi_groups.c:1.28.4.13.2.1	Sun Jun  8 23:39:31 2008
--- openafs/src/afs/LINUX/osi_groups.c	Sun Jun  8 23:39:16 2008
***************
*** 20,26 ****
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_groups.c,v 1.28.4.13.2.1 2008/06/09 03:39:31 shadow Exp $");
  
  #include "afs/sysincludes.h"
  #include "afsincludes.h"
--- 20,26 ----
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_groups.c,v 1.28.4.14 2008/06/09 03:39:16 shadow Exp $");
  
  #include "afs/sysincludes.h"
  #include "afsincludes.h"
Index: openafs/src/afs/LINUX/osi_misc.c
diff -c openafs/src/afs/LINUX/osi_misc.c:1.44.4.5 openafs/src/afs/LINUX/osi_misc.c:1.44.4.6
*** openafs/src/afs/LINUX/osi_misc.c:1.44.4.5	Mon Mar 10 14:52:54 2008
--- openafs/src/afs/LINUX/osi_misc.c	Mon Jun 30 23:35:23 2008
***************
*** 15,21 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_misc.c,v 1.44.4.5 2008/03/10 18:52:54 shadow Exp $");
  
  #include <linux/module.h> /* early to avoid printf->printk mapping */
  #include "afs/sysincludes.h"
--- 15,21 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_misc.c,v 1.44.4.6 2008/07/01 03:35:23 shadow Exp $");
  
  #include <linux/module.h> /* early to avoid printf->printk mapping */
  #include "afs/sysincludes.h"
***************
*** 168,174 ****
  		int followlink, char **pathp)
  {
      struct dentry *dp = NULL;
!     struct vfsmnt *mnt = NULL;
      char *tname, *path;
      int code;
  
--- 168,174 ----
  		int followlink, char **pathp)
  {
      struct dentry *dp = NULL;
!     struct vfsmount *mnt = NULL;
      char *tname, *path;
      int code;
  
***************
*** 178,184 ****
--- 178,189 ----
  	return -PTR_ERR(tname);
      code = osi_lookupname_internal(tname, followlink, &mnt, &dp);   
      if (!code) {
+ #if defined(D_PATH_TAKES_STRUCT_PATH)
+ 	struct path p = { mnt, dp };
+ 	path = d_path(&p, buf, buflen);
+ #else
  	path = d_path(dp, mnt, buf, buflen);
+ #endif
  
  	if (IS_ERR(path)) {
  	    code = -PTR_ERR(path);
Index: openafs/src/afs/LINUX/osi_nfssrv.c
diff -c openafs/src/afs/LINUX/osi_nfssrv.c:1.1.2.6 openafs/src/afs/LINUX/osi_nfssrv.c:1.1.2.7
*** openafs/src/afs/LINUX/osi_nfssrv.c:1.1.2.6	Wed Oct 24 11:45:04 2007
--- openafs/src/afs/LINUX/osi_nfssrv.c	Mon Jun 30 23:35:23 2008
***************
*** 15,21 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_nfssrv.c,v 1.1.2.6 2007/10/24 15:45:04 shadow Exp $");
  
  #if !defined(AFS_NONFSTRANS) || defined(AFS_AIX_IAUTH_ENV)
  #include <linux/module.h> /* early to avoid printf->printk mapping */
--- 15,21 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_nfssrv.c,v 1.1.2.7 2008/07/01 03:35:23 shadow Exp $");
  
  #if !defined(AFS_NONFSTRANS) || defined(AFS_AIX_IAUTH_ENV)
  #include <linux/module.h> /* early to avoid printf->printk mapping */
***************
*** 206,212 ****
      nfssrv_list = 0;
      RWLOCK_INIT(&afs_xnfssrv, "afs_xnfssrv");
  
!     if (authtab)	   afs_authtab = authtab;
      else if (authtab_addr) afs_authtab = (struct auth_ops **)authtab_addr;
      else {
  	printk("Warning: Unable to find the address of authtab\n");
--- 206,213 ----
      nfssrv_list = 0;
      RWLOCK_INIT(&afs_xnfssrv, "afs_xnfssrv");
  
!     if (authtab && !IS_ERR(authtab))
! 	   afs_authtab = authtab;
      else if (authtab_addr) afs_authtab = (struct auth_ops **)authtab_addr;
      else {
  	printk("Warning: Unable to find the address of authtab\n");
Index: openafs/src/afs/LINUX/osi_pag_module.c
diff -c openafs/src/afs/LINUX/osi_pag_module.c:1.1.2.7.2.1 openafs/src/afs/LINUX/osi_pag_module.c:1.1.2.8
*** openafs/src/afs/LINUX/osi_pag_module.c:1.1.2.7.2.1	Thu Jun 12 16:08:46 2008
--- openafs/src/afs/LINUX/osi_pag_module.c	Thu Jun 12 16:08:33 2008
***************
*** 15,21 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_pag_module.c,v 1.1.2.7.2.1 2008/06/12 20:08:46 shadow Exp $");
  
  #if !defined(AFS_NONFSTRANS) || defined(AFS_AIX_IAUTH_ENV)
  #include <linux/module.h> /* early to avoid printf->printk mapping */
--- 15,21 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_pag_module.c,v 1.1.2.8 2008/06/12 20:08:33 shadow Exp $");
  
  #if !defined(AFS_NONFSTRANS) || defined(AFS_AIX_IAUTH_ENV)
  #include <linux/module.h> /* early to avoid printf->printk mapping */
Index: openafs/src/afs/LINUX/osi_probe.c
diff -c openafs/src/afs/LINUX/osi_probe.c:1.11.2.14 openafs/src/afs/LINUX/osi_probe.c:1.11.2.15
*** openafs/src/afs/LINUX/osi_probe.c:1.11.2.14	Sun Apr  6 23:15:54 2008
--- openafs/src/afs/LINUX/osi_probe.c	Thu Jul  3 16:33:12 2008
***************
*** 45,51 ****
  
  /* Code to find the Linux syscall table */
  
- #if defined(EXPORTED_INIT_MM)
  #ifdef OSI_PROBE_STANDALONE
  #define OSI_PROBE_DEBUG
  #endif
--- 45,50 ----
***************
*** 53,58 ****
--- 52,58 ----
  #include <afsconfig.h>
  #include "afs/param.h"
  #endif
+ #if defined(EXPORTED_INIT_MM)
  #ifdef AFS_LINUX24_ENV
  #include <linux/module.h> /* early to avoid printf->printk mapping */
  #ifndef OSI_PROBE_STANDALONE
Index: openafs/src/afs/LINUX/osi_proc.c
diff -c openafs/src/afs/LINUX/osi_proc.c:1.1.2.3.4.1 openafs/src/afs/LINUX/osi_proc.c:1.1.2.5
*** openafs/src/afs/LINUX/osi_proc.c:1.1.2.3.4.1	Sun Jun  8 23:39:31 2008
--- openafs/src/afs/LINUX/osi_proc.c	Mon Jun 30 23:35:23 2008
***************
*** 15,21 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_proc.c,v 1.1.2.3.4.1 2008/06/09 03:39:31 shadow Exp $");
  
  #include <linux/module.h> /* early to avoid printf->printk mapping */
  #include "afs/sysincludes.h"
--- 15,21 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_proc.c,v 1.1.2.5 2008/07/01 03:35:23 shadow Exp $");
  
  #include <linux/module.h> /* early to avoid printf->printk mapping */
  #include "afs/sysincludes.h"
***************
*** 349,362 ****
      char path[64];
  #endif
  
  #if defined(EXPORTED_PROC_ROOT_FS)
      remove_proc_entry(PROC_FSDIRNAME, proc_root_fs);
  #else
      sprintf(path, "fs/%s", PROC_FSDIRNAME);
      remove_proc_entry(path, NULL);
  #endif
-     remove_proc_entry(PROC_CELLSERVDB_NAME, openafs_procfs);
- #ifdef HAVE_KERNEL_LINUX_SEQ_FILE_H
-     remove_proc_entry("unixusers", openafs_procfs);
- #endif
  }
--- 349,362 ----
      char path[64];
  #endif
  
+     remove_proc_entry(PROC_CELLSERVDB_NAME, openafs_procfs);
+ #ifdef HAVE_KERNEL_LINUX_SEQ_FILE_H
+     remove_proc_entry("unixusers", openafs_procfs);
+ #endif
  #if defined(EXPORTED_PROC_ROOT_FS)
      remove_proc_entry(PROC_FSDIRNAME, proc_root_fs);
  #else
      sprintf(path, "fs/%s", PROC_FSDIRNAME);
      remove_proc_entry(path, NULL);
  #endif
  }
Index: openafs/src/afs/LINUX/osi_sysctl.c
diff -c openafs/src/afs/LINUX/osi_sysctl.c:1.9.2.5.2.1 openafs/src/afs/LINUX/osi_sysctl.c:1.9.2.6
*** openafs/src/afs/LINUX/osi_sysctl.c:1.9.2.5.2.1	Thu Jun 12 16:08:46 2008
--- openafs/src/afs/LINUX/osi_sysctl.c	Thu Jun 12 16:08:33 2008
***************
*** 1,7 ****
  /*
   * osi_sysctl.c: Linux sysctl interface to OpenAFS
   *
!  * $Id: osi_sysctl.c,v 1.9.2.5.2.1 2008/06/12 20:08:46 shadow Exp $
   *
   * Written Jan 30, 2002 by Kris Van Hees (Sine Nomine Associates)
   */
--- 1,7 ----
  /*
   * osi_sysctl.c: Linux sysctl interface to OpenAFS
   *
!  * $Id: osi_sysctl.c,v 1.9.2.6 2008/06/12 20:08:33 shadow Exp $
   *
   * Written Jan 30, 2002 by Kris Van Hees (Sine Nomine Associates)
   */
Index: openafs/src/afs/LINUX/osi_vfsops.c
diff -c openafs/src/afs/LINUX/osi_vfsops.c:1.42.4.21 openafs/src/afs/LINUX/osi_vfsops.c:1.42.4.22
*** openafs/src/afs/LINUX/osi_vfsops.c:1.42.4.21	Fri Nov 23 08:40:47 2007
--- openafs/src/afs/LINUX/osi_vfsops.c	Mon Jun 30 23:35:23 2008
***************
*** 16,22 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_vfsops.c,v 1.42.4.21 2007/11/23 13:40:47 shadow Exp $");
  
  #define __NO_VERSION__		/* don't define kernel_version in module.h */
  #include <linux/module.h> /* early to avoid printf->printk mapping */
--- 16,22 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_vfsops.c,v 1.42.4.22 2008/07/01 03:35:23 shadow Exp $");
  
  #define __NO_VERSION__		/* don't define kernel_version in module.h */
  #include <linux/module.h> /* early to avoid printf->printk mapping */
***************
*** 39,45 ****
  int afs_was_mounted = 0;	/* Used to force reload if mount/unmount/mount */
  
  extern struct super_operations afs_sops;
! #if defined(AFS_LINUX26_ENV)
  extern struct export_operations afs_export_ops;
  #endif
  extern afs_rwlock_t afs_xvcache;
--- 39,45 ----
  int afs_was_mounted = 0;	/* Used to force reload if mount/unmount/mount */
  
  extern struct super_operations afs_sops;
! #if defined(AFS_LINUX26_ENV) && !defined(AFS_NONFSTRANS)
  extern struct export_operations afs_export_ops;
  #endif
  extern afs_rwlock_t afs_xvcache;
***************
*** 146,152 ****
      sb->s_blocksize_bits = 10;
      sb->s_magic = AFS_VFSMAGIC;
      sb->s_op = &afs_sops;	/* Super block (vfs) ops */
! #if defined(AFS_LINUX26_ENV)
      sb->s_export_op = &afs_export_ops;
  #endif
  #if defined(MAX_NON_LFS)
--- 146,152 ----
      sb->s_blocksize_bits = 10;
      sb->s_magic = AFS_VFSMAGIC;
      sb->s_op = &afs_sops;	/* Super block (vfs) ops */
! #if defined(AFS_LINUX26_ENV) && !defined(AFS_NONFSTRANS)
      sb->s_export_op = &afs_export_ops;
  #endif
  #if defined(MAX_NON_LFS)
Index: openafs/src/afs/LINUX/osi_vnodeops.c
diff -c openafs/src/afs/LINUX/osi_vnodeops.c:1.126.2.25.2.2 openafs/src/afs/LINUX/osi_vnodeops.c:1.126.2.28
*** openafs/src/afs/LINUX/osi_vnodeops.c:1.126.2.25.2.2	Tue May 20 17:03:36 2008
--- openafs/src/afs/LINUX/osi_vnodeops.c	Mon Jul  7 12:53:59 2008
***************
*** 22,28 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.126.2.25.2.2 2008/05/20 21:03:36 shadow Exp $");
  
  #include "afs/sysincludes.h"
  #include "afsincludes.h"
--- 22,28 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.126.2.28 2008/07/07 16:53:59 shadow Exp $");
  
  #include "afs/sysincludes.h"
  #include "afsincludes.h"
***************
*** 1307,1319 ****
  #if defined(AFS_LINUX26_ENV)
      /* Prevent any new references during rename operation. */
      lock_kernel();
! #endif
!     /* Remove old and new entries from name hash. New one will change below.
!      * While it's optimal to catch failures and re-insert newdp into hash,
!      * it's also error prone and in that case we're already dealing with error
!      * cases. Let another lookup put things right, if need be.
!      */
! #if defined(AFS_LINUX26_ENV)
      if (!d_unhashed(newdp)) {
  	d_drop(newdp);
  	rehash = newdp;
--- 1307,1313 ----
  #if defined(AFS_LINUX26_ENV)
      /* Prevent any new references during rename operation. */
      lock_kernel();
! 
      if (!d_unhashed(newdp)) {
  	d_drop(newdp);
  	rehash = newdp;
***************
*** 1334,1339 ****
--- 1328,1336 ----
      code = afs_rename(VTOAFS(oldip), oldname, VTOAFS(newip), newname, credp);
      AFS_GUNLOCK();
  
+     if (!code)
+ 	olddp->d_time = 0;      /* force to revalidate */
+ 
      if (rehash)
  	d_rehash(rehash);
  
Index: openafs/src/afs/NBSD/osi_machdep.h
diff -c openafs/src/afs/NBSD/osi_machdep.h:1.3.4.1 openafs/src/afs/NBSD/osi_machdep.h:1.3.4.2
*** openafs/src/afs/NBSD/osi_machdep.h:1.3.4.1	Thu Nov  9 19:11:07 2006
--- openafs/src/afs/NBSD/osi_machdep.h	Tue Jul  1 16:56:38 2008
***************
*** 37,42 ****
--- 37,45 ----
  
  #define afs_bufferpages bufpages
  
+ #undef gop_lookupname
+ #define gop_lookupname(fnamep,segflg,followlink,compvpp) lookupname((fnamep),(segflg),(followlink),NULL,(compvpp))
+ 
  #define osi_vnhold(avc,r)  do { \
         if ((avc)->vrefCount) { VN_HOLD((struct vnode *)(avc)); } \
         else osi_Panic("refcnt==0");  } while(0)
Index: openafs/src/afs/SOLARIS/osi_vfsops.c
diff -c openafs/src/afs/SOLARIS/osi_vfsops.c:1.18.14.6 openafs/src/afs/SOLARIS/osi_vfsops.c:1.18.14.7
*** openafs/src/afs/SOLARIS/osi_vfsops.c:1.18.14.6	Mon Mar 17 11:28:33 2008
--- openafs/src/afs/SOLARIS/osi_vfsops.c	Mon Jul  7 13:15:58 2008
***************
*** 14,20 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_vfsops.c,v 1.18.14.6 2008/03/17 15:28:33 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 14,20 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/SOLARIS/osi_vfsops.c,v 1.18.14.7 2008/07/07 17:15:58 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
***************
*** 418,424 ****
  
  #ifdef AFS_SUN510_ENV
  #ifdef AFS_SUN511_ENV
! static struct vfsdef_v4 afs_vfsdef = {
      VFSDEF_VERSION,
      "afs",
      afsinit,
--- 418,424 ----
  
  #ifdef AFS_SUN510_ENV
  #ifdef AFS_SUN511_ENV
! static vfsdef_t afs_vfsdef = {
      VFSDEF_VERSION,
      "afs",
      afsinit,
Index: openafs/src/afs/UKERNEL/afs_usrops.c
diff -c openafs/src/afs/UKERNEL/afs_usrops.c:1.30.6.7 openafs/src/afs/UKERNEL/afs_usrops.c:1.30.6.8
*** openafs/src/afs/UKERNEL/afs_usrops.c:1.30.6.7	Thu Jan 31 15:18:36 2008
--- openafs/src/afs/UKERNEL/afs_usrops.c	Tue Jul  1 16:56:38 2008
***************
*** 15,21 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/UKERNEL/afs_usrops.c,v 1.30.6.7 2008/01/31 20:18:36 shadow Exp $");
  
  
  #ifdef	UKERNEL
--- 15,21 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/UKERNEL/afs_usrops.c,v 1.30.6.8 2008/07/01 20:56:38 shadow Exp $");
  
  
  #ifdef	UKERNEL
***************
*** 1637,1647 ****
  	    printf("%s: My home cell is '%s'\n", rn, afs_LclCellName);
      }
  
-     /*
-      * Set the primary cell name.
-      */
-     call_syscall(AFSOP_SET_THISCELL, (long)afs_LclCellName, 0, 0, 0, 0);
- 
      if ((logfd = fopen(fullpn_AFSLogFile, "r+")) == 0) {
  	if (afsd_verbose)
  	    printf("%s: Creating '%s'\n", rn, fullpn_AFSLogFile);
--- 1637,1642 ----
***************
*** 1677,1700 ****
      sprintf(fullpn_VFile, "%s/V", cacheBaseDir);
      vFileNumber = fullpn_VFile + strlen(fullpn_VFile);
  
-     /*
-      * Start the RX listener.
-      */
-     if (afsd_debug)
- 	printf("%s: Calling AFSOP_RXLISTENER_DAEMON\n", rn);
-     fork_syscall(AFSCALL_CALL, AFSOP_RXLISTENER_DAEMON, FALSE, FALSE, FALSE);
- 
-     /*
-      * Start the RX event handler.
-      */
-     if (afsd_debug)
- 	printf("%s: Calling AFSOP_RXEVENT_DAEMON\n", rn);
-     fork_syscall(AFSCALL_CALL, AFSOP_RXEVENT_DAEMON, FALSE);
- 
-     /*
-      * Set up all the kernel processes needed for AFS.
-      */
- 
      /* initialize AFS callback interface */
      {
  	/* parse multihomed address files */
--- 1672,1677 ----
***************
*** 1713,1718 ****
--- 1690,1702 ----
  	}
      }
  
+     /*
+      * Start the RX listener.
+      */
+     if (afsd_debug)
+ 	printf("%s: Calling AFSOP_RXLISTENER_DAEMON\n", rn);
+     fork_syscall(AFSCALL_CALL, AFSOP_RXLISTENER_DAEMON, FALSE, FALSE, FALSE);
+ 
      if (afsd_verbose)
  	printf("%s: Forking rx callback listener.\n", rn);
      /* Child */
***************
*** 1720,1725 ****
--- 1704,1720 ----
  	preallocs = cacheStatEntries + 50;
      fork_syscall(AFSCALL_CALL, AFSOP_START_RXCALLBACK, preallocs);
  
+     /*
+      * Start the RX event handler.
+      */
+     if (afsd_debug)
+ 	printf("%s: Calling AFSOP_RXEVENT_DAEMON\n", rn);
+     fork_syscall(AFSCALL_CALL, AFSOP_RXEVENT_DAEMON, FALSE);
+ 
+     /*
+      * Set up all the kernel processes needed for AFS.
+      */
+ 
      if (afsd_verbose)
  	printf("%s: Initializing AFS daemon.\n", rn);
      call_syscall(AFSCALL_CALL, AFSOP_BASIC_INIT, 1, 0, 0, 0);
***************
*** 1814,1819 ****
--- 1809,1819 ----
      afsconf_CellApply(afs_cdir, ConfigCell, NULL);
      afsconf_CellAliasApply(afs_cdir, ConfigCellAlias, NULL);
  
+     /*
+      * Set the primary cell name.
+      */
+     call_syscall(AFSCALL_CALL, AFSOP_SET_THISCELL, (long)afs_LclCellName, 0, 0, 0);
+ 
      if (afsd_verbose)
  	printf("%s: Forking AFS daemon.\n", rn);
      fork_syscall(AFSCALL_CALL, AFSOP_START_AFS);
***************
*** 1869,1875 ****
  	rc = lpioctl(0, _VICEIOCTL(8), &iob, 0);
  #endif
  	if (rc < 0) {
! 	    usr_assert(errno == EDOM || errno == ENOSYS);
  	    break;
  	}
  
--- 1869,1875 ----
  	rc = lpioctl(0, _VICEIOCTL(8), &iob, 0);
  #endif
  	if (rc < 0) {
! 	    usr_assert(errno == EDOM || errno == ENOSYS || errno == ERANGE);
  	    break;
  	}
  
Index: openafs/src/afs/UKERNEL/osi_machdep.h
diff -c openafs/src/afs/UKERNEL/osi_machdep.h:1.6 openafs/src/afs/UKERNEL/osi_machdep.h:1.6.14.2
*** openafs/src/afs/UKERNEL/osi_machdep.h:1.6	Wed Jul 28 23:13:50 2004
--- openafs/src/afs/UKERNEL/osi_machdep.h	Tue Jul  1 18:28:35 2008
***************
*** 36,41 ****
--- 36,44 ----
  #define	afs_hz	    HZ
  #define osi_Time() (time(NULL))
  
+ #undef gop_lookupname
+ #define gop_lookupname(fnamep,segflg,followlink,compvpp) lookupname((fnamep),(segflg),(followlink),(compvpp))
+ 
  #define osi_vnhold(avc, r)  do { VN_HOLD(AFSTOV(avc)); } while(0)
  #define	afs_suser(x)	    suser(x)
  
Index: openafs/src/afs/VNOPS/afs_vnop_access.c
diff -c openafs/src/afs/VNOPS/afs_vnop_access.c:1.11.8.5.2.1 openafs/src/afs/VNOPS/afs_vnop_access.c:1.11.8.6
*** openafs/src/afs/VNOPS/afs_vnop_access.c:1.11.8.5.2.1	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_access.c	Fri May 23 10:25:16 2008
***************
*** 23,29 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_access.c,v 1.11.8.5.2.1 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 23,29 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_access.c,v 1.11.8.6 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_attrs.c
diff -c openafs/src/afs/VNOPS/afs_vnop_attrs.c:1.41.2.1.4.1 openafs/src/afs/VNOPS/afs_vnop_attrs.c:1.41.2.2
*** openafs/src/afs/VNOPS/afs_vnop_attrs.c:1.41.2.1.4.1	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_attrs.c	Fri May 23 10:25:16 2008
***************
*** 24,30 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_attrs.c,v 1.41.2.1.4.1 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 24,30 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_attrs.c,v 1.41.2.2 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_create.c
diff -c openafs/src/afs/VNOPS/afs_vnop_create.c:1.23.4.3.2.1 openafs/src/afs/VNOPS/afs_vnop_create.c:1.23.4.4
*** openafs/src/afs/VNOPS/afs_vnop_create.c:1.23.4.3.2.1	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_create.c	Fri May 23 10:25:16 2008
***************
*** 17,23 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_create.c,v 1.23.4.3.2.1 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 17,23 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_create.c,v 1.23.4.4 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_dirops.c
diff -c openafs/src/afs/VNOPS/afs_vnop_dirops.c:1.21.4.1.2.1 openafs/src/afs/VNOPS/afs_vnop_dirops.c:1.21.4.2
*** openafs/src/afs/VNOPS/afs_vnop_dirops.c:1.21.4.1.2.1	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_dirops.c	Fri May 23 10:25:16 2008
***************
*** 21,27 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_dirops.c,v 1.21.4.1.2.1 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 21,27 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_dirops.c,v 1.21.4.2 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_flock.c
diff -c openafs/src/afs/VNOPS/afs_vnop_flock.c:1.29.2.5.2.1 openafs/src/afs/VNOPS/afs_vnop_flock.c:1.29.2.6
*** openafs/src/afs/VNOPS/afs_vnop_flock.c:1.29.2.5.2.1	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_flock.c	Fri May 23 10:25:16 2008
***************
*** 16,22 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_flock.c,v 1.29.2.5.2.1 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 16,22 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_flock.c,v 1.29.2.6 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_link.c
diff -c openafs/src/afs/VNOPS/afs_vnop_link.c:1.19.8.1.2.1 openafs/src/afs/VNOPS/afs_vnop_link.c:1.19.8.2
*** openafs/src/afs/VNOPS/afs_vnop_link.c:1.19.8.1.2.1	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_link.c	Fri May 23 10:25:16 2008
***************
*** 17,23 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_link.c,v 1.19.8.1.2.1 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 17,23 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_link.c,v 1.19.8.2 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_lookup.c
diff -c openafs/src/afs/VNOPS/afs_vnop_lookup.c:1.72.2.6.2.1 openafs/src/afs/VNOPS/afs_vnop_lookup.c:1.72.2.7
*** openafs/src/afs/VNOPS/afs_vnop_lookup.c:1.72.2.6.2.1	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_lookup.c	Fri May 23 10:25:16 2008
***************
*** 18,24 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_lookup.c,v 1.72.2.6.2.1 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 18,24 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_lookup.c,v 1.72.2.7 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_open.c
diff -c openafs/src/afs/VNOPS/afs_vnop_open.c:1.11.20.2 openafs/src/afs/VNOPS/afs_vnop_open.c:1.11.6.2
*** openafs/src/afs/VNOPS/afs_vnop_open.c:1.11.20.2	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_open.c	Fri May 23 10:25:16 2008
***************
*** 18,24 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_open.c,v 1.11.20.2 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 18,24 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_open.c,v 1.11.6.2 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_read.c
diff -c openafs/src/afs/VNOPS/afs_vnop_read.c:1.34.2.2.2.2 openafs/src/afs/VNOPS/afs_vnop_read.c:1.34.2.4
*** openafs/src/afs/VNOPS/afs_vnop_read.c:1.34.2.2.2.2	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_read.c	Fri May 23 10:25:16 2008
***************
*** 19,25 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_read.c,v 1.34.2.2.2.2 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 19,25 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_read.c,v 1.34.2.4 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_readdir.c
diff -c openafs/src/afs/VNOPS/afs_vnop_readdir.c:1.33.18.1 openafs/src/afs/VNOPS/afs_vnop_readdir.c:1.33.4.1
*** openafs/src/afs/VNOPS/afs_vnop_readdir.c:1.33.18.1	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_readdir.c	Fri May 23 10:25:16 2008
***************
*** 23,29 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_readdir.c,v 1.33.18.1 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 23,29 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_readdir.c,v 1.33.4.1 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_remove.c
diff -c openafs/src/afs/VNOPS/afs_vnop_remove.c:1.52.2.4.2.1 openafs/src/afs/VNOPS/afs_vnop_remove.c:1.52.2.5
*** openafs/src/afs/VNOPS/afs_vnop_remove.c:1.52.2.4.2.1	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_remove.c	Fri May 23 10:25:16 2008
***************
*** 21,27 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_remove.c,v 1.52.2.4.2.1 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 21,27 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_remove.c,v 1.52.2.5 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_rename.c
diff -c openafs/src/afs/VNOPS/afs_vnop_rename.c:1.28.4.1.2.1 openafs/src/afs/VNOPS/afs_vnop_rename.c:1.28.4.2
*** openafs/src/afs/VNOPS/afs_vnop_rename.c:1.28.4.1.2.1	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_rename.c	Fri May 23 10:25:16 2008
***************
*** 18,24 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_rename.c,v 1.28.4.1.2.1 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 18,24 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_rename.c,v 1.28.4.2 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_symlink.c
diff -c openafs/src/afs/VNOPS/afs_vnop_symlink.c:1.24.4.4.2.2 openafs/src/afs/VNOPS/afs_vnop_symlink.c:1.24.4.6
*** openafs/src/afs/VNOPS/afs_vnop_symlink.c:1.24.4.4.2.2	Sun Jun  8 23:30:45 2008
--- openafs/src/afs/VNOPS/afs_vnop_symlink.c	Sun Jun  8 23:30:30 2008
***************
*** 22,28 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_symlink.c,v 1.24.4.4.2.2 2008/06/09 03:30:45 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 22,28 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_symlink.c,v 1.24.4.6 2008/06/09 03:30:30 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/afs/VNOPS/afs_vnop_write.c
diff -c openafs/src/afs/VNOPS/afs_vnop_write.c:1.50.2.1.2.1 openafs/src/afs/VNOPS/afs_vnop_write.c:1.50.2.2
*** openafs/src/afs/VNOPS/afs_vnop_write.c:1.50.2.1.2.1	Fri May 23 10:25:35 2008
--- openafs/src/afs/VNOPS/afs_vnop_write.c	Fri May 23 10:25:16 2008
***************
*** 21,27 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_write.c,v 1.50.2.1.2.1 2008/05/23 14:25:35 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
--- 21,27 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_write.c,v 1.50.2.2 2008/05/23 14:25:16 shadow Exp $");
  
  #include "afs/sysincludes.h"	/* Standard vendor system headers */
  #include "afsincludes.h"	/* Afs-based standard headers */
Index: openafs/src/aklog/Makefile.in
diff -c openafs/src/aklog/Makefile.in:1.10.2.3 openafs/src/aklog/Makefile.in:1.10.2.6
*** openafs/src/aklog/Makefile.in:1.10.2.3	Thu Nov  1 12:51:47 2007
--- openafs/src/aklog/Makefile.in	Sat Jun 28 03:18:15 2008
***************
*** 32,51 ****
  # Installation targets
  #
  install: \
! 	${DESTDIR}${bindir}/aklog ${DESTDIR}${afssrvbindir}/asetkey
  
  ${DESTDIR}${bindir}/aklog: aklog
  	${INSTALL} $? $@
  
  ${DESTDIR}${afssrvbindir}/asetkey: asetkey
  	${INSTALL} $? $@
  
  dest: \
! 	${DEST}/bin/aklog ${DEST}/root.server/usr/afs/bin/asetkey
  
  ${DEST}/bin/aklog: aklog
  	${INSTALL} $? $@
  
  ${DEST}/root.server/usr/afs/bin/asetkey: asetkey
  	${INSTALL} $? $@
  
--- 32,59 ----
  # Installation targets
  #
  install: \
! 	${DESTDIR}${bindir}/aklog ${DESTDIR}${bindir}/klog.krb5 \
! 	${DESTDIR}${afssrvbindir}/asetkey
  
  ${DESTDIR}${bindir}/aklog: aklog
  	${INSTALL} $? $@
  
+ ${DESTDIR}${bindir}/klog.krb5: klog
+ 	${INSTALL} -f $? $@
+ 
  ${DESTDIR}${afssrvbindir}/asetkey: asetkey
  	${INSTALL} $? $@
  
  dest: \
! 	${DEST}/bin/aklog ${DEST}/bin/klog.krb5 \
! 	${DEST}/root.server/usr/afs/bin/asetkey
  
  ${DEST}/bin/aklog: aklog
  	${INSTALL} $? $@
  
+ ${DEST}/bin/klog.krb5: klog
+ 	${INSTALL} -f $? $@
+ 
  ${DEST}/root.server/usr/afs/bin/asetkey: asetkey
  	${INSTALL} $? $@
  
Index: openafs/src/auth/NTMakefile
diff -c openafs/src/auth/NTMakefile:1.10.4.3 openafs/src/auth/NTMakefile:1.10.4.5
*** openafs/src/auth/NTMakefile:1.10.4.3	Sat Feb  2 08:43:23 2008
--- openafs/src/auth/NTMakefile	Wed Jul  2 08:49:05 2008
***************
*** 81,93 ****
  	$(EXELIBDIR)\afs\afsutil.lib \
  	$(EXELIBDIR)\afs\afseventlog.lib \
  	$(EXELIBDIR)\afs\afsreg.lib \
! 	$(EXELIBDIR)\cm_dns.obj
  
  
  $(SETKEY_EXEFILE): $(SETKEY_EXEOBJS) $(EXELIBS)
  	$(EXECONLINK) dnsapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
  
  # build copyauth
  COPYAUTH_EXEFILE = $(DESTDIR)\etc\copyauth.exe
--- 81,95 ----
  	$(EXELIBDIR)\afs\afsutil.lib \
  	$(EXELIBDIR)\afs\afseventlog.lib \
  	$(EXELIBDIR)\afs\afsreg.lib \
! 	$(EXELIBDIR)\cm_dns.obj \
!         $(EXELIBDIR)\cm_nls.obj
  
  
  $(SETKEY_EXEFILE): $(SETKEY_EXEOBJS) $(EXELIBS)
  	$(EXECONLINK) dnsapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  # build copyauth
  COPYAUTH_EXEFILE = $(DESTDIR)\etc\copyauth.exe
***************
*** 99,104 ****
--- 101,107 ----
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  $(INCFILES):$$(@F)
  	 $(COPY)  $** $(INCFILEDIR)\.
Index: openafs/src/auth/cellconfig.c
diff -c openafs/src/auth/cellconfig.c:1.47.2.14 openafs/src/auth/cellconfig.c:1.47.2.15
*** openafs/src/auth/cellconfig.c:1.47.2.14	Fri Nov  2 14:05:07 2007
--- openafs/src/auth/cellconfig.c	Thu Jun 26 12:48:30 2008
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/auth/cellconfig.c,v 1.47.2.14 2007/11/02 18:05:07 shadow Exp $");
  
  #include <afs/stds.h>
  #include <afs/pthread_glock.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/auth/cellconfig.c,v 1.47.2.15 2008/06/26 16:48:30 jaltman Exp $");
  
  #include <afs/stds.h>
  #include <afs/pthread_glock.h>
***************
*** 62,67 ****
--- 62,68 ----
  #ifdef AFS_NT40_ENV
  #ifdef AFS_AFSDB_ENV
  /* cm_dns.h depends on cellconfig.h */
+ #include <cm_nls.h>
  #include <cm_dns.h>
  #endif /* AFS_AFSDB_ENV */
  #endif
Index: openafs/src/auth/test/NTMakefile
diff -c openafs/src/auth/test/NTMakefile:1.5 openafs/src/auth/test/NTMakefile:1.5.4.1
*** openafs/src/auth/test/NTMakefile:1.5	Sun Nov 20 20:56:36 2005
--- openafs/src/auth/test/NTMakefile	Wed Jul  2 08:49:06 2008
***************
*** 26,31 ****
--- 26,32 ----
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  KTC_EXEFILE = $(OUT)\ktctest.exe
***************
*** 43,48 ****
--- 44,50 ----
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  test tests: $(CELL_EXEFILE) $(KTC_EXEFILE)
  
Index: openafs/src/bozo/NTMakefile
diff -c openafs/src/bozo/NTMakefile:1.10.4.2 openafs/src/bozo/NTMakefile:1.10.4.4
*** openafs/src/bozo/NTMakefile:1.10.4.2	Sat Feb  2 08:43:24 2008
--- openafs/src/bozo/NTMakefile	Wed Jul  2 08:49:07 2008
***************
*** 67,79 ****
  	$(DESTDIR)\lib\afs\afsreg.lib \
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afs\afsprocmgmt.lib \
! 	$(DESTDIR)\lib\cm_dns.obj
  
  $(BOSSERVER_EXEFILE): $(BOSSERVER_EXEOBJS) $(BOSSERVER_EXELIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
! 
  
  ############################################################################
  # Build bos.exe
--- 67,80 ----
  	$(DESTDIR)\lib\afs\afsreg.lib \
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afs\afsprocmgmt.lib \
! 	$(DESTDIR)\lib\cm_dns.obj \
!         $(DESTDIR)\lib\cm_nls.obj
  
  $(BOSSERVER_EXEFILE): $(BOSSERVER_EXEOBJS) $(BOSSERVER_EXELIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
!         $(CODESIGN_USERLAND)
  
  ############################################################################
  # Build bos.exe
***************
*** 103,115 ****
  	$(DESTDIR)\lib\afs\afsreg.lib \
  	$(DESTDIR)\lib\afs\afsprocmgmt.lib \
  	$(DESTDIR)\lib\afs\afspioctl.lib \
! 	$(DESTDIR)\lib\cm_dns.obj
  
  
  $(RS_BOS_EXEFILE): $(BOS_EXEOBJS) $(BOS_EXELIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
  
  $(CL_BOS_EXEFILE): $(RS_BOS_EXEFILE)
  	$(COPY) $** $@
--- 104,118 ----
  	$(DESTDIR)\lib\afs\afsreg.lib \
  	$(DESTDIR)\lib\afs\afsprocmgmt.lib \
  	$(DESTDIR)\lib\afs\afspioctl.lib \
! 	$(DESTDIR)\lib\cm_dns.obj \
!         $(DESTDIR)\lib\cm_nls.obj
  
  
  $(RS_BOS_EXEFILE): $(BOS_EXEOBJS) $(BOS_EXELIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  $(CL_BOS_EXEFILE): $(RS_BOS_EXEFILE)
  	$(COPY) $** $@
Index: openafs/src/bozo/bnode.c
diff -c openafs/src/bozo/bnode.c:1.19.2.6 openafs/src/bozo/bnode.c:1.19.2.7
*** openafs/src/bozo/bnode.c:1.19.2.6	Mon Mar 10 18:32:32 2008
--- openafs/src/bozo/bnode.c	Mon Jun 30 16:29:29 2008
***************
*** 11,21 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/bozo/bnode.c,v 1.19.2.6 2008/03/10 22:32:32 shadow Exp $");
  
  #include <stddef.h>
  #include <stdlib.h>
  #include <stdio.h>
  #include <errno.h>
  #include <sys/types.h>
  #ifdef AFS_NT40_ENV
--- 11,22 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/bozo/bnode.c,v 1.19.2.7 2008/06/30 20:29:29 rra Exp $");
  
  #include <stddef.h>
  #include <stdlib.h>
  #include <stdio.h>
+ #include <dirent.h>
  #include <errno.h>
  #include <sys/types.h>
  #ifdef AFS_NT40_ENV
***************
*** 99,111 ****
--- 100,144 ----
      char tbuffer[256];
      struct stat tstat;
      register afs_int32 code;
+     char *corefile = NULL;
  #ifdef BOZO_SAVE_CORES
      struct timeval Start;
      struct tm *TimeFields;
      char FileName[256];
  #endif
  
+     /* Linux always appends the PID to core dumps from threaded processes, so
+      * we have to scan the directory to find core files under another name. */
      code = stat(AFSDIR_SERVER_CORELOG_FILEPATH, &tstat);
+     if (code) {
+         DIR *logdir;
+         struct dirent *file;
+         char *p;
+         size_t length;
+         unsigned long pid;
+ 
+         logdir = opendir(AFSDIR_LOGS_DIR);
+         if (logdir == NULL)
+             return;
+         while ((file = readdir(logdir)) != NULL) {
+             if (strncmp(file->d_name, "core.", 5) != 0)
+                 continue;
+             pid = atol(file->d_name + 5);
+             if (pid == aproc->pid) {
+                 length = strlen(AFSDIR_LOGS_DIR) + strlen(file->d_name) + 2;
+                 corefile = malloc(length);
+                 if (corefile == NULL) {
+                     closedir(logdir);
+                     return;
+                 }
+                 snprintf(corefile, length, "%s/%s", AFSDIR_LOGS_DIR,
+                          file->d_name);
+                 code = 0;
+                 break;
+             }
+         }
+         closedir(logdir);
+     }
      if (code)
  	return;
  
***************
*** 118,124 ****
  	    TimeFields->tm_hour, TimeFields->tm_min, TimeFields->tm_sec);
      strcpy(tbuffer, FileName);
  #endif
!     code = renamefile(AFSDIR_SERVER_CORELOG_FILEPATH, tbuffer);
  }
  
  int
--- 151,162 ----
  	    TimeFields->tm_hour, TimeFields->tm_min, TimeFields->tm_sec);
      strcpy(tbuffer, FileName);
  #endif
!     if (corefile == NULL)
!         code = renamefile(AFSDIR_SERVER_CORELOG_FILEPATH, tbuffer);
!     else {
!         code = renamefile(corefile, tbuffer);
!         free(corefile);
!     }
  }
  
  int
Index: openafs/src/bu_utils/NTMakefile
diff -c openafs/src/bu_utils/NTMakefile:1.5 openafs/src/bu_utils/NTMakefile:1.5.4.1
*** openafs/src/bu_utils/NTMakefile:1.5	Sun Nov 20 20:56:39 2005
--- openafs/src/bu_utils/NTMakefile	Wed Jul  2 08:49:08 2008
***************
*** 29,34 ****
--- 29,35 ----
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # Definitions for generating versioninfo resources
Index: openafs/src/bucoord/NTMakefile
diff -c openafs/src/bucoord/NTMakefile:1.13.4.2 openafs/src/bucoord/NTMakefile:1.13.4.4
*** openafs/src/bucoord/NTMakefile:1.13.4.2	Sat Feb  2 08:43:24 2008
--- openafs/src/bucoord/NTMakefile	Wed Jul  2 08:49:09 2008
***************
*** 88,100 ****
  	$(DESTDIR)\lib\afs\afsprocmgmt.lib \
  	$(DESTDIR)\lib\afs\afspioctl.lib \
  	$(DESTDIR)\lib\afs\afsreg.lib \
!      $(DESTDIR)\lib\cm_dns.obj
  	
  
  $(EXEFILE): $(EXEOBJS) $(EXERES) $(EXELIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
  
  
  ############################################################################
--- 88,102 ----
  	$(DESTDIR)\lib\afs\afsprocmgmt.lib \
  	$(DESTDIR)\lib\afs\afspioctl.lib \
  	$(DESTDIR)\lib\afs\afsreg.lib \
!         $(DESTDIR)\lib\cm_dns.obj \
!         $(DESTDIR)\lib\cm_nls.obj
  	
  
  $(EXEFILE): $(EXEOBJS) $(EXERES) $(EXELIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  
  ############################################################################
Index: openafs/src/budb/NTMakefile
diff -c openafs/src/budb/NTMakefile:1.10.4.2 openafs/src/budb/NTMakefile:1.10.4.4
*** openafs/src/budb/NTMakefile:1.10.4.2	Sat Feb  2 08:43:24 2008
--- openafs/src/budb/NTMakefile	Wed Jul  2 08:49:11 2008
***************
*** 77,89 ****
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afs\afsreg.lib \
  	$(DESTDIR)\lib\afs\afsprocmgmt.lib \
! 	$(DESTDIR)\lib\cm_dns.obj
  
  
  $(EXEFILE): $(EXEOBJS)  $(EXELIBS)
  	$(EXECONLINK) dnsapi.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
  
  ############################################################################
  # Definitions for generating versioninfo resources
--- 77,91 ----
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afs\afsreg.lib \
  	$(DESTDIR)\lib\afs\afsprocmgmt.lib \
! 	$(DESTDIR)\lib\cm_dns.obj \
!         $(DESTDIR)\lib\cm_nls.obj
  
  
  $(EXEFILE): $(EXEOBJS)  $(EXELIBS)
  	$(EXECONLINK) dnsapi.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # Definitions for generating versioninfo resources
Index: openafs/src/budb/server.c
diff -c openafs/src/budb/server.c:1.16.2.9.2.1 openafs/src/budb/server.c:1.16.2.10
*** openafs/src/budb/server.c:1.16.2.9.2.1	Sun Jun 22 22:49:26 2008
--- openafs/src/budb/server.c	Thu May 29 00:04:25 2008
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/budb/server.c,v 1.16.2.9.2.1 2008/06/23 02:49:26 jaltman Exp $");
  
  #include <fcntl.h>
  #include <sys/stat.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/budb/server.c,v 1.16.2.10 2008/05/29 04:04:25 jaltman Exp $");
  
  #include <fcntl.h>
  #include <sys/stat.h>
Index: openafs/src/butc/NTMakefile
diff -c openafs/src/butc/NTMakefile:1.10.4.2 openafs/src/butc/NTMakefile:1.10.4.4
*** openafs/src/butc/NTMakefile:1.10.4.2	Sat Feb  2 08:43:24 2008
--- openafs/src/butc/NTMakefile	Wed Jul  2 08:49:11 2008
***************
*** 1,3 ****
--- 1,4 ----
+ 
  # Copyright 2000, International Business Machines Corporation and others.
  # All Rights Reserved.
  # 
***************
*** 52,58 ****
  	$(DESTDIR)\lib\afs\afspioctl.lib \
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afs\afsreg.lib \
! 	$(DESTDIR)\lib\cm_dns.obj
  
  $(EXERES): butc.rc AFS_component_version_number.h
  
--- 53,60 ----
  	$(DESTDIR)\lib\afs\afspioctl.lib \
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afs\afsreg.lib \
! 	$(DESTDIR)\lib\cm_dns.obj \
!         $(DESTDIR)\lib\cm_nls.obj
  
  $(EXERES): butc.rc AFS_component_version_number.h
  
***************
*** 60,65 ****
--- 62,68 ----
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # Install target; primary makefile target
***************
*** 80,85 ****
--- 83,89 ----
  $(OUT)\butc_test.exe: $(OUT)\test.obj
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  mkdir:
  	
Index: openafs/src/butc/afsxbsa.c
diff -c /dev/null openafs/src/butc/afsxbsa.c:1.1.2.2
*** /dev/null	Fri Jul 18 12:43:20 2008
--- openafs/src/butc/afsxbsa.c	Tue Jul 15 06:32:45 2008
***************
*** 0 ****
--- 1,2903 ----
+ /*
+  * Copyright 2000, International Business Machines Corporation and others.
+  * All Rights Reserved.
+  * 
+  * This software has been released under the terms of the IBM Public
+  * License.  For details, see the LICENSE file in the top-level source
+  * directory or online at http://www.openafs.org/dl/license10.html
+  */
+ 
+ #ifdef xbsa
+ 
+ #include <afs/param.h>
+ #include <sys/types.h>
+ #include <afs/stds.h>
+ #include <stdio.h>
+ 
+ 
+ #if defined(AFS_AIX_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_LINUX26_ENV)
+ #include <dlfcn.h>
+ #endif
+ 
+ #include <errno.h>
+ #include "butc_xbsa.h"
+ #include <afs/butx.h>
+ 
+ /* Global Definations */
+ #define APPLTYPE "afs-butc"
+ #define TDP_LIBNAME "libApiDS.a"
+ #define FIRST_HANDLE 1
+ #define NOHANDLE 0
+ #define XAPI_FSINFO "FS for XOpen API"
+ #define DIR_DELIMITER '/'
+ #define STR_DIR_DELIMITER '/'
+ 
+ xGlobal xopenGbl;
+ char traceStr[DSM_MAX_RC_MSG_LENGTH+1];
+ char traceStr2[(DSM_MAX_RC_MSG_LENGTH+1) - 30];
+ char ourMsg[DSM_MAX_RC_MSG_LENGTH + 1];
+ static int dsm_init = 0 ;
+ 
+ /* >>>  TSM function pointers. */
+ dsInt16_t (* AFSdsmBeginQuery)( dsUint32_t dsmHandle, dsmQueryType queryType, dsmQueryBuff *queryBuffer);
+ dsInt16_t (* AFSdsmGetNextQObj)( dsUint32_t dsmHandle, DataBlk *dataBlkPtr) ;
+ dsInt16_t (* AFSdsmEndQuery)( dsUint32_t dsmHandle);
+ dsInt16_t (* AFSdsmRCMsg)( dsUint32_t dsmHandle, dsInt16_t dsmRC, char *msg);
+ dsInt16_t (* AFSdsmLogEventEx)( dsUint32_t dsmHandle, dsmLogExIn_t *dsmLogExInP, dsmLogExOut_t *dsmLogExOutP);
+ dsInt16_t (* AFSdsmTrace)( dsUint32_t dsmHandle, char * string );
+ dsInt16_t (* AFSdsmTerminate)( dsUint32_t dsmHandle);
+ dsInt16_t (* AFSdsmSendData)( dsUint32_t dsmHandle, DataBlk *dataBlkPtri);
+ dsInt16_t (* AFSdsmBeginTxn)( dsUint32_t dsmHandle);
+ dsInt16_t (* AFSdsmDeleteObj)( dsUint32_t dsmHandle, dsmDelType delType, dsmDelInfo delInfo);
+ dsInt16_t (* AFSdsmEndTxn)( dsUint32_t dsmHandle, dsUint8_t vote, dsUint16_t *reason);
+ void (* AFSdsmQueryApiVersion)( dsmApiVersion *apiVersionP);
+ dsInt16_t (* AFSdsmInit)( dsUint32_t *dsmHandle, dsmApiVersion *dsmApiVersionP, char *clientNodeNameP, char *clientOwnerNameP, char *clientPasswordP, char *applicationType, char *configfile, char *options);
+ dsInt16_t (* AFSdsmQuerySessInfo)( dsUint32_t dsmHandle, ApiSessInfo *SessInfoP);
+ dsInt16_t (* AFSdsmBeginGetData)(dsUint32_t dsmHandle, dsBool_t mountWait, dsmGetType getType, dsmGetList *dsmGetObjListP);
+ dsInt16_t (* AFSdsmGetObj)( dsUint32_t dsmHandle, ObjID *objIdP, DataBlk *dataBlkPtr);
+ dsInt16_t (* AFSdsmEndGetObj)( dsUint32_t dsmHandle);
+ dsInt16_t (* AFSdsmEndGetData)( dsUint32_t dsmHandle);
+ dsInt16_t (* AFSdsmGetData)( dsUint32_t dsmHandle, DataBlk *dataBlkPtr);
+ dsInt16_t (* AFSdsmEndSendObj)( dsUint32_t dsmHandle);
+ dsInt16_t (* AFSdsmRegisterFS)( dsUint32_t dsmHandle, regFSData *regFilespaceP);
+ dsInt16_t (* AFSdsmBindMC)( dsUint32_t dsmHandle, dsmObjName *objNameP, dsmSendType sendType, mcBindKey *mcBindKeyP);
+ dsInt16_t (* AFSdsmSendObj)( dsUint32_t dsmHandle, dsmSendType sendType, void *sendBuff, dsmObjName *objNameP, ObjAttr *objAttrPtr, DataBlk *dataBlkPtr);
+ dsInt16_t (* AFSdsmChangePW)( dsUint32_t dsmHandle, char *oldPW, char *newPW);
+ #if 0
+ dsInt16_t (* AFSdsmCleanUp)( dsBool_t mtFlag);
+ dsInt16_t (* AFSdsmDeleteAccess)( dsUint32_t dsmHandle, dsUint32_t ruleNum);
+ dsInt16_t (* AFSdsmDeleteFS)( dsUint32_t dsmHandle, char *fsName, dsUint8_t repository);
+ dsInt16_t (* AFSdsmEndGetDataEx)( dsmEndGetDataExIn_t *dsmEndGetDataExInP, dsmEndGetDataExOut_t *dsmEndGetDataExOutP);
+ dsInt16_t (* AFSdsmEndSendObjEx)( dsmEndSendObjExIn_t *dsmEndSendObjExInP, dsmEndSendObjExOut_t *dsmEndSendObjExOutP);
+ dsInt16_t (* AFSdsmEndTxnEx)( dsmEndTxnExIn_t *dsmEndTxnExInP, dsmEndTxnExOut_t *dsmEndTxnExOutP);
+ dsInt16_t (* AFSdsmGroupHandler)( dsmGroupHandlerIn_t *dsmGroupHandlerInP, dsmGroupHandlerOut_t  *dsmGroupHandlerOutP);
+ dsInt16_t (* AFSdsmInitEx)( dsUint32_t *dsmHandleP, dsmInitExIn_t *dsmInitExInP, dsmInitExOut_t *dsmInitExOutP);
+ dsInt16_t (* AFSdsmLogEvent)( dsUint32_t dsmHandle, logInfo *lopInfoP);
+ dsInt16_t (* AFSdsmQueryAccess)( dsUint32_t dsmHandle, qryRespAccessData **accessListP, dsUint16_t *numberOfRules);
+ void      (* AFSdsmQueryApiVersionEx)( dsmApiVersionEx *apiVersionP);
+ dsInt16_t (* AFSdsmQueryCliOptions)( optStruct *optstructP);
+ dsInt16_t (* AFSdsmQuerySessOptions)( dsUint32_t dsmHandle, optStruct *optstructP);
+ dsInt16_t (* AFSdsmRenameObj)( dsmRenameIn_t *dsmRenameInP, dsmRenameOut_t *dsmRenameOutP);
+ dsInt16_t (* AFSdsmSetAccess)( dsUint32_t dsmHandle, dsmAccessType accessType, dsmObjName *objNameP, char *node, char *owner);
+ dsInt16_t (* AFSdsmSetUp)( dsBool_t mtFlag, envSetUp *envSetUpPi);
+ dsInt16_t (* AFSdsmUpdateFS)( dsUint32_t dsmHandle, char *fs, dsmFSUpd *fsUpdP, dsUint32_t fsUpdAct);
+ dsInt16_t (* AFSdsmUpdateObj)( dsUint32_t dsmHandle, dsmSendType sendType, void *sendBuff, dsmObjName *objNameP, ObjAttr *objAttrPtr, dsUint32_t objUpdAct);
+ #endif
+ /* <<< TSM function pointers. */
+ 
+ typedef struct s_delList {
+   struct s_delList *next;
+   ObjID           objId;
+ } delList;
+ 
+ static dsInt16_t buildList(
+     dsUint32_t     dsmHandle,
+     dsmObjName     *objNameP,
+     delList        **llHeadPP,
+     delList        **llTailPP)
+ {
+    dsInt16_t            rc;
+    qryArchiveData       queryBuffer;       /* for query Archive*/
+    qryRespArchiveData   qaDataArea;
+    DataBlk              qDataBlkArea;
+    char                 descrStar[] = "*";
+    delList              *lnew = NULL, *ll = NULL;
+ 
+    queryBuffer.stVersion = qryArchiveDataVersion ;
+    queryBuffer.objName = objNameP;
+    queryBuffer.owner = xopenGbl.dsmSessInfo.owner;
+    queryBuffer.insDateLowerBound.year = DATE_MINUS_INFINITE;
+    queryBuffer.insDateUpperBound.year = DATE_PLUS_INFINITE;
+    queryBuffer.expDateLowerBound.year = DATE_MINUS_INFINITE;
+    queryBuffer.expDateUpperBound.year = DATE_PLUS_INFINITE;
+    queryBuffer.descr = descrStar;
+ 
+    if ((rc=AFSdsmBeginQuery(dsmHandle, qtArchive,
+                         (void *)&queryBuffer )) != DSM_RC_OK)
+    {
+       XOPENRETURN(dsmHandle,"buildList(AFSdsmBeginQuery)",rc,__FILE__,__LINE__);
+    }
+    qaDataArea.stVersion = qryRespArchiveDataVersion;
+    qDataBlkArea.stVersion = DataBlkVersion ;
+    qDataBlkArea.bufferPtr = (char *)&qaDataArea;
+    qDataBlkArea.bufferLen = sizeof(qryRespArchiveData);
+    while ((rc = AFSdsmGetNextQObj(dsmHandle, &qDataBlkArea)) == DSM_RC_MORE_DATA)
+    {
+      if (!(lnew = (delList *)dsMalloc(sizeof(delList))))
+         XOPENRETURN(dsmHandle,"buildList(AFSdsmGetNextQObj)",
+                     DSM_RC_NO_MEMORY,__FILE__,__LINE__);
+ 
+      if (!*llHeadPP)
+      {
+         *llHeadPP = lnew;
+         *llTailPP = lnew;
+      }
+      else
+      {
+         ll = *llTailPP;
+         ll->next = lnew;
+         *llTailPP = lnew;
+      }
+ 
+      lnew->next = NULL;
+      lnew->objId.hi = qaDataArea.objId.hi;
+      lnew->objId.lo = qaDataArea.objId.lo;
+    }
+ 
+    if (rc != DSM_RC_FINISHED)
+    {
+       AFSdsmEndQuery(dsmHandle);
+       XOPENRETURN(dsmHandle,"buildList(AFSdsmGetNextQObj)",
+                   rc,__FILE__,__LINE__);
+    }
+ 
+    if ((rc = AFSdsmEndQuery(dsmHandle)) != DSM_RC_OK)
+    {
+       sprintf(traceStr2, "buildList: AFSdsmEndQuery rc = %d", rc);
+       ourTrace(dsmHandle,TrFL,traceStr2);
+    }
+    XOPENRETURN(dsmHandle,"buildList",rc,__FILE__,__LINE__);
+ }
+ 
+ static dsInt16_t  freeList(
+     delList    **llHeadPP,
+     delList    **llTailPP)
+ {
+ 
+    delList *ll;
+    ll = *llHeadPP;
+    while (ll)
+    {
+       *llHeadPP = ll->next;
+       dsFree(ll);
+       ll = *llHeadPP;
+    }
+    *llHeadPP = NULL;
+    *llTailPP = NULL;
+    XOPENRETURN(0,"freeList",0,__FILE__,__LINE__);
+ }
+ 
+ void ourTrace(long           BSAHandle,
+               char          *fileName,
+               int            lineNumber,
+               char          *traceStr2)
+ {
+ 
+    sprintf(traceStr,"%s (%d) ",fileName, lineNumber);
+ 
+    if (traceStr2 != NULL && *traceStr2 != '\0')
+       strcat(traceStr, traceStr2);
+ 
+    AFSdsmTrace(BSAHandle, traceStr);
+    return;
+ }
+ 
+ void ourLogEvent_Ex(dsUint32_t dsmHandle, dsmLogType type, char *message,
+                     char *appMsg, dsmLogSeverity severity)
+ {
+    dsmLogExIn_t dsmLogIn;
+    dsmLogExOut_t dsmLogOut;
+    dsInt16_t    rc = 0;
+    memset(&dsmLogOut, '\0', sizeof(dsmLogExOut_t));
+ 
+    if (dsmHandle)
+    {
+       dsmLogIn.stVersion = dsmLogExInVersion;
+       dsmLogIn.severity = severity;
+       dsmLogIn.logType = type;
+ 
+       strcpy(dsmLogIn.appMsgID, appMsg);
+       dsmLogIn.message = message;
+       rc = AFSdsmLogEventEx(dsmHandle, &dsmLogIn, &dsmLogOut);
+    }
+ }
+ 
+ char* ourRCMsg(dsInt16_t ourRC, char *msgPrefix)
+ {
+    char         appStr[BSA_MAX_DESC];
+    char         *chP;
+    int          bytesToCp;
+ 
+    memset(&ourMsg, 0x00, DSM_MAX_RC_MSG_LENGTH + 1);
+    if(msgPrefix != NULL)
+    {
+        /*================================================================
+         call stdXOpenMsgMap if return code values are within the TSM
+         return code range (96 - 104). Reformat the message prefix
+         (ANS0660 - ANS0668).
+         ================================================================*/
+         if ((ourRC >= custMin_retcode) && (ourRC <= custMax_retcode))
+         {
+              stdXOpenMsgMap(ourRC, ourMsg);
+              /* set standard XOpen message prefix range: 660 - 668 */
+              ourRC = ((ourRC * 10) / 16) + (ourRC % 16) + 600;
+              sprintf(msgPrefix, "ANSO%d", ourRC);
+         }
+         else
+           /*===============================================================
+            call dsmRCMsg if return code values other then the above ranges.
+            Get message prefix from the return message of dsmRCMsg.
+            ===============================================================*/
+         {
+               AFSdsmRCMsg(NOHANDLE, ourRC, ourMsg);
+              /*=========================================================
+               search for the first ' ' and copy from beginning of string
+               until before the two charecter before ' '.
+               e.g. To get the code value from the messages of
+                    "ANS1038S Invalid option specified", we only want to
+                    get strings "ANS1038".
+               ========================================================*/
+               chP = (char *) strchr(ourMsg, ' ');
+               bytesToCp = strlen(ourMsg) - (strlen(chP) + 1);
+               strncpy(appStr, ourMsg, bytesToCp);
+               sprintf(msgPrefix, "%s", appStr);
+         }
+    }
+ return ourMsg;
+ } /* ourRCMsg() */
+ 
+ void StrUpper(char *s)
+ {
+    while (*s != '\0')
+    {
+       if (isalpha((int)(unsigned char)*s))
+          *s = (char)toupper((int)(unsigned char)*s);
+       s++;
+ 
+    } /* end while */
+ } /* StrUpper() */
+ 
+ BSA_Int16 xparsePath(
+     long           BSAHandle,
+     char          *pathname,
+     char          *hl,
+     char          *ll)
+ {
+    /*=== code taken from dscparse.c ParseDestOperand function ===*/
+ 
+    dsInt16_t    opLen;
+    dsInt16_t    x;
+ 
+    *hl = *ll = '\0';
+ 
+    strcpy(hl, pathname);   /* use hl as working area */
+    if ((opLen = strlen(hl)) > 0)
+    {
+       /*=== Find the ll portion of the name ===*/
+       #ifdef MBCS
+       {
+          char *llstart;
+          llstart = strrchr(hl,DIR_DELIMITER);
+          if (llstart == NULL)
+             x = 0;
+          else
+             x = llstart - hl;
+       }
+       #else
+          for (x = opLen-1; x>0 && hl[x]!=DIR_DELIMITER; x--);
+       #endif
+ 
+          /*=== If there is no leading delimiter then add one ===*/
+          if (hl[x] != DIR_DELIMITER)
+             strcpy(ll, STR_DIR_DELIMITER);
+ 
+          strncat(ll, hl+x, opLen-x);
+ 
+          hl[x] = '\0';          /* Shorten hl by length of ll */
+    }
+    return 0;
+ }
+ 
+ BSA_Int16 xlateRC(
+     long           BSAHandle,
+     BSA_Int16      dsmRC,
+     BSA_Int16      *bsaRCP)
+ 
+ {
+    switch (dsmRC)
+    {
+       case DSM_RC_OK:
+          *bsaRCP=BSA_RC_OK;                              break;
+ 
+       case DSM_RC_ABORT_ACTIVE_NOT_FOUND:
+          *bsaRCP=BSA_RC_ABORT_ACTIVE_NOT_FOUND;          break;
+ 
+       case DSM_RC_ABORT_SYSTEM_ERROR:
+          *bsaRCP=BSA_RC_ABORT_SYSTEM_ERROR;              break;
+ 
+       case DSM_RC_ABORT_BAD_VERIFIER:
+       case DSM_RC_AUTH_FAILURE:
+       case DSM_RC_REJECT_ID_UNKNOWN:
+       case DSM_RC_REJECT_DUPLICATE_ID:
+          *bsaRCP=BSA_RC_AUTHENTICATION_FAILURE;          break;
+ 
+       case DSM_RC_BAD_CALL_SEQUENCE:
+          *bsaRCP=BSA_RC_BAD_CALL_SEQUENCE;               break;
+ 
+       case DSM_RC_INVALID_DS_HANDLE:
+          *bsaRCP=BSA_RC_BAD_HANDLE;                      break;
+ 
+       case DSM_RC_BUFF_TOO_SMALL:
+          *bsaRCP=BSA_RC_BUFFER_TOO_SMALL;                break;
+ 
+       case DSM_RC_DESC_TOOLONG:
+          *bsaRCP=BSA_RC_DESC_TOO_LONG;                   break;
+ 
+       case DSM_RC_FILESPACE_TOOLONG:
+          *bsaRCP=BSA_RC_OBJECTSPACE_TOO_LONG;            break;
+ 
+       /* some other condition here ? */
+       case DSM_RC_PASSWD_TOOLONG:
+          *bsaRCP=BSA_RC_INVALID_TOKEN;                   break;
+ 
+       case DSM_RC_INVALID_VOTE:
+          *bsaRCP=BSA_RC_INVALID_VOTE;                    break;
+ 
+       case DSM_RC_INVALID_OPT:
+          *bsaRCP=BSA_RC_INVALID_KEYWORD;                 break;
+ 
+       /*  ? what conditions cause this - object already exists ?
+       case DSM_RC_?:
+          *bsaRCP=BSA_RC_MATCH_EXISTS;                    break;
+       */
+ 
+       case DSM_RC_MORE_DATA:
+          *bsaRCP=BSA_RC_MORE_DATA;                       break;
+ 
+       /* not supported - for QueryAccessRule
+       case :
+          *bsaRCP=BSA_RC_MORE_RULES;                      break;
+       */
+ 
+       case DSM_RC_NEWPW_REQD:
+          *bsaRCP=BSA_RC_NEWTOKEN_REQD;                   break;
+ 
+       case DSM_RC_ABORT_NO_MATCH:
+       case DSM_RC_FILE_SPACE_NOT_FOUND:
+       /*=== rc for query ===*/
+          *bsaRCP=BSA_RC_NO_MATCH;                        break;
+       /*=== if this return code comes on Delete, use OBJECT_NOT_FOUND
+             - see xopndel.c ===*/
+ 
+       case DSM_RC_FINISHED:
+          *bsaRCP=BSA_RC_NO_MORE_DATA;                    break;
+ 
+       case DSM_RC_ABORT_NO_LOG_SPACE:
+       case DSM_RC_ABORT_NO_DB_SPACE:
+       case DSM_RC_ABORT_NO_MEMORY:
+       case DSM_RC_ABORT_NO_REPOSIT_SPACE:
+       case DSM_RC_REJECT_NO_RESOURCES:
+       case DSM_RC_REJECT_NO_MEMORY:
+       case DSM_RC_REJECT_NO_DB_SPACE:
+       case DSM_RC_REJECT_NO_LOG_SPACE:
+          *bsaRCP=BSA_RC_NO_RESOURCES;                    break;
+ 
+       case DSM_RC_NULL_DATABLKPTR:
+          *bsaRCP=BSA_RC_NULL_DATABLKPTR;                 break;
+ 
+       case DSM_RC_NULL_OBJNAME:
+          *bsaRCP=BSA_RC_NULL_OBJNAME;                    break;
+ 
+       case DSM_RC_NULL_BUFPTR:
+          *bsaRCP=BSA_RC_NULL_POINTER;                    break;
+ 
+       /* not supported - for DeleteAccessRule
+       case :
+          *bsaRCP=BSA_RC_NULL_RULEID;                     break;
+       */
+ 
+       case DSM_RC_HL_TOOLONG:
+       case DSM_RC_LL_TOOLONG:
+          *bsaRCP=BSA_RC_OBJECT_NAME_TOO_LONG;            break;
+ 
+       /* not supported - for DeletePolicyDomain
+       case :
+          *bsaRCP=BSA_RC_OBJECT_NOT_EMPTY;                break;
+       */
+ 
+       /* same as NO_MATCH for DeleteObject
+       case :
+          *bsaRCP=BSA_RC_OBJECT_NOT_FOUND;                break;
+       */
+ 
+       case DSM_RC_OBJINFO_TOOLONG:
+          *bsaRCP=BSA_RC_OBJINFO_TOO_LONG;                break;
+ 
+       /* same as BSA_RC_OBJECT_NAME_TOO_LONG
+       case :
+          *bsaRCP=BSA_RC_OBJNAME_TOO_LONG;                break;
+       */
+ 
+       /* not supported - for CreatePolicySet, etc
+       case :
+          *bsaRCP=BSA_RC_OPERATION_NOT_AUTHORIZED;        break;
+       */
+ 
+       case DSM_RC_OLDPW_REQD:
+          *bsaRCP=BSA_RC_OLDTOKEN_REQD;                   break;
+ 
+       case DSM_RC_REJECT_VERIFIER_EXPIRED:
+          *bsaRCP=BSA_RC_TOKEN_EXPIRED;                   break;
+ 
+       case DSM_RC_WILL_ABORT:
+       case DSM_RC_CHECK_REASON_CODE:
+          *bsaRCP=BSA_RC_TXN_ABORTED;                     break;
+ 
+       case DSM_RC_UNMATCHED_QUOTE:
+          *bsaRCP=BSA_RC_UNMATCHED_QUOTE;                 break;
+ 
+       /* not supported - for DeleteUser
+       case :
+          *bsaRCP=BSA_RC_USER_OWNS_OBJECT;                break;
+       */
+ 
+       default:
+       {
+          /*=========================================================
+           No suitable match, so print message in log, if we still
+           have a handle.  AFSdsmInit calls ApiCleanUp in certain error
+           situations.  We lose the handle in those cases so check
+           for it.
+           =========================================================*/
+ 
+          char         rcMsg[DSM_MAX_RC_MSG_LENGTH] ;
+          char         errPrefix[DSM_MAX_RC_MSG_LENGTH + 1];
+          char         ourMessage[DSM_MAX_RC_MSG_LENGTH + 1];
+          dsUint32_t   dsmHandle;
+ 
+          memset(errPrefix,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+          memset(ourMessage,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+ 
+          if (BSAHandle)
+          {
+             dsmHandle = BSAHandle;
+             AFSdsmRCMsg(dsmHandle,dsmRC,rcMsg) ;
+             strcat(rcMsg, "\n");
+             sprintf(traceStr2,
+                    "xlateRC - %s", rcMsg);
+             ourTrace(BSAHandle,TrFL, traceStr2);
+             strcpy(ourMessage, ourRCMsg(dsmRC, errPrefix));
+             ourLogEvent_Ex(BSAHandle, logLocal, ourMessage, errPrefix, logSevError);
+          }
+ 
+          *bsaRCP = ADSM_RC_ERROR;
+       }
+    }
+ 
+    /*=== trace only if we have a valid handle ===*/
+    if (dsmRC && BSAHandle)
+    {
+       sprintf(traceStr2, "xlateRC: TSM rc >%d< , BSA rc >%d<", dsmRC, *bsaRCP);
+       ourTrace(BSAHandle, TrFL, traceStr2);
+    }
+    return DSM_RC_OK ;
+ }
+ 
+ void stdXOpenMsgMap(dsInt16_t  rc,  char *msg)
+ {
+    switch(rc)
+    {
+       case ADSM_RC_ERROR:
+            strcpy(msg, "TSM rc error, see ADSM error log.");
+       case ADSM_RC_INVALID_NODE:
+            strcpy(msg, "BSAObjectOwner doesn't match value session Init.");
+            break;
+ 
+       case ADSM_RC_INVALID_COPYTYPE:
+            strcpy(msg, "Invalid copy type.");
+            break;
+ 
+       case ADSM_RC_INVALID_OBJTYPE:
+            strcpy(msg, "Invalid object type.");
+            break;
+ 
+       case ADSM_RC_INVALID_STATUS:
+            strcpy(msg, "Invalid Object Status.");
+            break;
+ 
+       case ADSM_RC_INVALID_ST_VER:
+            strcpy(msg, "Invalid object descriptor structure version.");
+            break;
+ 
+       case ADSM_RC_OWNER_TOO_LONG:
+            strcpy(msg, "Object owner name too long.");
+            break;
+ 
+       case ADSM_RC_PSWD_TOO_LONG:
+            strcpy(msg, "Client password too long.");
+            break;
+ 
+      case ADSM_RC_PSWD_GEN:
+           strcpy(msg, "Password input required .");
+           break;
+ 
+      default:
+            strcpy(msg, "No message available");
+            break;
+    }
+ }
+ 
+ BSA_Int16 fillArchiveResp(
+ long                BSAHandle,
+ ObjectDescriptor   *BSAobjDescP,
+ qryRespArchiveData *respArchiveP
+ )
+ {
+    XAPIObjInfo   *xapiObjInfoP;
+ 
+    strcpy(BSAobjDescP->Owner.appObjectOwner, respArchiveP->owner);
+    strcpy(BSAobjDescP->objName.objectSpaceName, respArchiveP->objName.fs);
+ 
+    /*=== concatenate hl and ll for pathName ===*/
+    strcpy(BSAobjDescP->objName.pathName, respArchiveP->objName.hl);
+    strcat(BSAobjDescP->objName.pathName, respArchiveP->objName.ll);
+ 
+    BSAobjDescP->createTime.tm_year = respArchiveP->insDate.year-1900;
+    BSAobjDescP->createTime.tm_mon  = respArchiveP->insDate.month-1;
+    BSAobjDescP->createTime.tm_mday = respArchiveP->insDate.day  ;
+    BSAobjDescP->createTime.tm_hour = respArchiveP->insDate.hour ;
+    BSAobjDescP->createTime.tm_min  = respArchiveP->insDate.minute ;
+    BSAobjDescP->createTime.tm_sec  = respArchiveP->insDate.second ;
+ 
+    BSAobjDescP->copyId.left  = respArchiveP->objId.hi;
+    BSAobjDescP->copyId.right = respArchiveP->objId.lo;
+ 
+    BSAobjDescP->restoreOrder.left  = respArchiveP->restoreOrderExt.lo_hi;
+    BSAobjDescP->restoreOrder.right = respArchiveP->restoreOrderExt.lo_lo;
+ 
+    strcpy(BSAobjDescP->lGName, respArchiveP->mcName) ;
+ 
+    xapiObjInfoP = (XAPIObjInfo *)&(respArchiveP->objInfo);
+    BSAobjDescP->size.left = xapiObjInfoP->size.left;
+    BSAobjDescP->size.right= xapiObjInfoP->size.right;
+    strcpy(BSAobjDescP->resourceType, xapiObjInfoP->resourceType);
+    strcpy(BSAobjDescP->desc, xapiObjInfoP->partDesc);
+    strcpy(BSAobjDescP->objectInfo, xapiObjInfoP->partObjInfo);
+ 
+    if (respArchiveP->objName.objType == DSM_OBJ_DIRECTORY)
+       BSAobjDescP->objectType = BSAObjectType_DIRECTORY;
+    else
+       BSAobjDescP->objectType = BSAObjectType_FILE;
+       /*=== future - type DATABASE ?? ===*/
+ 
+       BSAobjDescP->status = BSAObjectStatus_ACTIVE;
+       XOPENRETURN(BSAHandle, "fillArchiveResp",
+                   BSA_RC_SUCCESS,__FILE__,__LINE__);
+ }
+ 
+ BSA_Int16 fillBackupResp(
+ long               BSAHandle,
+ ObjectDescriptor  *BSAobjDescP,
+ qryRespBackupData *respBackupP
+ )
+ {
+    XAPIObjInfo   *xapiObjInfoP;
+ 
+    strcpy(BSAobjDescP->Owner.appObjectOwner, respBackupP->owner);
+    strcpy(BSAobjDescP->objName.objectSpaceName, respBackupP->objName.fs);
+ 
+    /*=== concatenate hl and ll for pathName ===*/
+    strcpy(BSAobjDescP->objName.pathName, respBackupP->objName.hl);
+    strcat(BSAobjDescP->objName.pathName, respBackupP->objName.ll);
+ 
+    BSAobjDescP->createTime.tm_year = respBackupP->insDate.year-1900;
+    BSAobjDescP->createTime.tm_mon  = respBackupP->insDate.month-1;
+    BSAobjDescP->createTime.tm_mday = respBackupP->insDate.day  ;
+    BSAobjDescP->createTime.tm_hour = respBackupP->insDate.hour ;
+    BSAobjDescP->createTime.tm_min  = respBackupP->insDate.minute ;
+    BSAobjDescP->createTime.tm_sec  = respBackupP->insDate.second ;
+ 
+    BSAobjDescP->copyId.left  = respBackupP->objId.hi;
+    BSAobjDescP->copyId.right = respBackupP->objId.lo;
+ 
+    BSAobjDescP->restoreOrder.left  = respBackupP->restoreOrderExt.lo_hi;
+    BSAobjDescP->restoreOrder.right = respBackupP->restoreOrderExt.lo_lo;
+ 
+    strcpy(BSAobjDescP->lGName, respBackupP->mcName) ;
+ 
+    xapiObjInfoP = (XAPIObjInfo *)&(respBackupP->objInfo);
+    BSAobjDescP->size.left = xapiObjInfoP->size.left;
+    BSAobjDescP->size.right= xapiObjInfoP->size.right;
+    strcpy(BSAobjDescP->resourceType, xapiObjInfoP->resourceType);
+    strcpy(BSAobjDescP->desc, xapiObjInfoP->partDesc);
+    strcpy(BSAobjDescP->objectInfo, xapiObjInfoP->partObjInfo);
+ 
+    if (respBackupP->objName.objType == DSM_OBJ_DIRECTORY)
+       BSAobjDescP->objectType = BSAObjectType_DIRECTORY;
+    else
+       BSAobjDescP->objectType = BSAObjectType_FILE;
+       /*=== future - type DATABASE ?? ===*/
+ 
+    if (respBackupP->objState == DSM_ACTIVE)
+       BSAobjDescP->status = BSAObjectStatus_ACTIVE;
+    else
+       BSAobjDescP->status = BSAObjectStatus_INACTIVE;
+       /*=== ?? check for any other ===*/
+ 
+    XOPENRETURN(BSAHandle, "fillRBackupResp",
+                BSA_RC_SUCCESS,__FILE__,__LINE__);
+ }
+ 
+ 
+ afs_int32 dsm_MountLibrary()
+ {
+ void * dynlib = NULL ;
+ 
+ #ifdef DEBUG_BUTC
+     printf("dsm_MountLibrary : inside function.  \n");
+ #endif
+ #if defined(AFS_AIX_ENV)
+         dynlib = dlopen("/usr/lib/libApiDS.a(dsmapish.o)", RTLD_NOW | RTLD_LOCAL | RTLD_MEMBER);
+ #elif defined(AFS_SUN5_ENV) || defined(AFS_LINUX26_ENV)
+         dynlib = dlopen("/usr/lib/libApiDS.so", RTLD_NOW | RTLD_LOCAL);
+ #else
+         dynlib = NULL;
+ #endif
+ 
+     	if (dynlib == NULL) {
+         	ELog(0,"dsm_MountLibrary: The dlopen call to load the libApiDS shared library failed\n");
+         	return(BUTX_NOLIBRARY);
+     	}
+ 
+ #ifdef DEBUG_BUTC
+     	printf("dsm_MountLibrary : SUCCESS to Open the libApiDS shared library. \n");
+ #endif
+ #if defined(AFS_AIX_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_LINUX26_ENV)
+ 	AFSdsmBeginQuery = (dsInt16_t (*)( dsUint32_t dsmHandle, dsmQueryType queryType, dsmQueryBuff *queryBuffer)) dlsym((void *)dynlib, "dsmBeginQuery"); 
+ 	AFSdsmGetNextQObj = (dsInt16_t (*)( dsUint32_t dsmHandle, DataBlk *dataBlkPtr))dlsym((void *)dynlib, "dsmGetNextQObj") ;
+ 	AFSdsmEndQuery = (dsInt16_t (*)( dsUint32_t dsmHandle))dlsym((void *)dynlib, "dsmEndQuery");
+ 	AFSdsmRCMsg = (dsInt16_t (*)( dsUint32_t dsmHandle, dsInt16_t dsmRC, char *msg))dlsym((void *)dynlib, "dsmRCMsg");
+ 	AFSdsmLogEventEx = (dsInt16_t (*)( dsUint32_t dsmHandle, dsmLogExIn_t *dsmLogExInP, dsmLogExOut_t *dsmLogExOutP))dlsym((void *)dynlib, "dsmLogEventEx");
+ 	AFSdsmTrace = (dsInt16_t (*)( dsUint32_t dsmHandle, char * string ))dlsym((void *)dynlib, "dsmTrace");
+ 	AFSdsmTerminate = (dsInt16_t (*)( dsUint32_t dsmHandle))dlsym((void *)dynlib, "dsmTerminate");
+ 	AFSdsmSendData = (dsInt16_t (*)( dsUint32_t dsmHandle, DataBlk *dataBlkPtri))dlsym((void *)dynlib, "dsmSendData");
+ 	AFSdsmBeginTxn = (dsInt16_t (*)( dsUint32_t dsmHandle))dlsym((void *)dynlib, "dsmBeginTxn");
+ 	AFSdsmDeleteObj = (dsInt16_t (*)( dsUint32_t dsmHandle, dsmDelType delType, dsmDelInfo delInfo))dlsym((void *)dynlib, "dsmDeleteObj");
+ 	AFSdsmEndTxn = (dsInt16_t (*)( dsUint32_t dsmHandle, dsUint8_t vote, dsUint16_t *reason))dlsym((void *)dynlib, "dsmEndTxn");
+ 	AFSdsmQueryApiVersion = (void (*)( dsmApiVersion *apiVersionP))dlsym((void *)dynlib, "dsmQueryApiVersion");
+ 	AFSdsmInit = (dsInt16_t (*)( dsUint32_t *dsmHandle, dsmApiVersion *dsmApiVersionP, char *clientNodeNameP, char *clientOwnerNameP, char *clientPasswordP, char *applicationType, char *configfile, char *options))dlsym((void *)dynlib, "dsmInit");
+ 	AFSdsmQuerySessInfo = (dsInt16_t (*)( dsUint32_t dsmHandle, ApiSessInfo *SessInfoP))dlsym((void *)dynlib, "dsmQuerySessInfo");
+ 	AFSdsmBeginGetData = (dsInt16_t (*)(dsUint32_t dsmHandle, dsBool_t mountWait, dsmGetType getType, dsmGetList *dsmGetObjListP))dlsym((void *)dynlib, "dsmBeginGetData");
+ 	AFSdsmGetObj = (dsInt16_t (*)( dsUint32_t dsmHandle, ObjID *objIdP, DataBlk *dataBlkPtr))dlsym((void *)dynlib, "dsmGetObj");
+ 	AFSdsmEndGetObj = (dsInt16_t (*)( dsUint32_t dsmHandle))dlsym((void *)dynlib, "dsmEndGetObj");
+ 	AFSdsmEndGetData = (dsInt16_t (*)( dsUint32_t dsmHandle))dlsym((void *)dynlib, "dsmEndGetData");
+ 	AFSdsmGetData = (dsInt16_t (*)( dsUint32_t dsmHandle, DataBlk *dataBlkPtr))dlsym((void *)dynlib, "dsmGetData");
+ 	AFSdsmEndSendObj = (dsInt16_t (*)( dsUint32_t dsmHandle))dlsym((void *)dynlib, "dsmEndSendObj");
+ 	AFSdsmRegisterFS = (dsInt16_t (*)( dsUint32_t dsmHandle, regFSData *regFilespaceP))dlsym((void *)dynlib, "dsmRegisterFS");
+ 	AFSdsmBindMC = (dsInt16_t (*)( dsUint32_t dsmHandle, dsmObjName *objNameP, dsmSendType sendType, mcBindKey *mcBindKeyP))dlsym((void *)dynlib, "dsmBindMC");
+ 	AFSdsmSendObj = (dsInt16_t (*)( dsUint32_t dsmHandle, dsmSendType sendType, void *sendBuff, dsmObjName *objNameP, ObjAttr *objAttrPtr, DataBlk *dataBlkPtr))dlsym((void *)dynlib, "dsmSendObj");
+ 	AFSdsmChangePW = (dsInt16_t (*)( dsUint32_t dsmHandle, char *oldPW, char *newPW))dlsym((void *)dynlib, "dsmChangePW");
+ 
+ 
+ 	if (	!AFSdsmBeginQuery || !AFSdsmGetNextQObj || !AFSdsmEndQuery ||
+ 		!AFSdsmRCMsg || !AFSdsmLogEventEx || !AFSdsmTrace || 
+ 		!AFSdsmTerminate || !AFSdsmEndGetObj || !AFSdsmSendData || 
+ 		!AFSdsmBeginTxn || !AFSdsmDeleteObj || !AFSdsmEndGetData ||
+         	!AFSdsmEndTxn || !AFSdsmQueryApiVersion || !AFSdsmInit || 
+ 		!AFSdsmGetData || !AFSdsmQuerySessInfo || !AFSdsmBeginGetData ||
+ 		!AFSdsmGetObj || !AFSdsmEndSendObj || !AFSdsmRegisterFS || 
+ 		!AFSdsmBindMC || !AFSdsmSendObj || !AFSdsmChangePW ) 
+ 	{
+         	ELog(0,"dsm_MountLibrary: The dlopen call to load the TSM shared library failed\n");
+         	return(BUTX_NOLIBRARY);
+     	}
+ #ifdef DEBUG_BUTC
+     		printf("dsm_MountLibrary : All TSM function pointers initialized. \n");
+ #endif
+ 
+ #endif
+ 	dsm_init = 1 ;
+ #ifdef DEBUG_BUTC
+     printf("dsm_MountLibrary : leaving function. \n");
+ #endif
+ 	return 0 ;
+ 
+ }
+ 
+ BSA_Int16 BSAInit( long     *BSAHandleP,
+                    SecurityToken  *clientPasswordP,
+                    ObjectOwner    *objectOwnerP,
+                    char          **envP )
+ {
+    dsInt16_t        rc = 0;
+    dsInt16_t        saverc = 0;
+    BSA_Int16        bsaRC = 0;
+    dsUint32_t       dsmHandle;   /* use diff field when talking to base
+                                    code in case either format changes */
+    dsmApiVersion    xapiHdrVer;  /* Xopen API build version           */
+    dsmApiVersion    apiLibVer;  /* Xopen API Libary version          */
+ 
+    dsUint32_t       xapiVersion, apiVersion;
+    envSetUp         dsmEnvSetUp;
+ 
+    /*==================================================================
+      Today the BSA constants have the same values as the DSM constants.
+      If this changes, use strncpy.
+      =================================================================*/
+ 
+    char            rcmsg[DSM_MAX_RC_MSG_LENGTH + 1];
+    char            dsmNode[DSM_MAX_NODE_LENGTH];
+    char            dsmOwner[DSM_MAX_OWNER_LENGTH];
+    char            dsmPswd[DSM_MAX_VERIFIER_LENGTH];
+    char           *dsmNodeP;
+    char           *dsmOwnerP;
+    char           *dsmPswdP;
+    char            options[DSM_MAX_RC_MSG_LENGTH];
+    char           *optionP = NULL;
+    char            TDPLibName[BSA_MAX_DESC];
+    char            TDPILibName[BSA_MAX_DESC];
+    int             i=0;
+    char            errPrefix[DSM_MAX_RC_MSG_LENGTH + 1];
+    char            ourMessage[DSM_MAX_RC_MSG_LENGTH + 1];
+    char            rcMsg[DSM_MAX_RC_MSG_LENGTH + 1];
+ 
+    dsmHandle = 0;
+   *BSAHandleP = 0;
+ 
+ #ifdef DEBUG_BUTC
+    printf("BSAInit : inside function. \n");
+ #endif
+    memset(errPrefix,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+    memset(ourMessage,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+    memset(rcMsg,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    /*==================================================================
+     Trace won't work before AFSdsmInit, moved to after call to AFSdsmInit
+     The XOpen library is built by statically linking with the API and
+     client common modules.  So, the version checking is unnecessary.
+     We'll fill in the value anyway for consistency.
+     ==================================================================*/
+    memset(&xapiHdrVer,0x00,sizeof(dsmApiVersion));
+    memset(&apiLibVer,0x00,sizeof(dsmApiVersion));
+    memset(&dsmEnvSetUp,0x00,sizeof(envSetUp));
+ 
+    AFSdsmQueryApiVersion(&apiLibVer);
+ 
+    xapiHdrVer.version = DSM_API_VERSION;  /* Set the applications    */
+    xapiHdrVer.release = DSM_API_RELEASE;  /* compile time version.   */
+    xapiHdrVer.level   = DSM_API_LEVEL;    /* version                 */
+ 
+    xapiVersion = (1000 * DSM_API_VERSION) + (100 * DSM_API_RELEASE)
+                   + DSM_API_LEVEL;
+ 
+    apiVersion  = (1000 * apiLibVer.version) + (100 * apiLibVer.release)
+                   + apiLibVer.level;
+ 
+    /* check for compatibility problems */
+    if (apiVersion < xapiVersion)
+    	return ADSM_RC_ERROR;
+ 
+    /*==== Init global area ===*/
+ 
+    memset(&xopenGbl,0x00, sizeof(xGlobal));  /* Zero out block.        */
+ 
+    memset(dsmNode,0x00,DSM_MAX_NODE_LENGTH);
+    memset(dsmOwner,0x00,DSM_MAX_OWNER_LENGTH);
+    memset(dsmPswd,0x00,DSM_MAX_VERIFIER_LENGTH);
+    memset(options,0x00,DSM_MAX_RC_MSG_LENGTH);
+    memset(TDPLibName,0x00,BSA_MAX_DESC);
+    memset(TDPILibName,0x00,BSA_MAX_DESC);
+ 
+    memset(rcmsg,         '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+ 
+ 
+    /*=== Validate the inputs ===*/
+ 
+    if (objectOwnerP)
+    {
+       if (strlen(objectOwnerP->bsaObjectOwner) > BSA_MAX_BSAOBJECT_OWNER)
+       {
+          bsaRC = ADSM_RC_OWNER_TOO_LONG;
+          return(bsaRC);
+       }
+ 
+       if (strlen(objectOwnerP->appObjectOwner) > BSA_MAX_APPOBJECT_OWNER)
+       {
+          bsaRC = ADSM_RC_OWNER_TOO_LONG;
+          return(bsaRC);
+       }
+ 
+       if (objectOwnerP->bsaObjectOwner[0] == '\0') /* empty string */
+          dsmNodeP = NULL;
+       else
+       {
+          strcpy(dsmNode, objectOwnerP->bsaObjectOwner);
+          dsmNodeP = dsmNode;
+       }
+ 
+       if (objectOwnerP->appObjectOwner[0] == '\0') /* empty string  */
+          dsmOwnerP = NULL;
+       else
+       {
+          strcpy(dsmOwner, objectOwnerP->appObjectOwner);
+          dsmOwnerP = dsmOwner;
+       }
+    }
+    else
+    {
+       dsmNodeP = NULL;
+       dsmOwnerP = NULL;
+    }
+ 
+    if (clientPasswordP != NULL)
+    {
+       if (strlen((const char *)clientPasswordP) > BSA_MAX_TOKEN_SIZE)
+       {
+          bsaRC = ADSM_RC_PSWD_TOO_LONG;
+          return(bsaRC);
+       }
+ 
+       strcpy(dsmPswd, (const char *)clientPasswordP);
+       dsmPswdP = dsmPswd;
+    }
+    else
+       dsmPswdP = NULL;
+       {
+           while ((envP[i] != NULL) && (envP[i] != '\0'))
+           {
+              strcat(options, "-");
+              strcat(options, envP[i]);
+              if ((envP[i+1] != NULL) && (envP[i+1] != '\0'))
+                 strcat(options, " ");
+                 i++;
+           }
+ 
+           if (options[0] == '\0')   /* empty string */
+              optionP = NULL;
+           else
+              optionP = options;
+ 
+           rc = AFSdsmInit(&dsmHandle,   /* On return contains session handle.   */
+                        &xapiHdrVer,   /* Version of the API we are using.     */
+                        dsmNodeP,      /* node name                            */
+                        dsmOwnerP,     /* owner name                           */
+                        dsmPswdP,      /* password                             */
+                        APPLTYPE,      /* Name of our node type.               */
+                        NULL,          /* no API config file name              */
+                        optionP);      /* option string                        */
+      }
+ 
+      if (rc == DSM_RC_OK)
+      {
+         /*=== now that AFSdsmInit issued, we can trace ===*/
+         sprintf(traceStr2,
+                 "BSAInit: original bsaOwner=%s, appOwner=%s, token=%s, Appl Type=%s, options=%s.",
+                  dsmNode, dsmOwner, dsmPswd, APPLTYPE, options);
+         ourTrace(dsmHandle, TrFL, traceStr2);
+         {
+               strcpy(TDPLibName, TDP_LIBNAME);
+               sprintf(traceStr2,
+                      "BSAInit: Using TSM Native API library : %s", TDPLibName);
+               ourTrace(dsmHandle, TrFL, traceStr2);
+         }
+      }
+ 
+ 
+      /*=================================================================
+      If the password expired, continue initialization so the session
+      can continue.
+ 
+      Save the 'password expired' rc away, so we can return it to the
+      caller.
+ 
+      The application will be responsible for issuing a BSAChangeToken()
+      to update the password.
+      =================================================================*/
+      if (rc == DSM_RC_REJECT_VERIFIER_EXPIRED)
+      {
+         /*=== don't return yet - init global so session can continue ===*/
+ 
+          saverc = rc;
+          rc = DSM_RC_OK;
+      }
+      else
+         if ((rc == DSM_RC_NO_OWNER_REQD) ||
+             (rc == DSM_RC_NO_NODE_REQD))       /* pswd=generate */
+         {
+             AFSdsmTerminate(dsmHandle);
+             bsaRC = ADSM_RC_PSWD_GEN;
+             return (bsaRC);
+         }
+ 
+ 
+    /*==================================================================
+      If we ran into any problems so far, rc will be non-zero or 'true'.
+ 
+      This is not true for password expired, since we reset rc to zero
+      in that case.  We'll have to check for that later so we return
+      the 'password expired' indication to the caller.
+      ==================================================================*/
+ 
+    if (rc)
+    {
+       AFSdsmRCMsg(dsmHandle, rc, rcmsg);
+       sprintf(traceStr2, "BSAInit(AFSdsmInit): Messages - %s ", rcmsg);
+       ourTrace(dsmHandle, TrFL, traceStr2);
+       strcpy(ourMessage, ourRCMsg(rc, errPrefix));
+       ourLogEvent_Ex(dsmHandle, logLocal, ourMessage, errPrefix, logSevError);
+       xlateRC(*BSAHandleP, rc, &bsaRC); /* BSAHandle still 0, but not used */
+       AFSdsmTerminate(dsmHandle);          /* clean up memory blocks          */
+       return (bsaRC);
+    }
+ 
+ 
+    {
+       char msg[256];                    /* format string and watch for NULLs */
+ 
+       strcpy(msg, "BSAInit for node=");
+ 
+       if (objectOwnerP)
+       {
+          if (dsmNodeP)
+             strcat(msg, dsmNodeP);
+          else
+             strcat(msg, "<empty>");
+       }
+       else
+          strcat(msg, "<NULL>");
+ 
+       strcat(msg, ", owner=");
+ 
+       if (objectOwnerP)
+       {
+          if (dsmOwnerP)
+             strcat(msg, dsmOwnerP);
+          else
+             strcat(msg, "<empty>");
+       }
+       else
+          strcat(msg, "<NULL>");
+ 
+       strcat(msg, ".\n");
+ 
+       sprintf(traceStr, msg);
+    }
+ 
+    *BSAHandleP = (long)dsmHandle;
+ 
+ 
+    /*=================================================================
+     For password expired processing the application is responsible for
+     issuing BSAChangeToken() to update the password, when they see the
+     'expired password' return code.
+ 
+     The BSAChangeToken() command will issue the AFSdsmQuerySessInfo()
+     call, so don't issue it here.
+     =================================================================*/
+ 
+    if (!saverc)               /* don't call this if we got pswd expire */
+    {
+       /*=== now query session info to populate the global structure ===*/
+ 
+       xopenGbl.dsmSessInfo.stVersion = ApiSessInfoVersion;
+       rc = AFSdsmQuerySessInfo(dsmHandle,                /* Session handle */
+                             &xopenGbl.dsmSessInfo);   /* Output struct  */
+ 
+       if (rc)
+       {
+          sprintf(traceStr2, "BSAInit(AFSdsmQuerySessInfo): error rc = %d", rc);
+          ourTrace(dsmHandle, TrFL, traceStr2);
+          AFSdsmTerminate(dsmHandle);
+          *BSAHandleP = 0;
+       }
+       else
+       {
+          sprintf(traceStr2, "BSAInit: Actual node=%s, actual DSM owner=%s, servername=%s.",
+                  xopenGbl.dsmSessInfo.id, xopenGbl.dsmSessInfo.owner,
+                  xopenGbl.dsmSessInfo.adsmServerName);
+          ourTrace(dsmHandle, TrFL, traceStr2);
+       }
+    }
+    else
+    {
+       /*============================================================
+         Indicate in the session flags that we encountered a password
+         expiration condition.  The application will know that this
+         happened via the return code.
+         ===========================================================*/
+ 
+       xopenGbl.sessFlags = (xopenGbl.sessFlags | FL_PSWD_EXPIRE);
+    }
+ 
+    /*=== Save bsaObjectOwner (node name) value passed on Init ===*/
+ 
+    if (dsmNodeP)
+       strcpy(xopenGbl.bsaObjectOwner, dsmNodeP);
+ 
+      /*================================================================
+       Check to see if we saved away the 'expired password' return code.
+       if so, return it to the caller.
+       ================================================================*/
+ 
+    if (saverc)
+       rc = saverc;
+ 
+    xlateRC(*BSAHandleP, rc, &bsaRC);
+ #ifdef DEBUG_BUTC
+    	printf("BSAInit : Leaving Function. \n");
+ #endif
+    return (bsaRC);
+ }
+ 
+ BSA_Int16 BSATerminate(
+     long              BSAHandle
+ )
+ {
+    dsInt16_t      rc = 0;
+    BSA_Int16      bsaRC = 0;
+    dsUint32_t     dsmHandle;
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    dsmHandle = BSAHandle;
+    sprintf(traceStr2, "BSATerminate ENTRY: BSAHandle is %d.",
+                       BSAHandle);
+    ourTrace(dsmHandle, TrFL, traceStr2);
+ 
+    rc = AFSdsmTerminate(dsmHandle);
+    dsmHandle = 0;
+    xlateRC(dsmHandle, rc, &bsaRC);
+ 
+    return (bsaRC);
+ 
+ }
+ 
+ BSA_Int16 BSAChangeToken(
+    long           BSAHandle,
+    SecurityToken *oldTokenP,
+    SecurityToken *newTokenP
+ )
+ {
+    dsInt16_t      rc = 0;
+    BSA_Int16      bsaRC = 0;
+    dsUint32_t     dsmHandle;
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    dsmHandle = BSAHandle;
+ 
+    sprintf(traceStr2, "BSAChangeToken ENTRY: BSAHandle:%d old:>%s< new:>%s<",
+            BSAHandle,oldTokenP,newTokenP);
+    ourTrace(dsmHandle, TrFL, traceStr2);
+ 
+    rc = AFSdsmChangePW(dsmHandle, (char *)oldTokenP, (char *)newTokenP);
+ 
+    if (rc)
+    {
+       xlateRC(BSAHandle, rc, &bsaRC);
+       XOPENRETURN(BSAHandle,"BSAChangeToken(AFSdsmChangePW)",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    xopenGbl.sessFlags = (xopenGbl.sessFlags ^ FL_PSWD_EXPIRE); /* set off */
+ 
+     /*=== now query session info to populate the global structure ===*/
+ 
+    xopenGbl.dsmSessInfo.stVersion = ApiSessInfoVersion;
+    rc = AFSdsmQuerySessInfo(dsmHandle,                /* Our session handle  */
+                          &xopenGbl.dsmSessInfo);   /* Output structure.   */
+    if (rc)
+    {
+       /*=== appl should call Terminate ===*/
+       sprintf(traceStr2, "BSAChangeToken(AFSdsmQuerySessInfo): error rc = %d", rc);
+       ourTrace(BSAHandle, TrFL, traceStr2);
+    }
+    xlateRC(BSAHandle, rc, &bsaRC);
+    XOPENRETURN(BSAHandle,"BSAChangeToken",
+                bsaRC,__FILE__,__LINE__);
+ }
+ 
+ BSA_Int16 BSASetEnvironment(
+     long     BSAHandle,
+     char           **envP
+ )
+ {
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    sprintf(traceStr2, "BSASetEnvironment ENTRY: BSAHandle:%d envP:>%p< ",
+            BSAHandle,envP);
+    ourTrace(BSAHandle, TrFL, traceStr2);
+    XOPENRETURN(BSAHandle,"BSASetEnvironment",
+                BSA_RC_BAD_CALL_SEQUENCE,__FILE__,__LINE__);
+ }
+ 
+ BSA_Int16 BSAGetEnvironment(
+    long           BSAHandle,
+    ObjectOwner   *objOwnerP,
+    char         **envP
+ )
+ {
+    dsInt16_t   rc = 0;
+    BSA_Int16   bsaRC = 0;
+    dsUint32_t  dsmHandle;
+    char        envString[ADSM_ENV_STRS][BSA_MAX_DESC];
+    char        maxObjStr[6];  /* conversion field. value range is 16-256 */
+    dsUint32_t  maxObjNum;
+    dsInt16_t   i, j;
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    for (i=0; i<ADSM_ENV_STRS; i++)
+    {
+       memset(envString[i], 0x00, BSA_MAX_DESC);
+    }
+    sprintf(traceStr2, "BSAGetEnvironment ENTRY: BSAHandle:%d ObjOwner:'%s' appOwner:'%s' envP:>%p<.",
+            BSAHandle,
+            objOwnerP->bsaObjectOwner,
+            objOwnerP->appObjectOwner,
+            envP);
+    ourTrace(BSAHandle, TrFL, traceStr2);
+ 
+    dsmHandle = BSAHandle;
+ 
+    /*===============================================================
+     check if BSAInit has been done for now we have only one possible
+     handle value - change in future
+     ==============================================================*/
+    if ((dsmHandle != FIRST_HANDLE) ||
+       (xopenGbl.dsmSessInfo.stVersion != ApiSessInfoVersion))
+        XOPENRETURN(BSAHandle,"BSAGetEnvironment",
+                    BSA_RC_BAD_CALL_SEQUENCE, __FILE__,__LINE__);
+ 
+    if (objOwnerP)
+    {
+       strcpy(objOwnerP->bsaObjectOwner, xopenGbl.dsmSessInfo.id);
+       strcpy(objOwnerP->appObjectOwner, xopenGbl.dsmSessInfo.owner);
+    }
+    else
+       XOPENRETURN(BSAHandle,"BSAGetEnvironment",
+                   BSA_RC_NULL_POINTER, __FILE__,__LINE__);
+ 
+    rc = AFSdsmQuerySessInfo(dsmHandle,                   /* Session Handle */
+                          &xopenGbl.dsmSessInfo);       /* Output struct  */
+ 
+    if (rc)
+       {
+          sprintf(traceStr2, "BSAGetEnvironment(AFSdsmQuerySessInfo): error rc = %d", rc);
+          ourTrace(dsmHandle, TrFL, traceStr2);
+          AFSdsmTerminate(dsmHandle);
+         /* *BSAHandleP = 0; */
+       }
+       else
+       {
+          sprintf(traceStr2, "BSAGetEnvironment: Actual node=%s, actual DSM owner=%s, ServerName=%s.",
+                  xopenGbl.dsmSessInfo.id, xopenGbl.dsmSessInfo.owner, xopenGbl.dsmSessInfo.adsmServerName);
+          ourTrace(dsmHandle, TrFL, traceStr2);
+       }
+ 
+    strcpy(envString[0],"TSMSRVR=");
+    strcat(envString[0],xopenGbl.dsmSessInfo.serverHost);
+ 
+    strcpy(envString[1],"TSMMAXOBJ=");
+    maxObjNum = xopenGbl.dsmSessInfo.maxObjPerTxn;  /* convert to 32 bit */
+    sprintf(maxObjStr,"%lu", maxObjNum );
+    strcat(envString[1], maxObjStr);
+ 
+    strcpy(envString[2], "TSMSRVRSTANZA=");
+    strcat(envString[2], xopenGbl.dsmSessInfo.adsmServerName);
+ 
+    sprintf(traceStr2, "BSAGetEnvironment Value : TSM Server '%s', TSM Max Object '%s',TSM Server STANZA '%s'",
+          envString[0], envString[1], envString[2]);
+    ourTrace(BSAHandle, TrFL, traceStr2);
+ 
+    for (i=0; i< ADSM_ENV_STRS; i++) {
+      if ( *envP == NULL ) {  /* watch for NULL pointers */
+        /* Allocating memory for *envP.*/
+        *envP = (char *) malloc(sizeof(char) * BSA_MAX_DESC +1);
+ 
+        /* copy the content of envString[i] to *envP. */
+         strcpy(*envP,envString[i]);
+         envP++;
+      }
+    }
+ 
+    xlateRC(BSAHandle, rc, &bsaRC);
+    XOPENRETURN(BSAHandle,"BSAGetEnvironment",
+                bsaRC,__FILE__,__LINE__)
+ }
+ 
+ BSA_Int16 BSABeginTxn(
+     long             BSAHandle
+ )
+ {
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    sprintf(traceStr2, "BSABeginTxn ENTRY: BSAHandle:%d", BSAHandle);
+    ourTrace(BSAHandle, TrFL, traceStr2);
+   /*========================================================
+    don't actually issue BeginTxn yet, because we will do our
+    own for Get and Query
+    ========================================================*/
+ 
+    xopenGbl.sessFlags = (xopenGbl.sessFlags | FL_IN_BSA_TXN); /* set on */
+    XOPENRETURN(BSAHandle, "BSABeginTxn",
+                BSA_RC_SUCCESS,__FILE__,__LINE__);
+ }
+ 
+ BSA_Int16 BSAEndTxn(
+     long           BSAHandle,
+     Vote           vote
+ )
+ {
+    dsInt16_t      rc = 0;
+    BSA_Int16      bsaRC = 0;
+    dsUint32_t     dsmHandle;
+    dsUint8_t      dsmVote;
+    dsUint16_t     reason ;
+    char           rsMsg[DSM_MAX_RC_MSG_LENGTH + 1];
+    char           errPrefix[DSM_MAX_RC_MSG_LENGTH + 1];
+    char           ourMessage[DSM_MAX_RC_MSG_LENGTH + 1];
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    memset(errPrefix,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+    memset(rsMsg,        '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+    memset(ourMessage,    '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+ 
+    sprintf(traceStr2, "BSAEndTxn ENTRY: BSAHandle:%d Vote:>%d<", BSAHandle, vote);
+    ourTrace(BSAHandle, TrFL, traceStr2);
+ 
+    dsmHandle = BSAHandle;
+ 
+    if (xopenGbl.sessFlags & FL_IN_DSM_TXN)
+    {
+       if (vote == BSAVote_COMMIT)
+          dsmVote = DSM_VOTE_COMMIT;
+       else
+          if (vote == BSAVote_ABORT)
+             dsmVote = DSM_VOTE_ABORT;
+          else
+          {
+             sprintf(traceStr2, "BSAEndTxn: invalid vote (%d)", vote);
+             ourTrace(BSAHandle,TrFL, traceStr2);
+             bsaRC = BSA_RC_INVALID_VOTE;
+             XOPENRETURN(BSAHandle, "BSAEndTxn",bsaRC,__FILE__,__LINE__);
+          }
+ 
+ 
+       sprintf(traceStr2, "BSAEndTxn: issue AFSdsmEndTxn, vote=%s",
+                   dsmVote == DSM_VOTE_COMMIT ? "COMMIT" : "ABORT");
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       /*===========================================================
+         check if this EndTxn call was proceeded by a Send call which
+         returned WILL_ABORT. If so, make sure the vote is COMMIT
+         so we will get the server's reason code.
+         ===========================================================*/
+       if (xopenGbl.sessFlags & FL_RC_WILL_ABORT)
+       {
+          dsmVote = DSM_VOTE_COMMIT;
+ 
+          sprintf(traceStr2, "BSAEndTxn: sproceeded by RC_WILL_ABORT, so use vote=COMMIT");
+          ourTrace(BSAHandle,TrFL, traceStr2);
+          xopenGbl.sessFlags = (xopenGbl.sessFlags ^ FL_RC_WILL_ABORT); /* set off*/
+       }
+ 
+       rc = AFSdsmEndTxn(dsmHandle, dsmVote, &reason);
+       xopenGbl.sessFlags = (xopenGbl.sessFlags ^ FL_IN_DSM_TXN); /* set off */
+ 
+       /*====================================================
+        if the caller wanted to Abort, then return rc=OK, not
+        our usual 2302 and reason 3
+        =====================================================*/
+       if ((dsmVote ==  DSM_VOTE_ABORT)     &&
+           (rc == DSM_RC_CHECK_REASON_CODE) &&
+           (reason == DSM_RC_ABORT_BY_CLIENT))
+ 
+          rc = DSM_RC_OK;
+ 
+       if (rc)
+       {
+          sprintf(traceStr2, "BSAEndTxn(AFSdsmEndTxn) error rc = %d", rc);
+          ourTrace(BSAHandle,TrFL, traceStr2);
+ 
+          AFSdsmRCMsg(BSAHandle, reason, rsMsg);
+          sprintf(traceStr2, "BSAEndTxn: reason code = %d, Message='%s'", reason, rsMsg);
+          ourTrace(BSAHandle,TrFL, traceStr2);
+ 
+          strcpy(ourMessage, ourRCMsg(reason, errPrefix));
+          ourLogEvent_Ex(BSAHandle,logBoth, ourMessage, errPrefix, logSevError);
+       }
+       xlateRC(BSAHandle, rc, &bsaRC);
+ 
+       if (rc == DSM_RC_CHECK_REASON_CODE) /* return reason code instead */
+       {
+          xlateRC(BSAHandle, reason, &bsaRC);
+       }
+    }
+ 
+    /*=== check if Query was terminated ===*/
+    if (xopenGbl.sessFlags & FL_IN_BSA_QRY)
+    {
+       AFSdsmEndQuery(dsmHandle);
+       xopenGbl.sessFlags = (xopenGbl.sessFlags ^ FL_IN_BSA_QRY); /* set off */
+    }
+ 
+    xopenGbl.sessFlags = (xopenGbl.sessFlags ^ FL_IN_BSA_TXN); /* set off */
+    XOPENRETURN(BSAHandle, "BSAEndTxn",
+                bsaRC,__FILE__,__LINE__);
+ }
+ 
+ void  BSAQueryApiVersion(
+ ApiVersion       *BSAapiVerP
+ )
+ 
+ {
+    /*===============================================================
+     Don't actually call the base QueryApiVersion call.
+     Use the defines from custom.h since this is what the application
+     sees in the header file. The constants should be the same,
+     but may get out of sync occasionally.
+     ===============================================================*/
+    BSAapiVerP->version = BSA_API_VERSION;
+    BSAapiVerP->release = BSA_API_RELEASE;
+    BSAapiVerP->level   = BSA_API_LEVEL;
+    return;
+ }
+ 
+ BSA_Int16 BSAQueryObject(
+ long              BSAHandle,
+ QueryDescriptor  *BSAqryDescP,
+ ObjectDescriptor *BSAobjDescP
+ )
+ {
+    dsInt16_t      rc = 0;
+    BSA_Int16      bsaRC = 0;
+    dsUint32_t     dsmHandle;
+    dsmObjName     objName;
+    dsUint8_t      dsmObjType;
+    dsmQueryType   query_type;
+    dsmQueryBuff   *query_buff;
+    DataBlk        qData;
+    qryArchiveData archiveData;
+    qryRespArchiveData respArchive;
+    qryBackupData  backupData;
+    qryRespBackupData  respBackup;
+    BSAObjectOwner upperNode;  /* upper cased node name */
+ 
+    char           errPrefix[DSM_MAX_RC_MSG_LENGTH + 1];
+    char           ourMessage[DSM_MAX_RC_MSG_LENGTH + 1];
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    memset(errPrefix,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+    memset(ourMessage,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+ 
+    dsmHandle = BSAHandle;
+ 
+    memset(&backupData, 0x00, sizeof(qryBackupData));
+ 
+    sprintf(traceStr2, "BSAQueryObject ENTRY: BSAHandle:%d ObjOwner(qryDesc):'%s' appOwner(qryDesc):'%s' \n ObjName(qryDesc):'%.*s%.*s' \n copyType:%d ObjectType:%d status:%d ",
+           BSAHandle,
+           BSAqryDescP->owner.bsaObjectOwner,
+           BSAqryDescP->owner.appObjectOwner,
+           100,BSAqryDescP->objName.objectSpaceName,
+           100,BSAqryDescP->objName.pathName,
+           BSAqryDescP->copyType,
+           BSAqryDescP->objectType,
+           BSAqryDescP->status);
+    ourTrace(BSAHandle, TrFL, traceStr2);
+ 
+    /*=====================================================
+     init objDesc area to 0's before we start to erase any
+     garbage that might be there.
+     =====================================================*/
+    memset(BSAobjDescP, 0x00, sizeof(ObjectDescriptor));
+ 
+    /*=== init global look ahead pointer to NULL ===*/
+    if (xopenGbl.nextQryP != NULL)
+    {
+       dsFree(xopenGbl.nextQryP);
+       xopenGbl.nextQryP = NULL;
+    }
+ 
+    /*=========================================================
+     if the node name is different - we won't query it compare
+     both the value passed on the BSAInit and the final value
+     used for the session (which may be different for Generate).
+     =========================================================*/
+    strcpy(upperNode, BSAqryDescP->owner.bsaObjectOwner);
+    StrUpper(upperNode);
+    if ((strcmp(upperNode, xopenGbl.dsmSessInfo.id)) &&
+       (strcmp(BSAqryDescP->owner.bsaObjectOwner, xopenGbl.bsaObjectOwner)))
+    {
+       sprintf(traceStr2,
+       "BSAQueryObject: BSAObjectOwner(%s) doesn't match value for session(%s).", upperNode, xopenGbl.dsmSessInfo.id);
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       bsaRC = ADSM_RC_INVALID_NODE;
+       strcpy(ourMessage, ourRCMsg(bsaRC, errPrefix));
+       ourLogEvent_Ex(BSAHandle, logLocal, ourMessage, errPrefix, logSevError);
+       XOPENRETURN(BSAHandle, "BSAQueryObject",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    /*=====================================================
+      currently BSA_MAX_OSNAME = DSM_MAX_FSNAME_LENGTH
+      if this changes, use strncpy
+      ====================================================*/
+    if (strlen(BSAqryDescP->objName.objectSpaceName) > BSA_MAX_OSNAME)
+    {
+       sprintf(traceStr2, "BSAQueryObject: objectSpaceName too long (%d).",
+               strlen(BSAqryDescP->objName.objectSpaceName));
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       bsaRC = BSA_RC_OBJNAME_TOO_LONG;
+       XOPENRETURN(BSAHandle, "BSAQueryObject",
+                   bsaRC,__FILE__,__LINE__);
+    }
+    /*=================================================================
+      the entire pathname gets copied into hl during parsing, so check
+      for that max len as well. For now these are the same value.
+      ================================================================*/
+    if (strlen(BSAqryDescP->objName.pathName) >
+        min(DSM_MAX_HL_LENGTH, BSA_MAX_PATHNAME))
+    {
+       sprintf(traceStr2, "BSAQueryObject: pathName too long (%d)",
+               strlen(BSAqryDescP->objName.pathName));
+       ourTrace(BSAHandle, TrFL, traceStr2);
+       bsaRC = BSA_RC_OBJNAME_TOO_LONG;
+       XOPENRETURN(BSAHandle, "BSAQueryObject",
+                   bsaRC,__FILE__,__LINE__);
+    }
+    if ((BSAqryDescP->objectType == BSAObjectType_FILE) ||
+        (BSAqryDescP->objectType == BSAObjectType_DATABASE))
+       dsmObjType = DSM_OBJ_FILE;
+    else
+       if (BSAqryDescP->objectType == BSAObjectType_DIRECTORY)
+          dsmObjType = DSM_OBJ_DIRECTORY;
+       else
+          if (BSAqryDescP->objectType == BSAObjectType_ANY)
+             dsmObjType = DSM_OBJ_ANY_TYPE;
+          else
+          {
+              sprintf(traceStr2,
+                      "BSAQueryObject: invalid objectType (%d)", BSAqryDescP->objectType);
+              ourTrace(BSAHandle,TrFL, traceStr2);
+              bsaRC = ADSM_RC_INVALID_OBJTYPE;
+              strcpy(ourMessage, ourRCMsg(bsaRC, errPrefix));
+              ourLogEvent_Ex(BSAHandle, logLocal, ourMessage, errPrefix, logSevError);
+              XOPENRETURN(BSAHandle, "BSAQueryObject",
+                          bsaRC,__FILE__,__LINE__);
+          }
+ 
+    if (!(xopenGbl.sessFlags & FL_IN_BSA_TXN))
+    {
+       sprintf(traceStr2, "BSAQueryObject: issued without BSABeginTxn");
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       bsaRC = BSA_RC_BAD_CALL_SEQUENCE;
+       XOPENRETURN(BSAHandle, "BSAQueryObject",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    /* store object name in ADSM structure */
+    strcpy(objName.fs,BSAqryDescP->objName.objectSpaceName) ;
+ 
+    if (!strcmp(BSAqryDescP->objName.pathName, "/*")) /* if they use a wildcard */
+    {  /* we need to use a wild card on both hl and ll since the path gets split */
+       strcpy(objName.hl, "*");  /* don't include delimiter in case there is
+                              no hl */
+       strcpy(objName.ll, "/*");
+    }
+    else
+       xparsePath(BSAHandle, BSAqryDescP->objName.pathName, objName.hl, objName.ll);
+ 
+       objName.objType = dsmObjType ;
+ 
+       /*=== save copy type for GetNextQuery call later ===*/
+       xopenGbl.copyType = BSAqryDescP->copyType;
+ 
+       if (BSAqryDescP->copyType == BSACopyType_ARCHIVE)
+       {
+          if (strlen(BSAqryDescP->desc) > ADSM_MAX_DESC)
+          {
+ 
+             sprintf(traceStr2, "BSAQueryObject: description longer than ADSM max (%d). ", strlen(BSAqryDescP->desc));
+             ourTrace(BSAHandle,TrFL, traceStr2);
+             bsaRC = BSA_RC_DESC_TOO_LONG;
+             XOPENRETURN(BSAHandle, "BSAQueryObject",
+                         bsaRC,__FILE__,__LINE__);
+          }
+ 
+          archiveData.stVersion = qryArchiveDataVersion;
+          archiveData.objName   = &objName;
+          archiveData.owner     = (char *)&BSAqryDescP->owner.appObjectOwner;
+ 
+          /*=================================================================
+            in the tm structure the month count starts with 0 and year is
+            the value since 1900.
+            Adjust the year value only if it isn't one of the boundary values
+            =================================================================*/
+ 
+          archiveData.insDateLowerBound.year   = BSAqryDescP->createTimeLB.tm_year;
+          if (archiveData.insDateLowerBound.year != ADSM_LOWEST_BOUND)
+             archiveData.insDateLowerBound.year  += 1900;
+          archiveData.insDateLowerBound.month  = BSAqryDescP->createTimeLB.tm_mon+1;
+          archiveData.insDateLowerBound.day    = BSAqryDescP->createTimeLB.tm_mday;
+          archiveData.insDateLowerBound.hour   = BSAqryDescP->createTimeLB.tm_hour;
+          archiveData.insDateLowerBound.minute = BSAqryDescP->createTimeLB.tm_min;
+          archiveData.insDateLowerBound.second = BSAqryDescP->createTimeLB.tm_sec;
+ 
+          archiveData.insDateUpperBound.year   = BSAqryDescP->createTimeUB.tm_year;
+          if (archiveData.insDateUpperBound.year != ADSM_HIGHEST_BOUND)
+              archiveData.insDateUpperBound.year  += 1900;
+          archiveData.insDateUpperBound.month  = BSAqryDescP->createTimeUB.tm_mon+1;
+          archiveData.insDateUpperBound.day    = BSAqryDescP->createTimeUB.tm_mday;
+          archiveData.insDateUpperBound.hour   = BSAqryDescP->createTimeUB.tm_hour;
+          archiveData.insDateUpperBound.minute = BSAqryDescP->createTimeUB.tm_min;
+          archiveData.insDateUpperBound.second = BSAqryDescP->createTimeUB.tm_sec;
+ 
+          archiveData.expDateLowerBound.year   = BSAqryDescP->expireTimeLB.tm_year;
+          if (archiveData.expDateLowerBound.year != ADSM_LOWEST_BOUND)
+              archiveData.expDateLowerBound.year  += 1900;
+          archiveData.expDateLowerBound.month  = BSAqryDescP->expireTimeLB.tm_mon+1;
+          archiveData.expDateLowerBound.day    = BSAqryDescP->expireTimeLB.tm_mday;
+          archiveData.expDateLowerBound.hour   = BSAqryDescP->expireTimeLB.tm_hour;
+          archiveData.expDateLowerBound.minute = BSAqryDescP->expireTimeLB.tm_min;
+          archiveData.expDateLowerBound.second = BSAqryDescP->expireTimeLB.tm_sec;
+ 
+          archiveData.expDateUpperBound.year   = BSAqryDescP->expireTimeUB.tm_year;
+          if (archiveData.expDateUpperBound.year != ADSM_HIGHEST_BOUND)
+             archiveData.expDateUpperBound.year  += 1900;
+          archiveData.expDateUpperBound.month  = BSAqryDescP->expireTimeUB.tm_mon+1;
+          archiveData.expDateUpperBound.day    = BSAqryDescP->expireTimeUB.tm_mday;
+          archiveData.expDateUpperBound.hour   = BSAqryDescP->expireTimeUB.tm_hour;
+          archiveData.expDateUpperBound.minute = BSAqryDescP->expireTimeUB.tm_min;
+          archiveData.expDateUpperBound.second = BSAqryDescP->expireTimeUB.tm_sec;
+ 
+          archiveData.descr = (char *)&BSAqryDescP->desc;
+          query_type = qtArchive;
+          query_buff = (dsmQueryBuff *)&archiveData;
+ 
+          qData.stVersion = DataBlkVersion;
+          qData.bufferLen = sizeof(qryRespArchiveData);
+          qData.bufferPtr = (char *)&respArchive;
+          respArchive.stVersion = qryRespArchiveDataVersion;
+    }
+    else
+       if (BSAqryDescP->copyType == BSACopyType_BACKUP)
+       {
+          if (BSAqryDescP->status == BSAObjectStatus_ACTIVE)
+             backupData.objState  = DSM_ACTIVE;
+          else
+             if (BSAqryDescP->status == BSAObjectStatus_INACTIVE)
+                backupData.objState  = DSM_INACTIVE;
+             else
+                if (BSAqryDescP->status == BSAObjectStatus_ANY)
+                   backupData.objState  = DSM_ANY_MATCH;
+                else
+                {
+                    sprintf(traceStr2,
+                            "BSAQueryObject: invalid status (%d)",
+                             BSAqryDescP->status);
+                    ourTrace(BSAHandle,TrFL, traceStr2);
+                    bsaRC = ADSM_RC_INVALID_STATUS;
+                    strcpy(ourMessage, ourRCMsg(bsaRC, errPrefix));
+                    ourLogEvent_Ex(BSAHandle, logLocal, ourMessage, errPrefix, logSevError);
+                    XOPENRETURN(BSAHandle, "BSAQueryObject",
+                                bsaRC,__FILE__,__LINE__);
+                }
+ 
+             backupData.stVersion = qryBackupDataVersion;
+             backupData.objName   = &objName;
+             backupData.owner     = (char *)&BSAqryDescP->owner.appObjectOwner;
+ 
+             query_type = qtBackup;
+             query_buff = (dsmQueryBuff *)&backupData;
+ 
+             qData.stVersion = DataBlkVersion;
+             qData.bufferLen = sizeof(qryRespBackupData);
+             qData.bufferPtr = (char *)&respBackup;
+             respBackup.stVersion = qryRespBackupDataVersion;;
+       }
+       else
+       {
+          sprintf(traceStr2,
+                            "BSAQueryObject: invalid copyType (%d)",
+                             BSAqryDescP->copyType);
+          ourTrace(BSAHandle,TrFL, traceStr2);
+          bsaRC = ADSM_RC_INVALID_COPYTYPE;
+          strcpy(ourMessage, ourRCMsg(bsaRC, errPrefix));
+          ourLogEvent_Ex(BSAHandle, logLocal, ourMessage, errPrefix, logSevError);
+          XOPENRETURN(BSAHandle, "BSAQueryObject",
+                      bsaRC,__FILE__,__LINE__);
+       }
+ 
+       /*=== now set flag for query ===*/
+       xopenGbl.sessFlags = (xopenGbl.sessFlags | FL_IN_BSA_QRY); /* set on */
+ 
+       if ((rc = AFSdsmBeginQuery(dsmHandle,query_type,query_buff)))
+       {
+ 
+          sprintf(traceStr2, "BSAQueryObject(AFSdsmBeginQuery) error rc = %d", rc);
+          ourTrace(BSAHandle,TrFL, traceStr2);
+          xopenGbl.sessFlags = (xopenGbl.sessFlags ^ FL_IN_BSA_QRY); /* set off */
+          xlateRC(BSAHandle, rc, &bsaRC);
+          XOPENRETURN(BSAHandle, "BSAQueryObject(AFSdsmBeginQuery)",
+                                  bsaRC,__FILE__,__LINE__);
+       }
+ 
+       rc = AFSdsmGetNextQObj(dsmHandle,&qData);
+       if (((rc == DSM_RC_OK) || (rc == DSM_RC_MORE_DATA)) && qData.numBytes)
+       {
+          BSAobjDescP->version = ObjectDescriptorVersion;
+          strcpy(BSAobjDescP->Owner.bsaObjectOwner, xopenGbl.dsmSessInfo.id);
+          BSAobjDescP->copyType = BSAqryDescP->copyType;
+          strcpy(BSAobjDescP->cGName, "\0");   /* no copy group name returned */
+ 
+          if (BSAqryDescP->copyType == BSACopyType_ARCHIVE)
+          {
+             fillArchiveResp(dsmHandle, BSAobjDescP, &respArchive);
+          }
+          else /* backup */
+          {
+             fillBackupResp(dsmHandle, BSAobjDescP, &respBackup);
+          }
+          /*=== look ahead and see if there is more or if this is really done ===*/
+          rc = AFSdsmGetNextQObj(dsmHandle,&qData);
+          if (( (rc == DSM_RC_OK) || (rc == DSM_RC_MORE_DATA)) && qData.numBytes)
+          { /*=== save the response we just got for later call ===*/
+             if (BSAqryDescP->copyType == BSACopyType_ARCHIVE)
+             {
+                if (!(xopenGbl.nextQryP = (char *)dsMalloc(sizeof(qryRespArchiveData))))
+                {
+ 
+                   sprintf(traceStr2, "BSAQueryObject: no memory for look ahead buffer");
+                   ourTrace(BSAHandle,TrFL, traceStr2);
+                   xopenGbl.sessFlags = (xopenGbl.sessFlags ^ FL_IN_BSA_QRY); /* set off */
+                   bsaRC = BSA_RC_NO_RESOURCES;
+                   XOPENRETURN(BSAHandle, "BSAQueryObject(AFSdsmGetNextQObj)",
+                               bsaRC,__FILE__,__LINE__);
+                }
+                memcpy(xopenGbl.nextQryP, &respArchive, sizeof(qryRespArchiveData));
+             }
+             else
+             {
+                if (!(xopenGbl.nextQryP = (char *)dsMalloc(sizeof(qryRespBackupData))))
+                {
+ 
+                   sprintf(traceStr2, "BSAQueryObject: no memory for look ahead buffer");
+                   ourTrace(BSAHandle,TrFL, traceStr2);
+                   xopenGbl.sessFlags = (xopenGbl.sessFlags ^ FL_IN_BSA_QRY); /* set off */
+                   bsaRC = BSA_RC_NO_RESOURCES;
+                   XOPENRETURN(BSAHandle, "BSAQueryObject(AFSdsmGetNextQObj)",
+                               bsaRC,__FILE__,__LINE__);
+ 
+                }
+                memcpy(xopenGbl.nextQryP, &respBackup, sizeof(qryRespBackupData));
+             }
+          }
+       else
+       {
+ 
+          sprintf(traceStr2, "BSAQueryObject(AFSdsmGetNextQObj) rc = %d", rc);
+          ourTrace(BSAHandle,TrFL, traceStr2);
+          AFSdsmEndQuery(dsmHandle);
+          xopenGbl.sessFlags = (xopenGbl.sessFlags ^ FL_IN_BSA_QRY); /* set off */
+       }
+ 
+    }
+    else /* could be FINISHED or an error */
+    {
+ 
+       sprintf(traceStr2, "BSAQueryObject(AFSdsmGetNextQObj) rc = %d", rc);
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       AFSdsmEndQuery(dsmHandle);
+       xopenGbl.sessFlags = (xopenGbl.sessFlags ^ FL_IN_BSA_QRY); /* set off */
+    }
+ 
+    if (rc == DSM_RC_OK)
+    {
+       sprintf(traceStr2, "BSAQueryObject(AFSdsmGetNextQObj) rc = %d, ObjOwner(objDesc):'%s' appOwner(objDesc):'%s' \n ObjName(objDesc):'%.*s%.*s' \n copyType:%d copyId:'%d %d' cGName:'%s'",
+        rc,
+        BSAobjDescP->Owner.bsaObjectOwner,
+        BSAobjDescP->Owner.appObjectOwner,
+        100,BSAobjDescP->objName.objectSpaceName,
+        100,BSAobjDescP->objName.pathName,
+        BSAobjDescP->copyType,
+        BSAobjDescP->copyId.left,
+        BSAobjDescP->copyId.right,
+        BSAobjDescP->cGName == NULL ? "" : BSAobjDescP->cGName);
+        ourTrace(BSAHandle,TrFL, traceStr2);
+    }
+ 
+    xlateRC(BSAHandle, rc, &bsaRC);
+    XOPENRETURN(BSAHandle, "BSAQueryObject",
+                bsaRC, __FILE__,__LINE__);
+ }
+ 
+ BSA_Int16 BSAGetObject(
+     long              BSAHandle,
+     ObjectDescriptor *BSAobjDescP,
+     DataBlock        *BSAdataBlockP
+ )
+ {
+    dsInt16_t      rc = 0;
+    dsInt16_t      rc1 = 0;
+    BSA_Int16      bsaRC = 0;
+    dsUint32_t     dsmHandle;
+    DataBlk        getBlk;
+    dsmGetType     getType;
+    dsmGetList     dsmObjList ;
+    char           rcMsg[DSM_MAX_RC_MSG_LENGTH + 1];
+    char           errPrefix[DSM_MAX_RC_MSG_LENGTH + 1];
+    char           ourMessage[DSM_MAX_RC_MSG_LENGTH + 1];
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    dsmHandle = BSAHandle;
+ 
+    memset(rcMsg,         '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+    memset(errPrefix,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+    memset(ourMessage,    '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+ 
+    sprintf(traceStr2, "BSAGetObject ENTRY: BSAHandle:%d version:%d copyType:%d copyId:'%d %d' \n bufferLen:%d numBytes:%d ",
+            BSAHandle,
+            BSAobjDescP->version,
+            BSAobjDescP->copyType,
+            BSAobjDescP->copyId.left,
+            BSAobjDescP->copyId.right,
+            BSAdataBlockP->bufferLen,
+            BSAdataBlockP->numBytes);
+    ourTrace(BSAHandle, TrFL, traceStr2);
+ 
+    xopenGbl.oper = OPER_RECV_START;    /* save state for EndData later */
+ 
+    if (BSAobjDescP->version != ObjectDescriptorVersion)
+    {
+       sprintf(traceStr2,"Warning: BSAGetObject: objectDesc.version unexpected %d.", BSAobjDescP->version);
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       /*==================================================================
+        don't treat this as an error now since it isn't defined in the spec
+        bsaRC = ADSM_RC_INVALID_ST_VER;
+        return(bsaRC);
+        =================================================================*/
+    }
+ 
+    if (!(xopenGbl.sessFlags & FL_IN_BSA_TXN))
+    {
+       sprintf(traceStr2, "BSAGetObject: issued without BSABeginTxn");
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       bsaRC = BSA_RC_BAD_CALL_SEQUENCE;
+       XOPENRETURN(BSAHandle, "BSAGetObject",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    /*=== Get the data ===*/
+    if (BSAobjDescP->copyType == BSACopyType_ARCHIVE)
+       getType = gtArchive;
+    else
+       if (BSAobjDescP->copyType == BSACopyType_BACKUP)
+          getType = gtBackup;
+       else
+       {
+          sprintf(traceStr2,
+                            "BSAGetObject: invalid copyType (%d)",
+                             BSAobjDescP->copyType);
+          ourTrace(BSAHandle,TrFL, traceStr2);
+          bsaRC = ADSM_RC_INVALID_COPYTYPE;
+          strcpy(ourMessage, ourRCMsg(bsaRC, errPrefix));
+          ourLogEvent_Ex(BSAHandle, logLocal, ourMessage, errPrefix, logSevError);
+          XOPENRETURN(BSAHandle, "BSAGetObject",
+                      bsaRC,__FILE__,__LINE__);
+       }
+ 
+    /*=== now update state since we'll issue a base API call ===*/
+    xopenGbl.oper = OPER_RECV_ISSUED;    /* save state for EndData later */
+    /*=== setup for a single object get ===*/
+ 
+    dsmObjList.stVersion = dsmGetListVersion ;
+    dsmObjList.numObjId = 1 ;
+    dsmObjList.objId = (ObjID *)dsMalloc(sizeof(ObjID) * dsmObjList.numObjId) ;
+ 
+    dsmObjList.objId[0].hi = BSAobjDescP->copyId.left ;
+    dsmObjList.objId[0].lo = BSAobjDescP->copyId.right ;
+ 
+    if ((rc = AFSdsmBeginGetData(dsmHandle,bTrue,   /* always say MountWait */
+                              getType,
+                              &dsmObjList)) != DSM_RC_OK)
+    {
+       sprintf(traceStr2, "BSAGetObject: Call to AFSdsmBeginGetData error rc = %d", rc);
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       xlateRC(BSAHandle, rc, &bsaRC);
+       XOPENRETURN(BSAHandle, "BSAGetObject(AFSdsmBeginGetData)",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    /*********************************************************************/
+    getBlk.stVersion = DataBlkVersion ;
+    getBlk.bufferPtr = BSAdataBlockP->bufferPtr ;
+    getBlk.bufferLen = BSAdataBlockP->bufferLen;
+    getBlk.numBytes  = 0;
+ 
+    rc = AFSdsmGetObj(dsmHandle, &(dsmObjList.objId[0]), &getBlk) ;
+ 
+    if ((rc == DSM_RC_FINISHED) &&
+        (getBlk.numBytes != 0))    /* actually is data received */
+       rc = DSM_RC_MORE_DATA;      /* use different rc for consistency */
+                                   /* with Query. No data returned */
+                                   /* if rc = FINISHED.     */
+    if ((rc == DSM_RC_FINISHED) ||
+        (rc == DSM_RC_MORE_DATA))
+    {
+       /*=== data is already in the buffer ===*/
+       BSAdataBlockP->numBytes = (BSA_UInt16)getBlk.numBytes;
+    }
+    else
+    {
+       /*=== appl may call BSAEndData to clean up trxn but don't count on it... ===*/
+       rc1 = AFSdsmEndGetObj(dsmHandle);
+       rc1 = AFSdsmEndGetData(dsmHandle);
+       xopenGbl.sessFlags =
+                (xopenGbl.sessFlags | FL_END_DATA_DONE);  /* turn flag on */
+     }
+ 
+    xlateRC(BSAHandle, rc, &bsaRC);
+    XOPENRETURN(BSAHandle, "BSAGetObject",
+                bsaRC,__FILE__,__LINE__);
+ }
+ 
+ BSA_Int16 BSAGetData(
+     long              BSAHandle,
+     DataBlock        *BSAdataBlockP
+ )
+ {
+    dsInt16_t      rc = 0;
+    dsInt16_t      rc1 = 0;
+    BSA_Int16      bsaRC = 0;
+    dsUint32_t     dsmHandle;
+    DataBlk        getBlk;
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    dsmHandle = BSAHandle;
+ 
+ 
+    sprintf(traceStr2, "BSAGetData ENTRY: BSAHandle:%d, bufferLen:%d, numBytes:%d",
+            BSAHandle,
+            BSAdataBlockP->bufferLen,
+            BSAdataBlockP->numBytes);
+    ourTrace(BSAHandle,TrFL, traceStr2);
+ 
+    getBlk.stVersion = DataBlkVersion ;
+    getBlk.bufferPtr = BSAdataBlockP->bufferPtr ;
+    getBlk.bufferLen = BSAdataBlockP->bufferLen;
+    getBlk.numBytes  = 0;
+ 
+    rc = AFSdsmGetData(dsmHandle, &getBlk) ;
+ 
+    if ((rc == DSM_RC_FINISHED) &&
+        (getBlk.numBytes != 0))      /* actually is data received */
+       rc = DSM_RC_MORE_DATA;        /* use different rc for consistency */
+                                     /* with Query. No data returned */
+                                     /* if rc = FINISHED.     */
+ 
+    if ((rc == DSM_RC_FINISHED) ||
+        (rc == DSM_RC_MORE_DATA))
+    {
+       /*=== data is already in the buffer ===*/
+       BSAdataBlockP->numBytes = (BSA_UInt16)getBlk.numBytes;
+    }
+    else
+    {
+       sprintf(traceStr2, "BSAGetData: Call to AFSdsmGetData error rc = %d", rc);
+       ourTrace(BSAHandle, TrFL,traceStr2);
+ 
+       /*=== appl may call BSAEndData to clean up trxn but don't count on it... ===*/
+       rc1 = AFSdsmEndGetObj(dsmHandle);
+       rc1 = AFSdsmEndGetData(dsmHandle);
+       xopenGbl.sessFlags =
+                (xopenGbl.sessFlags | FL_END_DATA_DONE);  /* turn flag on */
+    }
+    xlateRC(BSAHandle, rc, &bsaRC);
+    XOPENRETURN(BSAHandle, "BSAGetData(AFSdsmGetData)",
+                bsaRC,__FILE__,__LINE__);
+ }
+ 
+ BSA_Int16 BSASendData(
+     long           BSAHandle,
+     DataBlock     *BSAdataBlockP
+ )
+ {
+    dsInt16_t      rc = 0;
+    BSA_Int16      bsaRC = 0;
+    dsUint32_t     dsmHandle;
+    DataBlk        dataBlkArea;
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    dsmHandle = BSAHandle;
+ 
+ 
+    sprintf(traceStr2, "BSASendData ENTRY: BSAHandle:%d bufferLen: %d numBytes: %d ",
+            BSAHandle,
+            BSAdataBlockP->bufferLen,
+            BSAdataBlockP->numBytes);
+    ourTrace(BSAHandle, TrFL, traceStr2);
+ 
+    /*=== check for NULL dataBlock pointer ===*/
+    if (BSAdataBlockP == NULL)
+       XOPENRETURN(BSAHandle, "BSASendData",
+                   BSA_RC_NULL_POINTER,__FILE__,__LINE__);
+       dataBlkArea.stVersion = DataBlkVersion ;
+       dataBlkArea.bufferPtr = BSAdataBlockP->bufferPtr ;
+       dataBlkArea.bufferLen = BSAdataBlockP->bufferLen;
+ 
+       rc = AFSdsmSendData(dsmHandle, &dataBlkArea);
+ 
+       if (rc)
+       {
+ 
+          sprintf(traceStr2, "BSASendData(AFSdsmSendData) error rc = %d", rc);
+          ourTrace(BSAHandle,TrFL, traceStr2);
+ 
+          if (rc == DSM_RC_WILL_ABORT)  /* save flag */
+             xopenGbl.sessFlags = (xopenGbl.sessFlags | FL_RC_WILL_ABORT);
+       }
+       BSAdataBlockP->numBytes = (BSA_UInt16)dataBlkArea.numBytes;
+       sprintf(traceStr2, "BSASendData(AFSdsmSendData): BSAHandle:%d bufferLen: %d numBytes sent: %d ",
+            BSAHandle,
+            BSAdataBlockP->bufferLen,
+            BSAdataBlockP->numBytes);
+       ourTrace(BSAHandle, TrFL, traceStr2);
+ 
+       xlateRC(BSAHandle, rc, &bsaRC);
+       XOPENRETURN(BSAHandle, "BSASendData",
+                   BSA_RC_SUCCESS,__FILE__,__LINE__);
+ }
+ 
+ BSA_Int16 BSAEndData(
+     long          BSAHandle
+ )
+ {
+    dsInt16_t      rc = 0;
+    dsInt16_t      rc1 = 0;
+    BSA_Int16      bsaRC = 0;
+    dsUint32_t     dsmHandle;
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    dsmHandle = BSAHandle;
+ 
+ 
+    sprintf(traceStr2, "BSAEndData ENTRY: BSAHandle:%d", BSAHandle);
+    ourTrace(BSAHandle,TrFL, traceStr2);
+ 
+    /*=======================================================
+      check the state - don't issue base API call unless one
+      was called previously, or else we get a sequence error.
+      ======================================================*/
+ 
+    if (xopenGbl.oper == OPER_SEND_ISSUED)
+    {
+       rc = AFSdsmEndSendObj(dsmHandle);
+       if (rc)
+       {
+ 
+          sprintf(traceStr2, "BSAEndData(AFSdsmEndSendObj) error rc = %d", rc);
+          ourTrace(BSAHandle,TrFL, traceStr2);
+          xlateRC(BSAHandle, rc, &bsaRC);
+       }
+    }
+    else
+       if (xopenGbl.oper == OPER_RECV_ISSUED)
+       {
+           if (xopenGbl.sessFlags & FL_END_DATA_DONE)   /* EndData processing */
+              xopenGbl.sessFlags =                     /*  already done */
+                    (xopenGbl.sessFlags ^ FL_END_DATA_DONE);  /* turn flag off */
+          else
+          {
+             rc = AFSdsmEndGetObj(dsmHandle);
+             if (rc)
+             {
+                sprintf(traceStr2, "BSAEndData(AFSdsmEndGetObj) error rc = %d", rc);
+                ourTrace(BSAHandle, TrFL, traceStr2);
+ 
+                /*==============================================================
+                 this may get 'Out of sequence error' if previous GetObject
+                 had rc=2 (no match). Don't return this to caller - too confusing
+                 ===============================================================*/
+                if (rc != DSM_RC_BAD_CALL_SEQUENCE)
+                xlateRC(BSAHandle, rc, &bsaRC);
+             }
+ 
+             rc = AFSdsmEndGetData(dsmHandle);
+             if (rc)
+             {
+                sprintf(traceStr2, "BSAEndData(AFSdsmEndGetData) error rc = %d", rc);
+                ourTrace(BSAHandle, TrFL, traceStr2);
+                xlateRC(BSAHandle, rc, &bsaRC);
+             }
+          }
+       }
+    else  /* invalid state */
+       if ((xopenGbl.oper != OPER_RECV_START) &&
+           (xopenGbl.oper != OPER_SEND_START))
+       {
+          sprintf(traceStr2, "BSAEndData: BSAEndData but not Send or Recv");
+          ourTrace(BSAHandle,TrFL, traceStr2);
+          bsaRC = BSA_RC_BAD_CALL_SEQUENCE;
+       }
+ 
+    xopenGbl.oper = OPER_NONE;
+    XOPENRETURN(BSAHandle, "BSAEndData",bsaRC,__FILE__,__LINE__);
+ }
+ 
+ BSA_Int16 BSACreateObject(
+     long              BSAHandle,
+     ObjectDescriptor *BSAobjDescP,
+     DataBlock        *BSAdataBlockP
+ )
+ {
+    dsInt16_t          rc = 0;
+    BSA_Int16          bsaRC = 0;
+    dsUint32_t         dsmHandle;
+    regFSData          regFilespace ;
+    dsmObjName         objName ;
+    ObjAttr            objAttrArea;
+    sndArchiveData     archData;
+    DataBlk            dataBlkArea;
+    dsmSendType        sendType;
+    dsUint8_t          dsmObjType;
+    XAPIObjInfo        xapiObjInfo;
+    mcBindKey          mcBindKey;
+    BSAObjectOwner     upperNode;  /* upper cased node name */
+    char               errPrefix[DSM_MAX_RC_MSG_LENGTH + 1];
+    char               ourMessage[DSM_MAX_RC_MSG_LENGTH + 1];
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    memset(errPrefix,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+    memset(ourMessage,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+ 
+    dsmHandle = BSAHandle;
+ 
+    if (BSAobjDescP != NULL && BSAdataBlockP != NULL)
+    {
+    sprintf(traceStr2, "BSACreateObject ENTRY: BSAHandle:%d ObjOwner:'%s' appOwner:'%s' \n ObjName:'%.*s%.*s' \n objType:%d  size:'%d %d' resourceType:'%s'  \n bufferLen:%d numBytes:%d ",
+ 
+            BSAHandle,
+            BSAobjDescP->Owner.bsaObjectOwner[0] != '\0' ? BSAobjDescP->Owner.bsaObjectOwner : "",
+            BSAobjDescP->Owner.appObjectOwner[0] != '\0' ?  BSAobjDescP->Owner.appObjectOwner : "",
+            100,BSAobjDescP->objName.objectSpaceName[0] != '\0' ? BSAobjDescP->objName.objectSpaceName
+            : "",
+            100,BSAobjDescP->objName.pathName[0] != '\0' ? BSAobjDescP->objName.pathName : "",
+            BSAobjDescP->objectType,
+            BSAobjDescP->size.left,
+            BSAobjDescP->size.right,
+            BSAobjDescP->resourceType[0] != '\0' ?  BSAobjDescP->resourceType : "" ,
+            BSAdataBlockP->bufferLen,
+            BSAdataBlockP->numBytes);
+   }
+   else
+   {
+     if (BSAobjDescP == NULL)
+       {
+          bsaRC = BSA_RC_NULL_POINTER;
+          XOPENRETURN(BSAHandle, "BSACreateObject",
+                   bsaRC,__FILE__,__LINE__);
+       }
+     sprintf(traceStr2, "BSACreateObject ENTRY: BSAHandle:%d", BSAHandle);
+   }
+ 
+   ourTrace(BSAHandle, TrFL, traceStr2);
+ 
+    xopenGbl.oper = OPER_SEND_START;    /* save state for EndData later */
+    /*=================================================================
+    if (BSAobjDescP->version != ObjectDescriptorVersion)
+        BSA spec doesn't require this currently..
+    =================================================================*/
+ 
+    /*===============================================================
+     if the node name is different - we won't create it compare both
+     the value passed on the BSAInit and the final value used for the
+     session (which may be different for Generate)
+     ===============================================================*/
+    strcpy(upperNode, BSAobjDescP->Owner.bsaObjectOwner);
+    StrUpper(upperNode);
+    if ((strcmp(upperNode, xopenGbl.dsmSessInfo.id)) &&
+       (strcmp(BSAobjDescP->Owner.bsaObjectOwner, xopenGbl.bsaObjectOwner)))
+    {
+       sprintf(traceStr2,
+              "BSACreateObject: BSAObjectOwner(%s) doesn't match value for session(%s).",
+               upperNode, xopenGbl.dsmSessInfo.id);
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       bsaRC = ADSM_RC_INVALID_NODE;
+       strcpy(ourMessage, ourRCMsg(bsaRC, errPrefix));
+       ourLogEvent_Ex(BSAHandle,logLocal, ourMessage, errPrefix, logSevError);
+       XOPENRETURN(BSAHandle, "BSACreateObject",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    /*=== check string lengths - if this too long, it won't fit in our objInfo ===*/
+    if (strlen(BSAobjDescP->desc) > ADSM_MAX_DESC)
+    {
+       sprintf(traceStr2,"BSACreateObject: description longer than TSM max (%d). ",
+               strlen(BSAobjDescP->desc));
+       ourTrace(BSAHandle, TrFL, traceStr2);
+       bsaRC = BSA_RC_DESC_TOO_LONG;
+       XOPENRETURN(BSAHandle, "BSACreateObject",
+                   bsaRC,__FILE__,__LINE__);
+    }
+    if (strlen(BSAobjDescP->objectInfo) > ADSM_MAX_OBJINFO)
+    {
+       sprintf(traceStr2,"BSACreateObject: objInfo longer than TSM max (%d).",
+       strlen(BSAobjDescP->objectInfo));
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       bsaRC = BSA_RC_OBJINFO_TOO_LONG;
+       XOPENRETURN(BSAHandle, "BSACreateObject",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    if (!(xopenGbl.sessFlags & FL_IN_BSA_TXN))
+    {
+       sprintf(traceStr2, "BSACreateObject issued without BSABeginTxn");
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       bsaRC = BSA_RC_BAD_CALL_SEQUENCE;
+       XOPENRETURN(BSAHandle, "BSACreateObject",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    if (strlen(BSAobjDescP->objName.objectSpaceName) > BSA_MAX_OSNAME)
+    {
+       sprintf(traceStr2, "BSACreateObject: objectSpaceName too long (%d)",
+                        strlen(BSAobjDescP->objName.objectSpaceName));
+       ourTrace(BSAHandle, TrFL, traceStr2);
+       bsaRC = BSA_RC_OBJNAME_TOO_LONG;
+       XOPENRETURN(BSAHandle, "BSACreateObject:",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    if (!(xopenGbl.sessFlags & FL_IN_DSM_TXN))        /* first CreateObj */
+    { /* can't issue RegisterFS if already in Txn */
+       /*=== Register the file space ===*/
+       regFilespace.stVersion = regFSDataVersion ;
+       regFilespace.fsName = BSAobjDescP->objName.objectSpaceName ;
+ 
+       /*===  use resource type for fsType (as it was intended)  ===*/
+ 
+       regFilespace.fsType = BSAobjDescP->resourceType ;
+       regFilespace.capacity.lo = 0;
+       regFilespace.capacity.hi = 0;
+       regFilespace.occupancy.lo = 0;
+       regFilespace.occupancy.hi = 0;
+       #if _OPSYS_TYPE == DS_AIX
+          regFilespace.fsAttr.unixFSAttr.fsInfoLength = strlen(XAPI_FSINFO) ;
+          strcpy(regFilespace.fsAttr.unixFSAttr.fsInfo, XAPI_FSINFO);
+       #else
+          regFilespace.fsAttr.dosFSAttr.fsInfoLength = strlen(XAPI_FSINFO) ;
+          strcpy(regFilespace.fsAttr.dosFSAttr.fsInfo, XAPI_FSINFO);
+          regFilespace.fsAttr.dosFSAttr.driveLetter = 'X';
+       #endif
+       rc = AFSdsmRegisterFS(dsmHandle, &regFilespace) ;
+       if ((rc != 0) && (rc != DSM_RC_FS_ALREADY_REGED))
+       {
+          sprintf(traceStr2, "BSACreateObject(AFSdsmRegisterFS) error rc = %d",rc);
+          ourTrace(BSAHandle,TrFL, traceStr2);
+ 
+          xlateRC(BSAHandle, rc, &bsaRC);
+          XOPENRETURN(BSAHandle, "BSACreateObject(AFSdsmRegisterFS)",
+                      bsaRC,__FILE__,__LINE__);
+       }
+    }
+ 
+    /*========================================================
+     Check for invalid copyType before sending data. Log error
+     to dsirror.log file.
+     ========================================================*/
+     if (BSAobjDescP->copyType == BSACopyType_ARCHIVE)
+        sendType = stArchiveMountWait;
+     else
+        if (BSAobjDescP->copyType == BSACopyType_BACKUP)
+           sendType = stBackupMountWait;
+        else
+        {
+            sprintf(traceStr2,
+                   "BSACreateObject: invalid copyType (%d)",
+                    BSAobjDescP->copyType);
+            ourTrace(BSAHandle,TrFL, traceStr2);
+            bsaRC = ADSM_RC_INVALID_COPYTYPE;
+            strcpy(ourMessage, ourRCMsg(bsaRC, errPrefix));
+            ourLogEvent_Ex(BSAHandle,logLocal, ourMessage, errPrefix, logSevError);
+            XOPENRETURN(BSAHandle, "BSACreateObject",
+                        bsaRC,__FILE__,__LINE__);
+        }
+ 
+    if ((BSAobjDescP->objectType == BSAObjectType_FILE) ||
+       (BSAobjDescP->objectType == BSAObjectType_DATABASE) ||
+       (BSAobjDescP->objectType == BSAObjectType_ANY))
+ 
+          dsmObjType = DSM_OBJ_FILE;
+    else
+       if (BSAobjDescP->objectType == BSAObjectType_DIRECTORY)
+          dsmObjType = DSM_OBJ_DIRECTORY;
+       else
+       {
+          sprintf(traceStr2,
+                "BSACreateObject: invalid objectType (%d)",
+                 BSAobjDescP->objectType);
+          ourTrace(BSAHandle,TrFL, traceStr2);
+          bsaRC = ADSM_RC_INVALID_OBJTYPE;
+          strcpy(ourMessage, ourRCMsg(bsaRC, errPrefix));
+          ourLogEvent_Ex(BSAHandle,logLocal, ourMessage, errPrefix, logSevError);
+          XOPENRETURN(BSAHandle, "BSACreateObject",
+                     bsaRC,__FILE__,__LINE__);
+       }
+ 
+    /*==================================================================
+     put in a check here - count the number of objects per txn
+     and compare with xopenGbl.sessInfo.maxObjPerTxn
+     If reach the limit, EndTxn and start a new one
+     OK to do this without telling the BSA caller?
+     Or should we exit with an error to tell them the limit is reached ?
+     ==================================================================*/
+ 
+     if (!(xopenGbl.sessFlags & FL_IN_DSM_TXN))
+     {
+       rc = AFSdsmBeginTxn(dsmHandle);
+ 
+       if (rc)
+       {
+          sprintf(traceStr2, "BSACreateObject(AFSdsmBeginTxn) error rc = %d", rc);
+          ourTrace(BSAHandle,TrFL, traceStr2);
+          xlateRC(BSAHandle, rc, &bsaRC);
+          XOPENRETURN(BSAHandle, "BSACreateObject(AFSdsmBeginTxn)",
+                      bsaRC,__FILE__,__LINE__);
+       }
+       xopenGbl.sessFlags = (xopenGbl.sessFlags | FL_IN_DSM_TXN); /* set on */
+     }
+ 
+     /*=== Backup the data  ===*/
+ 
+    /*================================================================
+      the entire pathname gets copied into hl during parsing, so
+      check for that max len as well. For now these are the same value.
+      =================================================================*/
+    if (strlen(BSAobjDescP->objName.pathName) >
+             min(DSM_MAX_HL_LENGTH, BSA_MAX_PATHNAME))
+    {
+       sprintf(traceStr2, "BSACreateObject: pathName too long (%d)",
+               strlen(BSAobjDescP->objName.pathName));
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       bsaRC = BSA_RC_OBJNAME_TOO_LONG;
+       XOPENRETURN(BSAHandle, "BSACreateObject",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    strcpy(objName.fs,BSAobjDescP->objName.objectSpaceName) ;
+    /*=== previous code to use only ll field ===*/
+    /*objName.hl[0] = '\0';
+      strcpy(objName.ll,BSAobjDescP->objName.pathName) ;
+    */
+    xparsePath(BSAHandle, BSAobjDescP->objName.pathName, objName.hl, objName.ll);
+    objName.objType = dsmObjType ;
+ 
+    objAttrArea.stVersion = ObjAttrVersion ;
+    strcpy(objAttrArea.owner,BSAobjDescP->Owner.appObjectOwner);
+    objAttrArea.sizeEstimate.hi = BSAobjDescP->size.left;
+    objAttrArea.sizeEstimate.lo = BSAobjDescP->size.right;
+    objAttrArea.objCompressed = bFalse ;  /* let COMPRESSION option decide */
+    /*=== whether there's actually compression ===*/
+    objAttrArea.objInfoLength = sizeof(XAPIObjInfo);
+    objAttrArea.objInfo = (char *)&xapiObjInfo ;
+ 
+    memset(&xapiObjInfo,0x00,sizeof(XAPIObjInfo));
+    strcpy(xapiObjInfo.resourceType, BSAobjDescP->resourceType);
+    xapiObjInfo.size.left = BSAobjDescP->size.left;
+    xapiObjInfo.size.right = BSAobjDescP->size.right;
+    strcpy(xapiObjInfo.partDesc, BSAobjDescP->desc);
+    strcpy(xapiObjInfo.partObjInfo, BSAobjDescP->objectInfo);
+ 
+    /*=== check if a lifecycle group name was passed to us ===*/
+    if (strlen(BSAobjDescP->lGName))
+       objAttrArea.mcNameP = (char *)BSAobjDescP->lGName ;
+    else
+       objAttrArea.mcNameP = NULL;
+ 
+       dataBlkArea.stVersion = DataBlkVersion ;
+       if (BSAdataBlockP == NULL)
+       {
+          dataBlkArea.bufferPtr = NULL;
+          dataBlkArea.bufferLen = 0;
+       }
+       else
+       {
+          dataBlkArea.bufferPtr = BSAdataBlockP->bufferPtr ;
+          dataBlkArea.bufferLen = BSAdataBlockP->bufferLen;
+       }
+ 
+       /*=======================================================
+        always issue BindMC because we don't expect applications
+        to call ResolveLifecycleGroup since it isn't in the
+        Data Movement subset
+        =======================================================*/
+        mcBindKey.stVersion = mcBindKeyVersion ;
+        rc = AFSdsmBindMC(dsmHandle, &objName, sendType, &mcBindKey);
+        if (rc)
+        {
+           sprintf(traceStr2, "BSACreateObject(AFSdsmBindMC): error rc = %d", rc);
+           ourTrace(BSAHandle, TrFL, traceStr2);
+           xlateRC(BSAHandle, rc, &bsaRC);
+           XOPENRETURN(BSAHandle, "BSACreateObject(dsnBindMC)",
+                       bsaRC,__FILE__,__LINE__);
+        }
+ 
+        /*=== now update state since we'll issue the base Send call ===*/
+ 
+        xopenGbl.oper = OPER_SEND_ISSUED;    /* save state for EndData later */
+ 
+        switch (sendType)
+        {
+           case (stBackupMountWait) :
+           rc = AFSdsmSendObj(dsmHandle,
+                           sendType,
+                           NULL,
+                           &objName,
+                           &objAttrArea,
+                           &dataBlkArea);
+           break;
+ 
+           case (stArchiveMountWait) :
+           archData.stVersion = sndArchiveDataVersion;
+           archData.descr = (char *)(BSAobjDescP->desc);
+           rc = AFSdsmSendObj(dsmHandle,
+                           sendType,
+                           &archData,
+                           &objName,
+                           &objAttrArea,
+                           &dataBlkArea);
+           break;
+           default : ;
+        }
+ 
+        if (rc != DSM_RC_OK)
+        {
+           sprintf(traceStr2, "BSACreateObject(AFSdsmSendObj) error rc = %d", rc);
+           ourTrace(BSAHandle,TrFL, traceStr2);
+ 
+           if (rc == DSM_RC_WILL_ABORT)  /* save flag */
+              xopenGbl.sessFlags = (xopenGbl.sessFlags | FL_RC_WILL_ABORT);
+ 
+           xlateRC(BSAHandle, rc, &bsaRC);
+           XOPENRETURN(BSAHandle, "BSACreateObject(AFSdsmSendObj)",
+                       bsaRC,__FILE__,__LINE__);
+        }
+    XOPENRETURN(BSAHandle, "BSACreateObject",
+                BSA_RC_SUCCESS, __FILE__,__LINE__);
+ }
+ 
+ 
+ BSA_Int16 BSADeleteObject(
+     long           BSAHandle,
+     CopyType       copyType,
+     ObjectName     *BSAobjNameP,
+     CopyId         *copyidP
+ )
+ {
+    dsInt16_t      rc = 0;
+    BSA_Int16      bsaRC = 0;
+    dsUint32_t     dsmHandle;
+    dsUint16_t     reason ;                   /* for AFSdsmEndTxn */
+    dsmObjName     dsmobjName;
+ 
+    dsmDelType delType;
+    dsmDelInfo delInfo;
+ 
+    delList *llHeadP = NULL;
+    delList *llTailP = NULL;
+    delList *ll = NULL;
+ 
+    char errPrefix[DSM_MAX_RC_MSG_LENGTH + 1];
+    char ourMessage[DSM_MAX_RC_MSG_LENGTH + 1];
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    memset(errPrefix,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+    memset(ourMessage,     '\0', DSM_MAX_RC_MSG_LENGTH + 1);
+ 
+    dsmHandle = BSAHandle;
+ 
+    sprintf(traceStr2, "BSADeleteObject ENTRY: BSAHandle:%d CopyType:%d \n ObjName:'%.*s%.*s' copyidP:'%d %d'.",
+            BSAHandle,
+            copyType,
+            100,BSAobjNameP->objectSpaceName,
+            100,BSAobjNameP->pathName,
+            copyidP->left,
+            copyidP->right);
+    ourTrace(BSAHandle, TrFL, traceStr2);
+    if (copyType != BSACopyType_ARCHIVE)
+    {
+       sprintf(traceStr2,
+               "BSADeleteObject: invalid copyType %d",
+                copyType);
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       bsaRC = ADSM_RC_INVALID_COPYTYPE;
+       strcpy(ourMessage, ourRCMsg(bsaRC, errPrefix));
+       ourLogEvent_Ex(BSAHandle, logLocal, ourMessage, errPrefix, logSevError);
+       XOPENRETURN(BSAHandle, "BSADeleteObject",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    if (!(xopenGbl.sessFlags & FL_IN_BSA_TXN))
+    {
+       sprintf(traceStr2, "BSADeleteObject issued without BSABeginTxn");
+       ourTrace(BSAHandle, TrFL, traceStr2);
+ 
+       bsaRC = BSA_RC_BAD_CALL_SEQUENCE;
+       XOPENRETURN(BSAHandle, "BSADeleteObject:",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    strcpy(dsmobjName.fs, BSAobjNameP->objectSpaceName);
+    xparsePath(BSAHandle, BSAobjNameP->pathName, dsmobjName.hl, dsmobjName.ll);
+    dsmobjName.objType = DSM_OBJ_FILE;
+ 
+    if (!copyidP)    /* NULL, so query and delete all with same name */
+    {
+       if (xopenGbl.sessFlags & FL_IN_DSM_TXN)
+       /*=== if a trxn had been started, end it before doing Query ===*/
+       {
+          rc = AFSdsmEndTxn(dsmHandle, DSM_VOTE_COMMIT, &reason);
+          xopenGbl.sessFlags = (xopenGbl.sessFlags ^ FL_IN_DSM_TXN); /* set off */
+       }
+       rc = buildList(dsmHandle, &dsmobjName, &llHeadP, &llTailP);
+       if (rc)
+       {
+          bsaRC = BSA_RC_OBJECT_NOT_FOUND;
+          XOPENRETURN(BSAHandle, "BSADeleteObject(buildList)",
+                      bsaRC,__FILE__,__LINE__);
+       }
+    }
+ 
+    if (!(xopenGbl.sessFlags & FL_IN_DSM_TXN))        /* first call */
+    {
+       rc = AFSdsmBeginTxn(dsmHandle);
+       if (rc)
+       {
+          xlateRC(BSAHandle, rc, &bsaRC);
+          XOPENRETURN(dsmHandle,"BSADeleteObject(AFSdsmBeginTxn)",
+                      bsaRC,__FILE__,__LINE__);
+       }
+       xopenGbl.sessFlags = (xopenGbl.sessFlags | FL_IN_DSM_TXN); /* set on */
+    }
+ 
+    delType = dtArchive;
+    delInfo.archInfo.stVersion = delArchVersion;
+ 
+    if (copyidP)   /* single ID to delete */
+    {
+       delInfo.archInfo.objId.hi  = copyidP->left;
+       delInfo.archInfo.objId.lo  = copyidP->right;
+ 
+       if ((rc = AFSdsmDeleteObj(dsmHandle,delType,delInfo)) != DSM_RC_OK)
+       {
+          sprintf(traceStr2, "BSADeleteObject: AFSdsmDeleteObj error rc = %d", rc);
+          ourTrace(dsmHandle,TrFL, traceStr2);
+       }
+    }
+    else   /* multiple IDs to delete */
+    {
+       ll = llHeadP;
+       while (ll)
+       {
+          delInfo.archInfo.objId.hi  = ll->objId.hi;
+          delInfo.archInfo.objId.lo  = ll->objId.lo;
+          if ((rc = AFSdsmDeleteObj(dsmHandle, delType, delInfo)) != DSM_RC_OK)
+          {
+             sprintf(traceStr2, "BSADeleteObject: AFSdsmDeleteObj error rc = %d", rc);
+             ourTrace(dsmHandle, TrFL, traceStr2);
+             /*=== break and get out of loop, or keep going? ===*/
+          }
+          /*=== incr to next list entry ===*/
+          ll = ll->next;
+       }
+       /*=== free list now that done ===*/
+       rc =  freeList(&llHeadP, &llTailP);
+    }
+ 
+    xlateRC(BSAHandle, rc, &bsaRC);
+    XOPENRETURN(BSAHandle,"BSADeleteObject",
+                bsaRC,__FILE__,__LINE__)
+ }
+ 
+ BSA_Int16 BSAMarkObjectInactive(
+     long            BSAHandle,
+     ObjectName     *BSAobjNameP
+ )
+ {
+    dsInt16_t      rc = 0;
+    BSA_Int16      bsaRC = 0;
+    dsUint32_t     dsmHandle;
+ 
+    dsmObjName           dsmobjName;
+ 
+    qryBackupData        queryBuffer;       /* for query Backup */
+    qryRespBackupData    qbDataArea;
+    DataBlk              qDataBlkArea;
+ 
+    dsmDelType           delType;
+    dsmDelInfo           delInfo;
+ 
+    dsUint16_t           reason ;                   /* for AFSdsmEndTxn */
+    /*=== build list of all objTypes we find for this name ===*/
+    dsInt16_t            i;
+    dsInt16_t            numTypes;
+    dsUint8_t            listObjType[5];    /* only 2 objTypes defined today */
+    dsUint32_t           listCopyGroup[5];
+ 
+    if(!dsm_init)
+    {
+ #ifdef DEBUG_BUTC
+         printf("TSM library not mounted. \n");
+ #endif
+         if (dsm_MountLibrary())
+         {
+                 printf("TSM Library initialisation failed. \n");
+                 return 1 ;
+         }
+ #ifdef DEBUG_BUTC
+         printf("TSM Library initialisation SUCCESS. \n");
+ #endif
+    }
+ 
+    dsmHandle = BSAHandle;
+    memset(&delInfo, 0x00, sizeof(dsmDelInfo));
+    memset(&queryBuffer, 0x00, sizeof(qryBackupData));
+ 
+    sprintf(traceStr2, "BSAMarkObjectInactive ENTRY: BSAHandle:%d \n ObjName:'%.*s%.*s'.",
+            BSAHandle,
+            100, BSAobjNameP->objectSpaceName,
+            100, BSAobjNameP->pathName);
+    ourTrace(dsmHandle, TrFL, traceStr2);
+ 
+    if (!(xopenGbl.sessFlags & FL_IN_BSA_TXN))
+    {
+       sprintf(traceStr2, "BSAMarkObjectInactive: issued without BSABeginTxn.");
+       ourTrace(BSAHandle, TrFL, traceStr2);
+       bsaRC = BSA_RC_BAD_CALL_SEQUENCE;
+       XOPENRETURN(BSAHandle, "BSAMarkObjectInactive",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    if (strlen(BSAobjNameP->objectSpaceName) > DSM_MAX_FSNAME_LENGTH)
+    {
+       sprintf(traceStr2, "BSAMarkObjectInactive: objectSpaceName too long (%d)", strlen(BSAobjNameP->objectSpaceName));
+       ourTrace(BSAHandle,TrFL, traceStr2);
+ 
+       bsaRC = BSA_RC_OBJNAME_TOO_LONG;
+       XOPENRETURN(BSAHandle, "BSAMarkObjectInactive",
+                   bsaRC,__FILE__,__LINE__);
+    }
+    /*===============================================================
+     The entire pathname gets copied into hl during parsing, so
+     check for that max len as well. For now these are the same value.
+     =============================================================== */
+    if (strlen(BSAobjNameP->pathName) >
+        min(DSM_MAX_HL_LENGTH, BSA_MAX_PATHNAME))
+    {
+       sprintf(traceStr2, "BSAMarkObjectInactive: pathName too long (%d)",
+                          strlen(BSAobjNameP->pathName));
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       bsaRC = BSA_RC_OBJNAME_TOO_LONG;
+       XOPENRETURN(BSAHandle, "BSAMarkObjectInactive",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    /*==============================================================
+     we don't allow any wildcard in name because that could retrieve
+     LOTS of objects and make list processing more complicated.
+     XBSA spec implies a single object.
+     ==============================================================*/
+    if ( strchr(BSAobjNameP->objectSpaceName, '*') ||
+         strchr(BSAobjNameP->objectSpaceName, '?') ||
+         strchr(BSAobjNameP->pathName,        '*') ||
+         strchr(BSAobjNameP->pathName,        '?'))
+    {
+ 
+       sprintf(traceStr2, "BSAMarkObjectInactive: objName contains a wildcard.")
+ ;
+       ourTrace(BSAHandle, TrFL, traceStr2);
+       /*=== could have a more specific rc, use this for now ===*/
+       bsaRC = BSA_RC_ABORT_ACTIVE_NOT_FOUND;
+       XOPENRETURN(BSAHandle, "BSAMarkObjectInactive",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    strcpy(dsmobjName.fs, BSAobjNameP->objectSpaceName);
+    xparsePath(BSAHandle, BSAobjNameP->pathName, dsmobjName.hl, dsmobjName.ll);
+    dsmobjName.objType = DSM_OBJ_ANY_TYPE;
+ 
+    /*============================================================
+     A Backup Delete must include the copy Group and objType this
+     wasn't passed in, so we have to do a query.
+     ============================================================*/
+ 
+    queryBuffer.stVersion = qryBackupDataVersion ;
+    queryBuffer.objName = &dsmobjName;
+    queryBuffer.owner   = xopenGbl.dsmSessInfo.owner;
+    queryBuffer.objState = DSM_ACTIVE;              /* only get active one */
+ 
+    if ((rc=AFSdsmBeginQuery(dsmHandle, qtBackup,
+                         (void *)&queryBuffer )) != DSM_RC_OK)
+    {
+       sprintf(traceStr2, "BSAMarkObjectInactive: Call to AFSdsmBeginQuery for Backup error rc = %d", rc);
+       ourTrace(BSAHandle,TrFL, traceStr2);
+       xlateRC(BSAHandle, rc, &bsaRC);
+       if ((rc == DSM_RC_ABORT_NO_MATCH) ||    /* special rc for MarkInact */
+           (rc == DSM_RC_FILE_SPACE_NOT_FOUND))
+          bsaRC = BSA_RC_ABORT_ACTIVE_NOT_FOUND;
+ 
+       rc = AFSdsmEndQuery(dsmHandle);
+       XOPENRETURN(BSAHandle, "BSAMarkObjectInactive: AFSdsmBeginQuery",
+                   bsaRC,__FILE__,__LINE__);
+    }
+ 
+    qbDataArea.stVersion   = qryRespBackupDataVersion;
+    qDataBlkArea.stVersion = DataBlkVersion ;
+    qDataBlkArea.bufferPtr = (char *)&qbDataArea;
+    qDataBlkArea.bufferLen = sizeof(qryRespBackupData);
+ 
+    numTypes = 0;
+    rc = AFSdsmGetNextQObj(dsmHandle, &qDataBlkArea);
+    while (((rc == DSM_RC_MORE_DATA) ||
+          (rc == DSM_RC_FINISHED)) &&
+           qDataBlkArea.numBytes)
+    {  /* save copy Group we got */
+       listCopyGroup[numTypes] = qbDataArea.copyGroup;
+       listObjType[numTypes]   = qbDataArea.objName.objType;
+       numTypes++;
+       rc = AFSdsmGetNextQObj(dsmHandle, &qDataBlkArea);
+    }
+ 
+    if (rc != DSM_RC_FINISHED)
+    {
+       xlateRC(BSAHandle, rc, &bsaRC);
+       if ((rc == DSM_RC_ABORT_NO_MATCH) || /* special rc for MarkInact */
+           (rc == DSM_RC_FILE_SPACE_NOT_FOUND))
+          bsaRC = BSA_RC_ABORT_ACTIVE_NOT_FOUND;
+       rc = AFSdsmEndQuery(dsmHandle);
+       XOPENRETURN(BSAHandle,"BSAMarkObjectInactive: AFSdsmGetNextQObj",
+                   bsaRC,__FILE__,__LINE__);
+    }
+    rc = AFSdsmEndQuery(dsmHandle);
+ 
+    /*=== now we can do the delete ===*/
+    rc = AFSdsmBeginTxn(dsmHandle);
+ 
+    if (rc)
+    {
+      xlateRC(BSAHandle, rc, &bsaRC);
+      XOPENRETURN(BSAHandle,"BSAMarkObjectInactive: AFSdsmBeginTxn",
+                  bsaRC,__FILE__,__LINE__);
+    }
+    xopenGbl.sessFlags = (xopenGbl.sessFlags | FL_IN_DSM_TXN); /* set on */
+ 
+    delType = dtBackup;     /* this only applies to Backup */
+ 
+    delInfo.backInfo.stVersion = delBackVersion;
+    delInfo.backInfo.objNameP = &dsmobjName;
+ 
+    for (i=0; i<numTypes; i++)
+    {
+       delInfo.backInfo.copyGroup = listCopyGroup[i];
+       dsmobjName.objType         = listObjType[i];
+ 
+       if ((rc = AFSdsmDeleteObj(dsmHandle, delType, delInfo)) != DSM_RC_OK)
+       {
+ 
+          sprintf(traceStr2, "BSAMarkObjectInactive: call to AFSdsmDeleteObj error rc = %d", rc);
+          ourTrace(BSAHandle, TrFL, traceStr2);
+       }
+    }
+ 
+    /*=== issue EndTxn since these can't be nested because of Query sequence ===*/
+    AFSdsmEndTxn(dsmHandle, DSM_VOTE_COMMIT, &reason);
+    xopenGbl.sessFlags = (xopenGbl.sessFlags ^ FL_IN_DSM_TXN); /* set off */
+ 
+    xlateRC(BSAHandle, rc, &bsaRC);
+    XOPENRETURN(BSAHandle,"BSAMarkObjectInactive",
+                bsaRC,__FILE__,__LINE__);
+ }
+ 
+ #endif /*xbsa*/
Index: openafs/src/butc/afsxbsa.h
diff -c /dev/null openafs/src/butc/afsxbsa.h:1.1.2.2
*** /dev/null	Fri Jul 18 12:43:20 2008
--- openafs/src/butc/afsxbsa.h	Tue Jul 15 06:32:46 2008
***************
*** 0 ****
--- 1,866 ----
+ /*
+  * Copyright 2000, International Business Machines Corporation and others.
+  * All Rights Reserved.
+  * 
+  * This software has been released under the terms of the IBM Public
+  * License.  For details, see the LICENSE file in the top-level source
+  * directory or online at http://www.openafs.org/dl/license10.html
+  */
+ 
+ #ifndef _BSA_XBSA_H_                                                            
+ #define _BSA_XBSA_H_                                                            
+                                                                                 
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+ #if (SYS_V > 3) || defined(BERK4_2) || defined(SUN4)
+ #include <sys/time.h>
+ #else
+ #include <time.h>
+ #endif
+ 
+ #ifdef bool_t
+ #undef bool_t
+ #endif
+ 
+ /* include TSM Header Files. */
+ #include <dsmapitd.h>
+ #include <dsmapifp.h>
+ #include <dsmrc.h>
+                                                                                 
+ /* BSA_Boolean  */
+ typedef char BSA_Boolean;
+ 
+ /* BSA_Int16 */
+ typedef short BSA_Int16;
+ 
+ /* BSA_Int32 */
+ typedef long BSA_Int32;     
+ 
+ /* BSA_Int64  */
+ typedef struct {    /* defined as two 32-bit integers */
+     BSA_Int32   left;
+     BSA_Int32   right;
+ } BSA_Int64;
+ 
+ /* BSA_UInt16  */
+ typedef unsigned short BSA_UInt16;
+ 
+ /* BSA_UInt32 */
+ typedef unsigned long BSA_UInt32;
+ 
+ /* BSA_UInt64  */
+ typedef struct {        /* defined as two unsigned 32-bit integers*/
+     BSA_UInt32  left;
+     BSA_UInt32  right;
+ } BSA_UInt64;
+ 
+ /*-------------------------------------------------------------------------+
+ |  ADSM specific constants and return codes                                |
+ +-------------------------------------------------------------------------*/
+ /* TSM library version, release, level
+  */
+ #define BSA_API_VERSION     5
+ #define BSA_API_RELEASE     2
+ #define BSA_API_LEVEL       0
+ 
+ /* Constants used  */
+ #define ADSM_MAX_DESC               100     /* ADSM max Desc size             */
+ #define ADSM_MAX_OBJINFO            100     /* ADSM max object info size      */
+ #define ADSM_LOWEST_BOUND           0x0000  /* value for LowerBound min       */
+ #define ADSM_HIGHEST_BOUND          0xFFFF  /* value for UpperBound max       */
+ #define ADSM_ENV_STRS               3       /* number of env strings          */
+ #define ObjectDescriptorVersion     1       /* ver for ObjectDescriptor       */
+ #define UserDescriptorVersion       1       /* ver for UserDescriptor         */
+ #define BSAObjectType_DATABASE      4       /*  ObjectType for Databases      */
+ 
+ /* Return Codes Used
+  */
+ #define BSA_RC_OK                           0x00
+ #define BSA_RC_SUCCESS                      0x00
+ 
+ #define ADSM_RC_ERROR                       0x60 /* see ADSM error log        */
+ #define ADSM_RC_INVALID_NODE                0x61 /* BSAObjOwner not match Init*/
+ #define ADSM_RC_INVALID_COPYTYPE            0x62 /* invalid copyType          */
+ #define ADSM_RC_INVALID_OBJTYPE             0x63 /* invalid objectType        */
+ #define ADSM_RC_INVALID_STATUS              0x64 /* invalid object status     */
+ #define ADSM_RC_INVALID_ST_VER              0x65 /* invalid structure version */
+ #define ADSM_RC_OWNER_TOO_LONG              0x66 /* owner too long            */
+ #define ADSM_RC_PSWD_TOO_LONG               0x67 /* pswd  too long            */
+ #define ADSM_RC_PSWD_GEN                    0x68 /* pswd access = generate    */
+ 
+ /* Constants used                                                               
+  *                                                                              
+  * Maximum string lengths (lower bound), including trailing null                
+  */                                                                             
+ #define BSA_LIST_ELEMENT_DELIMITER  null    /* Element delimiter in list      */
+ #define BSA_MAX_ADMIN_NAME          64      /* Administrator name             */
+ #define BSA_MAX_APPOBJECT_OWNER     64      /* Max end-object owner length    */
+ #define BSA_MAX_BSAOBJECT_OWNER     64      /* Max BSA object owner length    */
+ #define BSA_MAX_CG_DEST             31      /* Copy group destination         */
+ #define BSA_MAX_CG_NAME             31      /* Max copy group name length     */
+ #define BSA_MAX_COPYGROUPS          16      /* Max number of copy groups      */
+                                             /* which can be specified in a    */
+                                             /* lifecycle group                */
+ #define BSA_MAX_DESC                256     /* Description field              */
+ #define BSA_MAX_ENCODINGMETHOD      31      /* Max encoding method length     */
+ #define BSA_MAX_EVENTINFO           256     /* Max event info size            */
+ #define BSA_MAX_FILTERRULESET       8192    /* Max filter rule set size       */
+ #define BSA_MAX_OSNAME              1024    /* Max Objectspace name length    */
+ #define BSA_MAX_LG_NAME             31      /* Life cycle group name          */
+ #define BSA_MAX_LIFECYCLEGROUPS     64      /* Max number of life cycle       */
+                                             /* groups in a policy set         */
+ #define BSA_MAX_OBJINFO             512     /* Max object info size           */
+ #define BSA_MAX_PATHNAME            1024    /* Max path name length           */
+ #define BSA_MAX_POLICYDOMAINS       256     /* Max number of specific policy  */
+                                             /* domains an administrator may   */
+                                             /* be responsible for             */
+ #define BSA_MAX_POLICYDOMAIN_NAME   31      /* Policy domain name             */
+ #define BSA_MAX_POLICYSETS          16      /* Max number of policy sets      */
+                                             /* in a domain                    */
+ #define BSA_MAX_POLICYSET_NAME      31      /* Policy set name                */
+ #define BSA_MAX_RESOURCETYPE        31      /* Max resource mgr name length   */
+ #define BSA_MAX_TOKEN_SIZE          64      /* Max size of a security token   */
+ #define BSA_PUBLIC              "BSA_ANY"   /* Default string                 */
+                                                                                 
+ /* Return Codes Used                                                            
+  *                                                                              
+  * Return Code descriptions are given in Section 4.3.                           
+  */                                                                             
+ #define BSA_RC_ABORT_ACTIVE_NOT_FOUND       0x02                                
+ #define BSA_RC_ABORT_SYSTEM_ERROR           0x03                                
+ #define BSA_RC_AUTHENTICATION_FAILURE       0x04                                
+ #define BSA_RC_BAD_CALL_SEQUENCE            0x05                                
+ #define BSA_RC_BAD_HANDLE                   0x06                                
+ #define BSA_RC_BUFFER_TOO_SMALL             0x07                                
+ #define BSA_RC_DESC_TOO_LONG                0x08                                
+ #define BSA_RC_OBJECTSPACE_TOO_LONG         0x09                                
+ #define BSA_RC_INVALID_TOKEN                0x0a                                
+ #define BSA_RC_INVALID_VOTE                 0x0b                                
+ #define BSA_RC_INVALID_KEYWORD              0x0c                                
+ #define BSA_RC_MATCH_EXISTS                 0x0d                                
+ #define BSA_RC_MORE_DATA                    0x0e                                
+ #define BSA_RC_MORE_RULES                   0x0f                                
+ #define BSA_RC_NEWTOKEN_REQD                0x10                                
+ #define BSA_RC_NO_MATCH                     0x11                                
+ #define BSA_RC_NO_MORE_DATA                 0x12                                
+ #define BSA_RC_NO_RESOURCES                 0x13                                
+ #define BSA_RC_NULL_DATABLKPTR              0x14                                
+ #define BSA_RC_NULL_OBJNAME                 0x15                                
+ #define BSA_RC_NULL_POINTER                 0x16                                
+ #define BSA_RC_NULL_RULEID                  0x17                                
+ #define BSA_RC_OBJECT_NAME_TOO_LONG         0x18                                
+ #define BSA_RC_OBJECT_NOT_EMPTY             0x19                                
+ #define BSA_RC_OBJECT_NOT_FOUND             0x1a                                
+ #define BSA_RC_OBJINFO_TOO_LONG             0x1b                                
+ #define BSA_RC_OBJNAME_TOO_LONG             0x1c                                
+ #define BSA_RC_OPERATION_NOT_AUTHORIZED     0x1d                                
+ #define BSA_RC_OLDTOKEN_REQD                0x1e                                
+ #define BSA_RC_TOKEN_EXPIRED                0x1f                                
+ #define BSA_RC_TXN_ABORTED                  0x20                                
+ #define BSA_RC_UNMATCHED_QUOTE              0x21                                
+ #define BSA_RC_USER_OWNS_OBJECTS            0x22                                
+                                                                                 
+ /* AppObjectOwner                                                               
+  */                                                                             
+ typedef char AppObjectOwner[BSA_MAX_APPOBJECT_OWNER];                           
+                                                                                 
+ /* BSAObjectOwner                                                               
+  */                                                                             
+ typedef char BSAObjectOwner[BSA_MAX_BSAOBJECT_OWNER];                           
+                                                                                 
+ /* CopyGpDest                                                                   
+  */                                                                             
+ typedef char CopyGpDest[BSA_MAX_CG_DEST];                                       
+                                                                                 
+ /* CopyGpName                                                                   
+  */                                                                             
+ typedef char CopyGpName[BSA_MAX_CG_NAME];                                       
+                                                                                 
+ /* CopyMode                                                                     
+  *                                                                              
+  * Constant     Value     Explanation                                           
+  * --------     -----     -----------                                           
+  * INCREMENTAL  1         Specifies that the Backup Services should make a      
+  *                        copy only if the application object has been          
+  *                        modified since the last time this copy group was      
+  *                        used to create the object's copy.                     
+  * ABSOLUTE     2         Specifies that the Backup Services should make a      
+  *                        copy even if the application object has not been      
+  *                        modified since the last time this copy group was      
+  *                        used to create the object's copy.                     
+  */                                                                             
+ typedef enum {                                                                  
+     BSACopyMode_INCREMENTAL = 1,                                                
+     BSACopyMode_ABSOLUTE = 2                                                    
+ } CopyMode;                                                                     
+                                                                                 
+ /* CopySerialization                                                            
+  *                                                                              
+  * Constant     Value     Explanation                                           
+  * --------     -----     -----------                                           
+  * STATIC       1         Specifies that the Backup Services must create a      
+  *                        consistent (unmodified during the operation) copy of  
+  *                        the object.  If the application is unable to create a 
+  *                        consistent copy then it should skip the operation     
+  *                        (creating backup or archive copy) for the object.     
+  * SHAREDSTATIC 2         Specifies that the Backup Services must create a      
+  *                        consistent copy of the object.  It can retry the      
+  *                        operation a number of times (application dependent).  
+  *                        If the Backup Services is unable to create a          
+  *                        consistent copy even after retries, then it should    
+  *                        skip creating a backup or archive copy of the         
+  *                        object.                                               
+  * SHAREDDYNAMIC 3        Specifies that the Backup Services must create a      
+  *                        copy of the object.  It can retry the operation a     
+  *                        number of times in an attempt to create a consistent  
+  *                        copy; however, if it fails to make a consistent       
+  *                        copy, a copy must still be made, ignoring the fact    
+  *                        that the copy may have been modified during the       
+  *                        operation.  Such copies are useful for log file       
+  *                        objects which are being continuously modified.        
+  * DYNAMIC      4         Specifies that the Backup Services must create a      
+  *                        copy of the obbject even if the source object is      
+  *                        modified during the operation.  No retries should be  
+  *                        attempted to create a consistent copy.                
+  */                                                                             
+ typedef enum {                                                                  
+     BSACopySerialization_STATIC = 1,                                            
+     BSACopySerialization_SHAREDSTATIC = 2,                                      
+     BSACopySerialization_SHAREDDYNAMIC = 3,                                     
+     BSACopySerialization_DYNAMIC = 4                                            
+ } CopySerialization;                                                            
+                                                                                 
+ /* CopyType                                                                     
+  *                                                                              
+  * Constant     Value     Explanation                                           
+  * --------     -----     -----------                                           
+  * ANY          1         Used for matching any copy type (e.g. "backup" or     
+  *                        "archive" in the copy type field of structures for    
+  *                        selecting query results).                             
+  * ARCHIVE      2         Specifies that the copy type should be "archive".     
+  *                        When used in the copy type field of the CopyGroup,    
+  *                        it identifies the copy data as of type                
+  *                        ArchiveCopyData, which is used to create archive      
+  *                        copies.                                               
+  * BACKUP       3         Specifies that the copy type should be "backup".      
+  *                        When used in the copy type field of the CopyGroup,    
+  *                        it identifies the copy data as of type                
+  *                        BackupCopyData, which is used to create backup        
+  *                        copies.                                               
+  */                                                                             
+ typedef enum {                                                                  
+     BSACopyType_ANY = 1,                                                        
+     BSACopyType_ARCHIVE = 2,                                                    
+     BSACopyType_BACKUP = 3                                                      
+ } CopyType;                                                                     
+                                                                                 
+ /* Description                                                                  
+  */                                                                             
+ typedef char Description[BSA_MAX_DESC];                                         
+                                                                                 
+ /* DomainName                                                                   
+  */                                                                             
+ typedef char * DomainName[BSA_MAX_POLICYDOMAIN_NAME];                           
+                                                                                 
+ /* EventInfo                                                                    
+  */                                                                             
+ typedef char EventInfo[BSA_MAX_EVENTINFO];                                      
+                                                                                 
+ /* LGName                                                                       
+  */                                                                             
+ typedef char LGName[BSA_MAX_LG_NAME];                                           
+                                                                                 
+ /* ObjectInfo                                                                   
+  */                                                                             
+ typedef char ObjectInfo[BSA_MAX_OBJINFO];                                       
+                                                                                 
+ /* ObjectName                                                                   
+  */                                                                             
+ typedef struct {                                                                
+     char    objectSpaceName[BSA_MAX_OSNAME]; /* Highest-level name qualifier */ 
+     char    pathName[BSA_MAX_PATHNAME];      /* Object name within           */ 
+                                              /* objectspace                  */ 
+ } ObjectName;                                                                   
+                                                                                 
+ /* ObjectOwner                                                                  
+  */                                                                             
+ typedef struct {                                                                
+     BSAObjectOwner  bsaObjectOwner;    /* BSA Owner name - this is the name  */ 
+                                        /* that Backup Services authenticates */ 
+     AppObjectOwner  appObjectOwner;    /* End-owner name, this is the name   */ 
+                                        /* defined by the application         */ 
+ } ObjectOwner;                                                                  
+                                                                                 
+ /* ObjectSize                                                                   
+  */                                                                             
+ typedef BSA_UInt64 ObjectSize;         /* Unsigned 64-bit integer */            
+                                                                                 
+ /* ObjectStatus                                                                 
+  *                                                                              
+  * Constant     Value     Explanation                                           
+  * --------     -----     -----------                                           
+  * ANY          1         Provides a wild card function.  Can only be used in   
+  *                        queries.                                              
+  * ACTIVE       2         Indicates that this is the most recent backup copy    
+  *                        of an object.                                         
+  * INACTIVE     3         Indicates that this is not the most recent backup     
+  *                        copy, or that the object itself no longer exists.     
+  */                                                                             
+ typedef enum {                                                                  
+     BSAObjectStatus_ANY = 1,                                                    
+     BSAObjectStatus_ACTIVE = 2,                                                 
+     BSAObjectStatus_INACTIVE = 3                                                
+ } ObjectStatus;                                                                 
+                                                                                 
+ /* ObjectType                                                                   
+  *                                                                              
+  * Constant     Value     Explanation                                           
+  * --------     -----     -----------                                           
+  * any          1         Used for matching any object type (e.g. "file" or     
+  *                        "directory") value in the object type field of        
+  *                        structures for selecting query results.               
+  * file         2         Used by the application to indicate that the type of  
+  *                        application object is a "file" or single object.      
+  * directory    3         Used by the application to indicate that the type of  
+  *                        application object is a "directory" or container of   
+  *                        objects.                                              
+  */                                                                             
+ 
+ typedef enum {
+     BSAObjectType_ANY  = 1,
+     BSAObjectType_FILE    = 2,
+     BSAObjectType_DIRECTORY = 3
+  } ObjectType;
+                                                                                 
+ /* Operation                                                                    
+  *                                                                              
+  * Constant     Value     Explanation                                           
+  * --------     -----     -----------                                           
+  * archive      1         Used to indicate that a scheduled operation is of     
+  *                        type "archive".                                       
+  * backup       2         Used to indicate that a scheduled operation is of     
+  *                        type "backup".                                        
+  */                                                                             
+ typedef enum {                                                                  
+     BSAOperation_ARCHIVE = 1,                                                   
+     BSAOperation_BACKUP  = 2                                                    
+ } Operation;                                                                    
+                                                                                 
+ /* Period                                                                       
+  *                                                                              
+  * Use of the Period structure in a Schedule for an event:                      
+  * 1. The Schedule structure specifies 3 timing elements:                       
+  *    a. "firstStartTime" - a timestamp showing the "earliest"                  
+  *        possible time the event could take place                              
+  *    b. "day" - the day of the week the event should occur                     
+  *    c. "frequency" - the period between successive events                     
+  * 2. To determine the day the event should occur (this does                    
+  *    not change the time of the event in the day):                             
+  *    a. Determine the requested day from "firstStartTime".                     
+  *    b. If "day" does not equal XBSA_DAYOFWEEK_ANY                             
+  *       i. Compare "day" to the day of the week corresponding                  
+  *          to "firstStartTime" determined in 2a above.                         
+  *       ii.If the days match, then use "firstStartTime" else                   
+  *          use the first "day" *following* the day shown                       
+  *          in "firstStartTime" as the day of the event.                        
+  * 3. If the PeriodWhich field in the Period structure is other                 
+  *    than XBSA_PERIOD_UNDEFINED, then successive events are                    
+  *    determined using the value of "periodData".                               
+  *    a. For seconds and days, the appropriate seconds or days                  
+  *       are added to the "firstStartTime" and step 2 to correct                
+  *       for the day of the week (if needed) is applied again.                  
+  *    b. If a monthly period is specified, then the appropriate                 
+  *       number of months are added by incrementing the month index is          
+  *       made (for example, a one month increment from February to              
+  *       March).  If the monthly date is not valid (for example, January        
+  *       30 --> February 30) then the last day of the desired month is          
+  *       used (example January 30 --> February 28).  Then step 2 is             
+  *       followed to adjust for the requested day (which might move the         
+  *       event time into the following month).                                  
+  */                                                                             
+ typedef enum {                                                                  
+     BSAPeriod_SECONDS = 1,                                                      
+     BSAPeriod_DAYS = 2,                                                         
+     BSAPeriod_MONTHS = 3,                                                       
+     BSAPeriod_UNDEFINED = -9,                                                   
+     BSAPeriod_DAILY = 4, BSAPeriod_WEEKLY = 5, BSAPeriod_MONTHLY = 6,           
+     BSAPeriod_QUARTERLY = 7, BSAPeriod_ANNUALLY = 8                             
+ } PeriodWhich;                                                                  
+                                                                                 
+ typedef struct {                                                                
+     PeriodWhich     which;                                                      
+     union {                                                                     
+         time_t      nSeconds;                                                   
+         BSA_Int16   nDays;                                                      
+         BSA_Int16   nMonths;                                                    
+     } periodData;                                                               
+ } Period;                                                                       
+                                                                                 
+ /* ResourceType                                                                 
+  */                                                                             
+ typedef char ResourceType[BSA_MAX_RESOURCETYPE];                                
+                                                                                 
+ /* RuleId                                                                       
+  */                                                                             
+ typedef BSA_UInt64 RuleId;                                                      
+                                                                                 
+ /* Scheduleid                                                                   
+  */                                                                             
+ typedef BSA_UInt64 ScheduleId;                                                  
+                                                                                 
+ /* AccessRight                                                                  
+  *                                                                              
+  * Constant     Value     Explanation                                           
+  * --------     -----     -----------                                           
+  * GET          1         Access right for getting an object from Backup        
+  *                        Services, also includes access right for querying     
+  *                        (getting attributes) an object from Backup Services.  
+  * QUERY        2         Access right for querying (getting attributes) an     
+  *                        object from Backup Services.                          
+  */                                                                             
+ typedef enum {                                                                  
+     BSAAccessRight_GET  = 1,                                                    
+     BSAAcessRight_QUERY = 2                                                     
+ } AccessRight;                                                                  
+                                                                                 
+ /* AccessRule                                                                   
+  */                                                                             
+ typedef struct {                                                                
+     RuleId          ruleId;         /* Provided by Backup Services            */
+     ObjectName      objName;        /* Object name to be given access         */
+     ObjectOwner     objectOwner;    /* BSA object owner and Applicaton object */
+                                     /* owner to be given access               */
+     AccessRight     rights;         /* The access rights to be given          */
+ } AccessRule;                                                                   
+                                                                                 
+ /* ApiVersion                                                                   
+  */                                                                             
+ typedef struct {                                                                
+     BSA_UInt16      version;        /* Version of this API                    */
+     BSA_UInt16      release;        /* Release of this API                    */
+     BSA_UInt16      level;          /* Level of this API                      */
+ } ApiVersion;                                                                   
+                                                                                 
+ /* ArchiveCopyData                                                              
+  */                                                                             
+ typedef struct {                                                                
+     CopyGpName          cGName;     /* Copy group name                        */
+     BSA_UInt16          freq;       /* Archive frequency                      */
+     CopySerialization   copySer;    /* Copy serialization code                */
+     CopyMode            copyMode;   /* Copy mode                              */
+     CopyGpDest          destName;   /* Copy destination name                  */
+     BSA_UInt16          retVersion; /* Retention time for the version         */
+ } ArchiveCopyData;                                                              
+                                                                                 
+ /* BackupCopyData                                                               
+  */                                                                             
+ typedef struct {                                                                
+     CopyGpName          cGName;     /* Copy group name                        */
+     BSA_UInt16          freq;       /* Backup frequency                       */
+     CopySerialization   copySer;    /* Copy serialization code                */
+     CopyMode            copyMode;   /* Copy mode: 1=modified, 2=absolute      */
+     CopyGpDest          destName;   /* Copy destination name                  */
+     BSA_UInt16          verDataEx;  /* Versions (number of versions           */
+                                     /* retained)                              */
+     BSA_UInt16          verDataDel; /* Versions (data deleted)                */
+     Period              retXtraVer; /* Retain extra versions                  */
+     Period              retOnlyVer; /* Retain only versions                   */
+ } BackupCopyData;                                                               
+                                                                                 
+ /* CopyGroup                                                                    
+  */                                                                             
+ typedef struct {                                                                
+     CopyType    copyType;       /* Type of copy group: archive, backup, etc   */
+     union {                                                                     
+         ArchiveCopyData archive;                                                
+         BackupCopyData  backup;                                                 
+     } copyData;                                                                 
+ } CopyGroup;                                                                    
+                                                                                 
+ /* CopyId                                                                       
+  */                                                                             
+ typedef BSA_UInt64      CopyId;                                                 
+                                                                                 
+ /* DataBlock                                                                    
+  */                                                                             
+ typedef struct {                                                                
+     BSA_UInt16  bufferLen;                                                      
+     BSA_UInt16  numBytes;       /* Actual number of bytes read from */          
+                                 /* or written to the buffer, or the */          
+                                 /* minimum number of bytes needed   */          
+     char *      bufferPtr;                                                      
+ } DataBlock;                                                                    
+                                                                                 
+ /* DayOfWeek                                                                    
+  */                                                                             
+ typedef enum {                                                                  
+     BSADayOfWeek_Monday = 1,    BSADayOfWeek_Tuesday = 2,                       
+     BSADayOfWeek_Wednesday = 3, BSADayOfWeek_Thursday = 4,                      
+     BSADayOfWeek_Friday = 5,    BSADayOfWeek_Saturday = 6,                      
+     BSADayOfWeek_Sunday = 7                                                     
+ } DayOfWeek;                                                                    
+                                                                                 
+ /* Environment                                                                  
+  */                                                                             
+ typedef struct {                                                                
+     char * envVariables; /* Identifies the Backup Services instance and other */
+                          /* implementation-dependent variables such as        */
+                          /* communication ports, etc.  Each variable is a     */
+                          /* (keyword, value) pair separated by a space.       */
+                          /* If a value contains spaces, it must be            */
+                          /* enclosed in single or double quotes.              */
+ } BSAEnvironment;                                                               
+                                                                                 
+ /* Event                                                                        
+  */                                                                             
+ typedef struct {                                                                
+     BSA_UInt32      eventId;    /* This is an internal (to Backup Services) id*/
+     ObjectOwner     objectOwner;/* Identifies the owner of the event          */
+     struct tm       time;       /* Identifies the time the action is to start */
+     Operation       action;     /* Identifies the action (backup, archive)    */
+     ObjectName      objName;    /* Identifies objects to be acted on          */
+     ResourceType    resourceType;/* Identifies the resource manager for the   */
+                                  /* event                                     */
+     EventInfo       eventInfo;  /* User- and resource-manager-specific info   */
+ } BSAEvent;                                                                     
+                                                                                 
+ /* MethodName                                                                   
+  */                                                                             
+ typedef char EncodingMethod[BSA_MAX_ENCODINGMETHOD];                            
+                                                                                 
+ /* ObjectDescriptor                                                             
+  */                                                                             
+ typedef struct {                                                                
+     BSA_UInt32      version;        /* Version number for this structure      */
+     ObjectOwner     Owner;          /* Owner of the object                    */
+     ObjectName      objName;        /* Object name                            */
+     struct tm       createTime;     /* Supplied by Backup Services            */
+     CopyType        copyType;       /* Copy type: archive or backup           */
+     CopyId          copyId;         /* Supplied by Backup Services            */
+     BSA_UInt64      restoreOrder;   /* Supplied by Backup Services            */
+     LGName          lGName;         /* Associated Lifecycle Group name        */
+     CopyGpName      cGName;         /* Copy group within the lifecycle group  */
+     ObjectSize      size;           /* Object size may be up to 63 bits       */
+     ResourceType    resourceType;   /* e.g. UNIX file system                  */
+     ObjectType      objectType;     /* e.g. file, directory, etc.             */
+     ObjectStatus    status;         /* Active/inactive, supplied by           */
+                                     /* Backup Services                        */
+     EncodingMethod * encodingList;  /* List of encoding Methods used, in      */
+                                     /* application-defined order,             */
+                                     /* terminated with a null entry           */
+     Description     desc;           /* Descriptive label for the object       */
+     ObjectInfo      objectInfo;     /* Application information                */
+ } ObjectDescriptor;                                                             
+                                                                                 
+ /* QueryDescriptor                                                              
+  */                                                                             
+ typedef struct {                                                                
+     ObjectOwner     owner;          /* Owner of the object                    */
+     ObjectName      objName;        /* Object name                            */
+     struct tm       createTimeLB;   /* Lower bound on create time             */
+     struct tm       createTimeUB;   /* Upper bound on create time             */
+     struct tm       expireTimeLB;   /* Lower bound on expiration time         */
+     struct tm       expireTimeUB;   /* Upper bound on expiration time         */
+     CopyType        copyType;       /* Copy type: archive or backup           */
+     LGName          lGName;         /* Associated Lifecycle Group name        */
+     CopyGpName      cGName;         /* Copy group within the lifecycle group  */
+     ResourceType    resourceType;   /* e.g. UNIX file system                  */
+     ObjectType      objectType;     /* e.g. file, directory, etc.             */
+     ObjectStatus    status;         /* Active/inactive, supplied by Backup    */
+                                     /* Services                               */
+     Description     desc;           /* Descriptive label for the object       */
+ } QueryDescriptor;                  /* "*" is interpreted as a meta character */
+                                     /* wild card.                             */
+                                     /* Any undefined value is interpreted as  */
+                                     /* an error.                              */
+                                                                                 
+ /* Schedule                                                                     
+  */                                                                             
+ typedef struct {                                                                
+     ScheduleId      schedId;        /* Provided by Backup Services            */
+     ObjectOwner     objectOwner;    /* Specifies the owner of the schedule    */
+     Operation       operation;      /* Specifies the action to be taken       */
+     struct tm       firstStartTime; /* Specifies the first time the action    */
+                                     /* is to take place                       */
+     DayOfWeek       day;            /* Specifies the day of week for the event*/
+     Period          frequency;      /* Specifies the frequency, e.g. daily    */
+     ObjectName      objectName;     /* Identifies objects to be acted on      */
+     ResourceType    resourceType;   /* Identifies the resource manager for the*/
+                                     /* schedule                               */
+     EventInfo       scheduleInfo;   /* Resource manager specific information  */
+ } Schedule;                                                                     
+                                                                                 
+ /* Security Token                                                               
+  */                                                                             
+ typedef char SecurityToken[BSA_MAX_TOKEN_SIZE];                                 
+                                                                                 
+ /* StreamHandle                                                                 
+  */                                                                             
+ typedef int StreamHandle;                                                       
+                                                                                 
+ /* UserDescriptor                                                               
+  */                                                                             
+ typedef struct t_UserDescriptor {                                               
+     BSA_UInt16      version;        /* Version num of this structure          */
+     BSAObjectOwner  bsaObjectOwner; /* BSA Object owner name              */    
+     DomainName      domainName;     /* Policy domain for the user         */    
+     Description     desc;           /* User information                   */    
+ } UserDescriptor;                                                               
+                                                                                 
+ /* Vote                                                                         
+  */                                                                             
+ typedef enum {                                                                  
+     BSAVote_COMMIT = 1,                                                         
+     BSAVote_ABORT  = 2                                                          
+ } Vote;                                                                         
+                                                                                 
+ /* Function Prototypes for Data Movement API Subset
+  * Note that int and long have been replaced with typedefs
+  * from custom.h.
+  */                                                                             
+ 
+ extern BSA_Int16 
+ BSABeginTxn
+ (      long              bsaHandle
+ );
+ 
+ extern BSA_Int16 
+ BSAChangeToken
+ (      long              bsaHandle,
+        SecurityToken    *oldTokenPtr,
+        SecurityToken    *newTokenPtr
+ );
+ 
+ extern BSA_Int16 
+ BSACreateObject
+ (      long              bsaHandle,
+        ObjectDescriptor *objectDescriptorPtr,
+        DataBlock        *dataBlockPtr
+ );
+ 
+ extern BSA_Int16 
+ BSACreateObjectF
+ (      long              bsaHandle,
+        ObjectDescriptor *objectDescriptorPtr,
+        StreamHandle     *streamPtr
+ );
+ 
+ extern BSA_Int16 
+ BSADeleteObject
+ (      long              bsaHandle,
+        CopyType          copyType,
+        ObjectName       *objectName,
+        CopyId           *copyId
+ );
+ 
+ extern BSA_Int16 
+ BSAEndData
+ (      long              bsaHandle
+ );
+ 
+ extern BSA_Int16 
+ BSAEndTxn
+ (      long              bsaHandle,
+        Vote              vote
+ );
+ 
+ extern BSA_Int16
+ BSAGetData
+ (      long              bsaHandle,
+        DataBlock        *dataBlockPtr
+ );
+ 
+ extern BSA_Int16 
+ BSAGetEnvironment
+ (      long              bsaHandle,
+        ObjectOwner      *objectOwnerPtr,
+        char            **environmentPtr
+ );
+ 
+ extern BSA_Int16 
+ BSAGetNextQueryObject
+ (      long              bsaHandle,
+        ObjectDescriptor *objectDescriptorPtr
+ );
+ 
+ extern BSA_Int16 
+ BSAGetObject
+ (      long              bsaHandle,
+        ObjectDescriptor *objectDescriptorPtr,
+        DataBlock        *dataBlockPtr
+ );
+ 
+ extern BSA_Int16 
+ BSAGetObjectF
+ (      long              bsaHandle,
+        ObjectDescriptor *objectDescriptorPtr,
+        StreamHandle     *streamPtr
+ );
+ 
+ extern BSA_Int16 
+ BSAInit
+ (      long             *bsaHandleP,
+        SecurityToken    *tokenPtr,
+        ObjectOwner      *objectOwnerPtr,
+        char            **environmentPtr
+ );
+ 
+ extern BSA_Int16 
+ BSAMarkObjectInactive
+ (      long              bsaHandle,
+        ObjectName       *objectNamePtr
+ );
+ 
+ extern void 
+ BSAQueryApiVersion
+ (      ApiVersion       *apiVersionPtr
+ );
+ 
+ extern BSA_Int16 
+ BSAQueryObject
+ (      long              bsaHandle,
+        QueryDescriptor  *queryDescriptorPtr,
+        ObjectDescriptor *objectDescriptorPtr
+ );
+ 
+ extern BSA_Int16 
+ BSASendData
+ (      long              bsaHandle,
+        DataBlock        *dataBlockPtr
+ );
+ 
+ extern BSA_Int16 
+ BSASetEnvironment
+ (      long              bsaHandle,
+        char            **environmentPtr
+ );
+ 
+ extern BSA_Int16 
+ BSATerminate
+ (      long              bsaHandle
+ );
+ 
+ extern BSA_Int16
+ BSAResolveLifecycleGroup(
+     long              BSAHandle,
+     ObjectDescriptor *BSAobjDescP
+ );
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ 
+ typedef struct
+ {
+   ApiSessInfo      dsmSessInfo;
+   BSAObjectOwner   bsaObjectOwner; /* node value on BSAInit */
+   dsUint16_t       sessFlags;      /* misc flags            */
+   dsUint8_t        oper;        /* send or recv operation */
+   CopyType         copyType;    /* Backup or Archive type */
+   char             *nextQryP;    /* ptr to respArchive or respBackup */
+ } xGlobal;
+ 
+ /*  flag masks for sessFlags    */
+ /*  to set on use   sessFlags = (sessFlags | FL_IN_BSA_TXN) */
+ /*  to set off use  sessFlags = (sessFlags ^ FL_IN_BSA_TXN) */
+ /*  to test on use  if (sessFlags & FL_IN_BSA_TXN) */
+ #define  FL_IN_BSA_TXN     0x0001  /* within a BSA type txn            */
+ #define  FL_IN_DSM_TXN     0x0002  /* within a actual ADSM txn         */
+ #define  FL_IN_BSA_QRY     0x0004  /* within a query txn               */
+ #define  FL_PSWD_EXPIRE    0x0008  /* pswd has expired                 */
+ #define  FL_RC_WILL_ABORT  0x0010  /* recvd 157 on SendObj or SendData */
+ #define  FL_END_DATA_DONE  0x0020  /* Get error already did EndData    */
+ 
+ #define OPER_NONE            0    /* values for oper field  */
+ #define OPER_SEND_START      1
+ #define OPER_SEND_ISSUED     2
+ #define OPER_RECV_START      3
+ #define OPER_RECV_ISSUED     4
+ 
+ /*  structure def for objInfo  - max len = 255 */
+ typedef struct
+ {
+   ResourceType     resourceType;                       /*  31 bytes */
+   ObjectSize       size;                               /*   8 bytes */
+   char             partDesc[ADSM_MAX_DESC];            /* 100 bytes */
+   char             partObjInfo[ADSM_MAX_OBJINFO];      /* 100 bytes */
+ } XAPIObjInfo;
+ 
+ /* ******* G l o b a l s  ********  */
+ 
+ /* xGlobal xopenGbl; */
+ 
+ extern BSA_Int16 xlateRC(
+     long      BSAHandle,
+     BSA_Int16 dsmRC,
+     BSA_Int16 *bsaRCP);
+ 
+ extern BSA_Int16 xparsePath(
+     long     BSAHandle,
+     char          *pathname,
+     char          *hl,
+     char          *ll);
+ 
+ extern xGlobal        xopenGbl;
+ extern char           traceStr[];
+ extern char           traceStr1[];
+ extern char           traceStr2[];
+ 
+ #define dsMalloc(a)   malloc(a)
+ #define dsFree(a)     free(a)
+ 
+ extern void StrUpper(char *s);
+ /* Min() and Max() macros */
+ #ifndef min
+ #define min(a,b)  (((a) < (b)) ? (a) : (b))
+ #endif
+ 
+ #ifndef max
+ #define max(a,b)  (((a) > (b)) ? (a) : (b))
+ #endif
+ 
+ /* Combined file name w/ line number */
+ #define TrFL __FILE__, __LINE__
+ 
+ /*=== MACRO for exit tracing ===*/
+ #define XOPENRETURN(BSAHandle,functionName,bsaRC,fileName,lineNumber) {sprintf(traceStr2,"%s EXIT: rc = >%d<.",functionName, bsaRC); ourTrace(BSAHandle,fileName,lineNumber,traceStr2); return(bsaRC);}
+ 
+ /* Define license error log file name */
+ #define TSMLicLog "tsmlic.log"
+ 
+ #define custMin_retcode  96
+ #define custMax_retcode  104
+ 
+ /*=======================================================
+  Function to places a trace message in the API tracefile,
+  the message includes the xopen file name and line number.
+  ======================================================*/
+ void ourTrace(long           BSAHandle,
+               char          *fileName,
+               int            lineNumber,
+               char          *traceStr2);
+ 
+ /*================================================
+  Function to log events with call to dsmLogEventEx
+  ===============================================*/
+ void ourLogEvent_Ex(dsUint32_t handle, dsmLogType type, char* msg,
+                  char *appMsg, dsmLogSeverity severity);
+ 
+ /*=================================================================
+  Function to retrieve a message by routing to dsmRCMsg or stdXOpenMsgMap.
+  ===============================================================*/
+ char* ourRCMsg(dsInt16_t dsmRC, char *msg);
+ 
+ /*====================================================
+  Function to build fully qualified license file name.
+  void build_lfname(char *lfname
+  ========================================================*/
+ extern void build_lfname(char *lfname);
+ 
+ /*=== Function to deliver standard XOpen API message above API range. */
+ void stdXOpenMsgMap(dsInt16_t, char*);
+ 
+ 
+ #endif /* xbsa */
Index: openafs/src/butc/butc_xbsa.c
diff -c openafs/src/butc/butc_xbsa.c:1.8.14.1 openafs/src/butc/butc_xbsa.c:1.8.14.2
*** openafs/src/butc/butc_xbsa.c:1.8.14.1	Mon Jul 16 16:42:05 2007
--- openafs/src/butc/butc_xbsa.c	Fri Jul 11 05:50:54 2008
***************
*** 13,19 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/butc/butc_xbsa.c,v 1.8.14.1 2007/07/16 20:42:05 shadow Exp $");
  
  #include <sys/types.h>
  #include <afs/stds.h>
--- 13,19 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/butc/butc_xbsa.c,v 1.8.14.2 2008/07/11 09:50:54 shadow Exp $");
  
  #include <sys/types.h>
  #include <afs/stds.h>
***************
*** 34,39 ****
--- 34,55 ----
  char resourceType[20] = "LFS FILE SYSTEM";
  #define GOODSTR(s) ((s)?(s):"<NULL>")
  
+ #ifdef NEW_XBSA
+ BSA_Int16 (*XBSAInit)(long *, SecurityToken *, ObjectOwner *, char **);
+ BSA_Int16 (*XBSABeginTxn)(long);
+ BSA_Int16 (*XBSAEndTxn)(long, Vote);
+ BSA_Int16 (*XBSATerminate)(long);
+ BSA_Int16 (*XBSAQueryObject)(long, QueryDescriptor *, ObjectDescriptor *);
+ BSA_Int16 (*XBSAGetObject)(long, ObjectDescriptor *, DataBlock *);
+ BSA_Int16 (*XBSAEndData)(long);
+ BSA_Int16 (*XBSACreateObject)(long, ObjectDescriptor *, DataBlock *);
+ BSA_Int16 (*XBSADeleteObject)(long, CopyType, ObjectName *, CopyId *);
+ BSA_Int16 (*XBSAMarkObjectInactive)(long, ObjectName *);
+ BSA_Int16 (*XBSASendData)(long, DataBlock *);
+ BSA_Int16 (*XBSAGetData)(long, DataBlock *);
+ void (*XBSAQueryApiVersion)(ApiVersion *);
+ BSA_Int16 (*XBSAGetEnvironment)(long, ObjectOwner *, char **);
+ #else
  BSA_Int16(*XBSAInit) (BSA_UInt32 *, SecurityToken *, ObjectOwner *, char **);
  BSA_Int16(*XBSABeginTxn) (BSA_UInt32);
  BSA_Int16(*XBSAEndTxn) (BSA_UInt32, Vote);
***************
*** 49,55 ****
  BSA_Int16(*XBSAGetData) (BSA_UInt32, DataBlock *);
  BSA_Int16(*XBSAQueryApiVersion) (ApiVersion *);
  BSA_Int16(*XBSAGetEnvironment) (BSA_UInt32, ObjectOwner *, char **);
! 
  
  xbsa_error(int rc, struct butx_transactionInfo *info)
  {
--- 65,71 ----
  BSA_Int16(*XBSAGetData) (BSA_UInt32, DataBlock *);
  BSA_Int16(*XBSAQueryApiVersion) (ApiVersion *);
  BSA_Int16(*XBSAGetEnvironment) (BSA_UInt32, ObjectOwner *, char **);
! #endif
  
  xbsa_error(int rc, struct butx_transactionInfo *info)
  {
***************
*** 122,127 ****
--- 138,144 ----
  
      switch (serverType) {
      case XBSA_SERVER_TYPE_ADSM:
+ #ifndef NEW_XBSA
  #if defined(AFS_AIX_ENV)
  	dynlib =
  	    dlopen("/usr/lib/libXApi.a(bsashr10.o)",
***************
*** 137,142 ****
--- 154,160 ----
  #else
  	dynlib = NULL;
  #endif
+ #endif
  	break;
      default:
  	ELog(0, "xbsa_MountLibrary: The serverType %d is not recognized\n",
***************
*** 145,159 ****
--- 163,180 ----
  	break;
      }
  
+ #ifndef NEW_XBSA
      if (dynlib == NULL) {
  	ELog(0,
  	     "xbsa_MountLibrary: The dlopen call to load the XBSA shared library failed\n");
  	return (BUTX_NOLIBRARY);
      }
+ #endif
  
      memset(info, 0, sizeof(struct butx_transactionInfo));
      XBSA_SET_SERVER_TYPE(info->serverType, serverType);
  
+ #ifndef NEW_XBSA
  #if defined(AFS_AIX_ENV) || defined(AFS_SUN5_ENV)
      XBSAInit = (BSA_Int16(*)
  		(BSA_UInt32 *, SecurityToken *, ObjectOwner *,
***************
*** 204,213 ****
  	     "xbsa_MountLibrary: The dlopen call to load the XBSA shared library failed\n");
  	return (BUTX_NOLIBRARY);
      }
- 
      XBSAQueryApiVersion(&(info->apiVersion));
  #endif
  
      /*
       * Verify the API version
       */
--- 225,264 ----
  	     "xbsa_MountLibrary: The dlopen call to load the XBSA shared library failed\n");
  	return (BUTX_NOLIBRARY);
      }
      XBSAQueryApiVersion(&(info->apiVersion));
  #endif
+ #else
+ #if defined(AFS_AIX_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_LINUX26_ENV)
+     XBSAInit                    = BSAInit;
+     XBSABeginTxn                = BSABeginTxn;
+     XBSAEndTxn                  = BSAEndTxn;
+     XBSATerminate               = BSATerminate;
+     XBSAQueryObject             = BSAQueryObject;
+     XBSAGetObject               = BSAGetObject;
+     XBSAEndData                 = BSAEndData;
+     XBSACreateObject            = BSACreateObject;
+     XBSAMarkObjectInactive      = BSAMarkObjectInactive;
+     XBSADeleteObject            = BSADeleteObject;
+     XBSASendData                = BSASendData;
+     XBSAGetData                 = BSAGetData;
+     XBSAQueryApiVersion         = BSAQueryApiVersion;
+     XBSAGetEnvironment          = BSAGetEnvironment;
+     
+     if (!XBSAInit || !XBSABeginTxn || !XBSAEndTxn || !XBSATerminate ||
+ 	!XBSAQueryObject || !XBSAGetObject || !XBSAEndData ||
+ 	!XBSACreateObject || !XBSADeleteObject || !XBSAMarkObjectInactive ||
+ 	!XBSASendData || !XBSAGetData || !XBSAQueryApiVersion ||
+ 	!XBSAGetEnvironment) {
+ 	ELog(0,"xbsa_MountLibrary: The dlopen call to load the XBSA shared library failed\n");
+ 	return(BUTX_NOLIBRARY);
+     }
+     XBSAQueryApiVersion(&(info->apiVersion));
+ #endif
+ #endif
  
+ #ifdef DEBUG_BUTC
+ 	printf("xbsa_MountLibrary : XBSA function Pointers initialised. \n");
+ #endif
      /*
       * Verify the API version
       */
Index: openafs/src/butc/butc_xbsa.h
diff -c openafs/src/butc/butc_xbsa.h:1.5 openafs/src/butc/butc_xbsa.h:1.5.8.1
*** openafs/src/butc/butc_xbsa.h:1.5	Wed Aug 18 21:07:10 2004
--- openafs/src/butc/butc_xbsa.h	Fri Jul 11 05:50:54 2008
***************
*** 38,44 ****
--- 38,48 ----
  #define XBSADFLTBUFFER 16384	/* default size is 16KB */
  #define XBSAMAXBUFFER  65535	/* maximum size in 64KB-1; has to fit in 16bit integer */
  
+ #ifdef NEW_XBSA
+ #include "afsxbsa.h"
+ #else
  #include <xbsa.h>
+ #endif
  
  #define XBSA_NUM_ENV_STRS ADSM_ENV_STRS
  #define XBSA_MAX_OSNAME   BSA_MAX_OSNAME
Index: openafs/src/butm/NTMakefile
diff -c openafs/src/butm/NTMakefile:1.5 openafs/src/butm/NTMakefile:1.5.4.1
*** openafs/src/butm/NTMakefile:1.5	Sun Nov 20 20:56:44 2005
--- openafs/src/butm/NTMakefile	Wed Jul  2 08:49:13 2008
***************
*** 46,51 ****
--- 46,52 ----
  $(OUT)\test_ftm.exe: $(OUT)\test_ftm.obj $(LIBFILE) $(TESTLIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  mkdir:
  	
Index: openafs/src/cf/bigendian.m4
diff -c openafs/src/cf/bigendian.m4:1.3.14.1 openafs/src/cf/bigendian.m4:1.3.14.2
*** openafs/src/cf/bigendian.m4:1.3.14.1	Wed Aug  2 15:01:22 2006
--- openafs/src/cf/bigendian.m4	Mon Jul 14 00:06:09 2008
***************
*** 1,5 ****
  dnl
! dnl $Id: bigendian.m4,v 1.3.14.1 2006/08/02 19:01:22 shadow Exp $
  dnl
  
  dnl check if this computer is little or big-endian
--- 1,5 ----
  dnl
! dnl $Id: bigendian.m4,v 1.3.14.2 2008/07/14 04:06:09 rra Exp $
  dnl
  
  dnl check if this computer is little or big-endian
***************
*** 8,19 ****
  dnl it when cross-compiling
  
  AC_DEFUN([OPENAFS_CHECK_BIGENDIAN], [
! AC_ARG_ENABLE(bigendian,
! [  --enable-bigendian	the target is big endian],
! openafs_cv_c_bigendian=yes)
! AC_ARG_ENABLE(littleendian,
! [  --enable-littleendian	the target is little endian],
! openafs_cv_c_bigendian=no)
  AC_CACHE_CHECK(whether byte order is known at compile time,
  openafs_cv_c_bigendian_compile,
  [AC_TRY_COMPILE([
--- 8,20 ----
  dnl it when cross-compiling
  
  AC_DEFUN([OPENAFS_CHECK_BIGENDIAN], [
! AC_ARG_ENABLE([bigendian],
!     [AS_HELP_STRING([--enable-bigendian], [the target is big endian])],
!     [openafs_cv_c_bigendian=yes])
! AC_ARG_ENABLE([littleendian],
!     [AS_HELP_STRING([--enable-littleendian], [the target is little endian])],
!     [openafs_cv_c_bigendian=no])
! 
  AC_CACHE_CHECK(whether byte order is known at compile time,
  openafs_cv_c_bigendian_compile,
  [AC_TRY_COMPILE([
Index: openafs/src/cf/kerberos.m4
diff -c openafs/src/cf/kerberos.m4:1.7.2.8 openafs/src/cf/kerberos.m4:1.7.2.9
*** openafs/src/cf/kerberos.m4:1.7.2.8	Fri Apr 18 16:49:58 2008
--- openafs/src/cf/kerberos.m4	Mon Jul 14 00:06:09 2008
***************
*** 1,5 ****
  dnl
! dnl $Id: kerberos.m4,v 1.7.2.8 2008/04/18 20:49:58 shadow Exp $
  dnl
  dnl Kerberos autoconf glue
  dnl
--- 1,5 ----
  dnl
! dnl $Id: kerberos.m4,v 1.7.2.9 2008/07/14 04:06:09 rra Exp $
  dnl
  dnl Kerberos autoconf glue
  dnl
***************
*** 10,16 ****
  dnl AC_ARG_VAR(KRB5LIBS, [Libraries and flags to compile Kerberos 5 programs])
  dnl AC_ARG_VAR(KRB5_CONFIG, [Location of krb5-config script])
  
! AC_ARG_WITH([krb5-conf],[--with-krb5-conf[=krb5-config-location]    Use a krb5-config script to configure Kerberos])
  if test X$with_krb5_conf != X; then
  		conf_krb5=YES
  		if test X$with_krb5_conf = Xyes; then
--- 10,19 ----
  dnl AC_ARG_VAR(KRB5LIBS, [Libraries and flags to compile Kerberos 5 programs])
  dnl AC_ARG_VAR(KRB5_CONFIG, [Location of krb5-config script])
  
! AC_ARG_WITH([krb5-conf],
!     [AS_HELP_STRING([--with-krb5-conf=@<:@krb5-config-location@:>@],
!         [use a krb5-config script to configure Kerberos])])
! 
  if test X$with_krb5_conf != X; then
  		conf_krb5=YES
  		if test X$with_krb5_conf = Xyes; then
***************
*** 35,41 ****
  		AC_MSG_RESULT([Adding $KRB5LIBS to KRB5LIBS])
  fi
  
! AC_ARG_WITH([krb5], [--with-krb5 Support for Kerberos 5 (manual configuration)])
  
  if test X$with_krb5 = Xyes; then
          if test X$conf_krb5 = XYES; then
--- 38,46 ----
  		AC_MSG_RESULT([Adding $KRB5LIBS to KRB5LIBS])
  fi
  
! AC_ARG_WITH([krb5], 
!     [AS_HELP_STRING([--with-krb5],
!         [support for Kerberos 5 (manual configuration)])])
  
  if test X$with_krb5 = Xyes; then
          if test X$conf_krb5 = XYES; then
Index: openafs/src/cf/linux-test4.m4
diff -c openafs/src/cf/linux-test4.m4:1.29.2.41.2.2 openafs/src/cf/linux-test4.m4:1.29.2.44
*** openafs/src/cf/linux-test4.m4:1.29.2.41.2.2	Sun Jun  8 23:39:30 2008
--- openafs/src/cf/linux-test4.m4	Mon Jun 30 23:35:24 2008
***************
*** 1051,1053 ****
--- 1051,1081 ----
      AC_DEFINE([EXPORTED_PROC_ROOT_FS], 1, [define if proc_root_fs is exported])
    fi])
   
+ AC_DEFUN([LINUX_D_PATH_TAKES_STRUCT_PATH], [
+   AC_MSG_CHECKING([if d_path() takes a struct path argument])
+   AC_CACHE_VAL([ac_cv_linux_d_path_takes_struct_path], [
+     AC_TRY_KBUILD(
+ [#include <linux/dcache.h>],
+ [struct path *p;
+ d_path(p, NULL, 0);],
+       ac_cv_linux_d_path_takes_struct_path=yes,
+       ac_cv_linux_d_path_takes_struct_path=no)])
+   AC_MSG_RESULT($ac_cv_linux_d_path_takes_struct_path)
+   if test "x$ac_cv_linux_d_path_takes_struct_path" = "xyes"; then
+     AC_DEFINE([D_PATH_TAKES_STRUCT_PATH], 1, [define if d_path() takes a struct path argument])
+   fi])
+  
+ AC_DEFUN([LINUX_NEW_EXPORT_OPS], [
+   AC_MSG_CHECKING([if kernel uses new export ops])
+   AC_CACHE_VAL([ac_cv_linux_new_export_ops], [
+     AC_TRY_KBUILD(
+ [#include <linux/exportfs.h>],
+ [struct export_operations _eops;
+ _eops.fh_to_parent(NULL, NULL, 0, 0);],
+       ac_cv_linux_new_export_ops=yes,
+       ac_cv_linux_new_export_ops=no)])
+   AC_MSG_RESULT($ac_cv_linux_new_export_ops)
+   if test "x$ac_cv_linux_new_export_ops" = "xyes"; then
+     AC_DEFINE([NEW_EXPORT_OPS], 1, [define if kernel uses new export ops])
+   fi])
+  
Index: openafs/src/cf/osconf.m4
diff -c openafs/src/cf/osconf.m4:1.83.2.9 openafs/src/cf/osconf.m4:1.83.2.10
*** openafs/src/cf/osconf.m4:1.83.2.9	Wed Apr  2 15:51:56 2008
--- openafs/src/cf/osconf.m4	Fri Jul 11 05:50:53 2008
***************
*** 8,14 ****
  CC="cc"
  CCOBJ="cc"
  MT_CC="cc"
! XLIBS="${LIB_AFSDB}"
  
  dnl debugging and optimization flag defaults
  dnl Note, these are all the defaults for if debug/optimize turned on, and
--- 8,14 ----
  CC="cc"
  CCOBJ="cc"
  MT_CC="cc"
! XLIBS="${LIB_AFSDB} ${XBSA_XLIBS}"
  
  dnl debugging and optimization flag defaults
  dnl Note, these are all the defaults for if debug/optimize turned on, and
***************
*** 205,211 ****
  		XCFLAGS="${XCFLAGS0} +DA1.0"
  		XLIBELFA="-lelf"
  		#XLIBS="${LIB_AFSDB} -lnsl"
- 		XLIBS="${LIB_AFSDB}"
  		YACC="/opt/langtools/bin/yacc"
  		SHLIB_LINKER="ld -b"
  		;;
--- 205,210 ----
***************
*** 237,243 ****
  		XCFLAGS="${XCFLAGS0}"
  		XLIBELFA="-lelf"
  		#XLIBS="${LIB_AFSDB} -lnsl"
- 		XLIBS="${LIB_AFSDB}"
  		YACC="/opt/langtools/bin/yacc"
  		SHLIB_LINKER="ld -b"
  		;;
--- 236,241 ----
Index: openafs/src/cmd/test/NTMakefile
diff -c openafs/src/cmd/test/NTMakefile:1.5 openafs/src/cmd/test/NTMakefile:1.5.4.1
*** openafs/src/cmd/test/NTMakefile:1.5	Sun Nov 20 20:56:45 2005
--- openafs/src/cmd/test/NTMakefile	Wed Jul  2 08:49:14 2008
***************
*** 25,30 ****
--- 25,31 ----
  	$(EXECONLINK) $(EXELIBS)  
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  #build ctest.exe
  CTEST_EXEOBJS =\
***************
*** 36,41 ****
--- 37,43 ----
  	$(EXECONLINK) $(EXELIBS)  
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  # build dtest.exe
  DTEST_EXEOBJS =\
***************
*** 47,52 ****
--- 49,55 ----
  	$(EXECONLINK) $(EXELIBS)  
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  all: test
  
Index: openafs/src/comerr/NTMakefile
diff -c openafs/src/comerr/NTMakefile:1.6.4.1 openafs/src/comerr/NTMakefile:1.6.4.2
*** openafs/src/comerr/NTMakefile:1.6.4.1	Wed Sep 19 13:58:48 2007
--- openafs/src/comerr/NTMakefile	Wed Jul  2 08:49:15 2008
***************
*** 66,71 ****
--- 66,72 ----
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  ####################################################################
  install: prep $(INCFILES) $(COMERR_LIBFILE) $(COMPILE_ET_EXEFILE) 
Index: openafs/src/comerr/test/NTMakefile
diff -c openafs/src/comerr/test/NTMakefile:1.4 openafs/src/comerr/test/NTMakefile:1.4.4.1
*** openafs/src/comerr/test/NTMakefile:1.4	Sun Nov 20 20:56:47 2005
--- openafs/src/comerr/test/NTMakefile	Wed Jul  2 08:49:15 2008
***************
*** 20,25 ****
--- 20,26 ----
  	$(EXECONLINK) $(EXELIBS) 
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  test1.c test1.h: test1.et 
  	$(DEL) test1.c test1.h
Index: openafs/src/config/Makefile.config.in
diff -c openafs/src/config/Makefile.config.in:1.12.2.2 openafs/src/config/Makefile.config.in:1.12.2.4
*** openafs/src/config/Makefile.config.in:1.12.2.2	Mon Nov 12 13:28:35 2007
--- openafs/src/config/Makefile.config.in	Tue Jul  1 18:51:54 2008
***************
*** 48,53 ****
--- 48,55 ----
  LIB_AFSDB = @LIB_AFSDB@
  LIBS = @LIBS@
  LINUX_KERNEL_PATH = @LINUX_KERNEL_PATH@
+ LINUX_LIBAFS_NAME=@LINUX_LIBAFS_NAME@
+ LINUX_KERNEL_PACKAGING=@LINUX_KERNEL_PACKAGING@
  LINUX_VERSION = @LINUX_VERSION@
  LINUX_VERS = @LINUX_VERSION@
  LWP_OPTMZ = @LWP_OPTMZ@
***************
*** 65,70 ****
--- 67,73 ----
  PAM_LIBS = @PAM_LIBS@
  PAM_OPTMZ = @PAM_OPTMZ@
  PAM_DBG = @PAM_DBG@
+ PATH_CPP = @PATH_CPP@
  PINSTALL_LIBS = @PINSTALL_LIBS@
  RANLIB = @RANLIB@
  REGEX_OBJ = @REGEX_OBJ@
Index: openafs/src/config/NTMakefile
diff -c openafs/src/config/NTMakefile:1.20.2.2 openafs/src/config/NTMakefile:1.20.2.3
*** openafs/src/config/NTMakefile:1.20.2.2	Thu Feb 15 13:14:08 2007
--- openafs/src/config/NTMakefile	Wed Jul  2 08:49:15 2008
***************
*** 508,521 ****
--- 508,524 ----
  $(OUT)\mkvers.exe : $(OUT)\mkvers.obj
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\touch.exe : $(OUT)\touch.obj
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\util_cr.exe : $(OUT)\util_cr.obj
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  langsetup: $(DESTDIR)\bin\NTLang.bat
  
Index: openafs/src/config/NTMakefile.amd64_w2k
diff -c openafs/src/config/NTMakefile.amd64_w2k:1.24.2.41.2.3 openafs/src/config/NTMakefile.amd64_w2k:1.24.2.44
*** openafs/src/config/NTMakefile.amd64_w2k:1.24.2.41.2.3	Mon Jun 23 00:13:15 2008
--- openafs/src/config/NTMakefile.amd64_w2k	Wed Jul 16 00:29:43 2008
***************
*** 84,90 ****
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=3900
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
--- 84,90 ----
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=5000
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
***************
*** 294,299 ****
--- 294,306 ----
  _VC_MANIFEST_EMBED_DLL=
  !ENDIF
  
+ !IF DEFINED(CODESIGN_DESC) && DEFINED(CODESIGN_URL) && DEFINED(CODESIGN_TIMESTAMP)
+ CODESIGN_USERLAND= signtool.exe sign /a /d "$(CODESIGN_DESC)" /du $(CODESIGN_URL) \
+         /t $(CODESIGN_TIMESTAMP) /v $@
+ !ELSE
+ CODESIGN_USERLAND=
+ !ENDIF
+ 
  # Set compiler warning level
  
  !IFNDEF AFSDEV_WARNLEVEL
Index: openafs/src/config/NTMakefile.i386_nt40
diff -c openafs/src/config/NTMakefile.i386_nt40:1.84.2.40.2.3 openafs/src/config/NTMakefile.i386_nt40:1.84.2.42
*** openafs/src/config/NTMakefile.i386_nt40:1.84.2.40.2.3	Mon Jun 23 00:13:15 2008
--- openafs/src/config/NTMakefile.i386_nt40	Wed Jul 16 00:29:43 2008
***************
*** 84,90 ****
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=3900
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
--- 84,90 ----
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=5000
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
Index: openafs/src/config/NTMakefile.i386_w2k
diff -c openafs/src/config/NTMakefile.i386_w2k:1.23.2.41.2.3 openafs/src/config/NTMakefile.i386_w2k:1.23.2.46
*** openafs/src/config/NTMakefile.i386_w2k:1.23.2.41.2.3	Mon Jun 23 00:13:15 2008
--- openafs/src/config/NTMakefile.i386_w2k	Wed Jul 16 00:29:44 2008
***************
*** 37,42 ****
--- 37,46 ----
  
  #sanity checks 
  
+ !IF ("$(CPU)" == "x86")
+ CPU=i386
+ !ENDIF
+ 
  !IF ("$(CPU)" != "i386")
  !ERROR Platform SDK not configured for i386
  !ENDIF
***************
*** 84,90 ****
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=3900
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
--- 88,94 ----
  #define used in WinNT/2000 installation and program version display
  AFSPRODUCT_VER_MAJOR=1
  AFSPRODUCT_VER_MINOR=5
! AFSPRODUCT_VER_PATCH=5000
  AFSPRODUCT_VER_BUILD=0
  
  AFSPRODUCT_VERSION=$(AFSPRODUCT_VER_MAJOR).$(AFSPRODUCT_VER_MINOR).$(AFSPRODUCT_VER_PATCH)
***************
*** 299,304 ****
--- 303,315 ----
  _VC_MANIFEST_EMBED_DLL=
  !ENDIF
  
+ !IF DEFINED(CODESIGN_DESC) && DEFINED(CODESIGN_URL) && DEFINED(CODESIGN_TIMESTAMP)
+ CODESIGN_USERLAND= signtool.exe sign /a /d "$(CODESIGN_DESC)" /du $(CODESIGN_URL) \
+         /t $(CODESIGN_TIMESTAMP) /v $@
+ !ELSE
+ CODESIGN_USERLAND=
+ !ENDIF
+ 
  # Set compiler warning level
  
  !IFNDEF AFSDEV_WARNLEVEL
Index: openafs/src/config/NTMakefile.version-NOCML
diff -c openafs/src/config/NTMakefile.version-NOCML:1.4 openafs/src/config/NTMakefile.version-NOCML:1.4.14.1
*** openafs/src/config/NTMakefile.version-NOCML:1.4	Thu Jun 19 15:02:26 2003
--- openafs/src/config/NTMakefile.version-NOCML	Wed Jul  2 19:01:50 2008
***************
*** 14,25 ****
  !ENDIF
  
  $(VERSFILE).c:
! 	echo char $(CML_PREFIX)cml_version_number[]="@(#)OpenAFS$(AFSPRODUCT_VERSION)"; >$(VERSFILE).c
! 	echo char* AFSVersion = "OpenAFS$(AFSPRODUCT_VERSION)";  >>$(VERSFILE).c
  
  $(VERSFILE).h:
! 	echo #define AFS_VERINFO_BUILD "OpenAFS$(AFSPRODUCT_VERSION)" >$(VERSFILE).h
  	echo #define AFS_VERINFO_FILEVER $(AFSPRODUCT_FILE_VERSION) >>$(VERSFILE).h
  
  $(VERSFILE).txt:
! 	echo OpenAFS$(AFSPRODUCT_VERSION)>$(VERSFILE).txt
--- 14,26 ----
  !ENDIF
  
  $(VERSFILE).c:
! 	echo char $(CML_PREFIX)cml_version_number[]="@(#)OpenAFS_$(AFSPRODUCT_VERSION)"; >$(VERSFILE).c
! 	echo char* AFSVersion = "OpenAFS_$(AFSPRODUCT_VERSION)";  >>$(VERSFILE).c
  
  $(VERSFILE).h:
! 	echo #define AFS_VERINFO_BUILD "OpenAFS_$(AFSPRODUCT_VERSION)" >$(VERSFILE).h
  	echo #define AFS_VERINFO_FILEVER $(AFSPRODUCT_FILE_VERSION) >>$(VERSFILE).h
+         echo #define AFSPRODUCT_VERSION "$(AFSPRODUCT_VERSION)" >> $(VERSFILE).h
  
  $(VERSFILE).txt:
! 	echo OpenAFS_$(AFSPRODUCT_VERSION)>$(VERSFILE).txt
Index: openafs/src/config/NTVersioninfo.rc
diff -c openafs/src/config/NTVersioninfo.rc:1.5 openafs/src/config/NTVersioninfo.rc:1.5.8.1
*** openafs/src/config/NTVersioninfo.rc:1.5	Wed Nov 24 13:42:31 2004
--- openafs/src/config/NTVersioninfo.rc	Wed Jul  2 19:01:50 2008
***************
*** 27,33 ****
          BLOCK "000004E4"
          BEGIN
              VALUE "CompanyName",        "OpenAFS Project", "\0"
!             VALUE "LegalCopyright",     "Copyright \251 IBM Corporation and others, 1998, 1999, 2000, 2001, 2002, 2003.", "\0"
              VALUE "ProductName",        "OpenAFS for Windows", "\0"
              VALUE "ProductVersion",     AFSPRODUCT_VERSION, "\0"
              VALUE "FileVersion",        AFSPRODUCT_VERSION, "\0"
--- 27,33 ----
          BLOCK "000004E4"
          BEGIN
              VALUE "CompanyName",        "OpenAFS Project", "\0"
!             VALUE "LegalCopyright",     "Copyright \251 IBM Corporation and many others, 1998-2008.", "\0"
              VALUE "ProductName",        "OpenAFS for Windows", "\0"
              VALUE "ProductVersion",     AFSPRODUCT_VERSION, "\0"
              VALUE "FileVersion",        AFSPRODUCT_VERSION, "\0"
Index: openafs/src/config/param.alpha_linux_26.h
diff -c openafs/src/config/param.alpha_linux_26.h:1.3.6.5 openafs/src/config/param.alpha_linux_26.h:1.3.6.6
*** openafs/src/config/param.alpha_linux_26.h:1.3.6.5	Thu Nov  9 18:18:45 2006
--- openafs/src/config/param.alpha_linux_26.h	Mon Jun 30 16:51:38 2008
***************
*** 79,85 ****
  #define SYS_NAME       "alpha_linux_26"
  #define SYS_NAME_ID    SYS_NAME_ID_alpha_linux_26
  
! 
  #endif /* AFS_PARAM_H */
  				     
  #else /* !defined(UKERNEL) */
--- 79,89 ----
  #define SYS_NAME       "alpha_linux_26"
  #define SYS_NAME_ID    SYS_NAME_ID_alpha_linux_26
  
! #ifdef __GLIBC__
! #if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 3)
! #define USE_UCONTEXT
! #endif
! #endif
  #endif /* AFS_PARAM_H */
  				     
  #else /* !defined(UKERNEL) */
Index: openafs/src/config/param.s390_linux26.h
diff -c openafs/src/config/param.s390_linux26.h:1.1.6.5 openafs/src/config/param.s390_linux26.h:1.1.6.6
*** openafs/src/config/param.s390_linux26.h:1.1.6.5	Thu Nov  9 18:18:45 2006
--- openafs/src/config/param.s390_linux26.h	Mon Jun 30 16:51:38 2008
***************
*** 85,90 ****
--- 85,95 ----
  #endif
  #endif /* KERNEL */
  
+ #ifdef __GLIBC__
+ #if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 3)
+ #define USE_UCONTEXT
+ #endif
+ #endif
  #endif /* AFS_PARAM_H */
  
  #else /* !defined(UKERNEL) */
Index: openafs/src/config/param.s390x_linux26.h
diff -c openafs/src/config/param.s390x_linux26.h:1.4.4.5 openafs/src/config/param.s390x_linux26.h:1.4.4.6
*** openafs/src/config/param.s390x_linux26.h:1.4.4.5	Thu Nov  9 18:18:45 2006
--- openafs/src/config/param.s390x_linux26.h	Mon Jun 30 16:51:38 2008
***************
*** 88,93 ****
--- 88,98 ----
  #endif
  #endif /* KERNEL */
  
+ #ifdef __GLIBC__
+ #if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 3)
+ #define USE_UCONTEXT
+ #endif
+ #endif
  #endif /* AFS_PARAM_H */
  
  #else /* !defined(UKERNEL) */
Index: openafs/src/dir/test/NTMakefile
diff -c openafs/src/dir/test/NTMakefile:1.5 openafs/src/dir/test/NTMakefile:1.5.4.1
*** openafs/src/dir/test/NTMakefile:1.5	Sun Nov 20 20:56:50 2005
--- openafs/src/dir/test/NTMakefile	Wed Jul  2 08:49:15 2008
***************
*** 13,18 ****
--- 13,19 ----
  $(OUT)\dtest.exe: $(OUT)\dtest.obj $(DESTDIR)\lib\afs\afsdir.lib
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  mkdir:
  	
Index: openafs/src/finale/NTMakefile
diff -c openafs/src/finale/NTMakefile:1.5 openafs/src/finale/NTMakefile:1.5.4.1
*** openafs/src/finale/NTMakefile:1.5	Sun Nov 20 20:56:51 2005
--- openafs/src/finale/NTMakefile	Wed Jul  2 08:49:16 2008
***************
*** 27,33 ****
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
! 
  
  ############################################################################
  # Definitions for generating versioninfo resources
--- 27,33 ----
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
!         $(CODESIGN_USERLAND)
  
  ############################################################################
  # Definitions for generating versioninfo resources
Index: openafs/src/kauth/NTMakefile
diff -c openafs/src/kauth/NTMakefile:1.11.4.2 openafs/src/kauth/NTMakefile:1.11.4.4
*** openafs/src/kauth/NTMakefile:1.11.4.2	Sat Feb  2 08:43:25 2008
--- openafs/src/kauth/NTMakefile	Wed Jul  2 08:49:16 2008
***************
*** 98,104 ****
  	$(DESTDIR)\lib\afsubik.lib \
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afsrxkad.lib \
! 	$(DESTDIR)\lib\cm_dns.obj
  	
  TOKENLIB = $(DESTDIR)\lib\afs\afspioctl.lib
  
--- 98,105 ----
  	$(DESTDIR)\lib\afsubik.lib \
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afsrxkad.lib \
! 	$(DESTDIR)\lib\cm_dns.obj \
!         $(DESTDIR)\lib\cm_nls.obj
  	
  TOKENLIB = $(DESTDIR)\lib\afs\afspioctl.lib
  
***************
*** 128,133 ****
--- 129,135 ----
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  #build $(OUT)\kadatabase.obj
  
***************
*** 153,158 ****
--- 155,161 ----
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  ########### Misc Exes #######################################################
  #kpasswd.exe
***************
*** 167,187 ****
--- 170,194 ----
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  #kpwvalid.exe
  $(OUT)\kpwvalid.exe: $(OUT)\kpwvalid.obj $(AFSLIBS) $(KAUTH_LIBFILE)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  #kdb.exe - Not implemented for NT - because dbm not available on NT
  #kdb.exe: $(OUT)\kdb.obj $(AFSLIBS) $(KAUTH_LIBFILE) 
  #	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
  #       $(_VC_MANIFEST_EMBED_EXE)
+ #        $(CODESIGN_USERLAND)
  
  #rebuild.exe 
  $(OUT)\rebuild.exe: $(OUT)\rebuild.obj $(OUT)\kautils.obj $(AFSLIBS) 
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # Definitions for generating versioninfo resources
Index: openafs/src/kauth/test/NTMakefile
diff -c openafs/src/kauth/test/NTMakefile:1.5 openafs/src/kauth/test/NTMakefile:1.5.4.1
*** openafs/src/kauth/test/NTMakefile:1.5	Sun Nov 20 20:56:53 2005
--- openafs/src/kauth/test/NTMakefile	Wed Jul  2 08:49:16 2008
***************
*** 25,58 ****
--- 25,66 ----
  $(OUT)\multiklog.exe: $(OUT)\multiklog.obj
  	$(EXECONLINK) $(EXELIBS)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\test_date.exe: $(OUT)\test_date.obj
  	$(EXECONLINK) $(EXELIBS)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\test_badtix.exe: $(OUT)\test_badtix.obj
  	$(EXECONLINK) $(EXELIBS)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\decode_ticket.exe: $(OUT)\decode_ticket.obj
  	$(EXECONLINK) $(EXELIBS)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\test_interim_ktc.exe: $(OUT)\test_interim_ktc.obj
  	$(EXECONLINK) $(EXELIBS)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\test_rxkad_free: test_rxkad_free.o 
  	$(EXECONLINK) $(EXELIBS)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\test_getticket.exe: $(OUT)\test_getticket.obj
  	$(EXECONLINK) $(EXELIBS)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\background.exe: $(OUT)\background.obj
  	$(EXECONLINK) $(EXELIBS)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  
  test tests all: $(OUT)\multiklog.exe $(OUT)\test_date.exe $(OUT)\test_badtix.exe $(OUT)\decode_ticket.exe \
Index: openafs/src/libadmin/adminutil/NTMakefile
diff -c openafs/src/libadmin/adminutil/NTMakefile:1.8.4.1 openafs/src/libadmin/adminutil/NTMakefile:1.8.4.2
*** openafs/src/libadmin/adminutil/NTMakefile:1.8.4.1	Sat Feb  2 08:43:25 2008
--- openafs/src/libadmin/adminutil/NTMakefile	Wed Jul  2 08:49:17 2008
***************
*** 146,151 ****
--- 146,152 ----
  	$(DLLCONLINK) /DEF:afsadminutil.def shell32.lib
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  	$(COPY) $*.lib $(ILIBDIR)
  	$(DEL) $*.lib $*.exp
  
Index: openafs/src/libadmin/bos/NTMakefile
diff -c openafs/src/libadmin/bos/NTMakefile:1.6 openafs/src/libadmin/bos/NTMakefile:1.6.4.1
*** openafs/src/libadmin/bos/NTMakefile:1.6	Sun Nov 20 20:56:56 2005
--- openafs/src/libadmin/bos/NTMakefile	Wed Jul  2 08:49:17 2008
***************
*** 45,50 ****
--- 45,51 ----
  	$(DLLCONLINK) /DEF:bosadmin.def
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  	$(COPY) $*.lib $(ILIBDIR)
  	$(DEL) $*.lib $*.exp
  
Index: openafs/src/libadmin/cfg/NTMakefile
diff -c openafs/src/libadmin/cfg/NTMakefile:1.6.4.2 openafs/src/libadmin/cfg/NTMakefile:1.6.4.3
*** openafs/src/libadmin/cfg/NTMakefile:1.6.4.2	Sat Feb  2 08:43:25 2008
--- openafs/src/libadmin/cfg/NTMakefile	Wed Jul  2 08:49:17 2008
***************
*** 62,67 ****
--- 62,68 ----
  	$(DLLCONLINK) /DEF:afscfgadmin.def shell32.lib
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  	$(COPY) $*.lib $(ILIBDIR)
  	$(DEL) $*.lib $*.exp
  
Index: openafs/src/libadmin/cfg/test/NTMakefile
diff -c openafs/src/libadmin/cfg/test/NTMakefile:1.6 openafs/src/libadmin/cfg/test/NTMakefile:1.6.4.1
*** openafs/src/libadmin/cfg/test/NTMakefile:1.6	Sun Nov 20 20:56:59 2005
--- openafs/src/libadmin/cfg/test/NTMakefile	Wed Jul  2 08:49:17 2008
***************
*** 23,28 ****
--- 23,29 ----
  $(OUT)\cfgtest.exe: $(OUT)\cfgtest.obj $(CFGTEST_EXELIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  mkdir:
  	
Index: openafs/src/libadmin/client/NTMakefile
diff -c openafs/src/libadmin/client/NTMakefile:1.7 openafs/src/libadmin/client/NTMakefile:1.7.4.1
*** openafs/src/libadmin/client/NTMakefile:1.7	Sun Nov 20 20:57:00 2005
--- openafs/src/libadmin/client/NTMakefile	Wed Jul  2 08:49:18 2008
***************
*** 33,38 ****
--- 33,39 ----
  	$(DLLCONLINK) /DEF:clientadmin.def
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  	$(COPY) $*.lib $(ILIBDIR)
  	$(DEL) $*.lib $*.exp
  
Index: openafs/src/libadmin/kas/NTMakefile
diff -c openafs/src/libadmin/kas/NTMakefile:1.6.4.1 openafs/src/libadmin/kas/NTMakefile:1.6.4.2
*** openafs/src/libadmin/kas/NTMakefile:1.6.4.1	Tue Jul  4 02:28:24 2006
--- openafs/src/libadmin/kas/NTMakefile	Wed Jul  2 08:49:19 2008
***************
*** 42,47 ****
--- 42,48 ----
  	$(DLLCONLINK) /DEF:kasadmin.def
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  	$(COPY) $*.lib $(ILIBDIR)
  	$(DEL) $*.lib $*.exp
  
Index: openafs/src/libadmin/pts/NTMakefile
diff -c openafs/src/libadmin/pts/NTMakefile:1.6.4.1 openafs/src/libadmin/pts/NTMakefile:1.6.4.2
*** openafs/src/libadmin/pts/NTMakefile:1.6.4.1	Tue Jul  4 02:28:24 2006
--- openafs/src/libadmin/pts/NTMakefile	Wed Jul  2 08:49:20 2008
***************
*** 45,50 ****
--- 45,51 ----
  	$(DLLCONLINK) /DEF:ptsadmin.def
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  	$(COPY) $*.lib $(ILIBDIR)
  	$(DEL) $*.lib $*.exp
  
Index: openafs/src/libadmin/test/NTMakefile
diff -c openafs/src/libadmin/test/NTMakefile:1.7 openafs/src/libadmin/test/NTMakefile:1.7.4.1
*** openafs/src/libadmin/test/NTMakefile:1.7	Sun Nov 20 20:57:04 2005
--- openafs/src/libadmin/test/NTMakefile	Wed Jul  2 08:49:20 2008
***************
*** 36,41 ****
--- 36,42 ----
  $(OUT)\afscp.exe: $(OUT)\afscp.obj $(AFSCP_EXEOBJS) $(AFSCP_EXELIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  mkdir:
  	
Index: openafs/src/libadmin/vos/NTMakefile
diff -c openafs/src/libadmin/vos/NTMakefile:1.6.4.1 openafs/src/libadmin/vos/NTMakefile:1.6.4.2
*** openafs/src/libadmin/vos/NTMakefile:1.6.4.1	Tue Jul  4 02:28:24 2006
--- openafs/src/libadmin/vos/NTMakefile	Wed Jul  2 08:49:21 2008
***************
*** 66,77 ****
  	$(DLLCONLINK) /DEF:vosadmin.def
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
  	$(COPY) $*.lib $(ILIBDIR)
  	$(DEL) $*.lib $*.exp
  
- 
- 
- 
  install: $(DLLFILE) $(LIBINCLUDES)
  
  $(RXOBJS): $(RX)\$$(@B).c
--- 66,75 ----
  	$(DLLCONLINK) /DEF:vosadmin.def
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  	$(COPY) $*.lib $(ILIBDIR)
  	$(DEL) $*.lib $*.exp
  
  install: $(DLLFILE) $(LIBINCLUDES)
  
  $(RXOBJS): $(RX)\$$(@B).c
Index: openafs/src/libafs/Makefile.common.in
diff -c openafs/src/libafs/Makefile.common.in:1.24.2.5.2.1 openafs/src/libafs/Makefile.common.in:1.24.2.7
*** openafs/src/libafs/Makefile.common.in:1.24.2.5.2.1	Fri May 23 10:25:35 2008
--- openafs/src/libafs/Makefile.common.in	Mon Jun 30 23:35:24 2008
***************
*** 126,131 ****
--- 126,132 ----
  	afs_vnop_symlink.o \
  	afs_vnop_write.o \
  	afs_volume.o \
+ 	afs_warn.o \
  	afsaux.o		\
  	Kvice.xdr.o	\
  	xdr_arrayn.o	\
***************
*** 194,199 ****
--- 195,201 ----
  	afs_pag_user.o \
  	afs_stat.o \
  	afs_syscall.o \
+ 	afs_warn.o \
  	afsaux.o		\
  	xdr_arrayn.o	\
  	xdr_array.o	\
***************
*** 282,287 ****
--- 284,291 ----
  	$(CRULE_OPT)
  afs_util.o: $(TOP_SRC_AFS)/afs_util.c
  	$(CRULE_OPT)
+ afs_warn.o: $(TOP_SRC_AFS)/afs_warn.c
+ 	$(CRULE_OPT)
  afs_vcache.o: $(TOP_SRC_AFS)/afs_vcache.c
  	$(CRULE_OPT)
  afs_vnop_access.o: $(TOP_SRC_VNOPS)/afs_vnop_access.c
Index: openafs/src/libafs/MakefileProto.LINUX.in
diff -c openafs/src/libafs/MakefileProto.LINUX.in:1.54.4.4 openafs/src/libafs/MakefileProto.LINUX.in:1.54.4.5
*** openafs/src/libafs/MakefileProto.LINUX.in:1.54.4.4	Tue Feb 19 10:07:36 2008
--- openafs/src/libafs/MakefileProto.LINUX.in	Tue Jul  1 18:51:54 2008
***************
*** 209,214 ****
--- 209,217 ----
  <ia64_linux24 ia64_linux26>
  	ln -fs ${LINUX_KERNEL_PATH}/include/asm-ia64 asm
  <all>
+ 	if [ "${LINUX_KERNEL_PACKAGING}" ] ; then \
+ 	    TARGPREFIX="pack_"; \
+ 	fi ; \
  	for m in ${MPS} ; do \
  		KDIR=${KOBJ}-${LINUX_VERSION}${LINUX_MODULE_NAME}-$$m ; \
  		echo Building in directory: $${KDIR} ; \
***************
*** 226,232 ****
  			TARG=libafs ; \
  		fi ; \
  		cd $${KDIR} ; \
! 		$(MAKE) -f Makefile.afs SMP_DEF="$${SMP_DEF}" $@_$${TARG} CLIENT=${LINUX_VERSION}${LINUX_MODULE_NAME} KDIR=$${KDIR} || exit $$?; \
  		cd ../ ; \
  <all>
  	done
--- 229,235 ----
  			TARG=libafs ; \
  		fi ; \
  		cd $${KDIR} ; \
! 		$(MAKE) -f Makefile.afs SMP_DEF="$${SMP_DEF}" $@_$${TARGPREFIX}$${TARG} CLIENT=${LINUX_VERSION}${LINUX_MODULE_NAME} KDIR=$${KDIR} || exit $$?; \
  		cd ../ ; \
  <all>
  	done
***************
*** 244,256 ****
  linux_destdirs_libafs.ep: dest_libafs.ep
  linux_destdirs_libafs.bm: dest_libafs.bm
  
  
  # Below this line are targets when in the COMMON directory:
  # For Linux there is no kernel NFS server.
! LIBAFS = libafs-${CLIENT}.${LINUX_MODULE_EXT}
! LIBAFS_MP = libafs-${CLIENT}.mp.${LINUX_MODULE_EXT}
! LIBAFS_EP = libafs-${CLIENT}.ep.${LINUX_MODULE_EXT}
! LIBAFS_BM = libafs-${CLIENT}.bm.${LINUX_MODULE_EXT}
  
  INST_LIBAFS = ${DESTDIR}${afskerneldir}/${LIBAFS}
  INST_LIBAFS_MP = ${DESTDIR}${afskerneldir}/${LIBAFS_MP}
--- 247,262 ----
  linux_destdirs_libafs.ep: dest_libafs.ep
  linux_destdirs_libafs.bm: dest_libafs.bm
  
+ linux_compdirs_pack_libafs: depsrcs pack_libafs
+ linux_instdirs_pack_libafs: install_pack_libafs
+ linux_destdirs_pack_libafs: dest_pack_libafs
  
  # Below this line are targets when in the COMMON directory:
  # For Linux there is no kernel NFS server.
! LIBAFS = ${LINUX_LIBAFS_NAME}-${CLIENT}.${LINUX_MODULE_EXT}
! LIBAFS_MP = ${LINUX_LIBAFS_NAME}-${CLIENT}.mp.${LINUX_MODULE_EXT}
! LIBAFS_EP = ${LINUX_LIBAFS_NAME}-${CLIENT}.ep.${LINUX_MODULE_EXT}
! LIBAFS_BM = ${LINUX_LIBAFS_NAME}-${CLIENT}.bm.${LINUX_MODULE_EXT}
  
  INST_LIBAFS = ${DESTDIR}${afskerneldir}/${LIBAFS}
  INST_LIBAFS_MP = ${DESTDIR}${afskerneldir}/${LIBAFS_MP}
***************
*** 262,267 ****
--- 268,277 ----
  DEST_LIBAFS_EP = ${DEST}/root.client/usr/vice/etc/modload/${LIBAFS_EP}
  DEST_LIBAFS_BM = ${DEST}/root.client/usr/vice/etc/modload/${LIBAFS_BM}
  
+ SYSTEM_LIBAFS = /lib/modules/${CLIENT}/extra/${LINUX_LIBAFS_NAME}/${LINUX_LIBAFS_NAME}.ko
+ 
+ INST_SYSTEM = ${DESTDIR}${SYSTEM_LIBAFS}
+ DEST_SYSTEM = ${DEST}/root.client${SYSTEM_LIBAFS}
  
  libafs:	$(LIBAFS) 
  	echo SP Build Complete
***************
*** 276,287 ****
  	echo BM Build Complete
  
  <linux26 linux_26 umlinux26>
! ${LIBAFS} ${LIBAFS_MP} ${LIBAFS_EP} ${LIBAFS_BM}: libafs.ko
! 	cp libafs.ko $@
  
  .FORCE:
! libafs.ko afspag.ko: .FORCE
! 	env EXTRA_CFLAGS="${EXTRA_CFLAGS}" @TOP_SRCDIR@/libafs/make_kbuild_makefile.pl ${KDIR} @TOP_OBJDIR@/src/config/Makefile.config Makefile.afs Makefile.common
  	env EXTRA_CFLAGS="${EXTRA_CFLAGS}" $(MAKE) -C ${LINUX_KERNEL_PATH} M=@TOP_OBJDIR@/src/libafs/${KDIR} modules
          
  <all -linux26 -linux_26 -umlinux26>
--- 286,300 ----
  	echo BM Build Complete
  
  <linux26 linux_26 umlinux26>
! pack_libafs: ${LINUX_LIBAFS_NAME}.ko
! 	echo "Packaging Friendly Build Complete"
! 
! ${LIBAFS} ${LIBAFS_MP} ${LIBAFS_EP} ${LIBAFS_BM}: ${LINUX_LIBAFS_NAME}.ko
! 	cp ${LINUX_LIBAFS_NAME}.ko $@
  
  .FORCE:
! ${LINUX_LIBAFS_NAME}.ko afspag.ko: .FORCE
! 	env EXTRA_CFLAGS="${EXTRA_CFLAGS}" @TOP_SRCDIR@/libafs/make_kbuild_makefile.pl ${KDIR} $@ @TOP_OBJDIR@/src/config/Makefile.config Makefile.afs Makefile.common
  	env EXTRA_CFLAGS="${EXTRA_CFLAGS}" $(MAKE) -C ${LINUX_KERNEL_PATH} M=@TOP_OBJDIR@/src/libafs/${KDIR} modules
          
  <all -linux26 -linux_26 -umlinux26>
***************
*** 314,319 ****
--- 327,335 ----
  install_libafs.bm: $(INST_LIBAFS_BM)
  	echo BM Install Complete
  
+ install_pack_libafs: $(INST_SYSTEM)
+ 	echo Packinging Friendly Install Complete
+ 
  dest_libafs:	$(DEST_LIBAFS) 
  	echo SP Install Complete
  
***************
*** 326,331 ****
--- 342,350 ----
  dest_libafs.bm: $(DEST_LIBAFS_BM)
  	echo BM Install Complete
  
+ dest_pack_libafs: $(DEST_SYSTEM)
+ 	echo Packaging Friendly Install Complete
+ 
  $(INST_LIBAFS): $(LIBAFS)
  	${INSTALL} -f $? $@
  
***************
*** 338,343 ****
--- 357,365 ----
  $(INST_LIBAFS_BM): $(LIBAFS_BM)
  	${INSTALL} -f $? $@
  
+ $(INST_SYSTEM) $(DEST_SYSTEM): $(LINUX_LIBAFS_NAME).ko
+ 	${INSTALL} -f $? $@
+ 
  $(DEST_LIBAFS): $(LIBAFS)
  	${INSTALL} -f $? $@
  
Index: openafs/src/libafs/make_kbuild_makefile.pl
diff -c openafs/src/libafs/make_kbuild_makefile.pl:1.2.6.4 openafs/src/libafs/make_kbuild_makefile.pl:1.2.6.5
*** openafs/src/libafs/make_kbuild_makefile.pl:1.2.6.4	Mon Jun  4 23:54:29 2007
--- openafs/src/libafs/make_kbuild_makefile.pl	Tue Jul  1 18:51:54 2008
***************
*** 2,11 ****
  # make_kbuild_makefile.pl
  # Generate a Makefile for use with the Linux 2.6+ kernel build system
  #
! # Usage: make_kbuild_makefile.pl ${KDIR} Makefiles...
  #
  # The specified makefiles will be scanned for variable values
! # The libafs.ko module will be built in ${TOP_SRCDIR}/src/libafs/${KDIR}.
  # It will include objects listed in ${AFSAOBJS} and ${AFSNFSOBJS}
  # The afspag.ko module will be built from objects listed in ${AFSPAGOBJS}.
  # Appropriate source files for each object will be symlinked into ${KDIR}
--- 2,11 ----
  # make_kbuild_makefile.pl
  # Generate a Makefile for use with the Linux 2.6+ kernel build system
  #
! # Usage: make_kbuild_makefile.pl ${KDIR} ${TARG} Makefiles...
  #
  # The specified makefiles will be scanned for variable values
! # The module ${TARG} will be built in ${TOP_SRCDIR}/src/libafs/${KDIR}.
  # It will include objects listed in ${AFSAOBJS} and ${AFSNFSOBJS}
  # The afspag.ko module will be built from objects listed in ${AFSPAGOBJS}.
  # Appropriate source files for each object will be symlinked into ${KDIR}
***************
*** 17,27 ****
  use IO::File;
  
  
! if (@ARGV < 2) {
!   die "Usage: $0 KDIR Makefiles...\n";
  }
  
! ($KDIR, @Makefiles) = @ARGV;
  
  ## Read in all of the Makefiles given on the command line
  ## Our ultimate goal is to find the correct source file for each object.
--- 17,28 ----
  use IO::File;
  
  
! if (@ARGV < 3) {
!   die "Usage: $0 KDIR TARG Makefiles...\n";
  }
  
! ($KDIR, $TARG, @Makefiles) = @ARGV;
! $TARG =~ s/\.k?o$//;
  
  ## Read in all of the Makefiles given on the command line
  ## Our ultimate goal is to find the correct source file for each object.
***************
*** 111,118 ****
    print $F "$_ = $vars{$_}\n";
  }
  print $F "EXTRA_CFLAGS=$cflags\n";
! print $F "obj-m := libafs.o afspag.o\n";
! print $F "libafs-objs := ", join("\\\n $_", @libafs_objs), "\n";
  print $F "afspag-objs := ", join("\\\n $_", @afspag_objs), "\n";
  print $F "\n$MakefileVersion\n";
  $F->close() or die "$KDIR/Makefile: $!\n";
--- 112,119 ----
    print $F "$_ = $vars{$_}\n";
  }
  print $F "EXTRA_CFLAGS=$cflags\n";
! print $F "obj-m := $TARG.o afspag.o\n";
! print $F "$TARG-objs := ", join("\\\n $_", @libafs_objs), "\n";
  print $F "afspag-objs := ", join("\\\n $_", @afspag_objs), "\n";
  print $F "\n$MakefileVersion\n";
  $F->close() or die "$KDIR/Makefile: $!\n";
Index: openafs/src/libafsauthent/NTMakefile
diff -c openafs/src/libafsauthent/NTMakefile:1.15.4.1 openafs/src/libafsauthent/NTMakefile:1.15.4.3
*** openafs/src/libafsauthent/NTMakefile:1.15.4.1	Sat Feb  2 08:43:25 2008
--- openafs/src/libafsauthent/NTMakefile	Wed Jul  2 08:49:22 2008
***************
*** 96,101 ****
--- 96,102 ----
  	$(WINNTAFSDOBJS) \
  	$(AUDITBJS) \
  	$(DESTDIR)\lib\cm_dns.obj \
+         $(DESTDIR)\lib\cm_nls.obj \
  	$(OUT)\afsauthent.res
  
  $(RXOBJS): $(RX)\$$(@B).c
***************
*** 147,152 ****
--- 148,154 ----
  	$(DLLCONLINK) /DEF:afsauthent.def rpcrt4.lib dnsapi.lib mpr.lib secur32.lib shell32.lib
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  
  # Definitions for generating versioninfo resources
  $(OUT)\afsauthent.res: AFS_component_version_number.h
Index: openafs/src/libafsauthent/afsauthent.def
diff -c openafs/src/libafsauthent/afsauthent.def:1.5.2.3 openafs/src/libafsauthent/afsauthent.def:1.5.2.4
*** openafs/src/libafsauthent/afsauthent.def:1.5.2.3	Thu Jan 24 11:08:11 2008
--- openafs/src/libafsauthent/afsauthent.def	Fri May  9 11:10:14 2008
***************
*** 115,117 ****
--- 115,118 ----
  	VOTE_GetSyncSite				@113
  	ubik_RefreshConn				@114
          rx_SetSecurityConfiguration                     @115
+         pioctl_utf8                                     @116
Index: openafs/src/libafsrpc/Makefile.in
diff -c openafs/src/libafsrpc/Makefile.in:1.36.4.3 openafs/src/libafsrpc/Makefile.in:1.36.4.5
*** openafs/src/libafsrpc/Makefile.in:1.36.4.3	Wed Apr  2 15:51:56 2008
--- openafs/src/libafsrpc/Makefile.in	Tue Jul  1 14:15:14 2008
***************
*** 273,279 ****
  #
  #   $ what /opt/langtools/bin/pxdb32
  #   /opt/langtools/bin/pxdb32:
! #           HP92453-02 A.10.0A HP-UX SYMBOLIC DEBUGGER (PXDB) $Revision: 1.36.4.3 $
  #
  # The problem occurs when -g and -O are both used when compiling des.c.
  # The simplest way to work around the problem is to leave out either -g or -O.
--- 273,279 ----
  #
  #   $ what /opt/langtools/bin/pxdb32
  #   /opt/langtools/bin/pxdb32:
! #           HP92453-02 A.10.0A HP-UX SYMBOLIC DEBUGGER (PXDB) $Revision: 1.36.4.5 $
  #
  # The problem occurs when -g and -O are both used when compiling des.c.
  # The simplest way to work around the problem is to leave out either -g or -O.
***************
*** 358,364 ****
  syscall.o: ${SYS}/syscall.s
  	case "$(SYS_NAME)" in \
  	     sun4x_5* | sunx86_5*) \
! 		$(CPP)  ${SFLAGS} ${SYS}/syscall.s syscall.ss; \
  		as -o syscall.o syscall.ss;		\
  		$(RM) syscall.ss;;				\
  	 sgi_* | *_darwin_* ) \
--- 358,364 ----
  syscall.o: ${SYS}/syscall.s
  	case "$(SYS_NAME)" in \
  	     sun4x_5* | sunx86_5*) \
! 		$(PATH_CPP)  ${SFLAGS} ${SYS}/syscall.s > syscall.ss; \
  		as -o syscall.o syscall.ss;		\
  		$(RM) syscall.ss;;				\
  	 sgi_* | *_darwin_* ) \
***************
*** 370,376 ****
  	 *bsd* ) \
  		touch syscall.o ;; \
  	 *) \
! 		$(CPP)  ${SFLAGS} ${SYS}/syscall.s syscall.ss; \
  		as -o syscall.o syscall.ss;		\
  		$(RM) syscall.ss;;				\
  	esac
--- 370,376 ----
  	 *bsd* ) \
  		touch syscall.o ;; \
  	 *) \
! 		$(PATH_CPP) ${SFLAGS} ${SYS}/syscall.s > syscall.ss; \
  		as -o syscall.o syscall.ss;		\
  		$(RM) syscall.ss;;				\
  	esac
Index: openafs/src/libafsrpc/NTMakefile
diff -c openafs/src/libafsrpc/NTMakefile:1.11.4.2 openafs/src/libafsrpc/NTMakefile:1.11.4.3
*** openafs/src/libafsrpc/NTMakefile:1.11.4.2	Thu Aug  2 01:21:36 2007
--- openafs/src/libafsrpc/NTMakefile	Wed Jul  2 08:49:22 2008
***************
*** 98,103 ****
--- 98,104 ----
  	$(DLLCONLINK) /DEF:afsrpc.def iphlpapi.lib
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  
  # Definitions for generating versioninfo resources
  $(OUT)\afsrpc.res: AFS_component_version_number.h
Index: openafs/src/libuafs/Makefile.common.in
diff -c openafs/src/libuafs/Makefile.common.in:1.13.4.5.2.1 openafs/src/libuafs/Makefile.common.in:1.13.4.7
*** openafs/src/libuafs/Makefile.common.in:1.13.4.5.2.1	Fri May 23 10:25:36 2008
--- openafs/src/libuafs/Makefile.common.in	Tue Jul  1 13:45:13 2008
***************
*** 115,120 ****
--- 115,121 ----
  	$(UOBJ)/afs_user.o \
  	$(UOBJ)/afs_util.o \
  	$(UOBJ)/afs_vcache.o \
+ 	$(UOBJ)/afs_warn.o \
  	$(UOBJ)/afs_osi_uio.o \
  	$(UOBJ)/afs_vnop_access.o \
  	$(UOBJ)/afs_vnop_attrs.o \
***************
*** 241,246 ****
--- 242,248 ----
  	$(WEBOBJ)/afs_user.o \
  	$(WEBOBJ)/afs_util.o \
  	$(WEBOBJ)/afs_vcache.o \
+ 	$(WEBOBJ)/afs_warn.o \
  	$(WEBOBJ)/afs_osi_uio.o \
  	$(WEBOBJ)/afs_vnop_access.o \
  	$(WEBOBJ)/afs_vnop_attrs.o \
***************
*** 368,373 ****
--- 370,376 ----
  	$(WEBOBJ)/afs_user.o \
  	$(WEBOBJ)/afs_util.o \
  	$(WEBOBJ)/afs_vcache.o \
+ 	$(WEBOBJ)/afs_warn.o \
  	$(WEBOBJ)/afs_osi_uio.o \
  	$(WEBOBJ)/afs_vnop_access.o \
  	$(WEBOBJ)/afs_vnop_attrs.o \
***************
*** 490,495 ****
--- 493,499 ----
  	$(JUAFS)/afs_user.o \
  	$(JUAFS)/afs_util.o \
  	$(JUAFS)/afs_vcache.o \
+ 	$(JUAFS)/afs_warn.o \
  	$(JUAFS)/afs_osi_uio.o \
  	$(JUAFS)/afs_vnop_access.o \
  	$(JUAFS)/afs_vnop_attrs.o \
***************
*** 628,633 ****
--- 632,639 ----
  	$(CRULE1)
  $(UOBJ)/afs_vcache.o: $(TOP_SRC_AFS)/afs_vcache.c
  	$(CRULE1)
+ $(UOBJ)/afs_warn.o: $(TOP_SRC_AFS)/afs_warn.c
+ 	$(CRULE1)
  $(UOBJ)/afs_osi_uio.o: $(TOP_SRC_AFS)/afs_osi_uio.c
  	$(CRULE1)
  $(UOBJ)/afs_vnop_access.o: $(TOP_SRC_VNOPS)/afs_vnop_access.c
***************
*** 887,892 ****
--- 893,900 ----
  	$(CRULE2)
  $(WEBOBJ)/afs_vcache.o: $(TOP_SRC_AFS)/afs_vcache.c
  	$(CRULE2)
+ $(WEBOBJ)/afs_warn.o: $(TOP_SRC_AFS)/afs_warn.c
+ 	$(CRULE2)
  $(WEBOBJ)/afs_osi_uio.o: $(TOP_SRC_AFS)/afs_osi_uio.c
  	$(CRULE2)
  $(WEBOBJ)/afs_vnop_access.o: $(TOP_SRC_VNOPS)/afs_vnop_access.c
***************
*** 1150,1155 ****
--- 1158,1165 ----
  	$(CRULE1)
  $(JUAFS)/afs_vcache.o: $(TOP_SRC_AFS)/afs_vcache.c
  	$(CRULE1)
+ $(JUAFS)/afs_warn.o: $(TOP_SRC_AFS)/afs_warn.c
+ 	$(CRULE1)
  $(JUAFS)/afs_osi_uio.o: $(TOP_SRC_AFS)/afs_osi_uio.c
  	$(CRULE1)
  $(JUAFS)/afs_vnop_access.o: $(TOP_SRC_VNOPS)/afs_vnop_access.c
Index: openafs/src/lwp/Makefile.in
diff -c openafs/src/lwp/Makefile.in:1.35.2.2 openafs/src/lwp/Makefile.in:1.35.2.3
*** openafs/src/lwp/Makefile.in:1.35.2.2	Wed Feb 27 17:31:11 2008
--- openafs/src/lwp/Makefile.in	Tue Jul  1 14:15:15 2008
***************
*** 37,43 ****
  	pmax_he1) \
  		$(CCOBJ) ${LWP_DBG} ${LWP_OPTMZ} -c -I${TOP_INCDIR} process.s;; \
  	sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53  | sun4_53 | sun4_52 | sun4_54 | sun4c_54 | sun4m_54 | sun4x_5* | arm_linux* ) \
! 		$(CPP) -P -I${TOP_INCDIR} ${srcdir}/process.s process.ss; \
  		${AS} process.ss -o process.o; \
  			$(RM) process.ss ;; \
  	sgi_5* ) \
--- 37,43 ----
  	pmax_he1) \
  		$(CCOBJ) ${LWP_DBG} ${LWP_OPTMZ} -c -I${TOP_INCDIR} process.s;; \
  	sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53  | sun4_53 | sun4_52 | sun4_54 | sun4c_54 | sun4m_54 | sun4x_5* | arm_linux* ) \
! 		$(PATH_CPP) -P -I${TOP_INCDIR} ${srcdir}/process.s > process.ss; \
  		${AS} process.ss -o process.o; \
  			$(RM) process.ss ;; \
  	sgi_5* ) \
***************
*** 45,55 ****
  	sgi_61 | sgi_62 | sgi_63 ) \
  		$(CCOBJ) ${LWP_DBG} ${LWP_OPTMZ} -c ${XCFLAGS} ${ARCHFLAGS} -I${TOP_INCDIR} -KPIC -G0  ${srcdir}/process.s;; \
  	s390_*) \
! 		$(CPP) -P -I${TOP_INCDIR} ${srcdir}/process.s390.s >process.ss; \
  		${AS} -ahlns process.ss -o process.o >process.lst; \
  		$(RM) process.ss ;; \
  	s390x_*) \
! 		$(CPP) -P -I${TOP_INCDIR} ${srcdir}/process.s390x.s >process.ss; \
  		${AS} -ahlns process.ss -o process.o >process.lst; \
  		$(RM) process.ss ;; \
  	*_darwin* ) \
--- 45,55 ----
  	sgi_61 | sgi_62 | sgi_63 ) \
  		$(CCOBJ) ${LWP_DBG} ${LWP_OPTMZ} -c ${XCFLAGS} ${ARCHFLAGS} -I${TOP_INCDIR} -KPIC -G0  ${srcdir}/process.s;; \
  	s390_*) \
! 		$(PATH_CPP) -P -I${TOP_INCDIR} ${srcdir}/process.s390.s >process.ss; \
  		${AS} -ahlns process.ss -o process.o >process.lst; \
  		$(RM) process.ss ;; \
  	s390x_*) \
! 		$(PATH_CPP) -P -I${TOP_INCDIR} ${srcdir}/process.s390x.s >process.ss; \
  		${AS} -ahlns process.ss -o process.o >process.lst; \
  		$(RM) process.ss ;; \
  	*_darwin* ) \
***************
*** 88,98 ****
  		${AS} process.ss -o process.o ;  \
  		$(RM) -f process.S ;;\
  	ncrx86_* | sunx86_*) \
! 		$(CPP) -P -D__sun -D__i386 -DIGNORE_STDS_H -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s process.ss; \
  		${AS} -o process.o process.ss; \
  		$(RM) process.ss ;; \
  	alpha_nbsd* ) \
! 		$(CPP) -DASSEMBLER -P -I${TOP_INCDIR} ${srcdir}/process.s > process.ss; \
  		${AS} -o process.o process.ss; \
  		$(RM) process.ss ;; \
  	hp* | *_linux* | *_umlinux* | sgi_64 | sgi_65 ) \
--- 88,98 ----
  		${AS} process.ss -o process.o ;  \
  		$(RM) -f process.S ;;\
  	ncrx86_* | sunx86_*) \
! 		$(PATH_CPP) -P -D__sun -D__i386 -DIGNORE_STDS_H -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s > process.ss; \
  		${AS} -o process.o process.ss; \
  		$(RM) process.ss ;; \
  	alpha_nbsd* ) \
! 		$(PATH_CPP) -DASSEMBLER -P -I${TOP_INCDIR} ${srcdir}/process.s > process.ss; \
  		${AS} -o process.o process.ss; \
  		$(RM) process.ss ;; \
  	hp* | *_linux* | *_umlinux* | sgi_64 | sgi_65 ) \
***************
*** 103,113 ****
  	ia64_hpux11* | hp_ux11* ) \
  		${CC} ${CFLAGS} -c ${srcdir}/process.c;; \
  	i386_*) \
! 		$(CPP) -P -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s process.ss; \
  		${AS} process.ss -o process.o; \
  		$(RM) process.ss ;; \
  	*) \
! 		$(CPP) -P -I${TOP_INCDIR} ${srcdir}/process.s process.ss; \
  		${AS} process.ss -o process.o; \
  		$(RM) process.ss ;; \
  	esac
--- 103,113 ----
  	ia64_hpux11* | hp_ux11* ) \
  		${CC} ${CFLAGS} -c ${srcdir}/process.c;; \
  	i386_*) \
! 		$(PATH_CPP) -P -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s > process.ss; \
  		${AS} process.ss -o process.o; \
  		$(RM) process.ss ;; \
  	*) \
! 		$(PATH_CPP) -P -I${TOP_INCDIR} ${srcdir}/process.s > process.ss; \
  		${AS} process.ss -o process.o; \
  		$(RM) process.ss ;; \
  	esac
Index: openafs/src/lwp/NTMakefile
diff -c openafs/src/lwp/NTMakefile:1.7.4.1 openafs/src/lwp/NTMakefile:1.7.4.2
*** openafs/src/lwp/NTMakefile:1.7.4.1	Tue Mar 11 13:02:07 2008
--- openafs/src/lwp/NTMakefile	Wed Jul  2 08:49:22 2008
***************
*** 45,50 ****
--- 45,51 ----
  $(OUT)\rw.exe: $(OUT)\rw.obj $(LIBFILE) $(DESTDIR)\lib\afs\afsutil.lib
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  clean::
  	$(DEL) $(LIBFILE)
Index: openafs/src/lwp/test/NTMakefile
diff -c openafs/src/lwp/test/NTMakefile:1.5 openafs/src/lwp/test/NTMakefile:1.5.4.1
*** openafs/src/lwp/test/NTMakefile:1.5	Sun Nov 20 20:57:13 2005
--- openafs/src/lwp/test/NTMakefile	Wed Jul  2 08:49:23 2008
***************
*** 18,24 ****
  $(OUT)\testkey.exe: $(OUT)\test_key.obj $(LIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
! 
  
  # test targets
  test testkey: $(TESTKEY)
--- 18,24 ----
  $(OUT)\testkey.exe: $(OUT)\test_key.obj $(LIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
!         $(CODESIGN_USERLAND)
  
  # test targets
  test testkey: $(TESTKEY)
Index: openafs/src/packaging/RedHat/makesrpm.pl
diff -c openafs/src/packaging/RedHat/makesrpm.pl:1.1.2.4 openafs/src/packaging/RedHat/makesrpm.pl:1.1.2.5
*** openafs/src/packaging/RedHat/makesrpm.pl:1.1.2.4	Tue Apr  8 14:36:13 2008
--- openafs/src/packaging/RedHat/makesrpm.pl	Tue Jul  1 15:41:25 2008
***************
*** 29,36 ****
  
  my $tmpdir = File::Temp::tempdir(CLEANUP => 1);
  
! system("tar -C $tmpdir -xvjf $srcball \*/configure.in ".
!        "\*/src/packaging/RedHat > /dev/null")==0
    or die "Unable to unpack src tar ball\n";
  
  my $dirh = IO::Dir->new($tmpdir);
--- 29,36 ----
  
  my $tmpdir = File::Temp::tempdir(CLEANUP => 1);
  
! system("tar -C $tmpdir -xvjf $srcball '\*/configure.in' ".
!        "'\*/src/packaging/RedHat' > /dev/null")==0
    or die "Unable to unpack src tar ball\n";
  
  my $dirh = IO::Dir->new($tmpdir);
Index: openafs/src/packaging/RedHat/openafs-1.4.0-kmodule26.patch
diff -c openafs/src/packaging/RedHat/openafs-1.4.0-kmodule26.patch:1.1.2.2 openafs/src/packaging/RedHat/openafs-1.4.0-kmodule26.patch:1.1.2.3
*** openafs/src/packaging/RedHat/openafs-1.4.0-kmodule26.patch:1.1.2.2	Fri Oct 12 00:30:41 2007
--- openafs/src/packaging/RedHat/openafs-1.4.0-kmodule26.patch	Tue Jul  1 15:41:25 2008
***************
*** 1,6 ****
  --- openafs-1.4.0-rc4/src/libafs/MakefileProto.LINUX.in-orig	2005-07-25 14:32:15.000000000 -0400
  +++ openafs-1.4.0-rc4/src/libafs/MakefileProto.LINUX.in	2005-09-23 16:45:44.000000000 -0400
! @@ -245,11 +245,11 @@
   	echo BM Build Complete
   
   <linux26 linux_26 umlinux26>
--- 1,6 ----
  --- openafs-1.4.0-rc4/src/libafs/MakefileProto.LINUX.in-orig	2005-07-25 14:32:15.000000000 -0400
  +++ openafs-1.4.0-rc4/src/libafs/MakefileProto.LINUX.in	2005-09-23 16:45:44.000000000 -0400
! @@ -280,11 +280,11 @@
   	echo BM Build Complete
   
   <linux26 linux_26 umlinux26>
***************
*** 10,17 ****
  +	cp openafs.ko $@
   
   .FORCE:
! -libafs.ko: .FORCE
! +openafs.ko: .FORCE
!  	env EXTRA_CFLAGS="${EXTRA_CFLAGS}" @TOP_SRCDIR@/libafs/make_kbuild_makefile.pl ${KDIR} $@ @TOP_OBJDIR@/src/config/Makefile.config Makefile.afs Makefile.common
   	env EXTRA_CFLAGS="${EXTRA_CFLAGS}" $(MAKE) -C ${LINUX_KERNEL_PATH} M=@TOP_OBJDIR@/src/libafs/${KDIR} modules
           
--- 10,17 ----
  +	cp openafs.ko $@
   
   .FORCE:
! -libafs.ko afspag.ko: .FORCE
! +openafs.ko afspag.ko: .FORCE
!  	env EXTRA_CFLAGS="${EXTRA_CFLAGS}" @TOP_SRCDIR@/libafs/make_kbuild_makefile.pl ${KDIR} @TOP_OBJDIR@/src/config/Makefile.config Makefile.afs Makefile.common
   	env EXTRA_CFLAGS="${EXTRA_CFLAGS}" $(MAKE) -C ${LINUX_KERNEL_PATH} M=@TOP_OBJDIR@/src/libafs/${KDIR} modules
           
Index: openafs/src/packaging/RedHat/openafs.spec.in
diff -c openafs/src/packaging/RedHat/openafs.spec.in:1.2.2.22 openafs/src/packaging/RedHat/openafs.spec.in:1.2.2.24
*** openafs/src/packaging/RedHat/openafs.spec.in:1.2.2.22	Sun Apr 27 00:00:22 2008
--- openafs/src/packaging/RedHat/openafs.spec.in	Mon Jul  7 12:42:29 2008
***************
*** 1,4 ****
! # Openafs Spec $Revision: 1.2.2.22 $
  
  %define afsvers @VERSION@
  %define pkgvers @LINUX_PKGVER@
--- 1,4 ----
! # Openafs Spec $Revision: 1.2.2.24 $
  
  %define afsvers @VERSION@
  %define pkgvers @LINUX_PKGVER@
***************
*** 28,33 ****
--- 28,42 ----
  %define kernvers %(%{_sourcedir}/openafs-kernel-version.sh)
  %endif
  
+ # If we're building for a 2.4 series kernel, then fedora style kmods aren't
+ # appropriate - disable them.
+ 
+ %define kern24 %([ `echo "%{kernvers}" | sed -e 's/^\([0-9]*\.[0-9]*\)\..*/\1/'` = "2.4" ] && echo 1 || echo 0)
+ 
+ %if %{kern24}
+ %define fedorakmod 0
+ %endif
+ 
  %if %{fedorakmod}
  %define kmodtool bash %{_sourcedir}/openafs-kmodtool
  
***************
*** 1494,1504 ****
  %{_mandir}/man8/upclient.*
  %{_mandir}/man8/upserver.*
  %{_mandir}/man8/vldb_check.*
  %{_mandir}/man8/vlserver.*
  %{_mandir}/man8/voldump.*
  %{_mandir}/man8/volinfo.*
  %{_mandir}/man8/volserver.*
- #%{_mandir}/man8/vldb_convert.*
  
  %if %{build_authlibs}
  %files authlibs
--- 1503,1513 ----
  %{_mandir}/man8/upclient.*
  %{_mandir}/man8/upserver.*
  %{_mandir}/man8/vldb_check.*
+ %{_mandir}/man8/vldb_convert.*
  %{_mandir}/man8/vlserver.*
  %{_mandir}/man8/voldump.*
  %{_mandir}/man8/volinfo.*
  %{_mandir}/man8/volserver.*
  
  %if %{build_authlibs}
  %files authlibs
***************
*** 1568,1573 ****
--- 1577,1583 ----
  %files krb5
  %defattr(-,root,root)
  %{_bindir}/aklog
+ %{_bindir}/klog.krb5
  %{_sbindir}/asetkey
  %{_mandir}/man1/aklog.*
  %{_mandir}/man8/asetkey.*
Index: openafs/src/procmgmt/NTMakefile
diff -c openafs/src/procmgmt/NTMakefile:1.7 openafs/src/procmgmt/NTMakefile:1.7.4.1
*** openafs/src/procmgmt/NTMakefile:1.7	Sun Nov 20 20:57:14 2005
--- openafs/src/procmgmt/NTMakefile	Wed Jul  2 08:49:23 2008
***************
*** 37,42 ****
--- 37,43 ----
  	$(DLLCONLINK) /DEF:afsprocmgmt.def
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  	$(COPY) $*.lib $(ILIBDIR)
  	$(DEL) $*.lib $*.exp
  
***************
*** 57,62 ****
--- 58,64 ----
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  $(CL_KILL_EXEFILE): $(RS_KILL_EXEFILE)
  	$(COPY) $** $@
Index: openafs/src/procmgmt/test/NTMakefile
diff -c openafs/src/procmgmt/test/NTMakefile:1.6 openafs/src/procmgmt/test/NTMakefile:1.6.4.1
*** openafs/src/procmgmt/test/NTMakefile:1.6	Sun Nov 20 20:57:16 2005
--- openafs/src/procmgmt/test/NTMakefile	Wed Jul  2 08:49:23 2008
***************
*** 18,23 ****
--- 18,24 ----
  $(OUT)\pmgttest.exe: $(OUT)\pmgttest.obj $(PMGTTEST_EXELIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  mkdir:
  	
Index: openafs/src/ptserver/NTMakefile
diff -c openafs/src/ptserver/NTMakefile:1.14.4.3 openafs/src/ptserver/NTMakefile:1.14.4.5
*** openafs/src/ptserver/NTMakefile:1.14.4.3	Sat Feb  2 08:43:25 2008
--- openafs/src/ptserver/NTMakefile	Wed Jul  2 08:49:23 2008
***************
*** 69,75 ****
  	$(DESTDIR)\lib\afs\afsaudit.lib \
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afs\afsreg.lib \
! 	$(DESTDIR)\lib\cm_dns.obj
  
  !IF (("$(SYS_NAME)"!="i386_win95" ) && ("$(SYS_NAME)"!="I386_WIN95" ))
  PTSERVER_EXELIBS =$(PTSERVER_EXELIBS) $(DESTDIR)\lib\afs\afsprocmgmt.lib
--- 69,76 ----
  	$(DESTDIR)\lib\afs\afsaudit.lib \
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afs\afsreg.lib \
! 	$(DESTDIR)\lib\cm_dns.obj \
!         $(DESTDIR)\lib\cm_nls.obj
  
  !IF (("$(SYS_NAME)"!="i386_win95" ) && ("$(SYS_NAME)"!="I386_WIN95" ))
  PTSERVER_EXELIBS =$(PTSERVER_EXELIBS) $(DESTDIR)\lib\afs\afsprocmgmt.lib
***************
*** 79,86 ****
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
! 
! 
  
  ############################################################################
  # build pts.exe
--- 80,86 ----
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
!         $(CODESIGN_USERLAND)
  
  ############################################################################
  # build pts.exe
***************
*** 111,128 ****
  	$(DESTDIR)\lib\afs\afsreg.lib \
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afs\afspioctl.lib \
! 	$(DESTDIR)\lib\cm_dns.obj
  
  $(PTS): $(PTS_EXEOBJS) $(PTS_EXELIBS) 
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
  
  $(PTCLIENT): $(PTCLIENT_EXEOBJS) $(PTS_EXELIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
! 
  
  
  ############################################################################
--- 111,130 ----
  	$(DESTDIR)\lib\afs\afsreg.lib \
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afs\afspioctl.lib \
! 	$(DESTDIR)\lib\cm_dns.obj \
!         $(DESTDIR)\lib\cm_nls.obj
  
  $(PTS): $(PTS_EXEOBJS) $(PTS_EXELIBS) 
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  $(PTCLIENT): $(PTCLIENT_EXEOBJS) $(PTS_EXELIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
!         $(CODESIGN_USERLAND)
  
  
  ############################################################################
***************
*** 213,230 ****
--- 215,236 ----
  $(OUT)\readgroup.exe: $(OUT)\readgroup.obj $(LIBFILE) $(TEST_LIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\readpwd.exe: $(OUT)\readpwd.obj $(LIBFILE) $(TEST_LIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\testpt.exe: $(OUT)\testpt.obj $(LIBFILE) $(TEST_LIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib 
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\db_verify.exe: $(OUT)\db_verify.obj $(OUT)\pterror.obj $(OUT)\display.obj $(LIBFILE) $(TEST_LIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  mkdir:
  	
Index: openafs/src/ptserver/display.c
diff -c openafs/src/ptserver/display.c:1.9.14.1.2.1 openafs/src/ptserver/display.c:1.9.14.2
*** openafs/src/ptserver/display.c:1.9.14.1.2.1	Sun Jun 22 22:49:26 2008
--- openafs/src/ptserver/display.c	Thu May 29 00:04:25 2008
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/ptserver/display.c,v 1.9.14.1.2.1 2008/06/23 02:49:26 jaltman Exp $");
  
  #include <afs/stds.h>
  #include <sys/types.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/ptserver/display.c,v 1.9.14.2 2008/05/29 04:04:25 jaltman Exp $");
  
  #include <afs/stds.h>
  #include <sys/types.h>
Index: openafs/src/ptserver/pt_util.c
diff -c openafs/src/ptserver/pt_util.c:1.11.4.4.2.1 openafs/src/ptserver/pt_util.c:1.11.4.6
*** openafs/src/ptserver/pt_util.c:1.11.4.4.2.1	Thu Jun 12 14:37:08 2008
--- openafs/src/ptserver/pt_util.c	Tue Jul  1 01:57:35 2008
***************
*** 1,4 ****
! /* $Id: pt_util.c,v 1.11.4.4.2.1 2008/06/12 18:37:08 shadow Exp $ */
  
  /*
   *
--- 1,4 ----
! /* $Id: pt_util.c,v 1.11.4.6 2008/07/01 05:57:35 rra Exp $ */
  
  /*
   *
***************
*** 23,31 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/ptserver/pt_util.c,v 1.11.4.4.2.1 2008/06/12 18:37:08 shadow Exp $");
  
  #include <afs/cmd.h>		/*Command line parsing */
  #include <errno.h>
  #include <lock.h>
  #include <netinet/in.h>
--- 23,32 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/ptserver/pt_util.c,v 1.11.4.6 2008/07/01 05:57:35 rra Exp $");
  
  #include <afs/cmd.h>		/*Command line parsing */
+ #include <afs/afsutil.h>
  #include <errno.h>
  #include <lock.h>
  #include <netinet/in.h>
***************
*** 137,143 ****
      struct prentry uentry, gentry;
      struct ubik_hdr *uh;
      char *dfile = 0;
!     char *pfile = "/usr/afs/db/prdb.DB0";
      struct cmd_parmdesc *tparm;
  
      tparm = a_as->parms;
--- 138,146 ----
      struct prentry uentry, gentry;
      struct ubik_hdr *uh;
      char *dfile = 0;
!     char *pbase = AFSDIR_SERVER_PRDB_FILEPATH;
!     char *pfile = NULL;
!     char pbuffer[1028];
      struct cmd_parmdesc *tparm;
  
      tparm = a_as->parms;
***************
*** 170,175 ****
--- 173,182 ----
  	dfile = tparm[8].items->data;
      }
  
+     if (pfile == NULL) {
+         afs_snprintf(pbuffer, sizeof(pbuffer), "%s.DB0", pbase);
+         pfile = pbuffer;
+     }
      if ((dbase_fd = open(pfile, (wflag ? O_RDWR : O_RDONLY) | O_CREAT, 0600))
  	< 0) {
  	fprintf(stderr, "pt_util: cannot open %s: %s\n", pfile,
Index: openafs/src/ptserver/utils.c
diff -c openafs/src/ptserver/utils.c:1.15.14.3.2.1 openafs/src/ptserver/utils.c:1.15.14.4
*** openafs/src/ptserver/utils.c:1.15.14.3.2.1	Thu Jun 12 14:37:08 2008
--- openafs/src/ptserver/utils.c	Thu Jun 12 14:36:49 2008
***************
*** 12,18 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/ptserver/utils.c,v 1.15.14.3.2.1 2008/06/12 18:37:08 shadow Exp $");
  
  #include <sys/types.h>
  #include <lock.h>
--- 12,18 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/ptserver/utils.c,v 1.15.14.4 2008/06/12 18:36:49 shadow Exp $");
  
  #include <sys/types.h>
  #include <lock.h>
Index: openafs/src/rx/rx.c
diff -c openafs/src/rx/rx.c:1.97.2.20.2.6 openafs/src/rx/rx.c:1.97.2.26
*** openafs/src/rx/rx.c:1.97.2.20.2.6	Sun Jun 22 23:20:50 2008
--- openafs/src/rx/rx.c	Thu May 29 09:33:29 2008
***************
*** 17,23 ****
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx.c,v 1.97.2.20.2.6 2008/06/23 03:20:50 jaltman Exp $");
  
  #ifdef KERNEL
  #include "afs/sysincludes.h"
--- 17,23 ----
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx.c,v 1.97.2.26 2008/05/29 13:33:29 jaltman Exp $");
  
  #ifdef KERNEL
  #include "afs/sysincludes.h"
Index: openafs/src/rx/rx_lwp.c
diff -c openafs/src/rx/rx_lwp.c:1.19.4.2.2.1 openafs/src/rx/rx_lwp.c:1.19.4.3
*** openafs/src/rx/rx_lwp.c:1.19.4.2.2.1	Tue May 20 17:59:43 2008
--- openafs/src/rx/rx_lwp.c	Tue May 20 17:59:02 2008
***************
*** 22,28 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_lwp.c,v 1.19.4.2.2.1 2008/05/20 21:59:43 shadow Exp $");
  
  # include <sys/types.h>		/* fd_set on older platforms */
  # include <errno.h>
--- 22,28 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_lwp.c,v 1.19.4.3 2008/05/20 21:59:02 shadow Exp $");
  
  # include <sys/types.h>		/* fd_set on older platforms */
  # include <errno.h>
Index: openafs/src/rx/rx_packet.c
diff -c openafs/src/rx/rx_packet.c:1.62.2.11.2.1 openafs/src/rx/rx_packet.c:1.62.2.13
*** openafs/src/rx/rx_packet.c:1.62.2.11.2.1	Tue May 20 17:59:43 2008
--- openafs/src/rx/rx_packet.c	Wed May 28 23:38:06 2008
***************
*** 15,21 ****
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_packet.c,v 1.62.2.11.2.1 2008/05/20 21:59:43 shadow Exp $");
  
  #ifdef KERNEL
  #if defined(UKERNEL)
--- 15,21 ----
  #endif
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_packet.c,v 1.62.2.13 2008/05/29 03:38:06 jaltman Exp $");
  
  #ifdef KERNEL
  #if defined(UKERNEL)
***************
*** 544,549 ****
--- 544,550 ----
  
      getme = apackets * sizeof(struct rx_packet);
      p = rx_mallocedP = (struct rx_packet *)osi_Alloc(getme);
+     osi_Assert(p);
  
      PIN(p, getme);		/* XXXXX */
      memset((char *)p, 0, getme);
***************
*** 579,584 ****
--- 580,586 ----
  
      getme = apackets * sizeof(struct rx_packet);
      p = rx_mallocedP = (struct rx_packet *)osi_Alloc(getme);
+     osi_Assert(p);
  
      PIN(p, getme);		/* XXXXX */
      memset((char *)p, 0, getme);
Index: openafs/src/rx/rx_pthread.c
diff -c openafs/src/rx/rx_pthread.c:1.24.4.5.2.1 openafs/src/rx/rx_pthread.c:1.24.4.6
*** openafs/src/rx/rx_pthread.c:1.24.4.5.2.1	Tue May 20 17:59:43 2008
--- openafs/src/rx/rx_pthread.c	Tue May 20 17:59:02 2008
***************
*** 19,25 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_pthread.c,v 1.24.4.5.2.1 2008/05/20 21:59:43 shadow Exp $");
  
  #include <sys/types.h>
  #include <errno.h>
--- 19,25 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_pthread.c,v 1.24.4.6 2008/05/20 21:59:02 shadow Exp $");
  
  #include <sys/types.h>
  #include <errno.h>
Index: openafs/src/rx/rx_user.c
diff -c openafs/src/rx/rx_user.c:1.24.4.2.2.2 openafs/src/rx/rx_user.c:1.24.4.4
*** openafs/src/rx/rx_user.c:1.24.4.2.2.2	Sun Jun 22 23:20:50 2008
--- openafs/src/rx/rx_user.c	Thu May 29 09:33:29 2008
***************
*** 13,19 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_user.c,v 1.24.4.2.2.2 2008/06/23 03:20:50 jaltman Exp $");
  
  # include <sys/types.h>
  # include <errno.h>
--- 13,19 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/rx_user.c,v 1.24.4.4 2008/05/29 13:33:29 jaltman Exp $");
  
  # include <sys/types.h>
  # include <errno.h>
Index: openafs/src/rx/rxperf.c
diff -c openafs/src/rx/rxperf.c:1.2.32.1 openafs/src/rx/rxperf.c:1.2.14.1
*** openafs/src/rx/rxperf.c:1.2.32.1	Tue May 20 17:59:43 2008
--- openafs/src/rx/rxperf.c	Tue May 20 17:59:02 2008
***************
*** 40,46 ****
   */
  
  #ifdef RCSID
! RCSID("$Id: rxperf.c,v 1.2.32.1 2008/05/20 21:59:43 shadow Exp $");
  #endif
  
  #include <stdarg.h>
--- 40,46 ----
   */
  
  #ifdef RCSID
! RCSID("$Id: rxperf.c,v 1.2.14.1 2008/05/20 21:59:02 shadow Exp $");
  #endif
  
  #include <stdarg.h>
Index: openafs/src/rx/LINUX/rx_knet.c
diff -c openafs/src/rx/LINUX/rx_knet.c:1.32.2.6.2.1 openafs/src/rx/LINUX/rx_knet.c:1.32.2.7
*** openafs/src/rx/LINUX/rx_knet.c:1.32.2.6.2.1	Tue May 20 17:59:44 2008
--- openafs/src/rx/LINUX/rx_knet.c	Tue May 20 17:59:04 2008
***************
*** 16,22 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/LINUX/rx_knet.c,v 1.32.2.6.2.1 2008/05/20 21:59:44 shadow Exp $");
  
  #include <linux/version.h>
  #ifdef AFS_LINUX22_ENV
--- 16,22 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/LINUX/rx_knet.c,v 1.32.2.7 2008/05/20 21:59:04 shadow Exp $");
  
  #include <linux/version.h>
  #ifdef AFS_LINUX22_ENV
Index: openafs/src/rx/SOLARIS/rx_knet.c
diff -c openafs/src/rx/SOLARIS/rx_knet.c:1.20.6.3 openafs/src/rx/SOLARIS/rx_knet.c:1.20.6.4
*** openafs/src/rx/SOLARIS/rx_knet.c:1.20.6.3	Mon Mar 17 11:28:34 2008
--- openafs/src/rx/SOLARIS/rx_knet.c	Mon Jul  7 13:15:10 2008
***************
*** 11,17 ****
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/SOLARIS/rx_knet.c,v 1.20.6.3 2008/03/17 15:28:34 shadow Exp $");
  
  #ifdef AFS_SUN5_ENV
  #include "rx/rx_kcommon.h"
--- 11,17 ----
  #include "afs/param.h"
  
  RCSID
!     ("$Header: /cvs/openafs/src/rx/SOLARIS/rx_knet.c,v 1.20.6.4 2008/07/07 17:15:10 shadow Exp $");
  
  #ifdef AFS_SUN5_ENV
  #include "rx/rx_kcommon.h"
***************
*** 69,74 ****
--- 69,78 ----
    (struct sonode *);
  #endif
  
+ #ifndef UDP_MOD_NAME
+ #define UDP_MOD_NAME "udp"
+ #endif
+ 
  static afs_uint32 myNetAddrs[ADDRSPERSITE];
  static int myNetMTUs[ADDRSPERSITE];
  static int numMyNetAddrs = 0;
Index: openafs/src/rx/test/NTMakefile
diff -c openafs/src/rx/test/NTMakefile:1.6 openafs/src/rx/test/NTMakefile:1.6.4.1
*** openafs/src/rx/test/NTMakefile:1.6	Sun Nov 20 20:57:21 2005
--- openafs/src/rx/test/NTMakefile	Wed Jul  2 08:49:25 2008
***************
*** 25,42 ****
--- 25,46 ----
  $(OUT)\testclient.exe: $(OUT)\testclient.obj $(LIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\testserver.exe: $(OUT)\testserver.obj $(LIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\tableGen.exe: $(OUT)\tableGen.obj $(LIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(OUT)\generator.exe: $(OUT)\generator.obj $(LIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  $(RXTESTOBJS): ..\rx_clock.h ..\rx_queue.h ..\rx_event.h ..\rx.h
  
Index: openafs/src/rxdebug/NTMakefile
diff -c openafs/src/rxdebug/NTMakefile:1.1.2.2 openafs/src/rxdebug/NTMakefile:1.1.2.3
*** openafs/src/rxdebug/NTMakefile:1.1.2.2	Thu Feb 15 13:14:09 2007
--- openafs/src/rxdebug/NTMakefile	Wed Jul  2 08:49:25 2008
***************
*** 35,40 ****
--- 35,41 ----
  	$(EXECONLINK) iphlpapi.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  install: $(RXDEBUG)
  
Index: openafs/src/rxgen/Makefile.in
diff -c openafs/src/rxgen/Makefile.in:1.8.14.1 openafs/src/rxgen/Makefile.in:1.8.14.2
*** openafs/src/rxgen/Makefile.in:1.8.14.1	Fri Oct 19 20:23:46 2007
--- openafs/src/rxgen/Makefile.in	Mon Jun 30 19:37:34 2008
***************
*** 19,25 ****
  	$(CC) $(CFLAGS) $(OBJS) $(XLIBS) -o $@
  
  rpc_main.o: rpc_main.c
! 	$(CCOBJ) $(CFLAGS) -c $< -D__PROG_CPP__="\"$(CPP)\""
  
  #
  # Install targets
--- 19,25 ----
  	$(CC) $(CFLAGS) $(OBJS) $(XLIBS) -o $@
  
  rpc_main.o: rpc_main.c
! 	$(CCOBJ) $(CFLAGS) -c $< -DPATH_CPP="\"$(PATH_CPP)\""
  
  #
  # Install targets
Index: openafs/src/rxgen/NTMakefile
diff -c openafs/src/rxgen/NTMakefile:1.6.4.1 openafs/src/rxgen/NTMakefile:1.6.4.2
*** openafs/src/rxgen/NTMakefile:1.6.4.1	Wed Sep 19 13:58:48 2007
--- openafs/src/rxgen/NTMakefile	Wed Jul  2 08:49:25 2008
***************
*** 38,45 ****
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
! 
! 
  
  install: AFS_component_version_number.c $(EXEFILE) $(INCFILES)
  
--- 38,44 ----
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
!         $(CODESIGN_USERLAND)
  
  install: AFS_component_version_number.c $(EXEFILE) $(INCFILES)
  
Index: openafs/src/rxgen/rpc_main.c
diff -c openafs/src/rxgen/rpc_main.c:1.23.4.5 openafs/src/rxgen/rpc_main.c:1.23.4.6
*** openafs/src/rxgen/rpc_main.c:1.23.4.5	Thu Nov  1 12:02:29 2007
--- openafs/src/rxgen/rpc_main.c	Mon Jun 30 19:37:34 2008
***************
*** 37,43 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/rxgen/rpc_main.c,v 1.23.4.5 2007/11/01 16:02:29 shadow Exp $");
  
  #include <limits.h>
  #include <stdio.h>
--- 37,43 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/rxgen/rpc_main.c,v 1.23.4.6 2008/06/30 23:37:34 rra Exp $");
  
  #include <limits.h>
  #include <stdio.h>
***************
*** 94,101 ****
  char yflag = 0;			/* if set, only emit function name arrays to xdr file */
  int debug = 0;
  static char *cmdname;
! #ifdef	__PROG_CPP__
! static char CPP[] = __PROG_CPP__;
  #else
  static char CPP[] = "/lib/cpp";
  #endif
--- 94,101 ----
  char yflag = 0;			/* if set, only emit function name arrays to xdr file */
  int debug = 0;
  static char *cmdname;
! #ifdef PATH_CPP
! static char CPP[] = PATH_CPP;
  #else
  static char CPP[] = "/lib/cpp";
  #endif
Index: openafs/src/rxkad/test/NTMakefile
diff -c openafs/src/rxkad/test/NTMakefile:1.5 openafs/src/rxkad/test/NTMakefile:1.5.4.1
*** openafs/src/rxkad/test/NTMakefile:1.5	Sun Nov 20 20:57:25 2005
--- openafs/src/rxkad/test/NTMakefile	Wed Jul  2 08:49:26 2008
***************
*** 37,42 ****
--- 37,43 ----
  	$(EXECONLINK) $(EXELIBS) 
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  
  ############################################################################
Index: openafs/src/shlibafsauthent/NTMakefile
diff -c openafs/src/shlibafsauthent/NTMakefile:1.3 openafs/src/shlibafsauthent/NTMakefile:1.3.4.1
*** openafs/src/shlibafsauthent/NTMakefile:1.3	Sun Nov 20 20:57:27 2005
--- openafs/src/shlibafsauthent/NTMakefile	Wed Jul  2 08:49:26 2008
***************
*** 223,228 ****
--- 223,229 ----
  	$(DLLCONLINK) /DEF:afsauthent.def rpcrt4.lib
          $(_VC_MANIFEST_EMBED_DLL)
  	$(DLLPREP)
+         $(CODESIGN_USERLAND)
  
  # Definitions for generating versioninfo resources
  afsauthent.res: afsauthent.rc AFS_component_version_number.h
Index: openafs/src/shlibafsrpc/Makefile.in
diff -c openafs/src/shlibafsrpc/Makefile.in:1.22.4.4 openafs/src/shlibafsrpc/Makefile.in:1.22.4.6
*** openafs/src/shlibafsrpc/Makefile.in:1.22.4.4	Fri Oct 19 20:23:46 2007
--- openafs/src/shlibafsrpc/Makefile.in	Tue Jul  1 14:15:15 2008
***************
*** 284,290 ****
  #
  #   $ what /opt/langtools/bin/pxdb32
  #   /opt/langtools/bin/pxdb32:
! #           HP92453-02 A.10.0A HP-UX SYMBOLIC DEBUGGER (PXDB) $Revision: 1.22.4.4 $
  #
  # The problem occurs when -g and -O are both used when compiling des.c.
  # The simplest way to work around the problem is to leave out either -g or -O.
--- 284,290 ----
  #
  #   $ what /opt/langtools/bin/pxdb32
  #   /opt/langtools/bin/pxdb32:
! #           HP92453-02 A.10.0A HP-UX SYMBOLIC DEBUGGER (PXDB) $Revision: 1.22.4.6 $
  #
  # The problem occurs when -g and -O are both used when compiling des.c.
  # The simplest way to work around the problem is to leave out either -g or -O.
***************
*** 366,372 ****
  syscall.o: ${SYS}/syscall.s
  	case "$(SYS_NAME)" in \
  	     sun4x_5* | sunx86_5*) \
! 		$(CPP)  ${SFLAGS} ${SYS}/syscall.s syscall.ss; \
  		as -o syscall.o syscall.ss;		\
  		$(RM) syscall.ss;;				\
  	 sgi_* | *_darwin_* ) \
--- 366,372 ----
  syscall.o: ${SYS}/syscall.s
  	case "$(SYS_NAME)" in \
  	     sun4x_5* | sunx86_5*) \
! 		$(PATH_CPP)  ${SFLAGS} ${SYS}/syscall.s > syscall.ss; \
  		as -o syscall.o syscall.ss;		\
  		$(RM) syscall.ss;;				\
  	 sgi_* | *_darwin_* ) \
***************
*** 378,384 ****
  	 *fbsd* ) \
  		touch syscall.o ;; \
  	 *) \
! 		$(CPP)  ${SFLAGS} ${SYS}/syscall.s syscall.ss; \
  		as -o syscall.o syscall.ss;		\
  		$(RM) syscall.ss;;				\
  	esac
--- 378,384 ----
  	 *fbsd* ) \
  		touch syscall.o ;; \
  	 *) \
! 		$(PATH_CPP) ${SFLAGS} ${SYS}/syscall.s > syscall.ss; \
  		as -o syscall.o syscall.ss;		\
  		$(RM) syscall.ss;;				\
  	esac
Index: openafs/src/sys/Makefile.in
diff -c openafs/src/sys/Makefile.in:1.36.2.8 openafs/src/sys/Makefile.in:1.36.2.9
*** openafs/src/sys/Makefile.in:1.36.2.8	Mon Jan  7 15:10:39 2008
--- openafs/src/sys/Makefile.in	Mon Jun 30 19:37:34 2008
***************
*** 88,94 ****
  syscall.o: syscall.s
  	@set -x; case "$(SYS_NAME)" in \
  	 sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53  | sun4_53 | sun4_52 | sun4_54 | sun4c_54 | sun4m_54 | sun4x_5? | sun4x_5?? | sunx86_5? | sunx86_5?? ) \
! 		$(CPP) -P ${SFLAGS} ${srcdir}/syscall.s syscall.ss; \
  		as -o syscall.o syscall.ss;		\
  		$(RM) syscall.ss;;				\
  	 sgi_* |*_darwin* ) \
--- 88,94 ----
  syscall.o: syscall.s
  	@set -x; case "$(SYS_NAME)" in \
  	 sun4c_51 | sun4c_52 | sun4m_51 | sun4m_52 | sun4c_53 | sun4m_53  | sun4_53 | sun4_52 | sun4_54 | sun4c_54 | sun4m_54 | sun4x_5? | sun4x_5?? | sunx86_5? | sunx86_5?? ) \
! 		$(PATH_CPP) -P ${SFLAGS} ${srcdir}/syscall.s > syscall.ss; \
  		as -o syscall.o syscall.ss;		\
  		$(RM) syscall.ss;;				\
  	 sgi_* |*_darwin* ) \
***************
*** 104,110 ****
  		${AS} syscall.S -o syscall.o ;  \
  		$(RM) -f syscall.S ;;\
  	 *) \
! 		$(CPP) -P ${SFLAGS} ${srcdir}/syscall.s syscall.ss; \
  		as -o syscall.o syscall.ss;		\
  		$(RM) syscall.ss;;				\
  	esac
--- 104,110 ----
  		${AS} syscall.S -o syscall.o ;  \
  		$(RM) -f syscall.S ;;\
  	 *) \
! 		$(PATH_CPP) -P ${SFLAGS} ${srcdir}/syscall.s > syscall.ss; \
  		as -o syscall.o syscall.ss;		\
  		$(RM) syscall.ss;;				\
  	esac
Index: openafs/src/sys/pioctl_nt.c
diff -c openafs/src/sys/pioctl_nt.c:1.34.4.11 openafs/src/sys/pioctl_nt.c:1.34.4.15
*** openafs/src/sys/pioctl_nt.c:1.34.4.11	Fri Mar 21 00:17:14 2008
--- openafs/src/sys/pioctl_nt.c	Sat Jul  5 11:51:22 2008
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/sys/pioctl_nt.c,v 1.34.4.11 2008/03/21 04:17:14 jaltman Exp $");
  
  #include <afs/stds.h>
  #include <windows.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/sys/pioctl_nt.c,v 1.34.4.15 2008/07/05 15:51:22 jaltman Exp $");
  
  #include <afs/stds.h>
  #include <windows.h>
***************
*** 29,34 ****
--- 29,35 ----
  #include <osi.h>
  
  #include <cm.h>
+ #include <cm_nls.h>
  #include <cm_server.h>
  #include <cm_cell.h>
  #include <cm_user.h>
***************
*** 49,54 ****
--- 50,58 ----
  
  static char AFSConfigKeyName[] = AFSREG_CLT_SVC_PARAM_SUBKEY;
  
+ static const char utf8_prefix[] = UTF8_PREFIX;
+ static const int  utf8_prefix_size = sizeof(utf8_prefix) -  sizeof(char);
+ 
  #define FS_IOCTLREQUEST_MAXSIZE	8192
  /* big structure for representing and storing an IOCTL request */
  typedef struct fs_ioctlRequest {
***************
*** 411,416 ****
--- 415,421 ----
      DWORD ioctlDebug = IoctlDebug();
      DWORD gle;
      DWORD dwSize = sizeof(szUser);
+     int saveerrno;
  
      memset(HostName, '\0', sizeof(HostName));
      gethostname(HostName, sizeof(HostName));
***************
*** 488,494 ****
          gle = GetLastError();
          if (gle && ioctlDebug ) {
              char buf[4096];
! 
              if ( FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                                 NULL,
                                 gle,
--- 493,500 ----
          gle = GetLastError();
          if (gle && ioctlDebug ) {
              char buf[4096];
!             
!             saveerrno = errno;
              if ( FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                                 NULL,
                                 gle,
***************
*** 501,506 ****
--- 507,513 ----
                  fprintf(stderr,"pioctl CreateFile(%s) failed: 0x%X\r\n\t[%s]\r\n",
                          tbuffer,gle,buf);
              }
+             errno = saveerrno;
          }
  
          lana_GetNetbiosName(szClient, LANA_NETBIOS_NAME_FULL);
***************
*** 514,522 ****
          }
  
          if ( szUser[0] ) {
!             if ( ioctlDebug )
                  fprintf(stderr, "pioctl Explorer logon user: [%s]\r\n",szUser);
! 
              sprintf(szPath, "\\\\%s", szClient);
              memset (&nr, 0x00, sizeof(NETRESOURCE));
              nr.dwType=RESOURCETYPE_DISK;
--- 521,531 ----
          }
  
          if ( szUser[0] ) {
!             if ( ioctlDebug ) {
!                 saveerrno = errno;
                  fprintf(stderr, "pioctl Explorer logon user: [%s]\r\n",szUser);
!                 errno = saveerrno;
!             }
              sprintf(szPath, "\\\\%s", szClient);
              memset (&nr, 0x00, sizeof(NETRESOURCE));
              nr.dwType=RESOURCETYPE_DISK;
***************
*** 525,532 ****
--- 534,543 ----
              res = WNetAddConnection2(&nr,NULL,szUser,0);
              if (res) {
                  if ( ioctlDebug ) {
+                     saveerrno = errno;
                      fprintf(stderr, "pioctl WNetAddConnection2(%s,%s) failed: 0x%X\r\n",
                               szPath,szUser,res);
+                     errno = saveerrno;
                  }
                  gonext = 1;
              }
***************
*** 535,542 ****
--- 546,555 ----
              res = WNetAddConnection2(&nr,NULL,szUser,0);
              if (res) {
                  if ( ioctlDebug ) {
+                     saveerrno = errno;
                      fprintf(stderr, "pioctl WNetAddConnection2(%s,%s) failed: 0x%X\r\n",
                               szPath,szUser,res);
+                     errno = saveerrno;
                  }
                  gonext = 1;
              }
***************
*** 553,558 ****
--- 566,572 ----
                  if (gle && ioctlDebug ) {
                      char buf[4096];
  
+                     saveerrno = errno;
                      if ( FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                                          NULL,
                                          gle,
***************
*** 565,570 ****
--- 579,585 ----
                          fprintf(stderr,"pioctl CreateFile(%s) failed: 0x%X\r\n\t[%s]\r\n",
                                   tbuffer,gle,buf);
                      }
+                     errno = saveerrno;
                  }
              }
          }
***************
*** 576,584 ****
  
          dwSize = sizeof(szUser);
          if (GetLSAPrincipalName(szUser, &dwSize)) {
!             if ( ioctlDebug )
                  fprintf(stderr, "pioctl LSA Principal logon user: [%s]\r\n",szUser);
! 
              sprintf(szPath, "\\\\%s", szClient);
              memset (&nr, 0x00, sizeof(NETRESOURCE));
              nr.dwType=RESOURCETYPE_DISK;
--- 591,601 ----
  
          dwSize = sizeof(szUser);
          if (GetLSAPrincipalName(szUser, &dwSize)) {
!             if ( ioctlDebug ) {
!                 saveerrno = errno;
                  fprintf(stderr, "pioctl LSA Principal logon user: [%s]\r\n",szUser);
!                 errno = saveerrno;
!             }
              sprintf(szPath, "\\\\%s", szClient);
              memset (&nr, 0x00, sizeof(NETRESOURCE));
              nr.dwType=RESOURCETYPE_DISK;
***************
*** 587,594 ****
--- 604,613 ----
              res = WNetAddConnection2(&nr,NULL,szUser,0);
              if (res) {
                  if ( ioctlDebug ) {
+                     saveerrno = errno;
                      fprintf(stderr, "pioctl WNetAddConnection2(%s,%s) failed: 0x%X\r\n",
                               szPath,szUser,res);
+                     errno = saveerrno;
                  }
                  gonext = 1;
              }
***************
*** 597,604 ****
--- 616,625 ----
              res = WNetAddConnection2(&nr,NULL,szUser,0);
              if (res) {
                  if ( ioctlDebug ) {
+                     saveerrno = errno;
                      fprintf(stderr, "pioctl WNetAddConnection2(%s,%s) failed: 0x%X\r\n",
                               szPath,szUser,res);
+                     errno = saveerrno;
                  }
                  gonext = 1;
              }
***************
*** 615,620 ****
--- 636,642 ----
                  if (gle && ioctlDebug ) {
                      char buf[4096];
  
+                     saveerrno = errno;
                      if ( FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                                          NULL,
                                          gle,
***************
*** 627,632 ****
--- 649,656 ----
                          fprintf(stderr,"pioctl CreateFile(%s) failed: 0x%X\r\n\t[%s]\r\n",
                                   tbuffer,gle,buf);
                      }
+                     errno = saveerrno;
+ 
                  }
              }
          }
***************
*** 636,644 ****
      if ( fh == INVALID_HANDLE_VALUE ) {
          dwSize = sizeof(szUser);
          if (GetUserNameEx(NameSamCompatible, szUser, &dwSize)) {
!             if ( ioctlDebug )
                  fprintf(stderr, "pioctl SamCompatible logon user: [%s]\r\n",szUser);
! 
              sprintf(szPath, "\\\\%s", szClient);
              memset (&nr, 0x00, sizeof(NETRESOURCE));
              nr.dwType=RESOURCETYPE_DISK;
--- 660,670 ----
      if ( fh == INVALID_HANDLE_VALUE ) {
          dwSize = sizeof(szUser);
          if (GetUserNameEx(NameSamCompatible, szUser, &dwSize)) {
!             if ( ioctlDebug ) {
!                 saveerrno = errno;
                  fprintf(stderr, "pioctl SamCompatible logon user: [%s]\r\n",szUser);
!                 errno = saveerrno;
!             }
              sprintf(szPath, "\\\\%s", szClient);
              memset (&nr, 0x00, sizeof(NETRESOURCE));
              nr.dwType=RESOURCETYPE_DISK;
***************
*** 647,654 ****
--- 673,682 ----
              res = WNetAddConnection2(&nr,NULL,szUser,0);
              if (res) {
                  if ( ioctlDebug ) {
+                     saveerrno = errno;
                      fprintf(stderr, "pioctl WNetAddConnection2(%s,%s) failed: 0x%X\r\n",
                               szPath,szUser,res);
+                     errno = saveerrno;
                  }
              }
  
***************
*** 656,663 ****
--- 684,693 ----
              res = WNetAddConnection2(&nr,NULL,szUser,0);
              if (res) {
                  if ( ioctlDebug ) {
+                     saveerrno = errno;
                      fprintf(stderr, "pioctl WNetAddConnection2(%s,%s) failed: 0x%X\r\n",
                               szPath,szUser,res);
+                     errno = saveerrno;
                  }
                  return -1;
              }
***************
*** 671,676 ****
--- 701,707 ----
                  if (gle && ioctlDebug ) {
                      char buf[4096];
  
+                     saveerrno = errno;
                      if ( FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                                          NULL,
                                          gle,
***************
*** 683,688 ****
--- 714,720 ----
                          fprintf(stderr,"pioctl CreateFile(%s) failed: 0x%X\r\n\t[%s]\r\n",
                                   tbuffer,gle,buf);
                      }
+                     errno = saveerrno;
                  }
                  return -1;
              }
***************
*** 703,713 ****
      long rcount;
      long ioCount;
      DWORD gle;
  
      rcount = (long)(reqp->mp - reqp->data);
      if (rcount <= 0) {
!         if ( IoctlDebug() )
              fprintf(stderr, "pioctl Transceive rcount <= 0: %d\r\n",rcount);
  	return EINVAL;		/* not supposed to happen */
      }
  
--- 735,750 ----
      long rcount;
      long ioCount;
      DWORD gle;
+     DWORD ioctlDebug = IoctlDebug();
+     int save;
  
      rcount = (long)(reqp->mp - reqp->data);
      if (rcount <= 0) {
!         if ( ioctlDebug ) {
!             save = errno;
              fprintf(stderr, "pioctl Transceive rcount <= 0: %d\r\n",rcount);
+             errno = save;
+         }
  	return EINVAL;		/* not supposed to happen */
      }
  
***************
*** 715,722 ****
  	/* failed to write */
  	gle = GetLastError();
  
!         if ( IoctlDebug() )
              fprintf(stderr, "pioctl Transceive WriteFile failed: 0x%X\r\n",gle);
          return gle;
      }
  
--- 752,762 ----
  	/* failed to write */
  	gle = GetLastError();
  
!         if ( ioctlDebug ) {
!             save = errno;
              fprintf(stderr, "pioctl Transceive WriteFile failed: 0x%X\r\n",gle);
+             errno = save;
+         }
          return gle;
      }
  
***************
*** 724,731 ****
  	/* failed to read */
  	gle = GetLastError();
  
!         if ( IoctlDebug() )
              fprintf(stderr, "pioctl Transceive ReadFile failed: 0x%X\r\n",gle);
          return gle;
      }
  
--- 764,774 ----
  	/* failed to read */
  	gle = GetLastError();
  
!         if ( ioctlDebug ) {
!             save = errno;
              fprintf(stderr, "pioctl Transceive ReadFile failed: 0x%X\r\n",gle);
+             errno = save;
+         }
          return gle;
      }
  
***************
*** 747,757 ****
  static long
  UnmarshallLong(fs_ioctlRequest_t * reqp, long *valp)
  {
      /* not enough data left */
      if (reqp->nbytes < 4) {
!         if ( IoctlDebug() )
              fprintf(stderr, "pioctl UnmarshallLong reqp->nbytes < 4: %d\r\n",
                       reqp->nbytes);
  	return -1;
      }
  
--- 790,805 ----
  static long
  UnmarshallLong(fs_ioctlRequest_t * reqp, long *valp)
  {
+     int save;
+ 
      /* not enough data left */
      if (reqp->nbytes < 4) {
!         if ( IoctlDebug() ) {
!             save = errno;
              fprintf(stderr, "pioctl UnmarshallLong reqp->nbytes < 4: %d\r\n",
                       reqp->nbytes);
+             errno = save;
+         }
  	return -1;
      }
  
***************
*** 763,784 ****
  
  /* includes marshalling NULL pointer as a null (0 length) string */
  static long
! MarshallString(fs_ioctlRequest_t * reqp, char *stringp)
  {
      int count;
  
      if (stringp)
  	count = (int)strlen(stringp) + 1;/* space required including null */
      else
  	count = 1;
  
      /* watch for buffer overflow */
      if ((reqp->mp - reqp->data) + count > sizeof(reqp->data)) {
!         if ( IoctlDebug() )
              fprintf(stderr, "pioctl MarshallString buffer overflow\r\n");
  	return -1;
      }
  
      if (stringp)
  	memcpy(reqp->mp, stringp, count);
      else
--- 811,846 ----
  
  /* includes marshalling NULL pointer as a null (0 length) string */
  static long
! MarshallString(fs_ioctlRequest_t * reqp, char *stringp, int is_utf8)
  {
      int count;
+     int save;
  
      if (stringp)
  	count = (int)strlen(stringp) + 1;/* space required including null */
      else
  	count = 1;
  
+     if (is_utf8) {
+         count += utf8_prefix_size;
+     }
+ 
      /* watch for buffer overflow */
      if ((reqp->mp - reqp->data) + count > sizeof(reqp->data)) {
!         if ( IoctlDebug() ) {
!             save = errno;
              fprintf(stderr, "pioctl MarshallString buffer overflow\r\n");
+             errno = save;
+         }
  	return -1;
      }
  
+     if (is_utf8) {
+         memcpy(reqp->mp, utf8_prefix, utf8_prefix_size);
+         reqp->mp += utf8_prefix_size;
+         count -= utf8_prefix_size;
+     }
+ 
      if (stringp)
  	memcpy(reqp->mp, stringp, count);
      else
***************
*** 802,807 ****
--- 864,870 ----
      int doSwitch;
      char newPath[3];
      char * p;
+     int save;
  
      if (pathp[0] != 0 && pathp[1] == ':') {
  	/* there's a drive letter there */
***************
*** 856,864 ****
  	if (!SetCurrentDirectory(newPath)) {
  	    code = GetLastError();
  
!             if ( IoctlDebug() )
                  fprintf(stderr, "pioctl fs_GetFullPath SetCurrentDirectory(%s) failed: 0x%X\r\n",
                           newPath, code);
  	    return code;
  	}
      }
--- 919,930 ----
  	if (!SetCurrentDirectory(newPath)) {
  	    code = GetLastError();
  
!             if ( IoctlDebug() ) {
!                 save = errno;
                  fprintf(stderr, "pioctl fs_GetFullPath SetCurrentDirectory(%s) failed: 0x%X\r\n",
                           newPath, code);
+                 errno = save;
+             }
  	    return code;
  	}
      }
***************
*** 906,919 ****
      return 0;
  }
  
! long
! pioctl(char *pathp, long opcode, struct ViceIoctl *blobp, int follow)
  {
      fs_ioctlRequest_t preq;
      long code;
      long temp;
      char fullPath[1000];
      HANDLE reqHandle;
  
      code = GetIoctlHandle(pathp, &reqHandle);
      if (code) {
--- 972,986 ----
      return 0;
  }
  
! static long
! pioctl_int(char *pathp, long opcode, struct ViceIoctl *blobp, int follow, int is_utf8)
  {
      fs_ioctlRequest_t preq;
      long code;
      long temp;
      char fullPath[1000];
      HANDLE reqHandle;
+     int save;
  
      code = GetIoctlHandle(pathp, &reqHandle);
      if (code) {
***************
*** 945,951 ****
  	strcpy(fullPath, "");
      }
  
!     MarshallString(&preq, fullPath);
      if (blobp->in_size) {
          if (blobp->in_size > sizeof(preq.data) - (preq.mp - preq.data)*sizeof(char)) {
              errno = E2BIG;
--- 1012,1018 ----
  	strcpy(fullPath, "");
      }
  
!     MarshallString(&preq, fullPath, is_utf8);
      if (blobp->in_size) {
          if (blobp->in_size > sizeof(preq.data) - (preq.mp - preq.data)*sizeof(char)) {
              errno = E2BIG;
***************
*** 971,978 ****
      if (temp != 0) {
  	CloseHandle(reqHandle);
  	errno = CMtoUNIXerror(temp);
!         if ( IoctlDebug() )
              fprintf(stderr, "pioctl temp != 0: 0x%X\r\n",temp);
  	return -1;
      }
  
--- 1038,1048 ----
      if (temp != 0) {
  	CloseHandle(reqHandle);
  	errno = CMtoUNIXerror(temp);
!         if ( IoctlDebug() ) {
!             save = errno;
              fprintf(stderr, "pioctl temp != 0: 0x%X\r\n",temp);
+             errno = save;
+         }
  	return -1;
      }
  
***************
*** 989,991 ****
--- 1059,1074 ----
      CloseHandle(reqHandle);
      return 0;
  }
+ 
+ long
+ pioctl_utf8(char * pathp, long opcode, struct ViceIoctl * blobp, int follow)
+ {
+     return pioctl_int(pathp, opcode, blobp, follow, TRUE);
+ }
+ 
+ long
+ pioctl(char * pathp, long opcode, struct ViceIoctl * blobp, int follow)
+ {
+     return pioctl_int(pathp, opcode, blobp, follow, FALSE);
+ }
+ 
Index: openafs/src/sys/pioctl_nt.h
diff -c openafs/src/sys/pioctl_nt.h:1.5 openafs/src/sys/pioctl_nt.h:1.5.14.1
*** openafs/src/sys/pioctl_nt.h:1.5	Tue Jul 15 19:16:54 2003
--- openafs/src/sys/pioctl_nt.h	Fri May  9 11:10:15 2008
***************
*** 28,31 ****
--- 28,34 ----
  extern long pioctl(char *pathp, long opcode, struct ViceIoctl *blob,
  		   int follow);
  
+ extern long pioctl_utf8(char *pathp, long opcode, struct ViceIoctl *blob,
+                         int follow);
+ 
  #endif /* OPENAFS_AFS_PIOCTL_H */
Index: openafs/src/tbudb/.cvsignore
diff -c openafs/src/tbudb/.cvsignore:1.1.4.2 openafs/src/tbudb/.cvsignore:1.1.2.3
*** openafs/src/tbudb/.cvsignore:1.1.4.2	Thu Jun 12 16:01:55 2008
--- openafs/src/tbudb/.cvsignore	Mon Jul 14 00:15:28 2008
***************
*** 1 ****
--- 1,8 ----
  Makefile
+ budb.h
+ budb.ss.c
+ budb.xdr.c
+ budb_client.h
+ budb_errs.c
+ budb_errs.h
+ budb_server
Index: openafs/src/tbutc/Makefile.in
diff -c openafs/src/tbutc/Makefile.in:1.15.4.1 openafs/src/tbutc/Makefile.in:1.15.4.2
*** openafs/src/tbutc/Makefile.in:1.15.4.1	Mon Apr 28 12:15:06 2008
--- openafs/src/tbutc/Makefile.in	Fri Jul 11 05:50:54 2008
***************
*** 30,36 ****
  LWPOBJS     =lock.o
  
  BUTCOBJS   =dbentries.o tcprocs.o lwps.o tcmain.o list.o recoverDb.o \
! 	    tcudbprocs.o dump.o tcstatus.o butc_xbsa.o \
              ${LWPOBJS} ${BUCOORDOBJS} ${VOLSEROBJS}
  
  BUTCINCLS=${TOP_INCDIR}/afs/partition.h \
--- 30,36 ----
  LWPOBJS     =lock.o
  
  BUTCOBJS   =dbentries.o tcprocs.o lwps.o tcmain.o list.o recoverDb.o \
! 	    tcudbprocs.o dump.o tcstatus.o butc_xbsa.o afsxbsa.o \
              ${LWPOBJS} ${BUCOORDOBJS} ${VOLSEROBJS}
  
  BUTCINCLS=${TOP_INCDIR}/afs/partition.h \
***************
*** 73,78 ****
--- 73,81 ----
  	$(AR) crv libbutm.a $(BUTMOBJS) AFS_component_version_number.o
  	${RANLIB} libbutm.a
  
+ afsxbsa.o: ${BUTC}/afsxbsa.c ${BUTC}/afsxbsa.h ${BUTCINCLS}
+ 	${CC} ${CFLAGS} -c ${BUTC}/afsxbsa.c
+ 
  dbentries.o: ${BUTC}/dbentries.c ${BUTCINCLS}
  	${CC} ${CFLAGS} -c ${BUTC}/dbentries.c
  
Index: openafs/src/tbutc/NTMakefile
diff -c openafs/src/tbutc/NTMakefile:1.16.4.2 openafs/src/tbutc/NTMakefile:1.16.4.4
*** openafs/src/tbutc/NTMakefile:1.16.4.2	Sat Feb  2 08:43:26 2008
--- openafs/src/tbutc/NTMakefile	Wed Jul  2 08:49:26 2008
***************
*** 96,102 ****
  	$(DESTDIR)\lib\afspthread.lib \
  !ENDIF
  	     $(DESTDIR)\lib\afsdes.lib \
! 	     $(DESTDIR)\lib\cm_dns.obj
  
  
  #	$(DESTDIR)\lib\afsauthent.lib \
--- 96,103 ----
  	$(DESTDIR)\lib\afspthread.lib \
  !ENDIF
  	     $(DESTDIR)\lib\afsdes.lib \
! 	     $(DESTDIR)\lib\cm_dns.obj \
!              $(DESTDIR)\lib\cm_nls.obj
  
  
  #	$(DESTDIR)\lib\afsauthent.lib \
***************
*** 119,124 ****
--- 120,126 ----
  	$(EXECONLINK) dnsapi.lib mpr.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  .c.$(OUT)\obj:
  	$(C2OBJ) -I$(BUCOORD) $<
Index: openafs/src/tptserver/.cvsignore
diff -c openafs/src/tptserver/.cvsignore:1.1.4.2 openafs/src/tptserver/.cvsignore:1.1.2.3
*** openafs/src/tptserver/.cvsignore:1.1.4.2	Thu Jun 12 16:01:59 2008
--- openafs/src/tptserver/.cvsignore	Mon Jul 14 00:15:29 2008
***************
*** 1 ****
--- 1,14 ----
  Makefile
+ db_verify
+ pt_util
+ pterror.c
+ pterror.h
+ ptint.cs.c
+ ptint.h
+ ptint.ss.c
+ ptint.xdr.c
+ pts
+ ptserver
+ readgroup
+ readpwd
+ testpt
Index: openafs/src/tubik/.cvsignore
diff -c openafs/src/tubik/.cvsignore:1.1.4.2 openafs/src/tubik/.cvsignore:1.1.2.3
*** openafs/src/tubik/.cvsignore:1.1.4.2	Thu Jun 12 16:01:59 2008
--- openafs/src/tubik/.cvsignore	Mon Jul 14 00:15:29 2008
***************
*** 1 ****
--- 1,15 ----
+ AFS_component_version_number.c
  Makefile
+ ubik.h
+ ubik_int.cs.c
+ ubik_int.h
+ ubik_int.ss.c
+ ubik_int.xdr.c
+ udebug
+ uerrors.c
+ utst_client
+ utst_int.cs.c
+ utst_int.h
+ utst_int.ss.c
+ utst_int.xdr.c
+ utst_server
Index: openafs/src/tviced/NTMakefile
diff -c openafs/src/tviced/NTMakefile:1.10.2.3 openafs/src/tviced/NTMakefile:1.10.2.4
*** openafs/src/tviced/NTMakefile:1.10.2.3	Wed Oct  3 11:19:06 2007
--- openafs/src/tviced/NTMakefile	Wed Jul  2 08:49:26 2008
***************
*** 110,115 ****
--- 110,116 ----
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  install:  $(EXEFILE)
  
Index: openafs/src/tviced/state_analyzer.c
diff -c openafs/src/tviced/state_analyzer.c:1.1.4.2 openafs/src/tviced/state_analyzer.c:1.1.4.3
*** openafs/src/tviced/state_analyzer.c:1.1.4.2	Tue Oct 30 11:16:47 2007
--- openafs/src/tviced/state_analyzer.c	Mon Jun 30 13:28:47 2008
***************
*** 18,24 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/tviced/state_analyzer.c,v 1.1.4.2 2007/10/30 15:16:47 shadow Exp $");
  
  #include <stdio.h>
  #include <errno.h>
--- 18,24 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/tviced/state_analyzer.c,v 1.1.4.3 2008/06/30 17:28:47 shadow Exp $");
  
  #include <stdio.h>
  #include <errno.h>
***************
*** 1827,1832 ****
--- 1827,1838 ----
  static int
  get_fe_hdr(void)
  {
+     if (!fe_cursor.cursor) {
+         if(get_fe(fe_cursor.idx)) {
+ 	    return 1;
+         }
+     }
+     
      memcpy(&fe_cursor.hdr, fe_cursor.cursor, sizeof(struct callback_state_entry_header));
      fe_cursor.hdr_valid = 1;
      return 0;
Index: openafs/src/tvlserver/.cvsignore
diff -c openafs/src/tvlserver/.cvsignore:1.1.4.2 openafs/src/tvlserver/.cvsignore:1.1.2.3
*** openafs/src/tvlserver/.cvsignore:1.1.4.2	Thu Jun 12 16:02:00 2008
--- openafs/src/tvlserver/.cvsignore	Mon Jul 14 00:15:29 2008
***************
*** 1 ****
--- 1,14 ----
+ AFS_component_version_number.c
+ Kvldbint.cs.c
+ Kvldbint.xdr.c
  Makefile
+ cnvldb
+ vl_errors.c
+ vlclient
+ vldb_check
+ vldbint.cs.c
+ vldbint.h
+ vldbint.ss.c
+ vldbint.xdr.c
+ vlserver
+ vlserver.h
Index: openafs/src/tvolser/.cvsignore
diff -c openafs/src/tvolser/.cvsignore:1.1 openafs/src/tvolser/.cvsignore:1.1.14.1
*** openafs/src/tvolser/.cvsignore:1.1	Wed Jun 23 09:35:20 2004
--- openafs/src/tvolser/.cvsignore	Mon Jul 14 00:15:29 2008
***************
*** 1,3 ****
--- 1,6 ----
  AFS_component_version_number.c
  Makefile
+ vl_errors.c
+ vlserver.h
  volserver
+ vos
Index: openafs/src/tvolser/Makefile.in
diff -c openafs/src/tvolser/Makefile.in:1.4.2.2 openafs/src/tvolser/Makefile.in:1.4.2.3
*** openafs/src/tvolser/Makefile.in:1.4.2.2	Thu Apr  3 12:17:58 2008
--- openafs/src/tvolser/Makefile.in	Thu Jul 17 20:24:13 2008
***************
*** 233,239 ****
  ${DEST}/root.server/usr/afs/bin/vos: vos
  	${INSTALL} -ns $? $@
  
! install: ${DESTDIR}${afssrvlibexecdir}/volserver ${DESTDIR}${afssrvlibexecdir}/vos
  clean:
  	$(RM) -f *.o volserver vos core AFS_component_version_number.c
  
--- 233,239 ----
  ${DEST}/root.server/usr/afs/bin/vos: vos
  	${INSTALL} -ns $? $@
  
! install: ${DESTDIR}${afssrvlibexecdir}/volserver ${DESTDIR}${afssrvsbindir}/vos
  clean:
  	$(RM) -f *.o volserver vos core AFS_component_version_number.c
  
***************
*** 242,248 ****
  ${DESTDIR}${afssrvlibexecdir}/volserver: volserver
  	${INSTALL} -ns $? $@
  
! ${DESTDIR}${afssrvlibexecdir}/vos: vos
  	${INSTALL} -ns $? $@
  
  dest: ${DEST}/root.server/usr/afs/bin/volserver ${DEST}/root.server/usr/afs/bin/vos
--- 242,248 ----
  ${DESTDIR}${afssrvlibexecdir}/volserver: volserver
  	${INSTALL} -ns $? $@
  
! ${DESTDIR}${afssrvsbindir}/vos: vos
  	${INSTALL} -ns $? $@
  
  dest: ${DEST}/root.server/usr/afs/bin/volserver ${DEST}/root.server/usr/afs/bin/vos
Index: openafs/src/tvolser/NTMakefile
diff -c openafs/src/tvolser/NTMakefile:1.1 openafs/src/tvolser/NTMakefile:1.1.4.1
*** openafs/src/tvolser/NTMakefile:1.1	Mon Mar 20 11:01:22 2006
--- openafs/src/tvolser/NTMakefile	Wed Jul  2 08:49:27 2008
***************
*** 74,79 ****
--- 74,80 ----
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  $(VOLSEROBJS): $(VOLSER)\$$(@B).c
          $(C2OBJ) -I$(VOLSER) -I$(UTIL) $**
Index: openafs/src/ubik/NTMakefile
diff -c openafs/src/ubik/NTMakefile:1.9.4.2 openafs/src/ubik/NTMakefile:1.9.4.3
*** openafs/src/ubik/NTMakefile:1.9.4.2	Sat Feb  2 08:43:26 2008
--- openafs/src/ubik/NTMakefile	Wed Jul  2 08:49:27 2008
***************
*** 71,76 ****
--- 71,77 ----
  	$(EXECONLINK) iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)  
+         $(CODESIGN_USERLAND)
  
  $(CL_UDBG_EXEFILE): $(RS_UDBG_EXEFILE)
  	$(COPY) $** $@
***************
*** 127,136 ****
--- 128,139 ----
  utst_server: $(OUT)\utst_server.obj $(OUT)\utst_int.ss.obj $(OUT)\utst_int.xdr.obj  $(EXELIBS)
  	$(EXECONLINK) 
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  	
  utst_client: $(OUT)\utst_client.obj $(OUT)\utst_int.cs.obj $(OUT)\utst_int.xdr.obj $(EXELIBS)
  	$(EXECONLINK) 
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  	
  # rxgen on utst_int.xg
  utst_int.ss.c utst_int.cs.c utst_int.xdr.c utst_int.h: utst_int.xg
Index: openafs/src/ubik/ubik.c
diff -c openafs/src/ubik/ubik.c:1.15.14.5 openafs/src/ubik/ubik.c:1.15.14.6
*** openafs/src/ubik/ubik.c:1.15.14.5	Mon Apr 28 17:48:11 2008
--- openafs/src/ubik/ubik.c	Mon Jun 30 23:06:20 2008
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/ubik/ubik.c,v 1.15.14.5 2008/04/28 21:48:11 shadow Exp $");
  
  #include <sys/types.h>
  #ifdef AFS_NT40_ENV
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/ubik/ubik.c,v 1.15.14.6 2008/07/01 03:06:20 shadow Exp $");
  
  #include <sys/types.h>
  #ifdef AFS_NT40_ENV
***************
*** 299,305 ****
      assert(pthread_create(&rxServerThread, &rxServer_tattr, (void *)rx_ServerProc, NULL) == 0);
  #else
      LWP_CreateProcess(rx_ServerProc, rx_stackSize, RX_PROCESS_PRIORITY,
!               (void *)0, "rx_ServerProc", &junk);
  #endif
  
      /* do basic initialization */
--- 299,305 ----
      assert(pthread_create(&rxServerThread, &rxServer_tattr, (void *)rx_ServerProc, NULL) == 0);
  #else
      LWP_CreateProcess(rx_ServerProc, rx_stackSize, RX_PROCESS_PRIORITY,
!               NULL, "rx_ServerProc", &junk);
  #endif
  
      /* do basic initialization */
Index: openafs/src/ubik/udebug.c
diff -c openafs/src/ubik/udebug.c:1.18.4.3.2.1 openafs/src/ubik/udebug.c:1.18.4.4
*** openafs/src/ubik/udebug.c:1.18.4.3.2.1	Sun May 25 09:50:50 2008
--- openafs/src/ubik/udebug.c	Sat May 10 11:21:19 2008
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/ubik/udebug.c,v 1.18.4.3.2.1 2008/05/25 13:50:50 shadow Exp $");
  
  #include <sys/types.h>
  #include <stdlib.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/ubik/udebug.c,v 1.18.4.4 2008/05/10 15:21:19 jaltman Exp $");
  
  #include <sys/types.h>
  #include <stdlib.h>
Index: openafs/src/update/NTMakefile
diff -c openafs/src/update/NTMakefile:1.9.4.2 openafs/src/update/NTMakefile:1.9.4.4
*** openafs/src/update/NTMakefile:1.9.4.2	Sat Feb  2 08:43:26 2008
--- openafs/src/update/NTMakefile	Wed Jul  2 08:49:27 2008
***************
*** 22,28 ****
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afsrxkad.lib \
  	$(DESTDIR)\lib\afs\afsprocmgmt.lib \
! 	$(DESTDIR)\lib\cm_dns.obj
  
  ############################################################################
  # Definitions for generating files via RXGEN
--- 22,29 ----
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afsrxkad.lib \
  	$(DESTDIR)\lib\afs\afsprocmgmt.lib \
! 	$(DESTDIR)\lib\cm_dns.obj \
!         $(DESTDIR)\lib\cm_nls.obj
  
  ############################################################################
  # Definitions for generating files via RXGEN
***************
*** 54,59 ****
--- 55,61 ----
  	$(EXECONLINK) dnsapi.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # upclient
***************
*** 70,75 ****
--- 72,78 ----
  	$(EXECONLINK) dnsapi.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # generate versioninfo resources
Index: openafs/src/usd/test/NTMakefile
diff -c openafs/src/usd/test/NTMakefile:1.5 openafs/src/usd/test/NTMakefile:1.5.4.1
*** openafs/src/usd/test/NTMakefile:1.5	Sun Nov 20 20:57:35 2005
--- openafs/src/usd/test/NTMakefile	Wed Jul  2 08:49:27 2008
***************
*** 20,25 ****
--- 20,26 ----
  $(OUT)\usd_test.exe: $(OUT)\usd_test.obj $(LIBFILE) $(LIBUTIL)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  mkdir:
  	
Index: openafs/src/util/softsig.c
diff -c openafs/src/util/softsig.c:1.10.2.1 openafs/src/util/softsig.c:1.10.2.2
*** openafs/src/util/softsig.c:1.10.2.1	Wed Oct 31 00:26:18 2007
--- openafs/src/util/softsig.c	Wed Jul 16 00:25:25 2008
***************
*** 37,43 ****
  static struct {
      void (*handler) (int);
      int pending;
! #if !defined(AFS_DARWIN60_ENV) || defined(AFS_NBSD30_ENV) || !defined(AFS_NBSD_ENV)
      int fatal;
  #endif /* !defined(AFS_DARWIN60_ENV) || !defined(AFS_NBSD_ENV) */
      int inited;
--- 37,43 ----
  static struct {
      void (*handler) (int);
      int pending;
! #if !(defined(AFS_DARWIN60_ENV) || (defined(AFS_NBSD_ENV) && !defined(AFS_NBSD30_ENV)))
      int fatal;
  #endif /* !defined(AFS_DARWIN60_ENV) || !defined(AFS_NBSD_ENV) */
      int inited;
Index: openafs/src/util/volparse.c
diff -c openafs/src/util/volparse.c:1.11.14.1.2.1 openafs/src/util/volparse.c:1.11.14.3
*** openafs/src/util/volparse.c:1.11.14.1.2.1	Thu Jun 12 15:23:49 2008
--- openafs/src/util/volparse.c	Tue Jul  1 14:33:38 2008
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/util/volparse.c,v 1.11.14.1.2.1 2008/06/12 19:23:49 shadow Exp $");
  
  #include <string.h>
  #ifdef HAVE_STDLIB_H
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/util/volparse.c,v 1.11.14.3 2008/07/01 18:33:38 shadow Exp $");
  
  #include <string.h>
  #ifdef HAVE_STDLIB_H
***************
*** 119,125 ****
      if (strlcat(tbuffer, tempString, buflen) >= buflen) {
  	return -1;
      }
!     return tbuffer;
  }
  
  #define BAD_VID "BAD VOLUME ID"
--- 119,125 ----
      if (strlcat(tbuffer, tempString, buflen) >= buflen) {
  	return -1;
      }
!     return 0;
  }
  
  #define BAD_VID "BAD VOLUME ID"
Index: openafs/src/util/test/NTMakefile
diff -c openafs/src/util/test/NTMakefile:1.5 openafs/src/util/test/NTMakefile:1.5.4.1
*** openafs/src/util/test/NTMakefile:1.5	Sun Nov 20 20:57:37 2005
--- openafs/src/util/test/NTMakefile	Wed Jul  2 08:49:27 2008
***************
*** 16,21 ****
--- 16,22 ----
  $(OUT)\dirpath_test.exe: $(OUT)\dirpath_test.obj $(LIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  test tests: $(OUT)\dirpath_test.exe
  
Index: openafs/src/venus/fs.c
diff -c openafs/src/venus/fs.c:1.30.2.13.2.3 openafs/src/venus/fs.c:1.30.2.16
*** openafs/src/venus/fs.c:1.30.2.13.2.3	Fri May 23 10:25:32 2008
--- openafs/src/venus/fs.c	Fri May 23 10:25:12 2008
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/venus/fs.c,v 1.30.2.13.2.3 2008/05/23 14:25:32 shadow Exp $");
  
  #include <afs/afs_args.h>
  #include <rx/xdr.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/venus/fs.c,v 1.30.2.16 2008/05/23 14:25:12 shadow Exp $");
  
  #include <afs/afs_args.h>
  #include <rx/xdr.h>
Index: openafs/src/viced/NTMakefile
diff -c openafs/src/viced/NTMakefile:1.6.2.5 openafs/src/viced/NTMakefile:1.6.2.6
*** openafs/src/viced/NTMakefile:1.6.2.5	Fri Dec 14 08:35:39 2007
--- openafs/src/viced/NTMakefile	Wed Jul  2 08:49:28 2008
***************
*** 64,69 ****
--- 64,70 ----
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # Build cbd - not generally distributed debugging program
***************
*** 77,82 ****
--- 78,84 ----
  $(CBD): $(OUT)\cbd.obj $(CBDRES)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # generate versioninfo resources
Index: openafs/src/viced/afsfileprocs.c
diff -c openafs/src/viced/afsfileprocs.c:1.113.2.24 openafs/src/viced/afsfileprocs.c:1.113.2.25
*** openafs/src/viced/afsfileprocs.c:1.113.2.24	Thu Mar  6 11:55:46 2008
--- openafs/src/viced/afsfileprocs.c	Mon Jul 14 09:42:30 2008
***************
*** 29,35 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/viced/afsfileprocs.c,v 1.113.2.24 2008/03/06 16:55:46 shadow Exp $");
  
  #include <stdio.h>
  #include <stdlib.h>
--- 29,35 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/viced/afsfileprocs.c,v 1.113.2.25 2008/07/14 13:42:30 shadow Exp $");
  
  #include <stdio.h>
  #include <stdlib.h>
***************
*** 559,564 ****
--- 559,572 ----
  	     * must check local_errorCode because demand attach fs
  	     * can have local_errorCode == VSALVAGING, errorCode == VBUSY */
  	    else if (local_errorCode == VBUSY && lock == READ_LOCK) {
+ #ifdef AFS_DEMAND_ATTACH_FS
+ 		/* DAFS case is complicated by the fact that local_errorCode can
+ 		 * be VBUSY in cases where the volume is truly offline */
+ 		if (!*volptr) {
+ 		    /* volume is in VOL_STATE_UNATTACHED */
+ 		    return (errorCode);
+ 		}
+ #endif /* AFS_DEMAND_ATTACH_FS */
  		errorCode = 0;
  		break;
  	    } else if (errorCode)
Index: openafs/src/viced/viced.c
diff -c openafs/src/viced/viced.c:1.75.2.22.2.1 openafs/src/viced/viced.c:1.75.2.23
*** openafs/src/viced/viced.c:1.75.2.22.2.1	Tue May 20 15:33:24 2008
--- openafs/src/viced/viced.c	Fri May  9 14:50:57 2008
***************
*** 22,28 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/viced/viced.c,v 1.75.2.22.2.1 2008/05/20 19:33:24 shadow Exp $");
  
  #include <stdio.h>
  #include <stdlib.h>
--- 22,28 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/viced/viced.c,v 1.75.2.23 2008/05/09 18:50:57 shadow Exp $");
  
  #include <stdio.h>
  #include <stdlib.h>
Index: openafs/src/vlserver/NTMakefile
diff -c openafs/src/vlserver/NTMakefile:1.10.4.5 openafs/src/vlserver/NTMakefile:1.10.4.10
*** openafs/src/vlserver/NTMakefile:1.10.4.5	Sun Mar 30 00:17:15 2008
--- openafs/src/vlserver/NTMakefile	Wed Jul  2 08:49:28 2008
***************
*** 21,26 ****
--- 21,29 ----
  	$(INCFILEDIR)\vlserver.h \
  	$(INCFILEDIR)\vldbint.h
  
+ $(INCFILEDIR)\vl_opcodes.h: vl_opcodes.h
+ 	$(COPY) vl_opcodes.h $(INCFILEDIR)\vl_opcodes.h
+         
  ############################################################################
  # build afsvldb.lib
  
***************
*** 85,96 ****
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afs\afsreg.lib \
  	$(DESTDIR)\lib\afs\afsprocmgmt.lib \
! 	$(DESTDIR)\lib\cm_dns.obj
  
  $(VLSERVER): $(VLSERVER_EXEOBJS) $(LIBFILE) $(VLSERVER_EXECLIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
  
  ############################################################################
  # generate versioninfo resources
--- 88,101 ----
  	$(DESTDIR)\lib\afs\afseventlog.lib \
  	$(DESTDIR)\lib\afs\afsreg.lib \
  	$(DESTDIR)\lib\afs\afsprocmgmt.lib \
! 	$(DESTDIR)\lib\cm_dns.obj \
!         $(DESTDIR)\lib\cm_nls.obj
  
  $(VLSERVER): $(VLSERVER_EXEOBJS) $(LIBFILE) $(VLSERVER_EXECLIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # generate versioninfo resources
***************
*** 100,108 ****
  ############################################################################
  # rxgen on vldbint.xg
  
- $(INCFILES):$$(@F)
- 	 $(COPY)  $** $(INCFILEDIR)\.
- 
  vldbint.cs.c: vldbint.xg vldbint.h
  	$(RXGEN) -u -x -C -o $@ vldbint.xg
  
--- 105,110 ----
***************
*** 114,119 ****
--- 116,123 ----
  
  vldbint.h: vldbint.xg
  	$(RXGEN) -u -x -h -o $@ vldbint.xg
+ 
+ $(INCFILEDIR)\vldbint.h: vldbint.h
  	$(COPY) vldbint.h $(INCFILEDIR)\vldbint.h
  
  ############################################################################
***************
*** 123,128 ****
--- 127,134 ----
  vlserver.h vl_errors.c: vl_errors.et vlserver.p.h
  	$(DEL) vlserver.h vl_errors.c
  	$(COMPILE_ET) vl_errors  -h vlserver
+ 
+ $(INCFILEDIR)\vlserver.h: vlserver.h
  	$(COPY) vlserver.h $(INCFILEDIR)\vlserver.h
  
  ############################################################################
***************
*** 137,142 ****
--- 143,149 ----
  $(OUT)\vldb_check.exe: $(OUT)\vldb_check.obj $(VLDB_CHECK_LIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # build local vlclient
***************
*** 147,152 ****
--- 154,160 ----
  $(OUT)\vlclient.exe: $(OUT)\vlclient.obj  $(LIBFILE) $(VLSERVER_EXECLIBS) $(VLCLIENT_LIBS)
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  
  ############################################################################
Index: openafs/src/vol/NTMakefile
diff -c openafs/src/vol/NTMakefile:1.9.2.3 openafs/src/vol/NTMakefile:1.9.2.4
*** openafs/src/vol/NTMakefile:1.9.2.3	Mon Feb  4 17:43:15 2008
--- openafs/src/vol/NTMakefile	Wed Jul  2 08:49:28 2008
***************
*** 88,93 ****
--- 88,94 ----
  	$(EXECONLINK) shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  
  ############################################################################
***************
*** 103,108 ****
--- 104,110 ----
  	$(EXECONLINK) shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # build volinfo
***************
*** 112,117 ****
--- 114,120 ----
  	$(EXECONLINK) shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # build volinfo
***************
*** 121,126 ****
--- 124,130 ----
  	$(EXECONLINK) shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # generate versioninfo resources
Index: openafs/src/vol/daemon_com.c
diff -c openafs/src/vol/daemon_com.c:1.3.4.7.2.1 openafs/src/vol/daemon_com.c:1.3.4.8
*** openafs/src/vol/daemon_com.c:1.3.4.7.2.1	Thu Jun 12 15:23:52 2008
--- openafs/src/vol/daemon_com.c	Thu Jun 12 15:18:49 2008
***************
*** 22,28 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/daemon_com.c,v 1.3.4.7.2.1 2008/06/12 19:23:52 shadow Exp $");
  
  #include <sys/types.h>
  #include <stdio.h>
--- 22,28 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/daemon_com.c,v 1.3.4.8 2008/06/12 19:18:49 shadow Exp $");
  
  #include <sys/types.h>
  #include <stdio.h>
Index: openafs/src/vol/fssync-debug.c
diff -c openafs/src/vol/fssync-debug.c:1.1.4.4.2.1 openafs/src/vol/fssync-debug.c:1.1.4.5
*** openafs/src/vol/fssync-debug.c:1.1.4.4.2.1	Thu Jun 12 15:23:52 2008
--- openafs/src/vol/fssync-debug.c	Thu Jun 12 15:18:49 2008
***************
*** 19,25 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/fssync-debug.c,v 1.1.4.4.2.1 2008/06/12 19:23:52 shadow Exp $");
  
  #include <stdlib.h>
  #include <stdio.h>
--- 19,25 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/fssync-debug.c,v 1.1.4.5 2008/06/12 19:18:49 shadow Exp $");
  
  #include <stdlib.h>
  #include <stdio.h>
Index: openafs/src/vol/fssync-server.c
diff -c openafs/src/vol/fssync-server.c:1.1.4.10.2.1 openafs/src/vol/fssync-server.c:1.1.4.11
*** openafs/src/vol/fssync-server.c:1.1.4.10.2.1	Thu Jun 12 15:23:52 2008
--- openafs/src/vol/fssync-server.c	Thu Jun 12 15:18:49 2008
***************
*** 53,59 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/fssync-server.c,v 1.1.4.10.2.1 2008/06/12 19:23:52 shadow Exp $");
  
  #include <sys/types.h>
  #include <stdio.h>
--- 53,59 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/fssync-server.c,v 1.1.4.11 2008/06/12 19:18:49 shadow Exp $");
  
  #include <sys/types.h>
  #include <stdio.h>
Index: openafs/src/vol/partition.c
diff -c openafs/src/vol/partition.c:1.33.2.5.2.1 openafs/src/vol/partition.c:1.33.2.6
*** openafs/src/vol/partition.c:1.33.2.5.2.1	Thu Jun 12 15:23:52 2008
--- openafs/src/vol/partition.c	Thu Jun 12 15:18:49 2008
***************
*** 22,28 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/partition.c,v 1.33.2.5.2.1 2008/06/12 19:23:52 shadow Exp $");
  
  #include <ctype.h>
  #include <string.h>
--- 22,28 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/partition.c,v 1.33.2.6 2008/06/12 19:18:49 shadow Exp $");
  
  #include <ctype.h>
  #include <string.h>
Index: openafs/src/vol/purge.c
diff -c openafs/src/vol/purge.c:1.12.2.4.2.1 openafs/src/vol/purge.c:1.12.2.5
*** openafs/src/vol/purge.c:1.12.2.4.2.1	Thu Jun 12 15:23:52 2008
--- openafs/src/vol/purge.c	Thu Jun 12 15:18:49 2008
***************
*** 17,23 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/purge.c,v 1.12.2.4.2.1 2008/06/12 19:23:52 shadow Exp $");
  
  #include <stdio.h>
  #ifdef AFS_NT40_ENV
--- 17,23 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/purge.c,v 1.12.2.5 2008/06/12 19:18:49 shadow Exp $");
  
  #include <stdio.h>
  #ifdef AFS_NT40_ENV
Index: openafs/src/vol/salvsync-server.c
diff -c openafs/src/vol/salvsync-server.c:1.1.4.9.2.1 openafs/src/vol/salvsync-server.c:1.1.4.10
*** openafs/src/vol/salvsync-server.c:1.1.4.9.2.1	Thu Jun 12 15:23:52 2008
--- openafs/src/vol/salvsync-server.c	Thu Jun 12 15:18:49 2008
***************
*** 27,33 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/salvsync-server.c,v 1.1.4.9.2.1 2008/06/12 19:23:52 shadow Exp $");
  
  #include <sys/types.h>
  #include <stdio.h>
--- 27,33 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/salvsync-server.c,v 1.1.4.10 2008/06/12 19:18:49 shadow Exp $");
  
  #include <sys/types.h>
  #include <stdio.h>
Index: openafs/src/vol/vol-salvage.c
diff -c openafs/src/vol/vol-salvage.c:1.51.2.12.2.3 openafs/src/vol/vol-salvage.c:1.51.2.15
*** openafs/src/vol/vol-salvage.c:1.51.2.12.2.3	Sun Jun 22 22:49:26 2008
--- openafs/src/vol/vol-salvage.c	Thu Jun 12 15:18:50 2008
***************
*** 87,93 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/vol-salvage.c,v 1.51.2.12.2.3 2008/06/23 02:49:26 jaltman Exp $");
  
  #ifndef AFS_NT40_ENV
  #include <sys/param.h>
--- 87,93 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/vol-salvage.c,v 1.51.2.15 2008/06/12 19:18:50 shadow Exp $");
  
  #ifndef AFS_NT40_ENV
  #include <sys/param.h>
Index: openafs/src/vol/volume.c
diff -c openafs/src/vol/volume.c:1.43.2.20.2.1 openafs/src/vol/volume.c:1.43.2.21
*** openafs/src/vol/volume.c:1.43.2.20.2.1	Thu Jun 12 15:23:52 2008
--- openafs/src/vol/volume.c	Thu Jun 12 15:18:50 2008
***************
*** 22,28 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/volume.c,v 1.43.2.20.2.1 2008/06/12 19:23:52 shadow Exp $");
  
  #include <rx/xdr.h>
  #include <afs/afsint.h>
--- 22,28 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/vol/volume.c,v 1.43.2.21 2008/06/12 19:18:50 shadow Exp $");
  
  #include <rx/xdr.h>
  #include <afs/afsint.h>
Index: openafs/src/vol/volume_inline.h
diff -c openafs/src/vol/volume_inline.h:1.1.2.5 openafs/src/vol/volume_inline.h:1.1.2.6
*** openafs/src/vol/volume_inline.h:1.1.2.5	Mon Apr 21 14:55:48 2008
--- openafs/src/vol/volume_inline.h	Thu Jul 10 14:14:54 2008
***************
*** 37,44 ****
   *   @retval 1  yes, state is mutually exclusive
   *
   * @note DEMAND_ATTACH_FS only
-  *
-  * @note should VOL_STATE_SALVSYNC_REQ be treated as exclusive?
   */
  static_inline int
  VIsExclusiveState(VolState state)
--- 37,42 ----
***************
*** 51,56 ****
--- 49,55 ----
      case VOL_STATE_HDR_ATTACHING:
      case VOL_STATE_OFFLINING:
      case VOL_STATE_DETACHING:
+     case VOL_STATE_SALVSYNC_REQ:
      case VOL_STATE_VNODE_ALLOC:
      case VOL_STATE_VNODE_GET:
      case VOL_STATE_VNODE_CLOSE:
Index: openafs/src/vol/test/NTMakefile
diff -c openafs/src/vol/test/NTMakefile:1.5 openafs/src/vol/test/NTMakefile:1.5.4.1
*** openafs/src/vol/test/NTMakefile:1.5	Sun Nov 20 20:57:44 2005
--- openafs/src/vol/test/NTMakefile	Wed Jul  2 08:49:28 2008
***************
*** 29,34 ****
--- 29,35 ----
  $(ILIST): $(OUT)\ilist_nt.obj $(EXEC_LIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  
  ############################################################################
***************
*** 38,43 ****
--- 39,45 ----
  $(LTLIST): $(OUT)\ltlist.obj $(EXEC_LIBS)
  	$(EXECONLINK)
          $(_VC_MANIFEST_EMBED_EXE)
+         $(CODESIGN_USERLAND)
  
  mkdir:
  	
Index: openafs/src/volser/NTMakefile
diff -c openafs/src/volser/NTMakefile:1.11.2.3 openafs/src/volser/NTMakefile:1.11.2.5
*** openafs/src/volser/NTMakefile:1.11.2.3	Thu Apr 10 13:52:26 2008
--- openafs/src/volser/NTMakefile	Wed Jul  2 08:49:29 2008
***************
*** 70,76 ****
  	$(DESTDIR)\lib\afs\afsacl.lib \
  	$(DESTDIR)\lib\afs\afsreg.lib \
  	$(DESTDIR)\lib\afs\afseventlog.lib \
!      $(DESTDIR)\lib\cm_dns.obj
  
  
  ############################################################################
--- 70,77 ----
  	$(DESTDIR)\lib\afs\afsacl.lib \
  	$(DESTDIR)\lib\afs\afsreg.lib \
  	$(DESTDIR)\lib\afs\afseventlog.lib \
!         $(DESTDIR)\lib\cm_dns.obj \
!         $(DESTDIR)\lib\cm_nls.obj
  
  
  ############################################################################
***************
*** 100,105 ****
--- 101,107 ----
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  ############################################################################
  # Build vos
***************
*** 126,131 ****
--- 128,134 ----
  	$(EXECONLINK) dnsapi.lib mpr.lib iphlpapi.lib shell32.lib
          $(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP) 
+         $(CODESIGN_USERLAND)
  
  $(CL_VOS_EXEFILE): $(RS_VOS_EXEFILE)
  	$(COPY)  $** $@
Index: openafs/src/volser/volprocs.c
diff -c openafs/src/volser/volprocs.c:1.42.2.14.2.1 openafs/src/volser/volprocs.c:1.42.2.16
*** openafs/src/volser/volprocs.c:1.42.2.14.2.1	Thu Jun 12 15:23:53 2008
--- openafs/src/volser/volprocs.c	Wed Jul 16 00:15:57 2008
***************
*** 13,19 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/volser/volprocs.c,v 1.42.2.14.2.1 2008/06/12 19:23:53 shadow Exp $");
  
  #include <stdio.h>
  #include <sys/types.h>
--- 13,19 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/volser/volprocs.c,v 1.42.2.16 2008/07/16 04:15:57 shadow Exp $");
  
  #include <stdio.h>
  #include <sys/types.h>
***************
*** 843,848 ****
--- 843,853 ----
  	LogError(error);
  	goto fail;
      }
+     /* VUpdateVolume succeeded. Mark it in service so there's no window 
+      * between FSYNC_VOL_ON and VolSetFlags where it's offline with no  
+      * specialStatus; this is a reclone and this volume started online  
+      */
+     V_inService(clonevp) = 1;
      VDetachVolume(&error, clonevp);	/* allow file server to get it's hands on it */
      clonevp = NULL;
      VUpdateVolume(&error, originalvp);
Index: openafs/src/volser/vos.c
diff -c openafs/src/volser/vos.c:1.55.2.16.2.1 openafs/src/volser/vos.c:1.55.2.17
*** openafs/src/volser/vos.c:1.55.2.16.2.1	Wed May 21 23:52:01 2008
--- openafs/src/volser/vos.c	Wed May 21 23:51:46 2008
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/volser/vos.c,v 1.55.2.16.2.1 2008/05/22 03:52:01 shadow Exp $");
  
  #include <sys/types.h>
  #include <string.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/volser/vos.c,v 1.55.2.17 2008/05/22 03:51:46 shadow Exp $");
  
  #include <sys/types.h>
  #include <string.h>
Index: openafs/src/volser/vsprocs.c
diff -c openafs/src/volser/vsprocs.c:1.38.2.18.2.1 openafs/src/volser/vsprocs.c:1.38.2.19
*** openafs/src/volser/vsprocs.c:1.38.2.18.2.1	Wed May 21 16:16:39 2008
--- openafs/src/volser/vsprocs.c	Wed May 21 16:16:20 2008
***************
*** 11,17 ****
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/volser/vsprocs.c,v 1.38.2.18.2.1 2008/05/21 20:16:39 shadow Exp $");
  
  #include <stdio.h>
  #include <sys/types.h>
--- 11,17 ----
  #include <afs/param.h>
  
  RCSID
!     ("$Header: /cvs/openafs/src/volser/vsprocs.c,v 1.38.2.19 2008/05/21 20:16:20 shadow Exp $");
  
  #include <stdio.h>
  #include <sys/types.h>
Index: openafs/src/xstat/NTMakefile
diff -c openafs/src/xstat/NTMakefile:1.2 openafs/src/xstat/NTMakefile:1.2.6.1
*** openafs/src/xstat/NTMakefile:1.2	Sun Mar  5 22:11:31 2006
--- openafs/src/xstat/NTMakefile	Wed Jul  2 08:49:29 2008
***************
*** 51,56 ****
--- 51,57 ----
  	$(EXECONLINK) rpcrt4.lib
  	$(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  #
  # Cache Manager data collection
***************
*** 64,69 ****
--- 65,71 ----
  	$(EXECONLINK) 
  	$(_VC_MANIFEST_EMBED_EXE)
  	$(EXEPREP)
+         $(CODESIGN_USERLAND)
  
  #
  # Misc targets
